# F3 — touch — dark
Linux x86_64; Playwright Chromium 148.0.7778.96, headless; DPR 1; font scaling 100% (UI 16px, code 13px, terminal 12px); viewport/hasTouch only; dark 1280×800 (N1: 980×800, 700×800, 390×844, then 1280×800); reduced motion; fixed browser clock 2026-11-10T12:00:00Z. Touch: pointer:coarse=true and any-pointer:coarse=true; M1 mouse: both false.

Before [4c36119](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63); After [30ab341](https://git.cafe/pingdotgg/t3code/commit/30ab3415f19f1c18e0ae2e6f0a86b302983a73a1).

Contact timestamps below are start–end, logged immediately before dispatch (never after the contact/wait). Video time is calibrated to the first visible pink marker at 25 fps; allow about 0.1s encoding precision.

| Step | Before contact / result | After contact / result |
|---|---|---|
| Chapter: real-app PR Code, structured diff, exact PR tree sizing | 00:00.15 | 00:00.15 |
| Chapter: PR Code tree hidden | 00:10.04 | 00:10.39 |
| PR Code wider | 00:01.18–00:02.43; 320→340px (Δ+20); pointercancel; terminal labels 0→0 | 00:01.65–00:03.42; 320→400px (Δ+80); pointerup; terminal labels 0→0 |
| PR Code narrower | 00:06.51–00:07.83; 340→320px (Δ-20); pointercancel; terminal labels 0→0 | 00:07.28–00:08.39; 400→320px (Δ-80); pointerup; terminal labels 0→0 |
| hide PR Code tree | 00:09.10–00:09.25; see size/target log; pointerup; terminal labels 0→0 | 00:09.55–00:09.67; see size/target log; pointerup; terminal labels 0→0 |

| Before recording | After recording |
|---|---|
| [before-F3.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f7a4ea67b1060e3/before-F3.mp4)<br>[4c36119](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | [after-F3.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b5c98b8b98c251c5/after-F3.mp4)<br>[30ab341](https://git.cafe/pingdotgg/t3code/commit/30ab3415f19f1c18e0ae2e6f0a86b302983a73a1) |

Narration is composited below the app viewport; stills and diffs contain only app pixels. Every still passed reduced motion, network idle, fonts ready and two pixel-identical screenshots 500ms apart.

| Before | After | Diff0 | DiffT (>5/255 maximum RGB channel difference) |
|---|---|---|---|
| ![Before](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/577a70467ea20c6b/before-F3.png) | ![After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/466d81e2dbddb690/after-F3.png) | ![Diff0 ×255](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db349cc1e93c8eda/F3-diff0.png) | ![DiffT](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/273acef030d1fde1/F3-diff5.png) |

[Before full probe log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eda61d1faee53afa/before-F3.jsonl) · [After full probe log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bb8977e90d2df965/after-F3.jsonl)

[Before matching video frame](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/90178d42414baf4f/before-F3-video-frame.png) · [After matching video frame](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2bc03d6b9bfff0fb/after-F3-video-frame.png)

![Before / After / Diff0 / DiffT](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/874e47ab87b8e5f9/F3-sheet.png)

Changed pixels: exact=133819; threshold >5=132378.

Actual app PR Code for [#33066](https://git.cafe/pingdotgg/t3code/pull/33066), forge reads only.
