ai-developer-skill-os 7.0.2 → 7.5.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/.agents/AGENTS.md +44 -88
- package/.agents/CHANGELOG.md +70 -0
- package/.agents/LICENSE +21 -0
- package/.agents/README.md +100 -0
- package/.agents/docs/CHI_TIET_SKILLS.md +126 -0
- package/.agents/docs/GOVERNANCE.md +40 -0
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +120 -0
- package/.agents/docs/SPEC.md +87 -0
- package/.agents/docs/adr/0001-intent-based-architecture.md +19 -0
- package/.agents/docs/adr/0002-kernel-freeze.md +21 -0
- package/.agents/docs/adr/0003-risk-based-verification.md +20 -0
- package/.agents/docs/adr/0004-progressive-evidence.md +19 -0
- package/.agents/docs/skill-classification.md +25 -0
- package/.agents/skills/qk-access-policy/SKILL.md +179 -0
- package/.agents/skills/qk-ai-builder/SKILL.md +215 -0
- package/.agents/skills/qk-api-lifecycle/SKILL.md +176 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +307 -0
- package/.agents/skills/qk-context-loader/SKILL.md +218 -0
- package/.agents/skills/qk-data-lifecycle/SKILL.md +192 -0
- package/.agents/skills/qk-db-optimizer/SKILL.md +196 -0
- package/.agents/skills/qk-docs/SKILL.md +198 -0
- package/.agents/skills/qk-engineering-standard/SKILL.md +351 -0
- package/.agents/skills/qk-engineering-standard/rules/backend.md +122 -0
- package/.agents/skills/qk-engineering-standard/rules/database.md +3 -0
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +152 -0
- package/.agents/skills/qk-engineering-standard/rules/security.md +3 -0
- package/.agents/skills/qk-engineering-standard/rules/testing.md +3 -0
- package/.agents/skills/qk-fe-api-integration/SKILL.md +326 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +305 -0
- package/.agents/skills/qk-help/SKILL.md +193 -0
- package/.agents/skills/qk-orchestrator/SKILL.md +278 -0
- package/.agents/skills/qk-orchestrator/references/routing-table.md +78 -0
- package/.agents/skills/qk-production-release/SKILL.md +284 -0
- package/.agents/skills/qk-project-bootstrap/SKILL.md +235 -0
- package/.agents/skills/qk-project-health/SKILL.md +199 -0
- package/.agents/skills/qk-project-memory/SKILL.md +218 -0
- package/.agents/skills/qk-system-evolution/SKILL.md +281 -0
- package/.agents/skills/qk-ui-audit/SKILL.md +315 -0
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/.agents/skills/qk-ui-builder/SKILL.md +446 -0
- package/.agents/skills/qk-ui-builder/references/anti-patterns.md +295 -0
- package/.agents/skills/qk-ui-builder/references/color.md +115 -0
- package/.agents/skills/qk-ui-builder/references/component-cookbook.md +1194 -0
- package/.agents/skills/qk-ui-builder/references/copy.md +250 -0
- package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +115 -0
- package/.agents/skills/qk-ui-builder/references/layout-and-space.md +111 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +48 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +50 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +51 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +49 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +44 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +50 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +51 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +50 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +50 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +49 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +49 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +49 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +48 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +48 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +51 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +48 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +48 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +50 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +48 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +45 -0
- package/.agents/skills/qk-ui-builder/references/macrostructures.md +38 -0
- package/.agents/skills/qk-ui-builder/references/motion.md +95 -0
- package/.agents/skills/qk-ui-builder/references/responsive.md +115 -0
- package/.agents/skills/qk-ui-builder/references/slop-test.md +135 -0
- package/.agents/skills/qk-ui-builder/references/structure.md +280 -0
- package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +53 -0
- package/.agents/skills/qk-ui-builder/references/themes/carnival.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/editorial.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/garden.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/hum.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/lumen.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/midnight.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/playful.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/specimen.md +52 -0
- package/.agents/skills/qk-ui-builder/references/themes/terminal.md +52 -0
- package/.agents/skills/qk-ui-builder/references/typography.md +129 -0
- package/.agents/skills/qk-ui-system-builder/SKILL.md +221 -0
- package/.agents/skills/qk-validation-gate/SKILL.md +359 -0
- package/.agents/skills.json +819 -0
- package/.github/workflows/ci.yml +1 -1
- package/CHANGELOG.md +2 -1
- package/CLAUDE.md +110 -0
- package/README.md +52 -10
- package/add_lang.js +21 -0
- package/add_lang.py +25 -0
- package/add_sections.py +53 -0
- package/bin/install.js +225 -170
- package/bin/lint.js +123 -0
- package/docs/CHI_TIET_SKILLS.md +27 -26
- package/docs/HUONG_DAN_SU_DUNG.md +3 -3
- package/docs/SPEC.md +70 -20
- package/framework/decision-primitives.md +2 -1
- package/framework/skill-schema.md +310 -0
- package/package.json +16 -5
- package/patch.js +15 -0
- package/patch.py +89 -0
- package/patch2.py +83 -0
- package/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-api-integration/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-auth-security/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-bug-fix/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-component-generator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-context-manager/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-database-engineer/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-deployment/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-design-system/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-form-builder/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-git-engineer/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-help/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-migration/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-project-audit/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-refactor/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-state-management/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +1 -0
- package/skills/_archive_old_skills/qk-ui-builder/SKILL.md +1 -0
- package/skills/_template/SKILL.md +239 -0
- package/skills/qk-access-policy/SKILL.md +180 -39
- package/skills/qk-ai-builder/SKILL.md +216 -40
- package/skills/qk-api-lifecycle/SKILL.md +177 -46
- package/skills/qk-bug-resolution/SKILL.md +308 -46
- package/skills/qk-context-loader/SKILL.md +219 -43
- package/skills/qk-data-lifecycle/SKILL.md +193 -44
- package/skills/qk-db-optimizer/SKILL.md +197 -41
- package/skills/qk-docs/SKILL.md +199 -40
- package/skills/qk-engineering-standard/SKILL.md +352 -42
- package/skills/qk-fe-api-integration/SKILL.md +327 -55
- package/skills/qk-feature-delivery/SKILL.md +306 -48
- package/skills/qk-help/SKILL.md +179 -23
- package/skills/qk-orchestrator/SKILL.md +279 -42
- package/skills/qk-orchestrator/references/routing-table.md +78 -0
- package/skills/qk-production-release/SKILL.md +285 -41
- package/skills/qk-project-bootstrap/SKILL.md +236 -38
- package/skills/qk-project-health/SKILL.md +200 -40
- package/skills/qk-project-memory/SKILL.md +219 -40
- package/skills/qk-system-evolution/SKILL.md +282 -40
- package/skills/qk-ui-audit/SKILL.md +316 -42
- package/skills/qk-ui-audit/references/anti-slop-checklist.md +136 -0
- package/skills/qk-ui-builder/SKILL.md +447 -0
- package/skills/qk-ui-builder/references/anti-patterns.md +295 -0
- package/skills/qk-ui-builder/references/color.md +115 -0
- package/skills/qk-ui-builder/references/component-cookbook.md +1194 -0
- package/skills/qk-ui-builder/references/copy.md +250 -0
- package/skills/qk-ui-builder/references/interaction-and-states.md +115 -0
- package/skills/qk-ui-builder/references/layout-and-space.md +111 -0
- package/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +48 -0
- package/skills/qk-ui-builder/references/macrostructures/02-long-document.md +50 -0
- package/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +51 -0
- package/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +49 -0
- package/skills/qk-ui-builder/references/macrostructures/05-workbench.md +44 -0
- package/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +50 -0
- package/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +51 -0
- package/skills/qk-ui-builder/references/macrostructures/08-photographic.md +50 -0
- package/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +50 -0
- package/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +49 -0
- package/skills/qk-ui-builder/references/macrostructures/12-letter.md +49 -0
- package/skills/qk-ui-builder/references/macrostructures/13-index-first.md +49 -0
- package/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +48 -0
- package/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +48 -0
- package/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +51 -0
- package/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +48 -0
- package/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +48 -0
- package/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +50 -0
- package/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +48 -0
- package/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +45 -0
- package/skills/qk-ui-builder/references/macrostructures.md +38 -0
- package/skills/qk-ui-builder/references/motion.md +95 -0
- package/skills/qk-ui-builder/references/responsive.md +115 -0
- package/skills/qk-ui-builder/references/slop-test.md +135 -0
- package/skills/qk-ui-builder/references/structure.md +280 -0
- package/skills/qk-ui-builder/references/themes/atmospheric.md +53 -0
- package/skills/qk-ui-builder/references/themes/carnival.md +52 -0
- package/skills/qk-ui-builder/references/themes/cobalt.md +52 -0
- package/skills/qk-ui-builder/references/themes/editorial.md +52 -0
- package/skills/qk-ui-builder/references/themes/garden.md +52 -0
- package/skills/qk-ui-builder/references/themes/hum.md +52 -0
- package/skills/qk-ui-builder/references/themes/lumen.md +52 -0
- package/skills/qk-ui-builder/references/themes/midnight.md +52 -0
- package/skills/qk-ui-builder/references/themes/modern-minimal.md +52 -0
- package/skills/qk-ui-builder/references/themes/playful.md +52 -0
- package/skills/qk-ui-builder/references/themes/specimen.md +52 -0
- package/skills/qk-ui-builder/references/themes/terminal.md +52 -0
- package/skills/qk-ui-builder/references/typography.md +129 -0
- package/skills/qk-ui-system-builder/SKILL.md +222 -43
- package/skills/qk-validation-gate/SKILL.md +360 -40
- package/skills.json +815 -825
- package/specs/fixtures/user-payload.json +12 -0
- package/specs/regressions/api-integration-null-fields.yaml +19 -0
- package/temp_fix.js +61 -0
- package/tests/registry.test.js +1 -1
- package/update_template.js +28 -0
- package/skills/qk-design-to-code/SKILL.md +0 -46
- package/skills/qk-policy-engine/SKILL.md +0 -39
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# Anti-Patterns: AI-Generated and Bad UI Tells
|
|
2
|
+
|
|
3
|
+
## Visual Tells (10)
|
|
4
|
+
|
|
5
|
+
### 1. Purple Gradient Everywhere
|
|
6
|
+
- **What it looks like:** Deep purple to light purple gradients on buttons, backgrounds, cards, and text.
|
|
7
|
+
- **Why it's bad:** Overused in AI-generated templates, creates visual monotony, and often clashes with accessible text contrast.
|
|
8
|
+
- **How to fix it:** Use brand colors with intentional gradients only. Reserve gradients for hero sections, not every component.
|
|
9
|
+
|
|
10
|
+
### 2. Three-Column Icon Cards
|
|
11
|
+
- **What it looks like:** Exactly three equal-width cards with a centered icon, title, and short paragraph, repeated across every section.
|
|
12
|
+
- **Why it's bad:** AI defaults to symmetry; real design uses asymmetric layouts based on content hierarchy.
|
|
13
|
+
- **How to fix it:** Vary card count and layout per section. Use 2, 4, or staggered columns based on actual feature grouping.
|
|
14
|
+
|
|
15
|
+
### 3. Card-in-Card Syndrome
|
|
16
|
+
- **What it looks like:** A white card containing another white card, often with a subtle shadow for the inner card.
|
|
17
|
+
- **Why it's bad:** Creates unnecessary visual nesting, increases cognitive load, and wastes whitespace.
|
|
18
|
+
- **How to fix it:** Use a single card with distinct internal sections using dividers, spacing, or typography hierarchy instead.
|
|
19
|
+
|
|
20
|
+
### 4. Glassmorphism Overload
|
|
21
|
+
- **What it looks like:** Heavy use of backdrop-blur, semi-transparent white overlays, and frosted glass effects on every surface.
|
|
22
|
+
- **Why it's bad:** Performance-heavy, reduces readability, and was a 2021 trend that AI keeps recycling.
|
|
23
|
+
- **How to fix it:** Use solid surfaces with subtle shadows. Reserve glassmorphism for one intentional focal element only.
|
|
24
|
+
|
|
25
|
+
### 5. Gradient Text Headlines
|
|
26
|
+
- **What it looks like:** Large headings with background-clip: text showing a purple-to-blue gradient.
|
|
27
|
+
- **Why it's bad:** Reduces legibility, especially at smaller sizes, and screams "AI template."
|
|
28
|
+
- **How to fix it:** Use solid, high-contrast text colors. If gradient text is used, keep it large and sparingly applied.
|
|
29
|
+
|
|
30
|
+
### 6. Infinite Hero Carousel
|
|
31
|
+
- **What it looks like:** A full-viewport hero with auto-advancing slides, dots navigation, and generic stock imagery.
|
|
32
|
+
- **Why it's bad:** Users ignore carousels (low engagement), and AI loves them because they fill space without requiring content decisions.
|
|
33
|
+
- **How to fix it:** Use a single, static hero with clear value proposition and a primary CTA. If multiple messages exist, use tabs or stacked sections.
|
|
34
|
+
|
|
35
|
+
### 7. Floating Blob Backgrounds
|
|
36
|
+
- **What it looks like:** Organic blob shapes in pastel gradients positioned absolutely behind content.
|
|
37
|
+
- **Why it's bad:** Adds visual noise without information, and AI-generated blobs often have poor color harmony.
|
|
38
|
+
- **How to fix it:** Use geometric patterns or subtle texture if background decoration is needed. Remove if it serves no purpose.
|
|
39
|
+
|
|
40
|
+
### 8. Neon Glow Effects
|
|
41
|
+
- **What it looks like:** Box-shadow or text-shadow with bright cyan, magenta, or green glow, especially on dark backgrounds.
|
|
42
|
+
- **Why it's bad:** Creates accessibility issues, eye strain, and feels dated/cyberpunk without context.
|
|
43
|
+
- **How to fix it:** Use subtle, low-opacity shadows for depth. Reserve glow effects for specific interactive states or dark-mode accents.
|
|
44
|
+
|
|
45
|
+
### 9. Cookie-Cutter Pricing Tables
|
|
46
|
+
- **What it looks like:** Three pricing cards with a highlighted middle tier, checkmark lists, and "Most Popular" badge.
|
|
47
|
+
- **Why it's bad:** AI defaults to this structure regardless of actual pricing model. Often hides complex pricing behind a fake choice.
|
|
48
|
+
- **How to fix it:** Design pricing based on actual tiers. Use tables for comparison, or cards only if 3-4 distinct plans exist with clear differentiation.
|
|
49
|
+
|
|
50
|
+
### 10. Gradient Avatars
|
|
51
|
+
- **What it looks like:** User avatars with initials on purple/blue gradients instead of actual photos or icons.
|
|
52
|
+
- **Why it's bad:** Feels impersonal and lazy. AI uses this to avoid handling image assets.
|
|
53
|
+
- **How to fix it:** Use actual user photos, SVG icons, or monogram avatars with a single neutral background color.
|
|
54
|
+
|
|
55
|
+
## Structural Tells (8)
|
|
56
|
+
|
|
57
|
+
### 11. AI Nav Fingerprint
|
|
58
|
+
- **What it looks like:** Logo left, 4-5 nav links center, "Sign In" and "Sign Up" buttons right. Every site, every time.
|
|
59
|
+
- **Why it's bad:** Ignores actual navigation needs. Real sites have different nav structures based on content hierarchy and user flow.
|
|
60
|
+
- **How to fix it:** Audit actual user journeys. Include only nav items users need. Consider dropdowns, mobile patterns, or contextual nav.
|
|
61
|
+
|
|
62
|
+
### 12. AI Footer Fingerprint
|
|
63
|
+
- **What it looks like:** Four columns: Product, Company, Resources, Legal. Social icons row. Newsletter signup. Copyright line.
|
|
64
|
+
- **Why it's bad:** Generic structure that doesn't reflect site-specific content or legal requirements.
|
|
65
|
+
- **How to fix it:** Include only necessary footer links. Group by actual user needs. Remove newsletter if no strategy exists.
|
|
66
|
+
|
|
67
|
+
### 13. Centered Everything
|
|
68
|
+
- **What it looks like:** Every section has centered text, centered buttons, centered cards. Maximum width container with `margin: 0 auto`.
|
|
69
|
+
- **Why it's bad:** Creates monotonous rhythm and ignores content alignment needs. Not all content benefits from center alignment.
|
|
70
|
+
- **How to fix it:** Left-align body text for readability. Center-align only headlines, CTAs, or short statements that benefit from it.
|
|
71
|
+
|
|
72
|
+
### 14. Max-Width Container Obsession
|
|
73
|
+
- **What it looks like:** Every section constrained to 1200px centered container, even full-width images and backgrounds.
|
|
74
|
+
- **Why it's bad:** Breaks immersion for visual content. AI applies container classes indiscriminately.
|
|
75
|
+
- **How to fix it:** Use full-width sections for backgrounds and images. Apply max-width only to text content and card grids.
|
|
76
|
+
|
|
77
|
+
### 15. Section Soup
|
|
78
|
+
- **What it looks like:** Every section has identical padding (e.g., `py-20`), creating a rhythmic, repetitive page flow.
|
|
79
|
+
- **Why it's bad:** No visual hierarchy. Important sections don't stand out. The page feels mechanical.
|
|
80
|
+
- **How to fix it:** Vary section spacing based on content importance. Hero sections need more space. Related content can be tighter.
|
|
81
|
+
|
|
82
|
+
### 16. H1-H6 Ladder
|
|
83
|
+
- **What it looks like:** Every page uses H1, H2, H3, H4, H5, H6 in strict sequential order without skipping.
|
|
84
|
+
- **Why it's bad:** Ignores actual content hierarchy. AI thinks headings must always descend sequentially.
|
|
85
|
+
- **How to fix it:** Use heading levels based on semantic importance. Skip levels when content structure requires it. Never use H1 more than once per page.
|
|
86
|
+
|
|
87
|
+
### 17. Infinite Scroll Landing Pages
|
|
88
|
+
- **What it looks like:** Long single-column pages where every section stacks vertically with no clear page boundaries.
|
|
89
|
+
- **Why it's bad:** Users can't gauge page length or find specific content. AI loves this because it avoids navigation design.
|
|
90
|
+
- **How to fix it:** Use clear section breaks, consider a sidebar/table of contents for long pages, or split into multiple pages.
|
|
91
|
+
|
|
92
|
+
### 18. Three-Point Feature Lists
|
|
93
|
+
- **What it looks like:** Every feature section has exactly three bullet points with checkmark icons.
|
|
94
|
+
- **Why it's bad:** AI defaults to "rule of three" without content justification. Real feature sets vary in length.
|
|
95
|
+
- **How to fix it:** List only actual features. Use 2, 4, 5, or more items as needed. Break into subsections if the list grows.
|
|
96
|
+
|
|
97
|
+
## Typography Tells (7)
|
|
98
|
+
|
|
99
|
+
### 19. Font Stack Roulette
|
|
100
|
+
- **What it looks like:** Using 3+ different font families across the page (e.g., Inter for body, Playfair for headings, JetBrains Mono for code, plus an icon font).
|
|
101
|
+
- **Why it's bad:** Creates visual chaos and slows page rendering. AI samples fonts without considering cohesion.
|
|
102
|
+
- **How to fix it:** Use one font family with varying weights and styles. If a second font is needed, use it for one specific purpose only.
|
|
103
|
+
|
|
104
|
+
### 20. Italic Headlines
|
|
105
|
+
- **What it looks like:** H1-H3 headlines rendered in italic font style for emphasis.
|
|
106
|
+
- **Why it's bad:** Italic reduces legibility at large sizes. AI uses it to create "variety" without understanding readability.
|
|
107
|
+
- **How to fix it:** Use weight (bold/black) and size for hierarchy. Reserve italic for captions, quotes, or emphasized inline text.
|
|
108
|
+
|
|
109
|
+
### 21. All-Caps Body Text
|
|
110
|
+
- **What it looks like:** Paragraphs or long labels rendered in uppercase letters.
|
|
111
|
+
- **Why it's bad:** Reduces readability by 10-20%. AI uses all-caps to make text "stand out" without understanding typography.
|
|
112
|
+
- **How to fix it:** Use sentence case or title case for body text. Reserve all-caps for short labels (buttons, badges, nav items).
|
|
113
|
+
|
|
114
|
+
### 22. Comic Sans / Decorative Fonts
|
|
115
|
+
- **What it looks like:** Comic Sans, Papyrus, or other novelty fonts used for body text or serious headings.
|
|
116
|
+
- **Why it's bad:** Unprofessional and difficult to read at length. AI samples fonts without context awareness.
|
|
117
|
+
- **How to fix it:** Use proven, readable fonts. Reserve decorative fonts for one specific, intentional element (e.g., a logo or playful CTA).
|
|
118
|
+
|
|
119
|
+
### 23. Line Height Neglect
|
|
120
|
+
- **What it looks like:** Body text with line-height of 1.0 to 1.2, making paragraphs feel cramped.
|
|
121
|
+
- **Why it's bad:** Reduces readability and increases eye strain. AI often inherits tight line-height from code defaults.
|
|
122
|
+
- **How to fix it:** Use line-height of 1.5 to 1.7 for body text. Tighter line-height (1.2-1.3) only for large headlines.
|
|
123
|
+
|
|
124
|
+
### 24. Letter Spacing Abuse
|
|
125
|
+
- **What it looks like:** Excessive letter-spacing (0.1em+) on body text or headings to "open up" the design.
|
|
126
|
+
- **Why it's bad:** Reduces readability and makes text feel disconnected. AI adds spacing to compensate for poor font choices.
|
|
127
|
+
- **How to fix it:** Use the font's default spacing. Slightly increase spacing only for all-caps text (0.05em-0.1em).
|
|
128
|
+
|
|
129
|
+
### 25. Monospace Body Text
|
|
130
|
+
- **What it looks like:** Body paragraphs rendered in monospace fonts like Courier or Fira Code.
|
|
131
|
+
- **Why it's bad:** Designed for code, not reading. Low readability for long-form content. AI confuses "developer aesthetic" with readability.
|
|
132
|
+
- **How to fix it:** Use proportional sans-serif or serif fonts for body text. Reserve monospace for code blocks and technical data.
|
|
133
|
+
|
|
134
|
+
## Interaction Tells (10)
|
|
135
|
+
|
|
136
|
+
### 26. Hover: Scale-105
|
|
137
|
+
- **What it looks like:** Every interactive element scales up 5% on hover, especially cards and buttons.
|
|
138
|
+
- **Why it's bad:** Causes layout shift, feels janky, and is the default AI interaction pattern with no differentiation.
|
|
139
|
+
- **How to fix it:** Use subtle shadow changes, color shifts, or underline animations instead. Scale only for specific focal elements.
|
|
140
|
+
|
|
141
|
+
### 27. Transition-All
|
|
142
|
+
- **What it looks like:** `transition: all 0.3s ease` applied to every element with a hover state.
|
|
143
|
+
- **Why it's bad:** Animates properties that don't need animation (like font-size or display), causing unexpected behavior and performance issues.
|
|
144
|
+
- **How to fix it:** Animate specific properties: `transition: box-shadow 0.2s, transform 0.2s`. Avoid animating layout properties.
|
|
145
|
+
|
|
146
|
+
### 28. Bounce Easing
|
|
147
|
+
- **What it looks like:** `cubic-bezier(0.68, -0.55, 0.265, 1.55)` or similar bounce effects on buttons and modals.
|
|
148
|
+
- **Why it's bad:** Feels unprofessional and playful in inappropriate contexts. Overused in AI-generated demos.
|
|
149
|
+
- **How to fix it:** Use ease-out for most interactions. Reserve bounce only for playful, game-like interfaces with clear brand intent.
|
|
150
|
+
|
|
151
|
+
### 29. Cursor: Pointer Everywhere
|
|
152
|
+
- **What it looks like:** `cursor: pointer` applied to cards, images, divs, and non-interactive elements.
|
|
153
|
+
- **Why it's bad:** Misleads users into thinking elements are clickable when they aren't.
|
|
154
|
+
- **How to fix it:** Apply pointer cursor only to actual links and buttons. Use default cursor for static content.
|
|
155
|
+
|
|
156
|
+
### 30. Underline on Hover for Everything
|
|
157
|
+
- **What it looks like:** Every text link, card, and heading gets an underline animation on hover.
|
|
158
|
+
- **Why it's bad:** Creates visual noise and makes it hard to distinguish actual links from decorative elements.
|
|
159
|
+
- **How to fix it:** Underline only text links. Use other affordances (color change, arrow icon) for cards and buttons.
|
|
160
|
+
|
|
161
|
+
### 31. Ripple Effect Overuse
|
|
162
|
+
- **What it looks like:** Material Design ripple effect on every button, often implemented with JavaScript.
|
|
163
|
+
- **Why it's bad:** Feels dated (2014 called), adds unnecessary JavaScript, and distracts from the action.
|
|
164
|
+
- **How to fix it:** Use subtle background-color transitions or scale effects. Remove ripple unless brand guidelines explicitly require it.
|
|
165
|
+
|
|
166
|
+
### 32. Loading Spinner on Everything
|
|
167
|
+
- **What it looks like:** Spinner appears for any action that takes >100ms, even for instant operations.
|
|
168
|
+
- **Why it's bad:** Creates perception of slowness. AI adds spinners defensively without measuring actual load times.
|
|
169
|
+
- **How to fix it:** Use skeleton loaders for content. Show spinners only for operations >300ms. Consider optimistic UI for fast operations.
|
|
170
|
+
|
|
171
|
+
### 33. Disabled Button Gray-Out
|
|
172
|
+
- **What it looks like:** Buttons turn fully gray with `opacity: 0.5` when disabled, making text unreadable.
|
|
173
|
+
- **Why it's bad:** Fails WCAG contrast requirements. Users can't tell if the button is disabled or broken.
|
|
174
|
+
- **How to fix it:** Use `opacity: 1` with reduced contrast colors. Add `cursor: not-allowed` and explain why disabled in adjacent text.
|
|
175
|
+
|
|
176
|
+
### 34. Hover Cards Everywhere
|
|
177
|
+
- **What it looks like:** Tooltips, popovers, and preview cards appear on hover for every link and icon.
|
|
178
|
+
- **Why it's bad:** Overwhelms users with information. Hover states don't work on touch devices.
|
|
179
|
+
- **How to fix it:** Use click or focus triggers for essential information. Reserve hover previews for image galleries or data tables only.
|
|
180
|
+
|
|
181
|
+
### 35. Animated Gradient Buttons
|
|
182
|
+
- **What it looks like:** Buttons with animated gradient backgrounds that shift colors continuously.
|
|
183
|
+
- **Why it's bad:** Distracting and reduces perceived button stability. AI loves animated gradients because they look "premium."
|
|
184
|
+
- **How to fix it:** Use solid colors with hover state changes. If animation is needed, use subtle pulse or glow, not shifting gradients.
|
|
185
|
+
|
|
186
|
+
## Copy Tells (5)
|
|
187
|
+
|
|
188
|
+
### 36. Lorem Ipsum
|
|
189
|
+
- **What it looks like:** Placeholder Latin text in headlines, paragraphs, and button labels.
|
|
190
|
+
- **Why it's bad:** Makes the design feel unfinished and unprofessional. AI fills space with Lorem Ipsum when lacking content strategy.
|
|
191
|
+
- **How to fix it:** Write real copy during design. Use realistic placeholder text that matches the actual content length and tone.
|
|
192
|
+
|
|
193
|
+
### 37. John Doe / Jane Smith
|
|
194
|
+
- **What it looks like:** Generic names, fake email addresses, and placeholder avatars in forms and testimonials.
|
|
195
|
+
- **Why it's bad:** Signals incomplete work and lacks authenticity. AI defaults to these names without context.
|
|
196
|
+
- **How to fix it:** Use realistic but anonymized data. For user testing, use names like "User A" or role-based labels like "Product Manager."
|
|
197
|
+
|
|
198
|
+
### 38. Invented Metrics
|
|
199
|
+
- **What it looks like:** "10x faster," "99.9% uptime," "500+ features" without source or context.
|
|
200
|
+
- **Why it's bad:** Unsubstantiated claims erode trust. AI generates impressive-sounding numbers without data backing.
|
|
201
|
+
- **How to fix it:** Use real, verifiable metrics. If exact numbers aren't available, use ranges or qualitative claims ("significantly faster").
|
|
202
|
+
|
|
203
|
+
### 39. Exclamation Marks Everywhere
|
|
204
|
+
- **What it looks like:** Headlines and CTAs ending with "!" or multiple exclamation marks (e.g., "Get Started Now!!!").
|
|
205
|
+
- **Why it's bad:** Feels desperate and unprofessional. AI uses exclamation marks to inject enthusiasm without substance.
|
|
206
|
+
- **How to fix it:** Use period for most text. Reserve exclamation marks for genuine positive moments (success messages, celebrations).
|
|
207
|
+
|
|
208
|
+
### 40. "Welcome to Our Website"
|
|
209
|
+
- **What it looks like:** Generic welcome headlines, taglines, and meta descriptions that could apply to any company.
|
|
210
|
+
- **Why it's bad:** Fails to differentiate the brand. AI generates generic copy because it lacks brand context.
|
|
211
|
+
- **How to fix it:** Write value-driven headlines. Answer "Why should I care?" in the first sentence. Include specific differentiators.
|
|
212
|
+
|
|
213
|
+
## Layout Tells (10)
|
|
214
|
+
|
|
215
|
+
### 41. Margin: Auto Soup
|
|
216
|
+
- **What it looks like:** Excessive use of `margin: auto` for centering, often combined with fixed widths that break on smaller screens.
|
|
217
|
+
- **Why it's bad:** Creates fragile layouts that don't adapt. AI overuses auto margins because they "just work" in demos.
|
|
218
|
+
- **How to fix it:** Use modern layout systems (Flexbox, Grid) with appropriate alignment properties. Avoid fixed widths with auto margins.
|
|
219
|
+
|
|
220
|
+
### 42. Horizontal Scroll
|
|
221
|
+
- **What it looks like:** Content overflowing viewport width, requiring horizontal scrolling on mobile or desktop.
|
|
222
|
+
- **Why it's bad:** Breaks user expectations and creates terrible mobile experience. AI often forgets to constrain content.
|
|
223
|
+
- **How to fix it:** Use responsive containers, overflow-wrap, and Flexbox/Grid wrapping. Test at 320px viewport width.
|
|
224
|
+
|
|
225
|
+
### 43. Equal-Height Card Grids
|
|
226
|
+
- **What it looks like:** All cards in a row forced to the same height, with large empty spaces when content varies.
|
|
227
|
+
- **Why it's bad:** Wastes space and creates awkward visual rhythm. AI equalizes heights for "clean" appearance.
|
|
228
|
+
- **How to fix it:** Let cards size naturally. Use masonry layout or staggered grids if visual alignment is needed.
|
|
229
|
+
|
|
230
|
+
### 44. Pixel-Perfect Symmetry
|
|
231
|
+
- **What it looks like:** Every element mirrored or perfectly aligned to a grid with zero asymmetry.
|
|
232
|
+
- **Why it's bad:** Feels sterile and robotic. Real design uses intentional asymmetry for visual interest.
|
|
233
|
+
- **How to fix it:** Introduce controlled asymmetry. Offset images, use overlapping elements, or vary card sizes within a grid.
|
|
234
|
+
|
|
235
|
+
### 45. Infinite Vertical Stack
|
|
236
|
+
- **What it looks like:** Content stacked in a single narrow column with max-width 600px, even on wide screens.
|
|
237
|
+
- **Why it's bad:** Wastes screen real estate and creates monotonous reading experience.
|
|
238
|
+
- **How to fix it:** Use multi-column layouts for related content. Break into side-by-side sections on desktop. Reserve single column for long-form reading.
|
|
239
|
+
|
|
240
|
+
### 46. Floated Layouts
|
|
241
|
+
- **What it looks like:** CSS floats used for multi-column layouts instead of Flexbox or Grid.
|
|
242
|
+
- **What it looks like:** Elements clearing incorrectly, collapsed parent containers, and unpredictable wrapping.
|
|
243
|
+
- **How to fix it:** Use Flexbox or Grid for all layout purposes. Floats should only be used for wrapping text around images.
|
|
244
|
+
|
|
245
|
+
### 47. Table-Like Div Structures
|
|
246
|
+
- **What it looks like:** Complex nested divs with display: table-cell used to create grid layouts.
|
|
247
|
+
- **Why it's bad:** Semantic meaning is lost, accessibility suffers, and responsiveness is nearly impossible.
|
|
248
|
+
- **How to fix it:** Use CSS Grid or Flexbox with proper semantic HTML (section, article, aside).
|
|
249
|
+
|
|
250
|
+
### 48. Z-Index Stacking Context Chaos
|
|
251
|
+
- **What it looks like:** Z-index values like 9999, 10000, 999999 used everywhere to fix overlapping elements.
|
|
252
|
+
- **Why it's bad:** Creates maintenance nightmares and unexpected stacking. AI throws high z-index values to "fix" layering.
|
|
253
|
+
- **How to fix it:** Establish a z-index scale (e.g., 0: base, 10: dropdown, 20: sticky, 30: modal, 40: toast). Document and enforce it.
|
|
254
|
+
|
|
255
|
+
### 49. Fixed Position Overuse
|
|
256
|
+
- **What it looks like:** Multiple fixed-position elements (header, sidebar, chat widget, cookie banner) competing for screen space.
|
|
257
|
+
- **Why it's bad:** Reduces usable viewport and creates mobile usability issues. AI adds fixed elements for "convenience."
|
|
258
|
+
- **How to fix it:** Limit to one primary fixed element. Use sticky positioning where appropriate. Hide non-essential fixed elements on mobile.
|
|
259
|
+
|
|
260
|
+
### 50. Whitespace Hoarding
|
|
261
|
+
- **What it looks like:** Excessive padding and margins everywhere, creating large empty areas without purpose.
|
|
262
|
+
- **Why it's bad:** Forces users to scroll excessively and dilutes content density. AI equates whitespace with "clean design."
|
|
263
|
+
- **How to fix it:** Use intentional whitespace. Group related elements tightly. Separate unrelated sections with generous space.
|
|
264
|
+
|
|
265
|
+
### 51. Viewport Unit Overload
|
|
266
|
+
- **What it looks like:** Heights set to `100vh` for every section, causing issues on mobile browsers with dynamic address bars.
|
|
267
|
+
- **Why it's bad:** Mobile browsers show/hide address bars, making `100vh` sections jump or overflow.
|
|
268
|
+
- **How to fix it:** Use `dvh` (dynamic viewport height) where supported, or let content determine height. Avoid fixed heights for main sections.
|
|
269
|
+
|
|
270
|
+
## Token Tells (5)
|
|
271
|
+
|
|
272
|
+
### 52. Hardcoded Hex Values
|
|
273
|
+
- **What it looks like:** Colors like `#6366f1`, `#8b5cf6`, `#a855f7` scattered throughout CSS instead of using design tokens.
|
|
274
|
+
- **Why it's bad:** Makes theme changes impossible. AI generates hex values because it doesn't understand design token systems.
|
|
275
|
+
- **How to fix it:** Define semantic tokens (color-primary, color-text, color-bg) and reference them everywhere. Use HSL for programmatic color manipulation.
|
|
276
|
+
|
|
277
|
+
### 53. Mid-Render Improvisation
|
|
278
|
+
- **What it looks like:** Inline styles or dynamic class names generated at runtime based on content or user input.
|
|
279
|
+
- **Why it's bad:** Breaks consistency and makes debugging impossible. AI improvises styles when it can't find a pattern.
|
|
280
|
+
- **How to fix it:** Define all styles in CSS/design tokens. Use utility classes or component variants. Never generate styles dynamically from content.
|
|
281
|
+
|
|
282
|
+
### 54. Off-Scale Spacing
|
|
283
|
+
- **What it looks like:** Spacing values like 13px, 27px, 41px that don't fit any established spacing scale.
|
|
284
|
+
- **Why it's bad:** Creates visual inconsistency and makes maintenance difficult. AI generates arbitrary values to "make it look right."
|
|
285
|
+
- **How to fix it:** Use a defined spacing scale (4px, 8px, 12px, 16px, 24px, 32px, 48px, 64px). Adhere strictly to the scale.
|
|
286
|
+
|
|
287
|
+
### 55. Token Drift
|
|
288
|
+
- **What it looks like:** Similar concepts using different tokens (e.g., `color-primary` for buttons, `color-brand` for links, `color-accent` for highlights).
|
|
289
|
+
- **Why it's bad:** Creates confusion and inconsistency. AI invents new tokens instead of reusing existing ones.
|
|
290
|
+
- **How to fix it:** Audit token usage regularly. Consolidate duplicate tokens. Document token purpose and usage rules.
|
|
291
|
+
|
|
292
|
+
### 56. Magic Numbers
|
|
293
|
+
- **What it looks like:** Arbitrary values like `top: 37px`, `width: 273px`, `transform: rotate(7deg)` with no explanation or derivation.
|
|
294
|
+
- **Why it's bad:** Impossible to maintain or scale. AI generates these to "fix" visual issues without understanding the system.
|
|
295
|
+
- **How to fix it:** Derive all values from design tokens or calculations. If a magic number is truly needed, comment why and consider adding it to the token scale.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Color
|
|
2
|
+
|
|
3
|
+
Foundational rules for building a perceptually uniform, accessible color system. Colors are defined as design tokens in OKLCH and consumed via CSS custom properties.
|
|
4
|
+
|
|
5
|
+
## OKLCH Palette Construction
|
|
6
|
+
|
|
7
|
+
Build palettes in **OKLCH** (Lightness, Chroma, Hue). OKLCH keeps lightness perceptually even, so a `--color-bg-50` and `--color-bg-900` differ by the same visible amount at every step. Avoid HSL/RGB for scale generation.
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
--color-bg-0: oklch(99% 0 0); /* near white surface */
|
|
12
|
+
--color-bg-50: oklch(96% 0.005 250);
|
|
13
|
+
--color-bg-100: oklch(92% 0.008 250);
|
|
14
|
+
--color-bg-500: oklch(60% 0.05 250); /* mid */
|
|
15
|
+
--color-bg-900: oklch(25% 0.03 250); /* near black surface */
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Generate shades by holding hue, nudging chroma slightly, and stepping lightness in even increments (e.g. 99 → 96 → 92 → 85 → 75 → 60 → 45 → 30 → 25 → 18%).
|
|
20
|
+
|
|
21
|
+
## Token Naming
|
|
22
|
+
|
|
23
|
+
Name tokens with the pattern `--color-[role]-[shade]` so usage, not raw hue, drives selection.
|
|
24
|
+
|
|
25
|
+
```css
|
|
26
|
+
:root {
|
|
27
|
+
--color-text: oklch(20% 0.02 250); /* default body text */
|
|
28
|
+
--color-text-muted: oklch(45% 0.02 250);
|
|
29
|
+
--color-bg: oklch(99% 0 0);
|
|
30
|
+
--color-surface: oklch(96% 0.005 250);
|
|
31
|
+
--color-border: oklch(88% 0.01 250);
|
|
32
|
+
--color-accent: oklch(55% 0.16 250);
|
|
33
|
+
--color-accent-hover:oklch(48% 0.16 250);
|
|
34
|
+
--color-success: oklch(60% 0.14 145);
|
|
35
|
+
--color-error: oklch(58% 0.18 25);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Roles: `text`, `text-muted`, `bg`, `surface`, `border`, `accent`, `success`, `warning`, `error`. Always pair a base token with a `-hover` / `-active` variant.
|
|
40
|
+
|
|
41
|
+
## Contrast Requirements (WCAG AA)
|
|
42
|
+
|
|
43
|
+
| Element | Minimum contrast |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| Body text vs background | **4.5:1** |
|
|
46
|
+
| Large text (≥24px or ≥19px bold) vs background | **3:1** |
|
|
47
|
+
| UI components / borders vs adjacent | **3:1** |
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
/* Safe: text at 20% L on bg at 99% L */
|
|
51
|
+
--color-text: oklch(20% 0.02 250);
|
|
52
|
+
--color-bg: oklch(99% 0 0); /* ~16:1, passes AA & AAA */
|
|
53
|
+
|
|
54
|
+
/* Interactive accent must also reach 3:1 against its surface */
|
|
55
|
+
--color-accent: oklch(55% 0.16 250); /* check vs --color-surface */
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Verify every text/background and component/background pair before shipping. Muted text is still text — it must hit 4.5:1.
|
|
59
|
+
|
|
60
|
+
## Dark / Light Mode Pattern
|
|
61
|
+
|
|
62
|
+
Drive both themes from one token set, swapping only the role values under a `[data-theme]` or `prefers-color-scheme` selector. Never hardcode raw colors in components.
|
|
63
|
+
|
|
64
|
+
```css
|
|
65
|
+
:root,
|
|
66
|
+
[data-theme="light"] {
|
|
67
|
+
--color-bg: oklch(99% 0 0);
|
|
68
|
+
--color-surface: oklch(96% 0.005 250);
|
|
69
|
+
--color-text: oklch(20% 0.02 250);
|
|
70
|
+
--color-border: oklch(88% 0.01 250);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
[data-theme="dark"] {
|
|
74
|
+
--color-bg: oklch(18% 0.02 250);
|
|
75
|
+
--color-surface: oklch(24% 0.025 250);
|
|
76
|
+
--color-text: oklch(95% 0.005 250);
|
|
77
|
+
--color-border: oklch(40% 0.02 250);
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
body { background: var(--color-bg); color: var(--color-text); }
|
|
83
|
+
.card { background: var(--color-surface); border: 1px solid var(--color-border); }
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
This guarantees contrast holds in both modes because each role is re-tuned per theme.
|
|
87
|
+
|
|
88
|
+
## Accent Footprint
|
|
89
|
+
|
|
90
|
+
The accent color (brand / call-to-action) should occupy **less than 5% of the viewport** at any time. Use it for: primary button, active link underline, focus ring, key data point. Do not paint large surfaces or full backgrounds with the accent.
|
|
91
|
+
|
|
92
|
+
```css
|
|
93
|
+
/* Good: small, intentional accent */
|
|
94
|
+
.btn-primary { background: var(--color-accent); }
|
|
95
|
+
a.active { border-bottom: 2px solid var(--color-accent); }
|
|
96
|
+
|
|
97
|
+
/* Bad: entire hero section is accent-colored */
|
|
98
|
+
.hero { background: var(--color-accent); } /* violates <5% rule */
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Ban List
|
|
102
|
+
|
|
103
|
+
- **Pure `#000` / `#fff` as primary colors.** Use `oklch(18% ...)` / `oklch(99% ...)` instead — pure black/white cause harsh halation and fail comfortable contrast tuning.
|
|
104
|
+
- **Purple-blue gradients** (`linear-gradient(135deg, #667eea, #764ba2)` and friends) as a default decorative treatment. They read as generic/templated and reduce brand distinction.
|
|
105
|
+
- Rainbow or multi-hue gradients for non-data purposes.
|
|
106
|
+
- Color used as the *only* signal for state (always pair with text/icon — see interaction-and-states.md).
|
|
107
|
+
|
|
108
|
+
## Practical Checklist
|
|
109
|
+
|
|
110
|
+
- [ ] Palette authored in OKLCH.
|
|
111
|
+
- [ ] Tokens follow `--color-[role]-[shade]`.
|
|
112
|
+
- [ ] All text pairs ≥ 4.5:1; large/UI ≥ 3:1.
|
|
113
|
+
- [ ] Dark + light via token swap, no hardcoded colors.
|
|
114
|
+
- [ ] Accent covers < 5% of viewport.
|
|
115
|
+
- [ ] No pure black/white primaries, no purple-blue gradients.
|