Design system
Edit colors per component below. Previews are independent until you save; saved colors apply across the app.
Typography
Type scale used across the app.
Page header
Header fill (Card)
--card
bg-card
Border (Border)
--border
border-border
Logo color (Primary)
--primary
bg-primary
App background
Page background (Background)
--background
bg-background
Headings
Page title (text-2xl)
Section title (text-lg)
Body (text-sm)
Page title (Foreground)
--foreground
text-foreground
Section title (Card foreground)
--card-foreground
text-card-foreground
Body (Foreground)
--foreground
text-foreground
Label, muted text, link button
Muted helper text for descriptions.
Text linkLabel (Foreground)
--foreground
text-foreground
Helper (Muted foreground)
--muted-foreground
text-muted-foreground
Link (Primary)
--primary
bg-primary
Badge
Fill (Primary)
--primary
bg-primary
Text (Primary foreground)
--primary-foreground
text-primary-foreground
Secondary fill (Secondary)
--secondary
bg-secondary
Secondary text (Secondary foreground)
--secondary-foreground
text-secondary-foreground
Inline code
Copy .env.example to .env.local
Body (Muted foreground)
--muted-foreground
text-muted-foreground
Code text (Foreground)
--foreground
text-foreground
Code bg (Muted)
--muted
bg-muted
Form controls
Input, Label, Select, Textarea, Switch, Tabs, and composed field components.
Input — empty
Border (Input)
--input
border-input
Fill (Card)
--card
bg-card
Text (Foreground)
--foreground
text-foreground
Placeholder (Muted foreground)
--muted-foreground
text-muted-foreground
Focus ring (Ring)
--ring
ring-ring
Input — filled
Border (Input)
--input
border-input
Fill (Card)
--card
bg-card
Text (Foreground)
--foreground
text-foreground
Select (admin filters)
Border (Input)
--input
border-input
Fill (Card)
--card
bg-card
Text (Foreground)
--foreground
text-foreground
Menu (Popover)
--popover
bg-popover
Menu text (Popover foreground)
--popover-foreground
text-popover-foreground
Menu item hover (Accent)
--accent
bg-accent
Menu item hover text (Accent foreground)
--accent-foreground
text-accent-foreground
AutoResizeTextarea — short
Border (Input)
--input
border-input
Fill (Card)
--card
bg-card
Text (Foreground)
--foreground
text-foreground
AutoResizeTextarea — long
Border (Input)
--input
border-input
Fill (Card)
--card
bg-card
Text (Foreground)
--foreground
text-foreground
PickerField — date & time
Label (Foreground)
--foreground
text-foreground
Input border (Input)
--input
border-input
Input fill (Card)
--card
bg-card
Icon (Muted foreground)
--muted-foreground
text-muted-foreground
VotingToggle (Switch)
Track on (Primary)
--primary
bg-primary
Track off (Input)
--input
border-input
Thumb (Background)
--background
bg-background
Label (Foreground)
--foreground
text-foreground
LyricsHighlightWordsField
Matched words appear in red in the admin lyrics preview. Remove all to disable highlighting.
- fuck
- shit
- bitch
- cunt
- whore
- nigga
- nigger
- retard
- retarded
Helper (Muted foreground)
--muted-foreground
text-muted-foreground
Chips (Muted)
--muted
bg-muted
Chip text (Foreground)
--foreground
text-foreground
Surfaces & cards
Card component and empty-state patterns.
Card — padded
Fill (Card)
--card
bg-card
Text (Foreground)
--foreground
text-foreground
Muted text (Muted foreground)
--muted-foreground
text-muted-foreground
Border (Border)
--border
border-border
Empty state (dashed)
Fill (Card)
--card
bg-card
Border (Border)
--border
border-border
Text (Foreground)
--foreground
text-foreground
Button (Primary)
--primary
bg-primary
Setup warning heading
Card (Card)
--card
bg-card
Heading
text-amber-800
Hardcoded — not a design token
Body (Muted foreground)
--muted-foreground
text-muted-foreground
Media & content
Domain components (unchanged) plus timestamps.
ExplicitBadge
Fill
bg-zinc-500
Hardcoded — not a design token
Text
text-white
Hardcoded — not a design token
SongTitleLine
Levitating
WAP
ETitle (Foreground)
--foreground
text-foreground
AlbumArt — fallback (sm / md / lg)
Border (Border)
--border
border-border
Fill (Muted)
--muted
bg-muted
Icon (Muted foreground)
--muted-foreground
text-muted-foreground
AlbumArt — with image (sm)
Border (Border)
--border
border-border
EventCover — card variant (placeholder)
Card (Card)
--card
bg-card
Placeholder
bg-zinc-50
Hardcoded — not a design token
Border
border-zinc-200
Hardcoded — not a design token
EventCover — thumbnail

Border
border-zinc-200
Hardcoded — not a design token
Placeholder
bg-zinc-50
Hardcoded — not a design token
EventArtPlaceholder

Fill
bg-zinc-50
Hardcoded — not a design token
Border (Border)
--border
border-border
RelativeTime (~2 hours ago)
Text (Muted foreground)
--muted-foreground
text-muted-foreground
Patterns (mocked)
Composite UI slices with fixture data — no API calls.
EventListCard
Card (Card)
--card
bg-card
Hover (Muted)
--muted
bg-muted
Title (Foreground)
--foreground
text-foreground
Meta (Muted foreground)
--muted-foreground
text-muted-foreground
Border (Border)
--border
border-border
DesignQueueRow — requested
Title (Foreground)
--foreground
text-foreground
Artist (Muted foreground)
--muted-foreground
text-muted-foreground
Time (Accent foreground)
--accent-foreground
text-accent-foreground
Vote active (Primary)
--primary
bg-primary
Art border (Border)
--border
border-border
DesignQueueRow — declined
Decline note (Destructive)
--destructive
bg-destructive
Title (Foreground)
--foreground
text-foreground
TrackPreviewBar (static controls)
Bar bg (Muted)
--muted
bg-muted
Title (Foreground)
--foreground
text-foreground
Artist (Muted foreground)
--muted-foreground
text-muted-foreground
Time (Accent foreground)
--accent-foreground
text-accent-foreground
Slider track (Muted)
--muted
bg-muted
Slider fill (Primary)
--primary
bg-primary
Slider thumb border (Ring)
--ring
ring-ring
Slider thumb fill (Background)
--background
bg-background
Play border (Border)
--border
border-border
Play fill (Background)
--background
bg-background
Play icon (Foreground)
--foreground
text-foreground
HighlightedLyrics
Body (Foreground)
--foreground
text-foreground
Highlight (Accent)
--accent
bg-accent
Table action buttons
Border (Border)
--border
border-border
Fill (Background)
--background
bg-background
Text (Foreground)
--foreground
text-foreground
Hover (Muted)
--muted
bg-muted
Sortable column header pattern
Muted label (Muted foreground)
--muted-foreground
text-muted-foreground
Active label (Foreground)
--foreground
text-foreground
Hover text (Primary)
--primary
bg-primary
Overlays
ModalShell wraps shadcn Dialog; guest search uses Sheet.
ModalShell (Dialog)
Overlay
bg-zinc-900/40
Hardcoded — not a design token
Surface (Popover)
--popover
bg-popover
Text (Popover foreground)
--popover-foreground
text-popover-foreground
Border (Border)
--border
border-border
Guest request flow
RequestSheet uses a full-height Sheet for search and a Dialog for confirm — preview on a live guest event.
Body (Muted foreground)
--muted-foreground
text-muted-foreground
Emphasis (Foreground)
--foreground
text-foreground
Code bg (Muted)
--muted
bg-muted
Icons
Lucide icons at h-4 / h-5. App logo uses the primary token for its mark color.
Logo
Logo color (icon & wordmark) (Primary)
--primary
bg-primary
Common sizes
Icon (Foreground)
--foreground
text-foreground
Caption (Muted foreground)
--muted-foreground
text-muted-foreground
Loading
Spinners for async UI — inline in buttons or centered in a region. Page chrome stays mounted; only the loading region updates.
Loading spinner
Spinner (Primary)
--primary
bg-primary
Loading state — default
Loading lyrics…
Spinner (Primary)
--primary
bg-primary
Message (Muted foreground)
--muted-foreground
text-muted-foreground
Loading state — muted spinner
Searching…
Spinner (Muted foreground)
--muted-foreground
text-muted-foreground
Message (Muted foreground)
--muted-foreground
text-muted-foreground
Loading state — inline
Searching…
Spinner (Muted foreground)
--muted-foreground
text-muted-foreground
Message (Muted foreground)
--muted-foreground
text-muted-foreground
Feature screens
Full-page composites — open real routes for manual QA.

