Colors (색상)
Cals의 색상 시스템은 Pink, Blue, Purple 브랜드 컬러와 예약 상태별 5가지 전용 컬러를 제공합니다.
색상 철학
Cals의 색상은 다음 원칙을 따릅니다:
- Vibrant Brand: 활기찬 Pink로 브랜드 정체성 표현
- Booking Status: 예약 상태를 직관적으로 전달하는 색상
- Trust & Premium: Blue(신뢰)와 Purple(프리미엄) 조화
- Consistency: 모든 Cals 제품에서 동일한 컬러 사용
Cals Primary Color (Pink)
Cals의 Primary 컬러는 Pink (#e91e63) 입니다.
실제 토큰 값 (theme.css)
@theme {
/* Cals Brand Colors - Primary (Pink) */
--color-cals-primary-50: #fce4ec;
--color-cals-primary-100: #f8bbd0;
--color-cals-primary-200: #f48fb1;
--color-cals-primary-300: #f06292;
--color-cals-primary-400: #ec407a;
--color-cals-primary-500: #e91e63;
--color-cals-primary-600: #d81b60;
--color-cals-primary-700: #c2185b;
--color-cals-primary-800: #ad1457;
--color-cals-primary-900: #880e4f;
}사용 가이드
| Shade | Hex | 사용 사례 |
|---|---|---|
| 50 | #fce4ec | 배경색 (Subtle) |
| 100 | #f8bbd0 | Hover 배경 |
| 200 | #f48fb1 | Disabled 상태 |
| 300 | #f06292 | Border |
| 400 | #ec407a | Hover 상태 |
| 500 | #e91e63 | Primary (기본) |
| 600 | #d81b60 | Active 상태 |
| 700 | #c2185b | Pressed 상태 |
| 800 | #ad1457 | Strong 강조 |
| 900 | #880e4f | High Contrast |
Cals Secondary Color (Blue)
Cals의 Secondary 컬러는 Blue (#03a9f4) 입니다.
실제 토큰 값 (theme.css)
@theme {
/* Cals Brand Colors - Secondary (Blue) */
--color-cals-secondary-50: #e1f5fe;
--color-cals-secondary-100: #b3e5fc;
--color-cals-secondary-200: #81d4fa;
--color-cals-secondary-300: #4fc3f7;
--color-cals-secondary-400: #29b6f6;
--color-cals-secondary-500: #03a9f4;
--color-cals-secondary-600: #039be5;
--color-cals-secondary-700: #0288d1;
--color-cals-secondary-800: #0277bd;
--color-cals-secondary-900: #01579b;
}사용 가이드
| Shade | Hex | 사용 사례 |
|---|---|---|
| 500 | #03a9f4 | Secondary Button, 예약 확정 상태 |
| 600 | #039be5 | Hover 상태 |
| 700 | #0288d1 | Active 상태 |
Cals Accent Color (Purple)
Cals의 Accent 컬러는 Purple (#9c27b0) 입니다.
실제 토큰 값 (theme.css)
@theme {
/* Cals Brand Colors - Accent (Purple) */
--color-cals-accent-50: #f3e5f5;
--color-cals-accent-100: #e1bee7;
--color-cals-accent-200: #ce93d8;
--color-cals-accent-300: #ba68c8;
--color-cals-accent-400: #ab47bc;
--color-cals-accent-500: #9c27b0;
--color-cals-accent-600: #8e24aa;
--color-cals-accent-700: #7b1fa2;
--color-cals-accent-800: #6a1b9a;
--color-cals-accent-900: #4a148c;
}사용 가이드
| Shade | Hex | 사용 사례 |
|---|---|---|
| 500 | #9c27b0 | Accent Button, 예약 완료 상태 |
| 600 | #8e24aa | Hover 상태 |
| 700 | #7b1fa2 | Active 상태 |
⭐ Booking Status Colors (예약 상태 컬러)
Cals의 핵심 기능인 예약 상태별 5가지 전용 컬러입니다.
실제 토큰 값 (theme.css)
@theme {
/* Booking Status Colors */
--color-booking-available: #4caf50;
--color-booking-pending: #ff9800;
--color-booking-confirmed: #03a9f4;
--color-booking-cancelled: #f44336;
--color-booking-completed: #9c27b0;
}사용 가이드
| 상태 | Hex | 의미 | 사용 사례 |
|---|---|---|---|
| available | #4caf50 | 예약 가능 (Green) | 예약 가능한 시간대 표시 |
| pending | #ff9800 | 예약 대기 (Orange) | 결제 대기, 승인 대기 |
| confirmed | #03a9f4 | 예약 확정 (Blue) | 예약이 확정된 상태 |
| cancelled | #f44336 | 예약 취소 (Red) | 취소된 예약 |
| completed | #9c27b0 | 예약 완료 (Purple) | 완료된 예약 (이용 완료) |
예약 상태 흐름
예약 가능 (available)
↓
예약 대기 (pending)
↓
예약 확정 (confirmed)
↓
예약 완료 (completed) 또는 예약 취소 (cancelled)Semantic Colors (Foundation 상속)
Cals는 Foundation의 Semantic Colors를 상속합니다.
실제 토큰 값 (theme.css)
@theme {
/* Semantic Colors (Foundation 상속) */
--color-success: #4caf50;
--color-warning: #ff9800;
--color-error: #f44336;
--color-info: #2196f3;
}사용 방법
Booking Status Badge
import { Badge } from "@vortex/ui-cals";
export default function BookingStatusExample() {
return (
<div className="flex gap-md">
<Badge variant="booking-available">예약 가능</Badge>
<Badge variant="booking-pending">예약 대기</Badge>
<Badge variant="booking-confirmed">예약 확정</Badge>
<Badge variant="booking-cancelled">예약 취소</Badge>
<Badge variant="booking-completed">예약 완료</Badge>
</div>
);
}BookingCard 컴포넌트
export default function BookingCard({ status }) {
const statusConfig = {
available: {
color: "bg-[#4caf50]",
text: "예약 가능",
icon: "✓",
},
pending: {
color: "bg-[#ff9800]",
text: "예약 대기",
icon: "⏳",
},
confirmed: {
color: "bg-[#03a9f4]",
text: "예약 확정",
icon: "✓",
},
cancelled: {
color: "bg-[#f44336]",
text: "예약 취소",
icon: "✗",
},
completed: {
color: "bg-[#9c27b0]",
text: "예약 완료",
icon: "★",
},
};
const config = statusConfig[status];
return (
<div className="p-md bg-white border rounded-lg">
<div className="flex items-center gap-sm mb-md">
<span
className={`${config.color} text-white px-sm py-xs rounded text-sm`}
>
{config.icon} {config.text}
</span>
</div>
<h3 className="text-lg font-semibold">예약 정보</h3>
<p className="text-sm text-gray-600 mt-sm">예약 날짜: 2025-01-15</p>
</div>
);
}Calendar with Booking Status
export default function BookingCalendar() {
const timeSlots = [
{ time: "09:00", status: "available" },
{ time: "10:00", status: "confirmed" },
{ time: "11:00", status: "pending" },
{ time: "12:00", status: "available" },
{ time: "13:00", status: "completed" },
{ time: "14:00", status: "cancelled" },
];
return (
<div className="grid grid-cols-2 md:grid-cols-3 gap-md">
{timeSlots.map((slot) => (
<button
key={slot.time}
className={`
p-md border rounded-lg text-center
${
slot.status === "available"
? "bg-green-50 border-[#4caf50] hover:bg-green-100"
: ""
}
${
slot.status === "confirmed"
? "bg-blue-50 border-[#03a9f4] cursor-not-allowed"
: ""
}
${
slot.status === "pending"
? "bg-orange-50 border-[#ff9800] cursor-not-allowed"
: ""
}
${
slot.status === "completed"
? "bg-purple-50 border-[#9c27b0] cursor-not-allowed"
: ""
}
${
slot.status === "cancelled"
? "bg-red-50 border-[#f44336] cursor-not-allowed"
: ""
}
`}
disabled={slot.status !== "available"}
>
<div className="font-semibold">{slot.time}</div>
<div className="text-xs mt-xs capitalize">{slot.status}</div>
</button>
))}
</div>
);
}접근성 고려사항
WCAG 2.1 AA 준수
Cals의 Primary, Secondary, Accent, Booking Status 컬러는 흰색 배경에서 WCAG 2.1 AA 기준을 준수합니다:
| 배경 | 텍스트 | 대비율 | WCAG |
|---|---|---|---|
| white (#ffffff) | Primary 500 (#e91e63) | 4.8:1 | ✅ AA |
| white (#ffffff) | Secondary 500 (#03a9f4) | 3.2:1 | ✅ AA (큰 텍스트) |
| white (#ffffff) | Accent 500 (#9c27b0) | 5.5:1 | ✅ AA |
| white (#ffffff) | booking-available (#4caf50) | 3.6:1 | ✅ AA (큰 텍스트) |
| white (#ffffff) | booking-pending (#ff9800) | 2.8:1 | ⚠️ 아이콘만 |
| white (#ffffff) | booking-confirmed (#03a9f4) | 3.2:1 | ✅ AA (큰 텍스트) |
| white (#ffffff) | booking-cancelled (#f44336) | 4.0:1 | ✅ AA (큰 텍스트) |
| white (#ffffff) | booking-completed (#9c27b0) | 5.5:1 | ✅ AA |
색맹 사용자 고려
예약 상태는 색상 + 아이콘 + 텍스트를 함께 사용하여 전달하세요:
// ✅ Good: 색상 + 아이콘 + 텍스트
<Badge variant="booking-available">
<CheckCircle size={16} className="mr-xs" />
예약 가능
</Badge>
// ❌ Bad: 색상만 사용
<div className="bg-[#4caf50]"></div>브랜드 가이드 준수
⚠️ 변경 금지
Cals 브랜드 가이드를 준수해야 하므로 다음 변경은 금지됩니다:
- ❌ Primary (Pink) 색상 변경
- ❌ Secondary (Blue) 색상 변경
- ❌ Accent (Purple) 색상 변경
- ❌ Booking Status Colors 변경 (5가지 모두)
예약 상태 컬러 일관성
예약 시스템에서는 반드시 다음 컬러를 사용하세요:
- 예약 가능: 항상 Green (#4caf50)
- 예약 대기: 항상 Orange (#ff9800)
- 예약 확정: 항상 Blue (#03a9f4)
- 예약 취소: 항상 Red (#f44336)
- 예약 완료: 항상 Purple (#9c27b0)
다음 단계
Last updated on