Choice Card
One way into a task, offered beside the others. An icon, a name, a sentence of what you get, and a foot saying what it costs you and what happens next.
When to Use
ws_listing_card. A choice card promises that clicking it starts something.
The row
Three is the working width. At most one card is featured, and it carries the badge that says why.
Variants
Two columns
Pass columns when there are only two routes, so the pair fills the width instead of leaving a hole.
Buttons, not links
Leave href off and the card renders as a real <button>. Use that when the choice opens something on the page rather than navigating.
Bare
Everything but the title and sentence is optional. Drop the time when the route has no honest estimate: an invented number is worse than none.
Usage
<?= ws_choice_cards([
[
'icon' => 'auto_awesome',
'badge' => 'Recommended',
'featured' => true,
'title' => 'Generate with AI',
'desc' => 'Describe the outcome you need. You get a full agenda to edit.',
'time' => '~30 seconds',
'cta' => 'Generate',
'href' => '/app/?view=plan&step=build',
],
// …
]) ?>
Geometry comes from --card-padding and --card-radius, the same tokens every other card on the platform reads, so the family moves together. check-drift.php Check 4 fails any card rule that sets padding or radius with a literal instead.