Variant 01
Icons
Add an icon before or after the label. Use an arrow for direction, and keep the label: the icon supports the text, it does not replace it.
View content
Components
Components / atoms
Buttons start actions. The primary, secondary and tertiary variants show which action matters most.
Usage
Use one primary action for the main decision on a surface. Pair it with secondary actions for alternatives and tertiary actions for low-emphasis paths.
02 / examples
Variant 01
Add an icon before or after the label. Use an arrow for direction, and keep the label: the icon supports the text, it does not replace it.
View content
Variant 02
Primary, secondary, and tertiary actions work together.
View content
Variant 03
Hover, active, disabled, and loading states are explicit modes.
View content
03 / contract
A button starts an action, such as saving, sending or opening something. It comes in three variants that show how important an action is: primary for the main action on a surface, secondary for alternatives, and tertiary for low-emphasis actions. A button can carry an icon before or after its label, and the icon-only version always needs a text label for assistive technology.
Every button can be shown in several states: default, hover, active, focus, disabled and loading. The loading state prevents repeated clicks and tells assistive technology that the button is busy. The component renders a native HTML button, so keyboard and screen reader behaviour works without extra code.
04 / accessibility
The focus outline is the same two-tone ring used across the system, so it is visible on any background, and the focus state in the documentation shows it without needing a keyboard. Disabled and loading buttons are never shown by colour alone: the label, the icon and the reduced emphasis change as well.
Every button has a text label so that its purpose is clear to everyone, and a button that shows only an icon must have an accessible name, which the icon button requires. When an action takes the person to another page instead of changing something on the current one, a link should be used instead of a button.