Detail screens
One fixture, team, player, league, referee or prop — and the bridges that let a row open a screen without threading a callback.
src/app/(main)/(detail)
| Route | What it is |
|---|---|
fixture/[id] | One match — with player, odds-compare, game-cell and customise beside it |
team/[id], player/[id], league/[id], referee/[id] | One entity |
prop/[id], card/[id] | One market |
venue, landscape-view | The two that are neither |
The fixture is a stack, not a screen
fixture/[id] has four screens around it. A match has more in it than fits on a
phone — lineups, stats, odds across books, each player's line — so the fixture
screen is a hub and each of those is a push.
customise is the same idea as the
Matches tab's card settings: what the
fixture view shows is the reader's choice.
Landscape
landscape-view exists because some of this data is a wide table and a phone
held sideways is the only way to see it. It is a route, not a rotation handler,
so it can be opened deliberately rather than by accident — and see
Resizing for what a size change has to survive.
The bridges
card-detail-bridge.ts, fixture-player-row-bridge.ts,
fixture-odds-compare-bridge.ts, venue-bridge.ts and the rest.
A row deep in a list needs to open a detail screen with context the router alone cannot carry. The bridge is a small module holding that hand-off, so the list does not take a callback prop threaded down four levels and the screen does not read something global.