Verbs that travel with every HasInteractive-bearing host
(Avatar today, future cockpit-bearing classes tomorrow). The
style verb belongs here because the overlay it edits IS the
client state on this mixin; co-locating verb + schema keeps
the wiring local.
Empty portraitUrl sentinel — "no image; client renders a
generated placeholder" (initials/icon from the name). We don't
mint a fake asset URL server-side; the empty string is the
honest "default" the client interprets.
Client-state schema. Declares every persisted UI key + its default. One flat array — no chain walker, no per-feature mixin layer. Add an entry to ship a new key.
Scope rule: only put a key here if it's substrate-level (meaningful for every HasInteractive-bearing thing). If a key is owned by a narrower mixin, the right move is to promote a small registry / walker — but defer that until the array genuinely outgrows a single file.