Pure presentation component for rendering customer interview content in three density modes: `default` (full card), `sm` (compact horizontal for chat-inline), and `portrait` (rail/strip layout). ## Key Components ### `CustomerInterviewCardProps` | Prop | Type | Description | |---|---|---| | `interview` | `CustomerInterview` | Data model for the interview | | `href` | `string` | Resolved detail URL — no click logic inside the card | | `target` | `'_blank'` | Optional new-tab behavior | | `targetPlatform` | `string \| null` | Passed to `useEntityCardLink` for platform-aware link resolution | | `placeholderUrl` | `string \| null` | OG image fallback when `featured_image` is absent | | `size` | `'default' \| 'sm' \| 'portrait'` | Render density | | `showTypeBadge` | `boolean` | Portrait mode only — renders the "Customer Interview" chip (default: `true`) | ### `CustomerInterviewCard` Main export. Delegates link resolution to `useEntityCardLink` and placeholder generation to `useEntityCardPlaceholder`. Branches render path by `size`: - **`default`** — Full card with 1200×630 aspect image, title, summary, and avatar footer with MSP icon overlay - **`sm`** — Compact horizontal layout with square thumbnail and video indicator icon - **`portrait`** — Delegates entirely to `EntityPortraitCard` ### `CustomerInterviewCardSkeleton` Loading placeholder matching each density's layout zones, with `animate-pulse` shimmer. ## Usage Example ```typescript import { CustomerInterviewCard, CustomerInterviewCardSkeleton } from './customer-interview-card' // Default full card // Compact chat-inline variant // Loading state ```