<!-- source-hash: 7fa68fe7633e75913b75cba411a322f1 -->
Renders author and publication metadata as a bordered grid card, matching the visual contract of the release detail page. Supports 1–4 cells with responsive dividers.

## Key Components

| Export | Type | Description |
|--------|------|-------------|
| `EntityAuthorCard` | Component | Convenience composer rendering a "Published + Author" grid. Primary public API. |
| `EntityMetadataValueCell` | Component | Single cell with a large uppercase value (`text-h4`) and a small secondary label. |
| `EntityMetadataAuthorCell` | Component | Single cell with `SquareAvatar`, name, and role/job-title label. |
| `EMPTY_AUTHOR_PLACEHOLDER` | Constant | Fallback author shape (`"—"` / `"Unknown"`) used when `renderEmptyAuthor` is `true`. |
| `EntityAuthorCardProps` | Interface | Full props contract for `EntityAuthorCard`. |

## Usage Example

```typescript
// Basic: author only (single-cell)
<EntityAuthorCard
  author={{ full_name: 'Ada Lovelace', avatar_url: '/ada.jpg', job_title: 'Engineer' }}
/>

// With publication date (2-cell grid)
<EntityAuthorCard
  author={{ full_name: 'Ada Lovelace', avatar_url: null, job_title: null }}
  publishedAt="2024-06-01"
  publishedLabel="Released"
  roleLabel="Contributor"
/>

// Extra cells before the date (4-cell grid)
<EntityAuthorCard
  author={author}
  publishedAt={guide.publishedAt}
  extraCells={[
    { value: 'Onboarding', label: 'Section' },
    { value: '3',          label: 'Step'    },
  ]}
/>

// Skeleton-safe: render even when author is absent
<EntityAuthorCard
  author={null}
  renderEmptyAuthor
/>
```

## Behavior Notes

- Returns `null` when `author.full_name` is empty **unless** `renderEmptyAuthor` is set — keeps catalog grids skeleton-aligned.
- Grid columns (`md:grid-cols-1` → `md:grid-cols-4`) are computed at render time so Tailwind JIT picks up the literal class strings at build.
- Invalid date strings from `formatDate` are silently suppressed — the Published cell is hidden rather than showing `"Invalid Date"`.