Skip to Content
UI ComponentsDesign System

Design System

Visual language, color palette, typography, spacing, and component patterns for the Leadmetrics platform.

Implementation: Tailwind CSS v4 + shadcn/ui + CSS custom properties. Token definitions: packages/ui/src/globals.css Theming (dark/light mode toggle): theming.md


Brand Identity

🎁 leadmetrics
  • Icon: gift-box / cube icon in gold/amber (#F5A623)
  • Wordmark: lead in white (or dark), metrics in violet (#7C5CFC)
  • Used in: auth screens (centered), sidebar/nav (top-left)

Tagline

“Transform Your Digital Marketing Strategy” Powered by cutting-edge Agentic AI, delivering intelligent automation and real-time insights.

“Agentic AI” always rendered in amber/yellow (#FBBF24) bold.


Color Palette

Core Brand Colors

NameHexoklchUsage
Violet (primary)#7C5CFCoklch(0.560 0.258 278)Buttons, active states, links, step indicators, focus rings
Violet dark#5B3FD4oklch(0.460 0.240 276)Button hover, pressed state
Violet light#9B7DFFoklch(0.680 0.220 278)Hover highlights on dark backgrounds
Amber (accent)#FBBF24oklch(0.828 0.189 86)”Agentic AI” highlight, info badges
Gold (logo icon)#F5A623oklch(0.790 0.178 72)Logo icon fill

Background Scale (Dark UI)

The auth and register screens use a layered dark background system. These tokens apply globally to the dark theme.

TokenHexDescriptionUsed for
bg-base#080D1ADeepest backgroundRegister page outer background
bg-surface#0D1117Primary surfaceAuth right panel, app shell
bg-elevated#161B27Elevated surfaceCards, form panels
bg-input#1E2435Input field backgroundAll form inputs
bg-hover#252D40Hover state on dark surfacesList item hover, table row hover

Semantic Color Tokens

These map to CSS custom properties consumed by shadcn/ui components.

TokenLight valueDark valueUsage
--backgroundzinc-50 (#FAFAFA)#0D1117Page background
--foregroundzinc-950#F9FAFBDefault text
--cardwhite#161B27Card / panel surface
--card-foregroundzinc-950#F9FAFBText on cards
--primary#7C5CFC#7C5CFCPrimary actions
--primary-foregroundwhitewhiteText on primary
--secondaryzinc-100#252D40Secondary surfaces
--mutedzinc-100#1E2435Muted background
--muted-foregroundzinc-500#6B7280Placeholder / helper text
--borderzinc-200#2A3347Borders, dividers
--inputzinc-200#2A3347Input borders
--ring#7C5CFC#7C5CFCFocus ring
--destructivered-600red-500Destructive actions
--successemerald-600#22C55ESuccess states
--warningamber-500#F59E0BWarning states
--infoblue-500#3B82F6Info states
--agent-accentviolet-600#7C5CFCAI/agent-related elements

Left Panel Gradient (Auth Screens)

All three apps share the same left-panel gradient pattern and dot-particle overlay. The gradient values below are the implemented values (verified in code):

background: linear-gradient( 135deg, #1a0033 0%, /* deepest purple-black */ #4c1d95 100% /* violet */ );

Overlaid with 20 scattered circular dot particles (opacity 20%, variable radius 4–16px, white) using absolute-positioned divs for depth.

Per-App Auth Shell Tokens

Each app uses the shared dark surface palette plus a small per-app identity accent applied to the sidebar badge, icon, and focus ring. All other colors (backgrounds, borders, text) are identical across apps.

AppSidebar badge bgSidebar badge textLeft-panel labelIcon component
Dashboard#2d1b69#a78bfadashboard
DM Portal (apps/dm)#2d1b69#a78bfadm portalUsers (Lucide)
Manage#2d1b69#a78bfamanageShieldCheck (Lucide)

All three badges intentionally share the same violet colors — the visual distinction comes from the label text, not the badge color.

Auth Form Card Tokens (all apps)

ElementValue
Right panel background#0D1117
Form card background#161B27
Input background#0D1117
Input border (default)border-slate-700 (#374151)
Input border (focus)border-violet-500 (#8B5CF6)
Submit buttonlinear-gradient(135deg, #7C3AED, #6D28D9)
Submit button disabled opacity70%
Error bannerbg-red-500/10 border border-red-500/30 text-red-400

Status Colors

StatusColorHex
Active / RunningBlue#3B82F6
Completed / ConnectedGreen#22C55E
Warning / At RiskAmber#F59E0B
Failed / ErrorRed#EF4444
Pending / DraftGray#6B7280
Awaiting ApprovalViolet#7C5CFC

Typography

Font Family

Primary: Inter (Google Fonts / self-hosted) Fallback: ui-sans-serif, system-ui, -apple-system, sans-serif

font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;

Inter is used for all UI text — headings, body, labels, inputs, buttons.

Type Scale

NameSizeWeightLine heightUsage
Display36px / 2.25rem700 (Bold)1.1Auth left panel headline
H128px / 1.75rem7001.2Page headings (“Get Started Today”)
H222px / 1.375rem6001.3Section headings (“Welcome back”, “Your contact details”)
H318px / 1.125rem6001.4Card headings, modal titles
H416px / 1rem6001.4Sub-section labels
Body-lg16px / 1rem4001.5General body copy
Body14px / 0.875rem4001.5Default UI text, descriptions
Body-sm13px / 0.8125rem4001.5Helper text, hints, captions
Label14px / 0.875rem5001.4Form field labels
Caption12px / 0.75rem4001.4Metadata, timestamps, secondary info
Button15px / 0.9375rem6001Button labels
Badge11px / 0.6875rem6001Status badges, plan badges

Letter Spacing

  • Headings: -0.01em to -0.02em (slightly tight for a polished feel)
  • Body: 0em (default)
  • Badge / uppercase labels: 0.04em
  • Buttons: -0.01em

Spacing & Layout

Base Unit

4px (Tailwind default: 1 = 4px). All spacing uses multiples of 4px.

Common spacing values

TailwindpxUsage
space-14pxTight gaps between related inline elements
space-28pxIcon-to-label gap, chip internal padding
space-312pxSmall internal padding
space-416pxStandard internal padding (inputs, compact cards)
space-520pxField spacing in forms
space-624pxCard padding, section spacing
space-832pxSection separation, large component padding
space-1248pxMajor section breaks

Border Radius

TokenSizeUsage
rounded-sm4pxBadges, chips, inline code
rounded / rounded-md6pxButtons (small), inputs
rounded-lg8pxStandard buttons, dropdown menus
rounded-xl12pxCards, panels, modals
rounded-2xl16pxFeature showcase screenshots (auth left panel)
rounded-full9999pxAvatar, step circle, pill badges

Components

Buttons

Primary Button

Violet background. Used for the main action on every screen.

┌──────────────────────────────────────────┐ │ Login → │ height: 44px └──────────────────────────────────────────┘ bg: #7C5CFC text: white radius: 8px hover: #5B3FD4 active: #4A32C0
  • Full-width within form cards on auth/register screens
  • Fixed width (min-w-[140px]) on in-app screens
  • Disabled state: opacity: 70%, cursor: not-allowed
  • Loading state: spinner replaces arrow icon, text remains

Secondary Button

Dark outline. Used for “Back” and secondary actions.

┌────────────────────┐ │ ← Back │ height: 44px └────────────────────┘ bg: #161B27 border: #2A3347 text: #F9FAFB hover: #252D40

No background. Used for “Forgot password?”, “Sign up →”, “Sign in” links.

Forgot password? text: #7C5CFC underline on hover

Danger Button

Red. Used for destructive actions (delete, reject, cancel subscription).

bg: #EF4444 text: white hover: #DC2626

Button Sizes

SizeHeightPadding (h)Font sizeUsage
sm32px12px13pxCompact: table actions, chip actions
md (default)40px16px14pxMost UI buttons
lg44px20px15pxAuth/register CTAs
xl52px24px16pxLanding-page hero CTAs

Form Inputs

All inputs share the same visual treatment on dark backgrounds:

Label (14px, medium, white) ┌─────────────────────────────────────────┐ │ [icon] Placeholder text │ height: 44px └─────────────────────────────────────────┘ Helper text (12px, gray-500, optional)
PropertyValue
Background#1E2435
Border (default)1px solid #2A3347
Border (focus)1px solid #7C5CFC
Border (error)1px solid #EF4444
Border radius6px
Text color#F9FAFB
Placeholder#6B7280
Height44px
Padding12px 16px
Focus ring0 0 0 3px rgba(124, 92, 252, 0.25)

Input with Prefix Icon

┌──────────────────────────────────────────┐ │ ✉ Enter your email │ └──────────────────────────────────────────┘ Icon: 16px, color: #6B7280 (gray-500) Icon-to-text gap: 8px

Password Input

┌──────────────────────────────────── [👁] ┐ │ 🔒 Enter your password │ └──────────────────────────────────────────┘ Eye icon right-aligned: toggles type="password" / type="text"

Input with Suffix Button (Generate)

┌──────────────────────────────── [👁] ┐ ┌─────────────┐ │ Enter password │ │ Generate │ └──────────────────────────────────────┘ └─────────────┘ Generate: sm button, violet, right of input

Select / Dropdown

Same visual treatment as text inputs. Caret icon right-aligned.

┌─────────────────────────────────────── ▾┐ │ Select your country │ └─────────────────────────────────────────┘

Error State

┌──────────────────────────────────────────┐ │ Enter your email │ border: red-500 └──────────────────────────────────────────┘ ⚠ Please enter a valid email address (12px, red-400)

Cards

Form Card

Used as the container for auth forms and registration wizard steps.

background: #161B27; border: 1px solid #2A3347; border-radius: 16px; padding: 32px;

On auth screens: max-width: 400px, centered within the right panel. On register screens: max-width: 780px, centered on page.

Plan Card

┌──────────────────────────────┐ │ [ Popular badge (optional)] │ │ │ min-height: 340px │ Plan Name │ padding: 24px │ Tagline │ │ Price │ │ │ │ What's included │ │ ✓ Feature │ │ ✓ Feature │ │ │ └──────────────────────────────┘
StateBorderBackground
Default1px solid #2A3347#161B27
Selected2px solid #7C5CFC#1A1B3A
Hover (not selected)1px solid #3D4860#1E2435

Selected plan shows a checkmark badge (white ✓ on violet circle) top-right. “Popular” badge: small pill above the card, violet gradient, 11px 600 uppercase.


Toast Notifications

Toasts appear bottom-right. Auto-dismiss after 4 seconds.

Success Toast

┌────────────────────────────┐ │ ● Success │ │ Your progress has been │ │ saved │ └────────────────────────────┘ bg: #0F2A1A border-left: 4px solid #22C55E icon: green dot title: 14px 600 green-400 body: 13px gray-300

Error Toast

bg: #2A0F0F border-left: 4px solid #EF4444

Info Toast / Banner (inline)

┌──────────────────────────────────────────────────┐ │ ✨ This is how your company name will appear │ │ throughout the platform │ └──────────────────────────────────────────────────┘ bg: #1C1A00 border: 1px solid #4A3500 icon: ✨ (amber) text: 13px, amber-200 border-radius: 8px padding: 12px 16px

Step Progress Bar

Used in the 4-step registration wizard.

①──────②──────③──────④

Step Circle

StateBackgroundIconBorder
Future#252D40Step icon (gray-400)none
Active#7C5CFCStep icon (white)none
Completed#22C55E✓ checkmark (white)none

Circle size: 48px. Icon size: 22px.

Connector Line

StateColor
Before active step#22C55E (green — completed)
After active step#2A3347 (dark gray — future)

Line height: 2px. Stretches between circle edges.

Labels

Step name: 14px 600, white (active) / gray-400 (future) / white (completed) Step subtitle: 12px 400, gray-500


Toggle Button Pair

Used for binary choices (e.g. GST selection, boolean preferences).

┌──────────────────────┐ ┌──────────────────────┐ │ Yes, I have GST │ │ ✓ No GST number │ └──────────────────────┘ └──────────────────────┘ unselected selected
StateBackgroundBorderText
Unselected#161B271px solid #2A3347#9CA3AF
Selected#7C5CFC1px solid #7C5CFCwhite
Selected (shown)Violet bg + ✓ icon prefix

Height: 48px. Equal width, side by side. border-radius: 8px.


Badges & Status Chips

┌──────────────┐ │ ● Active │ height: 22px padding: 4px 10px └──────────────┘
VariantBackgroundText colorBorder
Successrgba(34,197,94,0.15)#22C55E1px solid rgba(34,197,94,0.3)
Errorrgba(239,68,68,0.15)#EF44441px solid rgba(239,68,68,0.3)
Warningrgba(245,158,11,0.15)#F59E0B1px solid rgba(245,158,11,0.3)
Info / Runningrgba(59,130,246,0.15)#3B82F61px solid rgba(59,130,246,0.3)
Pendingrgba(107,114,128,0.15)#9CA3AF1px solid rgba(107,114,128,0.3)
Agentrgba(124,92,252,0.15)#7C5CFC1px solid rgba(124,92,252,0.3)
Plan: Popularviolet gradientwhitenone

Font: 11px 600 uppercase with letter-spacing: 0.04em.


The left panel of auth screens shows a rotating feature carousel.

Screenshot frame:

  • Dark rounded frame: bg: #0D1117, border-radius: 16px, border: 1px solid #2A3347
  • Subtle inner shadow to simulate depth
  • Wave/hill SVG shape at the bottom of the screenshot area (violet, low opacity)

Carousel pagination:

  • Dot indicators below the screenshot
  • Active dot: 8px wide, 8px tall, rounded-full, violet
  • Inactive dot: 8px wide, 8px tall, rounded-full, gray-600
  • Auto-advances every 4 seconds; respects prefers-reduced-motion

Particle overlay:

  • Scattered dots across the left panel background
  • Sizes: 2–5px radius, rgba(255,255,255,0.3) to rgba(124,92,252,0.4)
  • Static (no animation) or subtle float animation if reduced-motion is off

Iconography

See icons.md for the full icon reference — every icon in use, its exact import, and every file that uses it.


Motion & Animation

Guiding principle: Purposeful, subtle. No decorative animations that don’t communicate state.

MotionDurationEasingUsage
Page transition (route change)200msease-outFade + slight slide up
Step advance (register wizard)250msease-in-outSlide left + fade
Toast enter300msspring(bounce: 0.3)Slide up from bottom-right
Toast exit200msease-inFade out
Card hover150msease-outSubtle scale 1.01 + border color
Button press100msease-inScale 0.97
Dropdown open150msease-outFade + scale from 0.95 to 1
Spinnercontinuouslinear360° rotation, 800ms period

prefers-reduced-motion: All animations disabled or replaced with instant state change. Carousel auto-advance paused.


Responsive Breakpoints

Inherited from Tailwind v4 defaults, consistent with responsive-design.md.

BreakpointMin widthKey layout change
sm640pxSingle-column to two-column for some form rows
md768pxAuth left panel appears; mobile nav → sidebar
lg1024pxFull 50/50 split on auth screens; sidebar always visible
xl1280pxWider register card, plan cards side-by-side
2xl1536pxMax content width capped at 1400px, centered

Dark / Light Mode

The platform defaults to dark mode (as shown in all screenshots). Light mode is available via the toggle in the app header.

Auth and registration screens are always dark — they do not respond to the light/light toggle. The feature showcase left panel is always the purple gradient regardless of mode.

In-app screens (Dashboard, DM Portal, Manage) support both modes. See theming.md for the full CSS variable definitions and the next-themes setup.


CSS Variable Quick Reference

/* Auth / Register screen specific variables */ :root { --auth-bg: #0D1117; --auth-bg-register: #080D1A; --auth-card-bg: #161B27; --auth-input-bg: #1E2435; --auth-border: #2A3347; --auth-accent: #7C5CFC; --auth-accent-hover: #5B3FD4; --auth-success: #22C55E; --auth-panel-from: #3B0066; --auth-panel-to: #6B21A8; /* Typography */ --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif; /* Radii */ --radius-input: 6px; --radius-card: 16px; --radius-button: 8px; }

© 2026 Leadmetrics — Internal use only