# Feature 05

> A centered product title over three icon features, a large product photo and a product card with finish swatches and a CTA.

A shadcn/ui block from the [@flx](https://ui.flexnative.com/?utm_source=shadcn.exchange) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/flx/feature-05).

- Page, with a live preview: https://shadcn.exchange/r/flx/feature-05
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/flx/feature-05-light-98c29efb497a8480.png
- Registry item: https://ui.flexnative.com/r/feature-05.json
- Listed: 2026-10-23, source last changed 2026-10-23

## Install

```bash
npx shadcn@latest add https://shadcn.exchange/r/flx/feature-05.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`, `react-wrap-balancer`
- Registry items: `button`

## Files

### `registry/blocks/feature/feature-05/feature-05.tsx`

```tsx
import { ArrowRight, Feather, Leaf, Ruler } from 'lucide-react'
import Balancer from 'react-wrap-balancer'

import { Button } from '@/components/ui/button'

const features = [
  {
    title: 'Comfort',
    description:
      'Layered foam and a sprung seat that holds its shape through years of reading.',
    icon: Feather,
  },
  {
    title: 'Materials',
    description:
      'Solid beech legs and a washable linen cover, finished with natural oils.',
    icon: Leaf,
  },
  {
    title: 'Proportion',
    description:
      'A low, generous seat sized for small rooms without feeling small itself.',
    icon: Ruler,
  },
]

const finishes = [
  { name: 'Chalk', className: 'bg-background' },
  { name: 'Stone', className: 'bg-muted' },
  { name: 'Graphite', className: 'bg-muted-foreground' },
  { name: 'Ink', className: 'bg-foreground' },
]

export function Feature05() {
  return (
    <section className="bg-background w-full overflow-hidden">
      <div className="mx-auto flex max-w-7xl flex-col gap-12 px-6 py-20 sm:gap-16 sm:py-28">
        <div className="mx-auto flex max-w-2xl flex-col items-center gap-4 text-center">
          <h2 className="text-foreground text-3xl font-normal tracking-[0.04em] uppercase sm:text-5xl">
            <Balancer>The Reading Chair</Balancer>
          </h2>
          <p className="text-muted-foreground text-base sm:text-lg">
            <Balancer>A quiet seat for long afternoons and slow books</Balancer>
          </p>
        </div>

        <div className="grid grid-cols-1 items-center gap-12 md:grid-cols-2 lg:grid-cols-[1fr_minmax(0,1.3fr)_1fr] lg:gap-10">
          <div className="bg-muted relative mx-auto aspect-[4/5] w-full max-w-md overflow-hidden rounded-3xl outline outline-black/10 md:col-span-2 lg:order-2 lg:col-span-1 lg:max-w-none dark:outline-white/10">
            <img
              src="https://images.unsplash.com/photo-1567538096630-e0c55bd6374c?q=80&w=1200&auto=format&fit=crop"
              alt="Alt"
              decoding="async"
              className="size-full scale-125 object-cover object-[50%_70%] grayscale"
            />
          </div>

          <ul className="flex flex-col gap-8 lg:order-1">
            {features.map((feature) => (
              <li key={feature.title} className="flex flex-col gap-2">
                <h3 className="text-foreground flex items-center gap-3 text-base font-medium tracking-[0.06em] uppercase">
                  <feature.icon
                    aria-hidden
                    className="text-muted-foreground size-5"
                  />
                  {feature.title}
                </h3>
                <p className="text-muted-foreground max-w-xs text-sm leading-relaxed sm:text-base">
                  {feature.description}
                </p>
              </li>
            ))}
          </ul>

          <div className="flex flex-col items-start gap-6 lg:order-3">
            <div className="flex flex-col gap-2">
              <h3 className="text-foreground text-lg font-medium tracking-[0.04em] uppercase">
                Atelier Lounge Chair
              </h3>
              <p className="text-muted-foreground max-w-xs text-sm leading-relaxed sm:text-base">
                A deep, tufted seat built by hand in small batches, ready to
                ship in four finishes.
              </p>
            </div>

            <ul className="flex items-center gap-2">
              {finishes.map((finish) => (
                <li key={finish.name}>
                  <span
                    title={finish.name}
                    className={`${finish.className} border-border block size-6 rounded-full border`}
                  />
                  <span className="sr-only">{finish.name}</span>
                </li>
              ))}
            </ul>

            <Button
              size="lg"
              className="w-fit gap-2 rounded-full px-6"
              nativeButton={false}
              render={<a href="#" />}
            >
              View details
              <ArrowRight className="size-4" />
            </Button>
          </div>
        </div>
      </div>
    </section>
  )
}
```
