Design Lab Skills
"Skills are procedural memory — what the team knows how to do, encoded as repeatable patterns."
Guardian: Leyla (Flow Gate, 417 Hz) + Alera (Voice Gate, 741 Hz) Quality Standard: Premium — every output must meet the Design Lab quality gates
skill: design-lab-page
Creates a new Design Lab evolution page with consistent structure, interactive demos, and Arcanean narrative.
Invocation
/design-lab-page create v11 "Page Title" "Brief description"
/design-lab-page create v12 "Animation Choreography" "Advanced animation sequencing and orchestration patterns"
What It Does
- Creates
arcanea.ai/app/design-lab/vN/page.tsxwith the standard structure - Updates the
evolutionStagesarray inapp/design-lab/page.tsx - Updates the
labVersionsarray inapp/design-lab/layout.tsx - Generates hero section, demo sections, code patterns, and navigation footer
Page Structure Generated
┌─────────────────────────────────────────┐
│ Badge + Hero Title + Description │ ← Hero Section
├─────────────────────────────────────────┤
│ System Stats (if applicable) │ ← Stats Grid
├─────────────────────────────────────────┤
│ Interactive Demo 1 │ ← Demo Section
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │Card │ │Card │ │Card │ │
│ └─────┘ └─────┘ └─────┘ │
├─────────────────────────────────────────┤
│ ── section-divider ── │
├─────────────────────────────────────────┤
│ Interactive Demo 2 │ ← Demo Section
│ [Live preview area with controls] │
├─────────────────────────────────────────┤
│ Code Patterns │ ← Pattern Docs
│ ┌────────────────────────────────┐ │
│ │ glass rounded-3xl p-8 │ │
│ │ Copy-ready code snippets │ │
│ └────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ ← Previous Stage Next Stage → │ ← Navigation Footer
└─────────────────────────────────────────┘
Template
'use client'
import { useState } from 'react'
import { motion } from 'framer-motion'
import Link from 'next/link'
import { Badge } from '@/components/ui/badge'
import { Button } from '@/components/ui/button'
import {
staggerContainer,
staggerItem,
cosmicFadeIn,
cosmicFadeInUp,
fadeInViewport,
} from '@/lib/animations'
import { cn } from '@/lib/utils'
import { IconName, ArrowRight, ArrowLeft } from 'lucide-react'
export default function DesignLabVN() {
return (
<div className="space-y-20">
{/* Hero */}
<motion.section
variants={staggerContainer}
initial="hidden"
animate="visible"
className="text-center pt-8"
>
<motion.div variants={cosmicFadeIn}>
<Badge variant="crystal" className="mb-6 font-sans text-xs tracking-wider px-4 py-1">
<IconName className="w-3.5 h-3.5 mr-2" />
VN — STAGE NAME
</Badge>
</motion.div>
<motion.h1
variants={cosmicFadeInUp}
className="text-fluid-5xl font-display text-white mb-6 leading-tight"
>
Stage Title
<span className="block text-gradient-cosmic">Subtitle</span>
</motion.h1>
<motion.p
variants={cosmicFadeIn}
className="text-fluid-lg font-body text-text-secondary max-w-3xl mx-auto mb-10 leading-relaxed"
>
Description of what this evolution stage covers and why it matters.
</motion.p>
</motion.section>
{/* Demo sections go here */}
{/* Navigation Footer */}
<div className="flex items-center justify-between pt-8 border-t border-white/10">
<Link href="/design-lab/vPREV" className="group flex items-center gap-2 text-text-secondary hover:text-white transition-colors">
<ArrowLeft className="w-4 h-4 group-hover:-translate-x-1 transition-transform" />
<div>
<div className="text-xs font-sans text-text-muted">Previous</div>
<div className="text-sm font-display">Previous Stage</div>
</div>
</Link>
<Link href="/design-lab/vNEXT" className="group flex items-center gap-2 text-text-secondary hover:text-white transition-colors text-right">
<div>
<div className="text-xs font-sans text-text-muted">Next</div>
<div className="text-sm font-display">Next Stage</div>
</div>
<ArrowRight className="w-4 h-4 group-hover:translate-x-1 transition-transform" />
</Link>
</div>
</div>
)
}
Quality Checklist
-
'use client'directive present - Imports animations from
@/lib/animations - Hero section uses
staggerContainer+cosmicFadeInUp - Demo sections use
fadeInViewportfor scroll reveals - Badge variant="crystal" for section labels
- Interactive demos use
useStatefor state management - Prev/next navigation footer present
- No raw hex colors
- Responsive on mobile (375px+)
-
evolutionStagesin hub page updated -
labVersionsin layout updated
skill: design-token-audit
Audits the current design token system for completeness, consistency, and usage coverage.
Invocation
/design-token-audit # Full audit
/design-token-audit colors # Audit only color tokens
/design-token-audit typography # Audit only typography tokens
/design-token-audit animations # Audit only animation tokens
What It Does
- Reads
arcanea.ai/tailwind.config.tsand extracts all defined tokens - Reads
arcanea.ai/app/globals.cssand extracts all CSS custom properties - Searches all
.tsxfiles for token usage patterns - Generates a comprehensive report
Audit Report Structure
TOKEN AUDIT REPORT
==================
COLORS:
defined: 45
used: 42
unused: [list of unused tokens]
missing: [tokens referenced in code but not defined]
TYPOGRAPHY:
fluid_sizes: 11
font_families: 4
coverage: [which sizes are actually used in pages]
ANIMATIONS:
css_keyframes: 40+
framer_variants: 30+
unused_variants: [defined but never imported]
GLASS_TIERS:
defined: 3 (subtle, standard, strong)
mobile_overrides: [check reduced blur values]
high_contrast: [check fallback exists]
COMPONENT_VARIANTS:
badge_variants: [list]
button_variants: [list]
button_sizes: [list]
missing_elemental: [components without full elemental set]
RECOMMENDATIONS:
- Remove unused tokens: [list]
- Add missing tokens: [list]
- Standardize naming: [inconsistencies found]
Checks Performed
| Check | What It Validates |
|---|---|
| Token Definition | All CSS custom properties are in globals.css :root |
| Tailwind Extension | All custom tokens are in tailwind.config.ts extend |
| Usage Coverage | Every defined token is used in at least one component |
| Naming Convention | Tokens follow cosmic-*, arcane-*, text-* patterns |
| Elemental Completeness | All 7 elements have color tokens (crystal, fire, water, void, gold, wind, earth) |
| Bright Variants | Elements that need bright variants have them |
| Opacity Scale | Elemental colors have consistent opacity usage (10, 20, 30, 40, 60, 80) |
| Mobile Overrides | Glass blur values are reduced for mobile in @media (max-width: 768px) |
| Accessibility | High-contrast overrides exist in @media (prefers-contrast: high) |
| Reduced Motion | Animation fallback exists in @media (prefers-reduced-motion: reduce) |
skill: component-variant-builder
Creates a new UI component with CVA variants following the established Badge/Button pattern.
Invocation
/component-variant-builder Input # Create an Input component
/component-variant-builder Card # Create a Card component
/component-variant-builder Toggle # Create a Toggle component
What It Does
- Creates
arcanea.ai/components/ui/{name}.tsx - Defines CVA variants with full elemental set
- Adds TypeScript types with
VariantProps - Implements
React.forwardRefwithdisplayName - Exports both the component and the variants function
Generated Component Structure
import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const {name}Variants = cva(
// Base styles: layout, transitions, focus ring
"inline-flex items-center transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-arcane-crystal/50 focus-visible:ring-offset-2 focus-visible:ring-offset-cosmic-void",
{
variants: {
variant: {
default: "/* default styles */",
crystal: "border-arcane-crystal/20 text-arcane-crystal bg-arcane-crystal/10",
fire: "border-arcane-fire/20 text-arcane-fire bg-arcane-fire/10",
water: "border-arcane-water/20 text-arcane-water bg-arcane-water/10",
void: "border-arcane-void/30 text-arcane-void-bright bg-arcane-void/10",
gold: "border-arcane-gold/20 text-arcane-gold bg-arcane-gold/10",
earth: "border-arcane-earth/20 text-arcane-earth bg-arcane-earth/10",
},
size: {
default: "/* default size */",
sm: "/* small size */",
lg: "/* large size */",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
export interface {Name}Props
extends React.HTMLAttributes<HTMLDivElement>,
VariantProps<typeof {name}Variants> {}
const {Name} = React.forwardRef<HTMLDivElement, {Name}Props>(
({ className, variant, size, ...props }, ref) => {
return (
<div
ref={ref}
className={cn({name}Variants({ variant, size }), className)}
{...props}
/>
)
}
)
{Name}.displayName = "{Name}"
export { {Name}, {name}Variants }
Elemental Variant Pattern
The standard elemental variant pattern uses three layers:
border: border-arcane-{element}/20 (subtle border)
text: text-arcane-{element} (full color text)
bg: bg-arcane-{element}/10 (very subtle background)
For Void, use slightly higher opacity: border-arcane-void/30 and text-arcane-void-bright
Quality Checklist
- Uses CVA with
variantsanddefaultVariants - All 6 elemental variants present (crystal, fire, water, void, gold, earth)
- Focus ring uses
arcane-crystal/50withcosmic-voidoffset - TypeScript interface extends
VariantProps<typeof variants> -
React.forwardRefwraps the component -
displayNameis set - Both component and variants function are exported
-
cn()is used for class composition - No
anytypes
skill: animation-library-extend
Adds new animations to the Arcanean animation system with proper typing, reduced motion support, and documentation.
Invocation
/animation-library-extend framer "pulseGlow" "Pulsating glow effect for active elements"
/animation-library-extend css "portal-open" "Gate-opening animation for navigation"
/animation-library-extend both "elementalShift" "Transition between elemental themes"
What It Does
For Framer Motion variants (framer):
- Adds typed
Variantsexport toarcanea.ai/lib/animations.ts - Groups with related animations using section comments
- Follows the
hidden/visibleorrest/hover/tapconvention
For CSS keyframes (css):
- Adds
@keyframesdefinition intailwind.config.tsundertheme.extend.keyframes - Adds corresponding
animationentry intheme.extend.animation - Ensures the animation utility is available as a Tailwind class
For both:
- Creates both a Framer Motion variant and a CSS keyframe version
- Documents the animation in the Design Lab
Framer Motion Variant Template
// === CATEGORY NAME ===
export const variantName: Variants = {
hidden: { /* initial state */ },
visible: {
/* target state */
transition: {
duration: 0.6,
ease: [0.25, 0.46, 0.45, 0.94], // Arcanean ease
},
},
}
CSS Keyframe Template
// In tailwind.config.ts → theme.extend.keyframes
'animation-name': {
'0%': { /* start state */ },
'50%': { /* mid state (optional) */ },
'100%': { /* end state */ },
},
// In theme.extend.animation
'animation-name': 'animation-name 2s ease-in-out infinite',
Standard Easing
The Arcanean ease curve: [0.25, 0.46, 0.45, 0.94] — a smooth deceleration that feels natural and cosmic.
Reduced Motion Requirements
- All CSS animations are automatically handled by the global
@media (prefers-reduced-motion: reduce)rule inglobals.css - For Framer Motion, check
useReducedMotion()if the animation runs continuously - Never remove animations entirely — reduce them to 0.01ms duration
Quality Checklist
- Framer variant typed as
Variantsfrom framer-motion - Uses the Arcanean ease curve
[0.25, 0.46, 0.45, 0.94](or spring physics with explicit stiffness/damping) - Only animates GPU-friendly properties (transform, opacity, filter)
- CSS keyframe added to tailwind.config.ts keyframes AND animation
- Reduced motion handled (global CSS rule covers CSS animations; Framer checked separately if continuous)
- Grouped with related animations using section comments
- Named with camelCase for Framer variants, kebab-case for CSS keyframes
skill: glass-morphism-builder
Creates glass morphism components and effects with proper mobile optimization, high-contrast fallbacks, and optional interactive glow.
Invocation
/glass-morphism-builder panel "Feature panel with strong glass"
/glass-morphism-builder modal "Modal overlay with standard glass"
/glass-morphism-builder tooltip "Tooltip with subtle glass"
/glass-morphism-builder interactive "Card with mouse-tracking glow"
What It Does
- Generates the component with appropriate glass tier
- Includes mobile-optimized blur values
- Adds high-contrast mode fallback
- Optionally adds mouse-tracking glow effect
Glass Tier Selection Guide
| Use Case | Tier | Class | When |
|---|---|---|---|
| Background overlay | Subtle | .glass-subtle |
Behind content, ambient |
| Card container | Standard | .glass |
Primary cards, sections |
| Fixed header | Strong | .glass-strong |
Sticky elements, modals |
| Featured section | Standard + border-gradient | .glass .border-gradient |
Highlighted content |
Mouse-Tracking Glow Implementation
// Component with interactive glow
function GlowPanel({ children }: { children: React.ReactNode }) {
const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {
const rect = e.currentTarget.getBoundingClientRect()
const x = ((e.clientX - rect.left) / rect.width) * 100
const y = ((e.clientY - rect.top) / rect.height) * 100
e.currentTarget.style.setProperty('--mouse-x', `${x}%`)
e.currentTarget.style.setProperty('--mouse-y', `${y}%`)
}
return (
<div
className="glow-card rounded-2xl p-6"
>
{children}
</div>
)
}
Mobile Optimization Rules
/* Standard glass: 16px → 8px on mobile */
/* Strong glass: 24px → 12px on mobile */
/* Mouse glow: disabled on touch devices via @media (hover: none) */
High-Contrast Mode Rules
/* Glass background: opacity increased to 0.95 */
/* Borders: thickness increased to 2px, opacity to 0.8 */
/* Glow text: text-shadow removed entirely */
Quality Checklist
- Correct glass tier selected for the use case
- Mobile blur reduction verified (max-width: 768px media query)
- High-contrast fallback verified (prefers-contrast: high)
- Touch devices: mouse glow disabled (@media hover: none)
- Uses CSS custom properties for blur/bg/border values
-
pointer-events: noneon glow pseudo-elements - Rounded corners consistent with design system (
rounded-2xlfor cards,rounded-3xlfor panels)
skill: design-system-sync
Syncs design system changes across the Arcanea repository ecosystem.
Invocation
/design-system-sync check # Check for drift between repos
/design-system-sync propagate # Push changes from arcanea.ai to ecosystem
/design-system-sync changelog # Generate changelog entry for recent changes
What It Does
- Compares design tokens between
arcanea.ai/andarcanea-ecosystem/ - Identifies drift (tokens present in one but not the other)
- Generates a sync plan with specific file changes
- Optionally propagates changes and creates a changelog entry
Repository Map
| Source of Truth | File | Syncs To |
|---|---|---|
arcanea.ai/app/globals.css |
CSS custom properties | arcanea-ecosystem/arcanea/apps/web/app/globals.css |
arcanea.ai/tailwind.config.ts |
Tailwind tokens | arcanea-ecosystem/arcanea/apps/web/tailwind.config.ts |
arcanea.ai/lib/animations.ts |
Framer variants | arcanea-ecosystem/arcanea/apps/web/lib/animations.ts |
arcanea.ai/components/ui/ |
UI components | arcanea-ecosystem/arcanea/packages/ui/ |
Sync Report Structure
DESIGN SYSTEM SYNC REPORT
==========================
SOURCE: arcanea.ai (v2.0)
TARGET: arcanea-ecosystem
DRIFT DETECTED:
colors:
- arcane-wind: present in source, missing in target
- arcane-earth-bright: present in source, missing in target
animations:
- cosmicGlow: new in source
- bouncySpring: new in source
components:
- Badge: source has 'earth' variant, target does not
SYNC PLAN:
files_to_update:
- arcanea-ecosystem/.../globals.css (add 2 CSS properties)
- arcanea-ecosystem/.../tailwind.config.ts (add 2 color tokens)
- arcanea-ecosystem/.../animations.ts (add 2 variants)
- arcanea-ecosystem/.../badge.tsx (add earth variant)
CHANGELOG:
version: 2.0.x
date: YYYY-MM-DD
changes:
- Added arcane-wind and arcane-earth-bright color tokens
- Added cosmicGlow and bouncySpring animation variants
- Added earth variant to Badge component
Sync Rules
arcanea.aiis the source of truth for design tokens- Never sync backwards (ecosystem to arcanea.ai) without explicit approval
- Components sync from
arcanea.ai/components/ui/toarcanea-ecosystem/arcanea/packages/ui/ - Animation exports must maintain identical names and types across repos
- CSS custom properties must have identical values across repos
Quality Checklist
- Both repos compile TypeScript without errors after sync
- No token name conflicts or collisions
- All synced animations have identical variant signatures
- CSS custom property values match exactly
- Component variant sets are identical
- Changelog entry created with date and version
Skill Composition
Skills can be composed for complex tasks:
New Evolution Stage (Full Pipeline)
1. /design-token-audit → Identify what's new
2. /component-variant-builder → Build new components if needed
3. /animation-library-extend → Add new animations if needed
4. /glass-morphism-builder → Create glass effects if needed
5. /design-lab-page create vN → Build the showcase page
6. /design-system-sync propagate → Sync to ecosystem
Component Refresh
1. /design-token-audit colors → Check token coverage
2. /component-variant-builder → Rebuild with updated variants
3. /design-system-sync propagate → Push to ecosystem
Animation Expansion
1. /animation-library-extend both → Add CSS + Framer variants
2. /design-lab-page → Update relevant showcase page
3. /design-system-sync propagate → Sync animations to ecosystem
"Every skill is a ritual. Every ritual produces consistent quality."