Bluewoo HRMS
Design System

Design Tokens

Complete color, spacing, shadow, and typography specifications

Design Tokens

All design tokens extracted from the HRMSElegance prototype. Use these exact values.

Color System

Primary Colors

NameHSLHexTailwindCSS Variable
Primary205 100% 47.1%#008CF0blue-500--primary
Primary Foreground0 0% 100%#FFFFFFwhite--primary-foreground
Secondary233 19.4% 27.3%#383B53slate-700--secondary
Secondary Foreground0 0% 100%#FFFFFFwhite--secondary-foreground

Background Colors

NameHSLHexUsageCSS Variable
Background240 14% 96%#F2F2F7Main app background--background
Card0 0% 100%#FFFFFFCards, modals, popovers--card
Muted240 5% 96%#F4F4F5Muted/subtle areas--muted
Accent240 14% 96%#F2F2F7Accent backgrounds--accent

Text Colors

NameHSLHexTailwindCSS Variable
Foreground0 0% 0%#000000gray-900--foreground
Card Foreground0 0% 0%#000000gray-900--card-foreground
Muted Foreground240 4% 46%#8E8E93gray-500--muted-foreground

Status Colors

StatusHSLHexTailwindCSS Variable
Success96 74.6% 43.5%#52C41Agreen-500--success
Warning40 95.8% 52.9%#FAAD14amber-500--warning
Error359 100% 65.1%#FF4D4Fred-500--error
Destructive359 100% 65.1%#FF4D4Fred-500--destructive

Border & Input Colors

NameHSLHexCSS Variable
Border240 5.9% 90%#E4E4E7--border
Input240 5.9% 90%#E4E4E7--input
Ring205 100% 47.1%#008CF0--ring
NameLight ModeDark ModeCSS Variable
Sidebar BG#FFFFFF (bg-card)#1C1C1E--sidebar
Sidebar Foreground#000000#FAFAFA--sidebar-foreground
Sidebar Primary#008CF0#008CF0--sidebar-primary
Sidebar Accent#383B53#2C2C2E--sidebar-accent
Sidebar Border#E4E4E7#383B53--sidebar-border

Chart Colors

ChartHSLHexTailwindCSS Variable
Chart 1205 100% 47.1%#008CF0blue-500--chart-1
Chart 296 74.6% 43.5%#52C41Agreen-500--chart-2
Chart 340 95.8% 52.9%#FAAD14amber-500--chart-3
Chart 4359 100% 65.1%#FF4D4Fred-500--chart-4
Chart 5178 47.5% 59.2%#5CBDBDcyan-400--chart-5

Dark Mode Colors

NameLight Mode HSLDark Mode HSLLight HexDark Hex
Background240 14% 96%0 0% 0%#F2F2F7#000000
Foreground0 0% 0%0 0% 98%#000000#FAFAFA
Card0 0% 100%240 4% 11%#FFFFFF#1C1C1E
Muted240 5% 96%240 3.7% 15.9%#F4F4F5#27272A
Border240 5.9% 90%240 3.7% 15.9%#E4E4E7#27272A

Gradient Definitions

Stats Card Gradients

PurposeGradient ClassesStart → End
Employees/Primaryfrom-blue-500 to-blue-600#3B82F6 → #2563EB
On Leave/Warningfrom-amber-400 to-orange-500#FBBF24 → #F97316
Pending/Secondaryfrom-violet-500 to-purple-600#8B5CF6 → #9333EA
Open Positions/Successfrom-emerald-400 to-green-500#34D399 → #22C55E
Upcoming Eventfrom-indigo-900 to-indigo-950#312E81 → #1E1B4B

AI Button Gradient

bg-gradient-to-br from-violet-500 via-purple-500 to-fuchsia-500
/* #8B5CF6 → #A855F7 → #D946EF */

Shadow System

Content Shadows

ComponentLight ModeDark Mode
Content Cardshadow-lg shadow-gray-200/50shadow-lg shadow-black/40
Stats Cardshadow-lgshadow-lg
Stats Card Hovershadow-xlshadow-xl
Sidebarshadow-2xl shadow-black/5shadow-2xl shadow-black/5

Button Shadows

Button TypeShadow
Primaryshadow-lg shadow-primary/25
Primary Hovershadow-primary/35
AI Buttonshadow-xl shadow-violet-500/30
AI Button Hovershadow-2xl shadow-violet-500/40

Border Radius System

SizeCSS VariableTailwindPixelsUsage
Base--radiusrounded-lg8pxDefault buttons
Small--radius-smrounded-md6pxInputs, badges
Medium--radius-mdrounded-lg8pxMedium elements
Large--radius-lgrounded-xl12pxLarge buttons
XL--radius-xlrounded-2xl16pxCards (required)
Full-rounded-full9999pxPill buttons, avatars

Important: Cards MUST use rounded-2xl (16px).


Spacing System

Card Spacing

PropertyValueTailwindUsage
Card Padding24pxp-6Minimum for all cards
Card Gap24pxgap-6Between cards
Section Gap32pxgap-8Between sections

Layout Spacing

ElementDesktopMobile
Sidebar Width256px (w-64)-
TopBar Height64px (h-16)64px
Page Paddingpx-8 py-6px-4 py-4
Content Max Width-100%

Typography

Font Stack

font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

Heading Styles

LevelClassesUsage
H1text-4xl font-semibold tracking-tightPage titles
H2text-2xl font-semibold tracking-tightSection headings
H3text-lg font-semibold leading-none tracking-tightCard titles
H4text-base font-semiboldSubsection headings

Body Text Styles

TypeClassesUsage
Defaulttext-base text-foregroundPrimary text
Mutedtext-sm text-muted-foregroundSecondary text
Labeltext-sm font-mediumForm labels
Smalltext-xs text-muted-foregroundCaptions

Stats Card Typography

ElementClasses
Labeltext-white/80 text-sm font-medium
Valuetext-4xl font-semibold tracking-tight

Animation & Transitions

Tailwind Transitions

TypeClassesDuration
Defaulttransition-all duration-200200ms
Hover Effectstransition-all duration-300300ms
Color Onlytransition-colors150ms
Transform Onlytransition-transform150ms

Hover Effects

ComponentEffect
Stats Cardhover:shadow-xl hover:-translate-y-1
Buttonhover:scale-[1.02] active:scale-95
AI Buttonhover:scale-105 active:scale-95

Framer Motion Presets

// Modal/Dialog
const modalVariants = {
  initial: { opacity: 0, y: 20, scale: 0.95 },
  animate: { opacity: 1, y: 0, scale: 1 },
  exit: { opacity: 0, y: 20, scale: 0.95 },
};

const springTransition = {
  type: "spring",
  damping: 25,
  stiffness: 300
};

// Button entrance
const buttonVariants = {
  initial: { scale: 0.8, opacity: 0 },
  animate: { scale: 1, opacity: 1 },
  exit: { scale: 0.8, opacity: 0 },
};

// Stats card stagger
const cardVariants = {
  initial: { opacity: 0, scale: 0.8 },
  animate: { opacity: 1, scale: 1 },
};

Keyframe Animations

@keyframes accordion-down {
  from { height: 0 }
  to { height: var(--radix-accordion-content-height) }
}

@keyframes accordion-up {
  from { height: var(--radix-accordion-content-height) }
  to { height: 0 }
}

TypeScript Token Object

Use this in your code for type-safe token access:

export const designTokens = {
  colors: {
    primary: {
      main: '#008CF0',
      foreground: '#FFFFFF',
      hsl: '205 100% 47.1%',
    },
    secondary: {
      main: '#383B53',
      foreground: '#FFFFFF',
      hsl: '233 19.4% 27.3%',
    },
    background: {
      main: '#F2F2F7',
      card: '#FFFFFF',
      muted: '#F4F4F5',
    },
    status: {
      success: '#52C41A',
      warning: '#FAAD14',
      error: '#FF4D4F',
    },
  },
  gradients: {
    employees: 'from-blue-500 to-blue-600',
    onLeave: 'from-amber-400 to-orange-500',
    pending: 'from-violet-500 to-purple-600',
    openPositions: 'from-emerald-400 to-green-500',
    aiButton: 'from-violet-500 via-purple-500 to-fuchsia-500',
  },
  shadows: {
    card: 'shadow-lg shadow-gray-200/50 dark:shadow-black/40',
    statsCard: 'shadow-lg',
    button: 'shadow-lg shadow-primary/25',
    aiButton: 'shadow-xl shadow-violet-500/30',
  },
  radius: {
    card: 'rounded-2xl',
    button: 'rounded-lg',
    pill: 'rounded-full',
    input: 'rounded-md',
  },
  spacing: {
    cardPadding: 'p-6',
    cardGap: 'gap-6',
    sectionGap: 'gap-8',
  },
} as const;