@rune-kit/rune 2.8.0 → 2.11.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 (287) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +68 -34
  3. package/agents/adversary.md +27 -0
  4. package/agents/architect.md +19 -29
  5. package/agents/asset-creator.md +18 -4
  6. package/agents/audit.md +25 -4
  7. package/agents/autopsy.md +19 -4
  8. package/agents/ba.md +35 -0
  9. package/agents/brainstorm.md +31 -4
  10. package/agents/browser-pilot.md +21 -4
  11. package/agents/coder.md +21 -29
  12. package/agents/completion-gate.md +20 -4
  13. package/agents/constraint-check.md +18 -4
  14. package/agents/context-engine.md +22 -4
  15. package/agents/context-pack.md +32 -0
  16. package/agents/cook.md +41 -4
  17. package/agents/db.md +19 -4
  18. package/agents/debug.md +33 -4
  19. package/agents/dependency-doctor.md +20 -4
  20. package/agents/deploy.md +27 -4
  21. package/agents/design.md +22 -4
  22. package/agents/doc-processor.md +27 -0
  23. package/agents/docs-seeker.md +19 -4
  24. package/agents/docs.md +31 -0
  25. package/agents/fix.md +37 -4
  26. package/agents/git.md +29 -0
  27. package/agents/hallucination-guard.md +20 -4
  28. package/agents/incident.md +21 -4
  29. package/agents/integrity-check.md +18 -4
  30. package/agents/journal.md +19 -4
  31. package/agents/launch.md +32 -4
  32. package/agents/logic-guardian.md +26 -11
  33. package/agents/marketing.md +23 -4
  34. package/agents/mcp-builder.md +26 -0
  35. package/agents/neural-memory.md +30 -0
  36. package/agents/onboard.md +22 -4
  37. package/agents/perf.md +21 -4
  38. package/agents/plan.md +29 -4
  39. package/agents/preflight.md +22 -4
  40. package/agents/problem-solver.md +20 -4
  41. package/agents/rescue.md +23 -4
  42. package/agents/research.md +19 -4
  43. package/agents/researcher.md +19 -29
  44. package/agents/retro.md +32 -0
  45. package/agents/review-intake.md +20 -4
  46. package/agents/review.md +32 -4
  47. package/agents/reviewer.md +20 -28
  48. package/agents/safeguard.md +19 -4
  49. package/agents/sast.md +18 -4
  50. package/agents/scaffold.md +41 -0
  51. package/agents/scanner.md +19 -28
  52. package/agents/scope-guard.md +18 -4
  53. package/agents/scout.md +23 -4
  54. package/agents/sentinel-env.md +26 -0
  55. package/agents/sentinel.md +33 -4
  56. package/agents/sequential-thinking.md +20 -4
  57. package/agents/session-bridge.md +24 -4
  58. package/agents/skill-forge.md +22 -4
  59. package/agents/skill-router.md +26 -4
  60. package/agents/slides.md +24 -0
  61. package/agents/surgeon.md +19 -4
  62. package/agents/team.md +30 -4
  63. package/agents/test.md +36 -4
  64. package/agents/trend-scout.md +17 -4
  65. package/agents/verification.md +20 -4
  66. package/agents/video-creator.md +20 -4
  67. package/agents/watchdog.md +19 -4
  68. package/agents/worktree.md +17 -4
  69. package/commands/rune.md +168 -168
  70. package/compiler/__tests__/analytics.test.js +370 -0
  71. package/compiler/adapters/openclaw.js +2 -2
  72. package/compiler/analytics.js +385 -0
  73. package/compiler/bin/rune.js +68 -2
  74. package/compiler/dashboard.js +883 -0
  75. package/compiler/transforms/branding.js +1 -1
  76. package/contexts/dev.md +34 -34
  77. package/contexts/research.md +43 -43
  78. package/contexts/review.md +55 -55
  79. package/extensions/ai-ml/PACK.md +88 -88
  80. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  81. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  82. package/extensions/ai-ml/skills/deep-research.md +146 -146
  83. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  84. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  85. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  86. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  87. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  88. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  89. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  90. package/extensions/analytics/PACK.md +92 -92
  91. package/extensions/analytics/skills/ab-testing.md +72 -72
  92. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  93. package/extensions/analytics/skills/data-validation.md +68 -68
  94. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  95. package/extensions/analytics/skills/sql-patterns.md +57 -57
  96. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  97. package/extensions/analytics/skills/tracking-setup.md +71 -71
  98. package/extensions/backend/PACK.md +104 -104
  99. package/extensions/backend/skills/api-patterns.md +84 -84
  100. package/extensions/backend/skills/async-pipeline.md +193 -193
  101. package/extensions/backend/skills/auth-patterns.md +97 -97
  102. package/extensions/backend/skills/background-jobs.md +133 -133
  103. package/extensions/backend/skills/caching-patterns.md +108 -108
  104. package/extensions/backend/skills/cli-generation.md +133 -133
  105. package/extensions/backend/skills/database-patterns.md +87 -87
  106. package/extensions/backend/skills/middleware-patterns.md +104 -104
  107. package/extensions/chrome-ext/PACK.md +93 -93
  108. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  109. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  110. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  111. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  112. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  113. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  114. package/extensions/content/PACK.md +96 -96
  115. package/extensions/content/skills/blog-patterns.md +88 -88
  116. package/extensions/content/skills/cms-integration.md +131 -131
  117. package/extensions/content/skills/content-scoring.md +107 -107
  118. package/extensions/content/skills/i18n.md +83 -83
  119. package/extensions/content/skills/mdx-authoring.md +137 -137
  120. package/extensions/content/skills/reference.md +1014 -1014
  121. package/extensions/content/skills/seo-patterns.md +67 -67
  122. package/extensions/content/skills/video-repurpose.md +153 -153
  123. package/extensions/devops/PACK.md +101 -101
  124. package/extensions/devops/skills/chaos-testing.md +67 -67
  125. package/extensions/devops/skills/ci-cd.md +75 -75
  126. package/extensions/devops/skills/docker.md +58 -58
  127. package/extensions/devops/skills/edge-serverless.md +163 -163
  128. package/extensions/devops/skills/infra-as-code.md +158 -158
  129. package/extensions/devops/skills/kubernetes.md +110 -110
  130. package/extensions/devops/skills/monitoring.md +57 -57
  131. package/extensions/devops/skills/server-setup.md +64 -64
  132. package/extensions/devops/skills/ssl-domain.md +42 -42
  133. package/extensions/ecommerce/PACK.md +116 -116
  134. package/extensions/ecommerce/skills/cart-system.md +79 -79
  135. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  136. package/extensions/ecommerce/skills/order-management.md +126 -126
  137. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  138. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  139. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  140. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  141. package/extensions/gamedev/PACK.md +142 -142
  142. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  143. package/extensions/gamedev/skills/audio-system.md +129 -129
  144. package/extensions/gamedev/skills/camera-system.md +87 -87
  145. package/extensions/gamedev/skills/ecs.md +98 -98
  146. package/extensions/gamedev/skills/game-loops.md +72 -72
  147. package/extensions/gamedev/skills/input-system.md +199 -199
  148. package/extensions/gamedev/skills/multiplayer.md +180 -180
  149. package/extensions/gamedev/skills/particles.md +105 -105
  150. package/extensions/gamedev/skills/physics-engine.md +89 -89
  151. package/extensions/gamedev/skills/scene-management.md +146 -146
  152. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  153. package/extensions/gamedev/skills/webgl.md +71 -71
  154. package/extensions/mobile/PACK.md +106 -106
  155. package/extensions/mobile/skills/app-store-connect.md +152 -152
  156. package/extensions/mobile/skills/app-store-prep.md +66 -66
  157. package/extensions/mobile/skills/deep-linking.md +109 -109
  158. package/extensions/mobile/skills/flutter.md +60 -60
  159. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  160. package/extensions/mobile/skills/native-bridge.md +66 -66
  161. package/extensions/mobile/skills/ota-updates.md +97 -97
  162. package/extensions/mobile/skills/push-notifications.md +111 -111
  163. package/extensions/mobile/skills/react-native.md +82 -82
  164. package/extensions/saas/PACK.md +116 -116
  165. package/extensions/saas/skills/billing-integration.md +200 -200
  166. package/extensions/saas/skills/feature-flags.md +130 -130
  167. package/extensions/saas/skills/multi-tenant.md +103 -103
  168. package/extensions/saas/skills/onboarding-flow.md +139 -139
  169. package/extensions/saas/skills/subscription-flow.md +95 -95
  170. package/extensions/saas/skills/team-management.md +144 -144
  171. package/extensions/security/PACK.md +99 -99
  172. package/extensions/security/skills/api-security.md +140 -140
  173. package/extensions/security/skills/compliance.md +68 -68
  174. package/extensions/security/skills/owasp-audit.md +64 -64
  175. package/extensions/security/skills/pentest-patterns.md +77 -77
  176. package/extensions/security/skills/secret-mgmt.md +65 -65
  177. package/extensions/security/skills/supply-chain.md +65 -65
  178. package/extensions/trading/PACK.md +80 -80
  179. package/extensions/trading/skills/chart-components.md +55 -55
  180. package/extensions/trading/skills/experiment-loop.md +125 -125
  181. package/extensions/trading/skills/fintech-patterns.md +47 -47
  182. package/extensions/trading/skills/indicator-library.md +58 -58
  183. package/extensions/trading/skills/quant-analysis.md +111 -111
  184. package/extensions/trading/skills/realtime-data.md +58 -58
  185. package/extensions/trading/skills/trade-logic.md +104 -104
  186. package/extensions/ui/PACK.md +130 -130
  187. package/extensions/ui/skills/a11y-audit.md +91 -91
  188. package/extensions/ui/skills/animation-patterns.md +127 -106
  189. package/extensions/ui/skills/component-patterns.md +100 -75
  190. package/extensions/ui/skills/design-decision.md +108 -108
  191. package/extensions/ui/skills/design-system.md +68 -68
  192. package/extensions/ui/skills/landing-patterns.md +155 -155
  193. package/extensions/ui/skills/palette-picker.md +173 -173
  194. package/extensions/ui/skills/react-health.md +90 -90
  195. package/extensions/ui/skills/type-system.md +125 -125
  196. package/extensions/ui/skills/web-vitals.md +153 -153
  197. package/extensions/zalo/PACK.md +145 -145
  198. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  199. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  200. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  201. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  202. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  203. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  204. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  205. package/hooks/auto-format/index.cjs +48 -48
  206. package/hooks/context-watch/index.cjs +95 -68
  207. package/hooks/hooks.json +111 -111
  208. package/hooks/metrics-collector/index.cjs +86 -42
  209. package/hooks/post-session-reflect/index.cjs +189 -153
  210. package/hooks/pre-compact/index.cjs +95 -95
  211. package/hooks/run-hook.cmd +1 -1
  212. package/hooks/secrets-scan/index.cjs +100 -100
  213. package/hooks/session-start/index.cjs +71 -65
  214. package/hooks/typecheck/index.cjs +65 -65
  215. package/package.json +63 -63
  216. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  217. package/references/ui-pro-max-data/charts.csv +26 -26
  218. package/references/ui-pro-max-data/colors.csv +161 -161
  219. package/references/ui-pro-max-data/styles.csv +68 -68
  220. package/references/ui-pro-max-data/typography.csv +74 -74
  221. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  222. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  223. package/skills/adversary/SKILL.md +283 -283
  224. package/skills/asset-creator/SKILL.md +157 -157
  225. package/skills/audit/SKILL.md +148 -2
  226. package/skills/autopsy/SKILL.md +335 -259
  227. package/skills/autopsy/references/repo-analysis-patterns.md +113 -0
  228. package/skills/ba/SKILL.md +72 -2
  229. package/skills/brainstorm/SKILL.md +342 -341
  230. package/skills/browser-pilot/SKILL.md +168 -168
  231. package/skills/constraint-check/SKILL.md +165 -165
  232. package/skills/context-engine/SKILL.md +404 -404
  233. package/skills/cook/SKILL.md +917 -834
  234. package/skills/cook/references/output-format.md +33 -0
  235. package/skills/db/SKILL.md +273 -272
  236. package/skills/debug/SKILL.md +465 -443
  237. package/skills/dependency-doctor/SKILL.md +265 -235
  238. package/skills/deploy/SKILL.md +274 -231
  239. package/skills/design/DESIGN-REFERENCE.md +365 -365
  240. package/skills/design/SKILL.md +589 -482
  241. package/skills/doc-processor/SKILL.md +254 -254
  242. package/skills/docs/SKILL.md +374 -373
  243. package/skills/docs-seeker/SKILL.md +177 -177
  244. package/skills/fix/SKILL.md +330 -308
  245. package/skills/git/SKILL.md +339 -339
  246. package/skills/graft/SKILL.md +352 -0
  247. package/skills/graft/references/challenge-framework.md +98 -0
  248. package/skills/graft/references/mode-decision.md +44 -0
  249. package/skills/hallucination-guard/SKILL.md +219 -219
  250. package/skills/incident/SKILL.md +254 -251
  251. package/skills/integrity-check/SKILL.md +169 -169
  252. package/skills/journal/SKILL.md +240 -238
  253. package/skills/launch/SKILL.md +344 -342
  254. package/skills/logic-guardian/SKILL.md +251 -251
  255. package/skills/marketing/SKILL.md +290 -245
  256. package/skills/mcp-builder/SKILL.md +425 -423
  257. package/skills/mcp-builder/references/auto-discovery-pattern.md +169 -0
  258. package/skills/neural-memory/SKILL.md +362 -362
  259. package/skills/onboard/SKILL.md +404 -403
  260. package/skills/perf/SKILL.md +346 -346
  261. package/skills/plan/SKILL.md +433 -370
  262. package/skills/plan/references/feature-map.md +84 -0
  263. package/skills/preflight/SKILL.md +415 -396
  264. package/skills/problem-solver/SKILL.md +380 -284
  265. package/skills/rescue/SKILL.md +474 -450
  266. package/skills/retro/SKILL.md +5 -1
  267. package/skills/review/SKILL.md +612 -535
  268. package/skills/review-intake/SKILL.md +249 -249
  269. package/skills/safeguard/SKILL.md +200 -200
  270. package/skills/sast/SKILL.md +190 -190
  271. package/skills/scaffold/SKILL.md +328 -286
  272. package/skills/scope-guard/SKILL.md +180 -162
  273. package/skills/scout/SKILL.md +263 -263
  274. package/skills/sentinel/SKILL.md +382 -353
  275. package/skills/sentinel-env/SKILL.md +254 -254
  276. package/skills/sequential-thinking/SKILL.md +234 -234
  277. package/skills/session-bridge/SKILL.md +543 -397
  278. package/skills/skill-forge/SKILL.md +581 -539
  279. package/skills/skill-router/{skill.md → SKILL.md} +30 -2
  280. package/skills/surgeon/SKILL.md +215 -215
  281. package/skills/team/SKILL.md +556 -514
  282. package/skills/test/SKILL.md +614 -587
  283. package/skills/trend-scout/SKILL.md +145 -145
  284. package/skills/verification/SKILL.md +326 -325
  285. package/skills/video-creator/SKILL.md +201 -201
  286. package/skills/watchdog/SKILL.md +168 -168
  287. package/skills/worktree/SKILL.md +140 -140
@@ -1,365 +1,365 @@
1
- # Design Reference — Rune Baseline
2
-
3
- Public design knowledge for the `design` skill. Universal best practices — not personal taste.
4
-
5
- > **Override**: Users can create `~/.claude/docs/design-dna.md` to override any section with their own curated preferences. The design skill reads this file first if it exists, then falls back to this baseline.
6
-
7
- ---
8
-
9
- ## 1. Font Pairing Guide
10
-
11
- Choose based on product domain. Avoid using a single font family for everything.
12
-
13
- ### Recommended Pairings
14
-
15
- | Name | Headline | Body | Best For |
16
- |------|----------|------|----------|
17
- | **Tech Modern** | Space Grotesk 700 | Inter 400/500 | SaaS, Developer Tools, AI |
18
- | **Financial Trust** | IBM Plex Sans 600 | IBM Plex Sans 400 | Banking, Insurance, Enterprise |
19
- | **Startup Bold** | Satoshi 700 | DM Sans 400 | Startups, Products, Landing |
20
- | **Editorial Clean** | Playfair Display 700 | Source Sans 3 400 | Blogs, Magazines, Portfolios |
21
- | **Medical Clear** | Inter 600 | Inter 400 | Healthcare, Government, Accessibility-first |
22
- | **E-commerce Warm** | DM Serif Display 400 | DM Sans 400 | Retail, Lifestyle, Fashion |
23
- | **Gaming Bold** | Rajdhani 700 | Exo 2 400 | Gaming, Esports, Entertainment |
24
- | **Data Dense** | Inter 600 | Inter 400 | Dashboards, Analytics, BI |
25
-
26
- ### Monospace Fonts (for numeric data)
27
-
28
- | Font | Best For |
29
- |------|----------|
30
- | JetBrains Mono 700 | Financial data, prices, P&L, metrics |
31
- | Fira Code 500 | Code blocks, terminal output |
32
- | IBM Plex Mono 400 | Tables, technical documentation |
33
-
34
- ### Rules
35
-
36
- - Financial numbers: **always** monospace + bold — prevents layout shift and signals precision
37
- - Body text: minimum 14px, prefer 16px for readability
38
- - Line height: 1.5 for body, 1.2 for headings
39
- - Max content width: 720px for prose, 1280px for dashboards
40
- - Heading scale ratio: ~1.25 (minor third) for dense UI, ~1.333 (perfect fourth) for marketing
41
-
42
- ---
43
-
44
- ## 2. Chart Type Selection
45
-
46
- Match chart type to the data story, not to what looks fancy.
47
-
48
- | Data Story | Chart Type | Notes |
49
- |------------|-----------|-------|
50
- | **Trend over time** | Line chart, Area chart | Area for volume, Line for precision |
51
- | **Comparison** | Bar chart (vertical or horizontal) | Horizontal for long labels |
52
- | **Part of whole** | Donut, Treemap | Donut for ≤6 segments, Treemap for hierarchical |
53
- | **Distribution** | Histogram, Box plot | Box plot for comparing distributions |
54
- | **Correlation** | Scatter plot | Always include a data table fallback for accessibility |
55
- | **Ranking** | Horizontal bar | Sort by value, not alphabetically |
56
- | **Flow/Process** | Sankey, Funnel | Funnel for conversion, Sankey for multi-path |
57
- | **Geographic** | Choropleth map | Pair with data table (maps are hard to read precisely) |
58
- | **Real-time** | Streaming line/area | Include pause button, auto-scroll, last-updated timestamp |
59
- | **Financial** | Candlestick (OHLC) | Use dedicated charting lib (Lightweight Charts, TradingView) |
60
- | **KPI/Metric** | Single number + sparkline | Large number, small contextual trend line |
61
-
62
- ### Chart Accessibility
63
-
64
- - Never rely on color alone — use patterns, labels, or both
65
- - Provide data table alternative for screen readers
66
- - Minimum contrast between adjacent data series
67
- - Include clear axis labels and units
68
-
69
- ### Recommended Libraries
70
-
71
- | Platform | Library | Notes |
72
- |----------|---------|-------|
73
- | React | Recharts | Simple, composable, good defaults |
74
- | React (advanced) | Nivo | D3-based, rich chart types |
75
- | Financial | Lightweight Charts (TradingView) | Candlestick, real-time optimized |
76
- | General web | Chart.js | Lightweight, canvas-based |
77
- | Data-heavy | Observable Plot | Statistical charts, D3-based |
78
-
79
- ---
80
-
81
- ## 3. Component Architecture
82
-
83
- Three-layer pattern prevents component bloat.
84
-
85
- ```
86
- ui/ → Primitives (Button, Input, Dialog, Card, Badge, Avatar)
87
- No business logic. Props = visual variants only.
88
- Example: <Button variant="primary" size="md" />
89
-
90
- components/ → Composed (PriceDisplay, UserCard, NotificationBell, SearchBar)
91
- Combines 2-5 primitives with light business logic.
92
- Example: <PriceDisplay value={42.50} currency="USD" change={+2.3} />
93
-
94
- features/ → Page modules (DashboardOverview, SettingsPanel, CheckoutFlow)
95
- Full business logic, data fetching, state management.
96
- Never imported by ui/ or components/.
97
- ```
98
-
99
- ### Rules
100
-
101
- - Primitives: <100 LOC, ≤5 props (not counting `className`)
102
- - If a component has >8 boolean props → refactor to compound pattern
103
- - If a component has >3 conditional renders → split into variants
104
- - Features never import from other features (use shared components/ instead)
105
-
106
- ---
107
-
108
- ## 4. Color Fundamentals
109
-
110
- Not specific palettes — principles for choosing colors.
111
-
112
- ### Semantic Color Roles
113
-
114
- Every design system needs these 10 tokens minimum:
115
-
116
- ```
117
- Background: --bg-base, --bg-surface, --bg-elevated
118
- Text: --text-primary, --text-secondary
119
- Border: --border-default
120
- Interactive: --accent (brand/primary action)
121
- Status: --success, --danger, --warning
122
- ```
123
-
124
- ### Domain-Specific Color Rules
125
-
126
- | Domain | Key Rule |
127
- |--------|----------|
128
- | Finance/Trading | Profit/Loss colors are semantic signals, NOT brand. Reserve green/red exclusively for data meaning. |
129
- | Healthcare | Red = clinical alert ONLY. Never decorative red. |
130
- | E-commerce | CTA button must be highest-contrast element on page. |
131
- | Developer Tools | Dark mode default. Accent colors should complement syntax highlighting, not clash. |
132
- | AI/ML | Purple/violet is acceptable (established AI signal). Not elsewhere. |
133
-
134
- ### Contrast Requirements (WCAG 2.2 AA)
135
-
136
- | Element | Minimum Ratio |
137
- |---------|---------------|
138
- | Normal text (<18px) | 4.5:1 |
139
- | Large text (≥18px bold or ≥24px) | 3:1 |
140
- | UI components (borders, icons) | 3:1 |
141
- | Focus indicator | 3:1 against adjacent colors |
142
-
143
- ### Dark Mode Principles
144
-
145
- - Don't just invert colors — adjust saturation (desaturate in dark mode)
146
- - Surface elevation = lighter shade (not darker)
147
- - Avoid pure white (#fff) text on dark — use #f0f0f0 or similar
148
- - Test both modes — don't treat dark mode as afterthought
149
-
150
- ---
151
-
152
- ## 5. Spacing & Layout
153
-
154
- ### 8px Grid
155
-
156
- ```
157
- xs: 4px — tight inline spacing
158
- sm: 8px — default gap between related elements
159
- md: 16px — section padding, card padding
160
- lg: 24px — section gaps
161
- xl: 32px — major section breaks
162
- 2xl: 48px — page section spacing
163
- 3xl: 64px — hero/above-fold vertical rhythm
164
- ```
165
-
166
- ### Border Radius
167
-
168
- ```
169
- sm: 6px — inputs, small chips
170
- md: 8px — cards, containers
171
- lg: 12px — modals, large surfaces
172
- xl: 16px — hero cards, feature sections
173
- full: 9999px — pills, avatars, circular buttons
174
- ```
175
-
176
- ### Responsive Breakpoints
177
-
178
- ```
179
- sm: 640px — mobile landscape
180
- md: 768px — tablet portrait
181
- lg: 1024px — tablet landscape / small desktop
182
- xl: 1280px — desktop
183
- 2xl: 1536px — large desktop
184
- ```
185
-
186
- - Design mobile-first (min-width media queries)
187
- - Test at: 375px (iPhone SE), 768px, 1024px, 1440px
188
- - Content max-width: 1280px (dashboard), 720px (prose)
189
-
190
- ---
191
-
192
- ## 6. Interaction Patterns
193
-
194
- ### Micro-Interactions (Universal)
195
-
196
- | Trigger | Animation | Duration | Easing |
197
- |---------|-----------|----------|--------|
198
- | Hover on card | scale(1.02) + shadow lift | 200ms | ease-out |
199
- | Button click | scale(0.97) | 100ms | ease-in |
200
- | Page transition | fade + slide 8px | 200ms | ease |
201
- | Data loading | Skeleton shimmer | loop | linear |
202
- | Toast notification | slide-in from edge | 300ms | cubic-bezier(0.34, 1.56, 0.64, 1) |
203
- | Modal open | fade bg + scale content from 0.95 | 200ms | ease-out |
204
-
205
- ### Real-Time Data UX
206
-
207
- - Price/value updates: flash background color briefly (green up, red down, 600ms fade)
208
- - Live indicator: pulsing green dot (CSS animation, not JS)
209
- - Auto-updating lists: new items slide in from top, don't jump
210
- - Always show "Last updated: X seconds ago" for stale data awareness
211
- - Pause/resume button for streaming data
212
-
213
- ### Loading States
214
-
215
- | Duration | Pattern |
216
- |----------|---------|
217
- | <300ms | No indicator (perceived as instant) |
218
- | 300ms–2s | Skeleton loader or spinner |
219
- | 2s–10s | Progress bar or step indicator |
220
- | >10s | Progress + estimated time + cancel button |
221
-
222
- ### Form Patterns
223
-
224
- - Inline validation (on blur, not on every keystroke)
225
- - Disable submit button during async operation + show spinner
226
- - Error messages below the field, not in alert dialogs
227
- - Success: brief toast (3s auto-dismiss) — don't redirect immediately
228
-
229
- ---
230
-
231
- ## 7. UX Checklist
232
-
233
- ### Critical (Block Ship)
234
-
235
- - [ ] Color contrast ≥ 4.5:1 for all text
236
- - [ ] Focus-visible ring on ALL interactive elements (never `outline: none` alone)
237
- - [ ] Touch targets ≥ 44×44px with 8px gap between targets
238
- - [ ] `aria-label` on ALL icon-only buttons
239
- - [ ] Every `<input>` has associated `<label>` or `aria-label`
240
- - [ ] Semantic HTML (`<button>` not `<div onClick>`, `<nav>`, `<main>`, `<section>`)
241
- - [ ] `aria-hidden="true"` on decorative icons/images
242
- - [ ] `cursor-pointer` on all clickable non-button elements
243
- - [ ] Don't convey information by color alone — add icon, text, or pattern
244
-
245
- ### High (Fix Before Launch)
246
-
247
- - [ ] Empty state, error state, loading state for all async data
248
- - [ ] Disable + spinner on async buttons (prevent double submit)
249
- - [ ] Virtualize lists with >50 items (react-window, @tanstack/virtual)
250
- - [ ] `prefers-reduced-motion` respected for all animations
251
- - [ ] Dark mode support (or explicit documented reason why not)
252
- - [ ] Responsive tested at 375px, 768px, 1024px, 1440px
253
- - [ ] No layout shift on data load (reserve space with skeletons)
254
- - [ ] Error messages are specific and actionable (not "Something went wrong")
255
-
256
- ### Medium (Polish)
257
-
258
- - [ ] Skeleton loaders match actual content shape (not generic boxes)
259
- - [ ] Hover states on all interactive elements
260
- - [ ] Keyboard navigation works for all flows (Tab, Enter, Escape)
261
- - [ ] Command palette (Cmd+K / Ctrl+K) for power users (SaaS/DevTools)
262
- - [ ] Number count-up animation on KPI cards (first load only)
263
- - [ ] Toast notifications positioned consistently (bottom-right recommended)
264
- - [ ] Page titles update on navigation (`<title>` or document.title)
265
-
266
- ---
267
-
268
- ## 8. CSS Patterns
269
-
270
- ### Glassmorphism
271
-
272
- ```css
273
- .glass {
274
- background: rgba(255, 255, 255, 0.05);
275
- backdrop-filter: blur(12px);
276
- -webkit-backdrop-filter: blur(12px);
277
- border: 1px solid rgba(255, 255, 255, 0.1);
278
- border-radius: 16px;
279
- }
280
- ```
281
-
282
- ### Shadows
283
-
284
- ```css
285
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
286
- --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
287
- --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
288
- --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15);
289
- ```
290
-
291
- ### Animation Timing
292
-
293
- ```css
294
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
295
- --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
296
- --duration-fast: 150ms;
297
- --duration-normal: 250ms;
298
- --duration-slow: 350ms;
299
- ```
300
-
301
- ### Reduced Motion
302
-
303
- ```css
304
- @media (prefers-reduced-motion: reduce) {
305
- *, *::before, *::after {
306
- animation-duration: 0.01ms !important;
307
- animation-iteration-count: 1 !important;
308
- transition-duration: 0.01ms !important;
309
- scroll-behavior: auto !important;
310
- }
311
- }
312
- ```
313
-
314
- ---
315
-
316
- ## 9. Number & Currency Formatting
317
-
318
- ```typescript
319
- // Always use Intl.NumberFormat — never manual toFixed()
320
- const fmtCurrency = (v: number, currency = 'USD') =>
321
- new Intl.NumberFormat('en-US', {
322
- style: 'currency',
323
- currency,
324
- minimumFractionDigits: 2
325
- }).format(v)
326
-
327
- const fmtCompact = (v: number) =>
328
- new Intl.NumberFormat('en-US', {
329
- notation: 'compact',
330
- maximumFractionDigits: 1
331
- }).format(v)
332
-
333
- const fmtPercent = (v: number) =>
334
- new Intl.NumberFormat('en-US', {
335
- style: 'percent',
336
- minimumFractionDigits: 2
337
- }).format(v / 100)
338
- ```
339
-
340
- ### Rules
341
-
342
- - Financial values: always 2 decimal places, monospace font
343
- - Large numbers: compact notation (1.2K, 3.4M) for display, full on hover
344
- - Percentages: include sign (+2.34%, -1.50%)
345
- - Variance coloring: positive = success color, negative = danger color
346
- - Add directional icon alongside color: ▲ up, ▼ down (don't rely on color alone)
347
-
348
- ---
349
-
350
- ## 10. Anti-Pattern Signatures (AI-Generated UI)
351
-
352
- These patterns signal "this was generated by AI, not designed by a human." Avoid them.
353
-
354
- | Anti-Pattern | Why It Fails | Fix |
355
- |-------------|-------------|-----|
356
- | Purple-to-blue gradient hero | Default AI output, no design intent | Choose domain-appropriate palette |
357
- | Card grid monotony | Every section is equal cards in a grid | Vary layout: hero → features → testimonials → CTA |
358
- | Centered everything | Breaks left-to-right reading flow | Left-align body text, center only headings/CTAs |
359
- | Inter-only typography | Zero personality, signals laziness | Use a pairing: display font + body font |
360
- | Generic stock photos | Instantly recognizable as filler | Use illustrations, icons, or real screenshots |
361
- | Animations on everything | Distracting, delays information access | Animate entry once, keep data static |
362
- | Missing states | No empty, error, or loading states | Design all 4 states: default, loading, empty, error |
363
- | Enormous padding | Wastes space, signals no content | Tighter spacing in data-dense UI, generous only in marketing |
364
- | Rainbow status colors | Red, yellow, green, blue, purple all on one dashboard | Max 3 status colors per context |
365
- | Fixed-width everything | Doesn't respond to viewport | Fluid widths, container queries where appropriate |
1
+ # Design Reference — Rune Baseline
2
+
3
+ Public design knowledge for the `design` skill. Universal best practices — not personal taste.
4
+
5
+ > **Override**: Users can create `~/.claude/docs/design-dna.md` to override any section with their own curated preferences. The design skill reads this file first if it exists, then falls back to this baseline.
6
+
7
+ ---
8
+
9
+ ## 1. Font Pairing Guide
10
+
11
+ Choose based on product domain. Avoid using a single font family for everything.
12
+
13
+ ### Recommended Pairings
14
+
15
+ | Name | Headline | Body | Best For |
16
+ |------|----------|------|----------|
17
+ | **Tech Modern** | Space Grotesk 700 | Inter 400/500 | SaaS, Developer Tools, AI |
18
+ | **Financial Trust** | IBM Plex Sans 600 | IBM Plex Sans 400 | Banking, Insurance, Enterprise |
19
+ | **Startup Bold** | Satoshi 700 | DM Sans 400 | Startups, Products, Landing |
20
+ | **Editorial Clean** | Playfair Display 700 | Source Sans 3 400 | Blogs, Magazines, Portfolios |
21
+ | **Medical Clear** | Inter 600 | Inter 400 | Healthcare, Government, Accessibility-first |
22
+ | **E-commerce Warm** | DM Serif Display 400 | DM Sans 400 | Retail, Lifestyle, Fashion |
23
+ | **Gaming Bold** | Rajdhani 700 | Exo 2 400 | Gaming, Esports, Entertainment |
24
+ | **Data Dense** | Inter 600 | Inter 400 | Dashboards, Analytics, BI |
25
+
26
+ ### Monospace Fonts (for numeric data)
27
+
28
+ | Font | Best For |
29
+ |------|----------|
30
+ | JetBrains Mono 700 | Financial data, prices, P&L, metrics |
31
+ | Fira Code 500 | Code blocks, terminal output |
32
+ | IBM Plex Mono 400 | Tables, technical documentation |
33
+
34
+ ### Rules
35
+
36
+ - Financial numbers: **always** monospace + bold — prevents layout shift and signals precision
37
+ - Body text: minimum 14px, prefer 16px for readability
38
+ - Line height: 1.5 for body, 1.2 for headings
39
+ - Max content width: 720px for prose, 1280px for dashboards
40
+ - Heading scale ratio: ~1.25 (minor third) for dense UI, ~1.333 (perfect fourth) for marketing
41
+
42
+ ---
43
+
44
+ ## 2. Chart Type Selection
45
+
46
+ Match chart type to the data story, not to what looks fancy.
47
+
48
+ | Data Story | Chart Type | Notes |
49
+ |------------|-----------|-------|
50
+ | **Trend over time** | Line chart, Area chart | Area for volume, Line for precision |
51
+ | **Comparison** | Bar chart (vertical or horizontal) | Horizontal for long labels |
52
+ | **Part of whole** | Donut, Treemap | Donut for ≤6 segments, Treemap for hierarchical |
53
+ | **Distribution** | Histogram, Box plot | Box plot for comparing distributions |
54
+ | **Correlation** | Scatter plot | Always include a data table fallback for accessibility |
55
+ | **Ranking** | Horizontal bar | Sort by value, not alphabetically |
56
+ | **Flow/Process** | Sankey, Funnel | Funnel for conversion, Sankey for multi-path |
57
+ | **Geographic** | Choropleth map | Pair with data table (maps are hard to read precisely) |
58
+ | **Real-time** | Streaming line/area | Include pause button, auto-scroll, last-updated timestamp |
59
+ | **Financial** | Candlestick (OHLC) | Use dedicated charting lib (Lightweight Charts, TradingView) |
60
+ | **KPI/Metric** | Single number + sparkline | Large number, small contextual trend line |
61
+
62
+ ### Chart Accessibility
63
+
64
+ - Never rely on color alone — use patterns, labels, or both
65
+ - Provide data table alternative for screen readers
66
+ - Minimum contrast between adjacent data series
67
+ - Include clear axis labels and units
68
+
69
+ ### Recommended Libraries
70
+
71
+ | Platform | Library | Notes |
72
+ |----------|---------|-------|
73
+ | React | Recharts | Simple, composable, good defaults |
74
+ | React (advanced) | Nivo | D3-based, rich chart types |
75
+ | Financial | Lightweight Charts (TradingView) | Candlestick, real-time optimized |
76
+ | General web | Chart.js | Lightweight, canvas-based |
77
+ | Data-heavy | Observable Plot | Statistical charts, D3-based |
78
+
79
+ ---
80
+
81
+ ## 3. Component Architecture
82
+
83
+ Three-layer pattern prevents component bloat.
84
+
85
+ ```
86
+ ui/ → Primitives (Button, Input, Dialog, Card, Badge, Avatar)
87
+ No business logic. Props = visual variants only.
88
+ Example: <Button variant="primary" size="md" />
89
+
90
+ components/ → Composed (PriceDisplay, UserCard, NotificationBell, SearchBar)
91
+ Combines 2-5 primitives with light business logic.
92
+ Example: <PriceDisplay value={42.50} currency="USD" change={+2.3} />
93
+
94
+ features/ → Page modules (DashboardOverview, SettingsPanel, CheckoutFlow)
95
+ Full business logic, data fetching, state management.
96
+ Never imported by ui/ or components/.
97
+ ```
98
+
99
+ ### Rules
100
+
101
+ - Primitives: <100 LOC, ≤5 props (not counting `className`)
102
+ - If a component has >8 boolean props → refactor to compound pattern
103
+ - If a component has >3 conditional renders → split into variants
104
+ - Features never import from other features (use shared components/ instead)
105
+
106
+ ---
107
+
108
+ ## 4. Color Fundamentals
109
+
110
+ Not specific palettes — principles for choosing colors.
111
+
112
+ ### Semantic Color Roles
113
+
114
+ Every design system needs these 10 tokens minimum:
115
+
116
+ ```
117
+ Background: --bg-base, --bg-surface, --bg-elevated
118
+ Text: --text-primary, --text-secondary
119
+ Border: --border-default
120
+ Interactive: --accent (brand/primary action)
121
+ Status: --success, --danger, --warning
122
+ ```
123
+
124
+ ### Domain-Specific Color Rules
125
+
126
+ | Domain | Key Rule |
127
+ |--------|----------|
128
+ | Finance/Trading | Profit/Loss colors are semantic signals, NOT brand. Reserve green/red exclusively for data meaning. |
129
+ | Healthcare | Red = clinical alert ONLY. Never decorative red. |
130
+ | E-commerce | CTA button must be highest-contrast element on page. |
131
+ | Developer Tools | Dark mode default. Accent colors should complement syntax highlighting, not clash. |
132
+ | AI/ML | Purple/violet is acceptable (established AI signal). Not elsewhere. |
133
+
134
+ ### Contrast Requirements (WCAG 2.2 AA)
135
+
136
+ | Element | Minimum Ratio |
137
+ |---------|---------------|
138
+ | Normal text (<18px) | 4.5:1 |
139
+ | Large text (≥18px bold or ≥24px) | 3:1 |
140
+ | UI components (borders, icons) | 3:1 |
141
+ | Focus indicator | 3:1 against adjacent colors |
142
+
143
+ ### Dark Mode Principles
144
+
145
+ - Don't just invert colors — adjust saturation (desaturate in dark mode)
146
+ - Surface elevation = lighter shade (not darker)
147
+ - Avoid pure white (#fff) text on dark — use #f0f0f0 or similar
148
+ - Test both modes — don't treat dark mode as afterthought
149
+
150
+ ---
151
+
152
+ ## 5. Spacing & Layout
153
+
154
+ ### 8px Grid
155
+
156
+ ```
157
+ xs: 4px — tight inline spacing
158
+ sm: 8px — default gap between related elements
159
+ md: 16px — section padding, card padding
160
+ lg: 24px — section gaps
161
+ xl: 32px — major section breaks
162
+ 2xl: 48px — page section spacing
163
+ 3xl: 64px — hero/above-fold vertical rhythm
164
+ ```
165
+
166
+ ### Border Radius
167
+
168
+ ```
169
+ sm: 6px — inputs, small chips
170
+ md: 8px — cards, containers
171
+ lg: 12px — modals, large surfaces
172
+ xl: 16px — hero cards, feature sections
173
+ full: 9999px — pills, avatars, circular buttons
174
+ ```
175
+
176
+ ### Responsive Breakpoints
177
+
178
+ ```
179
+ sm: 640px — mobile landscape
180
+ md: 768px — tablet portrait
181
+ lg: 1024px — tablet landscape / small desktop
182
+ xl: 1280px — desktop
183
+ 2xl: 1536px — large desktop
184
+ ```
185
+
186
+ - Design mobile-first (min-width media queries)
187
+ - Test at: 375px (iPhone SE), 768px, 1024px, 1440px
188
+ - Content max-width: 1280px (dashboard), 720px (prose)
189
+
190
+ ---
191
+
192
+ ## 6. Interaction Patterns
193
+
194
+ ### Micro-Interactions (Universal)
195
+
196
+ | Trigger | Animation | Duration | Easing |
197
+ |---------|-----------|----------|--------|
198
+ | Hover on card | scale(1.02) + shadow lift | 200ms | ease-out |
199
+ | Button click | scale(0.97) | 100ms | ease-in |
200
+ | Page transition | fade + slide 8px | 200ms | ease |
201
+ | Data loading | Skeleton shimmer | loop | linear |
202
+ | Toast notification | slide-in from edge | 300ms | cubic-bezier(0.34, 1.56, 0.64, 1) |
203
+ | Modal open | fade bg + scale content from 0.95 | 200ms | ease-out |
204
+
205
+ ### Real-Time Data UX
206
+
207
+ - Price/value updates: flash background color briefly (green up, red down, 600ms fade)
208
+ - Live indicator: pulsing green dot (CSS animation, not JS)
209
+ - Auto-updating lists: new items slide in from top, don't jump
210
+ - Always show "Last updated: X seconds ago" for stale data awareness
211
+ - Pause/resume button for streaming data
212
+
213
+ ### Loading States
214
+
215
+ | Duration | Pattern |
216
+ |----------|---------|
217
+ | <300ms | No indicator (perceived as instant) |
218
+ | 300ms–2s | Skeleton loader or spinner |
219
+ | 2s–10s | Progress bar or step indicator |
220
+ | >10s | Progress + estimated time + cancel button |
221
+
222
+ ### Form Patterns
223
+
224
+ - Inline validation (on blur, not on every keystroke)
225
+ - Disable submit button during async operation + show spinner
226
+ - Error messages below the field, not in alert dialogs
227
+ - Success: brief toast (3s auto-dismiss) — don't redirect immediately
228
+
229
+ ---
230
+
231
+ ## 7. UX Checklist
232
+
233
+ ### Critical (Block Ship)
234
+
235
+ - [ ] Color contrast ≥ 4.5:1 for all text
236
+ - [ ] Focus-visible ring on ALL interactive elements (never `outline: none` alone)
237
+ - [ ] Touch targets ≥ 44×44px with 8px gap between targets
238
+ - [ ] `aria-label` on ALL icon-only buttons
239
+ - [ ] Every `<input>` has associated `<label>` or `aria-label`
240
+ - [ ] Semantic HTML (`<button>` not `<div onClick>`, `<nav>`, `<main>`, `<section>`)
241
+ - [ ] `aria-hidden="true"` on decorative icons/images
242
+ - [ ] `cursor-pointer` on all clickable non-button elements
243
+ - [ ] Don't convey information by color alone — add icon, text, or pattern
244
+
245
+ ### High (Fix Before Launch)
246
+
247
+ - [ ] Empty state, error state, loading state for all async data
248
+ - [ ] Disable + spinner on async buttons (prevent double submit)
249
+ - [ ] Virtualize lists with >50 items (react-window, @tanstack/virtual)
250
+ - [ ] `prefers-reduced-motion` respected for all animations
251
+ - [ ] Dark mode support (or explicit documented reason why not)
252
+ - [ ] Responsive tested at 375px, 768px, 1024px, 1440px
253
+ - [ ] No layout shift on data load (reserve space with skeletons)
254
+ - [ ] Error messages are specific and actionable (not "Something went wrong")
255
+
256
+ ### Medium (Polish)
257
+
258
+ - [ ] Skeleton loaders match actual content shape (not generic boxes)
259
+ - [ ] Hover states on all interactive elements
260
+ - [ ] Keyboard navigation works for all flows (Tab, Enter, Escape)
261
+ - [ ] Command palette (Cmd+K / Ctrl+K) for power users (SaaS/DevTools)
262
+ - [ ] Number count-up animation on KPI cards (first load only)
263
+ - [ ] Toast notifications positioned consistently (bottom-right recommended)
264
+ - [ ] Page titles update on navigation (`<title>` or document.title)
265
+
266
+ ---
267
+
268
+ ## 8. CSS Patterns
269
+
270
+ ### Glassmorphism
271
+
272
+ ```css
273
+ .glass {
274
+ background: rgba(255, 255, 255, 0.05);
275
+ backdrop-filter: blur(12px);
276
+ -webkit-backdrop-filter: blur(12px);
277
+ border: 1px solid rgba(255, 255, 255, 0.1);
278
+ border-radius: 16px;
279
+ }
280
+ ```
281
+
282
+ ### Shadows
283
+
284
+ ```css
285
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
286
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
287
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
288
+ --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.15);
289
+ ```
290
+
291
+ ### Animation Timing
292
+
293
+ ```css
294
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
295
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
296
+ --duration-fast: 150ms;
297
+ --duration-normal: 250ms;
298
+ --duration-slow: 350ms;
299
+ ```
300
+
301
+ ### Reduced Motion
302
+
303
+ ```css
304
+ @media (prefers-reduced-motion: reduce) {
305
+ *, *::before, *::after {
306
+ animation-duration: 0.01ms !important;
307
+ animation-iteration-count: 1 !important;
308
+ transition-duration: 0.01ms !important;
309
+ scroll-behavior: auto !important;
310
+ }
311
+ }
312
+ ```
313
+
314
+ ---
315
+
316
+ ## 9. Number & Currency Formatting
317
+
318
+ ```typescript
319
+ // Always use Intl.NumberFormat — never manual toFixed()
320
+ const fmtCurrency = (v: number, currency = 'USD') =>
321
+ new Intl.NumberFormat('en-US', {
322
+ style: 'currency',
323
+ currency,
324
+ minimumFractionDigits: 2
325
+ }).format(v)
326
+
327
+ const fmtCompact = (v: number) =>
328
+ new Intl.NumberFormat('en-US', {
329
+ notation: 'compact',
330
+ maximumFractionDigits: 1
331
+ }).format(v)
332
+
333
+ const fmtPercent = (v: number) =>
334
+ new Intl.NumberFormat('en-US', {
335
+ style: 'percent',
336
+ minimumFractionDigits: 2
337
+ }).format(v / 100)
338
+ ```
339
+
340
+ ### Rules
341
+
342
+ - Financial values: always 2 decimal places, monospace font
343
+ - Large numbers: compact notation (1.2K, 3.4M) for display, full on hover
344
+ - Percentages: include sign (+2.34%, -1.50%)
345
+ - Variance coloring: positive = success color, negative = danger color
346
+ - Add directional icon alongside color: ▲ up, ▼ down (don't rely on color alone)
347
+
348
+ ---
349
+
350
+ ## 10. Anti-Pattern Signatures (AI-Generated UI)
351
+
352
+ These patterns signal "this was generated by AI, not designed by a human." Avoid them.
353
+
354
+ | Anti-Pattern | Why It Fails | Fix |
355
+ |-------------|-------------|-----|
356
+ | Purple-to-blue gradient hero | Default AI output, no design intent | Choose domain-appropriate palette |
357
+ | Card grid monotony | Every section is equal cards in a grid | Vary layout: hero → features → testimonials → CTA |
358
+ | Centered everything | Breaks left-to-right reading flow | Left-align body text, center only headings/CTAs |
359
+ | Inter-only typography | Zero personality, signals laziness | Use a pairing: display font + body font |
360
+ | Generic stock photos | Instantly recognizable as filler | Use illustrations, icons, or real screenshots |
361
+ | Animations on everything | Distracting, delays information access | Animate entry once, keep data static |
362
+ | Missing states | No empty, error, or loading states | Design all 4 states: default, loading, empty, error |
363
+ | Enormous padding | Wastes space, signals no content | Tighter spacing in data-dense UI, generous only in marketing |
364
+ | Rainbow status colors | Red, yellow, green, blue, purple all on one dashboard | Max 3 status colors per context |
365
+ | Fixed-width everything | Doesn't respond to viewport | Fluid widths, container queries where appropriate |