@kood/claude-code 0.1.0

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.
Files changed (78) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +297 -0
  3. package/package.json +47 -0
  4. package/templates/hono/CLAUDE.md +376 -0
  5. package/templates/hono/docs/deployment/cloudflare.md +328 -0
  6. package/templates/hono/docs/deployment/index.md +291 -0
  7. package/templates/hono/docs/git/index.md +180 -0
  8. package/templates/hono/docs/library/hono/error-handling.md +400 -0
  9. package/templates/hono/docs/library/hono/index.md +241 -0
  10. package/templates/hono/docs/library/hono/middleware.md +334 -0
  11. package/templates/hono/docs/library/hono/rpc.md +454 -0
  12. package/templates/hono/docs/library/hono/validation.md +328 -0
  13. package/templates/hono/docs/library/prisma/index.md +427 -0
  14. package/templates/hono/docs/library/zod/index.md +413 -0
  15. package/templates/hono/docs/mcp/context7.md +106 -0
  16. package/templates/hono/docs/mcp/index.md +94 -0
  17. package/templates/hono/docs/mcp/sequential-thinking.md +101 -0
  18. package/templates/hono/docs/mcp/sgrep.md +105 -0
  19. package/templates/hono/docs/skills/gemini-review/SKILL.md +220 -0
  20. package/templates/hono/docs/skills/gemini-review/references/checklists.md +136 -0
  21. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +303 -0
  22. package/templates/tanstack-start/CLAUDE.md +279 -0
  23. package/templates/tanstack-start/docs/architecture/architecture.md +547 -0
  24. package/templates/tanstack-start/docs/deployment/cloudflare.md +346 -0
  25. package/templates/tanstack-start/docs/deployment/index.md +102 -0
  26. package/templates/tanstack-start/docs/deployment/nitro.md +211 -0
  27. package/templates/tanstack-start/docs/deployment/railway.md +364 -0
  28. package/templates/tanstack-start/docs/deployment/vercel.md +287 -0
  29. package/templates/tanstack-start/docs/design/accessibility.md +433 -0
  30. package/templates/tanstack-start/docs/design/color.md +235 -0
  31. package/templates/tanstack-start/docs/design/components.md +409 -0
  32. package/templates/tanstack-start/docs/design/index.md +107 -0
  33. package/templates/tanstack-start/docs/design/safe-area.md +317 -0
  34. package/templates/tanstack-start/docs/design/spacing.md +341 -0
  35. package/templates/tanstack-start/docs/design/tailwind-setup.md +470 -0
  36. package/templates/tanstack-start/docs/design/typography.md +324 -0
  37. package/templates/tanstack-start/docs/git/index.md +203 -0
  38. package/templates/tanstack-start/docs/guides/best-practices.md +753 -0
  39. package/templates/tanstack-start/docs/guides/getting-started.md +304 -0
  40. package/templates/tanstack-start/docs/guides/husky-lint-staged.md +303 -0
  41. package/templates/tanstack-start/docs/guides/prettier.md +189 -0
  42. package/templates/tanstack-start/docs/guides/project-templates.md +710 -0
  43. package/templates/tanstack-start/docs/library/better-auth/2fa.md +136 -0
  44. package/templates/tanstack-start/docs/library/better-auth/advanced.md +138 -0
  45. package/templates/tanstack-start/docs/library/better-auth/index.md +83 -0
  46. package/templates/tanstack-start/docs/library/better-auth/plugins.md +111 -0
  47. package/templates/tanstack-start/docs/library/better-auth/session.md +127 -0
  48. package/templates/tanstack-start/docs/library/better-auth/setup.md +123 -0
  49. package/templates/tanstack-start/docs/library/prisma/crud.md +218 -0
  50. package/templates/tanstack-start/docs/library/prisma/index.md +165 -0
  51. package/templates/tanstack-start/docs/library/prisma/relations.md +191 -0
  52. package/templates/tanstack-start/docs/library/prisma/schema.md +177 -0
  53. package/templates/tanstack-start/docs/library/prisma/setup.md +156 -0
  54. package/templates/tanstack-start/docs/library/prisma/transactions.md +140 -0
  55. package/templates/tanstack-start/docs/library/tanstack-query/index.md +146 -0
  56. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +146 -0
  57. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +196 -0
  58. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +110 -0
  59. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +170 -0
  60. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +173 -0
  61. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +171 -0
  62. package/templates/tanstack-start/docs/library/tanstack-start/index.md +114 -0
  63. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +142 -0
  64. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +163 -0
  65. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +128 -0
  66. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +85 -0
  67. package/templates/tanstack-start/docs/library/zod/basic-types.md +186 -0
  68. package/templates/tanstack-start/docs/library/zod/complex-types.md +204 -0
  69. package/templates/tanstack-start/docs/library/zod/index.md +186 -0
  70. package/templates/tanstack-start/docs/library/zod/transforms.md +174 -0
  71. package/templates/tanstack-start/docs/library/zod/validation.md +208 -0
  72. package/templates/tanstack-start/docs/mcp/context7.md +204 -0
  73. package/templates/tanstack-start/docs/mcp/index.md +116 -0
  74. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +180 -0
  75. package/templates/tanstack-start/docs/mcp/sgrep.md +174 -0
  76. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +220 -0
  77. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +150 -0
  78. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +293 -0
@@ -0,0 +1,317 @@
1
+ # iOS Safe Area
2
+
3
+ > **Framework**: TanStack Start + Tailwind CSS v4
4
+ > **Library**: [tailwindcss-safe-area](https://github.com/mvllow/tailwindcss-safe-area)
5
+
6
+ iOS 기기의 노치, 홈 인디케이터, 다이나믹 아일랜드 등을 고려한 Safe Area 처리 가이드입니다.
7
+
8
+ ## 설치
9
+
10
+ ```bash
11
+ yarn add tailwindcss-safe-area
12
+ ```
13
+
14
+ ## 설정
15
+
16
+ ### 1. Tailwind CSS 플러그인 등록
17
+
18
+ ```typescript
19
+ // tailwind.config.ts
20
+ import type { Config } from 'tailwindcss'
21
+ import safeArea from 'tailwindcss-safe-area'
22
+
23
+ export default {
24
+ content: ['./src/**/*.{ts,tsx}'],
25
+ plugins: [safeArea],
26
+ } satisfies Config
27
+ ```
28
+
29
+ ### 2. Viewport 메타 태그 설정 (필수)
30
+
31
+ Safe Area 유틸리티가 작동하려면 `viewport-fit=cover`가 **반드시** 필요합니다.
32
+
33
+ ```html
34
+ <!-- app.html 또는 root layout -->
35
+ <meta
36
+ name="viewport"
37
+ content="width=device-width, initial-scale=1, viewport-fit=cover"
38
+ />
39
+ ```
40
+
41
+ TanStack Start에서:
42
+
43
+ ```typescript
44
+ // src/routes/__root.tsx
45
+ export const Route = createRootRoute({
46
+ head: () => ({
47
+ meta: [
48
+ {
49
+ name: 'viewport',
50
+ content: 'width=device-width, initial-scale=1, viewport-fit=cover',
51
+ },
52
+ ],
53
+ }),
54
+ })
55
+ ```
56
+
57
+ ## 유틸리티 클래스
58
+
59
+ ### Padding 유틸리티
60
+
61
+ ```tsx
62
+ // 전체 방향 safe area padding
63
+ <div className="p-safe">...</div>
64
+
65
+ // 개별 방향
66
+ <header className="pt-safe">상단 노치/다이나믹 아일랜드 영역</header>
67
+ <footer className="pb-safe">하단 홈 인디케이터 영역</footer>
68
+ <div className="pl-safe pr-safe">좌우 safe area</div>
69
+
70
+ // X축, Y축
71
+ <div className="px-safe">좌우 safe area</div>
72
+ <div className="py-safe">상하 safe area</div>
73
+ ```
74
+
75
+ ### Margin 유틸리티
76
+
77
+ ```tsx
78
+ // 전체 방향 safe area margin
79
+ <div className="m-safe">...</div>
80
+
81
+ // 개별 방향
82
+ <div className="mt-safe mb-safe">상하 margin</div>
83
+ <div className="ml-safe mr-safe">좌우 margin</div>
84
+
85
+ // X축, Y축
86
+ <div className="mx-safe">좌우 safe area margin</div>
87
+ <div className="my-safe">상하 safe area margin</div>
88
+ ```
89
+
90
+ ### Height 유틸리티
91
+
92
+ ```tsx
93
+ // Safe area를 제외한 화면 높이
94
+ <main className="h-screen-safe">
95
+ 전체 화면에서 safe area를 뺀 높이
96
+ </main>
97
+
98
+ // 최소 높이
99
+ <div className="min-h-screen-safe">
100
+ 최소 높이로 safe area 적용
101
+ </div>
102
+ ```
103
+
104
+ ## Fallback 유틸리티
105
+
106
+ Safe Area가 0일 때 대체 값을 지정할 수 있습니다.
107
+
108
+ ```tsx
109
+ // safe area가 0이면 1rem(4) 적용
110
+ <div className="p-safe-or-4">...</div>
111
+
112
+ // 상단: safe area 또는 0.5rem(2)
113
+ <header className="pt-safe-or-2">...</header>
114
+
115
+ // 하단: safe area 또는 1rem(4)
116
+ <footer className="pb-safe-or-4">...</footer>
117
+
118
+ // 좌우: safe area 또는 1.5rem(6)
119
+ <div className="px-safe-or-6">...</div>
120
+ ```
121
+
122
+ ### Fallback 패턴
123
+
124
+ | 클래스 | Safe Area 있을 때 | Safe Area 없을 때 |
125
+ |--------|-------------------|-------------------|
126
+ | `p-safe-or-4` | `env(safe-area-inset-*)` | `1rem` |
127
+ | `pt-safe-or-2` | `env(safe-area-inset-top)` | `0.5rem` |
128
+ | `pb-safe-or-4` | `env(safe-area-inset-bottom)` | `1rem` |
129
+ | `px-safe-or-6` | `env(safe-area-inset-left/right)` | `1.5rem` |
130
+
131
+ ## 실전 패턴
132
+
133
+ ### 기본 앱 레이아웃
134
+
135
+ ```tsx
136
+ // src/components/app-layout.tsx
137
+ export function AppLayout({ children }: { children: React.ReactNode }) {
138
+ return (
139
+ <div className="min-h-screen-safe flex flex-col">
140
+ {/* 상단 헤더 - 노치/다이나믹 아일랜드 대응 */}
141
+ <header className="pt-safe-or-2 px-safe-or-4 bg-white border-b">
142
+ <nav className="h-14 flex items-center">
143
+ <h1>앱 타이틀</h1>
144
+ </nav>
145
+ </header>
146
+
147
+ {/* 메인 콘텐츠 */}
148
+ <main className="flex-1 px-safe-or-4">
149
+ {children}
150
+ </main>
151
+
152
+ {/* 하단 탭바 - 홈 인디케이터 대응 */}
153
+ <footer className="pb-safe-or-2 px-safe-or-4 bg-white border-t">
154
+ <nav className="h-14 flex items-center justify-around">
155
+ {/* 탭 아이템들 */}
156
+ </nav>
157
+ </footer>
158
+ </div>
159
+ )
160
+ }
161
+ ```
162
+
163
+ ### 전체 화면 모달
164
+
165
+ ```tsx
166
+ // src/components/fullscreen-modal.tsx
167
+ export function FullscreenModal({ children }: { children: React.ReactNode }) {
168
+ return (
169
+ <div className="fixed inset-0 bg-white z-50">
170
+ <div className="h-screen-safe flex flex-col p-safe">
171
+ {children}
172
+ </div>
173
+ </div>
174
+ )
175
+ }
176
+ ```
177
+
178
+ ### 고정 하단 버튼
179
+
180
+ ```tsx
181
+ // src/components/fixed-bottom-button.tsx
182
+ export function FixedBottomButton({ children }: { children: React.ReactNode }) {
183
+ return (
184
+ <div className="fixed bottom-0 left-0 right-0 pb-safe-or-4 px-safe-or-4 bg-white border-t">
185
+ <button className="w-full h-12 bg-primary-600 text-white rounded-lg">
186
+ {children}
187
+ </button>
188
+ </div>
189
+ )
190
+ }
191
+ ```
192
+
193
+ ### 스크롤 콘텐츠 with 고정 헤더/푸터
194
+
195
+ ```tsx
196
+ export function ScrollableContent() {
197
+ return (
198
+ <div className="h-screen-safe flex flex-col">
199
+ {/* 고정 헤더 */}
200
+ <header className="pt-safe px-safe-or-4 shrink-0">
201
+ <div className="h-14">헤더</div>
202
+ </header>
203
+
204
+ {/* 스크롤 영역 */}
205
+ <main className="flex-1 overflow-y-auto px-safe-or-4">
206
+ {/* 스크롤 콘텐츠 */}
207
+ </main>
208
+
209
+ {/* 고정 푸터 */}
210
+ <footer className="pb-safe px-safe-or-4 shrink-0">
211
+ <div className="h-14">푸터</div>
212
+ </footer>
213
+ </div>
214
+ )
215
+ }
216
+ ```
217
+
218
+ ## CSS 직접 사용
219
+
220
+ Tailwind 유틸리티 외에 CSS에서 직접 사용할 수도 있습니다.
221
+
222
+ ```css
223
+ .custom-container {
224
+ padding-top: env(safe-area-inset-top);
225
+ padding-bottom: env(safe-area-inset-bottom);
226
+ padding-left: env(safe-area-inset-left);
227
+ padding-right: env(safe-area-inset-right);
228
+ }
229
+
230
+ /* fallback 포함 */
231
+ .custom-header {
232
+ padding-top: max(env(safe-area-inset-top), 1rem);
233
+ }
234
+ ```
235
+
236
+ ## 높이 문제 해결
237
+
238
+ 모바일 브라우저에서 `100vh`가 실제 뷰포트보다 클 수 있습니다.
239
+
240
+ ### 해결 방법 1: h-screen-safe 사용
241
+
242
+ ```tsx
243
+ <div className="h-screen-safe">
244
+ {/* safe area를 고려한 정확한 높이 */}
245
+ </div>
246
+ ```
247
+
248
+ ### 해결 방법 2: -webkit-fill-available
249
+
250
+ ```css
251
+ .full-height {
252
+ height: 100vh;
253
+ height: -webkit-fill-available;
254
+ }
255
+ ```
256
+
257
+ ### 해결 방법 3: dvh 단위 (권장)
258
+
259
+ ```css
260
+ .full-height {
261
+ height: 100dvh; /* dynamic viewport height */
262
+ }
263
+ ```
264
+
265
+ Tailwind에서:
266
+
267
+ ```tsx
268
+ <div className="h-dvh">
269
+ {/* 동적 뷰포트 높이 */}
270
+ </div>
271
+ ```
272
+
273
+ ## 디바이스별 Safe Area
274
+
275
+ | 디바이스 | 상단 | 하단 | 좌우 |
276
+ |----------|------|------|------|
277
+ | iPhone 14 Pro/15 Pro | 59px (다이나믹 아일랜드) | 34px | 0px |
278
+ | iPhone 14/15 | 47px (노치) | 34px | 0px |
279
+ | iPhone SE | 20px (상태바) | 0px | 0px |
280
+ | iPad Pro | 24px | 20px | 0px |
281
+ | Android (일반) | 24px (상태바) | 0px | 0px |
282
+
283
+ ## 트러블슈팅
284
+
285
+ ### Safe Area가 적용되지 않음
286
+
287
+ 1. `viewport-fit=cover` 메타 태그 확인
288
+ 2. 플러그인이 올바르게 등록되었는지 확인
289
+ 3. 실제 iOS 기기 또는 시뮬레이터에서 테스트 (데스크톱 브라우저는 safe area가 0)
290
+
291
+ ### 콘텐츠가 노치에 가려짐
292
+
293
+ ```tsx
294
+ // ❌ 잘못된 예
295
+ <header className="fixed top-0">...</header>
296
+
297
+ // ✅ 올바른 예
298
+ <header className="fixed top-0 pt-safe">...</header>
299
+ ```
300
+
301
+ ### 하단 버튼이 홈 인디케이터와 겹침
302
+
303
+ ```tsx
304
+ // ❌ 잘못된 예
305
+ <button className="fixed bottom-4">...</button>
306
+
307
+ // ✅ 올바른 예
308
+ <div className="fixed bottom-0 pb-safe-or-4">
309
+ <button>...</button>
310
+ </div>
311
+ ```
312
+
313
+ ## 참고 자료
314
+
315
+ - [tailwindcss-safe-area GitHub](https://github.com/mvllow/tailwindcss-safe-area)
316
+ - [Apple Human Interface Guidelines - Layout](https://developer.apple.com/design/human-interface-guidelines/layout)
317
+ - [CSS env() function](https://developer.mozilla.org/en-US/docs/Web/CSS/env)
@@ -0,0 +1,341 @@
1
+ # 간격과 레이아웃
2
+
3
+ > **상위 문서**: [UI/UX 디자인 가이드](./index.md)
4
+
5
+ 간격(Spacing)은 요소들 사이의 여백을 말합니다. 적절한 간격은 콘텐츠를 읽기 쉽게 만들고 시각적 계층을 형성합니다.
6
+
7
+ ## 왜 간격이 중요한가?
8
+
9
+ ### 간격 없는 디자인 vs 적절한 간격
10
+
11
+ ```
12
+ ❌ 간격 없음 ✅ 적절한 간격
13
+ ┌──────────────────┐ ┌──────────────────┐
14
+ │제목본문텍스트버튼│ │ │
15
+ │모든것이붙어있음 │ │ 제목 │
16
+ │읽기가어려움 │ │ │
17
+ └──────────────────┘ │ 본문 텍스트 │
18
+ │ │
19
+ │ [ 버튼 ] │
20
+ │ │
21
+ └──────────────────┘
22
+ ```
23
+
24
+ ## 8px 그리드 시스템
25
+
26
+ ### 왜 8px인가?
27
+
28
+ - 대부분의 화면 해상도에서 깔끔하게 나눠짐
29
+ - 계산이 쉬움 (8, 16, 24, 32...)
30
+ - 반응형 디자인에 유리
31
+
32
+ ### Tailwind 간격 스케일
33
+
34
+ ```css
35
+ /* 기본 단위: 1 = 0.25rem = 4px */
36
+
37
+ /* 주로 사용하는 간격 */
38
+ 1 → 4px (0.25rem) 아주 작은 간격
39
+ 2 → 8px (0.5rem) 작은 간격
40
+ 3 → 12px (0.75rem)
41
+ 4 → 16px (1rem) 기본 간격
42
+ 5 → 20px (1.25rem)
43
+ 6 → 24px (1.5rem) 중간 간격
44
+ 8 → 32px (2rem) 큰 간격
45
+ 10 → 40px (2.5rem)
46
+ 12 → 48px (3rem) 섹션 간격
47
+ 16 → 64px (4rem) 페이지 섹션
48
+ 20 → 80px (5rem)
49
+ 24 → 96px (6rem) 대형 섹션
50
+ ```
51
+
52
+ ### 간격 사용 가이드
53
+
54
+ | 용도 | 간격 | Tailwind | 실제 크기 |
55
+ |------|------|----------|----------|
56
+ | 아이콘-텍스트 | xs | `gap-1` | 4px |
57
+ | 인라인 요소 | sm | `gap-2` | 8px |
58
+ | 폼 필드 내부 | md | `p-3` | 12px |
59
+ | 카드 내부 | lg | `p-4` | 16px |
60
+ | 카드 간격 | xl | `gap-6` | 24px |
61
+ | 섹션 내부 | 2xl | `py-8` | 32px |
62
+ | 섹션 간격 | 3xl | `py-12` | 48px |
63
+ | 페이지 섹션 | 4xl | `py-16` | 64px |
64
+
65
+ ## 간격 유형
66
+
67
+ ### 1. Padding (내부 여백)
68
+
69
+ 요소 안쪽의 여백입니다.
70
+
71
+ ```tsx
72
+ // 전체 방향
73
+ <div className="p-4">16px 전체</div>
74
+
75
+ // 개별 방향
76
+ <div className="pt-4">위 16px</div>
77
+ <div className="pr-4">오른쪽 16px</div>
78
+ <div className="pb-4">아래 16px</div>
79
+ <div className="pl-4">왼쪽 16px</div>
80
+
81
+ // 축 방향
82
+ <div className="px-4">좌우 16px</div>
83
+ <div className="py-4">상하 16px</div>
84
+ ```
85
+
86
+ ### 2. Margin (외부 여백)
87
+
88
+ 요소 바깥쪽의 여백입니다.
89
+
90
+ ```tsx
91
+ // 전체 방향
92
+ <div className="m-4">16px 전체</div>
93
+
94
+ // 개별 방향
95
+ <div className="mt-4">위 16px</div>
96
+ <div className="mr-4">오른쪽 16px</div>
97
+ <div className="mb-4">아래 16px</div>
98
+ <div className="ml-4">왼쪽 16px</div>
99
+
100
+ // 자동 마진 (중앙 정렬)
101
+ <div className="mx-auto">좌우 중앙</div>
102
+ ```
103
+
104
+ ### 3. Gap (그리드/플렉스 간격)
105
+
106
+ Flexbox나 Grid 아이템 간의 간격입니다.
107
+
108
+ ```tsx
109
+ // Flexbox에서
110
+ <div className="flex gap-4">
111
+ <div>아이템 1</div>
112
+ <div>아이템 2</div> {/* 16px 간격 */}
113
+ <div>아이템 3</div>
114
+ </div>
115
+
116
+ // Grid에서
117
+ <div className="grid grid-cols-3 gap-6">
118
+ <div>카드 1</div>
119
+ <div>카드 2</div> {/* 24px 간격 */}
120
+ <div>카드 3</div>
121
+ </div>
122
+
123
+ // 축별 gap
124
+ <div className="flex gap-x-4 gap-y-2">
125
+ {/* 가로 16px, 세로 8px */}
126
+ </div>
127
+ ```
128
+
129
+ ## 실전 레이아웃 패턴
130
+
131
+ ### 1. 카드 컴포넌트
132
+
133
+ ```tsx
134
+ <div className="p-6 rounded-lg border border-gray-200">
135
+ {/* 제목 - 아래 간격 */}
136
+ <h3 className="text-lg font-semibold mb-2">카드 제목</h3>
137
+
138
+ {/* 본문 - 아래 간격 */}
139
+ <p className="text-gray-600 mb-4">
140
+ 카드 설명 텍스트입니다.
141
+ </p>
142
+
143
+ {/* 버튼 그룹 */}
144
+ <div className="flex gap-2">
145
+ <button className="px-4 py-2">취소</button>
146
+ <button className="px-4 py-2">확인</button>
147
+ </div>
148
+ </div>
149
+ ```
150
+
151
+ ### 2. 폼 레이아웃
152
+
153
+ ```tsx
154
+ <form className="space-y-6">
155
+ {/* 필드 그룹 */}
156
+ <div className="space-y-4">
157
+ <div>
158
+ <label className="block text-sm font-medium mb-1">이름</label>
159
+ <input className="w-full px-3 py-2 border rounded" />
160
+ </div>
161
+
162
+ <div>
163
+ <label className="block text-sm font-medium mb-1">이메일</label>
164
+ <input className="w-full px-3 py-2 border rounded" />
165
+ </div>
166
+ </div>
167
+
168
+ {/* 버튼 영역 */}
169
+ <div className="flex justify-end gap-3">
170
+ <button className="px-4 py-2">취소</button>
171
+ <button className="px-4 py-2 bg-blue-600 text-white">저장</button>
172
+ </div>
173
+ </form>
174
+ ```
175
+
176
+ ### 3. 페이지 섹션
177
+
178
+ ```tsx
179
+ <main className="py-12">
180
+ {/* 히어로 섹션 */}
181
+ <section className="py-16 px-4">
182
+ <div className="max-w-4xl mx-auto text-center">
183
+ <h1 className="text-4xl font-bold mb-4">히어로 제목</h1>
184
+ <p className="text-xl text-gray-600 mb-8">서브 타이틀</p>
185
+ <button>시작하기</button>
186
+ </div>
187
+ </section>
188
+
189
+ {/* 기능 섹션 */}
190
+ <section className="py-16 px-4 bg-gray-50">
191
+ <div className="max-w-6xl mx-auto">
192
+ <h2 className="text-3xl font-bold text-center mb-12">주요 기능</h2>
193
+ <div className="grid grid-cols-3 gap-8">
194
+ {/* 카드들 */}
195
+ </div>
196
+ </div>
197
+ </section>
198
+ </main>
199
+ ```
200
+
201
+ ### 4. 네비게이션 바
202
+
203
+ ```tsx
204
+ <nav className="px-4 py-3 border-b">
205
+ <div className="max-w-6xl mx-auto flex items-center justify-between">
206
+ {/* 로고 */}
207
+ <div className="font-bold text-xl">Logo</div>
208
+
209
+ {/* 메뉴 */}
210
+ <div className="flex items-center gap-6">
211
+ <a href="#">메뉴 1</a>
212
+ <a href="#">메뉴 2</a>
213
+ <a href="#">메뉴 3</a>
214
+ </div>
215
+
216
+ {/* 액션 */}
217
+ <div className="flex items-center gap-3">
218
+ <button className="px-3 py-1.5">로그인</button>
219
+ <button className="px-3 py-1.5 bg-blue-600 text-white rounded">
220
+ 시작하기
221
+ </button>
222
+ </div>
223
+ </div>
224
+ </nav>
225
+ ```
226
+
227
+ ## 반응형 간격
228
+
229
+ ### 화면 크기별 간격 조정
230
+
231
+ ```tsx
232
+ // 모바일에서 작게, 데스크탑에서 크게
233
+ <section className="py-8 md:py-12 lg:py-16">
234
+ <div className="px-4 md:px-6 lg:px-8">
235
+ {/* 콘텐츠 */}
236
+ </div>
237
+ </section>
238
+
239
+ // 그리드 간격 조정
240
+ <div className="grid gap-4 md:gap-6 lg:gap-8">
241
+ {/* 아이템들 */}
242
+ </div>
243
+ ```
244
+
245
+ ### 브레이크포인트별 권장 간격
246
+
247
+ | 요소 | Mobile | Tablet (md) | Desktop (lg) |
248
+ |------|--------|-------------|--------------|
249
+ | 컨테이너 패딩 | 16px | 24px | 32px |
250
+ | 섹션 간격 | 32px | 48px | 64px |
251
+ | 카드 간격 | 16px | 24px | 32px |
252
+ | 그리드 gap | 16px | 24px | 32px |
253
+
254
+ ## 시각적 그룹핑
255
+
256
+ ### 근접성의 법칙
257
+
258
+ > 가까이 있는 요소는 관련있어 보입니다.
259
+
260
+ ```tsx
261
+ // ✅ 좋은 예 - 관련 요소 그룹핑
262
+ <div>
263
+ <div className="mb-6">
264
+ <h3 className="mb-2">제목</h3> {/* 밀접: 8px */}
265
+ <p>설명 텍스트</p> {/* 같은 그룹 */}
266
+ </div>
267
+ {/* 분리: 24px */}
268
+ <div className="mb-6">
269
+ <h3 className="mb-2">다른 제목</h3> {/* 새 그룹 */}
270
+ <p>다른 설명</p>
271
+ </div>
272
+ </div>
273
+
274
+ // ❌ 나쁜 예 - 같은 간격으로 그룹 불명확
275
+ <div>
276
+ <h3 className="mb-4">제목</h3> {/* 16px */}
277
+ <p className="mb-4">설명 텍스트</p> {/* 16px - 구분 안됨 */}
278
+ <h3 className="mb-4">다른 제목</h3> {/* 16px - 구분 안됨 */}
279
+ <p className="mb-4">다른 설명</p>
280
+ </div>
281
+ ```
282
+
283
+ ### 간격 비율 권장
284
+
285
+ ```
286
+ 같은 그룹 내 요소: 8-12px (gap-2, gap-3)
287
+ 그룹과 그룹 사이: 24-32px (gap-6, gap-8)
288
+ 섹션과 섹션 사이: 48-64px (py-12, py-16)
289
+ ```
290
+
291
+ ## 컨테이너와 최대 너비
292
+
293
+ ### 표준 컨테이너
294
+
295
+ ```tsx
296
+ // 기본 컨테이너
297
+ <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
298
+ {/* 콘텐츠 */}
299
+ </div>
300
+
301
+ // 좁은 콘텐츠 (블로그, 문서)
302
+ <div className="max-w-3xl mx-auto px-4">
303
+ {/* 텍스트 콘텐츠 */}
304
+ </div>
305
+
306
+ // 넓은 콘텐츠 (대시보드)
307
+ <div className="max-w-full px-4 lg:px-8">
308
+ {/* 전체 너비 콘텐츠 */}
309
+ </div>
310
+ ```
311
+
312
+ ### 최대 너비 옵션
313
+
314
+ ```css
315
+ max-w-sm 384px 좁은 카드
316
+ max-w-md 448px 폼
317
+ max-w-lg 512px 모달
318
+ max-w-xl 576px 넓은 모달
319
+ max-w-2xl 672px 중간 콘텐츠
320
+ max-w-3xl 768px 블로그 글
321
+ max-w-4xl 896px 문서
322
+ max-w-5xl 1024px 표준 콘텐츠
323
+ max-w-6xl 1152px 넓은 콘텐츠
324
+ max-w-7xl 1280px 대시보드
325
+ ```
326
+
327
+ ## 체크리스트
328
+
329
+ ### 반드시 지켜야 할 것
330
+
331
+ - [ ] 일관된 간격 단위 사용 (8px 배수)
332
+ - [ ] 관련 요소는 가깝게, 다른 그룹은 멀리
333
+ - [ ] 반응형 간격 적용
334
+ - [ ] 충분한 터치 영역 (최소 44px)
335
+
336
+ ### 권장 사항
337
+
338
+ - [ ] `space-y-*`, `gap-*` 유틸리티 활용
339
+ - [ ] 섹션마다 일관된 패딩 적용
340
+ - [ ] 최대 너비로 가독성 확보
341
+ - [ ] 여백으로 시각적 계층 표현