- New src/lib/router.js: parseHash/ viewToHash for the 5 tab views, with a
default fallback for empty/unknown hashes.
- App.svelte: initialize viewMode from location.hash, setView() updates both
state and the URL hash, and a guarded hashchange listener syncs back/forward
and manual URL edits. All tab onclicks route through setView().
- Tests for parse/viewToHash round-trips and fallback. 76 total pass.