diff --git a/Screenshots/README.md b/Screenshots/README.md
index c2e6285..29723f5 100644
--- a/Screenshots/README.md
+++ b/Screenshots/README.md
@@ -17,52 +17,45 @@ camera list via `AGigLineShotActor`, captures each shot, copies the PNGs here
and exits — about a minute. The camera list lives in
`Tools/ue_build_review_map.py`; add new shots there, remove retired ones here.
+> Naming: shots use their stable camera name (no index prefix), so adding or
+> reordering cameras never renumbers files or orphans the old ones. Click an
+> image for the full-size PNG.
+
+## Shot list
+
+All ☑ approved 2026-11-07.
+
+| # | File | Preview | Map | View | What it shows |
+| --- | --- | --- | --- | --- | --- |
+| 1 | `review-overview.png` | [
](review-overview.png) | Review | 7 m up, NE | Whole review layout: character + both cubes on the floor |
+| 2 | `review-character.png` | [
](review-character.png) | Review | eye height, south | MPFB mannequin, idle pose + warm skin; feet meet the plane |
+| 3 | `review-scale-cubes.png` | [
](review-scale-cubes.png) | Review | south | Floating vs grounded cube: cast vs contact shadow |
+| 4 | `review-player-placement.png` | [
](review-player-placement.png) | Review | spawn | The `AGigLineCharacter` pawn, capsule height and landing |
+| 5 | `review-npc-prefab.png` | [
](review-npc-prefab.png) | Review | mid, west | The `AGigLineNPCPerson` prefab: collision capsule + visible MPFB body, feet on Z 0 |
+| 6 | `review-ground-contact.png` | [
](review-ground-contact.png) | Review | knee height, feet | Floating/sinking character is obvious here |
+| 7 | `review-shadow-compare.png` | [
](review-shadow-compare.png) | Review | low angle | Detached (floating) vs touching (grounded) shadows |
+| 8 | `review-hero-portals.png` | [
](review-hero-portals.png) | Review | 8 m, eye height | Three genuine 1.2 m portal recesses with flights and plinth |
+| 9 | `review-hero-facade-front.png` | [
](review-hero-facade-front.png) | Review | road side, straight-on | Hero façade elevation and column rhythm |
+| 10 | `review-hero-facade-oblique.png` | [
](review-hero-facade-oblique.png) | Review | north-west | Body depth and column line standing proud of the mass |
+| 11 | `demo/review-demo-spawn-view.png` | [
](demo/review-demo-spawn-view.png) | Demo | spawn point | Spawn view from the north sidewalk: the hero façade across the road under fixed daytime light |
+| 12 | `demo/review-demo-street-level.png` | [
](demo/review-demo-street-level.png) | Demo | eye height, north side | The façade colonnade and columns, sunlit with cast shadows |
+| 13 | `demo/review-demo-crossing.png` | [
](demo/review-demo-crossing.png) | Demo | along the crosswalk | The designated mid-block crossing at s=130 m (UE X -14956): three continental zebra bars on the asphalt, kerbs flushed to ramps |
+| 14 | `demo/review-demo-north-buildings.png` | [
](demo/review-demo-north-buildings.png) | Demo | across the Blvd | North-side background buildings (TCL, Tussaud's), lit against the sky |
+
## Scene conventions
-- **Floor**: 160 m square, top face at Z 0. The character measures Z 0..83 cm.
+- **Review map** (`/Game/Test/ReviewMap`): 160 m floor, top face at Z 0; the
+ character measures Z 0..83 cm. One warm key light plus sky fill.
- **Cubes**: `Cube_ScaleTest_A` rests on the floor, `Cube_ScaleTest_B` floats at
Z 2 m; both are exactly 1 m — the scale reference.
-- **Lighting (review map)**: one warm key light plus sky fill, neutral exposure.
-- **Lighting (demo map)**: fixed daytime — sun at pitch -50 / yaw 120 (intensity
- 4, warm), sky light 2.6, sky atmosphere, height fog, and a manual-exposure
- post-process volume (min = max brightness 1.0) so a shot cannot wash out or
- crush to black depending on how much sky it frames. Surface colours are
- assigned explicitly in `Tools/ue_build_demo_map.py` (`M_Asphalt`, `M_Concrete`,
- `M_Ground`, `M_RoadPaint`) because Blender's flat diffuse colours do not
- survive the FBX → Unreal import.
-
-## Review-map shots
-
-All ☑ approved 2026-11-07 (re-rendered with the character and cubes restored;
-user visual check passed).
-
-> Naming: shots use their stable `Tools/ue_build_review_map.py` camera name (no
-> index prefix), so adding or reordering cameras never renumbers files or
-> orphans the old ones. Click an image for the full-size PNG.
-
-| File | Preview | View | What it shows |
-| --- | --- | --- | --- |
-| `review-overview.png` | [
](review-overview.png) | 7 m up, NE | Whole review layout: character + both cubes on the floor |
-| `review-character.png` | [
](review-character.png) | eye height, south | MPFB mannequin, idle pose + warm skin; feet meet the plane |
-| `review-scale-cubes.png` | [
](review-scale-cubes.png) | south | Floating vs grounded cube: cast vs contact shadow |
-| `review-player-placement.png` | [
](review-player-placement.png) | spawn | The `AGigLineCharacter` pawn, capsule height and landing |
-| `review-npc-prefab.png` | [
](review-npc-prefab.png) | mid, west | The `AGigLineNPCPerson` prefab: collision capsule + visible MPFB body, feet on Z 0 (**new 2026-11-07**) |
-| `review-ground-contact.png` | [
](review-ground-contact.png) | knee height, feet | Floating/sinking character is obvious here |
-| `review-shadow-compare.png` | [
](review-shadow-compare.png) | low angle | Detached (floating) vs touching (grounded) shadows |
-| `review-hero-portals.png` | [
](review-hero-portals.png) | 8 m, eye height | Three genuine 1.2 m portal recesses with flights and plinth |
-| `review-hero-facade-front.png` | [
](review-hero-facade-front.png) | road side, straight-on | Hero façade elevation and column rhythm |
-| `review-hero-facade-oblique.png` | [
](review-hero-facade-oblique.png) | north-west | Body depth and column line standing proud of the mass |
-
-## Demo-map views
-
-Rendered from `/Game/Hollywood/DemoMap`, the walkable level. Click an image for the full-size PNG.
-
-| File | Preview | Approval | What it shows |
-| --- | --- | --- | --- |
-| `demo/review-demo-spawn-view.png` | [
](demo/review-demo-spawn-view.png) | needs review | Spawn view from the north sidewalk: the hero façade across the road under fixed daytime light |
-| `demo/review-demo-street-level.png` | [
](demo/review-demo-street-level.png) | needs review | Street level from the north sidewalk: the façade colonnade and columns at eye height, now sunlit with cast shadows (was backlit and near-black) |
-| `demo/review-demo-crossing.png` | [
](demo/review-demo-crossing.png) | needs review | The designated mid-block crossing at s=130 m (UE X -14956): three continental zebra bars on the dark asphalt, kerbs flushed to ramps, camera on the north sidewalk looking along the crosswalk |
-| `demo/review-demo-north-buildings.png` | [
](demo/review-demo-north-buildings.png) | needs review | North-side background buildings (TCL, Tussaud's) across the Blvd, lit against the sky |
+- **Demo map** (`/Game/Hollywood/DemoMap`): fixed daytime — sun at pitch −50 /
+ yaw 120 (intensity 4, warm), sky light 2.6, sky atmosphere, height fog, fixed
+ exposure. Surface colours are assigned explicitly in
+ `Tools/ue_build_demo_map.py` (`M_Asphalt`, `M_Concrete`, `M_Ground`,
+ `M_RoadPaint`) because Blender's flat diffuse colours do not survive the
+ FBX → Unreal import.
+- **Lighting is dynamic-only** (`r.AllowStaticLighting=False`, all lights
+ Movable), so no lighting build is ever required.
## What to look for
@@ -79,4 +72,4 @@ Rendered from `/Game/Hollywood/DemoMap`, the walkable level. Click an image for
- Banners and window panels float detached from the colonnade wall (next
modelling pass).
- Between kerb and building line, the walkable surface is the terrain mesh, not
- a modelled pavement.
\ No newline at end of file
+ a modelled pavement.
diff --git a/TODO.md b/TODO.md
index 7061a9d..47817bc 100644
--- a/TODO.md
+++ b/TODO.md
@@ -94,8 +94,8 @@ The MPFB character asset is planned as the NPC template (see `ROADMAP.md`). Keep
- [x] First-person movement, mouse look, and Enhanced Input bindings. Implemented 2026-11-07: `AGigLineCharacter` (C++, 1.75 m capsule, 1.60 m eye camera, 4 m/s walk, mouse look in deg/s, jump) as the default pawn, with five actions and an 11-entry context in `/Game/Input` built by `Tools/ue_create_input_assets.py`. **Not yet confirmed interactively** — launch PIE on `Test/ReviewMap` and walk. Screenshot review pending (`Screenshots/README.md`).
- [~] Collision, reset, and pause functionality. Reset (**R**) and pause (**Escape**, a real game pause that releases the cursor) are implemented in `AGigLineCharacter` with `/Game/Input/IA_Reset` and `IA_Pause`. Collision now exists — terrain, road and sidewalks import as complex-as-simple, so a simple hull cannot ramp over the kerbs. **Not verified by hand**: walk, reset and pause need a human at the keyboard. No pause menu widget yet, only the pause itself.
- [x] Build the walkable demo level: terrain, street, and hero facade assembled into one map with a start point on the north sidewalk, so the demo is something a player can walk rather than a review staging. **Built 2026-11-07** by `Tools/ue_build_demo_map.py` → `/Game/Hollywood/DemoMap`: sun/sky, `Hero_Facade`, six site meshes imported with collision (`Terrain_DEM`, `Road_Hollywood`, both sidewalks and both kerbs), and a `Demo_PlayerStart` on the north sidewalk 20 m back from the frontage. Demo views in `Screenshots/demo/` re-rendered and ☑ approved 2026-11-07.
-- [x] Walkable sidewalks and a designated street crossing. Crossing chosen: mid-block signalised crossing, OSM way 385648319, at 130 m along the block (`Geo/verification/2026-11-06-street-profile.md`). Done 2026-11-07: continental zebra markings (0.5 m bars / 0.5 m gaps, 3 m band) at all three signalised crossings, no collision on the paint; kerbs were already flushed at the crossings. Enablers found on the way: the street surfaces were 100 % down-facing (invisible in engine) — winding flipped; the terrain buried the street — 10.7 m corridor cut around the centreline (sidewalks cover the transition, walk-check 0 holes); LFS-lockable `.blend`/`.umap` check out read-only — builders now chmod before saving and fail loudly. Screenshot ☑ approved 2026-11-07 (`Screenshots/demo/review-demo-crossing`); the corridor renders near-black in shadow — that is the still-open **Fixed daytime lighting** item, not the crossing.
-- [-] Fixed daytime lighting and basic ambience. **Implemented 2026-11-07**, pending screenshot approval. Demo map now has a fixed daytime rig in `Tools/ue_build_demo_map.py`: sun pitch −50 / yaw 120 (intensity 4, warm 255/245/230, atmosphere sun light), sky light 2.6 with real-time capture, sky atmosphere, height fog (density 0.008), and a manual-exposure post-process volume (min = max brightness 1.0) so a shot cannot wash out or crush to black. Two root causes found while doing it: (a) **Blender flat diffuse colours do not survive the FBX→UE import** — every site mesh arrived white and the terrain arrived with `WorldGridMaterial`, which is what actually made the scene look blown out; explicit `M_Asphalt` / `M_Concrete` / `M_Ground` / `M_RoadPaint` materials are now created and assigned in the demo builder. (b) only **one of the three crossings** was reaching the game: each band was its own object and Blender renamed the duplicates `.001`/`.002`, which site assembly skips; all bands are now one `Crossing_Markings` object. Demo cameras also fixed: street-level sat inside the façade body, and the crossing camera aimed at the wrong crossing (s=36.6 instead of the designated s=130.1 at UE X −14956).
+- [x] Walkable sidewalks and a designated street crossing. Crossing chosen: mid-block signalised crossing, OSM way 385648319, at 130 m along the block (`Geo/verification/2026-11-06-street-profile.md`). Done 2026-11-07: continental zebra markings (0.5 m bars / 0.5 m gaps, 3 m band) at all three signalised crossings, no collision on the paint; kerbs were already flushed at the crossings. Enablers found on the way: the street surfaces were 100 % down-facing (invisible in engine) — winding flipped; the terrain buried the street — 10.7 m corridor cut around the centreline (sidewalks cover the transition, walk-check 0 holes); LFS-lockable `.blend`/`.umap` check out read-only — builders now chmod before saving and fail loudly. Screenshot ☑ approved 2026-11-07 (`Screenshots/demo/review-demo-crossing`); the corridor renders near-black in shadow — that was the **Fixed daytime lighting** item, now also done.
+- [x] Fixed daytime lighting and basic ambience. **Done 2026-11-07, screenshots approved.** Demo map now has a fixed daytime rig in `Tools/ue_build_demo_map.py`: sun pitch −50 / yaw 120 (intensity 4, warm 255/245/230, atmosphere sun light), sky light 2.6 with real-time capture, sky atmosphere, height fog (density 0.008), and a manual-exposure post-process volume (min = max brightness 1.0) so a shot cannot wash out or crush to black. Two root causes found while doing it: (a) **Blender flat diffuse colours do not survive the FBX→UE import** — every site mesh arrived white and the terrain arrived with `WorldGridMaterial`, which is what actually made the scene look blown out; explicit `M_Asphalt` / `M_Concrete` / `M_Ground` / `M_RoadPaint` materials are now created and assigned in the demo builder. (b) only **one of the three crossings** was reaching the game: each band was its own object and Blender renamed the duplicates `.001`/`.002`, which site assembly skips; all bands are now one `Crossing_Markings` object. Demo cameras also fixed: street-level sat inside the façade body, and the crossing camera aimed at the wrong crossing (s=36.6 instead of the designated s=130.1 at UE X −14956). Lighting is dynamic-only (`r.AllowStaticLighting=False`, all lights Movable) so the editor's "LIGHTING NEEDS TO BE REBUILT" warning no longer fires. All four demo views approved by the owner.
- [ ] Geographic attribution display ("© OpenStreetMap contributors" + license link).
### Repository publication