DESIGN.md · Analysis

HeroUI v3

heroui.com · 10 Jul 2026 · 47 colors · Inter

HeroUI v3

Beautiful, accessible React UI components built on React Aria and Tailwind CSS v4. A modern, production-ready design system emphasizing clarity, consistency, and customization through token-driven theming.

Colors

surface#ffffff
surface-dim#f7f7f7
surface-bright#ffffff
surface-container-lowest#fafafa
surface-container-low#f5f5f5
surface-container#f0f0f0
surface-container-high#ebebeb
surface-container-highest#e5e5e5
on-surface#1a1a1a
on-surface-variant#555555
inverse-surface#1a1a1a
inverse-on-surface#f5f5f5
outline#8e8e8e
outline-variant#c0c0c0
surface-tint#0066ff
primary#0066ff
on-primary#ffffff
primary-container#e0eeff
on-primary-container#001a4d
inverse-primary#4da6ff
secondary#fe6e00
on-secondary#ffffff
secondary-container#ffe4cc
on-secondary-container#4d2200
tertiary#00bb7f
on-tertiary#ffffff
tertiary-container#ccf5e8
on-tertiary-container#003d2e
error#fb2c36
on-error#ffffff
error-container#ffe2e2
on-error-container#4d0809
primary-fixed#e0eeff
primary-fixed-dim#b3d9ff
on-primary-fixed#001a4d
on-primary-fixed-variant#004db3
secondary-fixed#ffe4cc
secondary-fixed-dim#ffb399
on-secondary-fixed#4d2200
on-secondary-fixed-variant#994400
tertiary-fixed#ccf5e8
tertiary-fixed-dim#99e8d4
on-tertiary-fixed#003d2e
on-tertiary-fixed-variant#007a5f
background#fafafa
on-background#1a1a1a
surface-variant#f0f0f0

Typography

display
fontFamily: Inter · fontSize: 60px · fontWeight: 700 · lineHeight: 68px · letterSpacing: -0.04em
headline-lg
fontFamily: Inter · fontSize: 40px · fontWeight: 600 · lineHeight: 48px · letterSpacing: -0.02em
headline-md
fontFamily: Inter · fontSize: 28px · fontWeight: 600 · lineHeight: 36px · letterSpacing: -0.01em
title-lg
fontFamily: Inter · fontSize: 20px · fontWeight: 600 · lineHeight: 28px · letterSpacing: 0em
body-lg
fontFamily: Inter · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0.01em
body-md
fontFamily: Inter · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0.01em
label-md
fontFamily: Inter · fontSize: 14px · fontWeight: 500 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: Inter · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.02em

Design guidance

Overview

HeroUI v3 is a production-ready React component library built on React Aria and Tailwind CSS v4, designed for teams building accessible, scalable applications. The brand embodies "Accessible Minimalism"—a design philosophy that prioritizes clarity and usability without sacrificing visual refinement. The aesthetic is clean, intentional, and token-driven: every color, radius, and spacing value is customizable through a unified theming system, enabling rapid brand adaptation while maintaining consistency across all components. The UI evokes trust and professionalism through precise typography (Inter at 16px base, 14px labels), subtle shadows (0 4px 12px rgba(0,0,0,0.08) for elevated surfaces), and a neutral surface palette anchored by pure white (#ffffff) and near-black text (#1a1a1a). Voice: direct, technical, and empowering. Example: "Customize colors, radius, and typography using a token system that keeps every component consistent and production-ready."

Colors

HeroUI's color system is built on a semantic, light-first foundation with full dark-mode support via oklch() color space. Primary (#0066ff) is the signature accent—used exclusively on primary CTAs, focus states, and brand-critical interactions. It commands attention without aggression, sitting at 54.5% lightness in oklch space. Secondary (#fe6e00, a vibrant orange) provides energetic contrast for secondary actions and highlights, while tertiary (#00bb7f, emerald green) signals success states and positive feedback. The surface stack progresses from pure white (surface: #ffffff) through carefully calibrated grays (surface-container-low: #f5f5f5, surface-container: #f0f0f0, surface-container-high: #ebebeb) to enable subtle layering without visual noise. Error (#fb2c36) is reserved for destruc

Typography

The type system uses Inter exclusively across all weights (400, 500, 600, 700), scaled from 12px labels to 60px display headlines. Display (60px, 700 weight, -0.04em letter-spacing) is reserved for hero statements and major page titles, commanding visual hierarchy through size and negative letter-spacing that tightens the letterforms. Headline-lg (40px, 600 weight, -0.02em) anchors section headings and modal titles, while headline-md (28px, 600 weight) serves subsections. Body-lg (18px, 400 weight) is used for introductory paragraphs and prominent descriptions; body-md (16px, 400 weight) is the default paragraph text and input field content. Label-md (14px, 500 weight, 0.01em letter-spacing) is applied to button text, form labels, and UI microcopy; label-sm (12px, 500 weight, 0.02em letter

Layout

HeroUI uses a 12-column fluid grid with a max-width of 1280px, centered with symmetric gutters of 24px on desktop and 16px on mobile. The spacing scale is semantic: unit (8px) is the base increment, with xs (4px) for micro-spacing, sm (12px) for compact grouping, md (24px) for standard section separation, lg (40px) for major section breaks, and xl (64px) for page-level spacing. Container padding follows the gutter value (24px) to maintain visual rhythm. White-space is generous but purposeful—cards and modals use md (24px) padding internally, while section separators use lg (40px) vertical spacing. The layout philosophy prioritizes breathing room: avoid stacking elements closer than sm (12px) unless they form a tight logical group (e.g., label + input field at 8px). Responsive breakpoints a

Elevation & Depth

Depth is conveyed through a three-tier shadow system that avoids excessive blur or spread. Level 1 (sm: 0 1px 2px rgba(0,0,0,0.06)) is applied to subtle interactive elements like hover states on list items and secondary cards—barely perceptible but present. Level 2 (md: 0 4px 12px rgba(0,0,0,0.08)) is the standard for elevated surfaces: cards, input fields, and dropdown panels. Level 3 (lg: 0 16px 40px rgba(0,0,0,0.12)) is reserved for modals, popovers, and top-level overlays that demand visual separation. All shadows use a 0-offset vertical blur to simulate light from above, with opacity valu

Shapes

HeroUI employs "Precise Softness"—a shape philosophy that balances technical clarity with approachability through carefully calibrated border-radius values. Buttons and chips use lg (1rem / 16px) radius, creating a distinctly rounded but not pill-shaped appearance that feels modern and friendly. Cards and modals use xl (1.5rem / 24px) radius for a softer, more inviting container aesthetic. Input fields and smaller interactive elements use DEFAULT (0.5rem / 8px) radius, maintaining visual distinction from larger surfaces. Badges and tags use full (9999px) radius for a true pill shape, signaling

Components

Action Elements Buttons are the primary interaction pattern, with three variants: primary (background: #0066ff, text: white, height: 40px, padding: 0 16px, radius: 1rem), secondary (background: #fe6e00, text: white, same dimensions), and ghost (background: transparent, border: 1px solid #c0c0c0, text: #0066ff). All buttons use label-md typography (14px, 500 weight) and transition background-color over 150ms cubic-bezier(0.4, 0, 0.2, 1) on hover. Primary buttons darken to #0052cc on hover, secondary to #e55c00, and ghost to surface-container (#f0f0f0). Disabled buttons reduce opacity to 0.5 and set cursor: not-allowed. Chips and badges are compact action elements: chips (height: 32px, padding: 6px 16px, radius: full) are selectable toggles with border: 1px solid outline-variant; badges

Do's and Don'ts

**Do**

  • Do use primary (#0066ff) exclusively for high-emphasis CTAs and focus states—never for secondary UI or decorative elements.
  • Do maintain consistent spacing using the semantic scale (sm: 12px for grouping, md: 24px for sections, lg: 40px for major breaks).
  • Do apply transitions over 150–200ms using cubic-bezier(0.4, 0, 0.2, 1) for all interactive state changes (hover, focus, active).
  • Do use the three-tier shadow system (sm, md, lg) to convey depth; never stack multiple shadows or use custom blur values.
  • Do ensure all interactive elements have a visible focus state (border color, ring, or background change) for keyboard accessibility.
  • Do use Inter at 400 weight for body text, 500 for labels, and 600+ for headlines—never mix weights within a single text element.
  • Do apply label-sm (12px) with text-shadow 0 2px 4px rgba(0,0,0,0.08) when placing text over busy backgrounds.

**Don't**

  • Don't use secondary (#fe6e00) or tertiary (#00bb7f) for primary CTAs—reserve them for secondary actions and status messaging.
  • Don't apply border-radius values inconsistently within a component family (e.g., all buttons must share the same radius).
  • Don't create custom shadows; use only the three defined levels (sm, md, lg) with their exact blur and opacity values.
  • Don't exceed 1280px container width or use gutters smaller than 16px on mobile—maintain readability and touch targets.
  • Don't mix oklch() and hex color values in the same component; use hex for consistency with the token system.
  • Don't apply transitions longer than 300ms or use easing functions other than cubic-bezier(0.4, 0, 0.2, 1) for UI interactions.
  • Don't omit focus states or rely on color alone to indicate interactivity—always include a visible border, ring, or background change.