@kood/claude-code 0.3.14 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,298 @@
1
+ # 접근성
2
+
3
+ <legal_basis>
4
+
5
+ **법적 근거:** 지능정보화기본법 제47조, 시행규칙 제5조
6
+ **국가표준:** KWCAG 2.2 (한국형 웹 콘텐츠 접근성 지침)
7
+ **국제표준:** WCAG 2.1/2.2
8
+ **인증:** 한국디지털접근성진흥원
9
+
10
+ </legal_basis>
11
+
12
+ ---
13
+
14
+ <contrast>
15
+
16
+ **WCAG AA (필수):** 일반 텍스트 4.5:1+ | 큰 텍스트 3:1+ (18pt/24px+ 또는 14pt/18.66px+ Bold)
17
+ **WCAG AAA (권장):** 일반 텍스트 7:1+ | 큰 텍스트 4.5:1+
18
+ **척도:** 1:1 (구분 불가) ~ 21:1 (최대 대비)
19
+
20
+ ```tsx
21
+ {/* ✅ AA 충족 (4.5:1+) */}
22
+ <p className="text-gray-900 bg-white">일반 텍스트</p>
23
+
24
+ {/* ✅ 큰 텍스트 (3:1+) */}
25
+ <h1 className="text-2xl font-bold text-gray-700 bg-white">제목</h1>
26
+
27
+ {/* ❌ 대비 부족 (2:1) */}
28
+ <p className="text-gray-400 bg-white">읽기 어려움</p>
29
+ ```
30
+
31
+ **도구:** [Contrast Finder](https://app.contrast-finder.org/), Chrome DevTools
32
+
33
+ </contrast>
34
+
35
+ ---
36
+
37
+ <keyboard>
38
+
39
+ **Tab 순서:** 논리적 순서 유지, tabindex 명시 금지
40
+
41
+ | 키 | 동작 |
42
+ |------|------|
43
+ | Tab | 다음 요소 |
44
+ | Shift+Tab | 이전 요소 |
45
+ | Enter | 버튼/링크 활성화 |
46
+ | Space | 버튼 활성화, 체크박스 토글 |
47
+ | Esc | 모달/드롭다운 닫기 |
48
+ | Arrow | 라디오, 탭 이동 |
49
+
50
+ ```tsx
51
+ {/* ✅ 명확한 포커스 */}
52
+ <button className="focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2">
53
+ 버튼
54
+ </button>
55
+
56
+ {/* ❌ 포커스 스타일 제거 금지 */}
57
+ <button className="focus:outline-none">버튼</button>
58
+ ```
59
+
60
+ </keyboard>
61
+
62
+ ---
63
+
64
+ <semantic_html>
65
+
66
+ ```tsx
67
+ {/* ✅ Semantic HTML */}
68
+ <header>
69
+ <nav><ul><li><a href="/">홈</a></li></ul></nav>
70
+ </header>
71
+ <main><article><h1>제목</h1><p>본문</p></article></main>
72
+ <footer><p>© 2026 회사명</p></footer>
73
+
74
+ {/* ❌ Div만 사용 */}
75
+ <div className="header"><div className="nav"><div>홈</div></div></div>
76
+ ```
77
+
78
+ </semantic_html>
79
+
80
+ ---
81
+
82
+ <aria>
83
+
84
+ ```tsx
85
+ {/* aria-label */}
86
+ <button aria-label="메뉴 열기"><svg className="w-6 h-6" /></button>
87
+
88
+ {/* aria-labelledby */}
89
+ <div aria-labelledby="dialog-title">
90
+ <h2 id="dialog-title">확인</h2>
91
+ </div>
92
+
93
+ {/* aria-describedby */}
94
+ <input aria-describedby="email-hint" />
95
+ <span id="email-hint">example@email.com 형식</span>
96
+
97
+ {/* aria-hidden */}
98
+ <svg aria-hidden="true" className="w-5 h-5" />
99
+
100
+ {/* 상태 표시 */}
101
+ <button aria-expanded={isOpen} aria-controls="menu">메뉴</button>
102
+ <div role="tab" aria-selected={isActive}>탭</div>
103
+ <div role="checkbox" aria-checked={isChecked}>옵션</div>
104
+
105
+ {/* Live Regions */}
106
+ <div role="status" aria-live="polite" aria-atomic="true" className="sr-only">
107
+ {message}
108
+ </div>
109
+ ```
110
+
111
+ **aria-live:** polite (사용자 작업 후) | assertive (즉시) | off (없음)
112
+
113
+ </aria>
114
+
115
+ ---
116
+
117
+ <screen_reader>
118
+
119
+ ```tsx
120
+ {/* 스크린 리더 전용 텍스트 */}
121
+ <span className="sr-only">현재 페이지: 홈</span>
122
+
123
+ /* Tailwind CSS */
124
+ .sr-only {
125
+ position: absolute;
126
+ width: 1px;
127
+ height: 1px;
128
+ padding: 0;
129
+ margin: -1px;
130
+ overflow: hidden;
131
+ clip: rect(0, 0, 0, 0);
132
+ white-space: nowrap;
133
+ border-width: 0;
134
+ }
135
+
136
+ {/* 의미있는 아이콘 */}
137
+ <button aria-label="검색"><svg aria-hidden="true" className="w-5 h-5" /></button>
138
+
139
+ {/* 장식용 아이콘 */}
140
+ <button><svg aria-hidden="true" className="w-5 h-5" /><span>검색</span></button>
141
+ ```
142
+
143
+ </screen_reader>
144
+
145
+ ---
146
+
147
+ <forms>
148
+
149
+ ```tsx
150
+ {/* ✅ label + input 연결 */}
151
+ <div>
152
+ <label htmlFor="email" className="block text-sm font-medium mb-2">이메일</label>
153
+ <input id="email" type="email" className="w-full h-11 px-3 border rounded-lg" />
154
+ </div>
155
+
156
+ {/* 필수 필드 */}
157
+ <div>
158
+ <label htmlFor="name">
159
+ 이름 <span className="text-red-500" aria-label="필수">*</span>
160
+ </label>
161
+ <input id="name" required aria-required="true" />
162
+ </div>
163
+
164
+ {/* 에러 메시지 */}
165
+ <div>
166
+ <label htmlFor="password">비밀번호</label>
167
+ <input
168
+ id="password"
169
+ aria-invalid={hasError}
170
+ aria-describedby="password-error"
171
+ className={hasError ? 'border-red-500' : 'border-gray-300'}
172
+ />
173
+ {hasError && (
174
+ <p id="password-error" className="text-sm text-red-600 mt-1" role="alert">
175
+ 비밀번호는 8자 이상이어야 합니다
176
+ </p>
177
+ )}
178
+ </div>
179
+ ```
180
+
181
+ </forms>
182
+
183
+ ---
184
+
185
+ <color_independence>
186
+
187
+ ```tsx
188
+ {/* ❌ 색상만 */}
189
+ <span className="text-red-500">오류</span>
190
+
191
+ {/* ✅ 아이콘 + 텍스트 */}
192
+ <div className="flex items-center gap-2 text-red-500">
193
+ <svg className="w-5 h-5" aria-hidden="true" />
194
+ <span>오류가 발생했습니다</span>
195
+ </div>
196
+
197
+ {/* ✅ 패턴/모양 추가 */}
198
+ <button className="border-2 border-dashed border-primary-500">선택됨</button>
199
+ ```
200
+
201
+ </color_independence>
202
+
203
+ ---
204
+
205
+ <images>
206
+
207
+ ```tsx
208
+ {/* ✅ 의미있는 이미지 */}
209
+ <img src="/logo.png" alt="회사 로고" />
210
+
211
+ {/* ✅ 정보 전달 */}
212
+ <img src="/graph.png" alt="2026년 1월 매출 15% 증가를 보여주는 그래프" />
213
+
214
+ {/* ✅ 장식용 */}
215
+ <img src="/decoration.png" alt="" role="presentation" />
216
+
217
+ {/* ❌ 불명확 */}
218
+ <img src="/photo.png" alt="이미지" />
219
+ ```
220
+
221
+ </images>
222
+
223
+ ---
224
+
225
+ <modal>
226
+
227
+ ```tsx
228
+ <div
229
+ role="dialog"
230
+ aria-modal="true"
231
+ aria-labelledby="modal-title"
232
+ className="fixed inset-0 z-50"
233
+ >
234
+ <div className="fixed inset-0 bg-black/50" onClick={onClose} aria-hidden="true" />
235
+ <div className="fixed inset-0 flex items-center justify-center p-4">
236
+ <div className="bg-white rounded-2xl max-w-md w-full p-6">
237
+ <h2 id="modal-title" className="text-xl font-semibold">제목</h2>
238
+ <div>{children}</div>
239
+ <button onClick={onClose} aria-label="모달 닫기" className="absolute top-4 right-4">
240
+
241
+ </button>
242
+ </div>
243
+ </div>
244
+ </div>
245
+ ```
246
+
247
+ </modal>
248
+
249
+ ---
250
+
251
+ <responsive_text>
252
+
253
+ ```tsx
254
+ {/* ✅ 상대 단위 (rem, em) */}
255
+ <p className="text-base">{/* 1rem = 16px */}본문</p>
256
+
257
+ {/* ❌ 고정 픽셀 */}
258
+ <p style={{ fontSize: '14px' }}>본문</p>
259
+ ```
260
+
261
+ </responsive_text>
262
+
263
+ ---
264
+
265
+ <checklist>
266
+
267
+ ### 필수
268
+
269
+ - [ ] 명암 대비 4.5:1+ (AA)
270
+ - [ ] 키보드 모든 기능 접근
271
+ - [ ] 포커스 스타일 명확
272
+ - [ ] Semantic HTML
273
+ - [ ] 모든 이미지 alt
274
+ - [ ] 폼 레이블 + input 연결
275
+ - [ ] 색상만 정보 전달 금지
276
+ - [ ] 스크린 리더 테스트
277
+
278
+ ### 권장
279
+
280
+ - [ ] 명암 대비 7:1+ (AAA)
281
+ - [ ] ARIA 적절 사용
282
+ - [ ] Skip to content 링크
283
+ - [ ] 반응형 텍스트 (rem)
284
+ - [ ] 키보드 단축키
285
+
286
+ </checklist>
287
+
288
+ ---
289
+
290
+ <sources>
291
+
292
+ - [WCAG 2.2 한국어](https://a11ykr.github.io/wcag22/)
293
+ - [한국디지털접근성진흥원](http://www.kwacc.or.kr/)
294
+ - [WCAG 2.1 Korean Translation](http://www.kwacc.or.kr/WAI/wcag21/)
295
+ - [MDN - 웹 접근성](https://developer.mozilla.org/ko/docs/Web/Accessibility/Guides/Understanding_WCAG)
296
+ - [Contrast Finder](https://app.contrast-finder.org/)
297
+
298
+ </sources>
@@ -0,0 +1,107 @@
1
+ # 화면별 체크리스트
2
+
3
+ <all_screens>
4
+
5
+ - [ ] 페이지 제목 명확
6
+ - [ ] 주요 액션 눈에 띔
7
+ - [ ] 로딩/에러/빈 상태 디자인
8
+ - [ ] 모바일 터치 44px+
9
+ - [ ] 헤더/네비게이션 스크롤 처리
10
+
11
+ </all_screens>
12
+
13
+ ---
14
+
15
+ <forms>
16
+
17
+ - [ ] 레이블 명확
18
+ - [ ] 필수/선택 구분
19
+ - [ ] 에러 메시지 인풋 근처
20
+ - [ ] 키보드 타입 적절
21
+ - [ ] 제출 버튼 항상 보임
22
+ - [ ] 비활성 상태 명확
23
+
24
+ </forms>
25
+
26
+ ---
27
+
28
+ <lists>
29
+
30
+ - [ ] 아이템 간 시각적 구분
31
+ - [ ] 빈 상태 메시지
32
+ - [ ] 무한 스크롤/페이지네이션
33
+ - [ ] 검색/필터
34
+ - [ ] 스켈레톤 UI
35
+ - [ ] 클릭 영역 충분
36
+
37
+ </lists>
38
+
39
+ ---
40
+
41
+ <detail>
42
+
43
+ - [ ] 뒤로가기 명확
44
+ - [ ] 핵심 정보 상단
45
+ - [ ] 액션 버튼 접근 용이
46
+ - [ ] 관련 정보 네비게이션
47
+ - [ ] 부가 액션 (공유/즐겨찾기)
48
+
49
+ </detail>
50
+
51
+ ---
52
+
53
+ <dashboard>
54
+
55
+ - [ ] 중요 지표 상단
56
+ - [ ] 섹션별 명확 구분
57
+ - [ ] 빠른 액션 버튼
58
+ - [ ] 최근 활동/알림
59
+ - [ ] 반응형 그리드 변환
60
+
61
+ </dashboard>
62
+
63
+ ---
64
+
65
+ <settings>
66
+
67
+ - [ ] 섹션별 그룹핑
68
+ - [ ] 항목 설명 명확
69
+ - [ ] 토글/스위치 터치 용이
70
+ - [ ] 위험 액션 구분
71
+ - [ ] 자동 저장 여부 명시
72
+
73
+ </settings>
74
+
75
+ ---
76
+
77
+ <modal>
78
+
79
+ - [ ] 닫기 버튼 명확
80
+ - [ ] 외부 클릭 시 닫힘
81
+ - [ ] ESC 키 닫힘
82
+ - [ ] 모바일 스와이프 닫기
83
+ - [ ] 백드롭 적절한 투명도
84
+
85
+ </modal>
86
+
87
+ ---
88
+
89
+ <error_state>
90
+
91
+ - [ ] 에러 메시지 이해 쉬움
92
+ - [ ] 해결 방법 제시
93
+ - [ ] 재시도 버튼
94
+ - [ ] 에러 아이콘
95
+
96
+ </error_state>
97
+
98
+ ---
99
+
100
+ <empty_state>
101
+
102
+ - [ ] 빈 상태 메시지 친근
103
+ - [ ] 액션 버튼 제공
104
+ - [ ] 일러스트/아이콘
105
+ - [ ] 다음 단계 명확
106
+
107
+ </empty_state>
@@ -0,0 +1,156 @@
1
+ # 색상 시스템
2
+
3
+ <color_structure>
4
+
5
+ | 색상 | 용도 | 비율 |
6
+ |------|------|------|
7
+ | **Primary** | 버튼, 링크, 활성 상태 | 10% |
8
+ | **Secondary** | 필터, 칩, 보조 버튼 | 30% |
9
+ | **Background** | 배경 | 60% |
10
+ | **Semantic** | Success/Error/Warning/Info | 필요시 |
11
+
12
+ **60-30-10 규칙:** Background 60% | Secondary 30% | Primary 10%
13
+
14
+ </color_structure>
15
+
16
+ ---
17
+
18
+ <semantic_colors>
19
+
20
+ | 용도 | 색상 | 용례 |
21
+ |------|------|------|
22
+ | Success | Green | 성공 메시지, 완료 상태 |
23
+ | Error | Red | 에러 메시지, 위험 경고 |
24
+ | Warning | Yellow/Orange | 주의 알림, 중요 정보 |
25
+ | Info | Blue | 일반 정보, 도움말 |
26
+
27
+ </semantic_colors>
28
+
29
+ ---
30
+
31
+ <krds>
32
+
33
+ **한국 정부 표준 (KRDS):** 240개 색상 (24개 × 10단계), 50이 기본, WCAG AA
34
+
35
+ ```css
36
+ /* Primary Blue */
37
+ --primary-50: #2196F3; /* 기본 */
38
+ --primary-500: #2196F3;
39
+ --primary-600: #1E88E5;
40
+
41
+ /* Grayscale */
42
+ --gray-50: #9E9E9E;
43
+ --gray-600: #757575;
44
+ --gray-900: #212121;
45
+ ```
46
+
47
+ </krds>
48
+
49
+ ---
50
+
51
+ <service_colors>
52
+
53
+ | 서비스 | Primary | Secondary | 특징 |
54
+ |--------|---------|-----------|------|
55
+ | **토스** | Blue #3182F6 | Gray | 신뢰감, 단순 명확, 강한 파란색 |
56
+ | **카카오** | Yellow #FEE500 | Brown #3C1E1E | 친근함, 말풍선, radius 12px |
57
+ | **배민** | Teal #2AC1BC | Coral/Pink | 신선함, 손글씨 폰트, 일러스트 |
58
+
59
+ </service_colors>
60
+
61
+ ---
62
+
63
+ <tailwind_config>
64
+
65
+ ```js
66
+ // tailwind.config.js
67
+ colors: {
68
+ primary: {
69
+ DEFAULT: '#2196F3',
70
+ 50: '#E3F2FD',
71
+ 500: '#2196F3',
72
+ 600: '#1E88E5',
73
+ },
74
+ success: { DEFAULT: '#4CAF50', light: '#81C784', dark: '#388E3C' },
75
+ error: { DEFAULT: '#F44336', light: '#E57373', dark: '#D32F2F' },
76
+ warning: { DEFAULT: '#FF9800', light: '#FFB74D', dark: '#F57C00' },
77
+ info: { DEFAULT: '#2196F3', light: '#64B5F6', dark: '#1976D2' },
78
+ }
79
+ ```
80
+
81
+ </tailwind_config>
82
+
83
+ ---
84
+
85
+ <dark_mode>
86
+
87
+ | 모드 | 배경 | 텍스트 |
88
+ |------|------|--------|
89
+ | **Light** | #FFFFFF, #F5F5F5 | #212121, #757575 |
90
+ | **Dark** | #121212, #1E1E1E | #FFFFFF, #B0B0B0 |
91
+
92
+ **특징:** 순수 검정(#000) 지양 → #121212, Primary 약간 밝게
93
+
94
+ </dark_mode>
95
+
96
+ ---
97
+
98
+ <accessibility>
99
+
100
+ **WCAG AA:** 일반 텍스트 4.5:1+ | 큰 텍스트 3:1+
101
+ **WCAG AAA:** 일반 텍스트 7:1+ | 큰 텍스트 4.5:1+
102
+
103
+ ```tsx
104
+ {/* ❌ 색상만 */}
105
+ <span className="text-red-500">오류</span>
106
+
107
+ {/* ✅ 아이콘 + 텍스트 */}
108
+ <div className="flex items-center gap-2 text-red-500">
109
+ <svg className="w-5 h-5" />
110
+ <span>오류가 발생했습니다</span>
111
+ </div>
112
+ ```
113
+
114
+ **색약 고려:** 빨강-초록 색맹, 파랑-노랑 구분, 형태/아이콘 추가
115
+
116
+ </accessibility>
117
+
118
+ ---
119
+
120
+ <examples>
121
+
122
+ ```tsx
123
+ {/* Primary Button */}
124
+ <button className="bg-primary-500 hover:bg-primary-600 text-white">저장하기</button>
125
+
126
+ {/* Secondary Button */}
127
+ <button className="bg-secondary-200 hover:bg-secondary-300 text-secondary-900">취소</button>
128
+
129
+ {/* Success State */}
130
+ <div className="bg-success-light/10 border border-success text-success-dark p-3 rounded-lg">
131
+ <div className="flex items-center gap-2">
132
+ <svg className="w-5 h-5" />
133
+ <span>성공적으로 저장되었습니다</span>
134
+ </div>
135
+ </div>
136
+
137
+ {/* Error State */}
138
+ <div className="bg-error-light/10 border border-error text-error-dark p-3 rounded-lg">
139
+ <div className="flex items-center gap-2">
140
+ <svg className="w-5 h-5" />
141
+ <span>오류가 발생했습니다</span>
142
+ </div>
143
+ </div>
144
+ ```
145
+
146
+ </examples>
147
+
148
+ ---
149
+
150
+ <sources>
151
+
152
+ - [KRDS 색상 가이드](https://www.krds.go.kr/html/site/style/style_02.html)
153
+ - [Gmarket Design System - Colors](https://gds.gmarket.co.kr/foundation/color)
154
+ - [리메인 - 브랜드 컬러](https://www.remain.co.kr/page/designsystem/brand-color.php)
155
+
156
+ </sources>
@@ -0,0 +1,25 @@
1
+ # 디자인 철학
2
+
3
+ <principles>
4
+
5
+ | 원칙 | 적용 |
6
+ |------|------|
7
+ | **정보 밀도** | 계층 구분, 한 화면에 핵심만, 상세는 펼침/모달 |
8
+ | **미니멀리즘** | 불필요한 장식 제거, 미세한 보더로 구분 |
9
+ | **곡선** | border-radius 8-16px, pill 형태는 태그/뱃지만 |
10
+ | **UX 라이팅** | "입력하세요" → "어떤 이름으로 불러드릴까요?" |
11
+
12
+ </principles>
13
+
14
+ ---
15
+
16
+ <avoid>
17
+
18
+ | 분류 | 금지 |
19
+ |------|------|
20
+ | **레이아웃** | 1400px+ 콘텐츠, 좁은 여백, 불규칙 정렬, 모바일 가로 스크롤 |
21
+ | **스타일** | 강한 그림자, 화려한 그라데이션, rounded-full 남발, 순수 검정(#000) |
22
+ | **타이포** | 12px 미만, 3+ 폰트 웨이트, 모든 텍스트 중앙 정렬 |
23
+ | **인터랙션** | 300ms+ 애니메이션, 강한 바운스, 자동 재생, 호버 상태 없음 |
24
+
25
+ </avoid>