Extend instant error overlay to metadata, viewport, and sync IO errors (#93287)
### What?
Extends the card-based instant error overlay (#92638) to metadata,
viewport, and sync IO errors, and updates the matching build/CLI
messages to a consistent structured format.
### Why?
After the blocking-route redesign, metadata, viewport, and sync IO
errors still used the old prose format with no visual fix guidance.
### Demo
- Metadata:
[runtime](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/12-cookies-in-metadata)
·
[dynamic](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/13-fetch-in-metadata)
- Viewport:
[runtime](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/14-cookies-in-viewport)
·
[dynamic](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/15-fetch-in-viewport)
- Sync IO:
[Math.random()](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/38-math-random-no-instant)
·
[Date.now()](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/39-date-now-no-instant)
·
[crypto.randomUUID()](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/40-crypto-random-no-instant)
- Sync IO in Client:
[Math.random()](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/44-client-math-random-no-suspense)
·
[Date.now()](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/43-client-date-no-suspense)
·
[crypto.randomUUID()](https://error-messages-overhaul-ibsl.labs.vercel.dev/scenario/45-client-crypto-no-suspense)
- [Fix overview (all
cards)](https://error-messages-overhaul-ibsl.labs.vercel.dev/fix-overview)
### How?
**Overlay**
- New `dynamic-metadata`, `dynamic-viewport`, and `sync-io` error types
in `errors.tsx`, all rendered through `InstantRuntimeError` with
kind-specific fix cards
- `isSyncIOError()` detects sync IO via the docs URL pattern, mirroring
`isRuntimeVariant()`
**Build & CLI messages**
- Headlines aligned to "Next.js encountered..." across all error
families
- `blocking-route-messages.ts`: metadata/viewport errors restructured
from prose to "Ways to fix this:" bullets
- Sync IO messages extracted into `sync-io-messages.ts`, mirroring
`blocking-route-messages.ts`. Helpers renamed to `createSyncIOError` /
`createSyncIORuntimeError` / `createSyncIOClientError` to match the
`create*Error` pattern