# S1 — 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: expanded rail touch drag and reverse | 00:00.15 | 00:00.15 |
| Chapter: close via Toggle main sidebar, collapsed rail inert, reopen | 00:08.04 | 00:08.02 |
| Chapter: collapsed rail inert; ordinary touch content pan must still scroll | 00:13.21 | 00:13.23 |
| expanded rail | 00:01.07–00:02.07; 256→276px (Δ+20); pointercancel; terminal labels 0→0 | 00:01.06–00:02.07; 256→336px (Δ+80); pointerup; terminal labels 0→0 |
| reverse rail | 00:05.33–00:06.36; 276→256px (Δ-20); pointercancel; terminal labels 0→0 | 00:05.36–00:06.35; 336→256px (Δ-80); pointerup; terminal labels 0→0 |
| expanded rail consumes tap | 00:07.29–00:07.41; 256→256px (Δ+0); pointerup; terminal labels 0→0 | 00:07.28–00:07.40; 256→256px (Δ+0); pointerup; terminal labels 0→0 |
| close sidebar | 00:08.56–00:08.67; 256→0px (Δ-256); pointerup; terminal labels 0→0 | 00:08.54–00:08.66; 256→0px (Δ-256); pointerup; terminal labels 0→0 |
| collapsed rail target | 00:09.73–00:10.71; 0→0px (Δ+0); pointercancel; terminal labels 0→0 | 00:09.73–00:10.72; 0→0px (Δ+0); pointercancel; terminal labels 0→0 |
| reopen sidebar | 00:11.63–00:11.75; 0→256px (Δ+256); pointerup; terminal labels 0→0 | 00:11.66–00:11.79; 0→256px (Δ+256); pointerup; terminal labels 0→0 |
| close sidebar for content-pan guard | 00:12.43–00:12.56; 256→0px (Δ-256); pointerup; terminal labels 0→0 | 00:12.46–00:12.57; 256→0px (Δ-256); pointerup; terminal labels 0→0 |
| ordinary content pan | 00:14.12–00:15.11; scroll 100→165; pointercancel; terminal labels 0→0 | 00:14.15–00:15.17; scroll 100→165; pointercancel; terminal labels 0→0 |
| reopen after scrolling | 00:16.04–00:16.15; 0→256px (Δ+256); pointerup; terminal labels 0→0 | 00:16.10–00:16.22; 0→256px (Δ+256); pointerup; terminal labels 0→0 |

| Before recording | After recording |
|---|---|
| [before-S1.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0fa05e7677d5e76d/before-S1.mp4)<br>[4c36119](https://git.cafe/pingdotgg/t3code/commit/4c361199f47f6ea32a2c14835df392640d0f7c63) | [after-S1.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/44ac6af00f981a0b/after-S1.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/033d013a930fd2f0/before-S1.png) | ![After](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/33f5db0dfd78d465/after-S1.png) | ![Diff0 ×255](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/65707c934da7fd87/S1-diff0.png) | ![DiffT](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1c1450b26339b9cf/S1-diff5.png) |

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

[Before matching video frame](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad32aabfab12534b/before-S1-video-frame.png) · [After matching video frame](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47d9840cb2c4e002/after-S1-video-frame.png)

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

Changed pixels: exact=174184; threshold >5=115695.

The free Replay final content was prepared and its session stopped in a context with recording disabled, then opened and scrolled in a fresh recording context. No active turn is started during the recording.
