Colors
Tiro의 컬러 시스템. Brown + Stone은 커스텀 스케일 (tailwind.config에 extend 등록). Feedback 팔레트(rose/amber/lime/blue)는 공식 팔레트 그대로 사용.
Tiro는 light mode only입니다. 유일한 다크 표면은 브랜드 히어로 (brown-800 솔리드 + 흰 텍스트).
Policy
- Feedback & tint 컬러: 공식 스케일 직접 사용 (
bg-rose-50,bg-amber-100등). Semantic으로 감싸지 않음 - Identity & surface 컬러: 최소한의 shadcn-style semantic tokens만 정의 (
--primary,--foreground,--background,--border등) - Tiro 커스텀:
brown+stone스케일. 둘 다tailwind.config.js extend.colors로 등록 - 금지:
slate,zinc,gray,neutral같은 쿨 그레이 스케일
Feedback Scale Mapping
| 역할 | Scale | Pill 조합 | Strong (icon, button bg) |
|---|---|---|---|
| destructive (에러, 삭제) | rose | bg-rose-50 text-rose-700 | bg-rose-600, text-rose-600 |
| warning (주의) | amber | bg-amber-100 text-amber-700 | text-amber-500 |
| success (성공, 진행) | lime | bg-lime-100 text-lime-700 | text-lime-500 |
| info (정보, 중립) | blue | bg-blue-100 text-blue-700 | text-blue-500 |
단일 규칙: Feedback pill = bg-{scale}-100 text-{scale}-700. 예외 1개: destructive는 bg-rose-50 (더 옅게).
Notice / Nudge Banner
안내 배너 (TopBanner info/promo, 설치 nudge, 업그레이드 제안) 기본 배경은 bg-amber-100 + text-amber-700.
Warning과 동일한 raw 값을 공유하지만 의미는 다름 — "주목 유도, 부드러운 강조". 나중에 시각적으로 갈라질 필요 생기면 --notice-bg 토큰으로 승격.
Semantic Tokens (최소 set)
컴포넌트 구조 색상만 semantic CSS variable로 정의. Feedback/tint는 raw 직접 사용.
Surface & text
| Token | Value | Description |
|---|---|---|
| --background | stone-30 (#FAFAF9) | 페이지 캔버스 |
| --background-alt | stone-50 (#F5F5F4) | Alt 섹션, 카드 bg |
| --foreground | brown-800 (#3A2018) | 기본 텍스트 |
| --foreground-secondary | stone-500 (#57534E) | 보조 본문, 설명, 부제, 트리거 chip 라벨 |
| --muted | stone-100 (#E7E5E4) | Muted 표면 (강한 강조의 chip/divider) |
| --muted-foreground | stone-300 (#A8A29E) | 부가 정보 (날짜·시간·길이), chip 내부 hint (chevron, +N), placeholder/disabled |
| --border | stone-100 (#E7E5E4) | 보더, 디바이더 |
| --input | stone-100 (#E7E5E4) | Input 보더 |
| --ring | brown-800 (#3A2018) | 포커스 링 |
Brand (Tiro brown 기반)
| Token | Value | Description |
|---|---|---|
| --primary | brown-800 (#3A2018) | 브랜드 primary — CTA, 로고, active |
| --primary-foreground | #FFFFFF | Primary 위 텍스트 |
| --primary-hover | brown-700 (#5C372B) | Primary CTA hover |
| --primary-active | brown-900 (#2B201D) | Primary CTA active |
| --accent | brown-50 (#EBDAD4) | Hover 배경, selected 행 |
| --accent-foreground | brown-800 (#3A2018) | Accent 위 텍스트 |
| --secondary | stone-50 (#F5F5F4) | Secondary 표면 |
| --secondary-foreground | brown-800 (#3A2018) | Secondary 위 텍스트 |
미정의 shadcn 기본 토큰: --popover, --card (별도 토큰 불필요 — --background + --border로 충분). 다크 모드 토큰 전체도 정의하지 않음.
Text Hierarchy — 4단계
본문은 한 화면에서 4단계까지만 운영합니다. "더 흐리게 / 더 또렷하게" 가 필요할 때 새 톤을 만들지 말고 아래 표 안에서 선택합니다.
| 역할 | Token | 색상 | 사용 예 |
|---|---|---|---|
| Heading / Strong | --primary (text-brown-800) | brown-800 | 페이지 타이틀, 노트 제목, 섹션 헤더 |
| Body | --foreground (text-brown-800) | brown-800 | 본문, 메인 가독 텍스트 |
| Secondary | --foreground-secondary (text-stone-500) | stone-500 | 보조 본문, 설명, 부제, 트리거 chip 라벨 |
| Muted / Meta | --muted-foreground (text-stone-300) | stone-300 | passive 부가 정보 (날짜·시간·길이·타임스탬프·"방금 전"), chip 내부 hint (chevron·"+N"), placeholder/disabled |
Rule of thumb (위→아래로 흐려진다):
- "이걸 보고 행동해야 한다" → stone-500 (Secondary)
- "그냥 거기 있다는 표시일 뿐" → stone-300 (Muted — meta 정보, hint 아이콘, placeholder)
본문(brown-800) 옆에 같이 놓일 때 "본문 vs 부가" 의 위계가 강하게 갈라지도록 한 단계만 운영합니다. stone-400 은 raw 토큰으로는 존재하지만 hierarchy 에서 별도 tier 로 운영하지 않음.
Accessibility 주의: stone-300 은 흰색 배경 위 contrast ~2.7:1 로 WCAG AA (4.5:1) 미달. 의식적으로 읽혀야 하는 텍스트 (예: 결제 폼 placeholder, 에러 메시지) 는 호출부에서 text-stone-400 또는 text-stone-500 로 한 단계 올려 사용. Meta hierarchy 의 stone-300 은 "스쳐 보는" 텍스트 한정.
Soft Chip Surface
작은 inline chip (참석자 칩, 폴더 칩, 메타 태그) 의 기본 배경은 --secondary (bg-stone-50). 한 단계 더 강조해야 할 chip 만 --muted (bg-stone-100).
- Chip 텍스트 / 아이콘:
text-stone-500기본 (Auxiliary 와 같은 톤). 강조 chip 만text-stone-600까지. - Chip 의 hover 는 stone 한 단계 진하게 (stone-50 → stone-100).
- Chip 안의 trailing chevron / dismiss icon 은 항상 한 단계 더 흐리게 (
text-stone-400) — 보조 hint.
Raw Palettes — Full Scales
디자인 시 각 스케일의 모든 tone을 활용할 수 있도록 전체 값을 명시합니다.
Tiro Custom — Tironian Brown
tailwind.config.js extend.colors.brown으로 등록:
colors: {
brown: {
30: '#F8F2F0',
50: '#EBDAD4',
100: '#D5BAB2',
200: '#C6A296',
300: '#9C6D5F',
400: '#885F53',
500: '#7A4B3D',
600: '#674236',
700: '#5C372B',
800: '#3A2018', // brand primary
900: '#2B201D',
}
}Tironian Brown
#F8F2F0
#EBDAD4
#D5BAB2
#C6A296
#9C6D5F
#885F53
#7A4B3D
#674236
#5C372B
#3A2018
#2B201D
Tiro Custom — Stone (뉴트럴)
tailwind.config.js extend.colors.stone으로 등록. stone-30이 가장 연한 tone.
Stone (Neutral)
#FAFAF9
#F5F5F4
#E7E5E4
#D6D3D1
#A8A29E
#78716C
#57534E
#44403C
#292524
#1C1917
#0C0A09
#0A0807
Rose — Destructive
Rose — Destructive
#FFF1F2
#FFE4E6
#FECDD3
#FDA4AF
#FB7185
#F43F5E
#E11D48
#BE123C
#9F1239
#881337
#4C0519
| Raw | 사용 맥락 |
|---|---|
| rose-50 | Destructive pill 배경 (예외 — 다른 feedback은 -100) |
| rose-100 | Speaker color index 2 배경 |
| rose-600 | Button destructive bg, inline error icon |
| rose-700 | Destructive text (pill, label, border) |
Amber — Warning + Notice
Amber — Warning + Notice
#FFFBEB
#FEF3C7
#FDE68A
#FCD34D
#FBBF24
#F59E0B
#D97706
#B45309
#92400E
#78350F
#451A03
| Raw | 사용 맥락 |
|---|---|
| amber-100 | Warning pill 배경, 안내 배너 기본 |
| amber-500 | Toast warning 아이콘 |
| amber-700 | Warning text (pill, notice 배너) |
Lime — Success
Lime — Success
#F7FEE7
#ECFCCB
#D9F99D
#BEF264
#A3E635
#84CC16
#65A30D
#4D7C0F
#3F6212
#365314
#1A2E05
| Raw | 사용 맥락 |
|---|---|
| lime-100 | Success pill 배경, Speaker color index 0 배경 |
| lime-500 | Toast success 아이콘 |
| lime-600 | Status dot (online) |
| lime-700 | Success text (pill) |
Blue — Info
Blue — Info
#EFF6FF
#DBEAFE
#BFDBFE
#93C5FD
#60A5FA
#3B82F6
#2563EB
#1D4ED8
#1E40AF
#1E3A8A
#172554
| Raw | 사용 맥락 |
|---|---|
| blue-100 | Info pill 배경, Speaker color index 1 배경 |
| blue-500 | Toast info 아이콘 |
| blue-600 | Link color (rare — default는 brown) |
| blue-700 | Info text (pill) |
Speaker Colors (8-cycle)
SpeakerChip colorIndex에 따라 8종 순환:
Speaker Colors — 8-cycle
#ECFCCB
#DBEAFE
#FFE4E6
#FEF3C7
#F3E8FF
#CFFAFE
#FCE7F3
#FEF9C3
| Index | BG | FG |
|---|---|---|
| 0 | bg-lime-100 | text-lime-700 |
| 1 | bg-blue-100 | text-blue-700 |
| 2 | bg-rose-100 | text-rose-700 |
| 3 | bg-amber-100 | text-amber-700 |
| 4 | bg-purple-100 | text-purple-700 |
| 5 | bg-cyan-100 | text-cyan-700 |
| 6 | bg-pink-100 | text-pink-700 |
| 7 | bg-yellow-100 | text-yellow-700 |
Semantic token으로 감싸지 않음. 8명 초과 화자는 bg-muted fallback.
금지 스케일
slate, zinc, gray, neutral — 쿨 그레이, 모든 레이어에서 금지. 모든 뉴트럴은 stone.
Surface Modes
| Context | Tokens |
|---|---|
| Default UI | bg-background + text-foreground |
| Alt section | bg-background-alt + text-foreground |
| Brand hero | bg-primary + text-primary-foreground |
| Marketing cream | bg-[#FFFEF7] + text-foreground (Tiro 전용 색상, raw hex 직접 사용) |
Palette Restraint
- Brand는 구두점, Stone이 문장. 화면이 "too brown"이면 Stone으로
- Brown 중간 톤(100~400) 남용 금지 — 필요할 때만
- 대부분의 surface는
--background,--background-alt,--muted만으로 해결
Do / Don't
- Do: Feedback은
bg-{rose|amber|lime|blue}-100 text-{}-700단일 규칙 (destructive만bg-rose-50) - Do: Identity/surface는 semantic token (
bg-primary,text-foreground) 사용 - Do: 안내/nudge 배너는
bg-amber-100 text-amber-700 - Do:
brown,stone은tailwind.config extend로 등록 후bg-brown-800,bg-stone-30직접 사용 - Do: 디자인 시 각 스케일의 다양한 tone(30, 50, 100, 400 등) 활용 — 위 표의 값 전체 사용 가능
- Don't:
slate,zinc,gray,neutral사용 금지 - Don't: 두 번째 브랜드 액센트 도입 금지 — brown-800 단일
- Don't: 그라디언트 사용 금지 — 솔리드 컬러만
- Don't: Feedback 컬러를 semantic으로 감싸는 과설계 금지 (rose/amber/lime/blue raw 그대로)
