Present OpenLibrary book covers in a consistent frame without cropping important cover content or making narrow-screen images look needlessly enlarged. ## Tasks ## Tasks - [x] Review `coverUrl()` in `src/api/openLibrary.ts` and `BookCard.css`; retain the existing largest standard OpenLibrary cover size and do not add extra image or metadata requests - [x] Define a consistent cover frame for desktop and mobile while preserving each source image's full aspect ratio - [x] Adjust image fitting and the neutral fallback background so portrait, landscape, and unusually shaped covers remain fully visible rather than being cropped - [x] Keep book details separate from the cover on narrow screens, with no horizontal page overflow at 320 px width - [x] Handle an unavailable cover image with the existing clear text fallback instead of leaving a broken image - [x] Keep cover alternative text useful and preserve the visible keyboard focus of nearby controls - [x] Stabilize the metadata and subject areas to reduce layout shifts between books with different amounts of content - [x] Keep long author lists on one line with the full author text still available - [x] Keep expanded subjects within a scrollable reserved area without scrolling the expand/collapse control - [x] Add or update component tests for available, missing, and failed cover images and the adjusted BookCard layout; update affected snapshots ## Acceptance criteria - [x] Book covers have a consistent visual frame on desktop and mobile - [x] Portrait and landscape covers are shown without important content being cropped - [x] A missing or failed cover displays a readable fallback rather than a broken image - [x] The change does not add network requests beyond the existing OpenLibrary search and cover image request - [x] The BookCard remains visually stable when navigating between books with different cover shapes and amounts of metadata - [x] Long author lists do not disrupt the card layout - [x] Expanded subject lists remain usable within the reserved subject area - [x] The book viewer remains usable without horizontal scrolling at 320 px width - [x] `npm run format:check` / `npm run lint` / `npm test` / `npm run build` pass