Alfred, the heads have landed (e9983190b), traced off the art rather than estimated.

**Said plainly:** there was already ONE head mesh, the shared body's. What drifted was a size AND a width that each voice set on the head bone, five shapes on one mesh. The width lever is now gone from the build, the faces and the viewer.

**The one head's shape is traced off the colleague**, the only voice whose whole head shows: 1.11 times as wide and through as before, the same height. It lives in `src/web/src/domain/toonBody.json`, which the build and faces.py both read, so they cannot drift apart again. Each voice keeps only a head size and a lift (its neck). The drawings do not draw one head size against their bodies: in metres they range from 0.77 m wide (butler) to 1.02 m (colleague). So one size for all cannot match them, and the per-voice size is the one skeleton difference left on the list.

**Before and after**, width × height of the visible head as fractions of figure height, hats and helmets covering as drawn:

| Voice | Before | After | Drawn |
|---|---|---|---|
| butler | 0.280 × 0.260 | 0.327 × 0.267 | 0.330 × 0.256 |
| coach | 0.351 × 0.207 | 0.377 × 0.259 | 0.375 × 0.269 |
| colleague | 0.506 × 0.438 | 0.502 × 0.397 | 0.505 × 0.387 |
| homie | 0.496 × 0.351 | 0.468 × 0.292 | 0.456 × 0.311 |
| squire | 0.317 × 0.281 | 0.356 × 0.300 | 0.358 × 0.303 |

Every head is now wider for its height, as Sir Jesse asked. Remaining misses: the butler 0.011 too tall, the coach 0.010 too short, the colleague 0.010 too tall, and the homie 0.012 too wide and 0.019 too short. The homie's is the only one the shared head cannot close: his drawn head is 1.47 times as wide as tall, against the colleague's 1.30.

**What was hiding under the heads, each fixed at its source:**
- **Coach's cap:** it sat level and hid his forehead. It is now cocked 20 degrees, brim up to the right, as drawn. `cap()` takes a roll.
- **Butler's bowler:** it sat 0.05 m too high and showed too much dome. It is lowered.
- **Homie:** his head was sunk into the hoodie, hiding his chin, and rolled 11 degrees. It is lifted out and rolled 6. His backwards cap's opening sat below the cap's edge, on his forehead, and joined his screen; it now sits in the cap above its strap.
- **Squire:** his screen was converted at a 2.225 m figure, but he stands 2.31 m in his helmet. It is corrected.

**Screens, as seen, against drawn** (they kept their fixed size through all of this):

| Voice | Rendered | Drawn |
|---|---|---|
| butler | 0.239 × 0.163 | 0.235 × 0.164 |
| coach | 0.261 × 0.168 | 0.261 × 0.170 |
| homie | 0.305 × 0.210 | 0.313 × 0.205 |
| squire | 0.236 × 0.137 | 0.238 × 0.137 |
| colleague lenses | 0.144 × 0.121 and 0.125 × 0.131 | 0.134 × 0.123 and 0.130 × 0.117 |

The colleague's lenses wait for her pass.

**Overlap:** butler 0.817, coach 0.821, colleague 0.856 (from 0.838), homie 0.864 (from 0.854), squire 0.702.

**Also in this commit:**
- New slots for hair, shoulders, arms, hips and over_arm (a towel over the forearm), so every slot now lists the bones its pieces may hang on.
- The asset catalogue, drafted as `toonAssets.json`. It is not read by anything yet; the splits wire it in.
- The stale `colleague_laptop.glb`, built by nothing and worn by no one, is removed.

**Next, without stopping:** the three splits, with each piece's slot, its sleeves and what it hides declared in the catalogue and checked by the build. Then the squire's reach.

Preview: http://127.0.0.1:8431/toon-preview/index.html
Overlays: http://127.0.0.1:8431/toon-preview/rest/overlays.png
