{
  "version": "1.46.0",
  "captured": "2026-11-01 Asia/Manila",
  "environment": "Windows Playwright Chromium and WebKit; emulated phone/tablet viewports, not physical iOS devices",
  "checks": {
    "archery-complete-round": [
      "Full match through browser controls",
      "Result, rematch and leave",
      "Show me next/pause/close",
      "320/390/768/1440 widths without overflow",
      "No browser errors"
    ],
    "football-complete-round": [
      "Full match through browser controls",
      "Result, rematch and leave",
      "Show me next/pause/close",
      "320/390/768/1440 widths without overflow",
      "No browser errors"
    ],
    "hockey-complete-round": [
      "Full match through browser controls",
      "Result, rematch and leave",
      "Show me next/pause/close",
      "320/390/768/1440 widths without overflow",
      "No browser errors"
    ],
    "behavior-and-throttled-performance": [
      "chromium hockey touch paddle moves",
      "chromium hockey no script errors",
      "chromium hockey phone fits",
      "chromium archery touch aim responds",
      "chromium archery keyboard aim responds",
      "chromium archery no script errors",
      "chromium archery phone fits",
      "chromium football touch aim responds",
      "chromium football keyboard aim responds",
      "chromium football no script errors",
      "chromium football phone fits",
      "webkit hockey touch paddle moves",
      "webkit hockey no script errors",
      "webkit hockey phone fits",
      "webkit archery touch aim responds",
      "webkit archery keyboard aim responds",
      "webkit archery no script errors",
      "webkit archery phone fits",
      "webkit football touch aim responds",
      "webkit football keyboard aim responds",
      "webkit football no script errors",
      "webkit football phone fits",
      "Update waits during game",
      "Reduced motion enables steady controls",
      "Demo submits no real moves",
      "Reduced motion skips replay",
      "Error popup inside phone viewport",
      "Dismissed error stays dismissed",
      "Automatic reconnection succeeds",
      "Update Later persists"
    ],
    "touch-rotation-and-motion": [
      "hockey: WebKit portrait/landscape phone+tablet touch input, no horizontal overflow, motion screenshot, demo pause/resume, next move",
      "archery: WebKit portrait/landscape phone+tablet touch input, no horizontal overflow, motion screenshot, demo pause/resume, next move",
      "football: WebKit portrait/landscape phone+tablet touch input, no horizontal overflow, motion screenshot, demo pause/resume, next move",
      "Chromium tablet simultaneous two-finger hockey controls move both paddles independently"
    ],
    "online-security": [
      "Guest online creation denied",
      "hockey host-only start and capacity",
      "hockey spectator and wrong-turn/host write denied",
      "hockey CSRF checked",
      "hockey stale moves rejected",
      "hockey synchronized state",
      "hockey private keys stripped",
      "Hockey spectator and invalid signaling denied",
      "archery host-only start and capacity",
      "archery spectator and wrong-turn/host write denied",
      "archery CSRF checked",
      "archery stale moves rejected",
      "archery synchronized state",
      "archery private keys stripped",
      "archery read-only spectator",
      "football host-only start and capacity",
      "football spectator and wrong-turn/host write denied",
      "football CSRF checked",
      "football stale moves rejected",
      "football synchronized state",
      "football private keys stripped",
      "football read-only spectator",
      "Two isolated contexts establish actual WebRTC DataChannel",
      "Both ready starts actual live physics",
      "Guest keyboard paddle movement reaches host",
      "Opening demo pauses both peers",
      "Reconnect creates fresh connected peer session",
      "Reconnect leaves both paused",
      "No multiplayer browser errors"
    ]
  },
  "webkitBefore": [
    {
      "version": 45,
      "game": "hockey",
      "width": 390,
      "height": 844,
      "dpr": 3,
      "frames": 90,
      "averageFrameMs": 24.033333333333335,
      "p95FrameMs": 27,
      "slowFrames": 1
    },
    {
      "version": 45,
      "game": "archery",
      "width": 390,
      "height": 844,
      "dpr": 3,
      "frames": 90,
      "averageFrameMs": 54.78888888888889,
      "p95FrameMs": 62,
      "slowFrames": 90
    },
    {
      "version": 45,
      "game": "football",
      "width": 390,
      "height": 844,
      "dpr": 3,
      "frames": 32,
      "averageFrameMs": 49.34375,
      "slowFrames": 31
    },
    {
      "version": 45,
      "game": "hockey",
      "width": 768,
      "height": 1024,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 20,
      "p95FrameMs": 24,
      "slowFrames": 0
    },
    {
      "version": 45,
      "game": "archery",
      "width": 768,
      "height": 1024,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 38.44444444444444,
      "p95FrameMs": 45,
      "slowFrames": 90
    },
    {
      "version": 45,
      "game": "football",
      "width": 768,
      "height": 1024,
      "dpr": 2,
      "frames": 49,
      "averageFrameMs": 32.10204081632653,
      "slowFrames": 3
    },
    {
      "version": 45,
      "game": "hockey",
      "width": 1024,
      "height": 768,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 21.366666666666667,
      "p95FrameMs": 26,
      "slowFrames": 0
    },
    {
      "version": 45,
      "game": "archery",
      "width": 1024,
      "height": 768,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 36.1,
      "p95FrameMs": 43,
      "slowFrames": 84
    },
    {
      "version": 45,
      "game": "football",
      "width": 1024,
      "height": 768,
      "dpr": 2,
      "frames": 46,
      "averageFrameMs": 34.58695652173913,
      "slowFrames": 11
    },
    {
      "version": 45,
      "game": "hockey",
      "width": 1280,
      "height": 800,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 25.522222222222222,
      "p95FrameMs": 27,
      "slowFrames": 2
    },
    {
      "version": 45,
      "game": "archery",
      "width": 1280,
      "height": 800,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 42.044444444444444,
      "p95FrameMs": 51,
      "slowFrames": 89
    },
    {
      "version": 45,
      "game": "football",
      "width": 1280,
      "height": 800,
      "dpr": 2,
      "frames": 48,
      "averageFrameMs": 32.729166666666664,
      "slowFrames": 10
    }
  ],
  "webkitAfter": [
    {
      "version": 46,
      "game": "hockey",
      "width": 390,
      "height": 844,
      "dpr": 3,
      "frames": 90,
      "averageFrameMs": 10.944444444444445,
      "p95FrameMs": 13,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "archery",
      "width": 390,
      "height": 844,
      "dpr": 3,
      "frames": 90,
      "averageFrameMs": 13.044444444444444,
      "p95FrameMs": 20,
      "slowFrames": 3
    },
    {
      "version": 46,
      "game": "football",
      "width": 390,
      "height": 844,
      "dpr": 3,
      "frames": 149,
      "averageFrameMs": 10.536912751677852,
      "slowFrames": 2
    },
    {
      "version": 46,
      "game": "hockey",
      "width": 768,
      "height": 1024,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 7.133333333333334,
      "p95FrameMs": 8,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "archery",
      "width": 768,
      "height": 1024,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 2.0555555555555554,
      "p95FrameMs": 2,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "football",
      "width": 768,
      "height": 1024,
      "dpr": 2,
      "frames": 300,
      "averageFrameMs": 4.19,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "hockey",
      "width": 1024,
      "height": 768,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 7.433333333333334,
      "p95FrameMs": 13,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "archery",
      "width": 1024,
      "height": 768,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 2.2,
      "p95FrameMs": 2,
      "slowFrames": 1
    },
    {
      "version": 46,
      "game": "football",
      "width": 1024,
      "height": 768,
      "dpr": 2,
      "frames": 300,
      "averageFrameMs": 3.9233333333333333,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "hockey",
      "width": 1280,
      "height": 800,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 8.811111111111112,
      "p95FrameMs": 13,
      "slowFrames": 0
    },
    {
      "version": 46,
      "game": "archery",
      "width": 1280,
      "height": 800,
      "dpr": 2,
      "frames": 90,
      "averageFrameMs": 3.566666666666667,
      "p95FrameMs": 12,
      "slowFrames": 2
    },
    {
      "version": 46,
      "game": "football",
      "width": 1280,
      "height": 800,
      "dpr": 2,
      "frames": 300,
      "averageFrameMs": 4.01,
      "slowFrames": 0
    }
  ],
  "throttledChromium": [
    {
      "engine": "chromium",
      "game": "hockey",
      "cpuThrottle": 4,
      "averageFrameMs": 16.591469194284546
    },
    {
      "engine": "chromium",
      "game": "archery",
      "cpuThrottle": 4,
      "averageFrameMs": 16.667391304347827
    },
    {
      "engine": "chromium",
      "game": "football",
      "cpuThrottle": 4,
      "averageFrameMs": 16.666684210526313
    },
    {
      "engine": "webkit",
      "game": "hockey",
      "cpuThrottle": 1,
      "averageFrameMs": 6.150170648464163
    },
    {
      "engine": "webkit",
      "game": "archery",
      "cpuThrottle": 1,
      "averageFrameMs": 4.601226993865031
    },
    {
      "engine": "webkit",
      "game": "football",
      "cpuThrottle": 1,
      "averageFrameMs": 1.6733333333333333
    }
  ],
  "limitations": [
    "Physical iPhone/iPad and independent-network testing pending.",
    "WebKit headless requestAnimationFrame intervals are synthetic measurements, not physical screen refresh rates.",
    "Online Hockey uses direct WebRTC; some networks cannot connect."
  ],
  "publicChecks": [
    "Public hockey: actual WebRTC connection, both ready, remote keyboard movement, demo pause and reconnect with saved score; same machine/network",
    "Acknowledged hockey connection notice: The live connection failed. Use Reconnect to try again.",
    "archery: three public browser shots, two players synchronized, spectator read-only",
    "football: three public browser shots, two players synchronized, spectator read-only",
    "hockey: hosted WebKit phone play, Show me deep link/pause/close, no overflow/errors",
    "archery: hosted WebKit phone play, Show me deep link/pause/close, no overflow/errors",
    "football: hosted WebKit phone play, Show me deep link/pause/close, no overflow/errors"
  ],
  "publicTestCleanup": {
    "syntheticAccountsRemoved": 3,
    "syntheticTablesRemoved": 3,
    "realAccountsModified": false
  },
  "visualInspection": [
    "Root inspected real desktop and phone/tablet screenshots for all three games, including moving frames.",
    "Root inspected both branded portfolio layouts and galleries.",
    "All three selected v2 lifestyle illustrations inspected: correct screen-facing orientation and unsupported heads."
  ]
}