Presentational card for one book. Props-driven only — no fetching, no app state. ## Tasks - [x] `src/components/BookCard.tsx`: props `{ book: Book }` (type from `src/types.ts`, added in #4) - [x] Cover image via `coverUrl()` from `src/api/openLibrary.ts`; books without a cover get a text placeholder — never a broken image, always proper `alt` - [x] Title as heading, authors (join), first publish year, subjects as a small list of tags - [x] `src/components/BookCard.css`, imported by the component; clean, consistent with the app's look - [x] Tests: snapshot with a full `Book` and with a minimal one (no cover/authors/year); asserts title + authors render ## Acceptance criteria - [x] `npm run lint` / `npm test` / `npm run build` pass, jsx-a11y clean - [x] Semantic HTML, no `any`, named export Part of M2 — Core app (due Tue 8/9). Branch `feat/7-book-card` from main after PR #3 merges. Tests use inline fixture data — never the network.