A ViewComponent should define a fixed set of variants (sizes, colors) but let callers append additional CSS classes and data attributes to the component's defaults, rather than growing a new variant or forking a component every time a caller needs a tweak. Keeps components flexible without combinatorial explosion. Same principle applies to Stimulus data attributes.