Main Button
The Button is one of the most important interactive elements in the design system. It enables users to take action — for example, saving changes, submitting a form, or moving forward in a process.
There are two main ways a Primary Button can appear:
- As a Button: used when the action happens within the same page (e.g. opening a modal, submitting data).
- As a Link styled as a Button: used when the action takes the user to another page or an external website.
The Tertiary Button includes an optional underline that can be toggled on or off through the boolean property “Underline”. This ensures consistent behaviour and appearance while simplifying maintenance and documentation across Figma and development.
When to use it (and when not to)
Section titled “When to use it (and when not to)”- Use a Button when the action happens on the same page (save, add, continue, open).
- Use a Link (styled as a button) when the user needs to go to another page or website.
- Only use one Primary Button per screen or section, so it’s clear what the main action is.
- Never use an icon-only button — there must always be text so that everyone understands it.
Quick summary of accessibility & consistency
Section titled “Quick summary of accessibility & consistency”- Buttons can be used with a keyboard, always show a visible focus, and meet accessibility contrast requirements so text is easy to read.
- The touch area is always at least 44×44px, so it’s easy to press on mobile.
- Semantics are correct: buttons are for actions, links are for navigation. This makes them predictable and clear for everyone, including people using assistive technologies.
- Buttons can be restyled to match the look and feel of each brand without changing their structure. In Figma, this is done by switching modes, so the same component automatically takes on the right colours, typography, and styles for each brand.
- Design tokens keep these styles consistent across brands, devices, and screens.
Buttons remain consistent across all breakpoints. Their design, size, and interaction states are the same on every device — only layout spacing and container alignment adapt to ensure responsiveness.
Properties
Section titled “Properties”Type : Primary by State
Section titled “Type : Primary by State”Rested
buttons-main-button-primary-neutral-rested-fill-color#00244dbuttons-main-button-primary-neutral-rested-fill-color#282830buttons-main-button-primary-neutral-rested-border-color#282830buttons-main-button-primary-neutral-rested-border-color#282830buttons-corner-radius1000pxbuttons-corner-radius0pxbuttons-main-button-primary-neutral-rested-foreground-color#ffffffbuttons-main-button-primary-neutral-rested-foreground-color#ffffffHover
buttons-main-button-primary-neutral-hover-fill-color#001a38buttons-main-button-primary-neutral-hover-fill-color#6c7073buttons-main-button-primary-neutral-hover-border-color#15151bbuttons-main-button-primary-neutral-hover-border-color#6c7073buttons-corner-radius1000pxbuttons-corner-radius0pxbuttons-main-button-primary-neutral-hover-foreground-color#ffffffbuttons-main-button-primary-neutral-hover-foreground-color#ffffffActive
buttons-main-button-primary-neutral-active-fill-color#4d4d4dbuttons-main-button-primary-neutral-active-fill-color#000000buttons-main-button-primary-neutral-active-border-color#000000buttons-main-button-primary-neutral-active-border-color#15151bbuttons-corner-radius1000pxbuttons-corner-radius0pxbuttons-main-button-primary-neutral-rested-foreground-color#ffffffbuttons-main-button-primary-neutral-rested-foreground-color#ffffffDisabled
buttons-main-button-primary-neutral-disabled-fill-color#e5e3e1buttons-main-button-primary-neutral-disabled-fill-color#a8aaacbuttons-main-button-primary-neutral-disabled-border-color#999999buttons-main-button-primary-neutral-disabled-border-color#a8aaacbuttons-corner-radius1000pxbuttons-corner-radius0pxbuttons-main-button-primary-neutral-disabled-foreground-color#999999buttons-main-button-primary-neutral-disabled-foreground-color#15151bFocus
color-border-focus-neutral-default#0072f0color-border-focus-neutral-default#0072f0Type : Secondary by State
Section titled “Type : Secondary by State”Rested
buttons-main-button-secondary-neutral-rested-border-color#c57046buttons-main-button-secondary-neutral-rested-border-color#a8aaacbuttons-corner-radius1000pxbuttons-corner-radius0pxbuttons-main-button-secondary-neutral-rested-foreground-color#000000buttons-main-button-secondary-neutral-rested-foreground-color#15151bHover
buttons-main-button-secondary-neutral-hover-fill-colorrgba(255, 255, 255, 0.45)buttons-main-button-secondary-neutral-hover-fill-color#e4e4e4buttons-main-button-secondary-neutral-hover-foreground-color#000000buttons-main-button-secondary-neutral-hover-foreground-color#15151bbuttons-main-button-secondary-neutral-hover-foreground-color#000000buttons-main-button-secondary-neutral-hover-foreground-color#15151bActive
buttons-main-button-secondary-neutral-active-fill-colorrgba(255, 255, 255, 0.45)buttons-main-button-secondary-neutral-active-fill-color#ffffffbuttons-main-button-secondary-neutral-active-border-color#000000buttons-main-button-secondary-neutral-active-border-color#15151bbuttons-main-button-secondary-neutral-active-foreground-color#000000buttons-main-button-secondary-neutral-active-foreground-color#15151bDisabled
buttons-main-button-secondary-neutral-disabled-border-color#999999buttons-main-button-secondary-neutral-disabled-border-color#6c7073buttons-main-button-secondary-neutral-disabled-foreground-color#999999buttons-main-button-secondary-neutral-disabled-foreground-color#6c7073Focus
color-border-focus-neutral-default#0072f0color-border-focus-neutral-default#0072f0Type : Tertiary by State
Section titled “Type : Tertiary by State”Rested
buttons-main-button-tertiary-neutral-rested-border-color#282830buttons-main-button-tertiary-neutral-rested-border-color#282830Hover
buttons-main-button-tertiary-neutral-hover-border-color#999999buttons-main-button-tertiary-neutral-hover-border-color#6c7073Active
buttons-main-button-tertiary-neutral-active-border-color#000000buttons-main-button-tertiary-neutral-active-border-color#15151bbuttons-main-button-tertiary-neutral-rested-foreground-color#000000buttons-main-button-tertiary-neutral-rested-foreground-color#282830Disabled
buttons-main-button-tertiary-neutral-disabled-border-color#999999buttons-main-button-tertiary-neutral-disabled-border-color#6c7073buttons-main-button-tertiary-neutral-disabled-foreground-color#999999buttons-main-button-tertiary-neutral-disabled-foreground-color#6c7073Focus
color-border-focus-neutral-default#0072f0color-border-focus-neutral-default#0072f0Large (LG)
Medium (MD)
Small (SM)
We define three sizes for this component: Large (LG), Medium (MD) and Small (SM). Each size has a specific role and should be applied consistently across the system.
- Large (LG): Most frequently used size. Applied across the majority of modules and layouts. Recommended as the default choice for consistency, unless there is a clear reason to use another size.
- Medium (MD): Currently no active use cases identified. Retained in the system to avoid breaking existing designs where it might have been applied. Future audits may redefine or consolidate this size depending on real usage.
- Small (SM): Used in specific contexts such as secondary navigation bars. Helps reduce visual weight when multiple elements compete for space. Must not be used for primary actions or as the default size. Only apply it when hierarchy and space require it.
Contrast
Section titled “Contrast”Neutral (False)
buttons-main-button-primary-neutral-rested-fill-color#00244dbuttons-main-button-primary-neutral-rested-fill-color#282830buttons-main-button-primary-neutral-rested-border-color#282830buttons-main-button-primary-neutral-rested-border-color#282830buttons-main-button-primary-neutral-rested-foreground-color#ffffffbuttons-main-button-primary-neutral-rested-foreground-color#ffffffContrast (True)
buttons-main-button-primary-contrast-rested-fill-color#f5f5f5buttons-main-button-primary-contrast-rested-fill-color#ffffffbuttons-main-button-primary-contrast-rested-border-color#ffffffbuttons-main-button-primary-contrast-rested-border-color#ffffffbuttons-main-button-primary-contrast-rested-foreground-color#000000buttons-main-button-primary-contrast-rested-foreground-color#15151bBoolean Properties
Section titled “Boolean Properties”Has icon right
Has icon left
Has border
Styling
Section titled “Styling”Colors
Section titled “Colors”| Name | Applied as | Applied to |
|---|---|---|
buttons-main-button-primary-neutral-rested-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-rested-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-rested-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-rested-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-rested-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-rested-foreground-color | Text color | Label |
buttons-main-button-primary-contrast-rested-fill-color | Background color | Button-Main |
buttons-main-button-primary-contrast-rested-fill-color | Background color | Button-Main |
buttons-main-button-primary-contrast-rested-border-color | Border color | Button-Main |
buttons-main-button-primary-contrast-rested-border-color | Border color | Button-Main |
buttons-main-button-primary-contrast-rested-foreground-color | Text color | Label |
buttons-main-button-primary-contrast-rested-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-hover-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-hover-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-hover-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-hover-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-hover-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-hover-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-active-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-active-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-active-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-active-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-active-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-active-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-disabled-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-disabled-fill-color | Background color | Button-Main |
buttons-main-button-primary-neutral-disabled-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-disabled-border-color | Border color | Button-Main |
buttons-main-button-primary-neutral-disabled-foreground-color | Text color | Label |
buttons-main-button-primary-neutral-disabled-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-rested-border-color | Border color | Button-Main |
buttons-main-button-secondary-neutral-rested-border-color | Border color | Button-Main |
buttons-main-button-secondary-neutral-rested-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-rested-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-hover-fill-color | Background color | Button-Main |
buttons-main-button-secondary-neutral-hover-fill-color | Background color | Button-Main |
buttons-main-button-secondary-neutral-hover-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-hover-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-active-fill-color | Background color | Button-Main |
buttons-main-button-secondary-neutral-active-fill-color | Background color | Button-Main |
buttons-main-button-secondary-neutral-active-border-color | Border color | Button-Main |
buttons-main-button-secondary-neutral-active-border-color | Border color | Button-Main |
buttons-main-button-secondary-neutral-active-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-active-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-disabled-border-color | Border color | Button-Main |
buttons-main-button-secondary-neutral-disabled-border-color | Border color | Button-Main |
buttons-main-button-secondary-neutral-disabled-foreground-color | Text color | Label |
buttons-main-button-secondary-neutral-disabled-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-rested-border-color | Border color | border |
buttons-main-button-tertiary-neutral-rested-border-color | Border color | border |
buttons-main-button-tertiary-neutral-rested-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-rested-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-hover-border-color | Border color | border |
buttons-main-button-tertiary-neutral-hover-border-color | Border color | border |
buttons-main-button-tertiary-neutral-hover-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-hover-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-active-border-color | Border color | border |
buttons-main-button-tertiary-neutral-active-border-color | Border color | border |
buttons-main-button-tertiary-neutral-active-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-active-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-disabled-border-color | Border color | border |
buttons-main-button-tertiary-neutral-disabled-border-color | Border color | border |
buttons-main-button-tertiary-neutral-disabled-foreground-color | Text color | Label |
buttons-main-button-tertiary-neutral-disabled-foreground-color | Text color | Label |
color-border-focus-neutral-default | Border color | Button-Main (Focus) |
color-border-focus-neutral-default | Border color | Button-Main (Focus) |
buttons-corner-radius | Border radius | Button-Main |
buttons-corner-radius | Border radius | Button-Main |
Spacing
Section titled “Spacing”| Name | Applied as | Applied to |
|---|---|---|
buttons-lg-content-gap | Item spacing | Button-Main |
buttons-lg-content-gap | Item spacing | Button-Main |
buttons-lg-spacing-horizontal | Padding left / right | Button-Main |
buttons-lg-spacing-horizontal | Padding left / right | Button-Main |
buttons-lg-spacing-vertical | Padding top / bottom | Button-Main |
buttons-lg-spacing-vertical | Padding top / bottom | Button-Main |
buttons-md-content-gap | Item spacing | Button-Main |
buttons-md-content-gap | Item spacing | Button-Main |
buttons-md-spacing-horizontal | Padding left / right | Button-Main |
buttons-md-spacing-horizontal | Padding left / right | Button-Main |
buttons-md-spacing-vertical | Padding top / bottom | Button-Main |
buttons-md-spacing-vertical | Padding top / bottom | Button-Main |
buttons-sm-content-gap | Item spacing | Button-Main |
buttons-sm-content-gap | Item spacing | Button-Main |
buttons-sm-spacing-horizontal | Padding left / right | Button-Main |
buttons-sm-spacing-horizontal | Padding left / right | Button-Main |
buttons-sm-spacing-vertical | Padding top / bottom | Button-Main |
buttons-sm-spacing-vertical | Padding top / bottom | Button-Main |
Text Styles
Section titled “Text Styles”| Name | Applied as | Applied to |
|---|---|---|
Lorem Ipsum
buttons-sm-font-size | Text style | Button Label |
Lorem Ipsum
buttons-sm-font-size | Text style | Button Label |
Lorem Ipsum
buttons-md-font-size | Text style | Button Label |
Lorem Ipsum
buttons-md-font-size | Text style | Button Label |
Lorem Ipsum
buttons-lg-font-size | Text style | Button Label |
Lorem Ipsum
buttons-lg-font-size | Text style | Button Label |
Placement and hierarchy
Section titled “Placement and hierarchy”- There should only ever be one Primary Button visible within a page or container. This keeps the main action clear and avoids competing calls to action.
- Place the Primary Button where users naturally expect to find the next step — for example, at the bottom right of a form, in the footer of a card, or as a sticky action in a header.
- Secondary and Tertiary Buttons must always be positioned in relation to the Primary. They must not compete visually. Place them to the left of, or below, the Primary Button, or move them into a contextual menu if space is limited.
- Ensure sufficient spacing between buttons to prevent accidental clicks or taps. Button height and width must always follow design tokens for consistency across breakpoints.
- Use contrast, size and weight to make sure the Primary Button stands out as the most important action on the screen.
Accessibility
Section titled “Accessibility”To ensure that all button variants meet accessibility standards across platforms, follow the implementation checklist below. These recommendations align with WCAG 2.1 AA, support keyboard navigation, and are compatible with assistive technologies.
- All button states (rested, hover, active, disabled, focus) must maintain accessible contrast in both light and dark background contexts.
- Focus styles must remain visible and meet WCAG AA contrast requirements across all supported surfaces. Focus should be clearly distinguishable from hover. Use a high-contrast outline or border (e.g. #0072F0 against adjacent backgrounds).
- Hover, focus and pressed states must be clearly differentiated using more than colour alone. Examples: colour change plus border or shadow; icon or text emphasis.
- All buttons must show a visible focus style (not just a colour change) on keyboard navigation. Never remove the browser’s default outline unless replaced with an accessible alternative.
- Disabled buttons must not be focusable and must not trigger actions. Maintain sufficient visual contrast for recognition (ideally ≥ 3:1, or provide a clear visual separation).
Minimum touch area
Section titled “Minimum touch area”- Absolute minimum: 24 × 24 px — the lowest technical requirement. It ensures the element can still be reached but does not guarantee an optimal experience.
- Recommended best practice: 44 × 44 px — follows WCAG 2.5.5 Target Size (Level AA) and EN 301549 guidance. Provides a more comfortable interaction area for users with motor difficulties, touch devices, or when using a device outdoors. Should be the default requirement.
- The minimum target size applies regardless of the visual size of the component. If the visual element is smaller, additional spacing or invisible padding must be added. Consistency is key: the same rule applies across all sizes (LG, MD, SM).
For Dev
Section titled “For Dev”To ensure buttons meet WCAG 2.1 AA and support assistive technologies, follow these implementation standards:
- Semantic HTML
- Always use the native
<button>element (not<div>or<a>without role). If an<a>element must be used as a button, ensurerole="button"is set, that it is focusable withtabindex="0", and that it supports Enter/Space keypress events. This should be considered a fallback only.
- Always use the native
- Keyboard Navigation
- All buttons must be reachable with Tab and activatable with Enter and Space.
- Icon-only buttons must include accessible labelling:
aria-label="Edit"oraria-labelledby="..."when referencing visible text elsewhere. - Ensure keyboard shortcuts follow platform conventions (Enter/Space on desktop, tap on mobile).
- Focus Ring / Visible Focus
- All buttons must show a visible focus style (not just a colour change) on keyboard navigation.
- Use a high-contrast outline or border (e.g. #0072F0 against adjacent backgrounds).
- Focus must remain persistent and highly visible, not replaced by hover styles.
- Never remove the browser’s default outline unless replaced with an accessible alternative.
- Screen Reader Support
- Each button must include a clear and concise text label (e.g.
<button>Edit</button>). - For icon-only buttons: use
aria-labelortitleto describe the action (e.g. “Download PDF”). - Avoid redundant roles or
aria-hidden="true"on interactive buttons.
- Each button must include a clear and concise text label (e.g.
- Disabled State
- Use the
disabledattribute on<button>rather than visually faking it. - Disabled buttons must not be focusable and must not trigger actions.
- Maintain sufficient visual contrast for recognition (ideally ≥ 3:1, or provide a clear visual separation).
- Note: contrast may fall below 4.5:1 if disabled buttons are visibly distinguishable and not interactive, as per WCAG 2.1 SC 1.4.3.
- Use the
- Interaction Feedback
- Hover, focus and pressed states must be clearly differentiated using more than colour alone.
- Examples: colour change plus border or shadow; icon or text emphasis.
- Responsive and Tap Targets
- Touch targets must meet minimum sizes (WCAG + mobile UX best practices).
- Ensure icon-only or small buttons are not too small on touch devices.
- Use spacing tokens to maintain consistency across breakpoints.
| Case | ✅ Good | ❌ Bad |
|---|---|---|
| Semantic Structure | <button>Save</button> | <div onclick="save()"> |
| Keyboard Navigation | Activatable using Enter / Space | Only activatable with pointer click |
| Focus Visibility | Clear, high-contrast focus ring | Focus removed or replaced by hover-only styling |
| Disabled State | <button disabled> with muted styling | Visually greyed but still interactive |
| Screen Reader | <button aria-label="Download PDF"> for icon | Icon button with no accessible name |
Primary Button
Section titled “Primary Button”- Represents the main action on a screen or within a content block.
- There should only ever be one Primary Button per view to maintain hierarchy.
- Ensure strong visual emphasis (high contrast, size, weight).
- Use it when the action is directly tied to the user’s goal (e.g. Save, Submit, Purchase).
Secondary Button
Section titled “Secondary Button”- Represents a supporting action.
- Multiple Secondary Buttons can be used within the same view.
- Use it when the Primary action is already present and you don’t want to compete with it visually.
- Suitable for actions such as Back, Cancel, Edit.
Tertiary Button
Section titled “Tertiary Button”- Represents a low-priority action, used infrequently.
- Helps reduce visual noise in the interface.
- Common in footers, settings panels, filters, preferences.
- Works well in card layouts or lists where the action should not steal attention.
- Use the Underline property to adapt the tertiary button visually when needed.
- Keep its default (underline visible) for text-based or inline actions.
- Disable it when the button appears in dense layouts or icon-driven contexts to reduce visual noise.
Primary Button
Section titled “Primary Button”- Don’t place multiple Primary Buttons of equal importance within the same view.
- Don’t use it inside highly prominent containers where it may feel visually overwhelming.
- Don’t place it on backgrounds with strong or conflicting colours that reduce clarity.
Secondary Button
Section titled “Secondary Button”- Don’t use it when the action is the main call to action (use Primary instead).
- Don’t place it in tight spaces where bordered styles look cluttered or compete with container borders.
- Don’t use it when de-emphasis is required (in those cases use Tertiary).
Tertiary Button
Section titled “Tertiary Button”- Don’t use it for main user actions (use Primary or Secondary instead).
- Don’t place it in contexts where strong contrast is needed (e.g. dark mode, complex backgrounds).
- Don’t use it if the border blends into the background, making it hard to perceive.
Best Practices
Section titled “Best Practices”Buttons should
Section titled “Buttons should”- Use clear and accurate labels that lead with an actionable verb.
- Be limited to one Primary per view to maintain hierarchy.
- Be positioned consistently across screens to support predictable navigation.
- Use established button colours appropriately (e.g. avoid over-emphasis with multiple high-contrast buttons).
- Never rely on icons alone — always provide a text label or accessible name.
- Be grouped thoughtfully: Secondary or Tertiary actions should be visually related to the Primary but not compete with it.
Buttons versus links
Section titled “Buttons versus links”- Buttons are used for actions (e.g. Add, Save, Close).
- Links are used for navigation and typically appear within or following a sentence.
- Using the correct element improves accessibility, visual consistency, and maintainability at scale.
Button groups
Section titled “Button groups”- Only use buttons that follow the best practices defined above.
- Group together calls to action that share a clear relationship.
- Avoid overloading users with too many buttons — this can cause uncertainty about what to do next.
- Be mindful of how multiple buttons display and behave on smaller screens.
- Limit groups to a maximum of six buttons, and only when they contain icons without text.
Content and copy
Section titled “Content and copy”- Use clear and specific action verbs. Examples: Save changes / Download invoice / Submit form. Avoid vague labels such as: Click here / OK / Confirm.
- Be concise — limit button text to 1–3 words, aiming for around 24 characters in English. Allow flexibility for languages with longer words (e.g. German, Finnish).
- Make the outcome predictable. Instead of Yes / No, use: Yes, delete account / Cancel.
- Avoid jargon or idioms — use plain English.
- When buttons appear in groups (e.g. modal dialogs), each should be self-explanatory. Example: Save draft / Discard draft — not: Yes / No.
- For icon-only buttons, ensure accessible names are applied (e.g. using
aria-label). For icon + text buttons, do not repeat the icon meaning redundantly in the text. - Keep copy neutral, translatable and adaptable. Buttons must allow at least 25–40% extra width to accommodate longer translations.