diff --git a/MEMORY.md b/MEMORY.md
index 5a5beb1..c548f5e 100644
--- a/MEMORY.md
+++ b/MEMORY.md
@@ -626,7 +626,7 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
- Screen mockups with baked-in controls are used as backdrops plus an opaque `ArtPanel` cover, not as clickable full-screen skins.
- Radio, wand, inspection, and body-camera timeline panels use their reference art as backdrops; forms sit on transparent, padded panels over the covered mockup controls.
- HUD target names use a boxed chip under the crosshair; escalation has a five-segment bar below the text label. The body-camera REC/clock block starts at y=92 on the right so it clears the shift/rep/crowd text.
-- Staged captures in `docs/screenshots/` are committed and were last regenerated after the realism and NPC passes; re-run `tools/check_screenshots.sh` (not a partial capture) before replacing them.
+- Staged captures in `docs/screenshots/` are committed and were regenerated on 2026-11-03 with the full `tools/check_screenshots.sh` run (21 good / 0 bad, 13 PNGs changed). Re-run the whole script, never a partial capture, before replacing them. The README, `docs/README.md` quick preview, `docs/screenshots/README.md` and `docs/blender_previews/README.md` now carry captioned galleries; the previews README is curated by hand (all tracked sheets linked, local per-asset PNGs described as untracked).
- `tools/check_screenshots.sh` is the repeatable capture+compare smoke; both capture scripts accept `--out=res://docs/screenshots`. Judge verdicts on the staged set were 7 match / 4 review / 0 diff.
- Venue selection used to leave `guard.input_locked` true and the mouse visible; `_start_shift()` must call `_refresh_freeze()` after starting the clock.
diff --git a/README.md b/README.md
index b768273..8076569 100644
--- a/README.md
+++ b/README.md
@@ -18,18 +18,56 @@ Versions are assigned only when a track's scope is accepted into a release. Ever
## Screenshots
+Every capture is rendered from the current build by [`tools/check_screenshots.sh`](tools/check_screenshots.sh)
+(21 captures, compared against the runtime art). The full gallery, including every UI state, is in
+[`docs/screenshots/`](docs/screenshots/README.md).
+
+### Venues
+
| | |
| --- | --- |
-|  |  |
-|  |  |
-|  |  |
-|  |  |
-|  |  |
-|  |  |
-|  | |
+|  | **Hollywood Boulevard — day.** The El Capitan Entertainment Centre block: six Ionic columns, Masonic parapet, event banners, eight stone steps and the Walk of Fame terrazzo. |
+|  | **Hollywood Boulevard — late.** Sconces pool on the limestone, street lamps light the boulevard and the skyline fades into night haze. |
+|  | **Night patrol.** A tight flashlight spot picks out the door and the person in front of it; movement and awareness change at night. |
+|  | **The Joke Shop.** A black Sunset Strip club under its signature-covered canopy, circular blade sign, red curtains and the dry hillside behind. |
+|  | **TV Studio arrival.** Stone facade, bulb canopy, black car and crowd barriers for a late celebrity arrival. |
-*Screenshots are generated by [`src/test/capture_screenshots.gd`](src/test/capture_screenshots.gd) and [`src/test/capture_prop_gallery.gd`](src/test/capture_prop_gallery.gd) from the current build — day, late-night, wand screening, escalation, shift-review timeline,
-precision walk, the Joke Shop's Sunset Strip frontage, the TV Studio arrival, and the prop lineup.*
+### Interaction and systems
+
+| | |
+| --- | --- |
+|  | **Focus and targeting.** The cone focus ring, name tag and target chip; `Tab`/wheel cycles nearby people without aiming. |
+|  | **Access inspection.** A venue-correct wristband check with evidence shown before the admit/refuse decision. |
+|  | **Radio report.** Security assistance with location, behaviour and what was actually seen. |
+|  | **Wand screening.** A false alarm on keys: ask the guest to identify the item before choosing a response. |
+|  | **Escalation.** Level 3 blocking with the shape meter, body camera armed and the reaction log. |
+|  | **Body-camera timeline.** Every recorded event, step by step, in the shift review. |
+|  | **Precision walk.** Half-speed close work on the steps, with the HUD state chip visible. |
+
+### Shell and UI
+
+| | |
+| --- | --- |
+|  | **Venue menu.** Day and night rows for Hollywood, the Joke Shop and the TV Studio, campaign continue and review links. |
+|  | **Settings.** Difficulty, volumes, HUD scale, reduce motion, captions and key/button remapping, all persisted. |
+|  | **Shift review.** Grade, policy outcome, incidents, responder results and campaign Continue. |
+|  | **Action wheel.** De-escalation first: stop, look, point, no, ask, inspect, warn, block, reason, recognize, radio. |
+
+### 3D asset progress
+
+The character, gear and prop libraries are authored procedurally in Blender and audited before use;
+the sheets below track their visual progress.
+
+| | |
+| --- | --- |
+|  | **Character library.** Eight skinned variants (4.5–5.5k triangles each) with five tint slots, attach-point gear and baked maps. |
+|  | **Street and venue props.** Twenty library props with colliders, navigation avoidance and colour atlases. |
+|  | **Neutral baseline.** 8 characters × 6 views (front, three-quarter, profile, back, full body, crowd) used for the 0.9.4 pass and the current re-evaluation. |
+|  | **Texture refinement.** 128 → 256 px NPC maps and a 4× fabric weave, shown before/after on the same camera. |
+|  | **Crowd variety prototypes.** Four approved looks (bun/slim, bald/broad, coat/umbrella, hood/cup) queued for the roster build. |
+
+More sheets and the review criteria are in [`docs/blender_previews/`](docs/blender_previews/README.md)
+and [`docs/3d-model-review.md`](docs/3d-model-review.md).
## ⬇️ Downloads
diff --git a/docs/README.md b/docs/README.md
index 0bf6012..f037388 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -42,9 +42,13 @@ This folder holds the project documentation, visual references and generated QA
## Quick preview
-| Reference | Screenshot |
+| Reference | Capture |
| --- | --- |
| Venue design |
|
-| Current entrance |
|
+| Current entrance (day) |
|
+| Current entrance (late) |
|
+| Joke Shop |
|
| Character sheet |
|
+| Neutral NPC baseline |
|
+| Texture refinement |
|
| Prop sheet |
|
diff --git a/docs/blender_previews/README.md b/docs/blender_previews/README.md
index fa0b321..c783162 100644
--- a/docs/blender_previews/README.md
+++ b/docs/blender_previews/README.md
@@ -1,71 +1,31 @@
-# Blender Previews
+# Blender previews
-Committed contact sheets and local Blender renders for the character, gear and prop library. Individual PNGs are development previews and are gitignored; the sheets are tracked.
+Committed contact sheets for the character, gear and prop library. Per-asset Cycles renders
+(`*.png`) are local development output and gitignored; the sheets below are the review artefacts
+and are built with `blender_assets.py render` + `sheet`, `npc_baseline.py sheet/compare`, or the
+capture harnesses.
-## Image previews
-
-| Preview | File |
+| Sheet | What it records |
| --- | --- |
-|
| [`a_frame_sign.png`](a_frame_sign.png) |
-|
| [`backpack.png`](backpack.png) |
-|
| [`beanie.png`](beanie.png) |
-|
| [`bench.png`](bench.png) |
-|
| [`bollard.png`](bollard.png) |
-|
| [`camera.png`](camera.png) |
-|
| [`cap.png`](cap.png) |
-|
| [`clipboard.png`](clipboard.png) |
-|
| [`crowd_barrier.png`](crowd_barrier.png) |
-|
| [`cup.png`](cup.png) |
-|
| [`double_door.png`](double_door.png) |
-|
| [`fire_hydrant.png`](fire_hydrant.png) |
-|
| [`firefighter_helmet.png`](firefighter_helmet.png) |
-|
| [`flashlight.png`](flashlight.png) |
-|
| [`handrail.png`](handrail.png) |
-|
| [`hood.png`](hood.png) |
-|
| [`lanyard.png`](lanyard.png) |
-|
| [`marquee.png`](marquee.png) |
-|
| [`newspaper_box.png`](newspaper_box.png) |
-|
| [`npc_casual.png`](npc_casual.png) |
-|
| [`npc_coat.png`](npc_coat.png) |
-|
| [`npc_dress.png`](npc_dress.png) |
-|
| [`npc_firefighter.png`](npc_firefighter.png) |
-|
| [`npc_guard.png`](npc_guard.png) |
-|
| [`npc_hoodie.png`](npc_hoodie.png) |
-|
| [`npc_jacket.png`](npc_jacket.png) |
-|
| [`npc_vest.png`](npc_vest.png) |
-|
| [`palm_tree.png`](palm_tree.png) |
-|
| [`phone.png`](phone.png) |
-|
| [`planter_box.png`](planter_box.png) |
-|
| [`protest_sign.png`](protest_sign.png) |
-|
| [`radio.png`](radio.png) |
-|
| [`round_planter.png`](round_planter.png) |
-|
| [`scba_tank.png`](scba_tank.png) |
-|
| [`security_podium.png`](security_podium.png) |
-|
| [`sedan.png`](sedan.png) |
-|
| [`sheet_npc.jpg`](sheet_npc.jpg) |
-|
| [`sheet_npc_sources_research.jpg`](sheet_npc_sources_research.jpg) |
-|
| [`sheet_npc_crowd_prototypes.jpg`](sheet_npc_crowd_prototypes.jpg) |
-|
| [`sheet_npc_baseline.jpg`](sheet_npc_baseline.jpg) |
-|
| [`sheet_npc_baseline_compare-p1.jpg`](sheet_npc_baseline_compare-p1.jpg) |
-|
| [`sheet_npc_baseline_compare-body.jpg`](sheet_npc_baseline_compare-body.jpg) |
-|
| [`sheet_npc_baseline_compare-face.jpg`](sheet_npc_baseline_compare-face.jpg) |
-|
| [`sheet_npc_baseline_compare-torso.jpg`](sheet_npc_baseline_compare-torso.jpg) |
-|
| [`sheet_npc_baseline_compare-face-detail.jpg`](sheet_npc_baseline_compare-face-detail.jpg) |
-|
| [`sheet_npc_hands_compare.jpg`](sheet_npc_hands_compare.jpg) |
-|
| [`sheet_npc_hands_grip_compare.jpg`](sheet_npc_hands_grip_compare.jpg) |
-|
| [`sheet_npc_baseline_compare-shoes.jpg`](sheet_npc_baseline_compare-shoes.jpg) |
-|
| [`sheet_npc_baseline_compare-tex256.jpg`](sheet_npc_baseline_compare-tex256.jpg) |
-|
| [`sheet_npc_baseline_compare-texuv.jpg`](sheet_npc_baseline_compare-texuv.jpg) |
-|
| [`sheet_texture_refinement_0.9.5.jpg`](sheet_texture_refinement_0.9.5.jpg) |
-|
| [`sheet_npc_gear.jpg`](sheet_npc_gear.jpg) |
-|
| [`sheet_props.jpg`](sheet_props.jpg) |
-|
| [`shoulder_bag.png`](shoulder_bag.png) |
-|
| [`stanchion.png`](stanchion.png) |
-|
| [`street_lamp.png`](street_lamp.png) |
-|
| [`street_tree.png`](street_tree.png) |
-|
| [`sunglasses.png`](sunglasses.png) |
-|
| [`traffic_cone.png`](traffic_cone.png) |
-|
| [`trash_bin.png`](trash_bin.png) |
-|
| [`umbrella.png`](umbrella.png) |
-|
| [`wall_lantern.png`](wall_lantern.png) |
-|
| [`wand.png`](wand.png) |
+| [](sheet_npc.jpg)
`sheet_npc.jpg` | Eight skinned character variants (casual, jacket, coat, hi-vis vest, dress, hoodie, firefighter, guard) with their gear attach points. |
+| [](sheet_npc_baseline.jpg)
`sheet_npc_baseline.jpg` | Neutral studio baseline: 8 characters x front, three-quarter, profile, back, full body and crowd views. |
+| [](sheet_npc_baseline_compare-body.jpg)
`sheet_npc_baseline_compare-body.jpg` | Neck/shoulder transition: fuller neck base and a lower shoulder root. |
+| [](sheet_npc_baseline_compare-face-detail.jpg)
`sheet_npc_baseline_compare-face-detail.jpg` | Face detail: nose ala wings, a single rounded mouth and a darker ear concha. |
+| [](sheet_npc_baseline_compare-face.jpg)
`sheet_npc_baseline_compare-face.jpg` | Face-depth pass: recessed sclera, upper lid and sculpted chin/cheek planes. |
+| [](sheet_npc_baseline_compare-p1.jpg)
`sheet_npc_baseline_compare-p1.jpg` | 0.9.4 P1 pass: tourist photo-prop visibility and the refit backpack straps. |
+| [](sheet_npc_baseline_compare-shoes.jpg)
`sheet_npc_baseline_compare-shoes.jpg` | Footwear: rounded toe/heel caps on shoes and responder boots. |
+| [](sheet_npc_baseline_compare-tex256.jpg)
`sheet_npc_baseline_compare-tex256.jpg` | 128 -> 256 px NPC slot maps on the same camera. |
+| [](sheet_npc_baseline_compare-texuv.jpg)
`sheet_npc_baseline_compare-texuv.jpg` | 4x fabric weave with the baked per-character AO removed. |
+| [](sheet_npc_baseline_compare-torso.jpg)
`sheet_npc_baseline_compare-torso.jpg` | Torso/hip taper without changing the skeleton or build multipliers. |
+| [](sheet_npc_crowd_prototypes.jpg)
`sheet_npc_crowd_prototypes.jpg` | Four approved crowd-variety looks queued for the 12-character roster. |
+| [](sheet_npc_gear.jpg)
`sheet_npc_gear.jpg` | Eighteen gear pieces authored in attach space: caps, hood, helmet, bags, tanks, lanyards and handheld items. |
+| [](sheet_npc_hands_compare.jpg)
`sheet_npc_hands_compare.jpg` | Hand pass: wider palms, segmented fingers and a separate thumb. |
+| [](sheet_npc_hands_grip_compare.jpg)
`sheet_npc_hands_grip_compare.jpg` | Grip pass: the forward hand-item offset that puts props in the palm. |
+| [](sheet_npc_sources_research.jpg)
`sheet_npc_sources_research.jpg` | External character-source evaluation (CC0/CC-BY) for the roster research. |
+| [](sheet_props.jpg)
`sheet_props.jpg` | Twenty street and venue props with baked maps, ground contact and collider footprints. |
+| [](sheet_texture_refinement_0.9.5.jpg)
`sheet_texture_refinement_0.9.5.jpg` | 0.9.5 texture refinement before/after: pavers, awning stripes and NPC fabric. |
+
+The acceptance criteria for these sheets are in [`../npc-visual-review.md`](../npc-visual-review.md),
+the measurements in [`../npc-proportion-audit.md`](../npc-proportion-audit.md) and
+[`../3d-model-review.md`](../3d-model-review.md), and the asset contract in
+[`../blender-assets.md`](../blender-assets.md).
diff --git a/docs/screenshots/01-venue-overview.png b/docs/screenshots/01-venue-overview.png
index 8d00b22..dbc1ca2 100644
Binary files a/docs/screenshots/01-venue-overview.png and b/docs/screenshots/01-venue-overview.png differ
diff --git a/docs/screenshots/02-targeting-npc.png b/docs/screenshots/02-targeting-npc.png
index ab2bdf2..bf61bd0 100644
Binary files a/docs/screenshots/02-targeting-npc.png and b/docs/screenshots/02-targeting-npc.png differ
diff --git a/docs/screenshots/05-late-night-avenue.png b/docs/screenshots/05-late-night-avenue.png
index eeac7c5..263d3f6 100644
Binary files a/docs/screenshots/05-late-night-avenue.png and b/docs/screenshots/05-late-night-avenue.png differ
diff --git a/docs/screenshots/06-night-flashlight.png b/docs/screenshots/06-night-flashlight.png
index 588847e..a2b0269 100644
Binary files a/docs/screenshots/06-night-flashlight.png and b/docs/screenshots/06-night-flashlight.png differ
diff --git a/docs/screenshots/08-escalation-hud.png b/docs/screenshots/08-escalation-hud.png
index 3445582..97b0385 100644
Binary files a/docs/screenshots/08-escalation-hud.png and b/docs/screenshots/08-escalation-hud.png differ
diff --git a/docs/screenshots/09-body-camera-timeline.png b/docs/screenshots/09-body-camera-timeline.png
index aa0ef88..3d01e53 100644
Binary files a/docs/screenshots/09-body-camera-timeline.png and b/docs/screenshots/09-body-camera-timeline.png differ
diff --git a/docs/screenshots/11-precision-walk.png b/docs/screenshots/11-precision-walk.png
index 2053381..b414f34 100644
Binary files a/docs/screenshots/11-precision-walk.png and b/docs/screenshots/11-precision-walk.png differ
diff --git a/docs/screenshots/12-joke-shop.png b/docs/screenshots/12-joke-shop.png
index 8fd5698..fe02156 100644
Binary files a/docs/screenshots/12-joke-shop.png and b/docs/screenshots/12-joke-shop.png differ
diff --git a/docs/screenshots/13-studio-arrival.png b/docs/screenshots/13-studio-arrival.png
index 45fcc0f..8edb9e1 100644
Binary files a/docs/screenshots/13-studio-arrival.png and b/docs/screenshots/13-studio-arrival.png differ
diff --git a/docs/screenshots/17-shift-review.png b/docs/screenshots/17-shift-review.png
index d5b8436..28520ef 100644
Binary files a/docs/screenshots/17-shift-review.png and b/docs/screenshots/17-shift-review.png differ
diff --git a/docs/screenshots/19-radial-menu.png b/docs/screenshots/19-radial-menu.png
index f3be1c4..0c5689a 100644
Binary files a/docs/screenshots/19-radial-menu.png and b/docs/screenshots/19-radial-menu.png differ
diff --git a/docs/screenshots/20-crowd-panic.png b/docs/screenshots/20-crowd-panic.png
index 401fe9c..2b52df6 100644
Binary files a/docs/screenshots/20-crowd-panic.png and b/docs/screenshots/20-crowd-panic.png differ
diff --git a/docs/screenshots/21-responder-arrival.png b/docs/screenshots/21-responder-arrival.png
index 7f0711f..88611e4 100644
Binary files a/docs/screenshots/21-responder-arrival.png and b/docs/screenshots/21-responder-arrival.png differ
diff --git a/docs/screenshots/README.md b/docs/screenshots/README.md
index 8699d23..2ab3164 100644
--- a/docs/screenshots/README.md
+++ b/docs/screenshots/README.md
@@ -1,29 +1,34 @@
-# Screenshots
+# Game screenshots
-Committed gallery captures generated from the current build by src/test/capture_screenshots.gd, src/test/capture_ui_states.gd and src/test/capture_prop_gallery.gd.
+The gallery is regenerated with `tools/check_screenshots.sh`, which re-renders every capture from
+the current build and compares it with the screen-design reference. Captures are used by the
+README, the gameplay docs and the screenshot gate; do not edit them by hand.
-## Image previews
+| # | Capture | What it shows |
+| --- | --- | --- |
+| 01 | [Overview](01-venue-overview.png) | Hollywood Boulevard, the El Capitan facade and the shift HUD |
+| 02 | [Targeting](02-targeting-npc.png) | Focus ring, name tag and the target chip |
+| 03 | [Inspection](03-access-inspection.png) | Artifact check and the recognize / decide controls |
+| 04 | [Radio](04-radio-report.png) | Dispatch panel with the report fields |
+| 05 | [Night street](05-late-night-avenue.png) | Late-shift lighting and the skyline |
+| 06 | [Flashlight](06-night-flashlight.png) | Night patrol with the flashlight spot |
+| 07 | [Wand screening](07-wand-screening.png) | False alarm on keys at the Joke Shop |
+| 08 | [Escalation](08-escalation-hud.png) | Level 3 blocking with the body camera armed |
+| 09 | [Timeline](09-body-camera-timeline.png) | Recorded events in the shift review |
+| 10 | [Prop gallery](10-prop-gallery.png) | The Blender prop library on a studio backdrop |
+| 11 | [Precision walk](11-precision-walk.png) | Half-speed movement on the steps |
+| 12 | [Joke Shop](12-joke-shop.png) | Sunset Strip club frontage at night |
+| 13 | [Studio arrival](13-studio-arrival.png) | Late-night TV studio entrance |
+| 14 | [Start menu](14-start-menu.png) | Venue rows, Continue and campaign links |
+| 15 | [Pause](15-pause-overlay.png) | Pause overlay actions |
+| 16 | [Settings](16-settings-panel.png) | Difficulty, audio, accessibility and remapping |
+| 17 | [Shift review](17-shift-review.png) | Grade, policy result and incidents |
+| 18 | [Emergency radio](18-emergency-radio.png) | Hold-to-confirm emergency call |
+| 19 | [Action wheel](19-radial-menu.png) | De-escalation-first verb wheel |
+| 20 | [Crowd panic](20-crowd-panic.png) | Bystanders clearing away from an incident |
+| 21 | [Responder arrival](21-responder-arrival.png) | A responder at the locked door |
-| Preview | File |
-| --- | --- |
-|
| [`01-venue-overview.png`](01-venue-overview.png) |
-|
| [`02-targeting-npc.png`](02-targeting-npc.png) |
-|
| [`03-access-inspection.png`](03-access-inspection.png) |
-|
| [`04-radio-report.png`](04-radio-report.png) |
-|
| [`05-late-night-avenue.png`](05-late-night-avenue.png) |
-|
| [`06-night-flashlight.png`](06-night-flashlight.png) |
-|
| [`07-wand-screening.png`](07-wand-screening.png) |
-|
| [`08-escalation-hud.png`](08-escalation-hud.png) |
-|
| [`09-body-camera-timeline.png`](09-body-camera-timeline.png) |
-|
| [`10-prop-gallery.png`](10-prop-gallery.png) |
-|
| [`11-precision-walk.png`](11-precision-walk.png) |
-|
| [`12-joke-shop.png`](12-joke-shop.png) |
-|
| [`13-studio-arrival.png`](13-studio-arrival.png) |
-|
| [`14-start-menu.png`](14-start-menu.png) |
-|
| [`15-pause-overlay.png`](15-pause-overlay.png) |
-|
| [`16-settings-panel.png`](16-settings-panel.png) |
-|
| [`17-shift-review.png`](17-shift-review.png) |
-|
| [`18-emergency-radio.png`](18-emergency-radio.png) |
-|
| [`19-radial-menu.png`](19-radial-menu.png) |
-|
| [`20-crowd-panic.png`](20-crowd-panic.png) |
-|
| [`21-responder-arrival.png`](21-responder-arrival.png) |
+The captures are 1280×720 PNGs. Reference designs and the judge report live in
+[`../screens/`](../screens/README.md) and [`../screen-design-report.md`](../screen-design-report.md);
+the re-evaluation's pose and review sheets are under
+[`../blender_previews/`](../blender_previews/README.md).