Design system — page navigation

Design system

A scalable interface system built for performance, accessibility, and real-world product workflows.

  • Light / Dark
  • Token-driven
  • WCAG-minded
  • Component-based

How the interface behaves: tokens constrain color, type, surfaces, and spacing so composed UI stays consistent.Full tokens & typography → Style guide

In practice

The same tokens compose into predictable UI: surface, label, field, and action working together.

Color system

Primary (brand ramp)

--brand-50
--brand-100
--brand-200
--brand-300
--brand-400
--brand-500
--brand-600
--brand-700
--brand-800
--brand-900

Secondary (violet ramp)

--secondary-50
--secondary-100
--secondary-200
--secondary-300
--secondary-400
--secondary-500
--secondary-600
--secondary-700
--secondary-800
--secondary-900

Semantic

--success
--warning
--danger
--info

Typography

Heading 1Heading 2Heading 3

Body text uses the default size and line height for long-form reading and UI copy.

Small text for captions, hints, and secondary metadata.

const primary = 'var(--brand-700)';

Surfaces & elevation

Surface steps stack from page (--surface-0) through raised cards; elevation uses shared shadow tokens. Toggle light/dark in the header to verify contrast.

--surface-0
--surface-1
--surface-2
--surface-3
--surface-4
--surface-5
--surface-6
--surface-7
--surface-8
--shadow-sm
--shadow-md
--shadow-lg

Spacing & radius

Spacing scale

  • --space-2
  • --space-3
  • --space-4
  • --space-5
  • --space-6

Corner radius

--radius-sm
--radius-md
--radius-lg
--radius-pill

Layout & composition

Reusable layout primitives for responsive composition—grids, asides, and card patterns. Visual tokens live in System overview.

Grid

Three patterns cover most product layouts: a balanced four-column grid, a content-friendly three-column grid, and a main region paired with an aside.

On viewports below 768px, the grid examples are hidden so cards stay readable; the main + aside pattern below still demonstrates responsive behavior.

Balanced layout (4 columns)

Card default styling.

Card surface 2 color.

Card surface 3 color.

Card surface 4 color.

Content-friendly layout (3 columns)

Card default styling.

Card surface 2 color.

Card surface 3 color.

Grid with Aside

Grid with Aside Article

Heading Button
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6

Article using the card styles for visual consistency.

Article using the card styles for visual consistency.

Actions

Interactive elements used to trigger user intent.

Buttons

Hierarchy is intentional: one primary action per region, secondary for supporting work, tertiary for lighter emphasis. Outline and ghost are style variants—not extra tiers. Destructive and warning styles are for risky or system-level states—not decoration.

Primary action

Primary: the main CTA per block—the hierarchy anchor.

Secondary & tertiary actions

Secondary & tertiary actions: alternatives that support the primary without competing with it.

Variants & styles

Outline, ghost, and icon placement—visual treatments, not hierarchy tiers.

Outline

Ghost

Quiet actions on bold or busy backgrounds—same style tier as outline, different surface.

Icon buttons

Leading, trailing, and icon-only patterns.

States

Disabled, loading, and link-styled actions.

As link

Destructive & system feedback

Use for irreversible actions, alerts, and validation—not for everyday navigation.

Sizes

Layout

Example: dialog actions

Typical footer: dismiss, commit, and destructive control aligned together.

Loaders

The Loader component is a small, customizable spinner used for showing loading states. It accepts width, heightand border props (strings or numbers) and sets matching CSS variables (--loader-width, --loader-height,--loader-border) so the pseudo-element spinner can be styled consistently. Place the loader inside a centered container or use a positioned parent (e.g. position: relative) when showing an overlay.

CTA Band

A prominent call-to-action band for demos, downloads, or contact.

Ready to align your study team?

Get a demo tailored to your protocol and timelines.

Forms & validation

Advanced inputs

Specialized pickers, uploads, and composite fields—useful for dense tools; keep them behind the core patterns when telling the system story.

Combobox / Autocomplete

Single-select and multi-select with chips. Arrow keys + Enter, click to choose.

Single-select

  • Projects
  • Teams
  • Reports
  • Documents
  • Billing
  • Settings

Multi-select

  • Front-end development
  • Accessibility
  • Design systems
  • TypeScript
  • UX research
  • Performance

File Uploader

Drag files here or browse. Shows basic validation and mock progress.

File Uploader (Images)

Drag & drop or browse. Shows live thumbnails with remove & size checks.

Drop images here
or click to — up to 10 files, max 10 MB each

Meter / Score

Linear score with thresholds + native <meter> styling. Drag to preview values.

72Fair
0–49: Poor • 50–74: Fair • 75–89: Good • 90–100: Excellent

Date-Range Picker

Select start and end dates using the calendar or the quick presets. Click a day to set the start date, then click another day to set the end date (clicking an earlier day will swap start and end). Use the presets for common ranges and the Clear button to reset.

Use the arrow keys to move between days, Page Up/Page Down to move between months, Home/End to jump to the start/end of the week, and Enter or Space to select the focused date.

May 2026
Sun
Mon
Tue
Wed
Thu
Fri
Sat
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6

Date Picker

Pick a single date with “Today” and “Clear”.

May 2026
Sun
Mon
Tue
Wed
Thu
Fri
Sat
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6

Date Input (Popover)

Calendar opens on input/focus; ESC/outside to dismiss.

Start date

Navigation & structure

Wayfinding, pagination, and command-driven shortcuts—tabs and accordion live at the end of this page.

Pagination

Reusable pager with first/prev/number/next/last, accessible keyboard shortcuts, and a page-size selector.

Keyboard: ← → (prev/next), Home/End (first/last), PageUp/PageDown (skip pages). The demo uses a skip step of 5 pages.
53 items • Page 1 of 7
  • Record #1
    Placeholder row for pagination demo.
  • Record #2
    Placeholder row for pagination demo.
  • Record #3
    Placeholder row for pagination demo.
  • Record #4
    Placeholder row for pagination demo.
  • Record #5
    Placeholder row for pagination demo.
  • Record #6
    Placeholder row for pagination demo.
  • Record #7
    Placeholder row for pagination demo.
  • Record #8
    Placeholder row for pagination demo.

Command Palette

Quickly jump to design system sections (same anchors as the slide-over nav). Press /Ctrl + K or click the button to open the palette. Type to filter, use / to navigate, Enter to run, and Esc to close.

Search Suggest

Header-anchored search field with a filtered suggestion card. Sits below the header and above page content so header links stay clickable. Wire any opener — typically a SearchToggle in your header — to its imperative handle (or to searchSuggestBus for cross-tree openers). Click the button below, then start typing — use / to navigate, Enter to pick, and Esc or the × to close.

Multi-step Modal Wizard

Guided flow with validation per step. Reuses your modal system.

Data & feedback

Tables, filters, and feedback surfaces—empty, error, and success—so dense UIs stay understandable.

Toasts

Toasts are used to display brief, auto-dismissing notifications.

Toasts

Inline Alerts

Success: Your settings have been saved.
Info: New template guidance is available.
Warning: A site has overdue tasks.

Tooltips & Popovers

Short hints (hover/focus) and richer, non-modal popovers (click/ESC/outside).

Tooltips

Link with tooltipHover/focus chip

Popovers

Popovers Examples

Modals & Overlays

Centered modal and slide-over overlay. Keyboard: ESC to close. Focus is trapped inside.

Empty, error & success

Reserve these surfaces for recoverable context—pair a short explanation with a clear next step, including positive confirmation after success.

Empty list

No projects match these filters.

Clear filters or create a project to get started.

Error

Could not load results.

Check your connection and try again.

Success

Changes saved.

Your team can see the update.

Pattern: data dashboard slice

Filters, density, and tabular data are composed below—this block previews how those pieces align in one toolbar.

Status: ActiveRegion: All

See Data table and Filters for full implementations and accessibility behavior.

Cards

Modular card layouts with header support, variant styling, and interactive hover/focus states for clear content grouping and visual hierarchy.

Quarterly roadmap

Prioritized themes for the next cycle, with owners and target dates.

Updated 2h ago · Strategy · 4 owners

With Header

This card has a header with an icon and text.

This card has no header. Just content.

Card 0 alternate styling.

Card 1 alternate styling.

Card 2 alternate styling.

Card inverse styling.

Data Table

Sortable columns, sticky header, and client-side pagination.

Sort by:
IDPhaseVersionStatusTask
1000UI DesignISprint Planning12
1001UI DevelopmentIIIn Review19
1002Accessibility FixesIIIDeployed26
1003Bugs & IssuesISprint Planning33
1004UI DesignIIIn Review40
1005UI DevelopmentIIIDeployed47
1006Accessibility FixesISprint Planning54
1007Bugs & IssuesIIIn Review61
Click headers to sort. Rows per page selectable below.
Page 1 / 4

Metric Cards

Small metric cards for dashboards and summaries.

...
...
...

Timeline Sample

A vertical timeline using the .timeline and .step classes for sequential layouts.

1
Step 1

Start your project and set up the basics.

2
Step 2

Develop features and iterate quickly.

3
Step 3

Test, deploy, and monitor your app.

Filters

Toggle chips with counts, “Clear all,” and live results.

0 selected

Result 1

Sample result

Result 2

Sample result

Result 3

Sample result

Result 4

Sample result

Result 5

Sample result

Result 6

Sample result

Result 7

Sample result

Result 8

Sample result

Logic Pills (Selected Filters)

Removable filter chips with AND/OR logic and quick “clear all”.

No filters selected
18 results

Result 1

Version: II • Status: Deployed • Phase: UI Design

Result 2

Version: I • Status: Sprint Planning • Phase: UI Development

Result 3

Version: II • Status: Sprint Planning • Phase: UI Development

Result 4

Version: I • Status: Deployed • Phase: UI Development

Result 5

Version: II • Status: Sprint Planning • Phase: UI Design

Result 6

Version: I • Status: Sprint Planning • Phase: UI Development

Result 7

Version: II • Status: Deployed • Phase: UI Development

Result 8

Version: I • Status: Sprint Planning • Phase: UI Development

Result 9

Version: II • Status: Sprint Planning • Phase: UI Design

Result 10

Version: I • Status: Deployed • Phase: UI Development

Result 11

Version: II • Status: Sprint Planning • Phase: UI Development

Result 12

Version: I • Status: Sprint Planning • Phase: UI Development

Result 13

Version: II • Status: Deployed • Phase: UI Design

Result 14

Version: I • Status: Sprint Planning • Phase: UI Development

Result 15

Version: II • Status: Sprint Planning • Phase: UI Development

Result 16

Version: I • Status: Deployed • Phase: UI Development

Result 17

Version: II • Status: Sprint Planning • Phase: UI Design

Result 18

Version: I • Status: Sprint Planning • Phase: UI Development
Add:

System principles

Guidelines that define how the system is applied across interfaces.

  • One primary action per region

    Primary actions are used sparingly to maintain clarity and focus.

  • Semantic colors are reserved for feedback

    Warning and error states communicate system status, not hierarchy.

  • Core patterns precede advanced inputs

    Common interactions are prioritized before introducing complexity.

  • Consistency is driven by tokens

    Design tokens ensure alignment across components, themes, and states.

  • Accessibility is a baseline, not an afterthought

    All components are designed to meet contrast, focus, and usability standards.

Built for real products

This system is designed to scale across production environments, balancing performance, accessibility, and usability.

Tabs & accordion

Disclosure patterns placed here so the workflow example stays the primary narrative for multi-step content.

Tabs

Accessible tab interface with ARIA roles, keyboard navigation (←/→, Home/End), focus management, and horizontal scrolling for overflow. Only one tab panel is visible at a time, and all controls are screen reader friendly.

Overview

High-level snapshot of the study—sites, milestones, and current risks.

Pill style tabs.

Overview

High-level snapshot of the study—sites, milestones, and current risks.

Accordion

Accessible accordion component with ARIA roles, keyboard navigation (↑/↓, Home/End), and smooth open/close animations. Only one panel is open at a time, and all controls are screen reader friendly.

Use the sign-in screen, choose “Forgot password,” and follow the email link. Links expire after a short window for security.