← Back to list
🎨

tailwind-design-system Checked

Build scalable design systems with Tailwind CSS v4, design tokens, component libraries, and respo…
🎨 Design & Creative skills By calesthio Version v1.0.0 Added 2026-09-07 Updated 2026-09-07 Source ↗
6.8Overall rating
2Views
6Downloads
56.5kStars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "tailwind-design-system" skill by following the instructions at https://skill123.me/install/tailwind-design-system.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/tailwind-design-system.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 6 KB
📊 Static rating
6.8/10
Trigger
6.5
Structure
5.3
Workflow
4.0
Content
9.0
Engineering
9.0
Security
9.5

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

Build scalable design systems with Tailwind CSS v4, design tokens, component libraries, and responsive patterns. Use when creating component libraries, implementing design systems, or standardizing UI patterns.

Tailwind Design System (v4)

Build production-ready design systems with Tailwind CSS v4, including CSS-first configuration, design tokens, component variants, responsive patterns, and accessibility.

> **Note**: This skill targets Tailwind CSS v4 (2024+). For v3 projects, refer to the upgrade guide.

Documentation

Build scalable design systems with Tailwind CSS v4, design tokens, component libraries, and responsive patterns. Use when creating component libraries, implementing design systems, or standardizing UI patterns.

Tailwind Design System (v4)

Build production-ready design systems with Tailwind CSS v4, including CSS-first configuration, design tokens, component variants, responsive patterns, and accessibility.

> **Note**: This skill targets Tailwind CSS v4 (2024+). For v3 projects, refer to the upgrade guide.

When to Use This Skill

  • Creating a component library with Tailwind v4
  • Implementing design tokens and theming with CSS-first configuration
  • Building responsive and accessible components
  • Standardizing UI patterns across a codebase
  • Migrating from Tailwind v3 to v4
  • Setting up dark mode with native CSS features

Key v4 Changes

| v3 Pattern | v4 Pattern |

| ------------------------------------- | --------------------------------------------------------------------- |

| tailwind.config.ts | @theme in CSS |

| @tailwind base/components/utilities | @import "tailwindcss" |

| darkMode: "class" | @custom-variant dark (&:where(.dark, .dark *)) |

| theme.extend.colors | @theme { --color-*: value } |

| require("tailwindcss-animate") | CSS @keyframes in @theme + @starting-style for entry animations |

Quick Start


/* app.css - Tailwind v4 CSS-first configuration */
@import "tailwindcss";

/* Define your theme with @theme */
@theme {
  /* Semantic color tokens using OKLCH for better color perception */
  --color-background: oklch(100% 0 0);
  --color-foreground: oklch(14.5% 0.025 264);

  --color-primary: oklch(14.5% 0.025 264);
  --color-primary-foreground: oklch(98% 0.01 264);

  --color-secondary: oklch(96% 0.01 264);
  --color-secondary-foreground: oklch(14.5% 0.025 264);

  --color-muted: oklch(96% 0.01 264);
  --color-muted-foreground: oklch(46% 0.02 264);

  --color-accent: oklch(96% 0.01 264);
  --color-accent-foreground: oklch(14.5% 0.025 264);

  --color-destructive: oklch(53% 0.22 27);
  --color-destructive-foreground: oklch(98% 0.01 264);

  --color-border: oklch(91% 0.01 264);
  --color-ring: oklch(14.5% 0.025 264);

  --color-card: oklch(100% 0 0);
  --color-card-foreground: oklch(14.5% 0.025 264);

  /* Ring offset for focus states */
  --color-ring-offset: oklch(100% 0 0);

  /* Radius tokens */
  --radius-sm: 0.25rem;
  --radius-md: 0.375rem;
  --radius-lg: 0.5rem;
  --radius-xl: 0.75rem;
View full documentation

/* Animation tokens - keyframes inside @theme are output when referenced by --animate-* variables */

--animate-fade-in: fade-in 0.2s ease-out;

--animate-fade-out: fade-out 0.2s ease-in;

--animate-slide-in: slide-in 0.3s ease-out;

--animate-slide-out: slide-out 0.3s ease-in;

@keyframes fade-in {

from {

opacity: 0;

}

to {

opacity: 1;

}

}

@keyframes fade-out {

from {

opacity: 1;

}

to {

opacity: 0;

}

}

@keyframes slide-in {

from {

transform: translateY(-0.5rem);

opacity: 0;

}

to {

transform: translateY(0);

opacity: 1;

}

}

@keyframes slide-out {

from {

transform: translateY(0);

opacity: 1;

}

to {

transform: translateY(-0.5rem);

opacity: 0;

}

}

}

/* Dark mode variant - use @custom-variant for class-based dark mode */

@custom-variant dark (&:where(.dark, .dark *));

/* Dark mode theme overrides */

.dark {

--color-background: oklch(14.5% 0.025 264);

--color-foreground: oklch(98% 0.01 264);

--color-primary: oklch(98% 0.01 264);

--color-primary-foreground: oklch(14.5% 0.025 264);

--color-secondary: oklch(22% 0.02 264);

--color-secondary-foreground: oklch(98% 0.01 264);

--color-muted: oklch(22% 0.02 264);

--color-muted-foreground: oklch(65% 0.02 264);

--color-accent: oklch(22% 0.02 264);

--color-accent-foreground: oklch(98% 0.01 264);

--color-destructive: oklch(42% 0.15 27);

--color-destructive-foreground: oklch(98% 0.01 264);

--color-border: oklch(22% 0.02 264);

--color-ring: oklch(83% 0.02 264);

--color-card: oklch(14.5% 0.025 264);

--color-card-foreground: oklch(98% 0.01 264);

--color-ring-offset: oklch(14.5% 0.025 264);

}

/* Base styles */

@layer base {

* {

@apply border-border;

}

body {

@apply bg-background text-foreground antialiased;

}

}



## Core Concepts

### 1. Design Token Hierarchy

Brand Tokens (abstract)

└── Semantic Tokens (purpose)

└── Component Tokens (specific)

Example:

oklch(45% 0.2 260) → --color-primary → bg-primary



### 2. Component Architecture

Base styles → Variants → Sizes → States → Overrides



## Patterns

### Pattern 1: CVA (Class Variance Authority) Components

// components/ui/button.tsx

import { Slot } from '@radix-ui/react-slot'

import { cva, type VariantProps } from 'class-variance-authority'

import { cn } from '@/lib/utils'

const buttonVariants = cva(

// Base styles - v4 uses native CSS variables

'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',

{

variants: {

variant: {

default: 'bg-primary text-primary-foreground hover:bg-primary/90',

destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',

outline: 'border border-border bg-background hover:bg-accent hover:text-accent-foreground',

secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',

ghost: 'hover:bg-accent hover:text-accent-foreground',

link: 'text-primary underline-offset-4 hover:underline',

},

size: {

default: 'h-10 px-4 py-2',

sm: 'h-9 rounded-md px-3',

lg: 'h-11 rounded-md px-8',

icon: 'size-10',

},

},

defaultVariants: {

variant: 'default',

size: 'default',

},

}

)

export interface ButtonProps

extends React.ButtonHTMLAttributes<HTMLButtonElement>,

VariantProps<typeof buttonVariants> {

asChild?: boolean

}

// React 19: No forwardRef needed

export function Button({

className,

variant,

size,

asChild = false,

ref,

...props

}: ButtonProps & { ref?: React.Ref<HTMLButtonElement> }) {

const Comp = asChild ? Slot : 'button'

return (

<Comp

className={cn(buttonVariants({ variant, size, className }))}

ref={ref}

{...props}

/>

)

}

// Usage

<Button variant="destructive" size="lg">Delete</Button>

<Button variant="outline">Cancel</Button>

<Button asChild><Link href="/home">Home</Link></Button>



### Pattern 2: Compound Components (React 19)

// components/ui/card.tsx

import { cn } from '@/lib/utils'

// React 19: ref is a regular prop, no forwardRef

export function Card({

className,

ref,

...props

}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> }) {

return (

<div

ref={ref}

className={cn(

'rounded-lg border border-border bg-card text-card-foreground shadow-sm',

className

)}

{...props}

/>

)

}

export function CardHeader({

className,

ref,

...props

}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> }) {

return (

<div

ref={ref}

className={cn('flex flex-col space-y-1.5 p-6', className)}

{...props}

/>

)

}

export function CardTitle({

className,

ref,

...props

}: React.HTMLAttributes<HTMLHeadingElement> & { ref?: React.Ref<HTMLHeadingElement> }) {

return (

<h3

ref={ref}

className={cn('text-2xl font-semibold leading-none tracking-tight', className)}

{...props}

/>

)

}

export function CardDescription({

className

Score breakdown

Trigger
6.5
What and multiple When scenarios present, weak When-Not beyond v3 note, moderate synonyms
Structure
5.3
867-line single SKILL.md with zero offload violates length rule; no redundant files
Workflow
4.0
Mostly descriptive pattern catalog; migration checklist helps but no error handling or verification loop
Content
9.0
Clean imperative writing, complete runnable code snippets, consistent formatting
Engineering
9.0
Valid frontmatter, only official tailwindcss.com link, no broken references
Security
9.5
Pure static reference content, no scripts, no network calls, no secrets
Accurate Tailwind v4 CSS-first reference with solid CVA patterns and migration checklist, but it is an 867-line knowledge dump with nothing offloaded and no task workflow or verification steps.