# 다크모드 일관성 가이드 ## 다크모드 색상 원칙 ### 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`