The property listing comes from toJSON() — the style's own serialization of what is
directly set — rather than walking each sub-object's API, so the report stays complete as
the style model grows. No direct properties means the style is entirely inherited; the
report says so instead of enumerating absence (the closed-world contract).
Renders a style report: the named style it derives from, plus its direct overrides.