Component

Text Section

Minimal full-width text block — eyebrow, Cal Sans display headline, optional sub-headline, and an optional CTA button. Three alignment options: left, center, right. Supports dark and light themes via data-theme. Minimum height 320px.

Alignment variants

align="left" · Our story

Photography as discipline

A brief sub-headline that expands on the headline idea.

align="center" · Our story

Photography as discipline

A brief sub-headline that expands on the headline idea.

align="right" · Our story

Photography as discipline

A brief sub-headline that expands on the headline idea.

Themes

theme="light"

Light That Stays

Body text on surface background

theme="dark"

Light That Stays

Body text on dark background

Theme is applied via data-theme on the section element. Global dark mode toggle overrides per-section theme — see the tokens system.

Sanity fields

Available as textSection in the Page builder.

PropTypeDefaultDescription
headlinestringRequired. Cal Sans display headline.
eyebrowstringOptional mono-caps label above the headline.
subHeadlinestringOptional body copy below the headline.
alignleft|center|right"center"Text alignment and flex direction.
theme"dark" | "light""light"Section colour scheme.
button.labelstringCTA button label.
button.hrefstringCTA button URL.
button.styledefault|outline|ghost"default"Button variant — maps to Electric blue, outline-muted, or ghost.

Usage

tsx
import { TextSection } from '@/components/sections/text-section'

<TextSection
  block={{
    _type:       'textSection',
    theme:       'light',
    align:       'center',
    eyebrow:     'Our philosophy',
    headline:    'Photography as discipline',
    subHeadline: 'Every frame is a decision, not an accident.',
    button: {
      label: 'View the work',
      href:  '/work',
      style: 'default',
    },
  }}
/>
tsx
// Via Sanity BlockRenderer — no extra code needed.
// Add to a Page document in Studio:
// Sections → Add item → Text Section