AgentSkillsCN

Design System

设计系统

SKILL.md

Design System Skill

Purpose: Reference this skill when building UI components, styling elements, or working with visual design in Morperhaus Concerts.

When to use:

  • Creating new components
  • Styling existing components
  • Adding animations or interactions
  • Working with colors or typography
  • Building for specific scenes

Quick Reference

Scene Components

SceneNameComponentPath
1TimelineScene1Herosrc/components/scenes/Scene1Hero.tsx
2VenuesScene2Venuessrc/components/scenes/Scene2Venues.tsx
3GeographyScene3Mapsrc/components/scenes/Scene3Map.tsx
4ArtistsScene4Bandssrc/components/scenes/Scene4Bands.tsx
5GenresScene5Genressrc/components/scenes/Scene5Genres.tsx

Scene Backgrounds

SceneNameBackgroundText
1Timeline#ffffff (white)Dark
2VenuesGradient #1e1b4b → #581c87White
3Geography#111827 (charcoal)White
4Genres#ede9fe (soft violet)Dark
5Artists#fafaf9 (warm stone)Dark

Typography

RoleFontUsage
DisplayPlayfair DisplayTitles, stat numbers, headers
BodySource Sans 3Everything else

Button Patterns

Primary Toggles (sort, filter, view mode):

  • Dark scenes: bg-gray-800 inactive → bg-indigo-600 active
  • Light scenes: bg-white border inactive → bg-violet-600 active

Secondary Actions (reset, close):

  • Dark scenes: bg-white/10 backdrop-blur-sm
  • Light scenes: bg-white/80 backdrop-blur-sm

Inputs (search, text fields):

  • All scenes: bg-white/10 backdrop-blur-sm border-white/20

Genre Colors

Deep jewel tones for concert poster aesthetic:

GenreHexTailwind-ish
New Wave#1e40afblue-800
Punk#991b1bred-800
Alternative#5b21b6violet-800
Ska#f59e0bamber-500
Indie Rock#0ea5e9sky-500
Electronic#06b6d4cyan-500
Pop Rock#dc2626red-600
Pop Punk#ec4899pink-500
Classic Rock#92400eamber-800
Jazz#4338caindigo-700
Reggae#16a34agreen-600
Metal#18181bzinc-900
Hip Hop#ea580corange-600
R&B/Soul#7c3aedviolet-600
Folk/Country#a16207yellow-700
Funk#d97706amber-600
Blues#1e3a8ablue-800
World#14b8a6teal-500
Experimental#a855f7purple-500
Other#6b7280gray-500

TypeScript:

typescript
import { GENRE_COLORS, getGenreColor } from '@/constants/colors';
const color = getGenreColor('New Wave'); // '#1e40af'

Typography Scale

ElementFontSizeWeightTracking
Scene TitlePlayfairtext-5xl md:text-7xl400-0.02em
Stat NumberPlayfairtext-5xl md:text-6xl400-0.02em
Section HeaderSource Sanstext-2xl600-0.01em
SubtitleSource Sanstext-lg md:text-xl4000
BodySource Sanstext-base4000
LabelSource Sanstext-sm5000
CaptionSource Sanstext-xs5000.05em (uppercase)

Usage:

jsx
<h1 className="font-serif text-7xl tracking-tight">The Music</h1>
<p className="font-sans text-xl text-gray-500">A diverse journey</p>

Animation Standards

Entry Animation

typescript
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }}

Stagger Delays

  • Title: delay: 0
  • Visualization: delay: 0.2
  • Footer: delay: 0.4

Hover Effects

  • Duration: 200ms
  • Cards: scale(1.02) + shadow increase
  • Buttons: Background color transition

Standard Easing

  • General: cubic-bezier(0.4, 0, 0.2, 1) (ease-out)
  • Slide panels: cubic-bezier(0.4, 0, 0.2, 1), 400ms

Component Patterns

Primary Toggle Button (Dark Scene)

tsx
<button
  className={`px-6 py-3 rounded-lg text-sm font-medium transition-all duration-200 min-h-[44px] ${
    isActive
      ? 'bg-indigo-600 text-white'
      : 'bg-gray-800 text-gray-400 hover:bg-gray-700'
  }`}
>
  {label}
</button>

Primary Toggle Button (Light Scene)

tsx
<button
  className={`px-6 py-3 rounded-lg text-sm font-medium transition-all duration-200 min-h-[44px] ${
    isActive
      ? 'bg-violet-600 text-white'
      : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-300'
  }`}
>
  {label}
</button>

Search Input (All Scenes)

tsx
<input
  type="text"
  className="w-full px-4 py-3 bg-white/10 backdrop-blur-sm border border-white/20
    rounded-lg text-white placeholder-white/60
    focus:outline-none focus:border-purple-400 focus:ring-2 focus:ring-purple-500/30
    transition-all duration-200"
  placeholder="Search..."
/>

Secondary Button (Dark Scene)

tsx
<button
  className="px-6 py-3 bg-white/10 backdrop-blur-sm border border-white/20
    rounded-lg text-white font-sans text-sm font-medium
    hover:bg-white/20 transition-all duration-200 min-h-[44px]"
>
  Reset View
</button>

Secondary Button (Light Scene)

tsx
<button
  className="px-6 py-3 bg-white/80 backdrop-blur-sm border border-gray-300
    rounded-lg text-gray-900 font-sans text-sm font-medium
    hover:bg-white transition-all duration-200 shadow-sm min-h-[44px]"
>
  Reset View
</button>

Spacing Standards

ContextValueTailwind
Scene paddingpy-20 px-8py-20 px-8
Title → Visualization48pxmb-12
Visualization → Footer32pxmt-8
Between cards12pxgap-3
Button padding24px × 12pxpx-6 py-3

Z-Index Layers

LayerZ-IndexUsage
Base content0Scene backgrounds
Floating UI10Filter panels, tooltips
Overlays20Modals, gatefold
Popups30Map popups, dropdowns
Toast40Notifications
Navigation50Fixed headers

Accessibility Requirements

  • Min touch target: 44×44px (min-h-[44px])
  • Focus visible: Purple ring (focus:ring-2 focus:ring-purple-500/30)
  • Color contrast: WCAG AA minimum
  • Keyboard nav: All interactive elements focusable
  • ARIA labels: On icon-only buttons

Decision Tree: Which Pattern?

code
Is this a PRIMARY scene control (sort, filter, view)?
├─ YES → Use SOLID background
│   ├─ Dark scene → gray-800/indigo-600
│   └─ Light scene → white/violet-600
│
└─ NO → Is it an input or secondary action?
    ├─ Input → Use GLASSMORPHISM (white/10)
    └─ Secondary → Use GLASSMORPHISM
        ├─ Dark scene → white/10
        └─ Light scene → white/80

Anti-Patterns

Don't add icons to buttons without explicit approval ❌ Don't use glassmorphism for primary controlsDon't mix patterns for same component type across scenes ❌ Don't use genre colors for UI elements (reserved for data viz) ❌ Don't skip min-height on interactive elements


Source Files

For complete specifications, see:

  • docs/design/color-specification.md — Full color palette
  • docs/design/scene-design-guide.md — Scene layouts and typography
  • docs/design/ui-component-patterns.md — Component code examples
  • docs/design/changelog-style-guide.md — Changelog entry writing

Last Updated: 2026-01-06