cell_names maps positional cells onto field names. bar uses ("label", "value"); card uses ("value", "label", "note"), because that is the order a reader scans them.
Never emit an inline style except a computed width or height. Colour belongs in the stylesheet.
Escape every author string with escape_attr.
Raise VisualError for anything the author can fix. It becomes a visible card — see errors.