# HeaderHeroSplitMedia Pattern A page-level hero pattern that pairs prominent editorial content with a primary media element in a split layout. Designed to introduce major concepts, products, or use cases while maintaining strong visual hierarchy and clear calls to action. ## Overview Header Hero Split Media supports both neutral and accent surface treatments and adapts responsively across desktop, tablet, and mobile breakpoints while preserving a consistent internal structure. ## When to Use - The page represents a high priority destination or thematic entry point - A strong headline and supporting narrative are required - Visual media reinforces the concept or story being introduced - One or two clear primary actions should be immediately visible - The page benefits from a balanced content and media relationship rather than a full bleed hero ## Props | Prop | Type | Default | Description | |------|------|---------|-------------| | `surface` | `'default' \| 'accent'` | `'default'` | Default uses no background surface behind the hero title. AccentSurface adds an accent background with internal padding behind the hero title | | `layout` | `'content-left' \| 'content-right'` | `'content-left'` | Controls whether the content block appears on the left or right side of the media | | `title` | `string` | *required* | Hero title text (display-md typography) | | `subtitle` | `string` | *required* | Hero subtitle text (subhead-sm-l typography) | | `description` | `string` | - | Description text below title section (body-l typography) | | `primaryCta` | `{ label: string; href: string }` | - | Primary CTA button configuration | | `secondaryCta` | `{ label: string; href: string }` | - | Secondary/Tertiary CTA button configuration | | `media` | `{ src: string; alt: string }` | *required* | Hero media (image) configuration | | `className` | `string` | - | Additional CSS classes | ## Variants ### Theme Theme is automatically controlled by the `html.light` and `html.dark` classes on the document root. The component will automatically adapt its colors based on the current theme. - **Light**: White background with dark text (when `html.light` is present) - **Dark**: Dark background with light text (when `html.dark` is present) ### Surface Controls the hero title section styling. - **Default**: No background surface behind the hero title - **Accent**: Adds a green accent background with internal padding behind the hero title and subtitle ### Layout Controls the position of content relative to media. - **Content Left** (default): Content on the left, media on the right - **Content Right**: Content on the right, media on the left ## Basic Usage ```tsx import { HeaderHeroSplitMedia } from '@/shared/patterns/HeaderHeroSplitMedia'; function MyPage() { return ( ); } ``` ## Examples ### Light Theme with Accent Surface The theme is automatically controlled by the `html.light` class on the document root. ```tsx ``` ### Dark Theme with Accent Surface The theme is automatically controlled by the `html.dark` class on the document root. ```tsx ``` ### Content Right Layout ```tsx ``` ### Minimal (No Description or Secondary CTA) ```tsx ``` ## Responsive Behavior ### Desktop (≥992px) - Side-by-side layout with content and media columns (6/12 columns each) - Media uses 1:1 aspect ratio - Gap between content and media columns: 8px - Horizontal gap between CTAs: 24px - Gap between description and CTA: 40px ### Tablet (576px - 991px) - Side-by-side layout maintained (4/8 columns each) - Media uses 2:1 aspect ratio (width:height) - Gap between content and media columns: 32px - Horizontal gap between CTAs: 24px - Gap between description and CTA: 24px ### Mobile (<576px) - Stacked layout (content above media, 4/4 columns each = full width) - Media uses 1:1 aspect ratio, full width - Gap between content and media columns: 32px - CTAs stack vertically with 16px gap - Gap between description and CTA: 24px ## Accent Surface Spacing When using `surface="accent"`, the title section receives a green background with specific padding: | Breakpoint | Padding Top | Padding Left/Right | Padding Bottom | |------------|-------------|-------------------|----------------| | Desktop | 16px | 16px | 24px | | Tablet | 16px | 16px | 24px | | Mobile | 8px | 8px | 16px | ## Anatomy ``` HeaderHeroSplitMedia ├── PageGrid Container (responsive padding) │ └── PageGrid.Row (flex layout with custom gap) │ ├── PageGrid.Col (content column) │ │ └── Content │ │ ├── TitleSurface (optional accent background) │ │ │ └── TitleGroup │ │ │ ├── Title (h1, display-md) │ │ │ └── Subtitle (p, sh-sm-l) │ │ └── DescriptionGroup │ │ ├── Description (p, body-l) │ │ └── CTA │ │ ├── Primary Button │ │ └── Tertiary Button │ └── PageGrid.Col (media column) │ └── Media │ └── Image (object-fit: cover) ``` ## CTA Guidelines - **Use Primary and Tertiary buttons only** - Do not use Secondary buttons in this pattern - Secondary buttons introduce competing visual shapes and reduce clarity - Using Primary and Tertiary maintains clean hierarchy and avoids visual noise ## Media Guidelines - Width is always used as the anchor when calculating height - Media spans the grid width defined by the layout - Aspect ratio rules by breakpoint: - Desktop: 1:1 ratio - Tablet: 2:1 ratio (W:H) - Mobile: 1:1 ratio ## CSS Classes | Class | Description | |-------|-------------| | `.bds-hero-split-media` | Root element | | `.bds-hero-split-media--default` | Default surface modifier | | `.bds-hero-split-media--accent` | Accent surface modifier | | `.bds-hero-split-media--content-left` | Content left layout | | `.bds-hero-split-media--content-right` | Content right layout | | `.bds-hero-split-media__container` | PageGrid container with responsive vertical padding | | `.bds-hero-split-media__row` | PageGrid.Row with custom gap spacing | | `.bds-hero-split-media__content-col` | PageGrid.Col wrapper for content | | `.bds-hero-split-media__content` | Content column | | `.bds-hero-split-media__title-surface` | Title background wrapper | | `.bds-hero-split-media__title-group` | Title + subtitle container | | `.bds-hero-split-media__title` | Main heading | | `.bds-hero-split-media__subtitle` | Subtitle text | | `.bds-hero-split-media__description-group` | Description + CTA container | | `.bds-hero-split-media__description` | Body text | | `.bds-hero-split-media__cta` | CTA buttons container | | `.bds-hero-split-media__media-col` | PageGrid.Col wrapper for media | | `.bds-hero-split-media__media` | Media column | | `.bds-hero-split-media__media-img` | Media image | **Note:** This pattern uses the `PageGrid` component system. The container uses `PageGrid` (`.bds-grid__container`), rows use `PageGrid.Row` (`.bds-grid__row`), and columns use `PageGrid.Col` (`.bds-grid__col-*`). Custom classes are applied for pattern-specific styling. ## Accessibility - Uses semantic `
` element for the pattern container - Title uses `

` heading for proper document structure - Media requires `alt` text for screen readers - Buttons inherit accessible labels from the Button component - Color contrast ratios meet WCAG 2.1 AA standards