Design System v1.0 · ZoomInfo-inspired

NovaCorp Design System

The component library powering the NovaCorp Data Analytics & Invoice Audit Platform. Built on the principle that "benchmarking starts with data cleaning." Every token, component, and pattern below traces back to the design walkthrough.

1. Principles

Three rules govern every choice. When components disagree, principles win.

Principle 01

Clarity over decoration

Enterprise users are time-pressured. No illustrations. No flourish. Data speaks. White space exists to separate sections, never as a stylistic move.

Principle 02

Progressive disclosure

Summary at the top. Drill-down within one click. Dashboard → Vendor → Invoice → Exception. Every screen answers "what do I do next?"

Principle 03

Automation is first-class

The AI agent is visible, trusted, and always explains its reasoning. Purple #6D28D9 is its consistent visual signature.

2. Color tokens

All colors are CSS custom properties. Status colors are reserved for compliance semantics — never for decoration. Purple is reserved exclusively for AI activity.

Brand

Brand · Primary
--brand-primary
#003DA5
Brand · Hover
--brand-primary-hover
#002F80
Brand · Active
--brand-primary-active
#00245F
Brand · Tint
--brand-primary-tint
#E5EBF6

AI

AI · Primary
--ai-primary
#6D28D9
AI · Hover
--ai-hover
#5B21B6
AI · Tint
--ai-tint
#F1ECFB

Status

Compliant
--status-success
#16A34A
Partial
--status-warning
#D97706
Non-compliant
--status-danger
#DC2626
Info
--status-info
#2563EB

Surface & sidebar

Sidebar BG
--sidebar-bg
#0D1117
Page BG
--bg-page
#F0F2F5
Surface
--bg-surface
#FFFFFF
Subtle
--bg-subtle
#F8F9FB

Text & borders

Text · Primary
--text-primary
#0F172A
Text · Secondary
--text-secondary
#475569
Text · Tertiary
--text-tertiary
#64748B
Border · Default
--border-default
#D1D5DB
Usage rule

Status colors appear only on badges, dots, and chart marks. Never as panel backgrounds. Brand blue is the only color that signifies interactivity. AI purple is exclusive to AI-generated insights.

3. Typography

IBM Plex Sans for prose and UI. IBM Plex Mono for numeric data — fixed-width is essential for scannability across rows of financial figures.

Display · 36/700 · Plex Sans
Compliance Overview
H1 · 24/700 · Plex Sans
Vendor compliance ranking
H2 · 18/600 · Plex Sans
Top exceptions this period
H3 · 14/600 · Plex Sans
Recommended action
Body · 14/400 · Plex Sans
Invoice INV-2024-08812 was flagged because the unit rate ($412) exceeds the contracted ceiling ($385).
Small · 12/400 · Plex Sans
Last sync · 4 minutes ago
Caps · 11/600/.06 · Plex Sans
Ingestion log
Numeric XL · 28/600 · Mono
$1,284,317.40
Numeric · 14/500 · Mono
87.4%
Code · 12/400 · Mono
INV-2024-08812 · CTR-NV-0427
font-family: 'IBM Plex Sans', -apple-system, sans-serif;     /* UI & prose */
font-family: 'IBM Plex Mono', ui-monospace, monospace;        /* numerics & refs */

4. Spacing & radius

Strict 4-pt rhythm. Spacing tokens compose into layouts; radius tokens round components consistently.

Spacing scale
--sp-1
4px
--sp-2
8px
--sp-3
12px
--sp-4
16px
--sp-5
20px
--sp-6
24px
--sp-8
32px
--sp-10
40px
--sp-12
48px
Radius scale
4 · sm
6 · md
8 · lg
12 · xl
pill

5. Elevation & motion

Three shadow tiers. Motion is fast (120–180ms) and uses a single ease curve.

--shadow-sm
Resting cards, KPI cards, tables.
--shadow-md
Hover state, dropdowns, popovers.
--shadow-lg
Modals, drawers, command palette.
Motion tokens
TokenValueUse
--dur-fast120msHover, focus, button states
--dur-base180msDrawer open, dropdown reveal
--easecubic-bezier(.2,.8,.2,1)All UI transitions

6. Buttons

Five variants × three sizes. Primary blue is exclusive to the most important call-to-action on a screen.

Variants
<button class="btn btn--primary">Run audit</button>
<button class="btn btn--ai">✦ Apply AI fix</button>
Sizes

7. Badges & status

Badges always carry a colored dot. The dot makes status legible at small sizes inside dense tables.

Compliance badges
Fully Compliant Partially Compliant Non-Compliant
<span class="badge badge--success">
  <span class="dot"></span>Fully Compliant
</span>
Other badges
In Review Draft AI Resolved AI Suggestion
AI three-state pattern
FlaggedHigh impact · needs human review
SuggestedMedium confidence · awaits approval
Auto-resolvedLow risk · logged + auditable

8. Inputs & filters

Filters are first-class UI. Applied filters surface as chips at the top of the canvas.

Form fields
Filter chips · applied state
Vendor: Acme Logistics × Q1 2026 × EMEA × + Add filter
Toggle · table density
Compact rows

9. Cards & KPIs

KPI cards stand in a single row at the top of every dashboard view. They show one metric, one delta, and (where applicable) one progress encoding.

KPI card row · 5-up
Fully compliant
87.4%
▲ 2.1pp vs Q4
Partially compliant
9.2%
▼ 1.4pp
Non-compliant
3.4%
▼ 0.7pp
Total exposure
$1.28M
▲ Net leakage
Net leakage
$184K
▼ 14% vs Q4

10. Tables

Dense tables with inline badges, sortable columns, and dual-encoded ratios. Every row is clickable; hover tints the row.

Vendor compliance table
Vendor Status Compliance rate Invoices Exposure AI flags
Acme Logistics
VEN-0042 · EMEA
Compliant
96%
1,247 $48,210 2
Northwind Supply
VEN-0118 · NA
Partial
74%
894 $112,440 9
Globex Freight
VEN-0204 · APAC
Non-compliant
42%
412 $284,008 17
Initech Carriers
VEN-0367 · EMEA
Compliant
91%
680 $22,180
Invoiced vs Expected · line items
LineDescriptionInvoicedExpectedDeviation
1Express freight · LON→AMS$1,240.00$1,240.00$0.00
2Surcharge · fuel$ 412.00$ 385.00+$27.00
3Customs handling$4,500.00$ 342.00+$4,158.00

12. AI patterns

If it's purple, the agent did it. AI components always lead with evidence and confidence — actions appear last.

AI insight panel · medium confidence
Pattern detected · Globex Freight
Confidence 84%
17 invoices in the last 90 days show the same surcharge miscalculation. Estimated recovery: $48,210. The pattern correlates with rate-card version 2.3 ingested on Mar 12.
Evidence: 17 invoices · 3 contracts · 1 rate card · Source: ingestion-log-7841
AI three-state hierarchy
Flag for human

High-impact deviation

Confidence ≥ 75%. Financial impact above threshold. Always presents evidence first.

Suggest action

Medium-confidence fix

Confidence 50–75%. Shows reasoning. Action button requires explicit approval.

Auto-resolved

Low-risk routine

High confidence + low impact. Logged with rationale. User can audit at any time.

13. Charts & data viz

Each chart type has one job. Pick by the question being answered, not by aesthetic.

Chart-to-question mapping
ChartAnswersWhere used
WaterfallWhere did the net come from?Compliance overview · financial impact
ParetoWhich 20% causes 80%?Root cause analysis
HeatmapWhere is leakage concentrated?Vendor × geography
QuadrantRisk vs volume by vendorVendor strategy view
Trend lineAre we improving over time?Compliance over quarters
DonutDistribution of one variableCompliance status share
Ranked barTop / bottom N comparisonVendor leaderboard
Pareto chart · CSS preview
Surcharge
Rate
Currency
Volume
Mapping
Override
Outdated
Missing

Bars sort by financial impact (descending). Overlay a cumulative-percentage line to identify the 80/20 break.

Score gauge · before vs after
67
Before
94
After

14. Composite patterns

Pre-assembled patterns that solve specific screen requirements from the brief.

Agentic pipeline · Screen 2
Schema validation Passed
12,430 rows · 0 schema errors
Currency normalization Passed
3 currencies → USD · FX rate as of 2026-05-04
Deduplication Passed
87 duplicates removed
!
Vendor harmonization Needs review
6 vendors flagged for human confirmation · agent paused
5
Cross-reference contracts
Pending step 4
Exception card · Screen 3
Surcharge miscalculation
+$4,185
Deviation type
Rate card vs invoice
Financial impact
+$4,185.00
Root cause
Surcharge tier 3 applied; contract requires tier 1
Recommended action
Recover $4,185 from vendor · auto-fix similar 17 invoices
Invoice header band · Screen 3
Invoice
INV-2024-08812
Vendor
Globex Freight
Amount
$5,940.00 (+$4,185)
Contract
CTR-NV-0427
Non-Compliant

15. States

Empty, loading, and error states are part of every screen — designed once, used everywhere.

Empty state
📥
No data yet

Upload an invoice file to start your first audit.

Loading state
Error / partial-data
Sync failed

2 of 47 sources unavailable

Showing partial results. Last successful sync: 2 min ago.

16. Sortable + Filterable Tables

The brief requires "tables must be sortable and filterable (show interaction states in your design)." This section specifies how that requirement is met.

Sort indicator · column header states

Three header states · default / hover / sorted
Vendor
Status
Compliance
Exposure
AI flags
StateVisualWhen applied
Default at 50% opacity, text-disabledSortable column at rest
Hover at 100% opacity, text-secondaryCursor over the column header
Sorted or in brand blue · column label brand blueActive sort applied (descending or ascending)
<th class="sortable sorted" data-sort-key="exposure" data-sort-dir="desc">
  Exposure <span class="sort-arrow">▼</span>
</th>

Filter buttons · 5-dimension row

Distinct from chip pattern (Section 8). Filter buttons sit above the table and represent the brief's required dimensions: Vendor, Date Range, Geography, Contract, Service Level. Each carries an inline applied value when filtered.

Default + applied state
<button class="filter-btn">Vendor <span class="caret">▾</span></button>
<button class="filter-btn filter-btn--applied">Date: Q1 2026 <span class="caret">▾</span></button>

Filter dropdown popover

Opens on click of any filter button
Geography

17. Score gauge

Circular SVG gauge used for the data-quality before/after pattern on Screen 2. Three color states map to score ranges so the gauge tells the story without reading the number.

Before / after pair · 67 → 94
67
Before
94
After
Score-to-color mapping
Score rangeStroke colorToken
0–60 · Poor Warning amber--status-warning
61–85 · Acceptable Brand blue--brand-primary
86–100 · Excellent Success green--status-success
circumference = 2 × π × 52 ≈ 326.7
fill-length   = (score / 100) × 326.7

// Examples
score 67 → stroke-dasharray="218.9 326.7"
score 81 → stroke-dasharray="264.6 326.7"   // live, brand
score 94 → stroke-dasharray="307.1 326.7"   // success

18. Stale & partial-data tags

Inline indicator that data is out-of-date or only partially available. Used in error/partial states to signal compromised data without hiding it.

Inline tags · attached to KPI labels or page titles
Total exposure stale
Net leakage partial
Compliance Overview PARTIAL DATA
<span class="stale-tag">stale</span>
<span class="stale-tag">partial</span>
<span class="stale-tag">PARTIAL DATA</span>

19. Live state patterns

Detailed specs for the four state variants shown in the submission. Each composite pattern combines tokens from sections 1–15.

19.1 Empty state · pre-data

Composition
  • 2px dashed border container, light surface, 56px vertical padding
  • 80px circular icon · brand-tint background, brand-blue stroke icon
  • Headline 22/700 + supporting line 14/400 secondary
  • Two CTAs side-by-side (primary + secondary), large size
  • Format chips below CTAs · mono font, 11px, neutral surface
  • Optional: 3-step "what happens next" preview row of mini cards

19.2 Loading state · syncing

Progress banner anatomy
Syncing data sources
22 of 47 sources processed · ETA 1m 30s
47%

Used at the top of any screen waiting on data. Pulse animation on the dot. AI panel below renders dimmed with a "✦ Agent will surface insights once sync completes…" line in italic AI purple.

19.3 Error state · partial data

Error banner + paused-AI panel
!
Sync failed · 2 of 47 data sources unavailable
Showing partial results. The AI agent has paused new analysis.

KPIs render with reduced opacity (0.7) and stale tags. Affected-sources list shown as a panel above the KPIs. AI panel switches to "Paused" badge — agent never operates on incomplete data.

19.4 Agent-running state · in-flight cleaning

Live progress + pulsing pipeline step
✦ AI agent active · Cleaning your data
Step 4 of 6 · ETA 42s
67%
  • Progress banner uses AI purple variant of the loading banner pattern
  • "Live" gauge renders in brand blue (in-flight, not yet success-green) — shows interim score
  • Active pipeline step has a pulsing brand-blue marker and inline progress bar
  • Streaming activity log on the right shows recent agent actions in mono
  • Required text: "✦ Agent will…" prefix on every agent-narrated string