<!-- source-hash: 3e808df6d9836b82a787de725d9821af -->
A responsive, accessible media carousel component supporting images, videos (MP4/HLS via MuxPlayer), and YouTube embeds with thumbnail navigation, swipe gestures, and keyboard controls.

## Key Components

### `MediaCarousel` (default export)
A memoized React component with the following props:

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `media` | `MediaItem[]` | — | Array of media items to display |
| `className` | `string` | — | Additional CSS classes |
| `aspectRatio` | `'16/9' \| '4/3' \| '3/2' \| '1/1'` | `'16/9'` | Container aspect ratio |
| `showThumbnails` | `boolean` | `true` | Toggle thumbnail strip |
| `autoPlay` | `boolean` | `false` | Auto-advance slides |
| `objectFit` | `'contain' \| 'cover'` | `'contain'` | Image fit behavior |

### Internal Renderers
- `renderImage` — renders images with lazy loading and error fallback
- `renderVideo` — delegates to `<Video>` (MuxPlayer facade) for MP4/HLS
- `renderYouTubeEmbed` — delegates to `<Video>` with `kind="youtube"` for lite-youtube embed
- `renderThumbnail` — clickable thumbnail with active indicator and video play overlay

## Usage Example

```typescript
import { MediaCarousel } from './media-carousel';
import { MediaItem } from '../utils/media-carousel-utils-stub';

const items: MediaItem[] = [
  { type: 'image', src: 'https://example.com/photo.jpg', alt: 'Photo' },
  { type: 'youtube', src: 'https://youtube.com/watch?v=dQw4w9WgXcQ', alt: 'Demo' },
  { type: 'video', src: 'https://example.com/clip.mp4', poster: 'https://example.com/thumb.jpg' },
];

<MediaCarousel
  media={items}
  aspectRatio="16/9"
  showThumbnails={true}
  objectFit="contain"
/>
```

## Interaction Support
- **Keyboard**: `←` / `→` arrow keys when carousel is focused
- **Touch/Swipe**: 50px minimum swipe distance triggers slide change
- **Hover**: Navigation arrows reveal on hover; hidden for single-item carousels
- **Accessibility**: `role="region"` and `aria-label` applied when multiple items exist