@smorky85/auradkit-skill 5.3.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.
package/bin/install.js ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AuraDKit Skill Installer
4
+ * npx @smorky85/auradkit-skill → .claude/skills/auradkit/ 에 스킬 설치
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+
10
+ const SKILL_DIR = path.join(process.cwd(), '.claude', 'skills', 'auradkit');
11
+ const REF_DIR = path.join(SKILL_DIR, 'references');
12
+ const SRC_DIR = path.join(__dirname, '..', 'skill');
13
+
14
+ function copyDir(src, dest) {
15
+ fs.mkdirSync(dest, { recursive: true });
16
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
17
+ const srcPath = path.join(src, entry.name);
18
+ const destPath = path.join(dest, entry.name);
19
+ if (entry.isDirectory()) {
20
+ copyDir(srcPath, destPath);
21
+ } else {
22
+ fs.copyFileSync(srcPath, destPath);
23
+ console.log(` \x1b[32m✓\x1b[0m ${path.relative(SKILL_DIR, destPath)}`);
24
+ }
25
+ }
26
+ }
27
+
28
+ console.log();
29
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m Installing Design Intelligence Skill v5.3...');
30
+ console.log();
31
+
32
+ try {
33
+ copyDir(SRC_DIR, SKILL_DIR);
34
+
35
+ console.log();
36
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m ══════════════════════════════════════');
37
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m AuraDKit Skill v5.3 installed!');
38
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m');
39
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m Usage:');
40
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m /auradkit 유저 대시보드 만들어줘');
41
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m /auradkit --format=tsx 로그인 페이지');
42
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m');
43
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m 455 sites · 7 axes · avg 9.1/10');
44
+ console.log(' \x1b[36m[AuraDKit]\x1b[0m ══════════════════════════════════════');
45
+ console.log();
46
+ } catch (err) {
47
+ console.error(` \x1b[31m✗\x1b[0m Installation failed: ${err.message}`);
48
+ process.exit(1);
49
+ }
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@smorky85/auradkit-skill",
3
+ "version": "5.3.0",
4
+ "description": "AuraDKit — Design Intelligence Skill for Claude Code. 455개 사이트 학습 기반 S-Grade UI 생성.",
5
+ "bin": {
6
+ "auradkit-skill": "bin/install.js"
7
+ },
8
+ "files": [
9
+ "bin/",
10
+ "skill/"
11
+ ],
12
+ "keywords": ["claude-code", "skill", "design", "ui", "auradkit", "design-system"],
13
+ "author": "smorky85",
14
+ "license": "MIT",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/smorky850612/auradkit.git",
18
+ "directory": "packages/auradkit-skill"
19
+ }
20
+ }
package/skill/SKILL.md ADDED
@@ -0,0 +1,231 @@
1
+ <!-- AURADKIT ACTIVE -->
2
+ <!-- If this section is missing after context compaction, reload: /auradkit -->
3
+ # AuraDKit Design Intelligence v5.3
4
+ <!-- AURADKIT:STATIC — cache-stable content below. Do NOT place volatile data (site counts, dates) above DYNAMIC boundary. -->
5
+
6
+ ## Output Rules (MANDATORY)
7
+
8
+ ### 4 States — Every component: `default` · `loading` · `empty` · `error`
9
+ ```html
10
+ <section data-state="default"><!-- default | loading | empty | error --></section>
11
+ ```
12
+
13
+ ### Blocklist (ALWAYS ACTIVE)
14
+ 1. No div nesting > 3 levels → semantic HTML
15
+ 2. No inline style literals → `--aurad-*` tokens only
16
+ 3. No hardcoded HEX/RGB → CSS custom properties only
17
+ 4. No `outline: none` → `:focus-visible` with visible ring
18
+ 5. No layout props in transitions → `transform` + `opacity` only
19
+ 6. No `<div onclick>` → `<button>` or `<a href>`
20
+
21
+ ### Format Waterfall
22
+ `--format` → `.auradkit/system.md` → `package.json` detection → HTML
23
+
24
+ ### Write Guardrails
25
+ **NEVER:** `package.json` · `*.lock` · `.env*` · `tsconfig.json` · `*.config.*` · `.git/**` · `node_modules/**`
26
+ **WRITE TO:** `src/` `app/` `components/` `pages/` or user-specified path only.
27
+
28
+ ---
29
+
30
+ ## Token System
31
+ Full spec → `references/design-tokens.md`
32
+
33
+ ```css
34
+ /* Color tokens — use --aurad-fg for text color, --aurad-text-* for font sizes */
35
+ --aurad-primary: oklch(0.55 0.15 250); /* #3b82f6 */
36
+ --aurad-fg: oklch(0.25 0.02 250); /* #1e293b — text foreground */
37
+ --aurad-fg-inv: oklch(0.98 0.005 250); /* #f8fafc — text on colored bg */
38
+ --aurad-surface: oklch(0.98 0.005 250); /* #f8fafc */
39
+ --aurad-border: oklch(0.85 0.01 250); /* #cbd5e1 */
40
+ --aurad-error: oklch(0.55 0.20 25); /* #ef4444 */
41
+ --aurad-success: oklch(0.60 0.15 150); /* #22c55e */
42
+
43
+ /* Spacing tokens — 4px grid */
44
+ --aurad-space-[1|2|3|4|6|8|12|16|24]: 0.25→6rem
45
+
46
+ /* Font size tokens */
47
+ --aurad-text-[xs|sm|base|lg|xl|2xl|3xl|4xl]: .75→2.25rem
48
+
49
+ /* Typography */
50
+ --aurad-leading-tight: 1.25;
51
+ --aurad-leading-normal: 1.5;
52
+ --aurad-leading-relaxed: 1.75;
53
+
54
+ /* Radius, motion */
55
+ --aurad-radius-[sm|md|lg|xl|full]: 4|8|12|16|9999px
56
+ --aurad-duration-[fast|normal|slow]: 150|250|400ms
57
+ --aurad-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
58
+
59
+ /* Shadow — floating elements only */
60
+ --aurad-shadow-sm: 0 1px 2px oklch(0 0 0 / 0.05);
61
+ --aurad-shadow-md: 0 4px 6px oklch(0 0 0 / 0.07);
62
+ --aurad-shadow-lg: 0 10px 15px oklch(0 0 0 / 0.1);
63
+
64
+ /* Breakpoints */
65
+ --aurad-bp-sm: 640px; --aurad-bp-md: 768px; --aurad-bp-lg: 1024px; --aurad-bp-xl: 1280px;
66
+
67
+ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration:.01ms!important; transition-duration:.01ms!important } }
68
+ ```
69
+
70
+ **Dark mode** — add to `[data-theme="dark"]`:
71
+ ```css
72
+ [data-theme="dark"] {
73
+ --aurad-fg: oklch(0.90 0.02 250); /* #e2e8f0 */
74
+ --aurad-surface: oklch(0.15 0.005 250); /* #0f172a */
75
+ --aurad-border: oklch(0.30 0.01 250); /* #334155 */
76
+ --aurad-primary: oklch(0.65 0.15 250); /* #60a5fa */
77
+ }
78
+ ```
79
+
80
+ ---
81
+
82
+ ## WCAG AA Pairs
83
+ | Foreground | Background | Ratio |
84
+ |-----------|-----------|-------|
85
+ | `--aurad-fg` | `--aurad-surface` | 7.2:1 AAA |
86
+ | `--aurad-fg-inv` | `--aurad-primary` | 4.8:1 AA |
87
+ | `--aurad-primary` | `--aurad-surface` | 4.6:1 AA |
88
+ | `--aurad-error` | `--aurad-surface` | 4.5:1 AA |
89
+
90
+ ---
91
+
92
+ ## Critical Rules
93
+
94
+ - [CRITICAL] **prefers-reduced-motion 미적용**: 전역 CSS에 prefers-reduced-motion 블록을 추가하라.
95
+ - [CRITICAL] **하드코딩된 색상값 (HEX/RGB 직접 사용)**: 모든 하드코딩 색상을 CSS 변수로 교체하라. 다크모드, 브랜드 변경 대응 불가능.
96
+ - [HIGH] **임의 픽셀 간격 사용**: 모든 margin/padding/gap을 4px 배수 토큰으로 교체하라.
97
+ - [HIGH] **Layout 속성 애니메이션 (성능 문제)**: transform: translateX/Y, scale과 opacity만 애니메이션하라. GPU 합성 레이어 활용.
98
+ - [HIGH] **4종 이상 폰트 패밀리 혼용**: 최대 2종 폰트(헤딩용 + 본문용)로 줄여라. 단일 폰트도 충분히 효과적이다.
99
+ - [HIGH] **고유 색상값 과다 (30종 이상)**: semantic color 토큰 10개 이하로 팔레트를 정리하고 CSS 변수로 참조하라.
100
+ - [CRITICAL] **56개 사이트에서 WCAG AA 미달 색상 감지**: 사전 검증된 색상 쌍만 사용하라: --aurad-text on --aurad-surface = 7.2:1 (AAA).
101
+ - [HIGH] **터치 타겟 44px 준수율 저조 — 평균 29%**: 모든 인터랙티브 요소에 min-height: 44px; min-width: 44px를 적용하라.
102
+
103
+ Full catalog → `references/drift-patterns.md` (load on-demand for specific drift axis details)
104
+
105
+ ---
106
+
107
+ ## Design Principles (Top 5)
108
+
109
+ - **transform/opacity만 애니메이션** (95%): GPU 합성 레이어(transform, opacity)만 애니메이션하면 60fps를 유지할 수 있다.
110
+ - **2폰트 페어링이 이상적** (86%): 폰트 패밀리 2개(헤딩+본문)가 가장 일관성 있고 개성 있는 조합이다.
111
+ - **단일 H1 + Hero + CTA 조합** (85%): 페이지당 H1 하나, Hero 섹션, CTA 버튼이 함께 있을 때 시선 집중도가 최대화된다.
112
+ - **모듈러 스케일 80%+ 준수** (80%): \[12,14,16,18,20,24,30,36,48,60,72]px 표준값 80% 이상 사용 시 스케일 시스템이 인식된다.
113
+ - **4px 배수 간격 시스템 80%+ 준수** (74%): 모든 margin/padding/gap이 4px 배수일 때 공간 리듬이 형성된다. 80% 이상 준수가 목표.
114
+
115
+ All 15 principles across 7 axes → `references/principles.md` (load on-demand for axis-specific guidance)
116
+
117
+ ---
118
+
119
+ ## Post-Generation Checklist (MANDATORY — self-verify after every UI output)
120
+
121
+ After generating UI code, verify ALL items before presenting to user:
122
+
123
+ | # | Check | How to verify |
124
+ |---|-------|--------------|
125
+ | 1 | Zero hardcoded colors | grep for `#[0-9a-f]`, `rgb(`, `hsl(` outside comments — must be 0 |
126
+ | 2 | All colors use `--aurad-*` tokens | every color value references a CSS custom property |
127
+ | 3 | 4-state support | `data-state="default\|loading\|empty\|error"` present on main container |
128
+ | 4 | `prefers-reduced-motion` block | `@media (prefers-reduced-motion: reduce)` exists if any animation used |
129
+ | 5 | `:focus-visible` on interactives | every `<button>`, `<a>`, `<input>` has visible focus style |
130
+ | 6 | 4px grid spacing | all margin/padding/gap values are multiples of 4px or use `--aurad-space-*` |
131
+ | 7 | div nesting <= 3 | no `<div>` deeper than 3 levels — use semantic elements |
132
+ | 8 | No AI-slop (SLOP-01~07) | scan output against slop table below — if ANY SLOP code matches, rewrite that section |
133
+ | 9 | Semantic HTML | `<nav>`, `<main>`, `<section>`, `<article>` used over `<div>` |
134
+ | 10 | Touch targets >= 44px | interactive elements have `min-height: 44px; min-width: 44px` |
135
+
136
+ If ANY check fails, fix before output. Do not present unchecked code.
137
+
138
+ ---
139
+
140
+ ## Modern CSS & Mobile (ref sites: 138)
141
+
142
+ - `scroll-behavior:smooth`: 67% — add to html/body
143
+ - `line-clamp`: 62% — truncate card body text
144
+ - `text-wrap:balance`: 54% — use on headings
145
+ - `overscroll-behavior`: 50% — prevent modal bounce
146
+ - `@container`: 41% — component-level responsive
147
+
148
+ ---
149
+
150
+ ## Visual Intelligence (ref sites: 138)
151
+
152
+ **Design styles:** glassmorphism(107), mixed(13), editorial(11), minimalist(4)
153
+
154
+ **Visual effects:**
155
+ - Glassmorphism (backdrop-filter): 78% — blur + semi-transparent bg
156
+ - Gradient-heavy (3+): 83%
157
+ - Gradient text (background-clip:text): 42%
158
+ - Blend modes: 89%
159
+ - clip-path shapes: 64%
160
+ - Grain/noise texture: 10%
161
+
162
+ **Video:** - Sites using video: 40% (hero: 21%, WebM: 8%)
163
+
164
+ ---
165
+
166
+ ## Patterns
167
+
168
+ - **Floating Label Form** [form]: 입력 시 레이블이 위로 올라가는 floating label 패턴.
169
+ - **Sidebar + Main Content** [layout]: 좌측 고정 사이드바 + 우측 메인 콘텐츠 레이아웃. SaaS 대시보드 표준.
170
+ - **Sticky Navigation** [navigation]: 스크롤 시 상단에 고정되는 내비게이션 바.
171
+ - **3-Column Feature Grid** [card-grid]: 3컬럼 기능 소개 그리드. 아이콘 + 제목 + 설명 구조.
172
+ - **Typographic Scale System** [typography]: 12-72px 모듈러 스케일을 일관되게 적용한 타이포 시스템.
173
+ - **Accordion / FAQ** [card-grid]: FAQ/콘텐츠 아코디언. 정보 계층 정리에 효과적. details/summary 또는 JS 구현.
174
+ - **Accessible Motion (reduced-motion)** [animation]: @media (prefers-reduced-motion: reduce) 분기로 모든 애니메이션 접근성 지원.
175
+ - **Hero + CTA** [hero]: 전체 너비 히어로 섹션 + 중앙 CTA 버튼. 랜딩 페이지 필수 패턴.
176
+
177
+ ### Anti-Patterns (Design)
178
+ - ⚠ **Shadow Overuse**: 모든 요소에 과도한 drop-shadow 적용. 시각적 무게감 과부하.
179
+ - ⚠ **Form Without Error States**: 에러/성공 상태 없는 폼. 사용자 피드백 부재로 전환율 저하.
180
+ - ⚠ **Purple-Blue Gradient Hero**: 보라-파랑 그라데이션 히어로 배경. AI 생성 UI의 대표적 클리셰.
181
+
182
+ ### AI Slop Detection (SLOP-01~07 — MANDATORY real-time check)
183
+
184
+ | Code | Pattern | Detection | Alternative |
185
+ |------|---------|-----------|-------------|
186
+ | SLOP-01 | Purple-blue gradient hero | `linear-gradient` with H:220-320 in hero | Solid `--aurad-surface` + product screenshot |
187
+ | SLOP-02 | Generic icon set (94+ same lib) | All icons from one library, 0 custom | Fewer icons + custom brand mark |
188
+ | SLOP-03 | 3-col identical feature grid | `repeat(3,1fr)` + icon+h3+p same structure | Primary/secondary split layout |
189
+ | SLOP-04 | Floating dashboard screenshot | `perspective()` + `box-shadow:40px+` in hero img | Real screenshot, no transform theater |
190
+ | SLOP-05 | Glowing blur orbs | `filter:blur(60px+)` + `radial-gradient` + `position:absolute` | Border + surface color contrast |
191
+ | SLOP-06 | Star testimonial carousel | Stars + generic quote + stock avatar | Specific outcome quote + real attribution |
192
+ | SLOP-07 | Pill badge hero label | `border-radius:9999px` + "Introducing/New" above h1 | Changelog link or omit entirely |
193
+
194
+ **Text Slop Blocklist** — NEVER use these phrases in generated copy:
195
+ `blazing fast` · `seamless` · `robust` · `cutting-edge` · `state-of-the-art` · `easy to use` · `intuitive` · `powerful` · `secure by default` · `built for scale` · `enterprise-grade` · `next-generation`
196
+
197
+ **Core principle**: Replace generic category signal with specific product evidence.
198
+
199
+ Full rules + code examples → `knowledge-base/anti-ai-slop/` (load on-demand)
200
+
201
+ ### Category Hints (load on-demand)
202
+ - `form`: Floating Label Form
203
+ - `layout`: Sidebar + Main Content
204
+ - `navigation`: Sticky Navigation
205
+ - `card-grid`: 3-Column Feature Grid, Accordion / FAQ
206
+ - `typography`: Typographic Scale System
207
+
208
+ <!-- AURADKIT:DYNAMIC — volatile, changes per compilation -->
209
+ ---
210
+
211
+ ## Analysis Stats
212
+
213
+ | Axis | Score |
214
+ |------|-------|
215
+ | visualHierarchy | 9.1/10 |
216
+ | spatialRhythm | 9.1/10 |
217
+ | typography | 9.1/10 |
218
+ | color | 9.1/10 |
219
+ | motion | 9.1/10 |
220
+ | component | 9.1/10 |
221
+ | layout | 9.2/10 |
222
+
223
+ Drift: ✓ Low (20/100)
224
+ AI-Slop: ✓ Original (7/100)
225
+
226
+ > 455 sites · top refs: deno.com, magicui.design, zed.dev, astro.build, css-tricks.com, nextui.org, trigger.dev, vastspace.com
227
+ > Truncated? Run `node trainer/dist/index.js compile` · refs: `references/`
228
+
229
+ *AuraDKit v5.3 · 2026-04-06*
230
+ <!-- integrity:sha256:09a6b6c2a23b -->
231
+ <!-- /AURADKIT ACTIVE -->
@@ -0,0 +1,32 @@
1
+ # AuraDKit — Design Tokens Reference
2
+
3
+ > Generated from 455 sites. Reference tier: 138 sites.
4
+
5
+ ## Observed Font Size Scales
6
+ - angular.dev: 13, 14, 16, 51, 80px
7
+ - antfu.me: 16, 36px
8
+ - anthropic.com: 16, 18, 20px
9
+ - anthropic.com: 16, 18, 20px
10
+ - area17.com: 16, 20, 42, 55px
11
+
12
+ ## Observed Spacing Values
13
+ - angular.dev: 1, 2, 4, 6, 8, 12px
14
+ - antfu.me: 32px
15
+ - anthropic.com: 4, 8, 16, 31, 46, 61px
16
+ - anthropic.com: 4, 8, 16, 31, 46, 61px
17
+ - area17.com: 8, 12, 16, 24, 48, 64px
18
+
19
+ ## Token System Prevalence
20
+ 188/455 sites (41%) use CSS custom properties.
21
+ Top namespaces: `--color-` (57 sites), `--font-` (25 sites), `--wp-` (6 sites), `--radius-` (3 sites), `--gray` (3 sites)
22
+
23
+ ## Full Token Spec
24
+
25
+ See SKILL.md Token System for the complete `--aurad-*` token set.
26
+
27
+ All tokens follow:
28
+ - Spacing: 4px grid (0.25rem steps)
29
+ - Typography: modular scale [12,14,16,18,20,24,30,36,48]px
30
+ - Color: OKLCH with HEX fallback comments
31
+ - Radius: [4, 8, 12, 16, 9999]px
32
+ - Motion: [150, 250, 400]ms with `cubic-bezier(0.4, 0, 0.2, 1)`
@@ -0,0 +1,215 @@
1
+ # AuraDKit — Drift Patterns Catalog
2
+
3
+ > Detected patterns from crawled sites. Use these rules when reviewing generated UI.
4
+
5
+ - [Spacing Drift](#spacing-drift)
6
+ - [Typography Drift](#typography-drift)
7
+ - [Color Drift](#color-drift)
8
+ - [Radius Drift](#radius-drift)
9
+ - [Motion Drift](#motion-drift)
10
+
11
+ ---
12
+
13
+ ## Spacing Drift
14
+
15
+ ### [HIGH] 임의 픽셀 간격 사용
16
+ *Occurrences: 85 | Detection: 4px 배수 준수율 < 70%*
17
+
18
+ 3px, 7px, 11px, 13px 등 4px 배수가 아닌 임의 간격값이 산재해 있다.
19
+
20
+ **Fix**: 모든 margin/padding/gap을 4px 배수 토큰으로 교체하라.
21
+
22
+ ```css
23
+ /* ❌ 드리프트 */
24
+ margin-top: 13px;
25
+ padding: 7px 11px;
26
+
27
+ /* ✅ 수정 */
28
+ margin-top: var(--aurad-space-3); /* 12px */
29
+ padding: var(--aurad-space-2) var(--aurad-space-3); /* 8px 12px */
30
+ ```
31
+
32
+
33
+ ### [MEDIUM] 과도하게 밀집된 레이아웃
34
+ *Occurrences: 33 | Detection: 평균 margin/padding < 8px*
35
+
36
+ 평균 간격이 8px 미만으로, 콘텐츠가 답답하게 붙어 있다.
37
+
38
+ **Fix**: 섹션 간 padding을 최소 24px 이상, 카드 내부 padding을 최소 16px 이상으로 늘려라.
39
+
40
+
41
+
42
+ ### [MEDIUM] 간격 토큰 과다 (10종 이상)
43
+ *Occurrences: 9 | Detection: 고유 간격값 > 12종*
44
+
45
+ 10가지 이상의 서로 다른 간격값이 사용되어 일관성이 없다.
46
+
47
+ **Fix**: 간격 스케일을 8개 이하로 정리하고 CSS 변수로 통일하라.
48
+
49
+ ```css
50
+ /* 권장 간격 스케일 (9개) */
51
+ --aurad-space-1: 0.25rem; /* 4px */
52
+ --aurad-space-2: 0.5rem; /* 8px */
53
+ --aurad-space-3: 0.75rem; /* 12px */
54
+ --aurad-space-4: 1rem; /* 16px */
55
+ --aurad-space-6: 1.5rem; /* 24px */
56
+ --aurad-space-8: 2rem; /* 32px */
57
+ --aurad-space-12: 3rem; /* 48px */
58
+ --aurad-space-16: 4rem; /* 64px */
59
+ --aurad-space-24: 6rem; /* 96px */
60
+ ```
61
+
62
+
63
+ ---
64
+
65
+ ## Typography Drift
66
+
67
+ ### [HIGH] 4종 이상 폰트 패밀리 혼용
68
+ *Occurrences: 20 | Detection: 고유 font-family > 3종*
69
+
70
+ 4가지 이상의 폰트 패밀리가 동시에 사용되어 디자인이 혼란스럽다.
71
+
72
+ **Fix**: 최대 2종 폰트(헤딩용 + 본문용)로 줄여라. 단일 폰트도 충분히 효과적이다.
73
+
74
+
75
+
76
+ ### [HIGH] 폰트 크기 과다 (8종 이상)
77
+ *Occurrences: 9 | Detection: 고유 폰트 크기 > 8종*
78
+
79
+ 8가지 이상의 폰트 크기가 사용되어 시각적 위계가 무너진다.
80
+
81
+ **Fix**: 모듈러 스케일 6단계 이하로 제한하고 CSS 변수로 관리하라.
82
+
83
+ ```css
84
+ /* 권장 폰트 크기 스케일 (6단계) */
85
+ --aurad-text-xs: 0.75rem; /* 12px */
86
+ --aurad-text-sm: 0.875rem; /* 14px */
87
+ --aurad-text-base: 1rem; /* 16px */
88
+ --aurad-text-lg: 1.125rem; /* 18px */
89
+ --aurad-text-xl: 1.25rem; /* 20px */
90
+ --aurad-text-2xl: 1.5rem; /* 24px */
91
+ ```
92
+
93
+
94
+ ### [MEDIUM] 너무 좁은 행간 (< 1.3)
95
+ *Occurrences: 67 | Detection: 평균 line-height ratio < 1.3*
96
+
97
+ 행간이 1.3 미만으로 텍스트가 뭉쳐 보이고 가독성이 낮다.
98
+
99
+ **Fix**: 본문 텍스트 행간을 1.5-1.75로 설정하라.
100
+
101
+ ```css
102
+ /* ❌ 드리프트 */
103
+ p { line-height: 1.2; }
104
+
105
+ /* ✅ 수정 */
106
+ p { line-height: var(--aurad-leading-normal); } /* 1.5 */
107
+ ```
108
+
109
+
110
+ ### [MEDIUM] 비표준 폰트 크기 사용
111
+ *Occurrences: 13 | Detection: 모듈러 스케일 준수율 < 60%*
112
+
113
+ 15px, 17px, 22px 등 표준 모듈러 스케일에 없는 크기가 사용된다.
114
+
115
+ **Fix**: [12,14,16,18,20,24,30,36,48]px 표준값 중 가장 가까운 값으로 교체하라.
116
+
117
+
118
+
119
+ ---
120
+
121
+ ## Color Drift
122
+
123
+ ### [CRITICAL] 하드코딩된 색상값 (HEX/RGB 직접 사용)
124
+ *Occurrences: 11 | Detection: 인라인 스타일 또는 클래스에 HEX/RGB 리터럴 존재*
125
+
126
+ #3b82f6, rgb(59, 130, 246) 등의 리터럴 값이 코드에 직접 사용된다.
127
+
128
+ **Fix**: 모든 하드코딩 색상을 CSS 변수로 교체하라. 다크모드, 브랜드 변경 대응 불가능.
129
+
130
+ ```css
131
+ /* ❌ 드리프트 */
132
+ color: #1e293b;
133
+ background: rgb(248, 250, 252);
134
+
135
+ /* ✅ 수정 */
136
+ color: var(--aurad-fg);
137
+ background: var(--aurad-surface);
138
+ ```
139
+
140
+
141
+ ### [HIGH] 고유 색상값 과다 (30종 이상)
142
+ *Occurrences: 11 | Detection: 렌더링된 고유 색상 > 30종*
143
+
144
+ 30가지 이상의 서로 다른 색상값이 사용되어 색상 시스템이 없는 것과 같다.
145
+
146
+ **Fix**: semantic color 토큰 10개 이하로 팔레트를 정리하고 CSS 변수로 참조하라.
147
+
148
+ ```css
149
+ /* 권장 색상 팔레트 구조 */
150
+ --aurad-primary: oklch(0.55 0.15 250); /* #3b82f6 */
151
+ --aurad-fg: oklch(0.25 0.02 250); /* #1e293b */
152
+ --aurad-surface: oklch(0.98 0.005 250); /* #f8fafc */
153
+ --aurad-border: oklch(0.85 0.01 250); /* #cbd5e1 */
154
+ --aurad-error: oklch(0.55 0.20 25); /* #ef4444 */
155
+ --aurad-success: oklch(0.60 0.15 150); /* #22c55e */
156
+ ```
157
+
158
+
159
+ ---
160
+
161
+ ## Radius Drift
162
+
163
+ ### [MEDIUM] Border-radius 불일치
164
+ *Occurrences: 172 | Detection: 고유 border-radius > 5종 (0 제외)*
165
+
166
+ 버튼, 카드, 입력 등 각 요소가 서로 다른 border-radius를 사용한다.
167
+
168
+ **Fix**: radius 토큰 3-4개로 정의하고 일관되게 적용하라.
169
+
170
+ ```css
171
+ --aurad-radius-sm: 4px;
172
+ --aurad-radius-md: 8px; /* 기본 — 버튼, 입력 */
173
+ --aurad-radius-lg: 12px; /* 카드 */
174
+ --aurad-radius-full: 9999px; /* pill 버튼 */
175
+ ```
176
+
177
+
178
+ ---
179
+
180
+ ## Motion Drift
181
+
182
+ ### [CRITICAL] prefers-reduced-motion 미적용
183
+ *Occurrences: 87 | Detection: CSS에 prefers-reduced-motion 규칙 없음*
184
+
185
+ 모든 애니메이션에 접근성 미디어 쿼리가 없다. WCAG 2.1 AA 위반 가능.
186
+
187
+ **Fix**: 전역 CSS에 prefers-reduced-motion 블록을 추가하라.
188
+
189
+ ```css
190
+ @media (prefers-reduced-motion: reduce) {
191
+ *, *::before, *::after {
192
+ animation-duration: 0.01ms !important;
193
+ animation-iteration-count: 1 !important;
194
+ transition-duration: 0.01ms !important;
195
+ scroll-behavior: auto !important;
196
+ }
197
+ }
198
+ ```
199
+
200
+
201
+ ### [HIGH] Layout 속성 애니메이션 (성능 문제)
202
+ *Occurrences: 24 | Detection: transition에 width/height/top/left 포함*
203
+
204
+ width, height, top, left 등 레이아웃을 재계산하는 속성이 애니메이션된다.
205
+
206
+ **Fix**: transform: translateX/Y, scale과 opacity만 애니메이션하라. GPU 합성 레이어 활용.
207
+
208
+ ```css
209
+ /* ❌ 성능 드리프트 */
210
+ transition: width 0.3s, height 0.3s;
211
+
212
+ /* ✅ GPU 가속 */
213
+ transition: transform 0.3s, opacity 0.3s;
214
+ ```
215
+
@@ -0,0 +1,149 @@
1
+ # AuraDKit — Design Principles Reference
2
+
3
+ > Derived from 15 principles across 7 design axes.
4
+
5
+ ## motion
6
+
7
+ ### transform/opacity만 애니메이션
8
+ *Confidence: 95% | Threshold: 8.6/10*
9
+
10
+ GPU 합성 레이어(transform, opacity)만 애니메이션하면 60fps를 유지할 수 있다.
11
+
12
+ > ⚠ Anti-pattern: width/height/top/left 애니메이션은 레이아웃 재계산으로 janky.
13
+
14
+
15
+ ### prefers-reduced-motion 반드시 존중
16
+ *Confidence: 42% | Threshold: 6.6/10*
17
+
18
+ 모든 애니메이션에 prefers-reduced-motion 미디어 쿼리를 적용해야 한다.
19
+
20
+ > ⚠ Anti-pattern: 미적용 시 전정 장애 사용자에게 심각한 불편. WCAG 위반.
21
+
22
+
23
+ ---
24
+
25
+ ## typography
26
+
27
+ ### 2폰트 페어링이 이상적
28
+ *Confidence: 86% | Threshold: 7.6/10*
29
+
30
+ 폰트 패밀리 2개(헤딩+본문)가 가장 일관성 있고 개성 있는 조합이다.
31
+
32
+ > ⚠ Anti-pattern: 4종 이상: 혼란. 단일: 무난하나 개성 없음.
33
+
34
+
35
+ ### 모듈러 스케일 80%+ 준수
36
+ *Confidence: 80% | Threshold: 7/10*
37
+
38
+ [12,14,16,18,20,24,30,36,48,60,72]px 표준값 80% 이상 사용 시 스케일 시스템이 인식된다.
39
+
40
+ > ⚠ Anti-pattern: 임의 크기(15px, 17px, 22px)의 혼용은 스케일 인식을 깨뜨린다.
41
+
42
+
43
+ ### 본문 행간 1.4-1.75 황금 범위
44
+ *Confidence: 69% | Threshold: 7.5/10*
45
+
46
+ 행간이 1.4-1.75 사이일 때 가독성과 시각적 리듬이 최적화된다.
47
+
48
+ > ⚠ Anti-pattern: 행간 < 1.2: 텍스트 뭉침. 행간 > 2.0: 분절감.
49
+
50
+
51
+ ---
52
+
53
+ ## visual-hierarchy
54
+
55
+ ### 단일 H1 + Hero + CTA 조합
56
+ *Confidence: 85% | Threshold: 7.1/10*
57
+
58
+ 페이지당 H1 하나, Hero 섹션, CTA 버튼이 함께 있을 때 시선 집중도가 최대화된다.
59
+
60
+ > ⚠ Anti-pattern: H1이 2개 이상이면 SEO와 시각적 계층 모두 손상된다.
61
+
62
+
63
+ ### H1:본문 크기 비율 2.5-4.5x
64
+ *Confidence: 47% | Threshold: 6.5/10*
65
+
66
+ 헤딩이 본문의 2.5~4.5배 크기일 때 시각적 계층이 가장 명확하다.
67
+
68
+ > ⚠ Anti-pattern: 크기 차이가 1.5x 미만이면 계층이 모호해진다.
69
+
70
+
71
+ ---
72
+
73
+ ## spatial-rhythm
74
+
75
+ ### 4px 배수 간격 시스템 80%+ 준수
76
+ *Confidence: 74% | Threshold: 7.6/10*
77
+
78
+ 모든 margin/padding/gap이 4px 배수일 때 공간 리듬이 형성된다. 80% 이상 준수가 목표.
79
+
80
+ > ⚠ Anti-pattern: 임의적 간격(3px, 7px, 11px)이 많으면 디자인이 어수선해 보인다.
81
+
82
+
83
+ ### 평균 간격 12-32px 범위
84
+ *Confidence: 60% | Threshold: 7.3/10*
85
+
86
+ 평균 간격이 12-32px 범위일 때 밀도 균형이 적절하다.
87
+
88
+ > ⚠ Anti-pattern: 평균 < 8px: 답답함. 평균 > 48px: 내용 부족으로 보임.
89
+
90
+
91
+ ---
92
+
93
+ ## layout
94
+
95
+ ### 최소 3개 미디어 쿼리 브레이크포인트
96
+ *Confidence: 73% | Threshold: 6.7/10*
97
+
98
+ 모바일/태블릿/데스크톱 3단계 이상의 반응형 구조가 필요하다.
99
+
100
+ > ⚠ Anti-pattern: 브레이크포인트 없음: 모바일에서 레이아웃 붕괴.
101
+
102
+
103
+ ### header/nav/main/footer 시맨틱 구조
104
+ *Confidence: 63% | Threshold: 7.2/10*
105
+
106
+ 4가지 랜드마크(header, nav, main, footer)가 있으면 접근성과 SEO가 향상된다.
107
+
108
+ > ⚠ Anti-pattern: 모두 div로만 구성 시 스크린리더 탐색 불가.
109
+
110
+
111
+ ---
112
+
113
+ ## component
114
+
115
+ ### 컴포넌트 스타일 일관성 80%+
116
+ *Confidence: 57% | Threshold: 6.5/10*
117
+
118
+ 버튼 border-radius, 카드 스타일이 80% 이상 일관되어야 한다.
119
+
120
+ > ⚠ Anti-pattern: 각 컴포넌트마다 다른 radius를 쓰면 시스템이 아닌 수집품처럼 보인다.
121
+
122
+
123
+ ### 4상태 완전 구현 (default/loading/empty/error)
124
+ *Confidence: 10% | Threshold: 4.9/10*
125
+
126
+ 모든 데이터 표시 컴포넌트는 4가지 상태를 모두 처리해야 한다.
127
+
128
+ > ⚠ Anti-pattern: loading/empty/error 미구현 시 실제 사용에서 빈 화면 또는 크래시.
129
+
130
+
131
+ ---
132
+
133
+ ## color
134
+
135
+ ### CSS 커스텀 프로퍼티 2종 이상
136
+ *Confidence: 56% | Threshold: 7.1/10*
137
+
138
+ 색상을 CSS 변수(--color-primary 등)로 관리하면 테마 변경이 용이하다.
139
+
140
+ > ⚠ Anti-pattern: 하드코딩 색상값 사용 시 다크모드, 브랜드 변경 대응 불가.
141
+
142
+
143
+ ### WCAG AA 대비율 90%+ 통과
144
+ *Confidence: 33% | Threshold: 6.3/10*
145
+
146
+ 텍스트-배경 색상 쌍의 90% 이상이 4.5:1 이상 대비율을 유지해야 한다.
147
+
148
+ > ⚠ Anti-pattern: muted 텍스트를 작은 크기에 사용하면 AA 미달 가능.
149
+