Zetta v0.10

Components · Forms & selection

Radio

A single-choice control — a 20px circle with a 2px border that fills with a brand dot when selected. Built on a real radio input for free grouping and keyboard support.

Preview

Light
Dark
Accessibility

Spec

Values and token references straight from the Zetta spec.

radio
backgroundColor
transparent
borderColor
{colors.border-strong}
borderWidth
2px
borderRadius
{rounded.full}
size
20px
cursor
pointer
padding
12px
radio-hover
borderColor
{colors.border-strong}
radio-focus
outline
2px solid {colors.border-focus}
outlineOffset
2px
radio-checked
borderColor
{colors.brand}
indicatorColor
{colors.brand}
indicatorSize
10px
radio-disabled
borderColor
{colors.disabled-border}
cursor
not-allowed
radio-checked-disabled
borderColor
{colors.disabled-border}
indicatorColor
{colors.disabled-text}

Build with the skill

No package to install — hand this to your AI to generate the radio in your stack.

Prompt for your AI
Implement the Zetta "Radio" component in this project's stack using the zetta-design-md skill.

- Apply the `radio` spec from the skill (variants: unchecked, checked, disabled).
- Use this project's own component conventions and framework idioms.
- Reference the Zetta design tokens (CSS variables) for every color, radius, and shadow — never hardcode values.
- Implement all states (hover, focus, active, disabled, and invalid where applicable) with a visible 2px focus ring.
- Honor the Zetta guardrails (brand never shifts hue, shadows for overlays only, etc.) and verify in Light, Dark, and Accessibility.

Anatomy & rules

  • 20px circle, 2px border, full radius; checked shows a 10px brand dot and a brand border. 12px padding expands the hit area toward 44px.
  • Group options by sharing the input name; focus shows a 2px ring.

Accessibility

  • Wrap a group in <fieldset> with a <legend>, and give every option a <label>.