<!-- source-hash: 8a798bc4d9131ab38604adc9a1b7d675 -->
Reusable page layout wrapper that provides consistent structure with an optional header (`TitleBlock`), configurable actions, and standardized spacing for full-page views.

## Key Components

### `PageLayout` (default export)
Main layout component accepting the following props:

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `children` | `ReactNode` | — | Page content |
| `title` | `string` | — | Page heading |
| `subtitle` | `string` | — | Secondary heading |
| `image` | `{ src, alt? }` | — | Header image |
| `backButton` | `{ label?, onClick }` | — | Back navigation button |
| `actions` | `PageActionButton[]` | — | Action buttons rendered in the header |
| `actionsVariant` | `'icon-buttons' \| 'primary-buttons' \| 'menu-primary'` | `'icon-buttons'` | Controls button style/layout |
| `menuActions` | `ActionsMenuGroup[]` | — | Grouped dropdown menu actions |
| `selector` | `ReactNode` | — | Desktop-only slot (e.g. `TabSelector`) |
| `headerVariant` | `'plain' \| 'card'` | — | `card` adds background, border, and mobile padding |
| `showHeader` | `boolean` | `true` | Conditionally renders the header block |
| `className` | `string` | — | Outer wrapper class override |
| `contentClassName` | `string` | — | Content area class override |

### Re-exports
- `TitleBlock` + `TitleBlockProps` — header sub-component
- `PageActionButton` — action button type

## Usage Example

```typescript
import { PageLayout } from './page-layout'

export default function SettingsPage() {
  return (
    <PageLayout
      title="Settings"
      subtitle="Manage your preferences"
      backButton={{ label: 'Back', onClick: () => router.back() }}
      actions={[{ label: 'Save', onClick: handleSave }]}
      actionsVariant="primary-buttons"
      headerVariant="card"
    >
      <SettingsForm />
    </PageLayout>
  )
}
```

> When `actionsVariant="primary-buttons"`, the content area automatically gains `pb-28` on mobile to prevent overlap with sticky action buttons.