diff --git a/scripts/__tests__/e2e-parity-diff.test.js b/scripts/__tests__/e2e-parity-diff.test.js new file mode 100644 index 00000000..cc8b350b --- /dev/null +++ b/scripts/__tests__/e2e-parity-diff.test.js @@ -0,0 +1,190 @@ +/** + * Tests for the E2E parity comparator (#575). + * + * The comparator is the ONLY thing standing between "we switched E2E to a local + * Supabase" and "we switched E2E to a local Supabase and quietly stopped running 228 + * messaging tests". If it can't fail, the switch is unlicensed. So these tests are + * mostly about proving it REJECTS things. + * + * Runs under `pnpm test:scripts` (node:test), which ci.yml executes. vitest cannot + * load `node:test`, hence the placement here — see vitest.config.ts:20-21. + */ + +const test = require('node:test'); +const assert = require('node:assert'); +const path = require('node:path'); +const { pathToFileURL } = require('node:url'); + +const MOD = pathToFileURL( + path.join(__dirname, '..', 'e2e-parity-diff.mjs') +).href; + +/** Minimal Playwright-JSON-shaped report. */ +function report(entries) { + return { + suites: entries.map(([project, file, title, status]) => ({ + file, + specs: [{ file, title, tests: [{ projectName: project, status }] }], + suites: [], + })), + }; +} + +test('extractTests flattens nested suites and keys on project|file|title', async () => { + const { extractTests } = await import(MOD); + const r = { + suites: [ + { + file: 'a.spec.ts', + specs: [ + { + file: 'a.spec.ts', + title: 'top', + tests: [{ projectName: 'chromium-gen', status: 'expected' }], + }, + ], + suites: [ + { + // No `file` here — must inherit from the parent suite, or nested describes + // key on an empty path and silently collide. + specs: [ + { + title: 'nested', + tests: [{ projectName: 'chromium-gen', status: 'skipped' }], + }, + ], + }, + ], + }, + ], + }; + const out = extractTests(r); + assert.strictEqual(out['chromium-gen|a.spec.ts|top'], 'expected'); + assert.strictEqual(out['chromium-gen|a.spec.ts|nested'], 'skipped'); + assert.strictEqual(Object.keys(out).length, 2); +}); + +test('identical input passes', async () => { + const { compare } = await import(MOD); + const b = { 'p|f|t': 'expected', 'p|f|u': 'skipped' }; + assert.strictEqual(compare(b, { ...b }).ok, true); +}); + +test('expected -> skipped is a coverage LOSS and fails', async () => { + const { compare } = await import(MOD); + const b = { 'p|f|t': 'expected' }; + const res = compare(b, { 'p|f|t': 'skipped' }); + assert.strictEqual(res.ok, false); + assert.deepStrictEqual(res.lost, ['p|f|t']); +}); + +test('a test vanishing entirely fails', async () => { + const { compare } = await import(MOD); + const res = compare({ 'p|f|t': 'expected' }, {}); + assert.strictEqual(res.ok, false); + assert.deepStrictEqual(res.missing, ['p|f|t']); +}); + +test('same COUNT but different tests still fails', async () => { + // The whole reason this compares identities. A count gate passes this. + const { compare } = await import(MOD); + const res = compare({ 'p|f|a': 'expected' }, { 'p|f|b': 'expected' }); + assert.strictEqual(res.ok, false); + assert.strictEqual(res.missing.length, 1); + assert.strictEqual(res.added.length, 1); +}); + +test('skipped -> expected is a GAIN: reported, allowed', async () => { + // A local stack can legitimately enable a spec the cloud project could not run. + // That must not fail the gate, but it must be visible. + const { compare } = await import(MOD); + const res = compare({ 'p|f|t': 'skipped' }, { 'p|f|t': 'expected' }); + assert.strictEqual(res.ok, true); + assert.deepStrictEqual(res.gained, ['p|f|t']); +}); + +test('a genuine failure (expected -> unexpected) fails the gate', async () => { + const { compare } = await import(MOD); + const res = compare({ 'p|f|t': 'expected' }, { 'p|f|t': 'unexpected' }); + assert.strictEqual(res.ok, false); + assert.strictEqual(res.changed.length, 1); +}); + +test('flaky is not treated as a pass', async () => { + const { compare } = await import(MOD); + const res = compare({ 'p|f|t': 'expected' }, { 'p|f|t': 'flaky' }); + assert.strictEqual(res.ok, false); +}); + +test('brand-new tests are allowed but reported', async () => { + const { compare } = await import(MOD); + const res = compare({}, { 'p|f|new': 'expected' }); + assert.strictEqual(res.ok, true); + assert.deepStrictEqual(res.added, ['p|f|new']); +}); + +test('the committed baseline is well-formed and self-consistent', async () => { + const fs = require('node:fs'); + const p = path.join( + __dirname, + '..', + '..', + 'tests', + 'e2e', + 'parity', + 'baseline-de0f7f0.json' + ); + const m = JSON.parse(fs.readFileSync(p, 'utf8')); + + assert.strictEqual(m.sha, 'de0f7f080c8d75949e4e6c89fdf66ab7d3da8029'); + assert.strictEqual(m.backend, 'cloud'); + assert.deepStrictEqual( + m.duplicateKeys, + [], + 'keys must be unique or the diff is unsound' + ); + + const statuses = Object.values(m.tests); + assert.strictEqual(statuses.length, m.totals.tests); + assert.strictEqual( + statuses.filter((s) => s === 'expected').length, + m.totals.expected + ); + assert.strictEqual( + statuses.filter((s) => s === 'skipped').length, + m.totals.skipped + ); + // The numbers quoted throughout #575 and its PRs. If these ever change, the + // baseline was regenerated and every claim referencing them needs revisiting. + assert.strictEqual(m.totals.expected, 1807); + assert.strictEqual(m.totals.skipped, 194); + assert.strictEqual(m.totals.tests, 2001); +}); + +test('the baseline round-trips through compare() against itself', async () => { + const fs = require('node:fs'); + const { compare } = await import(MOD); + const p = path.join( + __dirname, + '..', + '..', + 'tests', + 'e2e', + 'parity', + 'baseline-de0f7f0.json' + ); + const m = JSON.parse(fs.readFileSync(p, 'utf8')); + const res = compare(m.tests, { ...m.tests }); + assert.strictEqual(res.ok, true); +}); + +test('report() shape: extract on a synthetic report matches compare expectations', async () => { + const { extractTests, compare } = await import(MOD); + const base = extractTests( + report([['chromium-gen', 'x.spec.ts', 'one', 'expected']]) + ); + const now = extractTests( + report([['chromium-gen', 'x.spec.ts', 'one', 'skipped']]) + ); + assert.strictEqual(compare(base, now).ok, false); +}); diff --git a/scripts/e2e-parity-diff.mjs b/scripts/e2e-parity-diff.mjs new file mode 100644 index 00000000..bd9ee339 --- /dev/null +++ b/scripts/e2e-parity-diff.mjs @@ -0,0 +1,195 @@ +#!/usr/bin/env node +/** + * E2E parity diff — compare a Playwright JSON report against a captured baseline. + * + * #575. Switching E2E from the shared cloud project to a per-runner ephemeral stack + * is only safe if the local run covers the SAME TESTS. Counts alone cannot show that: + * a suite can drop one test and gain another and still total 2001. + * + * So this compares per-test IDENTITIES, not totals, and it is directional — a test + * that went `expected -> skipped` is a coverage LOSS and fails; the reverse is a gain + * and is reported but allowed (a local stack legitimately enables things cloud could + * not run, e.g. a spec gated on a service the cloud project lacks). + * + * node scripts/e2e-parity-diff.mjs [--baseline ] [--json] + * node scripts/e2e-parity-diff.mjs --selftest + * + * WHY A SELFTEST. Every probe written in this repo that could not fail turned out to + * be wrong (#396, and four in one session). `--selftest` mutates a copy of the baseline + * three ways and asserts this script REJECTS each. Run it in CI next to the real diff; + * a comparison tool that cannot fail is worse than none, because it licenses the switch. + */ + +import { readFileSync, existsSync } from 'node:fs'; +import { pathToFileURL } from 'node:url'; + +const DEFAULT_BASELINE = 'tests/e2e/parity/baseline-de0f7f0.json'; + +/** Extract {key -> status} from a Playwright JSON report. Key excludes line numbers + * deliberately: they shift on any edit above a test and would churn without any + * change in coverage. */ +export function extractTests(report) { + const out = {}; + const walk = (suite, inheritedFile) => { + const file = suite.file || inheritedFile; + for (const spec of suite.specs || []) { + for (const t of spec.tests || []) { + out[`${t.projectName || ''}|${spec.file || file}|${spec.title || ''}`] = + t.status || ''; + } + } + for (const s of suite.suites || []) walk(s, file); + }; + for (const s of report.suites || []) walk(s, s.file); + return out; +} + +/** Directional comparison. Returns {lost, missing, added, gained, changed, ok}. */ +export function compare(baselineTests, actualTests) { + const lost = []; // expected -> skipped: COVERAGE LOSS + const missing = []; // present in baseline, absent entirely: COVERAGE LOSS + const added = []; // absent from baseline, present now: report only + const gained = []; // skipped -> expected: report only + const changed = []; // any other status transition + + for (const [k, was] of Object.entries(baselineTests)) { + if (!(k in actualTests)) { + missing.push(k); + continue; + } + const now = actualTests[k]; + if (was === now) continue; + if (was === 'expected' && now === 'skipped') lost.push(k); + else if (was === 'skipped' && now === 'expected') gained.push(k); + else changed.push(`${k} (${was} -> ${now})`); + } + for (const k of Object.keys(actualTests)) { + if (!(k in baselineTests)) added.push(k); + } + + // `changed` includes transitions to `unexpected` (a real failure) and `flaky`. + // Both must fail the gate — a parity run that goes red on a test the cloud passed + // is precisely the signal this exists to surface. + return { + lost, + missing, + added, + gained, + changed, + ok: lost.length === 0 && missing.length === 0 && changed.length === 0, + }; +} + +function loadReport(path) { + const raw = JSON.parse(readFileSync(path, 'utf8')); + // Accept either a raw Playwright report or a previously-written baseline manifest. + if (raw.tests && !raw.suites) return raw.tests; + return extractTests(raw); +} + +function report(res, baseCount, actualCount) { + const line = (label, arr, fatal) => { + if (!arr.length) return; + console.log(`\n${fatal ? '✗' : 'ℹ'} ${label}: ${arr.length}`); + for (const k of arr.slice(0, 25)) console.log(` ${k}`); + if (arr.length > 25) console.log(` … and ${arr.length - 25} more`); + }; + console.log(`baseline tests: ${baseCount}`); + console.log(`actual tests: ${actualCount}`); + line('COVERAGE LOST (ran on baseline, skipped now)', res.lost, true); + line('MISSING ENTIRELY (in baseline, absent now)', res.missing, true); + line('STATUS REGRESSION', res.changed, true); + line('gained (skipped on baseline, runs now)', res.gained, false); + line('new tests (not in baseline)', res.added, false); +} + +function selftest() { + if (!existsSync(DEFAULT_BASELINE)) { + console.error(`✗ selftest needs ${DEFAULT_BASELINE}`); + process.exit(1); + } + const base = JSON.parse(readFileSync(DEFAULT_BASELINE, 'utf8')).tests; + const keys = Object.keys(base); + const ranKey = keys.find((k) => base[k] === 'expected'); + let failures = 0; + const check = (name, actual, shouldPass) => { + const res = compare(base, actual); + const good = res.ok === shouldPass; + console.log( + ` ${good ? '✓' : '✗'} ${name} — ok=${res.ok}, want ${shouldPass}` + ); + if (!good) failures++; + }; + + // 1. Identity: the baseline against itself MUST pass, or every other case is noise. + check('identity (baseline vs itself) passes', { ...base }, true); + + // 2. A test silently flipping to skipped MUST be rejected. This is the exact + // failure mode: 228 *-msg-iso tests sit behind `test.skip(!fixture, …)`. + const flipped = { ...base, [ranKey]: 'skipped' }; + check('expected -> skipped is REJECTED', flipped, false); + + // 3. A test vanishing entirely MUST be rejected — a dropped shard or project. + const dropped = { ...base }; + delete dropped[ranKey]; + check('missing test is REJECTED', dropped, false); + + // 4. Swapping one test for another keeps the COUNT identical. A count-based gate + // passes here; this one must not. + const swapped = { ...base }; + delete swapped[ranKey]; + swapped['chromium-gen|tests/e2e/fake.spec.ts|invented'] = 'expected'; + check('same count, different tests is REJECTED', swapped, false); + + console.log( + failures ? `\n✗ selftest FAILED (${failures})` : '\n✓ selftest passed' + ); + process.exit(failures ? 1 : 0); +} + +// Only run the CLI when invoked directly. Without this guard, importing this module +// from a test executes the argument parsing below and exits the test runner. +const isMain = + process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href; +if (!isMain) { + // Imported for its exports (see scripts/__tests__/e2e-parity-diff.test.js). +} else { + runCli(); +} + +function runCli() { + const argv = process.argv.slice(2); + if (argv.includes('--selftest')) selftest(); + + const asJson = argv.includes('--json'); + const bi = argv.indexOf('--baseline'); + // `bi + 1` is only a real argument when --baseline was actually passed. Without this + // guard bi is -1, argv[0] IS the report path, and the filter below discards it — + // which made every real invocation print usage and exit 2 while --selftest passed. + const baselineArg = bi >= 0 ? argv[bi + 1] : null; + const baselinePath = baselineArg ?? DEFAULT_BASELINE; + const reportPath = argv.find((a) => !a.startsWith('--') && a !== baselineArg); + + if (!reportPath) { + console.error( + 'Usage: node scripts/e2e-parity-diff.mjs [--baseline ] [--json]\n' + + ' node scripts/e2e-parity-diff.mjs --selftest' + ); + process.exit(2); + } + + const baseline = JSON.parse(readFileSync(baselinePath, 'utf8')).tests; + const actual = loadReport(reportPath); + const res = compare(baseline, actual); + + if (asJson) console.log(JSON.stringify(res, null, 2)); + else report(res, Object.keys(baseline).length, Object.keys(actual).length); + + if (!res.ok) { + console.log( + `\n✗ PARITY FAILED — ${res.lost.length} lost, ${res.missing.length} missing, ${res.changed.length} regressed.` + ); + process.exit(1); + } + console.log('\n✓ parity holds — every baseline test still runs.'); +} diff --git a/tests/e2e/parity/README.md b/tests/e2e/parity/README.md new file mode 100644 index 00000000..414d180c --- /dev/null +++ b/tests/e2e/parity/README.md @@ -0,0 +1,72 @@ +# E2E parity baseline + +`baseline-de0f7f0.json` is a per-test record of the **last green E2E run against the +cloud Supabase project** before #567 exhausted the quota. + +It exists because #575 moves E2E onto a per-runner ephemeral Supabase, and that switch is +only safe if the local suite runs **the same tests**. This file is what "the same tests" +is measured against. + +| | | +| -------- | ------------------------------------------------------------- | +| run | 31048279017 | +| SHA | `de0f7f080c8d75949e4e6c89fdf66ab7d3da8029` | +| captured | 2026-08-06 | +| backend | cloud | +| tests | 2001 — **1807 expected, 194 skipped, 0 flaky** | +| projects | `{chromium,firefox,webkit}` × `{gen, msg, msg-iso}` = 24 jobs | + +## Why it is committed rather than fetched + +The source artifacts expire **2026-08-12T22:13Z**. After that the run's per-test detail is +unrecoverable — and the obvious fallback does not work: the `github` reporter only +annotates failures, so a green run leaves **6** check-run annotations, not 2001. Verified, +not assumed. + +The next cloud run that could regenerate this is impossible until the quota refills on +**2026-09-02**. So this file was captured inside the window and committed. + +## Why per-test identities, not counts + +A suite can drop one test and gain another and still total 2001. Counts would pass that; +`scripts/e2e-parity-diff.mjs` compares identities and rejects it. There is a test for +exactly that case (`same COUNT but different tests still fails`). + +This matters concretely here. **228 tests** — all 76 `*-msg-iso` per browser — sit behind +`test.skip(!fixture, 'isolation seed failed…')`, and `seedIsolatedAdmin` +(`tests/e2e/utils/test-user-factory.ts:2761-2772`) returns `null` on two silent paths +before reaching its loud `throw`. If the local stack cannot seed them, all 228 skip +quietly and the run is green. That is the failure this baseline exists to catch. + +## Direction matters + +The comparison is deliberately asymmetric: + +- `expected → skipped`, or a test **missing entirely** — coverage **lost**, fails. +- `expected → unexpected`/`flaky` — a real regression, fails. +- `skipped → expected` — a **gain**; reported, allowed. A local stack can legitimately run + something the cloud project could not. + +## Usage + +```bash +# after a run, merge the shards then diff +pnpm exec playwright merge-reports --reporter=json ./all-blob-reports > merged.json +node scripts/e2e-parity-diff.mjs merged.json + +# prove the comparator can still fail before trusting a pass +node scripts/e2e-parity-diff.mjs --selftest +``` + +## Known caveats + +The 194 skips are **not** uniform across browsers — 60 chromium / 70 firefox / 61 webkit. +Those 11 are browser-keyed and port cleanly. The rest are environment-keyed (66 +admin-dashboard, 27 avatar upload, 54 payment) and are the ones that could flip on a +different backend, in **either** direction. At least one is already known to: +`debug/capture-decryption-logs.spec.ts` skips on cloud and is expected to run locally, so +a small `gained` set is anticipated, not a bug. + +**Regenerating this file invalidates every claim that quotes 1807/194/2001** — including +`scripts/__tests__/e2e-parity-diff.test.js`, which asserts those three numbers precisely +so a silent regeneration cannot pass unnoticed. diff --git a/tests/e2e/parity/baseline-de0f7f0.json b/tests/e2e/parity/baseline-de0f7f0.json new file mode 100644 index 00000000..245e3d59 --- /dev/null +++ b/tests/e2e/parity/baseline-de0f7f0.json @@ -0,0 +1,2024 @@ +{ + "_comment": "Per-test baseline from the last green CLOUD E2E run. Captured because the source artifacts expire 2026-08-12T22:13Z and check-run annotations hold only 6 entries, not 2001. See #575.", + "run": 31048279017, + "sha": "de0f7f080c8d75949e4e6c89fdf66ab7d3da8029", + "capturedAt": "2026-08-06", + "backend": "cloud", + "stats": { + "startTime": "2026-08-05T21:39:09.530Z", + "duration": 871695.4850000001, + "expected": 1807, + "skipped": 194, + "unexpected": 0, + "flaky": 0 + }, + "totals": { + "tests": 2001, + "expected": 1807, + "skipped": 194 + }, + "duplicateKeys": [], + "tests": { + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-001: Upload button meets touch target requirements": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-002: Upload button has descriptive ARIA label": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-003: Keyboard navigation - Tab to upload button": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-004: Keyboard navigation - Enter activates upload": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-005: Crop modal traps focus": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-006: Escape key closes crop modal": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-007: Focus restored after closing crop modal": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-008: Error messages announced via aria-live": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-009: Success messages announced via aria-live": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-010: Color contrast meets WCAG AA (4.5:1)": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-011: Remove button has descriptive ARIA label": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-012: Zoom slider has accessible label and value": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-013: Screen reader announces avatar status": "expected", + "chromium-gen|accessibility/avatar-upload.a11y.test.ts|A11y-014: Component has landmark roles": "expected", + "chromium-gen|accessibility/colorblind-toggle.spec.ts|should close dropdown when clicking outside": "expected", + "chromium-gen|accessibility/colorblind-toggle.spec.ts|should close dropdown with Escape key": "expected", + "chromium-gen|accessibility/colorblind-toggle.spec.ts|should maintain focus management in dropdown": "expected", + "chromium-gen|accessibility/colorblind-toggle.spec.ts|should persist selected mode across page navigation": "expected", + "chromium-gen|accessibility/colorblind-toggle.spec.ts|should show pattern toggle when colorblind mode is active": "expected", + "chromium-gen|accessibility/colorblind-toggle.spec.ts|should support keyboard navigation in dropdown": "expected", + "chromium-gen|accessibility/contact-form-keyboard.spec.ts|should allow form submission via keyboard (Enter key)": "expected", + "chromium-gen|accessibility/contact-form-keyboard.spec.ts|should be keyboard navigable with proper tab order": "expected", + "chromium-gen|accessibility/contact-form-keyboard.spec.ts|should maintain focus after validation errors": "expected", + "chromium-gen|accessibility/contact-form-keyboard.spec.ts|should support Shift+Tab for backwards navigation": "expected", + "chromium-gen|admin/admin-conversation-list.spec.ts|flags the seeded >30d conversation as stale, leaves fresh rows unflagged": "skipped", + "chromium-gen|admin/admin-conversation-list.spec.ts|renders all five metadata column headers": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display activity badges": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display anomaly alerts when failed logins exist": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display authentication statistics": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display burst detection cards": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display event log table with rows": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display messaging statistics": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display payment statistics": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display payment trend chart": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display provider breakdown table": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display sparkline trend charts": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display stat cards with non-zero values": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display top senders table": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display users table with data": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should display volume trends": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should expand burst card to show event details": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should filter events by type": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should have working date range filter": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should navigate between all admin tabs": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should search/filter users": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should show retention notice": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should sort event log columns": "skipped", + "chromium-gen|admin/admin-dashboard.spec.ts|should sort users by column": "skipped", + "chromium-gen|admin/admin-depth.spec.ts|/admin/messaging: every table scroller sits in a padded well": "expected", + "chromium-gen|admin/admin-depth.spec.ts|/admin/payments: every table scroller sits in a padded well": "expected", + "chromium-gen|admin/admin-depth.spec.ts|an admin route is reachable at all \u2014 the gate opens for a promoted user": "expected", + "chromium-gen|admin/admin-user-pagination.spec.ts|should disable Next on last page": "skipped", + "chromium-gen|admin/admin-user-pagination.spec.ts|should display pagination when more than PAGE_SIZE users exist": "skipped", + "chromium-gen|admin/admin-user-pagination.spec.ts|should navigate to page 2 and update table rows": "skipped", + "chromium-gen|admin/admin-user-pagination.spec.ts|should search users and reset to page 1": "skipped", + "chromium-gen|admin/admin-user-pagination.spec.ts|should search, page forward, and confirm results update at each step": "skipped", + "chromium-gen|auth/protected-routes.spec.ts|should allow authenticated users to access protected routes": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should enforce RLS policies on payment access": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should handle session expiration gracefully": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should preserve session across page navigation": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should redirect to intended URL after authentication": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should redirect unauthenticated users to sign-in": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should show email verification notice for unverified users": "expected", + "chromium-gen|auth/protected-routes.spec.ts|should verify cascade delete removes related records": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should automatically refresh token before expiration": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should clear session on sign out": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should expire session after maximum duration": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should extend session duration with Remember Me checked": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should handle concurrent tab sessions correctly": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should persist session across browser restarts": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should refresh session automatically on page reload": "expected", + "chromium-gen|auth/session-persistence.spec.ts|should use short session without Remember Me": "expected", + "chromium-gen|auth/user-registration.spec.ts|should complete full registration flow from sign-up to protected access": "skipped", + "chromium-gen|auth/user-registration.spec.ts|should display OAuth buttons on sign-up page": "expected", + "chromium-gen|auth/user-registration.spec.ts|should navigate to sign-in from sign-up page": "expected", + "chromium-gen|auth/user-registration.spec.ts|should show error for password mismatch": "expected", + "chromium-gen|auth/user-registration.spec.ts|should show validation errors for invalid TLD email": "expected", + "chromium-gen|auth/user-registration.spec.ts|should show validation errors for weak password": "expected", + "chromium-gen|avatar/upload.spec.ts|Accessibility: Keyboard navigation": "skipped", + "chromium-gen|avatar/upload.spec.ts|Edge Case: Handle network interruption gracefully": "skipped", + "chromium-gen|avatar/upload.spec.ts|Edge Case: Reject invalid file format": "skipped", + "chromium-gen|avatar/upload.spec.ts|Edge Case: Reject oversized file": "skipped", + "chromium-gen|avatar/upload.spec.ts|US1.1 - Upload new avatar with crop interface": "skipped", + "chromium-gen|avatar/upload.spec.ts|US1.2 - Replace existing avatar": "skipped", + "chromium-gen|avatar/upload.spec.ts|US1.3 - Remove avatar": "skipped", + "chromium-gen|avatar/upload.spec.ts|US1.4 - Cancel crop without saving": "skipped", + "chromium-gen|avatar/upload.spec.ts|US1.5 - Avatar displays in both nav and account page (SC-005)": "skipped", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /__contrast-probe-unmatched-route__/": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /accessibility": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /account": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /account/audit": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/audit": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/email": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/messaging": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/payments": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/users": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/playable-city-chattanooga": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/seo": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/tags": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/tags/digital-twin": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /comment-policy": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /contact": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /cookies": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /docs": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /docs/install-and-first-run": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /forgot-password": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /game": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /game/3d": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /map": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages/new-group": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages/setup": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment-demo": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment-result": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /privacy": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /privacy-controls": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /profile": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /reset-password": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /schedule": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /sign-in": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /sign-up": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /status": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /themes": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /verify-email": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /wireframes": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /__contrast-probe-unmatched-route__/": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /accessibility": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /account": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /account/audit": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/audit": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/email": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/messaging": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/payments": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/users": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/playable-city-chattanooga": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/seo": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/tags": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/tags/digital-twin": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /comment-policy": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /contact": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /cookies": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /docs": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /docs/install-and-first-run": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /forgot-password": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /game": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /game/3d": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /map": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages/new-group": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages/setup": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment-demo": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment-result": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /privacy": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /privacy-controls": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /profile": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /reset-password": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /schedule": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /sign-in": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /sign-up": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /status": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /themes": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /verify-email": "expected", + "chromium-gen|color-contrast.spec.ts|scripthammer-light \u2014 /wireframes": "expected", + "chromium-gen|colorblind-fixed.spec.ts|a fixed element stays viewport-anchored on a scrolled page": "expected", + "chromium-gen|debug/capture-decryption-logs.spec.ts|capture console output from message exchange": "skipped", + "chromium-gen|embed-theme-contrast.spec.ts|acid \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|aqua \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|autumn \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|black \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|bumblebee \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|business \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|cmyk \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|coffee \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|corporate \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|cupcake \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|cyberpunk \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|dark \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|dim \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|dracula \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|emerald \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|fantasy \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|forest \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|garden \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|halloween \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|lemonade \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|light \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|lofi \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|luxury \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|night \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|nord \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|pastel \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|retro \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|scripthammer-dark \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|scripthammer-light \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|sunset \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|synthwave \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|valentine \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|winter \u2014 embed colors legible": "expected", + "chromium-gen|embed-theme-contrast.spec.ts|wireframe \u2014 embed colors legible": "expected", + "chromium-gen|form-label-grid.spec.ts|fields agree with their siblings at 1024px": "expected", + "chromium-gen|form-label-grid.spec.ts|fields agree with their siblings at 1280px": "expected", + "chromium-gen|form-label-grid.spec.ts|fields agree with their siblings at 320px": "expected", + "chromium-gen|form-label-grid.spec.ts|fields agree with their siblings at 390px": "expected", + "chromium-gen|form-label-grid.spec.ts|fields agree with their siblings at 768px": "expected", + "chromium-gen|game-3d.spec.ts|auto-orbit is active when reduced-motion is not set": "expected", + "chromium-gen|game-3d.spec.ts|auto-orbit is disabled when prefers-reduced-motion: reduce": "expected", + "chromium-gen|game-3d.spec.ts|canvas drag triggers a re-render (orbit controls active)": "expected", + "chromium-gen|game-3d.spec.ts|clicking Retry re-runs the WebGL probe (stays in fallback if still unavailable)": "expected", + "chromium-gen|game-3d.spec.ts|mouse drag changes camera position": "expected", + "chromium-gen|game-3d.spec.ts|mouse wheel zoom changes camera position": "expected", + "chromium-gen|game-3d.spec.ts|navigating to /game/3d mounts a element": "expected", + "chromium-gen|game-3d.spec.ts|no SSR errors: page reaches network idle without console.error": "expected", + "chromium-gen|game-3d.spec.ts|page heading and breadcrumb render": "expected", + "chromium-gen|game-3d.spec.ts|rendered content fills available width on mobile viewport without horizontal overflow": "expected", + "chromium-gen|game-3d.spec.ts|renders FallbackPanel when WebGL is unavailable (probe returns null)": "expected", + "chromium-gen|game-3d.spec.ts|switching data-theme on updates the scene mesh color": "expected", + "chromium-gen|game-3d.spec.ts|touch drag changes camera position": "expected", + "chromium-gen|landmarks.spec.ts|/ has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/__landmark-probe-unmatched-route__/ has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/accessibility has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/account has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/account/audit has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/admin has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/admin/audit has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/admin/email has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/admin/messaging has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/admin/payments has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/admin/users has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/blog has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/blog/playable-city-chattanooga has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/blog/seo has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/blog/tags has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/blog/tags/digital-twin has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/comment-policy has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/contact has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/cookies has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/docs has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/docs/install-and-first-run has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/forgot-password has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/game has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/game/3d has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/map has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/messages has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/messages/new-group has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/messages/setup has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/payment has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/payment-demo has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/payment-result has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/privacy has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/privacy-controls has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/profile has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/reset-password has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/schedule has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/sign-in has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/sign-up has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/status has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/themes has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/verify-email has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|/wireframes has one
and a working skip link": "expected", + "chromium-gen|landmarks.spec.ts|the skip link is the first thing keyboard focus reaches, and moves focus into content": "expected", + "chromium-gen|landmarks.spec.ts|the sweep covers every enumerated route": "expected", + "chromium-gen|map.spec.ts|should be responsive on mobile": "expected", + "chromium-gen|map.spec.ts|should display accuracy circle when available": "expected", + "chromium-gen|map.spec.ts|should display custom markers": "expected", + "chromium-gen|map.spec.ts|should display location button when showUserLocation is enabled": "expected", + "chromium-gen|map.spec.ts|should get user location after accepting consent": "expected", + "chromium-gen|map.spec.ts|should handle accessibility requirements": "expected", + "chromium-gen|map.spec.ts|should handle dark mode theme": "expected", + "chromium-gen|map.spec.ts|should handle keyboard navigation": "expected", + "chromium-gen|map.spec.ts|should handle location permission denial": "expected", + "chromium-gen|map.spec.ts|should handle map pan gestures": "expected", + "chromium-gen|map.spec.ts|should handle map zoom controls": "expected", + "chromium-gen|map.spec.ts|should handle rapid location updates": "expected", + "chromium-gen|map.spec.ts|should load map page successfully": "expected", + "chromium-gen|map.spec.ts|should remember consent decision": "expected", + "chromium-gen|map.spec.ts|should show consent modal on first location request": "expected", + "chromium-gen|map.spec.ts|should show marker popups on click": "expected", + "chromium-gen|map.spec.ts|should work offline with cached tiles": "expected", + "chromium-gen|mobile-check.spec.ts|mobile status check": "expected", + "chromium-gen|mobile-dropdown-screenshot.spec.ts|should capture dropdown menu on mobile": "expected", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should allow selecting different payment providers": "expected", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should complete one-time payment successfully": "skipped", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should display error for declined card": "skipped", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should enforce payment consent requirement": "expected", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should handle payment cancellation gracefully": "skipped", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should redirect to subscription-mode Stripe Checkout": "skipped", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should show offline queue indicator when offline": "skipped", + "chromium-gen|payment/01-stripe-onetime.spec.ts|should show payment options after granting consent": "expected", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should allow subscription cancellation": "skipped", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should create PayPal subscription successfully": "skipped", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should handle failed payment retry logic": "skipped", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should prevent duplicate subscriptions": "expected", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should show PayPal payment button": "expected", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should show PayPal provider tab": "expected", + "chromium-gen|payment/02-paypal-subscription.spec.ts|should show grace period warning": "expected", + "chromium-gen|payment/02-paypal-subscription.spec.ts|subscription management route renders for an authed user (#5)": "expected", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should display offline error banner when offline": "expected", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should display retry button for failed payment": "skipped", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should display user-friendly error messages": "skipped", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should expand recovery list at retry_count >= 2": "skipped", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should grant consent and show payment options": "expected", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should log error details for debugging": "skipped", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should mount SwitchProviderPanel when \"Use a different payment method\" is clicked": "skipped", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should offer + run a dunning retry for a past_due subscription": "expected", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should render payment result page with malformed ID": "expected", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should render payment result page with missing session": "expected", + "chromium-gen|payment/03-failed-payment-retry.spec.ts|should show payment demo page correctly": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should allow proceeding after consent": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should allow withdrawing payment consent (GDPR right to withdraw)": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should handle consent decline gracefully": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should have accessible consent buttons": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should not load payment scripts before consent": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should persist consent decision": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should remember consent across page reloads": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should show consent section on first visit": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should show payment options after consent granted": "expected", + "chromium-gen|payment/04-gdpr-consent.spec.ts|should show privacy information": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|queue management UI renders on the payment hub (#4)": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should clear the queue manually": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should drain the queue on Retry (needs live provider)": "skipped", + "chromium-gen|payment/05-offline-queue.spec.ts|should grant consent successfully": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should handle multiple queued payments": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should persist queue across page reloads": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should show Max-retries badge after max attempts": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should show payment demo page": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should show queued items and the Offline badge when offline": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should show retry count on queued items": "expected", + "chromium-gen|payment/05-offline-queue.spec.ts|should warn when device storage is near quota": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should coalesce a burst of updates into an \"N updates\" indicator": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should handle subscription status changes in real-time": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should load payment demo page": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should render a payment trend chart from the user's payments": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should show \"Reconnecting\u2026\" on a channel drop (unit-covered)": "skipped", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should show a realtime connection-status indicator": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should show live transaction counter": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should show payment history section after consent": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should show real-time payment status updates": "skipped", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should surface an error alert when a realtime payment fails": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should update payment list when new payment added": "expected", + "chromium-gen|payment/06-realtime-dashboard.spec.ts|should update webhook verification status in real-time": "skipped", + "chromium-gen|payment/07-performance.spec.ts|should grant consent within reasonable time": "expected", + "chromium-gen|payment/07-performance.spec.ts|should load payment demo page within reasonable time": "expected", + "chromium-gen|payment/08-subscription-lifecycle.spec.ts|cancel and resume round-trip through the deployed Edge Functions": "skipped", + "chromium-gen|security/oauth-csrf.spec.ts|OAuth buttons should be visible and enabled on sign-in page": "expected", + "chromium-gen|security/oauth-csrf.spec.ts|OAuth flow should include required OAuth parameters": "expected", + "chromium-gen|security/oauth-csrf.spec.ts|OAuth redirect should go to correct provider": "expected", + "chromium-gen|security/oauth-csrf.spec.ts|OAuth redirect should include state parameter for CSRF protection": "expected", + "chromium-gen|security/oauth-csrf.spec.ts|OAuth redirect_uri should point to Supabase callback": "expected", + "chromium-gen|security/oauth-csrf.spec.ts|OAuth state parameter should be unique per request": "expected", + "chromium-gen|security/oauth-csrf.spec.ts|different browser sessions should have isolated OAuth state": "expected", + "chromium-gen|security/payment-isolation.spec.ts|Payment buttons require GDPR consent": "expected", + "chromium-gen|security/payment-isolation.spec.ts|Payment history shows only own payments": "expected", + "chromium-gen|security/payment-isolation.spec.ts|Payment intent includes correct user association": "expected", + "chromium-gen|security/payment-isolation.spec.ts|Unauthenticated users see sign-in prompt on payment page": "expected", + "chromium-gen|security/payment-isolation.spec.ts|User A and User B have isolated payment sessions": "expected", + "chromium-gen|tests/accessibility.spec.ts|ARIA landmarks are present": "expected", + "chromium-gen|tests/accessibility.spec.ts|accessibility settings page passes automated checks": "expected", + "chromium-gen|tests/accessibility.spec.ts|all form inputs have labels": "expected", + "chromium-gen|tests/accessibility.spec.ts|all images have alt text": "expected", + "chromium-gen|tests/accessibility.spec.ts|color contrast advisory (axe-core executes successfully)": "expected", + "chromium-gen|tests/accessibility.spec.ts|error messages are associated with form fields": "expected", + "chromium-gen|tests/accessibility.spec.ts|focus indicators are visible": "expected", + "chromium-gen|tests/accessibility.spec.ts|font size controls actually resize text": "expected", + "chromium-gen|tests/accessibility.spec.ts|homepage passes automated accessibility checks": "expected", + "chromium-gen|tests/accessibility.spec.ts|keyboard navigation works throughout the site": "expected", + "chromium-gen|tests/accessibility.spec.ts|links have distinguishable text": "expected", + "chromium-gen|tests/accessibility.spec.ts|page has proper heading hierarchy": "expected", + "chromium-gen|tests/accessibility.spec.ts|reduced motion is respected": "expected", + "chromium-gen|tests/accessibility.spec.ts|sign-in page passes automated accessibility checks": "expected", + "chromium-gen|tests/accessibility.spec.ts|skip to main content link works": "expected", + "chromium-gen|tests/accessibility.spec.ts|themes page passes automated accessibility checks": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should allow code blocks to scroll internally": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should display SEO badge in top-right corner": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should display TOC button in top-right corner": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should display featured image without cropping important content": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should display footer at bottom of page": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should have readable text without zooming": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should have touch-friendly interactive elements": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should maintain layout when scrolling": "expected", + "chromium-gen|tests/blog-mobile-ux-iphone.spec.ts|should not have horizontal scroll on page": "expected", + "chromium-gen|tests/blog-mobile-ux-pixel.spec.ts|should display footer at bottom": "expected", + "chromium-gen|tests/blog-mobile-ux-pixel.spec.ts|should not have horizontal scroll": "expected", + "chromium-gen|tests/blog-touch-targets.spec.ts|Blog list cards have adequate touch targets (44x44px minimum)": "expected", + "chromium-gen|tests/blog-touch-targets.spec.ts|Blog post interactive elements meet 44x44px": "expected", + "chromium-gen|tests/broken-links.spec.ts|check all internal links for 404s": "skipped", + "chromium-gen|tests/broken-links.spec.ts|check meta tag images and resources": "expected", + "chromium-gen|tests/broken-links.spec.ts|check specific known problematic links": "expected", + "chromium-gen|tests/broken-links.spec.ts|validate sitemap entries": "expected", + "chromium-gen|tests/container-width.spec.ts|container fills the viewport at every width below the cap": "expected", + "chromium-gen|tests/container-width.spec.ts|container stops widening at the cap": "expected", + "chromium-gen|tests/container-width.spec.ts|widening the container introduces no horizontal overflow": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|404 page handles non-existent routes": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|active navigation item is highlighted": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|anchor links within pages work": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|breadcrumb navigation works if present": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|browser back/forward navigation works": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|deep linking works correctly": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|external links open in new tab": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|mobile navigation menu works": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|navigate through all main pages": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|navigation menu is consistent across pages": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|navigation menu is keyboard accessible": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|navigation preserves theme selection": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|page transitions are smooth": "expected", + "chromium-gen|tests/cross-page-navigation.spec.ts|scroll position resets on navigation": "expected", + "chromium-gen|tests/depth-tokens.spec.ts|a depth utility beats component styles on the default themes": "expected", + "chromium-gen|tests/depth-tokens.spec.ts|a plate reads as raised and a well as cut, on every theme": "expected", + "chromium-gen|tests/depth-tokens.spec.ts|depth primitives derive from theme colour, not literal black": "expected", + "chromium-gen|tests/depth-tokens.spec.ts|every theme renders depth with at least one visible ink": "expected", + "chromium-gen|tests/depth-tokens.spec.ts|the three depth utilities are emitted": "expected", + "chromium-gen|tests/form-submission.spec.ts|disabled fields cannot be edited": "expected", + "chromium-gen|tests/form-submission.spec.ts|error messages display correctly": "expected", + "chromium-gen|tests/form-submission.spec.ts|form data persists on page reload": "expected", + "chromium-gen|tests/form-submission.spec.ts|form fields have proper labels and ARIA attributes": "expected", + "chromium-gen|tests/form-submission.spec.ts|form fields maintain focus order": "expected", + "chromium-gen|tests/form-submission.spec.ts|form shows loading state during submission": "expected", + "chromium-gen|tests/form-submission.spec.ts|form submission with valid data": "expected", + "chromium-gen|tests/form-submission.spec.ts|form validation prevents submission with invalid data": "expected", + "chromium-gen|tests/form-submission.spec.ts|help text is properly associated with fields": "expected", + "chromium-gen|tests/form-submission.spec.ts|multi-step form navigation works correctly": "expected", + "chromium-gen|tests/form-submission.spec.ts|required fields show indicators": "expected", + "chromium-gen|tests/homepage.spec.ts|GitHub repository link opens in new tab": "skipped", + "chromium-gen|tests/homepage.spec.ts|homepage loads with correct title": "expected", + "chromium-gen|tests/homepage.spec.ts|navigate to game page": "expected", + "chromium-gen|tests/homepage.spec.ts|navigate to storybook page": "expected", + "chromium-gen|tests/homepage.spec.ts|navigate to themes page": "expected", + "chromium-gen|tests/homepage.spec.ts|navigation links in secondary nav work": "expected", + "chromium-gen|tests/homepage.spec.ts|skip to main content link works": "expected", + "chromium-gen|tests/homepage.spec.ts|the four modules are present and numbered": "expected", + "chromium-gen|tests/homepage.spec.ts|the install block shows the Docker path, never npx": "expected", + "chromium-gen|tests/mobile-buttons.spec.ts|All buttons meet 44x44px minimum on mobile": "expected", + "chromium-gen|tests/mobile-buttons.spec.ts|Buttons have 8px minimum spacing": "expected", + "chromium-gen|tests/mobile-card-layout.spec.ts|Cards fit within viewport at all mobile widths": "expected", + "chromium-gen|tests/mobile-card-layout.spec.ts|Cards stack vertically on mobile (320px-767px)": "expected", + "chromium-gen|tests/mobile-card-layout.spec.ts|Cards use grid layout on tablet (768px+)": "expected", + "chromium-gen|tests/mobile-footer.spec.ts|Footer fits within viewport": "expected", + "chromium-gen|tests/mobile-footer.spec.ts|Footer links meet touch target standards": "expected", + "chromium-gen|tests/mobile-footer.spec.ts|Footer links stack vertically on mobile": "expected", + "chromium-gen|tests/mobile-form-inputs.spec.ts|Form fields have adequate spacing": "expected", + "chromium-gen|tests/mobile-form-inputs.spec.ts|Form inputs meet 44px height minimum": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|Images do not cause horizontal overflow": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /accessibility": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /account": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /account/audit": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/audit": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/email": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/messaging": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/payments": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/users": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/playable-city-chattanooga": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/seo": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/tags": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/tags/digital-twin": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /chatt": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /comment-policy": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /contact": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /cookies": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /docs": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /docs/install-and-first-run": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /forgot-password": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /game": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /game/3d": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /map": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages/new-group": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages/setup": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment-demo": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment-result": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /privacy": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /privacy-controls": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /profile": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /reset-password": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /schedule": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /sign-in": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /sign-up": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /status": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /themes": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /verify-email": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /wireframes": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|Pre/code blocks are responsive": "expected", + "chromium-gen|tests/mobile-horizontal-scroll.spec.ts|Tables are responsive on mobile": "expected", + "chromium-gen|tests/mobile-images.spec.ts|Images fit within 320px viewport": "expected", + "chromium-gen|tests/mobile-images.spec.ts|Images fit within 390px viewport": "expected", + "chromium-gen|tests/mobile-images.spec.ts|Images fit within 428px viewport": "expected", + "chromium-gen|tests/mobile-images.spec.ts|Images use lazy loading": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Mobile menu toggle works on narrow viewports": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation adapts to orientation change": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation controls are all visible at 320px (narrowest mobile)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within Narrow Mobile (320px) viewport (320px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 12 Landscape viewport (844px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 12 viewport (390px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 13 viewport (390px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 Pro Max Landscape viewport (926px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 Pro Max viewport (428px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 viewport (390px)": "expected", + "chromium-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone SE viewport (375px)": "expected", + "chromium-gen|tests/mobile-orientation.spec.ts|Content adapts to orientation without breaking": "expected", + "chromium-gen|tests/mobile-orientation.spec.ts|Orientation change triggers responsive adjustments": "expected", + "chromium-gen|tests/mobile-orientation.spec.ts|Tablet landscape uses tablet/desktop layout": "expected", + "chromium-gen|tests/mobile-orientation.spec.ts|iPhone 12 landscape STAYS in mobile mode (critical test)": "expected", + "chromium-gen|tests/mobile-orientation.spec.ts|iPhone 12 portrait uses mobile styles": "expected", + "chromium-gen|tests/mobile-orientation.spec.ts|matchMedia detects orientation correctly": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|All interactive elements meet 44x44px minimum on iPhone 12": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|Form inputs meet touch target height standards": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|Links in content meet touch target standards": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|Navigation buttons meet touch target standards": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|Touch targets have adequate spacing (8px minimum)": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|Touch targets maintain size across mobile widths": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|desktop nav group menus expose 44px targets (#378)": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|the Demos menu is keyboard operable and Escape restores focus (#378)": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|the Display popover is reachable at every width and its controls meet 44px (#378)": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|the banner spacer reserves the banner\u2019s real height (#457)": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|the cookie banner's OWN controls meet 44px (#457)": "expected", + "chromium-gen|tests/mobile-touch-targets.spec.ts|the mobile menu's own items meet 44px (#378)": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Body text is readable without zoom (\u226514px minimum)": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Font sizes scale with viewport using fluid typography": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Headings scale appropriately on mobile": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Line height is comfortable (\u22651.5)": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Small text is avoided or has min-font-size": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Text does not overflow containers on mobile": "expected", + "chromium-gen|tests/mobile-typography.spec.ts|Text remains readable in landscape orientation": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|PWA install prompt component is present": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|app works offline after service worker activation": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|apple touch icons are present for iOS": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|install button shows on supported browsers": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|manifest contains required PWA fields": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|manifest file is linked correctly": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|maskable icon is provided for Android": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|service worker registers successfully": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|shortcuts are defined in manifest": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|theme color meta tags are valid": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|viewport meta tag is set for mobile": "expected", + "chromium-gen|tests/pwa-installation.spec.ts|web app is installable (Lighthouse PWA criteria)": "expected", + "chromium-gen|tests/theme-switching.spec.ts|all theme buttons are present": "expected", + "chromium-gen|tests/theme-switching.spec.ts|can switch to bumblebee theme": "expected", + "chromium-gen|tests/theme-switching.spec.ts|can switch to corporate theme": "expected", + "chromium-gen|tests/theme-switching.spec.ts|can switch to cupcake theme": "expected", + "chromium-gen|tests/theme-switching.spec.ts|can switch to emerald theme": "expected", + "chromium-gen|tests/theme-switching.spec.ts|can switch to light theme": "expected", + "chromium-gen|tests/theme-switching.spec.ts|localStorage stores theme preference": "expected", + "chromium-gen|tests/theme-switching.spec.ts|switch to dark theme and verify persistence": "expected", + "chromium-gen|tests/theme-switching.spec.ts|switch to light theme and verify persistence": "expected", + "chromium-gen|tests/theme-switching.spec.ts|theme applies to all pages consistently": "expected", + "chromium-gen|tests/theme-switching.spec.ts|theme preview shows correct colors": "expected", + "chromium-gen|tests/theme-switching.spec.ts|theme switcher is accessible from homepage": "expected", + "chromium-gen|tests/theme-switching.spec.ts|theme transition is smooth": "expected", + "chromium-gen|tests/type-scale-truth.spec.ts|a first-time visitor paints at the medium default, not 1": "expected", + "chromium-gen|tests/type-scale-truth.spec.ts|the /docs h1 uses text-5xl at/above sm and text-4xl below": "expected", + "chromium-gen|tests/type-scale-truth.spec.ts|the font scale is applied before hydration, including a stored preference": "expected", + "chromium-gen|tests/type-stack-truth.spec.ts|a stored font preference applies to headings before hydration": "expected", + "chromium-gen|tests/type-stack-truth.spec.ts|body, headings and code render the declared faces": "expected", + "chromium-gen|tests/type-stack-truth.spec.ts|choosing a font replaces the display face on headings": "expected", + "chromium-gen|tests/type-stack-truth.spec.ts|font utilities still override the base heading rule": "expected", + "chromium-gen|tests/type-stack-truth.spec.ts|font variables are declared on :root, not below it": "expected", + "chromium-gen|twin-glass-contrast.spec.ts|nav text clears AAA against ANY backdrop the scene can produce": "expected", + "chromium-gen|twin-glass-contrast.spec.ts|the glass is scoped to twin routes only": "expected", + "chromium-gen|twins.spec.ts|/twins/chatt/?diorama loads the baked manifest and shows the camera dock": "expected", + "chromium-gen|twins.spec.ts|?atlas remains a working alias for links shared before the flip": "expected", + "chromium-gen|twins.spec.ts|?diorama still reaches the exhibit": "expected", + "chromium-gen|twins.spec.ts|Top-down compare mode (#233): dock button + ?ortho render without errors": "expected", + "chromium-gen|twins.spec.ts|exactly one contentinfo landmark, and it carries the real links (#301)": "expected", + "chromium-gen|twins.spec.ts|no unexpected console.error on load": "expected", + "chromium-gen|twins.spec.ts|the HUD is capped in width and wraps rather than clips (#307)": "expected", + "chromium-gen|twins.spec.ts|the R3F canvas mounts when WebGL is available": "expected", + "chromium-gen|twins.spec.ts|the atlas MODULE mounts on /chatt (no WebGL needed)": "expected", + "chromium-gen|twins.spec.ts|the atlas SCENE initialises without erroring": "expected", + "chromium-gen|twins.spec.ts|the atlas keeps its cookie banner and drops the PWA popup (#301)": "expected", + "chromium-gen|twins.spec.ts|the atlas reports a real building count, not an empty scene": "expected", + "chromium-gen|twins.spec.ts|the diorama hides the cookie banner its dock sits under (#301)": "expected", + "chromium-gen|twins.spec.ts|the diorama wordmark is finally out from under the nav (#299)": "expected", + "chromium-gen|twins.spec.ts|the page cannot scroll, so the HUD cannot hide (#301)": "expected", + "chromium-gen|twins.spec.ts|the twin is reachable from normal navigation (homepage demo card)": "expected", + "chromium-gen|twins.spec.ts|the type chip is reachable, even after trying to scroll (#301)": "expected", + "chromium-msg-iso|messaging/complete-user-workflow.spec.ts|Complete messaging workflow: send -> receive -> reply -> verify encryption": "expected", + "chromium-msg-iso|messaging/complete-user-workflow.spec.ts|should load conversations page within 5 seconds (SC-001)": "expected", + "chromium-msg-iso|messaging/complete-user-workflow.spec.ts|should show retry button on error state (FR-005)": "expected", + "chromium-msg-iso|messaging/cross-window-delivery.spec.ts|partner receives a message viewer sends, via the polling effect": "expected", + "chromium-msg-iso|messaging/encrypted-messaging.spec.ts|should load message history with pagination": "expected", + "chromium-msg-iso|messaging/encrypted-messaging.spec.ts|should never send private keys to server": "expected", + "chromium-msg-iso|messaging/encrypted-messaging.spec.ts|should send and receive encrypted message between two users": "expected", + "chromium-msg-iso|messaging/encrypted-messaging.spec.ts|should show delivery status indicators": "expected", + "chromium-msg-iso|messaging/encrypted-messaging.spec.ts|should verify zero-knowledge encryption in database": "expected", + "chromium-msg-iso|messaging/friend-requests.spec.ts|addressee can decline a friend request": "expected", + "chromium-msg-iso|messaging/friend-requests.spec.ts|connections page meets WCAG standards": "expected", + "chromium-msg-iso|messaging/friend-requests.spec.ts|duplicate requests are prevented": "expected", + "chromium-msg-iso|messaging/friend-requests.spec.ts|requester can cancel a sent pending request": "expected", + "chromium-msg-iso|messaging/friend-requests.spec.ts|requester sends friend request and addressee accepts": "expected", + "chromium-msg-iso|messaging/friend-requests.spec.ts|tab navigation works correctly": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should be keyboard navigable (T193)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should close modal on cancel button click (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should delete account and redirect to sign-in (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should export decrypted messages (T191)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should have ARIA live regions for status updates (T193)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should have accessible ARIA attributes (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should open confirmation modal on delete button click (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should require typing \"DELETE\" to enable deletion (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should show account deletion button in account settings (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should show data export button in account settings (T191)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should show error message on deletion failure (T192)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should show error on export failure (T191)": "expected", + "chromium-msg-iso|messaging/gdpr-compliance.spec.ts|should trigger data export download (T191)": "expected", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|contract - isolated connection helper is usable": "expected", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|member A sends an encrypted group message and member B decrypts it": "expected", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|sends and reads an encrypted message in a UI-created group (#182)": "skipped", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|should create group with connected users": "expected", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|should navigate back to messages when clicking back button": "expected", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|should navigate to new-group page and show connections": "expected", + "chromium-msg-iso|messaging/group-chat-multiuser.spec.ts|should show New Group link in sidebar": "expected", + "chromium-msg-iso|messaging/message-delete-placeholder.spec.ts|should show [Message deleted] placeholder and preserve adjacent messages": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|T115: should edit message within 15-minute window": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|T116: should delete message within 15-minute window": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|T117: should not show Edit/Delete buttons for messages older than 15 minutes": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|T130: edit mode should have proper ARIA labels": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|delete confirmation modal should be keyboard navigable": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|delete confirmation modal should have proper ARIA labels": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should cancel deletion from confirmation modal": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should cancel edit without saving": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should disable Save button when content unchanged": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should not allow editing empty message": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should not show Edit/Delete buttons on deleted message": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should not show Edit/Delete buttons on received messages": "expected", + "chromium-msg-iso|messaging/message-editing.spec.ts|should show Edit/Delete buttons only for own recent messages": "expected", + "chromium-msg-iso|messaging/oauth-setup-modal.spec.ts|US-1: OAuth user with no keys sees setup mode": "expected", + "chromium-msg-iso|messaging/oauth-setup-modal.spec.ts|US-2: returning OAuth user sees unlock mode with provider badge": "expected", + "chromium-msg-iso|messaging/oauth-setup-modal.spec.ts|US-3: email user sees unchanged unlock modal (regression)": "expected", + "chromium-msg-iso|messaging/offline-queue-sync.spec.ts|should queue a message offline and sync when reconnected": "expected", + "chromium-msg-iso|messaging/offline-queue.spec.ts|T146: should queue message when offline and send when online": "expected", + "chromium-msg-iso|messaging/offline-queue.spec.ts|T147: should queue multiple messages and sync all when reconnected": "expected", + "chromium-msg-iso|messaging/offline-queue.spec.ts|T148: should retry with exponential backoff on server failure": "expected", + "chromium-msg-iso|messaging/offline-queue.spec.ts|T149: should handle conflict resolution with server timestamp": "expected", + "chromium-msg-iso|messaging/offline-queue.spec.ts|should show failed status after max retries": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|Auto-scroll to bottom on new message": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|Jump to bottom button with smooth scroll": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|Performance monitoring logs for large conversations": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|Scroll position maintained during pagination": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|T166: Performance with 1000 messages - scrolling FPS": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|T167: Pagination loads next 50 messages": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|T169: Keyboard navigation through messages": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|T172b: Virtual scrolling activates at exactly 100 messages": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|Tab navigation to jump to bottom button": "expected", + "chromium-msg-iso|messaging/performance.spec.ts|Virtual scrolling maintains 60fps during rapid scrolling": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should auto-expire typing indicator after 5 seconds": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should deliver message in <500ms between two windows": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should handle rapid message exchanges": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should hide typing indicator when user stops typing": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should remove typing indicator when message is sent": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should show delivery status (sent \u2192 delivered \u2192 read)": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should show multiple typing indicators correctly": "expected", + "chromium-msg-iso|messaging/real-time-delivery.spec.ts|should show typing indicator when user types": "expected", + "chromium-msg|messaging/messaging-scroll.spec.ts|T003: Message input visible on mobile viewport (375x667)": "expected", + "chromium-msg|messaging/messaging-scroll.spec.ts|T004: Message input visible on tablet viewport (768x1024)": "expected", + "chromium-msg|messaging/messaging-scroll.spec.ts|T005: Message input visible on desktop viewport (1280x800)": "expected", + "chromium-msg|messaging/messaging-scroll.spec.ts|T006: Scroll container constrained to MessageThread": "expected", + "chromium-msg|messaging/messaging-scroll.spec.ts|T007-T008: Jump button appears when scrolled and does not overlap input": "expected", + "chromium-msg|messaging/messaging-scroll.spec.ts|T009: Jump button click scrolls to bottom": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-001: Upload button meets touch target requirements": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-002: Upload button has descriptive ARIA label": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-003: Keyboard navigation - Tab to upload button": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-004: Keyboard navigation - Enter activates upload": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-005: Crop modal traps focus": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-006: Escape key closes crop modal": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-007: Focus restored after closing crop modal": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-008: Error messages announced via aria-live": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-009: Success messages announced via aria-live": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-010: Color contrast meets WCAG AA (4.5:1)": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-011: Remove button has descriptive ARIA label": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-012: Zoom slider has accessible label and value": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-013: Screen reader announces avatar status": "expected", + "firefox-gen|accessibility/avatar-upload.a11y.test.ts|A11y-014: Component has landmark roles": "expected", + "firefox-gen|accessibility/colorblind-toggle.spec.ts|should close dropdown when clicking outside": "expected", + "firefox-gen|accessibility/colorblind-toggle.spec.ts|should close dropdown with Escape key": "expected", + "firefox-gen|accessibility/colorblind-toggle.spec.ts|should maintain focus management in dropdown": "expected", + "firefox-gen|accessibility/colorblind-toggle.spec.ts|should persist selected mode across page navigation": "expected", + "firefox-gen|accessibility/colorblind-toggle.spec.ts|should show pattern toggle when colorblind mode is active": "expected", + "firefox-gen|accessibility/colorblind-toggle.spec.ts|should support keyboard navigation in dropdown": "expected", + "firefox-gen|accessibility/contact-form-keyboard.spec.ts|should allow form submission via keyboard (Enter key)": "expected", + "firefox-gen|accessibility/contact-form-keyboard.spec.ts|should be keyboard navigable with proper tab order": "expected", + "firefox-gen|accessibility/contact-form-keyboard.spec.ts|should maintain focus after validation errors": "expected", + "firefox-gen|accessibility/contact-form-keyboard.spec.ts|should support Shift+Tab for backwards navigation": "expected", + "firefox-gen|admin/admin-conversation-list.spec.ts|flags the seeded >30d conversation as stale, leaves fresh rows unflagged": "skipped", + "firefox-gen|admin/admin-conversation-list.spec.ts|renders all five metadata column headers": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display activity badges": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display anomaly alerts when failed logins exist": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display authentication statistics": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display burst detection cards": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display event log table with rows": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display messaging statistics": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display payment statistics": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display payment trend chart": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display provider breakdown table": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display sparkline trend charts": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display stat cards with non-zero values": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display top senders table": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display users table with data": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should display volume trends": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should expand burst card to show event details": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should filter events by type": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should have working date range filter": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should navigate between all admin tabs": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should search/filter users": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should show retention notice": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should sort event log columns": "skipped", + "firefox-gen|admin/admin-dashboard.spec.ts|should sort users by column": "skipped", + "firefox-gen|admin/admin-depth.spec.ts|/admin/messaging: every table scroller sits in a padded well": "expected", + "firefox-gen|admin/admin-depth.spec.ts|/admin/payments: every table scroller sits in a padded well": "expected", + "firefox-gen|admin/admin-depth.spec.ts|an admin route is reachable at all \u2014 the gate opens for a promoted user": "expected", + "firefox-gen|admin/admin-user-pagination.spec.ts|should disable Next on last page": "skipped", + "firefox-gen|admin/admin-user-pagination.spec.ts|should display pagination when more than PAGE_SIZE users exist": "skipped", + "firefox-gen|admin/admin-user-pagination.spec.ts|should navigate to page 2 and update table rows": "skipped", + "firefox-gen|admin/admin-user-pagination.spec.ts|should search users and reset to page 1": "skipped", + "firefox-gen|admin/admin-user-pagination.spec.ts|should search, page forward, and confirm results update at each step": "skipped", + "firefox-gen|auth/protected-routes.spec.ts|should allow authenticated users to access protected routes": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should enforce RLS policies on payment access": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should handle session expiration gracefully": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should preserve session across page navigation": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should redirect to intended URL after authentication": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should redirect unauthenticated users to sign-in": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should show email verification notice for unverified users": "expected", + "firefox-gen|auth/protected-routes.spec.ts|should verify cascade delete removes related records": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should automatically refresh token before expiration": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should clear session on sign out": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should expire session after maximum duration": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should extend session duration with Remember Me checked": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should handle concurrent tab sessions correctly": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should persist session across browser restarts": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should refresh session automatically on page reload": "expected", + "firefox-gen|auth/session-persistence.spec.ts|should use short session without Remember Me": "expected", + "firefox-gen|auth/user-registration.spec.ts|should complete full registration flow from sign-up to protected access": "skipped", + "firefox-gen|auth/user-registration.spec.ts|should display OAuth buttons on sign-up page": "expected", + "firefox-gen|auth/user-registration.spec.ts|should navigate to sign-in from sign-up page": "expected", + "firefox-gen|auth/user-registration.spec.ts|should show error for password mismatch": "expected", + "firefox-gen|auth/user-registration.spec.ts|should show validation errors for invalid TLD email": "expected", + "firefox-gen|auth/user-registration.spec.ts|should show validation errors for weak password": "expected", + "firefox-gen|avatar/upload.spec.ts|Accessibility: Keyboard navigation": "skipped", + "firefox-gen|avatar/upload.spec.ts|Edge Case: Handle network interruption gracefully": "skipped", + "firefox-gen|avatar/upload.spec.ts|Edge Case: Reject invalid file format": "skipped", + "firefox-gen|avatar/upload.spec.ts|Edge Case: Reject oversized file": "skipped", + "firefox-gen|avatar/upload.spec.ts|US1.1 - Upload new avatar with crop interface": "skipped", + "firefox-gen|avatar/upload.spec.ts|US1.2 - Replace existing avatar": "skipped", + "firefox-gen|avatar/upload.spec.ts|US1.3 - Remove avatar": "skipped", + "firefox-gen|avatar/upload.spec.ts|US1.4 - Cancel crop without saving": "skipped", + "firefox-gen|avatar/upload.spec.ts|US1.5 - Avatar displays in both nav and account page (SC-005)": "skipped", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /__contrast-probe-unmatched-route__/": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /accessibility": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /account": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /account/audit": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/audit": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/email": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/messaging": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/payments": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/users": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/playable-city-chattanooga": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/seo": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/tags": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/tags/digital-twin": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /comment-policy": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /contact": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /cookies": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /docs": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /docs/install-and-first-run": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /forgot-password": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /game": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /game/3d": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /map": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages/new-group": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages/setup": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment-demo": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment-result": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /privacy": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /privacy-controls": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /profile": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /reset-password": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /schedule": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /sign-in": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /sign-up": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /status": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /themes": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /verify-email": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /wireframes": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /__contrast-probe-unmatched-route__/": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /accessibility": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /account": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /account/audit": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/audit": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/email": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/messaging": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/payments": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/users": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/playable-city-chattanooga": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/seo": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/tags": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/tags/digital-twin": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /comment-policy": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /contact": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /cookies": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /docs": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /docs/install-and-first-run": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /forgot-password": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /game": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /game/3d": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /map": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages/new-group": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages/setup": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment-demo": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment-result": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /privacy": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /privacy-controls": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /profile": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /reset-password": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /schedule": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /sign-in": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /sign-up": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /status": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /themes": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /verify-email": "expected", + "firefox-gen|color-contrast.spec.ts|scripthammer-light \u2014 /wireframes": "expected", + "firefox-gen|colorblind-fixed.spec.ts|a fixed element stays viewport-anchored on a scrolled page": "expected", + "firefox-gen|debug/capture-decryption-logs.spec.ts|capture console output from message exchange": "skipped", + "firefox-gen|embed-theme-contrast.spec.ts|acid \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|aqua \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|autumn \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|black \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|bumblebee \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|business \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|cmyk \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|coffee \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|corporate \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|cupcake \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|cyberpunk \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|dark \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|dim \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|dracula \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|emerald \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|fantasy \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|forest \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|garden \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|halloween \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|lemonade \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|light \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|lofi \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|luxury \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|night \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|nord \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|pastel \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|retro \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|scripthammer-dark \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|scripthammer-light \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|sunset \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|synthwave \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|valentine \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|winter \u2014 embed colors legible": "expected", + "firefox-gen|embed-theme-contrast.spec.ts|wireframe \u2014 embed colors legible": "expected", + "firefox-gen|form-label-grid.spec.ts|fields agree with their siblings at 1024px": "expected", + "firefox-gen|form-label-grid.spec.ts|fields agree with their siblings at 1280px": "expected", + "firefox-gen|form-label-grid.spec.ts|fields agree with their siblings at 320px": "expected", + "firefox-gen|form-label-grid.spec.ts|fields agree with their siblings at 390px": "expected", + "firefox-gen|form-label-grid.spec.ts|fields agree with their siblings at 768px": "expected", + "firefox-gen|game-3d.spec.ts|auto-orbit is active when reduced-motion is not set": "expected", + "firefox-gen|game-3d.spec.ts|auto-orbit is disabled when prefers-reduced-motion: reduce": "expected", + "firefox-gen|game-3d.spec.ts|canvas drag triggers a re-render (orbit controls active)": "skipped", + "firefox-gen|game-3d.spec.ts|clicking Retry re-runs the WebGL probe (stays in fallback if still unavailable)": "expected", + "firefox-gen|game-3d.spec.ts|mouse drag changes camera position": "skipped", + "firefox-gen|game-3d.spec.ts|mouse wheel zoom changes camera position": "skipped", + "firefox-gen|game-3d.spec.ts|navigating to /game/3d mounts a element": "skipped", + "firefox-gen|game-3d.spec.ts|no SSR errors: page reaches network idle without console.error": "expected", + "firefox-gen|game-3d.spec.ts|page heading and breadcrumb render": "expected", + "firefox-gen|game-3d.spec.ts|rendered content fills available width on mobile viewport without horizontal overflow": "expected", + "firefox-gen|game-3d.spec.ts|renders FallbackPanel when WebGL is unavailable (probe returns null)": "expected", + "firefox-gen|game-3d.spec.ts|switching data-theme on updates the scene mesh color": "expected", + "firefox-gen|game-3d.spec.ts|touch drag changes camera position": "skipped", + "firefox-gen|landmarks.spec.ts|/ has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/__landmark-probe-unmatched-route__/ has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/accessibility has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/account has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/account/audit has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/admin has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/admin/audit has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/admin/email has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/admin/messaging has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/admin/payments has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/admin/users has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/blog has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/blog/playable-city-chattanooga has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/blog/seo has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/blog/tags has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/blog/tags/digital-twin has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/comment-policy has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/contact has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/cookies has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/docs has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/docs/install-and-first-run has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/forgot-password has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/game has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/game/3d has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/map has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/messages has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/messages/new-group has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/messages/setup has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/payment has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/payment-demo has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/payment-result has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/privacy has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/privacy-controls has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/profile has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/reset-password has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/schedule has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/sign-in has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/sign-up has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/status has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/themes has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/verify-email has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|/wireframes has one
and a working skip link": "expected", + "firefox-gen|landmarks.spec.ts|the skip link is the first thing keyboard focus reaches, and moves focus into content": "expected", + "firefox-gen|landmarks.spec.ts|the sweep covers every enumerated route": "expected", + "firefox-gen|map.spec.ts|should be responsive on mobile": "expected", + "firefox-gen|map.spec.ts|should display accuracy circle when available": "expected", + "firefox-gen|map.spec.ts|should display custom markers": "expected", + "firefox-gen|map.spec.ts|should display location button when showUserLocation is enabled": "expected", + "firefox-gen|map.spec.ts|should get user location after accepting consent": "expected", + "firefox-gen|map.spec.ts|should handle accessibility requirements": "expected", + "firefox-gen|map.spec.ts|should handle dark mode theme": "expected", + "firefox-gen|map.spec.ts|should handle keyboard navigation": "expected", + "firefox-gen|map.spec.ts|should handle location permission denial": "expected", + "firefox-gen|map.spec.ts|should handle map pan gestures": "expected", + "firefox-gen|map.spec.ts|should handle map zoom controls": "expected", + "firefox-gen|map.spec.ts|should handle rapid location updates": "expected", + "firefox-gen|map.spec.ts|should load map page successfully": "expected", + "firefox-gen|map.spec.ts|should remember consent decision": "expected", + "firefox-gen|map.spec.ts|should show consent modal on first location request": "expected", + "firefox-gen|map.spec.ts|should show marker popups on click": "expected", + "firefox-gen|map.spec.ts|should work offline with cached tiles": "expected", + "firefox-gen|mobile-check.spec.ts|mobile status check": "expected", + "firefox-gen|mobile-dropdown-screenshot.spec.ts|should capture dropdown menu on mobile": "expected", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should allow selecting different payment providers": "expected", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should complete one-time payment successfully": "skipped", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should display error for declined card": "skipped", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should enforce payment consent requirement": "expected", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should handle payment cancellation gracefully": "skipped", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should redirect to subscription-mode Stripe Checkout": "skipped", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should show offline queue indicator when offline": "skipped", + "firefox-gen|payment/01-stripe-onetime.spec.ts|should show payment options after granting consent": "expected", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should allow subscription cancellation": "skipped", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should create PayPal subscription successfully": "skipped", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should handle failed payment retry logic": "skipped", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should prevent duplicate subscriptions": "expected", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should show PayPal payment button": "expected", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should show PayPal provider tab": "expected", + "firefox-gen|payment/02-paypal-subscription.spec.ts|should show grace period warning": "expected", + "firefox-gen|payment/02-paypal-subscription.spec.ts|subscription management route renders for an authed user (#5)": "expected", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should display offline error banner when offline": "expected", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should display retry button for failed payment": "skipped", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should display user-friendly error messages": "skipped", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should expand recovery list at retry_count >= 2": "skipped", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should grant consent and show payment options": "expected", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should log error details for debugging": "skipped", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should mount SwitchProviderPanel when \"Use a different payment method\" is clicked": "skipped", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should offer + run a dunning retry for a past_due subscription": "expected", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should render payment result page with malformed ID": "expected", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should render payment result page with missing session": "expected", + "firefox-gen|payment/03-failed-payment-retry.spec.ts|should show payment demo page correctly": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should allow proceeding after consent": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should allow withdrawing payment consent (GDPR right to withdraw)": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should handle consent decline gracefully": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should have accessible consent buttons": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should not load payment scripts before consent": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should persist consent decision": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should remember consent across page reloads": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should show consent section on first visit": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should show payment options after consent granted": "expected", + "firefox-gen|payment/04-gdpr-consent.spec.ts|should show privacy information": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|queue management UI renders on the payment hub (#4)": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should clear the queue manually": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should drain the queue on Retry (needs live provider)": "skipped", + "firefox-gen|payment/05-offline-queue.spec.ts|should grant consent successfully": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should handle multiple queued payments": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should persist queue across page reloads": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should show Max-retries badge after max attempts": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should show payment demo page": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should show queued items and the Offline badge when offline": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should show retry count on queued items": "expected", + "firefox-gen|payment/05-offline-queue.spec.ts|should warn when device storage is near quota": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should coalesce a burst of updates into an \"N updates\" indicator": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should handle subscription status changes in real-time": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should load payment demo page": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should render a payment trend chart from the user's payments": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should show \"Reconnecting\u2026\" on a channel drop (unit-covered)": "skipped", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should show a realtime connection-status indicator": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should show live transaction counter": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should show payment history section after consent": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should show real-time payment status updates": "skipped", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should surface an error alert when a realtime payment fails": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should update payment list when new payment added": "expected", + "firefox-gen|payment/06-realtime-dashboard.spec.ts|should update webhook verification status in real-time": "skipped", + "firefox-gen|payment/07-performance.spec.ts|should grant consent within reasonable time": "expected", + "firefox-gen|payment/07-performance.spec.ts|should load payment demo page within reasonable time": "expected", + "firefox-gen|payment/08-subscription-lifecycle.spec.ts|cancel and resume round-trip through the deployed Edge Functions": "skipped", + "firefox-gen|security/oauth-csrf.spec.ts|OAuth buttons should be visible and enabled on sign-in page": "expected", + "firefox-gen|security/oauth-csrf.spec.ts|OAuth flow should include required OAuth parameters": "expected", + "firefox-gen|security/oauth-csrf.spec.ts|OAuth redirect should go to correct provider": "expected", + "firefox-gen|security/oauth-csrf.spec.ts|OAuth redirect should include state parameter for CSRF protection": "expected", + "firefox-gen|security/oauth-csrf.spec.ts|OAuth redirect_uri should point to Supabase callback": "expected", + "firefox-gen|security/oauth-csrf.spec.ts|OAuth state parameter should be unique per request": "expected", + "firefox-gen|security/oauth-csrf.spec.ts|different browser sessions should have isolated OAuth state": "expected", + "firefox-gen|security/payment-isolation.spec.ts|Payment buttons require GDPR consent": "expected", + "firefox-gen|security/payment-isolation.spec.ts|Payment history shows only own payments": "expected", + "firefox-gen|security/payment-isolation.spec.ts|Payment intent includes correct user association": "expected", + "firefox-gen|security/payment-isolation.spec.ts|Unauthenticated users see sign-in prompt on payment page": "expected", + "firefox-gen|security/payment-isolation.spec.ts|User A and User B have isolated payment sessions": "expected", + "firefox-gen|tests/accessibility.spec.ts|ARIA landmarks are present": "expected", + "firefox-gen|tests/accessibility.spec.ts|accessibility settings page passes automated checks": "expected", + "firefox-gen|tests/accessibility.spec.ts|all form inputs have labels": "expected", + "firefox-gen|tests/accessibility.spec.ts|all images have alt text": "expected", + "firefox-gen|tests/accessibility.spec.ts|color contrast advisory (axe-core executes successfully)": "expected", + "firefox-gen|tests/accessibility.spec.ts|error messages are associated with form fields": "expected", + "firefox-gen|tests/accessibility.spec.ts|focus indicators are visible": "expected", + "firefox-gen|tests/accessibility.spec.ts|font size controls actually resize text": "expected", + "firefox-gen|tests/accessibility.spec.ts|homepage passes automated accessibility checks": "expected", + "firefox-gen|tests/accessibility.spec.ts|keyboard navigation works throughout the site": "expected", + "firefox-gen|tests/accessibility.spec.ts|links have distinguishable text": "expected", + "firefox-gen|tests/accessibility.spec.ts|page has proper heading hierarchy": "expected", + "firefox-gen|tests/accessibility.spec.ts|reduced motion is respected": "expected", + "firefox-gen|tests/accessibility.spec.ts|sign-in page passes automated accessibility checks": "expected", + "firefox-gen|tests/accessibility.spec.ts|skip to main content link works": "expected", + "firefox-gen|tests/accessibility.spec.ts|themes page passes automated accessibility checks": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should allow code blocks to scroll internally": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should display SEO badge in top-right corner": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should display TOC button in top-right corner": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should display featured image without cropping important content": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should display footer at bottom of page": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should have readable text without zooming": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should have touch-friendly interactive elements": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should maintain layout when scrolling": "expected", + "firefox-gen|tests/blog-mobile-ux-iphone.spec.ts|should not have horizontal scroll on page": "expected", + "firefox-gen|tests/blog-mobile-ux-pixel.spec.ts|should display footer at bottom": "expected", + "firefox-gen|tests/blog-mobile-ux-pixel.spec.ts|should not have horizontal scroll": "expected", + "firefox-gen|tests/blog-touch-targets.spec.ts|Blog list cards have adequate touch targets (44x44px minimum)": "expected", + "firefox-gen|tests/blog-touch-targets.spec.ts|Blog post interactive elements meet 44x44px": "expected", + "firefox-gen|tests/broken-links.spec.ts|check all internal links for 404s": "skipped", + "firefox-gen|tests/broken-links.spec.ts|check meta tag images and resources": "expected", + "firefox-gen|tests/broken-links.spec.ts|check specific known problematic links": "expected", + "firefox-gen|tests/broken-links.spec.ts|validate sitemap entries": "expected", + "firefox-gen|tests/container-width.spec.ts|container fills the viewport at every width below the cap": "expected", + "firefox-gen|tests/container-width.spec.ts|container stops widening at the cap": "expected", + "firefox-gen|tests/container-width.spec.ts|widening the container introduces no horizontal overflow": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|404 page handles non-existent routes": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|active navigation item is highlighted": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|anchor links within pages work": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|breadcrumb navigation works if present": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|browser back/forward navigation works": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|deep linking works correctly": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|external links open in new tab": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|mobile navigation menu works": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|navigate through all main pages": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|navigation menu is consistent across pages": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|navigation menu is keyboard accessible": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|navigation preserves theme selection": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|page transitions are smooth": "expected", + "firefox-gen|tests/cross-page-navigation.spec.ts|scroll position resets on navigation": "expected", + "firefox-gen|tests/depth-tokens.spec.ts|a depth utility beats component styles on the default themes": "expected", + "firefox-gen|tests/depth-tokens.spec.ts|a plate reads as raised and a well as cut, on every theme": "expected", + "firefox-gen|tests/depth-tokens.spec.ts|depth primitives derive from theme colour, not literal black": "expected", + "firefox-gen|tests/depth-tokens.spec.ts|every theme renders depth with at least one visible ink": "expected", + "firefox-gen|tests/depth-tokens.spec.ts|the three depth utilities are emitted": "expected", + "firefox-gen|tests/form-submission.spec.ts|disabled fields cannot be edited": "expected", + "firefox-gen|tests/form-submission.spec.ts|error messages display correctly": "expected", + "firefox-gen|tests/form-submission.spec.ts|form data persists on page reload": "expected", + "firefox-gen|tests/form-submission.spec.ts|form fields have proper labels and ARIA attributes": "expected", + "firefox-gen|tests/form-submission.spec.ts|form fields maintain focus order": "expected", + "firefox-gen|tests/form-submission.spec.ts|form shows loading state during submission": "expected", + "firefox-gen|tests/form-submission.spec.ts|form submission with valid data": "expected", + "firefox-gen|tests/form-submission.spec.ts|form validation prevents submission with invalid data": "expected", + "firefox-gen|tests/form-submission.spec.ts|help text is properly associated with fields": "expected", + "firefox-gen|tests/form-submission.spec.ts|multi-step form navigation works correctly": "expected", + "firefox-gen|tests/form-submission.spec.ts|required fields show indicators": "expected", + "firefox-gen|tests/homepage.spec.ts|GitHub repository link opens in new tab": "skipped", + "firefox-gen|tests/homepage.spec.ts|homepage loads with correct title": "expected", + "firefox-gen|tests/homepage.spec.ts|navigate to game page": "expected", + "firefox-gen|tests/homepage.spec.ts|navigate to storybook page": "expected", + "firefox-gen|tests/homepage.spec.ts|navigate to themes page": "expected", + "firefox-gen|tests/homepage.spec.ts|navigation links in secondary nav work": "expected", + "firefox-gen|tests/homepage.spec.ts|skip to main content link works": "expected", + "firefox-gen|tests/homepage.spec.ts|the four modules are present and numbered": "expected", + "firefox-gen|tests/homepage.spec.ts|the install block shows the Docker path, never npx": "expected", + "firefox-gen|tests/mobile-buttons.spec.ts|All buttons meet 44x44px minimum on mobile": "expected", + "firefox-gen|tests/mobile-buttons.spec.ts|Buttons have 8px minimum spacing": "expected", + "firefox-gen|tests/mobile-card-layout.spec.ts|Cards fit within viewport at all mobile widths": "expected", + "firefox-gen|tests/mobile-card-layout.spec.ts|Cards stack vertically on mobile (320px-767px)": "expected", + "firefox-gen|tests/mobile-card-layout.spec.ts|Cards use grid layout on tablet (768px+)": "expected", + "firefox-gen|tests/mobile-footer.spec.ts|Footer fits within viewport": "expected", + "firefox-gen|tests/mobile-footer.spec.ts|Footer links meet touch target standards": "expected", + "firefox-gen|tests/mobile-footer.spec.ts|Footer links stack vertically on mobile": "expected", + "firefox-gen|tests/mobile-form-inputs.spec.ts|Form fields have adequate spacing": "expected", + "firefox-gen|tests/mobile-form-inputs.spec.ts|Form inputs meet 44px height minimum": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|Images do not cause horizontal overflow": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /accessibility": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /account": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /account/audit": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/audit": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/email": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/messaging": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/payments": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/users": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/playable-city-chattanooga": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/seo": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/tags": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/tags/digital-twin": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /chatt": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /comment-policy": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /contact": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /cookies": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /docs": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /docs/install-and-first-run": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /forgot-password": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /game": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /game/3d": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /map": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages/new-group": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages/setup": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment-demo": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment-result": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /privacy": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /privacy-controls": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /profile": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /reset-password": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /schedule": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /sign-in": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /sign-up": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /status": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /themes": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /verify-email": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /wireframes": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|Pre/code blocks are responsive": "expected", + "firefox-gen|tests/mobile-horizontal-scroll.spec.ts|Tables are responsive on mobile": "expected", + "firefox-gen|tests/mobile-images.spec.ts|Images fit within 320px viewport": "expected", + "firefox-gen|tests/mobile-images.spec.ts|Images fit within 390px viewport": "expected", + "firefox-gen|tests/mobile-images.spec.ts|Images fit within 428px viewport": "expected", + "firefox-gen|tests/mobile-images.spec.ts|Images use lazy loading": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Mobile menu toggle works on narrow viewports": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation adapts to orientation change": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation controls are all visible at 320px (narrowest mobile)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within Narrow Mobile (320px) viewport (320px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 12 Landscape viewport (844px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 12 viewport (390px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 13 viewport (390px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 Pro Max Landscape viewport (926px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 Pro Max viewport (428px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 viewport (390px)": "expected", + "firefox-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone SE viewport (375px)": "expected", + "firefox-gen|tests/mobile-orientation.spec.ts|Content adapts to orientation without breaking": "expected", + "firefox-gen|tests/mobile-orientation.spec.ts|Orientation change triggers responsive adjustments": "expected", + "firefox-gen|tests/mobile-orientation.spec.ts|Tablet landscape uses tablet/desktop layout": "expected", + "firefox-gen|tests/mobile-orientation.spec.ts|iPhone 12 landscape STAYS in mobile mode (critical test)": "expected", + "firefox-gen|tests/mobile-orientation.spec.ts|iPhone 12 portrait uses mobile styles": "expected", + "firefox-gen|tests/mobile-orientation.spec.ts|matchMedia detects orientation correctly": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|All interactive elements meet 44x44px minimum on iPhone 12": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|Form inputs meet touch target height standards": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|Links in content meet touch target standards": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|Navigation buttons meet touch target standards": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|Touch targets have adequate spacing (8px minimum)": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|Touch targets maintain size across mobile widths": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|desktop nav group menus expose 44px targets (#378)": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|the Demos menu is keyboard operable and Escape restores focus (#378)": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|the Display popover is reachable at every width and its controls meet 44px (#378)": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|the banner spacer reserves the banner\u2019s real height (#457)": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|the cookie banner's OWN controls meet 44px (#457)": "expected", + "firefox-gen|tests/mobile-touch-targets.spec.ts|the mobile menu's own items meet 44px (#378)": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Body text is readable without zoom (\u226514px minimum)": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Font sizes scale with viewport using fluid typography": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Headings scale appropriately on mobile": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Line height is comfortable (\u22651.5)": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Small text is avoided or has min-font-size": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Text does not overflow containers on mobile": "expected", + "firefox-gen|tests/mobile-typography.spec.ts|Text remains readable in landscape orientation": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|PWA install prompt component is present": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|app works offline after service worker activation": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|apple touch icons are present for iOS": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|install button shows on supported browsers": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|manifest contains required PWA fields": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|manifest file is linked correctly": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|maskable icon is provided for Android": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|service worker registers successfully": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|shortcuts are defined in manifest": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|theme color meta tags are valid": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|viewport meta tag is set for mobile": "expected", + "firefox-gen|tests/pwa-installation.spec.ts|web app is installable (Lighthouse PWA criteria)": "expected", + "firefox-gen|tests/theme-switching.spec.ts|all theme buttons are present": "expected", + "firefox-gen|tests/theme-switching.spec.ts|can switch to bumblebee theme": "expected", + "firefox-gen|tests/theme-switching.spec.ts|can switch to corporate theme": "expected", + "firefox-gen|tests/theme-switching.spec.ts|can switch to cupcake theme": "expected", + "firefox-gen|tests/theme-switching.spec.ts|can switch to emerald theme": "expected", + "firefox-gen|tests/theme-switching.spec.ts|can switch to light theme": "expected", + "firefox-gen|tests/theme-switching.spec.ts|localStorage stores theme preference": "expected", + "firefox-gen|tests/theme-switching.spec.ts|switch to dark theme and verify persistence": "expected", + "firefox-gen|tests/theme-switching.spec.ts|switch to light theme and verify persistence": "expected", + "firefox-gen|tests/theme-switching.spec.ts|theme applies to all pages consistently": "expected", + "firefox-gen|tests/theme-switching.spec.ts|theme preview shows correct colors": "expected", + "firefox-gen|tests/theme-switching.spec.ts|theme switcher is accessible from homepage": "expected", + "firefox-gen|tests/theme-switching.spec.ts|theme transition is smooth": "expected", + "firefox-gen|tests/type-scale-truth.spec.ts|a first-time visitor paints at the medium default, not 1": "expected", + "firefox-gen|tests/type-scale-truth.spec.ts|the /docs h1 uses text-5xl at/above sm and text-4xl below": "expected", + "firefox-gen|tests/type-scale-truth.spec.ts|the font scale is applied before hydration, including a stored preference": "expected", + "firefox-gen|tests/type-stack-truth.spec.ts|a stored font preference applies to headings before hydration": "expected", + "firefox-gen|tests/type-stack-truth.spec.ts|body, headings and code render the declared faces": "expected", + "firefox-gen|tests/type-stack-truth.spec.ts|choosing a font replaces the display face on headings": "expected", + "firefox-gen|tests/type-stack-truth.spec.ts|font utilities still override the base heading rule": "expected", + "firefox-gen|tests/type-stack-truth.spec.ts|font variables are declared on :root, not below it": "expected", + "firefox-gen|twin-glass-contrast.spec.ts|nav text clears AAA against ANY backdrop the scene can produce": "expected", + "firefox-gen|twin-glass-contrast.spec.ts|the glass is scoped to twin routes only": "expected", + "firefox-gen|twins.spec.ts|/twins/chatt/?diorama loads the baked manifest and shows the camera dock": "expected", + "firefox-gen|twins.spec.ts|?atlas remains a working alias for links shared before the flip": "expected", + "firefox-gen|twins.spec.ts|?diorama still reaches the exhibit": "expected", + "firefox-gen|twins.spec.ts|Top-down compare mode (#233): dock button + ?ortho render without errors": "skipped", + "firefox-gen|twins.spec.ts|exactly one contentinfo landmark, and it carries the real links (#301)": "expected", + "firefox-gen|twins.spec.ts|no unexpected console.error on load": "expected", + "firefox-gen|twins.spec.ts|the HUD is capped in width and wraps rather than clips (#307)": "expected", + "firefox-gen|twins.spec.ts|the R3F canvas mounts when WebGL is available": "skipped", + "firefox-gen|twins.spec.ts|the atlas MODULE mounts on /chatt (no WebGL needed)": "expected", + "firefox-gen|twins.spec.ts|the atlas SCENE initialises without erroring": "skipped", + "firefox-gen|twins.spec.ts|the atlas keeps its cookie banner and drops the PWA popup (#301)": "expected", + "firefox-gen|twins.spec.ts|the atlas reports a real building count, not an empty scene": "skipped", + "firefox-gen|twins.spec.ts|the diorama hides the cookie banner its dock sits under (#301)": "expected", + "firefox-gen|twins.spec.ts|the diorama wordmark is finally out from under the nav (#299)": "expected", + "firefox-gen|twins.spec.ts|the page cannot scroll, so the HUD cannot hide (#301)": "expected", + "firefox-gen|twins.spec.ts|the twin is reachable from normal navigation (homepage demo card)": "expected", + "firefox-gen|twins.spec.ts|the type chip is reachable, even after trying to scroll (#301)": "skipped", + "firefox-msg-iso|messaging/complete-user-workflow.spec.ts|Complete messaging workflow: send -> receive -> reply -> verify encryption": "expected", + "firefox-msg-iso|messaging/complete-user-workflow.spec.ts|should load conversations page within 5 seconds (SC-001)": "expected", + "firefox-msg-iso|messaging/complete-user-workflow.spec.ts|should show retry button on error state (FR-005)": "expected", + "firefox-msg-iso|messaging/cross-window-delivery.spec.ts|partner receives a message viewer sends, via the polling effect": "expected", + "firefox-msg-iso|messaging/encrypted-messaging.spec.ts|should load message history with pagination": "expected", + "firefox-msg-iso|messaging/encrypted-messaging.spec.ts|should never send private keys to server": "expected", + "firefox-msg-iso|messaging/encrypted-messaging.spec.ts|should send and receive encrypted message between two users": "expected", + "firefox-msg-iso|messaging/encrypted-messaging.spec.ts|should show delivery status indicators": "expected", + "firefox-msg-iso|messaging/encrypted-messaging.spec.ts|should verify zero-knowledge encryption in database": "expected", + "firefox-msg-iso|messaging/friend-requests.spec.ts|addressee can decline a friend request": "expected", + "firefox-msg-iso|messaging/friend-requests.spec.ts|connections page meets WCAG standards": "expected", + "firefox-msg-iso|messaging/friend-requests.spec.ts|duplicate requests are prevented": "expected", + "firefox-msg-iso|messaging/friend-requests.spec.ts|requester can cancel a sent pending request": "expected", + "firefox-msg-iso|messaging/friend-requests.spec.ts|requester sends friend request and addressee accepts": "expected", + "firefox-msg-iso|messaging/friend-requests.spec.ts|tab navigation works correctly": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should be keyboard navigable (T193)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should close modal on cancel button click (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should delete account and redirect to sign-in (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should export decrypted messages (T191)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should have ARIA live regions for status updates (T193)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should have accessible ARIA attributes (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should open confirmation modal on delete button click (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should require typing \"DELETE\" to enable deletion (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should show account deletion button in account settings (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should show data export button in account settings (T191)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should show error message on deletion failure (T192)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should show error on export failure (T191)": "expected", + "firefox-msg-iso|messaging/gdpr-compliance.spec.ts|should trigger data export download (T191)": "expected", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|contract - isolated connection helper is usable": "expected", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|member A sends an encrypted group message and member B decrypts it": "expected", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|sends and reads an encrypted message in a UI-created group (#182)": "skipped", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|should create group with connected users": "expected", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|should navigate back to messages when clicking back button": "expected", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|should navigate to new-group page and show connections": "expected", + "firefox-msg-iso|messaging/group-chat-multiuser.spec.ts|should show New Group link in sidebar": "expected", + "firefox-msg-iso|messaging/message-delete-placeholder.spec.ts|should show [Message deleted] placeholder and preserve adjacent messages": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|T115: should edit message within 15-minute window": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|T116: should delete message within 15-minute window": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|T117: should not show Edit/Delete buttons for messages older than 15 minutes": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|T130: edit mode should have proper ARIA labels": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|delete confirmation modal should be keyboard navigable": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|delete confirmation modal should have proper ARIA labels": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should cancel deletion from confirmation modal": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should cancel edit without saving": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should disable Save button when content unchanged": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should not allow editing empty message": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should not show Edit/Delete buttons on deleted message": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should not show Edit/Delete buttons on received messages": "expected", + "firefox-msg-iso|messaging/message-editing.spec.ts|should show Edit/Delete buttons only for own recent messages": "expected", + "firefox-msg-iso|messaging/oauth-setup-modal.spec.ts|US-1: OAuth user with no keys sees setup mode": "expected", + "firefox-msg-iso|messaging/oauth-setup-modal.spec.ts|US-2: returning OAuth user sees unlock mode with provider badge": "expected", + "firefox-msg-iso|messaging/oauth-setup-modal.spec.ts|US-3: email user sees unchanged unlock modal (regression)": "expected", + "firefox-msg-iso|messaging/offline-queue-sync.spec.ts|should queue a message offline and sync when reconnected": "expected", + "firefox-msg-iso|messaging/offline-queue.spec.ts|T146: should queue message when offline and send when online": "expected", + "firefox-msg-iso|messaging/offline-queue.spec.ts|T147: should queue multiple messages and sync all when reconnected": "expected", + "firefox-msg-iso|messaging/offline-queue.spec.ts|T148: should retry with exponential backoff on server failure": "expected", + "firefox-msg-iso|messaging/offline-queue.spec.ts|T149: should handle conflict resolution with server timestamp": "expected", + "firefox-msg-iso|messaging/offline-queue.spec.ts|should show failed status after max retries": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|Auto-scroll to bottom on new message": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|Jump to bottom button with smooth scroll": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|Performance monitoring logs for large conversations": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|Scroll position maintained during pagination": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|T166: Performance with 1000 messages - scrolling FPS": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|T167: Pagination loads next 50 messages": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|T169: Keyboard navigation through messages": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|T172b: Virtual scrolling activates at exactly 100 messages": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|Tab navigation to jump to bottom button": "expected", + "firefox-msg-iso|messaging/performance.spec.ts|Virtual scrolling maintains 60fps during rapid scrolling": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should auto-expire typing indicator after 5 seconds": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should deliver message in <500ms between two windows": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should handle rapid message exchanges": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should hide typing indicator when user stops typing": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should remove typing indicator when message is sent": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should show delivery status (sent \u2192 delivered \u2192 read)": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should show multiple typing indicators correctly": "expected", + "firefox-msg-iso|messaging/real-time-delivery.spec.ts|should show typing indicator when user types": "expected", + "firefox-msg|messaging/messaging-scroll.spec.ts|T003: Message input visible on mobile viewport (375x667)": "expected", + "firefox-msg|messaging/messaging-scroll.spec.ts|T004: Message input visible on tablet viewport (768x1024)": "expected", + "firefox-msg|messaging/messaging-scroll.spec.ts|T005: Message input visible on desktop viewport (1280x800)": "expected", + "firefox-msg|messaging/messaging-scroll.spec.ts|T006: Scroll container constrained to MessageThread": "expected", + "firefox-msg|messaging/messaging-scroll.spec.ts|T007-T008: Jump button appears when scrolled and does not overlap input": "expected", + "firefox-msg|messaging/messaging-scroll.spec.ts|T009: Jump button click scrolls to bottom": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-001: Upload button meets touch target requirements": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-002: Upload button has descriptive ARIA label": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-003: Keyboard navigation - Tab to upload button": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-004: Keyboard navigation - Enter activates upload": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-005: Crop modal traps focus": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-006: Escape key closes crop modal": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-007: Focus restored after closing crop modal": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-008: Error messages announced via aria-live": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-009: Success messages announced via aria-live": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-010: Color contrast meets WCAG AA (4.5:1)": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-011: Remove button has descriptive ARIA label": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-012: Zoom slider has accessible label and value": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-013: Screen reader announces avatar status": "expected", + "webkit-gen|accessibility/avatar-upload.a11y.test.ts|A11y-014: Component has landmark roles": "expected", + "webkit-gen|accessibility/colorblind-toggle.spec.ts|should close dropdown when clicking outside": "expected", + "webkit-gen|accessibility/colorblind-toggle.spec.ts|should close dropdown with Escape key": "expected", + "webkit-gen|accessibility/colorblind-toggle.spec.ts|should maintain focus management in dropdown": "expected", + "webkit-gen|accessibility/colorblind-toggle.spec.ts|should persist selected mode across page navigation": "expected", + "webkit-gen|accessibility/colorblind-toggle.spec.ts|should show pattern toggle when colorblind mode is active": "expected", + "webkit-gen|accessibility/colorblind-toggle.spec.ts|should support keyboard navigation in dropdown": "expected", + "webkit-gen|accessibility/contact-form-keyboard.spec.ts|should allow form submission via keyboard (Enter key)": "expected", + "webkit-gen|accessibility/contact-form-keyboard.spec.ts|should be keyboard navigable with proper tab order": "expected", + "webkit-gen|accessibility/contact-form-keyboard.spec.ts|should maintain focus after validation errors": "expected", + "webkit-gen|accessibility/contact-form-keyboard.spec.ts|should support Shift+Tab for backwards navigation": "expected", + "webkit-gen|admin/admin-conversation-list.spec.ts|flags the seeded >30d conversation as stale, leaves fresh rows unflagged": "skipped", + "webkit-gen|admin/admin-conversation-list.spec.ts|renders all five metadata column headers": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display activity badges": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display anomaly alerts when failed logins exist": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display authentication statistics": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display burst detection cards": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display event log table with rows": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display messaging statistics": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display payment statistics": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display payment trend chart": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display provider breakdown table": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display sparkline trend charts": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display stat cards with non-zero values": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display top senders table": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display users table with data": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should display volume trends": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should expand burst card to show event details": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should filter events by type": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should have working date range filter": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should navigate between all admin tabs": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should search/filter users": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should show retention notice": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should sort event log columns": "skipped", + "webkit-gen|admin/admin-dashboard.spec.ts|should sort users by column": "skipped", + "webkit-gen|admin/admin-depth.spec.ts|/admin/messaging: every table scroller sits in a padded well": "expected", + "webkit-gen|admin/admin-depth.spec.ts|/admin/payments: every table scroller sits in a padded well": "expected", + "webkit-gen|admin/admin-depth.spec.ts|an admin route is reachable at all \u2014 the gate opens for a promoted user": "expected", + "webkit-gen|admin/admin-user-pagination.spec.ts|should disable Next on last page": "skipped", + "webkit-gen|admin/admin-user-pagination.spec.ts|should display pagination when more than PAGE_SIZE users exist": "skipped", + "webkit-gen|admin/admin-user-pagination.spec.ts|should navigate to page 2 and update table rows": "skipped", + "webkit-gen|admin/admin-user-pagination.spec.ts|should search users and reset to page 1": "skipped", + "webkit-gen|admin/admin-user-pagination.spec.ts|should search, page forward, and confirm results update at each step": "skipped", + "webkit-gen|auth/protected-routes.spec.ts|should allow authenticated users to access protected routes": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should enforce RLS policies on payment access": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should handle session expiration gracefully": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should preserve session across page navigation": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should redirect to intended URL after authentication": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should redirect unauthenticated users to sign-in": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should show email verification notice for unverified users": "expected", + "webkit-gen|auth/protected-routes.spec.ts|should verify cascade delete removes related records": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should automatically refresh token before expiration": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should clear session on sign out": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should expire session after maximum duration": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should extend session duration with Remember Me checked": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should handle concurrent tab sessions correctly": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should persist session across browser restarts": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should refresh session automatically on page reload": "expected", + "webkit-gen|auth/session-persistence.spec.ts|should use short session without Remember Me": "expected", + "webkit-gen|auth/user-registration.spec.ts|should complete full registration flow from sign-up to protected access": "skipped", + "webkit-gen|auth/user-registration.spec.ts|should display OAuth buttons on sign-up page": "expected", + "webkit-gen|auth/user-registration.spec.ts|should navigate to sign-in from sign-up page": "expected", + "webkit-gen|auth/user-registration.spec.ts|should show error for password mismatch": "expected", + "webkit-gen|auth/user-registration.spec.ts|should show validation errors for invalid TLD email": "expected", + "webkit-gen|auth/user-registration.spec.ts|should show validation errors for weak password": "expected", + "webkit-gen|avatar/upload.spec.ts|Accessibility: Keyboard navigation": "skipped", + "webkit-gen|avatar/upload.spec.ts|Edge Case: Handle network interruption gracefully": "skipped", + "webkit-gen|avatar/upload.spec.ts|Edge Case: Reject invalid file format": "skipped", + "webkit-gen|avatar/upload.spec.ts|Edge Case: Reject oversized file": "skipped", + "webkit-gen|avatar/upload.spec.ts|US1.1 - Upload new avatar with crop interface": "skipped", + "webkit-gen|avatar/upload.spec.ts|US1.2 - Replace existing avatar": "skipped", + "webkit-gen|avatar/upload.spec.ts|US1.3 - Remove avatar": "skipped", + "webkit-gen|avatar/upload.spec.ts|US1.4 - Cancel crop without saving": "skipped", + "webkit-gen|avatar/upload.spec.ts|US1.5 - Avatar displays in both nav and account page (SC-005)": "skipped", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /__contrast-probe-unmatched-route__/": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /accessibility": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /account": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /account/audit": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/audit": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/email": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/messaging": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/payments": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /admin/users": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/playable-city-chattanooga": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/seo": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/tags": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /blog/tags/digital-twin": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /comment-policy": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /contact": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /cookies": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /docs": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /docs/install-and-first-run": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /forgot-password": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /game": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /game/3d": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /map": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages/new-group": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /messages/setup": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment-demo": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /payment-result": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /privacy": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /privacy-controls": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /profile": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /reset-password": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /schedule": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /sign-in": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /sign-up": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /status": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /themes": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /verify-email": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-dark \u2014 /wireframes": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /__contrast-probe-unmatched-route__/": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /accessibility": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /account": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /account/audit": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/audit": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/email": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/messaging": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/payments": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /admin/users": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/playable-city-chattanooga": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/seo": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/tags": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /blog/tags/digital-twin": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /comment-policy": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /contact": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /cookies": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /docs": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /docs/install-and-first-run": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /forgot-password": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /game": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /game/3d": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /map": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages/new-group": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /messages/setup": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment-demo": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /payment-result": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /privacy": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /privacy-controls": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /profile": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /reset-password": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /schedule": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /sign-in": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /sign-up": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /status": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /themes": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /verify-email": "expected", + "webkit-gen|color-contrast.spec.ts|scripthammer-light \u2014 /wireframes": "expected", + "webkit-gen|colorblind-fixed.spec.ts|a fixed element stays viewport-anchored on a scrolled page": "expected", + "webkit-gen|debug/capture-decryption-logs.spec.ts|capture console output from message exchange": "skipped", + "webkit-gen|embed-theme-contrast.spec.ts|acid \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|aqua \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|autumn \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|black \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|bumblebee \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|business \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|cmyk \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|coffee \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|corporate \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|cupcake \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|cyberpunk \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|dark \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|dim \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|dracula \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|emerald \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|fantasy \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|forest \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|garden \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|halloween \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|lemonade \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|light \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|lofi \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|luxury \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|night \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|nord \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|pastel \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|retro \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|scripthammer-dark \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|scripthammer-light \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|sunset \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|synthwave \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|valentine \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|winter \u2014 embed colors legible": "expected", + "webkit-gen|embed-theme-contrast.spec.ts|wireframe \u2014 embed colors legible": "expected", + "webkit-gen|form-label-grid.spec.ts|fields agree with their siblings at 1024px": "expected", + "webkit-gen|form-label-grid.spec.ts|fields agree with their siblings at 1280px": "expected", + "webkit-gen|form-label-grid.spec.ts|fields agree with their siblings at 320px": "expected", + "webkit-gen|form-label-grid.spec.ts|fields agree with their siblings at 390px": "expected", + "webkit-gen|form-label-grid.spec.ts|fields agree with their siblings at 768px": "expected", + "webkit-gen|game-3d.spec.ts|auto-orbit is active when reduced-motion is not set": "expected", + "webkit-gen|game-3d.spec.ts|auto-orbit is disabled when prefers-reduced-motion: reduce": "expected", + "webkit-gen|game-3d.spec.ts|canvas drag triggers a re-render (orbit controls active)": "expected", + "webkit-gen|game-3d.spec.ts|clicking Retry re-runs the WebGL probe (stays in fallback if still unavailable)": "expected", + "webkit-gen|game-3d.spec.ts|mouse drag changes camera position": "expected", + "webkit-gen|game-3d.spec.ts|mouse wheel zoom changes camera position": "expected", + "webkit-gen|game-3d.spec.ts|navigating to /game/3d mounts a element": "expected", + "webkit-gen|game-3d.spec.ts|no SSR errors: page reaches network idle without console.error": "expected", + "webkit-gen|game-3d.spec.ts|page heading and breadcrumb render": "expected", + "webkit-gen|game-3d.spec.ts|rendered content fills available width on mobile viewport without horizontal overflow": "expected", + "webkit-gen|game-3d.spec.ts|renders FallbackPanel when WebGL is unavailable (probe returns null)": "expected", + "webkit-gen|game-3d.spec.ts|switching data-theme on updates the scene mesh color": "expected", + "webkit-gen|game-3d.spec.ts|touch drag changes camera position": "expected", + "webkit-gen|landmarks.spec.ts|/ has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/__landmark-probe-unmatched-route__/ has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/accessibility has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/account has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/account/audit has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/admin has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/admin/audit has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/admin/email has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/admin/messaging has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/admin/payments has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/admin/users has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/blog has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/blog/playable-city-chattanooga has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/blog/seo has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/blog/tags has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/blog/tags/digital-twin has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/comment-policy has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/contact has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/cookies has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/docs has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/docs/install-and-first-run has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/forgot-password has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/game has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/game/3d has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/map has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/messages has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/messages/new-group has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/messages/setup has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/payment has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/payment-demo has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/payment-result has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/privacy has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/privacy-controls has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/profile has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/reset-password has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/schedule has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/sign-in has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/sign-up has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/status has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/themes has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/verify-email has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|/wireframes has one
and a working skip link": "expected", + "webkit-gen|landmarks.spec.ts|the skip link is the first thing keyboard focus reaches, and moves focus into content": "expected", + "webkit-gen|landmarks.spec.ts|the sweep covers every enumerated route": "expected", + "webkit-gen|map.spec.ts|should be responsive on mobile": "expected", + "webkit-gen|map.spec.ts|should display accuracy circle when available": "expected", + "webkit-gen|map.spec.ts|should display custom markers": "expected", + "webkit-gen|map.spec.ts|should display location button when showUserLocation is enabled": "expected", + "webkit-gen|map.spec.ts|should get user location after accepting consent": "expected", + "webkit-gen|map.spec.ts|should handle accessibility requirements": "expected", + "webkit-gen|map.spec.ts|should handle dark mode theme": "expected", + "webkit-gen|map.spec.ts|should handle keyboard navigation": "expected", + "webkit-gen|map.spec.ts|should handle location permission denial": "expected", + "webkit-gen|map.spec.ts|should handle map pan gestures": "expected", + "webkit-gen|map.spec.ts|should handle map zoom controls": "expected", + "webkit-gen|map.spec.ts|should handle rapid location updates": "expected", + "webkit-gen|map.spec.ts|should load map page successfully": "expected", + "webkit-gen|map.spec.ts|should remember consent decision": "expected", + "webkit-gen|map.spec.ts|should show consent modal on first location request": "expected", + "webkit-gen|map.spec.ts|should show marker popups on click": "expected", + "webkit-gen|map.spec.ts|should work offline with cached tiles": "expected", + "webkit-gen|mobile-check.spec.ts|mobile status check": "expected", + "webkit-gen|mobile-dropdown-screenshot.spec.ts|should capture dropdown menu on mobile": "expected", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should allow selecting different payment providers": "expected", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should complete one-time payment successfully": "skipped", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should display error for declined card": "skipped", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should enforce payment consent requirement": "expected", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should handle payment cancellation gracefully": "skipped", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should redirect to subscription-mode Stripe Checkout": "skipped", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should show offline queue indicator when offline": "skipped", + "webkit-gen|payment/01-stripe-onetime.spec.ts|should show payment options after granting consent": "expected", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should allow subscription cancellation": "skipped", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should create PayPal subscription successfully": "skipped", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should handle failed payment retry logic": "skipped", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should prevent duplicate subscriptions": "expected", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should show PayPal payment button": "expected", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should show PayPal provider tab": "expected", + "webkit-gen|payment/02-paypal-subscription.spec.ts|should show grace period warning": "expected", + "webkit-gen|payment/02-paypal-subscription.spec.ts|subscription management route renders for an authed user (#5)": "expected", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should display offline error banner when offline": "expected", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should display retry button for failed payment": "skipped", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should display user-friendly error messages": "skipped", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should expand recovery list at retry_count >= 2": "skipped", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should grant consent and show payment options": "expected", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should log error details for debugging": "skipped", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should mount SwitchProviderPanel when \"Use a different payment method\" is clicked": "skipped", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should offer + run a dunning retry for a past_due subscription": "expected", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should render payment result page with malformed ID": "expected", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should render payment result page with missing session": "expected", + "webkit-gen|payment/03-failed-payment-retry.spec.ts|should show payment demo page correctly": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should allow proceeding after consent": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should allow withdrawing payment consent (GDPR right to withdraw)": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should handle consent decline gracefully": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should have accessible consent buttons": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should not load payment scripts before consent": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should persist consent decision": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should remember consent across page reloads": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should show consent section on first visit": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should show payment options after consent granted": "expected", + "webkit-gen|payment/04-gdpr-consent.spec.ts|should show privacy information": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|queue management UI renders on the payment hub (#4)": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should clear the queue manually": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should drain the queue on Retry (needs live provider)": "skipped", + "webkit-gen|payment/05-offline-queue.spec.ts|should grant consent successfully": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should handle multiple queued payments": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should persist queue across page reloads": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should show Max-retries badge after max attempts": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should show payment demo page": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should show queued items and the Offline badge when offline": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should show retry count on queued items": "expected", + "webkit-gen|payment/05-offline-queue.spec.ts|should warn when device storage is near quota": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should coalesce a burst of updates into an \"N updates\" indicator": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should handle subscription status changes in real-time": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should load payment demo page": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should render a payment trend chart from the user's payments": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should show \"Reconnecting\u2026\" on a channel drop (unit-covered)": "skipped", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should show a realtime connection-status indicator": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should show live transaction counter": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should show payment history section after consent": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should show real-time payment status updates": "skipped", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should surface an error alert when a realtime payment fails": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should update payment list when new payment added": "expected", + "webkit-gen|payment/06-realtime-dashboard.spec.ts|should update webhook verification status in real-time": "skipped", + "webkit-gen|payment/07-performance.spec.ts|should grant consent within reasonable time": "expected", + "webkit-gen|payment/07-performance.spec.ts|should load payment demo page within reasonable time": "expected", + "webkit-gen|payment/08-subscription-lifecycle.spec.ts|cancel and resume round-trip through the deployed Edge Functions": "skipped", + "webkit-gen|security/oauth-csrf.spec.ts|OAuth buttons should be visible and enabled on sign-in page": "expected", + "webkit-gen|security/oauth-csrf.spec.ts|OAuth flow should include required OAuth parameters": "expected", + "webkit-gen|security/oauth-csrf.spec.ts|OAuth redirect should go to correct provider": "expected", + "webkit-gen|security/oauth-csrf.spec.ts|OAuth redirect should include state parameter for CSRF protection": "expected", + "webkit-gen|security/oauth-csrf.spec.ts|OAuth redirect_uri should point to Supabase callback": "expected", + "webkit-gen|security/oauth-csrf.spec.ts|OAuth state parameter should be unique per request": "expected", + "webkit-gen|security/oauth-csrf.spec.ts|different browser sessions should have isolated OAuth state": "expected", + "webkit-gen|security/payment-isolation.spec.ts|Payment buttons require GDPR consent": "expected", + "webkit-gen|security/payment-isolation.spec.ts|Payment history shows only own payments": "expected", + "webkit-gen|security/payment-isolation.spec.ts|Payment intent includes correct user association": "expected", + "webkit-gen|security/payment-isolation.spec.ts|Unauthenticated users see sign-in prompt on payment page": "expected", + "webkit-gen|security/payment-isolation.spec.ts|User A and User B have isolated payment sessions": "expected", + "webkit-gen|tests/accessibility.spec.ts|ARIA landmarks are present": "expected", + "webkit-gen|tests/accessibility.spec.ts|accessibility settings page passes automated checks": "expected", + "webkit-gen|tests/accessibility.spec.ts|all form inputs have labels": "expected", + "webkit-gen|tests/accessibility.spec.ts|all images have alt text": "expected", + "webkit-gen|tests/accessibility.spec.ts|color contrast advisory (axe-core executes successfully)": "expected", + "webkit-gen|tests/accessibility.spec.ts|error messages are associated with form fields": "expected", + "webkit-gen|tests/accessibility.spec.ts|focus indicators are visible": "expected", + "webkit-gen|tests/accessibility.spec.ts|font size controls actually resize text": "expected", + "webkit-gen|tests/accessibility.spec.ts|homepage passes automated accessibility checks": "expected", + "webkit-gen|tests/accessibility.spec.ts|keyboard navigation works throughout the site": "expected", + "webkit-gen|tests/accessibility.spec.ts|links have distinguishable text": "expected", + "webkit-gen|tests/accessibility.spec.ts|page has proper heading hierarchy": "expected", + "webkit-gen|tests/accessibility.spec.ts|reduced motion is respected": "expected", + "webkit-gen|tests/accessibility.spec.ts|sign-in page passes automated accessibility checks": "expected", + "webkit-gen|tests/accessibility.spec.ts|skip to main content link works": "expected", + "webkit-gen|tests/accessibility.spec.ts|themes page passes automated accessibility checks": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should allow code blocks to scroll internally": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should display SEO badge in top-right corner": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should display TOC button in top-right corner": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should display featured image without cropping important content": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should display footer at bottom of page": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should have readable text without zooming": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should have touch-friendly interactive elements": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should maintain layout when scrolling": "expected", + "webkit-gen|tests/blog-mobile-ux-iphone.spec.ts|should not have horizontal scroll on page": "expected", + "webkit-gen|tests/blog-mobile-ux-pixel.spec.ts|should display footer at bottom": "expected", + "webkit-gen|tests/blog-mobile-ux-pixel.spec.ts|should not have horizontal scroll": "expected", + "webkit-gen|tests/blog-touch-targets.spec.ts|Blog list cards have adequate touch targets (44x44px minimum)": "expected", + "webkit-gen|tests/blog-touch-targets.spec.ts|Blog post interactive elements meet 44x44px": "expected", + "webkit-gen|tests/broken-links.spec.ts|check all internal links for 404s": "skipped", + "webkit-gen|tests/broken-links.spec.ts|check meta tag images and resources": "expected", + "webkit-gen|tests/broken-links.spec.ts|check specific known problematic links": "expected", + "webkit-gen|tests/broken-links.spec.ts|validate sitemap entries": "expected", + "webkit-gen|tests/container-width.spec.ts|container fills the viewport at every width below the cap": "expected", + "webkit-gen|tests/container-width.spec.ts|container stops widening at the cap": "expected", + "webkit-gen|tests/container-width.spec.ts|widening the container introduces no horizontal overflow": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|404 page handles non-existent routes": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|active navigation item is highlighted": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|anchor links within pages work": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|breadcrumb navigation works if present": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|browser back/forward navigation works": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|deep linking works correctly": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|external links open in new tab": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|mobile navigation menu works": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|navigate through all main pages": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|navigation menu is consistent across pages": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|navigation menu is keyboard accessible": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|navigation preserves theme selection": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|page transitions are smooth": "expected", + "webkit-gen|tests/cross-page-navigation.spec.ts|scroll position resets on navigation": "expected", + "webkit-gen|tests/depth-tokens.spec.ts|a depth utility beats component styles on the default themes": "expected", + "webkit-gen|tests/depth-tokens.spec.ts|a plate reads as raised and a well as cut, on every theme": "expected", + "webkit-gen|tests/depth-tokens.spec.ts|depth primitives derive from theme colour, not literal black": "expected", + "webkit-gen|tests/depth-tokens.spec.ts|every theme renders depth with at least one visible ink": "expected", + "webkit-gen|tests/depth-tokens.spec.ts|the three depth utilities are emitted": "expected", + "webkit-gen|tests/form-submission.spec.ts|disabled fields cannot be edited": "expected", + "webkit-gen|tests/form-submission.spec.ts|error messages display correctly": "expected", + "webkit-gen|tests/form-submission.spec.ts|form data persists on page reload": "expected", + "webkit-gen|tests/form-submission.spec.ts|form fields have proper labels and ARIA attributes": "expected", + "webkit-gen|tests/form-submission.spec.ts|form fields maintain focus order": "expected", + "webkit-gen|tests/form-submission.spec.ts|form shows loading state during submission": "expected", + "webkit-gen|tests/form-submission.spec.ts|form submission with valid data": "expected", + "webkit-gen|tests/form-submission.spec.ts|form validation prevents submission with invalid data": "expected", + "webkit-gen|tests/form-submission.spec.ts|help text is properly associated with fields": "expected", + "webkit-gen|tests/form-submission.spec.ts|multi-step form navigation works correctly": "expected", + "webkit-gen|tests/form-submission.spec.ts|required fields show indicators": "expected", + "webkit-gen|tests/homepage.spec.ts|GitHub repository link opens in new tab": "skipped", + "webkit-gen|tests/homepage.spec.ts|homepage loads with correct title": "expected", + "webkit-gen|tests/homepage.spec.ts|navigate to game page": "expected", + "webkit-gen|tests/homepage.spec.ts|navigate to storybook page": "expected", + "webkit-gen|tests/homepage.spec.ts|navigate to themes page": "expected", + "webkit-gen|tests/homepage.spec.ts|navigation links in secondary nav work": "expected", + "webkit-gen|tests/homepage.spec.ts|skip to main content link works": "expected", + "webkit-gen|tests/homepage.spec.ts|the four modules are present and numbered": "expected", + "webkit-gen|tests/homepage.spec.ts|the install block shows the Docker path, never npx": "expected", + "webkit-gen|tests/mobile-buttons.spec.ts|All buttons meet 44x44px minimum on mobile": "expected", + "webkit-gen|tests/mobile-buttons.spec.ts|Buttons have 8px minimum spacing": "expected", + "webkit-gen|tests/mobile-card-layout.spec.ts|Cards fit within viewport at all mobile widths": "expected", + "webkit-gen|tests/mobile-card-layout.spec.ts|Cards stack vertically on mobile (320px-767px)": "expected", + "webkit-gen|tests/mobile-card-layout.spec.ts|Cards use grid layout on tablet (768px+)": "expected", + "webkit-gen|tests/mobile-footer.spec.ts|Footer fits within viewport": "expected", + "webkit-gen|tests/mobile-footer.spec.ts|Footer links meet touch target standards": "expected", + "webkit-gen|tests/mobile-footer.spec.ts|Footer links stack vertically on mobile": "expected", + "webkit-gen|tests/mobile-form-inputs.spec.ts|Form fields have adequate spacing": "expected", + "webkit-gen|tests/mobile-form-inputs.spec.ts|Form inputs meet 44px height minimum": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|Images do not cause horizontal overflow": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /accessibility": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /account": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /account/audit": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/audit": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/email": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/messaging": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/payments": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /admin/users": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/playable-city-chattanooga": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/seo": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/tags": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /blog/tags/digital-twin": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /chatt": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /comment-policy": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /contact": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /cookies": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /docs": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /docs/install-and-first-run": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /forgot-password": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /game": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /game/3d": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /map": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages/new-group": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /messages/setup": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment-demo": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /payment-result": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /privacy": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /privacy-controls": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /profile": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /reset-password": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /schedule": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /sign-in": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /sign-up": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /status": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /themes": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /verify-email": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|No horizontal overflow on /wireframes": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|Pre/code blocks are responsive": "expected", + "webkit-gen|tests/mobile-horizontal-scroll.spec.ts|Tables are responsive on mobile": "expected", + "webkit-gen|tests/mobile-images.spec.ts|Images fit within 320px viewport": "expected", + "webkit-gen|tests/mobile-images.spec.ts|Images fit within 390px viewport": "expected", + "webkit-gen|tests/mobile-images.spec.ts|Images fit within 428px viewport": "expected", + "webkit-gen|tests/mobile-images.spec.ts|Images use lazy loading": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Mobile menu toggle works on narrow viewports": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation adapts to orientation change": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation controls are all visible at 320px (narrowest mobile)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within Narrow Mobile (320px) viewport (320px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 12 Landscape viewport (844px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 12 viewport (390px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 13 viewport (390px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 Pro Max Landscape viewport (926px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 Pro Max viewport (428px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone 14 viewport (390px)": "expected", + "webkit-gen|tests/mobile-navigation.spec.ts|Navigation fits within iPhone SE viewport (375px)": "expected", + "webkit-gen|tests/mobile-orientation.spec.ts|Content adapts to orientation without breaking": "expected", + "webkit-gen|tests/mobile-orientation.spec.ts|Orientation change triggers responsive adjustments": "expected", + "webkit-gen|tests/mobile-orientation.spec.ts|Tablet landscape uses tablet/desktop layout": "expected", + "webkit-gen|tests/mobile-orientation.spec.ts|iPhone 12 landscape STAYS in mobile mode (critical test)": "expected", + "webkit-gen|tests/mobile-orientation.spec.ts|iPhone 12 portrait uses mobile styles": "expected", + "webkit-gen|tests/mobile-orientation.spec.ts|matchMedia detects orientation correctly": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|All interactive elements meet 44x44px minimum on iPhone 12": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|Form inputs meet touch target height standards": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|Links in content meet touch target standards": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|Navigation buttons meet touch target standards": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|Touch targets have adequate spacing (8px minimum)": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|Touch targets maintain size across mobile widths": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|desktop nav group menus expose 44px targets (#378)": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|the Demos menu is keyboard operable and Escape restores focus (#378)": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|the Display popover is reachable at every width and its controls meet 44px (#378)": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|the banner spacer reserves the banner\u2019s real height (#457)": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|the cookie banner's OWN controls meet 44px (#457)": "expected", + "webkit-gen|tests/mobile-touch-targets.spec.ts|the mobile menu's own items meet 44px (#378)": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Body text is readable without zoom (\u226514px minimum)": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Font sizes scale with viewport using fluid typography": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Headings scale appropriately on mobile": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Line height is comfortable (\u22651.5)": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Small text is avoided or has min-font-size": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Text does not overflow containers on mobile": "expected", + "webkit-gen|tests/mobile-typography.spec.ts|Text remains readable in landscape orientation": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|PWA install prompt component is present": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|app works offline after service worker activation": "skipped", + "webkit-gen|tests/pwa-installation.spec.ts|apple touch icons are present for iOS": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|install button shows on supported browsers": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|manifest contains required PWA fields": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|manifest file is linked correctly": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|maskable icon is provided for Android": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|service worker registers successfully": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|shortcuts are defined in manifest": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|theme color meta tags are valid": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|viewport meta tag is set for mobile": "expected", + "webkit-gen|tests/pwa-installation.spec.ts|web app is installable (Lighthouse PWA criteria)": "expected", + "webkit-gen|tests/theme-switching.spec.ts|all theme buttons are present": "expected", + "webkit-gen|tests/theme-switching.spec.ts|can switch to bumblebee theme": "expected", + "webkit-gen|tests/theme-switching.spec.ts|can switch to corporate theme": "expected", + "webkit-gen|tests/theme-switching.spec.ts|can switch to cupcake theme": "expected", + "webkit-gen|tests/theme-switching.spec.ts|can switch to emerald theme": "expected", + "webkit-gen|tests/theme-switching.spec.ts|can switch to light theme": "expected", + "webkit-gen|tests/theme-switching.spec.ts|localStorage stores theme preference": "expected", + "webkit-gen|tests/theme-switching.spec.ts|switch to dark theme and verify persistence": "expected", + "webkit-gen|tests/theme-switching.spec.ts|switch to light theme and verify persistence": "expected", + "webkit-gen|tests/theme-switching.spec.ts|theme applies to all pages consistently": "expected", + "webkit-gen|tests/theme-switching.spec.ts|theme preview shows correct colors": "expected", + "webkit-gen|tests/theme-switching.spec.ts|theme switcher is accessible from homepage": "expected", + "webkit-gen|tests/theme-switching.spec.ts|theme transition is smooth": "expected", + "webkit-gen|tests/type-scale-truth.spec.ts|a first-time visitor paints at the medium default, not 1": "expected", + "webkit-gen|tests/type-scale-truth.spec.ts|the /docs h1 uses text-5xl at/above sm and text-4xl below": "expected", + "webkit-gen|tests/type-scale-truth.spec.ts|the font scale is applied before hydration, including a stored preference": "expected", + "webkit-gen|tests/type-stack-truth.spec.ts|a stored font preference applies to headings before hydration": "expected", + "webkit-gen|tests/type-stack-truth.spec.ts|body, headings and code render the declared faces": "expected", + "webkit-gen|tests/type-stack-truth.spec.ts|choosing a font replaces the display face on headings": "expected", + "webkit-gen|tests/type-stack-truth.spec.ts|font utilities still override the base heading rule": "expected", + "webkit-gen|tests/type-stack-truth.spec.ts|font variables are declared on :root, not below it": "expected", + "webkit-gen|twin-glass-contrast.spec.ts|nav text clears AAA against ANY backdrop the scene can produce": "expected", + "webkit-gen|twin-glass-contrast.spec.ts|the glass is scoped to twin routes only": "expected", + "webkit-gen|twins.spec.ts|/twins/chatt/?diorama loads the baked manifest and shows the camera dock": "expected", + "webkit-gen|twins.spec.ts|?atlas remains a working alias for links shared before the flip": "expected", + "webkit-gen|twins.spec.ts|?diorama still reaches the exhibit": "expected", + "webkit-gen|twins.spec.ts|Top-down compare mode (#233): dock button + ?ortho render without errors": "expected", + "webkit-gen|twins.spec.ts|exactly one contentinfo landmark, and it carries the real links (#301)": "expected", + "webkit-gen|twins.spec.ts|no unexpected console.error on load": "expected", + "webkit-gen|twins.spec.ts|the HUD is capped in width and wraps rather than clips (#307)": "expected", + "webkit-gen|twins.spec.ts|the R3F canvas mounts when WebGL is available": "expected", + "webkit-gen|twins.spec.ts|the atlas MODULE mounts on /chatt (no WebGL needed)": "expected", + "webkit-gen|twins.spec.ts|the atlas SCENE initialises without erroring": "expected", + "webkit-gen|twins.spec.ts|the atlas keeps its cookie banner and drops the PWA popup (#301)": "expected", + "webkit-gen|twins.spec.ts|the atlas reports a real building count, not an empty scene": "expected", + "webkit-gen|twins.spec.ts|the diorama hides the cookie banner its dock sits under (#301)": "expected", + "webkit-gen|twins.spec.ts|the diorama wordmark is finally out from under the nav (#299)": "expected", + "webkit-gen|twins.spec.ts|the page cannot scroll, so the HUD cannot hide (#301)": "expected", + "webkit-gen|twins.spec.ts|the twin is reachable from normal navigation (homepage demo card)": "expected", + "webkit-gen|twins.spec.ts|the type chip is reachable, even after trying to scroll (#301)": "expected", + "webkit-msg-iso|messaging/complete-user-workflow.spec.ts|Complete messaging workflow: send -> receive -> reply -> verify encryption": "expected", + "webkit-msg-iso|messaging/complete-user-workflow.spec.ts|should load conversations page within 5 seconds (SC-001)": "expected", + "webkit-msg-iso|messaging/complete-user-workflow.spec.ts|should show retry button on error state (FR-005)": "expected", + "webkit-msg-iso|messaging/cross-window-delivery.spec.ts|partner receives a message viewer sends, via the polling effect": "expected", + "webkit-msg-iso|messaging/encrypted-messaging.spec.ts|should load message history with pagination": "expected", + "webkit-msg-iso|messaging/encrypted-messaging.spec.ts|should never send private keys to server": "expected", + "webkit-msg-iso|messaging/encrypted-messaging.spec.ts|should send and receive encrypted message between two users": "expected", + "webkit-msg-iso|messaging/encrypted-messaging.spec.ts|should show delivery status indicators": "expected", + "webkit-msg-iso|messaging/encrypted-messaging.spec.ts|should verify zero-knowledge encryption in database": "expected", + "webkit-msg-iso|messaging/friend-requests.spec.ts|addressee can decline a friend request": "expected", + "webkit-msg-iso|messaging/friend-requests.spec.ts|connections page meets WCAG standards": "expected", + "webkit-msg-iso|messaging/friend-requests.spec.ts|duplicate requests are prevented": "expected", + "webkit-msg-iso|messaging/friend-requests.spec.ts|requester can cancel a sent pending request": "expected", + "webkit-msg-iso|messaging/friend-requests.spec.ts|requester sends friend request and addressee accepts": "expected", + "webkit-msg-iso|messaging/friend-requests.spec.ts|tab navigation works correctly": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should be keyboard navigable (T193)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should close modal on cancel button click (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should delete account and redirect to sign-in (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should export decrypted messages (T191)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should have ARIA live regions for status updates (T193)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should have accessible ARIA attributes (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should open confirmation modal on delete button click (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should require typing \"DELETE\" to enable deletion (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should show account deletion button in account settings (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should show data export button in account settings (T191)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should show error message on deletion failure (T192)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should show error on export failure (T191)": "expected", + "webkit-msg-iso|messaging/gdpr-compliance.spec.ts|should trigger data export download (T191)": "expected", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|contract - isolated connection helper is usable": "expected", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|member A sends an encrypted group message and member B decrypts it": "expected", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|sends and reads an encrypted message in a UI-created group (#182)": "skipped", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|should create group with connected users": "expected", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|should navigate back to messages when clicking back button": "expected", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|should navigate to new-group page and show connections": "expected", + "webkit-msg-iso|messaging/group-chat-multiuser.spec.ts|should show New Group link in sidebar": "expected", + "webkit-msg-iso|messaging/message-delete-placeholder.spec.ts|should show [Message deleted] placeholder and preserve adjacent messages": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|T115: should edit message within 15-minute window": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|T116: should delete message within 15-minute window": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|T117: should not show Edit/Delete buttons for messages older than 15 minutes": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|T130: edit mode should have proper ARIA labels": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|delete confirmation modal should be keyboard navigable": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|delete confirmation modal should have proper ARIA labels": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should cancel deletion from confirmation modal": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should cancel edit without saving": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should disable Save button when content unchanged": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should not allow editing empty message": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should not show Edit/Delete buttons on deleted message": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should not show Edit/Delete buttons on received messages": "expected", + "webkit-msg-iso|messaging/message-editing.spec.ts|should show Edit/Delete buttons only for own recent messages": "expected", + "webkit-msg-iso|messaging/oauth-setup-modal.spec.ts|US-1: OAuth user with no keys sees setup mode": "expected", + "webkit-msg-iso|messaging/oauth-setup-modal.spec.ts|US-2: returning OAuth user sees unlock mode with provider badge": "expected", + "webkit-msg-iso|messaging/oauth-setup-modal.spec.ts|US-3: email user sees unchanged unlock modal (regression)": "expected", + "webkit-msg-iso|messaging/offline-queue-sync.spec.ts|should queue a message offline and sync when reconnected": "expected", + "webkit-msg-iso|messaging/offline-queue.spec.ts|T146: should queue message when offline and send when online": "expected", + "webkit-msg-iso|messaging/offline-queue.spec.ts|T147: should queue multiple messages and sync all when reconnected": "expected", + "webkit-msg-iso|messaging/offline-queue.spec.ts|T148: should retry with exponential backoff on server failure": "expected", + "webkit-msg-iso|messaging/offline-queue.spec.ts|T149: should handle conflict resolution with server timestamp": "expected", + "webkit-msg-iso|messaging/offline-queue.spec.ts|should show failed status after max retries": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|Auto-scroll to bottom on new message": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|Jump to bottom button with smooth scroll": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|Performance monitoring logs for large conversations": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|Scroll position maintained during pagination": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|T166: Performance with 1000 messages - scrolling FPS": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|T167: Pagination loads next 50 messages": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|T169: Keyboard navigation through messages": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|T172b: Virtual scrolling activates at exactly 100 messages": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|Tab navigation to jump to bottom button": "expected", + "webkit-msg-iso|messaging/performance.spec.ts|Virtual scrolling maintains 60fps during rapid scrolling": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should auto-expire typing indicator after 5 seconds": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should deliver message in <500ms between two windows": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should handle rapid message exchanges": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should hide typing indicator when user stops typing": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should remove typing indicator when message is sent": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should show delivery status (sent \u2192 delivered \u2192 read)": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should show multiple typing indicators correctly": "expected", + "webkit-msg-iso|messaging/real-time-delivery.spec.ts|should show typing indicator when user types": "expected", + "webkit-msg|messaging/messaging-scroll.spec.ts|T003: Message input visible on mobile viewport (375x667)": "expected", + "webkit-msg|messaging/messaging-scroll.spec.ts|T004: Message input visible on tablet viewport (768x1024)": "expected", + "webkit-msg|messaging/messaging-scroll.spec.ts|T005: Message input visible on desktop viewport (1280x800)": "expected", + "webkit-msg|messaging/messaging-scroll.spec.ts|T006: Scroll container constrained to MessageThread": "expected", + "webkit-msg|messaging/messaging-scroll.spec.ts|T007-T008: Jump button appears when scrolled and does not overlap input": "expected", + "webkit-msg|messaging/messaging-scroll.spec.ts|T009: Jump button click scrolls to bottom": "expected" + } +}