Ninety degrees.
Most of what people recognise as “Alix” is the corner. The base radius is 0, so buttons, cards, inputs, media, every surface meets at a hard 90°. Sharp reads as architectural, engineered, exact; it is the system’s most defining and most protected decision. Roundness is the rare exception, allowed only where the round shape is the meaning.
- Base radius
- 0px
- Corner
- 90° · sharp
- Exception
- rounded-full where meaningful
- Separator
- 1px hairline
Radius zero
Every default surface uses a true right angle: radius 0, with no arc. Two edges meet at a point. This is what makes the system feel cut rather than moulded.
One knob
There isn’t a hand-set radius on each component. The whole scale derives from a single token, --radius, by simple arithmetic, so the system’s corner character lives in one place. Today --radius is 0, which collapses sm/md/lg to 0 and leaves xl as reserved implementation headroom at 4px. That is not a branded default surface. Move that one value and every corner in the system moves with it.
The one exception
Roundness is allowed in exactly one situation: when the round shape is itself the meaning. A pill reads as a status or a filter, not a button. An avatar is round because faces are. A dot is a marker. These use rounded-full, the only active curve in a sharp system, because rounding here communicates a category, not a softening. Nothing in between, such as a gently rounded card, is permitted.
Borders do the work
The 1px border carries the structural load. It defines boundaries, divides content, and communicates state. Keep it hairline-thin; weight comes from contrast and spacing, not a thick rule.
Boundary
border-borderThe default edge of cards, inputs, and tables. Use one consistent hairline instead of a shadow.
Structure
border-t · border-b · border-lUse one edge to divide without drawing a box: list rows, table cells, or page sections.
State
border-ring · border-l-success · border-destructiveA coloured border communicates focus, status, or error. State sits on the border, never on a corner radius.
Nested corners
Nested corners must stay concentric: inner radius equals outer radius minus the padding between them. In Alix, 0 inside 0 keeps a nested thumbnail, inset, or selected state as sharp as its container. Never round an inner element independently to soften it.
Misuse
Shape goes wrong by reaching for a radius the system doesn’t have. Sharpness is the brand; protect it.