Find the cast and crew shared by two movies or TV shows crosscredit.haltcase.dev

Explore shared people's credits in a drawer #7

Merged haltcase.dev
targeting main from feat/person-credits-drawer
Merged opened by and assigned to haltcase.dev
targeting main from feat/person-credits-drawer

Selecting a shared person opens a modal drawer with their comparison roles and on-demand movie/TV filmography. Credits merge acting roles and crew jobs by title type and ID, retain guest appearances, and include posters, years, search, and movie/TV filters. Each title can replace either comparison side using the normal shareable URL. A separate TMDB person link remains available.

Includes native modal focus containment, Escape/Close, opener focus restoration, results focus after replacement, and a mobile layout. Loading, empty, filtered-empty, and retry states are provided. Server functions validate inputs and TMDB responses; TanStack Query and the existing bounded server cache handle filmography reads.

Implements https://tangled.org/haltcase.dev/crosscredit/issues/6

Validation: pnpm check, pnpm typecheck, pnpm test (106 tests), and pnpm build passed. Regression tests cover role/job merging, movie/TV ID collisions, guest credits, malformed responses, cache reuse, and retry after invalid data. Build emits the existing CSS sourcemap warning.

Verified interactively in Brave: expanded, midpoint, and collapsed drawer states; full-width sticky background; readable TMDB link; complete person name at 390px and 320px widths; Escape closes and returns focus to the opener. The same photo and name morph into the bar, with the portrait becoming circular. A direct scroll handler updates one CSS progress variable without React re-renders; this avoids first-open text painting problems observed with native scroll timelines in Brave. Replacement actions show the current title names as stacked, non-underlined text buttons.

Commits 6

Drive drawer morph directly from scroll position for reliable painting
Fix sticky drawer coverage and mobile identity spacing
Refine drawer actions and animate identity into sticky header
Add person credits drawer for continuing comparisons
Tighten spacing between title actions
Add TMDB links to selected titles and posters