Add react-router so each tab is its own path (/opportunities, /travel,
/market, /items, …) and a refresh or deep link lands on the same page.
Page state is mirrored to the query string so a refresh restores it:
- Item Browser: ?q= (search) and ?item= (open item)
- Market Data: ?item= (selected item, rebuilt on load)
- Opportunities: all filters (city, tiers, focus, premium, sellMode,
station fee, sort) in the URL
- Travel Planner: ?from=&to=&mode=
The server already serves index.html for non-API paths, so deep links
work. Sidebar uses NavLink for active state.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>