Skip to main content

What it governs

Corner rounding on every surface: controls, cards, dialogs, chips, avatars. Five tokens.

Vocabulary

The terms used on this page are descriptive rather than decided — the naming specification does not cover the radius scale (see Open issues).

The scale

3px is a deliberate choice, not a default. It is one of the few structural values Titan sets rather than inherits, which makes it a decision worth preserving — a component that rounds to 4px is not making a small refinement, it is opting out of the system.
radius-pill uses 100px rather than a percentage deliberately. A large fixed radius clamps to exactly half the height on any element shorter than 200px, producing true semicircular ends at every control height. 50% on a non-square element produces an ellipse instead.

Choosing a token

Nested radii do not match. An element inside a rounded container needs a smaller radius, not the same one. Equal radii on concentric corners make the inner corner look like it bulges outward — the visible gap between the two curves narrows toward the corner. radius-sm inside radius-base is the intended pairing.

Token reference

Constraints

Accessibility

Radius carries no direct accessibility requirement — it is not a contrast, target-size, or semantic property. Two indirect effects:
  • Radius reduces effective hit area at the corners. Negligible at 3px; real at radius-pill on a small control, where the corners of the bounding box are outside the visible shape. Keep the target at the full control height rather than relying on the visible pill.
  • Shape is a weak but real differentiator for users who cannot rely on color. A pill chip and a square button being visually distinct is a small assist. It is not sufficient on its own and never substitutes for a label — see TITAN-COLOR-03.

Known issues

Radius: open issues

Divergences, open decisions, and undocumented gaps for Radius.
10 core components consume this foundation — derived from token usage in components/core/src/components, not assumed: Badge · Button · CircularProgress · DatePicker · Dropzone · Progress · Select · Slider · TextField · TextFieldWithSearchIcon

Why it works this way

Five values, and three of them are special cases. radius-sm, radius-base, and radius-md are a scale; radius-pill and radius-circle are shapes. That split is what keeps the scale small — a system that expresses “pill” as “radius-9” ends up with a dozen steps nobody can choose between. The default is small. 3px reads as finished rather than as styled. Titan’s surfaces are dense, data-heavy, and numerous — a 12px radius on every cell, chip, and control in a table produces visual noise that competes with the data. Rounding is meant to soften an edge, not to be noticed.
Last modified on September 2, 2026