Content 19

A journal index with a small label and title, a large photo, three short articles with thumbnails and a tall photo in an offset grid.

Full screen

content-19.tsx

import Balancer from 'react-wrap-balancer'

import { cn } from '@/lib/utils'

const articles = [
  {
    label: 'Objects',
    title: 'Choosing Pieces That Last',
    description: 'Simple vessels for everyday use.',
    image:
      'https://images.unsplash.com/photo-1554042861-0ad2fc2a8dc2?q=80&w=800&auto=format&fit=crop',
    alt: 'Alt 2',
    className: 'lg:col-span-4 lg:col-start-6 lg:row-start-2',
  },
  {
    label: 'Rooms',
    title: 'Space to Breathe',
    description: 'Leaving room around what you love.',
    image:
      'https://images.unsplash.com/photo-1567359755029-04f642e9a88f?q=80&w=800&auto=format&fit=crop',
    alt: 'Alt 3',
    className: 'lg:col-span-4 lg:col-start-6 lg:row-start-3',
  },
  {
    label: 'Behind the studio',
    title: 'Inside the Workshop',
    description: 'How each piece gets made.',
    image:
      'https://images.unsplash.com/photo-1588111948296-83a8e036e004?q=80&w=800&auto=format&fit=crop',
    alt: 'Alt 4',
    className: 'lg:col-span-4 lg:col-start-9 lg:row-start-4',
  },
]

export function Content19() {
  return (
    <section className="bg-background w-full">
      <div className="mx-auto grid max-w-7xl grid-cols-1 gap-x-6 gap-y-10 px-6 py-20 sm:py-28 lg:grid-cols-12 lg:gap-y-8">
        <div className="flex flex-col gap-1 lg:col-span-7 lg:col-start-6">
          <p className="text-muted-foreground text-sm">Journal</p>
          <h2 className="text-foreground text-2xl font-normal tracking-tight sm:text-3xl">
            <Balancer>Living Slowly</Balancer>
          </h2>
        </div>

        <div className="bg-muted relative aspect-[4/5] w-full overflow-hidden outline outline-black/10 lg:col-span-5 lg:row-span-3 lg:row-start-2 dark:outline-white/10">
          <img
            src="https://images.unsplash.com/photo-1519710164239-da123dc03ef4?q=80&w=1400&auto=format&fit=crop"
            alt="Alt 1"
            decoding="async"
            className="size-full object-cover grayscale"
          />
        </div>

        {articles.map((article) => (
          <a
            key={article.title}
            href="#"
            className={cn(
              'group focus-visible:ring-ring/50 flex items-end gap-4 outline-none focus-visible:ring-3',
              article.className,
            )}
          >
            <div className="bg-muted relative aspect-[4/5] w-28 shrink-0 overflow-hidden outline outline-black/10 sm:w-40 dark:outline-white/10">
              <img
                src={article.image}
                alt={article.alt}
                loading="lazy"
                decoding="async"
                className="size-full object-cover grayscale"
              />
            </div>
            <div className="flex flex-col gap-1.5 pb-1">
              <span className="text-muted-foreground text-xs">
                [ {article.label} ]
              </span>
              <h3 className="text-foreground text-sm font-medium sm:text-base">
                {article.title}
              </h3>
              <p className="text-muted-foreground text-sm">
                {article.description}
              </p>
            </div>
          </a>
        ))}

        <div className="bg-muted relative aspect-[3/5] w-2/3 overflow-hidden outline outline-black/10 sm:w-1/2 lg:col-span-3 lg:col-start-10 lg:row-span-2 lg:row-start-2 lg:w-full dark:outline-white/10">
          <img
            src="https://images.unsplash.com/photo-1624274333983-e0d8a0b8f47c?q=80&w=1000&auto=format&fit=crop"
            alt="Alt 5"
            loading="lazy"
            decoding="async"
            className="size-full object-cover grayscale"
          />
        </div>
      </div>
    </section>
  )
}