@rune-kit/rune 2.1.1
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/LICENSE +21 -0
- package/README.md +357 -0
- package/agents/.gitkeep +0 -0
- package/agents/architect.md +29 -0
- package/agents/asset-creator.md +11 -0
- package/agents/audit.md +11 -0
- package/agents/autopsy.md +11 -0
- package/agents/brainstorm.md +11 -0
- package/agents/browser-pilot.md +11 -0
- package/agents/coder.md +29 -0
- package/agents/completion-gate.md +11 -0
- package/agents/constraint-check.md +11 -0
- package/agents/context-engine.md +11 -0
- package/agents/cook.md +11 -0
- package/agents/db.md +11 -0
- package/agents/debug.md +11 -0
- package/agents/dependency-doctor.md +11 -0
- package/agents/deploy.md +11 -0
- package/agents/design.md +11 -0
- package/agents/docs-seeker.md +11 -0
- package/agents/fix.md +11 -0
- package/agents/hallucination-guard.md +11 -0
- package/agents/incident.md +11 -0
- package/agents/integrity-check.md +11 -0
- package/agents/journal.md +11 -0
- package/agents/launch.md +11 -0
- package/agents/logic-guardian.md +11 -0
- package/agents/marketing.md +11 -0
- package/agents/onboard.md +11 -0
- package/agents/perf.md +11 -0
- package/agents/plan.md +11 -0
- package/agents/preflight.md +11 -0
- package/agents/problem-solver.md +11 -0
- package/agents/rescue.md +11 -0
- package/agents/research.md +11 -0
- package/agents/researcher.md +29 -0
- package/agents/review-intake.md +11 -0
- package/agents/review.md +11 -0
- package/agents/reviewer.md +28 -0
- package/agents/safeguard.md +11 -0
- package/agents/sast.md +11 -0
- package/agents/scanner.md +28 -0
- package/agents/scope-guard.md +11 -0
- package/agents/scout.md +11 -0
- package/agents/sentinel.md +11 -0
- package/agents/sequential-thinking.md +11 -0
- package/agents/session-bridge.md +11 -0
- package/agents/skill-forge.md +11 -0
- package/agents/skill-router.md +11 -0
- package/agents/surgeon.md +11 -0
- package/agents/team.md +11 -0
- package/agents/test.md +11 -0
- package/agents/trend-scout.md +11 -0
- package/agents/verification.md +11 -0
- package/agents/video-creator.md +11 -0
- package/agents/watchdog.md +11 -0
- package/agents/worktree.md +11 -0
- package/commands/.gitkeep +0 -0
- package/commands/rune.md +168 -0
- package/compiler/__tests__/openclaw-adapter.test.js +140 -0
- package/compiler/__tests__/parser.test.js +55 -0
- package/compiler/adapters/antigravity.js +59 -0
- package/compiler/adapters/claude.js +37 -0
- package/compiler/adapters/cursor.js +67 -0
- package/compiler/adapters/generic.js +60 -0
- package/compiler/adapters/index.js +45 -0
- package/compiler/adapters/openclaw.js +150 -0
- package/compiler/adapters/windsurf.js +60 -0
- package/compiler/bin/rune.js +288 -0
- package/compiler/doctor.js +153 -0
- package/compiler/emitter.js +240 -0
- package/compiler/parser.js +208 -0
- package/compiler/transformer.js +69 -0
- package/compiler/transforms/branding.js +27 -0
- package/compiler/transforms/cross-references.js +29 -0
- package/compiler/transforms/frontmatter.js +38 -0
- package/compiler/transforms/hooks.js +68 -0
- package/compiler/transforms/subagents.js +36 -0
- package/compiler/transforms/tool-names.js +60 -0
- package/contexts/dev.md +34 -0
- package/contexts/research.md +43 -0
- package/contexts/review.md +55 -0
- package/extensions/ai-ml/PACK.md +517 -0
- package/extensions/analytics/PACK.md +557 -0
- package/extensions/backend/PACK.md +678 -0
- package/extensions/chrome-ext/PACK.md +995 -0
- package/extensions/content/PACK.md +381 -0
- package/extensions/devops/PACK.md +520 -0
- package/extensions/ecommerce/PACK.md +280 -0
- package/extensions/gamedev/PACK.md +393 -0
- package/extensions/mobile/PACK.md +273 -0
- package/extensions/saas/PACK.md +805 -0
- package/extensions/security/PACK.md +536 -0
- package/extensions/trading/PACK.md +597 -0
- package/extensions/ui/PACK.md +947 -0
- package/package.json +47 -0
- package/skills/.gitkeep +0 -0
- package/skills/adversary/SKILL.md +271 -0
- package/skills/asset-creator/SKILL.md +157 -0
- package/skills/audit/SKILL.md +466 -0
- package/skills/autopsy/SKILL.md +200 -0
- package/skills/ba/SKILL.md +279 -0
- package/skills/brainstorm/SKILL.md +266 -0
- package/skills/browser-pilot/SKILL.md +168 -0
- package/skills/completion-gate/SKILL.md +151 -0
- package/skills/constraint-check/SKILL.md +165 -0
- package/skills/context-engine/SKILL.md +176 -0
- package/skills/cook/SKILL.md +636 -0
- package/skills/db/SKILL.md +256 -0
- package/skills/debug/SKILL.md +240 -0
- package/skills/dependency-doctor/SKILL.md +235 -0
- package/skills/deploy/SKILL.md +174 -0
- package/skills/design/DESIGN-REFERENCE.md +365 -0
- package/skills/design/SKILL.md +462 -0
- package/skills/doc-processor/SKILL.md +254 -0
- package/skills/docs/SKILL.md +336 -0
- package/skills/docs-seeker/SKILL.md +166 -0
- package/skills/fix/SKILL.md +192 -0
- package/skills/git/SKILL.md +285 -0
- package/skills/hallucination-guard/SKILL.md +204 -0
- package/skills/incident/SKILL.md +241 -0
- package/skills/integrity-check/SKILL.md +169 -0
- package/skills/journal/SKILL.md +190 -0
- package/skills/launch/SKILL.md +330 -0
- package/skills/logic-guardian/SKILL.md +240 -0
- package/skills/marketing/SKILL.md +229 -0
- package/skills/mcp-builder/SKILL.md +311 -0
- package/skills/onboard/SKILL.md +298 -0
- package/skills/perf/SKILL.md +297 -0
- package/skills/plan/SKILL.md +520 -0
- package/skills/preflight/SKILL.md +231 -0
- package/skills/problem-solver/SKILL.md +284 -0
- package/skills/rescue/SKILL.md +434 -0
- package/skills/research/SKILL.md +122 -0
- package/skills/review/SKILL.md +354 -0
- package/skills/review-intake/SKILL.md +222 -0
- package/skills/safeguard/SKILL.md +188 -0
- package/skills/sast/SKILL.md +190 -0
- package/skills/scaffold/SKILL.md +276 -0
- package/skills/scope-guard/SKILL.md +150 -0
- package/skills/scout/SKILL.md +232 -0
- package/skills/sentinel/SKILL.md +320 -0
- package/skills/sentinel-env/SKILL.md +226 -0
- package/skills/sequential-thinking/SKILL.md +234 -0
- package/skills/session-bridge/SKILL.md +287 -0
- package/skills/skill-forge/SKILL.md +317 -0
- package/skills/skill-router/SKILL.md +267 -0
- package/skills/surgeon/SKILL.md +203 -0
- package/skills/team/SKILL.md +397 -0
- package/skills/test/SKILL.md +271 -0
- package/skills/trend-scout/SKILL.md +145 -0
- package/skills/verification/SKILL.md +201 -0
- package/skills/video-creator/SKILL.md +201 -0
- package/skills/watchdog/SKILL.md +166 -0
- package/skills/worktree/SKILL.md +140 -0
|
@@ -0,0 +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 |
|