## ADDED Requirements
### Requirement: NetworkMonitor MUST assert absence of missing assets
`NetworkMonitor` (returned by `attachNetworkMonitor(page)`) SHALL expose `assertNoMissingAssets()` that fails when any 404 was observed for an `image`, `font`, `script`, or `stylesheet` resource type. The monitor SHALL also expose `allow404(predicate: (entry) => boolean)` to opt-out specific URLs from this assertion. Other 404s (e.g. for `xhr`/`fetch` resource types) are NOT subject to this assertion and remain governed by `assertNoFailures()`.
#### Scenario: Missing image fails the assertion
- **WHEN** the page references `
` and the request returns 404
- **AND** `monitor.assertNoMissingAssets()` is called
- **THEN** the call throws `MissingAssetError` with `code === "TESTING_E2E.NETWORK.MISSING_ASSET"` and `context.url` containing `/missing.png`
#### Scenario: Allow-listed 404 does not fail
- **WHEN** `monitor.allow404((e) => e.url.endsWith("/beacon.gif"))` is called before navigation
- **AND** `/beacon.gif` returns 404
- **AND** `monitor.assertNoMissingAssets()` is called
- **THEN** the call returns without throwing
#### Scenario: Non-asset 404 does not fail this assertion
- **WHEN** an `xhr` request to `/api/foo` returns 404
- **AND** `monitor.assertNoMissingAssets()` is called
- **THEN** the call returns without throwing (the failure is reported by `assertNoFailures()` instead)
### Requirement: NetworkMonitor MUST assert absence of mixed content
`NetworkMonitor` SHALL expose `assertNoMixedContent()` that fails when the page is loaded over `https://` AND any subresource was fetched over `http://`, OR when the browser reports a mixed-content blocking event. The assertion is a no-op when the page is loaded over `http://`.
#### Scenario: HTTP subresource on HTTPS page fails
- **WHEN** the page is `https://example.test/`
- **AND** it includes `