Buttons

Five visual variants cover the full range of action emphasis — from the highest-impact CTA down to destructive actions. Each variant supports an optional leading icon, a dropdown trigger, and a disabled state. All appearance tokens are driven by the Buttons group in the theme editor; no Bootstrap default colors are used anywhere.

CSS custom properties

Defined on :root in css/_fonts.css from theme.buttons.* fields. Consumed by css/_buttons.css.

CSS variableTheme fieldUsed for
--btn-font-sizebuttons.font_sizeFont size on all button variants and size modifiers
--btn-font-weightbuttons.font_weightFont weight on all button variants
--btn-radiusbuttons.border_radiusBorder radius on all button variants
--btn-padding-ybuttons.padding_yVertical padding on the base .btn class
--btn-padding-xbuttons.padding_xHorizontal padding on the base .btn class
--btn-primary-bgbuttons.primary_bgPrimary button background; focus ring color for all buttons
--btn-primary-textbuttons.primary_textPrimary button text and icon color; active dropdown item text
--btn-primary-borderbuttons.primary_borderPrimary button border
--btn-primary-hover-bgbuttons.primary_hover_bgPrimary button hover / active background
--btn-secondary-bgbuttons.secondary_bgSecondary button background
--btn-secondary-textbuttons.secondary_textSecondary button text and icon color
--btn-secondary-borderbuttons.secondary_borderSecondary button border
--btn-secondary-hover-bgbuttons.secondary_hover_bgSecondary button hover / active background
--btn-outline-primary-colorbuttons.outline_primary_colorOutline Primary border, text, and icon; dropdown item text
--btn-outline-primary-hover-bgbuttons.outline_primary_hover_bgOutline Primary hover / active background
--btn-outline-primary-hover-textbuttons.outline_primary_hover_textOutline Primary hover / active text and icon
--btn-outline-secondary-borderbuttons.outline_secondary_borderOutline Secondary border; focus ring
--btn-outline-secondary-textbuttons.outline_secondary_textOutline Secondary text
--btn-outline-secondary-hover-bgbuttons.outline_secondary_hover_bgOutline Secondary hover background
--btn-danger-bgbuttons.danger_bgDanger button background
--btn-danger-textbuttons.danger_textDanger button text and icon color
--btn-danger-borderbuttons.danger_borderDanger button border
--btn-danger-hover-bgbuttons.danger_hover_bgDanger button hover / active background

Primary

The main call-to-action. Filled with --btn-primary-bg. Use for the single highest-priority action on a screen — submit, save, proceed.

ClassSource fileRole
btncss/_buttons.cssBase — flex display, font, radius, padding, transition
btn-primarycss/_buttons.cssVariant — background, border, text, hover, active, focus states
button-largecss/_buttons.cssSize modifier — horizontal padding ×2 (padding_x * 2)
button-mediumcss/_buttons.cssSize modifier — default padding (padding_y / padding_x)
btn-smcss/_buttons.cssSize modifier — reduced padding (padding_y − 2 / padding_x − 8)
disable-buttoncss/_buttons.cssState — 0.6 opacity, pointer-events none

Primary — with icon

The icon inherits --btn-primary-text via .btn-primary svg { fill: var(--btn-primary-text); }.

Primary — disabled

The disable-button class, sets opacity: 0.6 and pointer-events: none. No HTML disabled attribute is used, so the element remains in the tab order.

Secondary

A dark filled button using --btn-secondary-bg. Use for secondary CTAs that need visual weight alongside a primary action without consuming the brand color.

ClassSource fileRole
btncss/_buttons.cssBase — flex display, font, radius, padding, transition
btn-secondarycss/_buttons.cssVariant — background, border, text, hover, active, focus states
button-large / button-medium / btn-smcss/_buttons.cssSize modifiers — same as Primary (see above)
disable-buttoncss/_buttons.cssState — 0.6 opacity, pointer-events none

Outline Primary

Transparent background with a --btn-outline-primary-color border and text. Fills with --btn-outline-primary-hover-bg on hover. Use for secondary actions placed alongside a primary button — e.g. "Cancel" next to "Save".

ClassSource fileRole
btncss/_buttons.cssBase — flex display, font, radius, padding, transition
btn-outline-primarycss/_buttons.cssVariant — transparent bg, colored border and text; filled on hover/active
button-large / button-medium / btn-smcss/_buttons.cssSize modifiers — same as Primary (see above)
disable-buttoncss/_buttons.cssState — 0.6 opacity, pointer-events none

Outline Primary — with icon

Icon fill inherits --btn-outline-primary-color at rest and switches to --btn-outline-primary-hover-text on hover via .btn-outline-primary:hover svg.

Outline Secondary

Neutral outline using --btn-outline-secondary-border with --btn-outline-secondary-text. Low visual weight — use for tertiary actions or on already-tinted backgrounds where a colored button would be too prominent.

ClassSource fileRole
btncss/_buttons.cssBase — flex display, font, radius, padding, transition
btn-outline-secondarycss/_buttons.cssVariant — transparent bg, neutral border and text; surface fill on hover
button-large / button-medium / btn-smcss/_buttons.cssSize modifiers — same as Primary (see above)
disable-buttoncss/_buttons.cssState — 0.6 opacity, pointer-events none

Danger

Destructive action variant using --btn-danger-bg. Reserve for actions that cannot be undone — deleting a record, revoking access, permanent archival. Always pair with a confirmation step before the action executes.

ClassSource fileRole
btncss/_buttons.cssBase — flex display, font, radius, padding, transition
btn-dangercss/_buttons.cssVariant — background, border, text, hover, active, focus states
button-large / button-medium / btn-smcss/_buttons.cssSize modifiers — same as Primary (see above)
disable-buttoncss/_buttons.cssState — 0.6 opacity, pointer-events none

Danger — disabled

A disabled danger button signals that a destructive action is unavailable in the current context without removing it from the UI. Combine btn-danger with disable-button.

Dropdown

Option to convert any button variant into a Bootstrap dropdown trigger. The button renders with the dropdown-toggle class; the menu items use .dropdown-item styled entirely from theme tokens — no Bootstrap default colors.

ClassSource fileRole
btncss/_buttons.cssBase button styles
btn-{variant}css/_buttons.cssVariant color styles — any of the five variants above
dropdown-toggleBootstrapAdds the caret indicator and wires up Bootstrap's JS toggle behaviour
dropdown-itemcss/_buttons.cssMenu items — text color from --btn-outline-primary-color, hover from global_colors.hover_surface, active fill from --btn-primary-bg
dropdown-menu.show licss/_buttons.cssList item padding inside an open menu