Indirection-only appearance switch — when dedup wins

Both the default and the selected appearance's paint property blocks already exist in the properties buffer — the dedup pool populated them at parse time. Toggling the Museum is a single indirection-table write; the properties buffer is never touched.

Café
Park
Museum
Station
feature 0 → block
0
feature 1 → block
0
feature 2 → block
0
feature 3 → block
0
block 0 · default
text-color: #4a78c9
block 1 · dimmed
text-color: #8a91a3
block 2 · selected
text-color: #ff5722
indirection table written (cumulative)
0 bytes
properties buffer written (cumulative)
0 bytes
Each toggle re-evaluates the Museum's appearance, gets a paint block, and asks the dedup pool whether that block already exists. It does (block 0 or block 2), so the engine just repoints indirection[2] (a single 4-byte write) and the properties buffer is left alone. This is the cheapest update path the UBO model supports today; the "representation index" work described in the Epilogue extends it so every paint-only switch lands here by construction.