Genre pages restructured, card layout consistency, and SEO fixes
Genre pages restructured - genre detail pages like /genres/mystery used to list any series with at least one matching book, which was confusing - clicking through to Harry Potter under Mystery would land you on a series page full of books that had nothing to do with mystery. Now only series where every book is tagged with the genre appear (e.g. The Sherlock Holmes novels under Mystery). Books from partially-matching series (like the 2 mystery books in Harry Potter) are listed individually below in a separate Books section, with no duplication.
Card layouts consistent across the site - 11 different inline card layouts on the home page, books listing, genre pages, author pages, and universe pages have been refactored to use a single shared component. Cards in a row now properly align even when titles wrap to different line counts, and any future layout changes will automatically apply everywhere.
Legacy URL redirects fixed - some old URLs like /groups/parshendi and /authors/some-old-slug were returning HTTP 200 with empty content instead of redirecting to their current canonical URLs. This was breaking SEO. Those URLs now correctly issue a 308 redirect to the current canonical form.
Story arc tidying - empty section headings (e.g. "Book V" in Return of the King when a character has no appearances in those chapters) are now hidden from character story arcs.
Single-member group fix - groups with only one member appearing in a particular book (e.g. The Ents in The Two Towers, where Treebeard is the sole on-page member) now correctly show that book in their appearances list.