## 1. Card Component + Styles

- [x] 1.1 Create a shared card component implementing the standard card layout (media, title, summary, meta row, footer)
- [x] 1.2 Add/adjust shared CSS so the card meta row uses `space-between` and the footer consistently shows the source label

## 2. Data Model Support

- [x] 2.1 Extend normalized `ContentItem` to support an optional `summary` field and ensure it is persisted in the content cache
- [x] 2.2 Populate `summary` for YouTube and podcast items during ingestion (safe trimming / fallback when missing)

## 3. Apply Across Site

- [x] 3.1 Update `ContentCard` surfaces (`/`, `/videos`, `/podcast`) to use the shared card layout and include date/views/source in the standard positions
- [x] 3.2 Update blog post cards (`/blog`, category listings) to use the shared card layout (including publish date and `blog` source footer)
- [x] 3.3 Ensure cards render cleanly when optional fields are missing (no image, no views, no summary)

## 4. Verify

- [x] 4.1 Add/update tests to assert standardized card structure/classes across `ContentCard` and blog post cards
- [x] 4.2 Build the site and verify `/videos`, `/podcast`, and `/blog` render cards matching the standard layout
