Bento grids 04
Two stacked cards with a two-tone title, a paragraph and a pill button beside a product photo surrounded by short feature callouts on a faint grid.
bento-grids-04.tsx
import { ArrowRight } from 'lucide-react'
import Balancer from 'react-wrap-balancer'
import { Button } from '@/components/ui/button'
import { cn } from '@/lib/utils'
const callouts = [
{
title: 'Solid beech frame',
description: 'Steam-bent and joined by hand for decades of daily use.',
className: 'lg:top-[24%] lg:left-[5%] lg:w-[22%]',
line: 'left-full',
},
{
title: 'Moulded seat',
description: 'Shaped to support long meals without needing a cushion.',
className: 'lg:top-[12%] lg:right-[5%] lg:w-[22%]',
line: 'right-full',
},
{
title: 'Stackable by design',
description: 'Sits flush, so four chairs fit in the space of one.',
className: 'lg:right-[5%] lg:bottom-[14%] lg:w-[22%]',
line: 'right-full',
},
]
export function BentoGrids04() {
return (
<section className="bg-muted/50 dark:bg-background w-full">
<div className="mx-auto grid w-full max-w-7xl grid-cols-1 gap-4 px-6 py-20 sm:py-28 lg:grid-cols-2">
<div className="flex flex-col gap-4">
<article className="bg-card dark:bg-muted/40 relative isolate flex min-h-[24rem] flex-col gap-10 overflow-hidden rounded-3xl p-8 shadow-sm sm:p-10">
<div
aria-hidden
className="bg-muted absolute -right-20 -bottom-28 -z-10 size-96 rounded-full"
/>
<div
aria-hidden
className="bg-muted/60 absolute right-24 -bottom-16 -z-10 size-56 rounded-full"
/>
<p className="text-muted-foreground flex items-center gap-2 text-sm">
<span
aria-hidden
className="bg-foreground size-1.5 rounded-full"
/>
About
</p>
<h2 className="text-foreground text-3xl leading-tight font-normal tracking-tight sm:text-4xl">
<Balancer>
Furniture for everyday rooms,{' '}
<span className="text-muted-foreground">
simple to live with, honest in its making and built to last.
</span>
</Balancer>
</h2>
</article>
<article className="bg-card dark:bg-muted/40 flex flex-col items-start gap-8 rounded-3xl p-8 shadow-sm sm:p-10">
<p className="text-foreground text-base leading-relaxed">
At Fieldhouse we believe good furniture should be quiet, durable
and easy to own. We work with small workshops to make a short
range of chairs, tables and shelves, and we repair every piece we
sell.
</p>
<Button
variant="outline"
size="lg"
className="h-12 gap-3 rounded-full pr-1.5 pl-6"
nativeButton={false}
render={<a href="#" />}
>
Explore the range
<span className="bg-foreground text-background flex size-9 items-center justify-center rounded-full">
<ArrowRight className="size-4" />
</span>
</Button>
</article>
</div>
<article className="bg-card dark:bg-muted/40 relative isolate flex flex-col items-center gap-8 overflow-hidden rounded-3xl p-6 shadow-sm lg:min-h-[44rem] lg:p-0">
<div
aria-hidden
className="absolute inset-0 -z-10 bg-[linear-gradient(to_right,var(--border)_1px,transparent_1px),linear-gradient(to_bottom,var(--border)_1px,transparent_1px)] mask-radial-from-30% mask-radial-to-75% bg-[size:3rem_3rem]"
/>
<div className="bg-muted relative aspect-[4/5] w-[min(75%,22rem)] overflow-hidden rounded-2xl outline outline-black/10 lg:absolute lg:top-1/2 lg:left-1/2 lg:w-[40%] lg:-translate-x-1/2 lg:-translate-y-1/2 dark:outline-white/10">
<img
src="https://images.unsplash.com/photo-1750306956117-460a9fd3f1b8?q=80&w=1200&auto=format&fit=crop"
alt="Alt"
decoding="async"
className="size-full object-cover"
/>
</div>
<ul className="flex w-full flex-col gap-6 lg:contents">
{callouts.map((callout) => (
<li
key={callout.title}
className={cn(
'relative flex flex-col gap-1.5 lg:absolute',
callout.className,
)}
>
<span
aria-hidden
className={cn(
'bg-foreground/30 absolute top-3 hidden h-px w-10 lg:block',
callout.line,
)}
/>
<h3 className="text-foreground text-lg font-normal tracking-tight">
{callout.title}
</h3>
<p className="text-muted-foreground text-sm leading-relaxed">
{callout.description}
</p>
</li>
))}
</ul>
</article>
</div>
</section>
)
}