# Minimal Figures Bento

> Plain bento: a heading above four cards in a three-column grid, two of them wide, each with a large figure, a title and a line of copy. Theme tokens only, light and dark.

A shadcn/ui block from the [@01orbital](https://01orbital.dev/?utm_source=shadcn.exchange) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/01orbital/minimal-bento-01).

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

## Install

```bash
npx shadcn@latest add https://shadcn.exchange/r/01orbital/minimal-bento-01.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: `cn`
- Registry items: `card`, `@01orbital/font-hanken-grotesk`, `@01orbital/heading`, `@01orbital/section`

## Files

### `blocks/bento/minimal-bento-01/index.tsx`

```tsx
import { cn } from "cn"

import { Heading } from "@/components/editorial/heading"
import {
  Section,
  SectionContent,
  SectionDescription,
  SectionHeader,
  SectionTitleGroup,
} from "@/components/editorial/section"
import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/components/ui/card"

// The copy: change text here, not in the markup.
const COPY = {
  title: "Built for the whole release",
  body: "From the first plan to the final handoff, every step stays in one workspace.",
} as const

// span widens a tile from 64rem, when the grid is three across.
const TILES = [
  {
    value: "3,400+",
    title: "Teams planning releases",
    body: "Product, design and engineering share one plan, with owners and dates on every line.",
    span: "@5xl/section:col-span-2",
  },
  {
    value: "10 min",
    title: "Monday meetings",
    body: "The weekly digest covers what shipped and what slipped.",
    span: "",
  },
  {
    value: "1 link",
    title: "Per handoff",
    body: "Specs, decisions and files travel together.",
    span: "",
  },
  {
    value: "0",
    title: "Threads left open",
    body: "Review comments close themselves when the change they are about ships, so nothing sits open for weeks.",
    span: "@5xl/section:col-span-2",
  },
] as const

export default function MinimalBento01() {
  return (
    <Section>
      <SectionHeader>
        <SectionTitleGroup>
          <Heading>{COPY.title}</Heading>
        </SectionTitleGroup>
        <SectionDescription>{COPY.body}</SectionDescription>
      </SectionHeader>
      <SectionContent>
        <ul
          role="list"
          className="grid grid-cols-1 gap-4 @2xl/section:grid-cols-2 @5xl/section:grid-cols-3"
        >
          {TILES.map((tile) => (
            <li key={tile.title} className={cn("flex", tile.span)}>
              <Card className="w-full">
                <CardHeader>
                  <p className="font-display text-4xl/none tracking-tight">
                    {tile.value}
                  </p>
                </CardHeader>
                <CardContent className="mt-auto grid gap-1">
                  <CardTitle role="heading" aria-level={3}>
                    {tile.title}
                  </CardTitle>
                  <CardDescription>{tile.body}</CardDescription>
                </CardContent>
              </Card>
            </li>
          ))}
        </ul>
      </SectionContent>
    </Section>
  )
}
```
