Theme-backed IMarkupStyleResolver exposing the curated framework semantic markup
tokens plus, optionally, an app's registered custom semantic styles. Each framework token maps
to a ThemeStyle and a channel mode; colours come from
Resolve(ThemeStyle), so the same markup renders differently per theme. Only
the curated subset is exposed — table-only ink/surface tokens are intentionally absent. Custom
styles (CliCustomStyle) resolve through their base ThemeStyle with
optional family/theme overrides; their names can never collide with framework tokens (the custom
style registry rejects such names), so framework tokens are matched first.
Resolves an application-defined raw colour alias (e.g. BrandOrange) to a concrete
CliColor. Used by CliMarkupParser in raw colour positions only —
foreground, and the background after on. Colour aliases are a different concept from
semantic styles (IMarkupStyleResolver): an alias is just a name for a colour and is
never a theme role. Keeping this an abstraction lets the parser stay pure — it depends on the
resolver, never on a global alias table or console state.
Resolves a curated semantic markup token (e.g. Accent, Alert) to concrete
foreground/background colours. Keeps CliMarkupParser pure: the parser depends
only on this abstraction, never on a theme or global console state.