@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 +49 -0
- package/package.json +20 -0
- package/skill/SKILL.md +231 -0
- package/skill/references/design-tokens.md +32 -0
- package/skill/references/drift-patterns.md +215 -0
- package/skill/references/principles.md +149 -0
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
|
+
|