# 다크모드 일관성 가이드
## 다크모드 색상 원칙
### 1. 가독성 우선
- 텍스트는 충분한 대비(4.5:1 이상)
- 라이트모드: 어두운 텍스트 on 밝은 배경
- 다크모드: 밝은 텍스트 on 어두운 배경
### 2. 일관성 유지
- 같은 용도의 색상은 같은 클래스 사용
- 모든 배경색에 dark: variant 추가
- 모든 텍스트색에 dark: variant 추가
- 모든 테두리색에 dark: variant 추가
## 표준 색상 매핑
### Background (배경)
```tsx
// ❌ 잘못된 예
className="bg-white"
className="bg-gray-50"
// ✅ 올바른 예
className="bg-card"
className="bg-background"
className="bg-muted"
className="bg-white dark:bg-card"
className="bg-gray-50 dark:bg-muted"
```
### Text (텍스트)
```tsx
// ❌ 잘못된 예
className="text-black"
className="text-gray-900"
className="text-gray-700"
// ✅ 올바른 예
className="text-foreground"
className="text-card-foreground"
className="text-muted-foreground"
className="text-gray-900 dark:text-gray-100"
className="text-gray-700 dark:text-gray-300"
```
### Border (테두리)
```tsx
// ❌ 잘못된 예
className="border-gray-200"
className="border-gray-300"
// ✅ 올바른 예
className="border-border"
className="border-gray-200 dark:border-gray-700"
```
## 컴포넌트별 표준 패턴
### Card
```tsx
// 기본 카드
내용
// 강조 카드
...
```
### Badge
```tsx
// 회색 배지
텍스트
// 컬러 배지
텍스트
```
### Table
```tsx
// 테이블 행
내용
// 헤더 행
헤더
```
### 모바일 카드
```tsx
...
```
### 미리보기 영역
```tsx
...
```
### 빈 상태
```tsx
데이터 없음
```
## 색상별 다크모드 매핑
### Purple (보라색 - 품목관리)
```tsx
// 배경
"bg-purple-50 dark:bg-purple-900/30"
"bg-purple-100 dark:bg-purple-900/40"
// 텍스트
"text-purple-700 dark:text-purple-300"
"text-purple-900 dark:text-purple-100"
// 테두리
"border-purple-200 dark:border-purple-800"
```
### Blue (파란색 - 견적/수주)
```tsx
// 배경
"bg-blue-50 dark:bg-blue-900/30"
"bg-blue-100 dark:bg-blue-900/40"
// 텍스트
"text-blue-700 dark:text-blue-300"
"text-blue-900 dark:text-blue-100"
// 테두리
"border-blue-200 dark:border-blue-800"
```
### Green (초록색 - 생산/품질)
```tsx
// 배경
"bg-green-50 dark:bg-green-900/30"
"bg-green-100 dark:bg-green-900/40"
// 텍스트
"text-green-700 dark:text-green-300"
"text-green-900 dark:text-green-100"
// 테두리
"border-green-200 dark:border-green-800"
```
### Red (빨간색 - 경고/오류)
```tsx
// 배경
"bg-red-50 dark:bg-red-900/30"
"bg-red-100 dark:bg-red-900/40"
// 텍스트
"text-red-700 dark:text-red-300"
"text-red-900 dark:text-red-100"
// 테두리
"border-red-200 dark:border-red-800"
```
### Gray (회색 - 기본/비활성)
```tsx
// 배경
"bg-gray-50 dark:bg-gray-800"
"bg-gray-100 dark:bg-gray-700"
// 텍스트
"text-gray-700 dark:text-gray-300"
"text-gray-900 dark:text-gray-100"
// 테두리
"border-gray-200 dark:border-gray-700"
```
## 자동 변환 규칙
### 1단계: 단순 배경
```bash
# 찾기
bg-white[^-]
# 바꾸기
bg-white dark:bg-card
```
### 2단계: 회색 배경
```bash
# 찾기
bg-gray-50[^-]
# 바꾸기
bg-gray-50 dark:bg-muted
```
### 3단계: 회색 텍스트
```bash
# 찾기
text-gray-700[^-]
# 바꾸기
text-gray-700 dark:text-gray-300
```
### 4단계: 회색 테두리
```bash
# 찾기
border-gray-200[^-]
# 바꾸기
border-gray-200 dark:border-gray-700
```
## 체크리스트
각 페이지 다크모드 확인:
- [ ] 배경색 가독성 확인
- [ ] 텍스트 대비 확인 (4.5:1 이상)
- [ ] 테두리 가시성 확인
- [ ] 호버 효과 가독성 확인
- [ ] Badge 가독성 확인
- [ ] Table 가독성 확인
- [ ] Card 가독성 확인
- [ ] 버튼 가독성 확인
- [ ] Input 가독성 확인
- [ ] Dialog/Modal 가독성 확인
## 주의사항
### 1. !important 사용 금지
globals.css에 이미 정의된 경우를 제외하고 !important 사용하지 않기
### 2. 인라인 스타일 지양
가능하면 Tailwind 클래스 사용
### 3. 일관성 유지
같은 용도의 컴포넌트는 같은 색상 패턴 사용
### 4. 테스트
라이트모드와 다크모드 모두에서 테스트
## 빠른 수정 스니펫
### VSCode 정규식 찾기/바꾸기
1. **bg-white 수정**
- 찾기: `className="([^"]*?)bg-white([^-])`
- 바꾸기: `className="$1bg-white dark:bg-card$2`
2. **bg-gray-50 수정**
- 찾기: `className="([^"]*?)bg-gray-50([^-])`
- 바꾸기: `className="$1bg-gray-50 dark:bg-muted$2`
3. **text-gray-700 수정**
- 찾기: `className="([^"]*?)text-gray-700([^-])`
- 바꾸기: `className="$1text-gray-700 dark:text-gray-300$2`
4. **border-gray-200 수정**
- 찾기: `className="([^"]*?)border-gray-200([^-])`
- 바꾸기: `className="$1border-gray-200 dark:border-gray-700$2`