ComponentsPricing
Pricing
sectionA pricing tier card — plan, price, feature list and one primary action.
Plans
Pick what fits your team.
Save 20% with annual billing
Starter
$0/mo
- 3 projects
- 10K monthly tokens
- Community support
Popular
Pro
$19/mo
- Unlimited projects
- 500K monthly tokens
- Priority support
- Advanced exports
Team
$49/mo
- Everything in Pro
- Collaboration
- SSO
- SLA
Composes: Card · Button · Badges & pills
Recipe CSS
This is the exact CSS your kit ships for Pricing — token-driven, so it re-themes with every knob. Get it (and the rest) from the configurator's Use kit panel.
/* === Pricing (#12) === */
.pricing {
/* Self-responsive tier row: auto-fit lays the tiers side-by-side (3-up, the
canonical pricing layout) whenever the card is wide enough, and falls back
to stacked 1-up in a narrow card — no media query, adapts to the card span. */
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
align-items: start;
gap: var(--k-s-8);
margin: calc(var(--k-s-4) * -1) 0;
}
.pricing__tier {
background: var(--k-surface-2);
border: var(--k-hairline, 1px solid var(--k-border));
border-radius: var(--k-radius-md);
padding: var(--k-s-12);
display: flex;
flex-direction: column;
gap: var(--k-s-8);
position: relative;
}
.pricing__tier--featured {
background: var(--k-surface);
border: 2px solid var(--k-primary);
box-shadow: var(--k-shadow-md);
}
.pricing__badge {
position: absolute;
top: -8px;
right: 12px;
padding: var(--k-s-2) var(--k-s-8);
background: var(--k-primary);
color: var(--k-primary-fg);
font-size: var(--k-type-caption);
font-weight: var(--k-weight-bold);
letter-spacing: var(--k-track-eyebrow);
/* Marketing tag — follows box radius like .badge (text chip, not a count). */
border-radius: var(--k-radius-md);
}
.pricing__name {
font-size: var(--k-type-eyebrow);
font-weight: var(--k-weight-semibold);
letter-spacing: var(--k-track-eyebrow);
text-transform: uppercase;
color: var(--k-fg-muted);
}
.pricing__price {
display: flex;
align-items: baseline;
gap: var(--k-s-4);
}
.pricing__amount {
font-size: var(--k-type-h2);
font-weight: var(--k-weight-semibold);
font-family: var(--k-font-display);
font-variant-numeric: tabular-nums;
color: var(--k-fg);
letter-spacing: -0.02em;
}
.pricing__period {
font-size: var(--k-type-eyebrow);
color: var(--k-fg-muted);
}
.pricing__feats {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: var(--k-s-4);
}
.pricing__feats li {
font-size: var(--k-type-small);
color: var(--k-fg);
padding-left: var(--k-s-16);
position: relative;
}
.pricing__feats li::before {
content: '✓';
position: absolute;
left: 0;
color: var(--k-success);
font-weight: var(--k-weight-semibold);
}
/* Tagline + CTA — the parts the a2ui test wanted. The CTA pins to the bottom of
the (flex-column) tier so every plan's button aligns across the row, and goes
full-width. */
.pricing__tagline { font-size: var(--k-type-small); color: var(--k-fg-muted); }
.pricing__cta { margin-top: auto; }
.pricing__cta .btn { width: 100%; }
/* StatGroup metric strip → unified into the .stat-tile family as
* .stat-tile-strip / .stat-tile-strip__cell (defined with the stat-tile
* block above; cells reuse .stat-tile__value / .stat-tile__label). */