Skip to content

Buttons

Buttons are where intent becomes action — request access, download a report, submit a form. In a compliance product that means they must be unmistakable, calm, and trustworthy. COVALIDA uses exactly three button types and one shared state model, drawn from the teal interaction states. Resist inventing a fourth style; hierarchy comes from which button you use, not from new colors.

One primary per view

A screen should have a single, obvious primary action. Everything else is secondary or ghost. If two buttons compete for "the" action, the user hesitates — and hesitation is the opposite of the confidence the brand promises.

The three types

Primary

The one strong call to action. A solid Deep Teal fill with white text — the most saturated, most confident element on the screen.

  • Background Deep Teal #008080 · Text white #ffffff
  • White on #008080 measures 4.8:1 AA. Button labels are semibold, so this clears the requirement comfortably; on hover and press the button only gets darker (and higher contrast).
  • For a deliberately heavier, more premium primary — hero sections, the Trust Center sign-in — use Deep Petrol #155d5b as the rest color instead. White on #155d5b is 7.6:1 7.6:1 · AAA.
css
.btn-primary {
  background: #008080;
  color: #ffffff;
  border: 1px solid #008080;
  border-radius: 8px;
  padding: 10px 20px;
  font-weight: 600;
}
.btn-primary:hover  { background: #0a6e6e; border-color: #0a6e6e; }
.btn-primary:active { background: #155d5b; border-color: #155d5b; }

Secondary

The supporting action, used next to a primary. A teal outline on a transparent fill — present and clickable, but visually quieter.

  • Border Deep Teal #008080, 1.5px · Text Deep Teal #008080 · Fill transparent
  • Teal text on white is 4.8:1 AA. On hover, fill with the faint teal-50 tint #e8f4f4 rather than changing the text color.
css
.btn-secondary {
  background: transparent;
  color: #008080;
  border: 1.5px solid #008080;
  border-radius: 8px;
  padding: 9.5px 20px; /* -0.5px to keep total height equal to primary */
  font-weight: 600;
}
.btn-secondary:hover  { background: #e8f4f4; }
.btn-secondary:active { background: #cde9e6; }

Ghost / text

The lowest-emphasis action — "Learn more", "Cancel", a link-like control inside dense UI. No border, no fill at rest; teal text only.

  • Text Deep Teal #008080 · Border & fill none at rest
  • On hover, add the same faint teal tint so the hit area becomes visible. Keep the label semibold so it never reads as body copy.
css
.btn-ghost {
  background: transparent;
  color: #008080;
  border: 1px solid transparent;
  border-radius: 8px;
  padding: 10px 16px;
  font-weight: 600;
}
.btn-ghost:hover { background: #e8f4f4; }

States

Every button moves through the same five states. The color progression is the shared teal interaction model — memorize it once, apply it everywhere. Below, the primary button is shown in each state (hover, active, and focus are rendered statically here since inline examples cannot animate).

Default · #008080
Hover · #0a6e6e
Active · #155d5b
Focus ring
Disabled
  • Default — the rest color for the type (Deep Teal for primary).
  • Hover — one step darker, teal-600 #0a6e6e for filled buttons; a faint teal tint for outline and ghost. Signals "this is clickable" without shouting.
  • Active / pressed — Deep Petrol #155d5b. The darkest, most grounded state, held only while the pointer is down.
  • Focus — a 3px ring in rgba(0, 128, 128, 0.35) with a 2px offset. This is non-negotiable and must survive keyboard navigation; never remove the outline without a visible replacement.
  • Disabled — gray-100 #eceff0 fill, gray-400 #94a1a2 text, cursor: not-allowed, and aria-disabled="true". Keep disabled buttons quiet — they should read as unavailable, not broken.
css
.btn:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px #ffffff, 0 0 0 5px rgba(0, 128, 128, 0.35);
}
.btn:disabled {
  background: #eceff0;
  color: #94a1a2;
  border-color: #eceff0;
  cursor: not-allowed;
}

Never rely on hover alone

Hover-only affordances exclude touch and keyboard users. Every button must be fully identifiable and operable from its default and focus states before hover ever enters the picture.

Sizes

Three sizes cover almost every layout. All share the 8px radius and semibold label; only padding and font-size change. Keep one size per button group.

SizeFont sizePaddingUse for
Small (sm)13px6px 14pxDense tables, toolbars, inline actions
Medium (md)15px10px 20pxThe default — forms, cards, most pages
Large (lg)16px14px 28pxHero calls to action, primary landing-page actions

Always keep a comfortable tap target. On touch surfaces the interactive area should be at least 44 × 44px; for the small size, add invisible padding or spacing to reach it rather than shrinking the visual button further.

Radius and shape

Buttons use the --cv-radius-md token: 8px, the same radius as form inputs so controls sitting together look like one family. Soft but not pill-shaped — an 8px corner reads as modern and composed, where a fully rounded pill would feel more consumer-app than C-level. Reserve the 999px pill radius for badges and chips, not buttons.

Content and labels

  • Verb first, specific. "Request access", "Download tokens", "Start audit prep" — not "Submit", "OK", or "Click here". The label should describe the outcome.
  • Sentence case. "View standards", not "View Standards" or "VIEW STANDARDS". Calm, not shouty.
  • Keep it short. One to three words. If a button needs a sentence, it wants to be a link or needs helper text nearby.
  • Never encode meaning in color alone. A destructive action still says "Delete"; it does not rely on red to carry the warning. See Semantic Colors for when a state color is appropriate.
Do — one clear teal primary, verb-first label
Don't — green "brand" button and a vague label
  • Shared tokens — radius, spacing, and the teal state model these buttons inherit.
  • Forms — buttons submit forms; they share radius, height, and focus styling.
  • Badges & Status — the pill-shaped counterparts for non-interactive labels.
  • Semantic Colors — when an action legitimately needs a status color.
  • Contrast Checks — the verified ratios behind every button pairing.

Brand assets © COVALIDA Compliance. Site code licensed under MIT.