<!-- source-hash: 853672c07dc2c32f2542a936a393a3ad -->
Pure presentation component for roadmap items with two density modes — a rich default card (vote buttons, Figma/screenshot controls) and a compact horizontal variant for inline chat display.

## Key Components

| Export | Description |
|--------|-------------|
| `RoadmapCard` | Main card component, renders either `default` or `sm` layout |
| `RoadmapCardSkeleton` | Loading placeholder matching both card densities |
| `VoteType` | Union type `'up' \| 'down' \| null` for vote state |
| `RoadmapCardProps` | Full props interface for the card |

## Usage Example

```typescript
// Default (full roadmap page card with vote controls)
<RoadmapCard
  item={roadmapItem}
  userVote={currentVote}
  onVote={(type) => handleVote(item.id, type)}
  isVoting={isPending}
/>

// Compact inline variant (chat/sidebar)
<a href={`/roadmap/${item.id}`}>
  <RoadmapCard
    item={roadmapItem}
    size="sm"
    href={`/roadmap/${item.id}`}
    cardType="delivery_item"
    target="_blank"
    rel="noopener noreferrer"
  />
</a>

// Skeleton loader
<RoadmapCardSkeleton size="sm" />
```

## Key Behaviors

- **Icon resolution**: prefers `item.icon` (proxied), falls back to `TaskTypeIcon` for internal tasks, then initials
- **`sm` branch**: wraps content in `<a>` when `href` is valid; renders a static `<span>` when no href is available
- **Vote UI** (`default` only): rendered only when `onVote` is provided; buttons disabled during `isVoting`
- **Screenshot gallery**: controlled via local `showScreenshots` state; Figma link and screenshot count displayed as metadata badges in the compact branch
- **Responsive status badge**: shown inline on `md+` screens, moves below the header row on mobile