Skip to content

Design Rules Overview

snoo edited this page Apr 7, 2026 · 1 revision

Design Rules Overview

The toss seed defines 69 design rules in DESIGN-LANGUAGE.md. This page organizes them by category for quick reference.


Color Rules (Rules 1-4)

# Rule Key Detail
1 Single accent color for unity #721FE5 purple, used only on active/selected states
2 No pure black (#000) ever Darkest allowed: #2A2A2A. Default text: #3C3C3C
3 Impact colors at minimal size Status dots (6px) + text (11px) maximum
4 Status dot and text share the same color #22C55E dot + #22C55E text for "completed"

5-Level Grayscale

Level Hex Role
Strong #2A2A2A Strongest emphasis (donut center, briefing title)
Primary #3C3C3C Metrics, section titles
Secondary #6A6A6A Labels, captions
Tertiary #7A7A7A Subtitles, dates
Disabled #9B9B9B Inactive, placeholder

Accent Color Usage

Allowed: active nav, selected chart segment, progress fill, icon badge, pill toggle
Forbidden: body text, large background areas, borders, gradients

Typography Rules (Rules 5-7)

# Rule Key Detail
5 Big number + small unit (2:1 ratio) 48px number + 24px unit, always ms-0.5 gap
6 Labels are 12px uppercase + tracking-wide tracking-[0.05em], always font-medium
7 Only the 5-level grayscale for text No custom grays, no hex outside the 5 defined levels

Number-Unit Size Ratios

Context Number Unit Ratio
Hero metric 48px 24px 2:1
KPI metric 36px 18px 2:1
Donut center 24px 12px 2:1
Chart stat 18px 10px 1.8:1
List amount 17px 11px 1.5:1

Layout Rules (Rules 8-11)

# Rule Key Detail
8 mx-6 = single card, px-6 = multi-card/carousel Controls "floating" vs "full" feel
9 space-y-6 section gap everywhere 24px between all sections, no exceptions
10 4 section types only (A/B/C/D) Full card, Grid, Carousel, Hero
11 Section separation by card + whitespace only No <hr>, no border-b between sections

4 Section Types

Type Description Use Case
A Full Card Title inside card, mx-6, rounded-2xl p-6 Charts, lists, rankings
B Grid px-6, grid grid-cols-2 gap-4 KPI metrics (2x2)
C Carousel px-6, horizontal scroll, title outside card Briefing cards
D Hero mx-6, p-8, watermark bg, no title Primary metric

Information Architecture Rules (Rules 12-14)

# Rule Key Detail
12 Top-down information pyramid Hero (48px) -> KPI (36px) -> Detail (14px)
13 Max 4 data items per card KPI grid 4, donut legend 4, list 3-4
14 Cards are for data display, not actions No CTA buttons, no input fields inside cards

Information Pyramid

Top:    Hero metric (48px)      -- 1 key number
        KPI grid (36px)         -- 2-4 metrics
        Status summary (donut)  -- current state
        Alerts/briefings        -- attention items
        Charts                  -- trends
Bottom: Lists                   -- detailed data

Number Formatting Rules (Rules 15-16)

# Rule Key Detail
15 whitespace-nowrap on all number+unit combos No exceptions: hero, KPI, list, chart, donut
16 Integers for currency, 1 decimal for rates 1,870 (won), 68.4 (oil price), 12.4 (percent)

Large Number Formatting

Range Format Example
up to 9,999 comma + won 3,500
10K - 99.9M man (10K) unit 1,870 man-won
100M+ eok (100M) unit 3.8 eok-won

Interaction Rules (Rules 17-18)

# Rule Key Detail
17 Only donut/toggle are interactive; cards/list rows are static No card hover, no row highlight
18 transition-all default; donut uses duration-300 Buttons/nav use duration-fast (100ms)

Allowed Interactions

Element Interaction Feedback
Donut segment Tap to select/deselect opacity 0.3 <-> 1 + accent color
Period toggle Tap to switch bg-brand text-white
Bottom nav Tap to navigate text-brand
TopBar icon Tap Shadow change

Forbidden Interactions

  • Card hover/click effects
  • List row hover highlight
  • Swipe gestures (except carousel)
  • Long-press / context menu
  • active:scale on buttons (Toss uses color change only)

Visual Detail Rules (Rules 19-22)

# Rule Key Detail
19 Page background #FAFAFA (not pure white) Subtle warmth
20 Shadow opacity 4-8% shadow-card: 0 1px 3px rgba(0,0,0,0.04)
21 6-level opacity system (0.06 to 1.0) 0.06=watermark, 0.10=badge bg, 0.15=bg chart, 0.3=unselected
22 Background decorations only on hero cards overflow-hidden mandatory

Forbidden Patterns (Rules 23-29)

# Rule
23 No content outside cards (everything in bg-card rounded-2xl)
24 No accent-colored card backgrounds
25 No ad-hoc components (use 4 section types)
26 No card overlapping/stacking
27 No dividers between sections
28 No CTA buttons or input fields inside cards
29 No more than 5 list items in a single card

Extended Rules (Rules 30-69)

Scroll & Spacing (30-31)

  • Bottom nav clearance: pb-24
  • Scroll end padding: h-8
  • Fixed TopBar/BottomNav (no hide-on-scroll)

Loading States (32-33)

  • Skeleton matches final layout shape
  • No spinners inside cards
  • Skeleton delay: 300ms, min display: 300ms

Empty & Error States (34-35)

  • Show 0 as actual zero (never dash or hide)
  • Error per-card, not full page
  • Friendly tone: "We couldn't load the data" (not "Error 500")

Negative/Decline Display (36)

  • Down trend: text-destructive + TrendingDown icon + - prefix
  • Minus sign for negative amounts (no parentheses)

Text Overflow (37-38)

  • truncate for names, line-clamp-2 for briefing titles
  • Never shrink font size; scale the unit instead

Chart Rules (39-42)

  • Area chart: gradient fill, no dots, hidden Y axis
  • Bar chart: only max value gets accent color
  • Donut: selected = accent, unselected = grayscale at 0.3 opacity
  • Forbidden: 3D charts, dual Y axis, stacked bars, radar charts

Dark Mode (43-45)

  • Card (#1E1E1E) must be brighter than background (#121212)
  • Replace shadows with dark:border dark:border-white/6
  • Accent color gets brighter (#721FE5 -> #9B5FFF)

Button Rules (46-48)

  • 7 variants (brandSolid, neutral, secondary, destructive, outline, ghost, brandGhost)
  • 4 sizes (xs=pill, sm/md=rounded-lg, lg=rounded-xl)
  • Pressed state = one shade darker (no scale transform)

Accessibility (49-51)

  • Touch targets: 44x44px minimum
  • Color contrast: WCAG AA (4.5:1 for text, 3:1 for large text)
  • prefers-reduced-motion disables all animations

UX Writing (52-55)

  • Casual polite tone (Korean haeyo-che)
  • Active voice over passive
  • Positive framing
  • CTA = action verb + clear outcome

Anti-Dark Patterns (56)

  • No entry popups
  • No exit-prevention sheets
  • Always provide a close/dismiss option

Additional (57-69)

  • Icon strokeWidth inversely proportional to size
  • Custom icons: 24x24 viewBox, stroke-based, currentColor
  • Segment control (bg-card active, not bg-brand)
  • Drawer: right-side panel for detail views
  • Dialog: "Close" on left, action CTA on right
  • 375px Toss standard, 430px seed standard
  • JSON tokens for cross-platform portability

Quick Checklist for New Pages

Color:
[ ] Accent only on active/selected states
[ ] All card backgrounds are bg-card (white)
[ ] Text uses only the 5-level grayscale
[ ] Status colors are dot + text (11px) or smaller
[ ] No pure black (#000)

Layout:
[ ] All sections spaced with space-y-6
[ ] Single cards use mx-6; grids/carousels use px-6
[ ] Card padding is p-6 (hero: p-8)
[ ] Card radius is rounded-2xl
[ ] No overlapping elements
[ ] All content inside cards

Typography:
[ ] Number:unit ratio is 2:1 or close
[ ] All number+unit combos have whitespace-nowrap
[ ] Labels are uppercase + tracking-wide

Clone this wiki locally