HttpErrorResponse implements the Error interface structurally but does not
extend the Error class, so `error instanceof Error` was always false for
HTTP failures and every travel error (400/409/500/network) fell through to
the same generic fallback string, hiding the backend's specific
TravelDomainError code/message (e.g. TRAVEL_ALREADY_ACTIVE) from the user.
toErrorMessage now checks `error instanceof HttpErrorResponse` first and
maps known travel error codes to specific German messages, falling back to
the generic message for unknown codes and to `error.message` for genuine
non-HTTP errors.
startTravel()'s catch block also now resyncs current travel state from the
server (reusing the existing pollCurrentTravel/refreshCurrentTravel path)
so a failed start caused by a race with another tab/request doesn't leave
the store's local state stale.
Drives the full world/travel flow in Chromium via Playwright against the
live API and seeded Postgres, capturing the three required desktop
viewports and comparing them against the accepted design reference.
Fixes two evidenced defects found during verification:
- world-page scene sizing overflowed the viewport at all three required
desktop sizes, pushing the footer (and, at 1440x900/1366x768, the travel
button) below the fold; scene height now accounts for surrounding chrome
so nothing is clipped.
- the generic HTTP-failure fallback message was hardcoded in English while
the rest of the UI is German; now uses a matching German string.
Adds Playwright as a web devDependency for this and future browser
verification passes (no product-code dependency).