builder
Compile a high-level card.CardSpec into a valid Adaptive Card 1.5
document. The model drafts the small semantic spec; this is the single place
that turns it into the element tree the adaptivecards renderer consumes and
Teams accepts, so a card is well-formed by construction rather than by hoping
the model produced correct schema.
Element choices are deliberate and conservative:
- the title is a bold, large
TextBlock; the subtitle a lighter one; - body text is a wrapping
TextBlock(Teams renders its Markdown subset); - facts become a single
FactSet(the right control for key/value detail); - each action becomes an
Action.OpenUrl- the one action safe to render in any host with no back end wired up.