@nextsparkjs/ai-workflow 0.1.0-beta.86

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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/claude/_docs/workflows-optimizations.md +359 -0
  4. package/claude/agents/api-tester.md +636 -0
  5. package/claude/agents/architecture-supervisor.md +1381 -0
  6. package/claude/agents/backend-developer.md +1021 -0
  7. package/claude/agents/backend-validator.md +417 -0
  8. package/claude/agents/bdd-docs-writer.md +737 -0
  9. package/claude/agents/block-developer.md +677 -0
  10. package/claude/agents/code-reviewer.md +1460 -0
  11. package/claude/agents/db-developer.md +721 -0
  12. package/claude/agents/db-validator.md +407 -0
  13. package/claude/agents/demo-video-generator.md +493 -0
  14. package/claude/agents/documentation-writer.md +1291 -0
  15. package/claude/agents/frontend-developer.md +1259 -0
  16. package/claude/agents/frontend-validator.md +777 -0
  17. package/claude/agents/functional-validator.md +630 -0
  18. package/claude/agents/mock-analyst.md +387 -0
  19. package/claude/agents/product-manager.md +971 -0
  20. package/claude/agents/qa-automation.md +1762 -0
  21. package/claude/agents/release-manager.md +634 -0
  22. package/claude/agents/selectors-translator.md +262 -0
  23. package/claude/agents/unit-test-writer.md +785 -0
  24. package/claude/agents/visual-comparator.md +329 -0
  25. package/claude/agents/workflow-maintainer.md +373 -0
  26. package/claude/commands/do/README.md +88 -0
  27. package/claude/commands/do/create-api.md +64 -0
  28. package/claude/commands/do/create-entity.md +66 -0
  29. package/claude/commands/do/create-migration.md +64 -0
  30. package/claude/commands/do/create-plugin.md +56 -0
  31. package/claude/commands/do/create-theme.md +70 -0
  32. package/claude/commands/do/mock-data.md +67 -0
  33. package/claude/commands/do/reset-db.md +71 -0
  34. package/claude/commands/do/setup-scheduled-action.md +75 -0
  35. package/claude/commands/do/sync-code-review.md +117 -0
  36. package/claude/commands/do/update-selectors.md +112 -0
  37. package/claude/commands/do/use-skills.md +90 -0
  38. package/claude/commands/do/validate-blocks.md +69 -0
  39. package/claude/commands/how-to/README.md +261 -0
  40. package/claude/commands/how-to/add-metadata.md +692 -0
  41. package/claude/commands/how-to/add-taxonomies.md +806 -0
  42. package/claude/commands/how-to/add-translations.md +571 -0
  43. package/claude/commands/how-to/create-api.md +577 -0
  44. package/claude/commands/how-to/create-block.md +575 -0
  45. package/claude/commands/how-to/create-child-entities.md +771 -0
  46. package/claude/commands/how-to/create-entity.md +597 -0
  47. package/claude/commands/how-to/create-migrations.md +605 -0
  48. package/claude/commands/how-to/create-plugin.md +654 -0
  49. package/claude/commands/how-to/customize-app.md +481 -0
  50. package/claude/commands/how-to/customize-dashboard.md +553 -0
  51. package/claude/commands/how-to/customize-theme.md +438 -0
  52. package/claude/commands/how-to/define-features-flows.md +632 -0
  53. package/claude/commands/how-to/deploy.md +507 -0
  54. package/claude/commands/how-to/handle-file-uploads.md +681 -0
  55. package/claude/commands/how-to/implement-search.md +1001 -0
  56. package/claude/commands/how-to/install-plugins.md +352 -0
  57. package/claude/commands/how-to/manage-test-coverage.md +984 -0
  58. package/claude/commands/how-to/run-tests.md +400 -0
  59. package/claude/commands/how-to/set-app-languages.md +601 -0
  60. package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
  61. package/claude/commands/how-to/set-scheduled-actions.md +527 -0
  62. package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
  63. package/claude/commands/how-to/setup-authentication.md +388 -0
  64. package/claude/commands/how-to/setup-claude-code.md +512 -0
  65. package/claude/commands/how-to/setup-database.md +274 -0
  66. package/claude/commands/how-to/setup-email-providers.md +598 -0
  67. package/claude/commands/how-to/setup-mobile-dev.md +627 -0
  68. package/claude/commands/how-to/start.md +455 -0
  69. package/claude/commands/how-to/use-devtools.md +639 -0
  70. package/claude/commands/how-to/use-superadmin.md +622 -0
  71. package/claude/commands/session/README.md +193 -0
  72. package/claude/commands/session/block-create.md +190 -0
  73. package/claude/commands/session/block-list.md +203 -0
  74. package/claude/commands/session/block-update.md +192 -0
  75. package/claude/commands/session/block-validate.md +218 -0
  76. package/claude/commands/session/close.md +146 -0
  77. package/claude/commands/session/commit.md +174 -0
  78. package/claude/commands/session/db-entity.md +206 -0
  79. package/claude/commands/session/db-fix.md +212 -0
  80. package/claude/commands/session/db-sample.md +206 -0
  81. package/claude/commands/session/demo.md +178 -0
  82. package/claude/commands/session/doc-bdd.md +207 -0
  83. package/claude/commands/session/doc-feature.md +218 -0
  84. package/claude/commands/session/doc-read.md +225 -0
  85. package/claude/commands/session/execute.md +204 -0
  86. package/claude/commands/session/explain.md +202 -0
  87. package/claude/commands/session/fix-bug.md +210 -0
  88. package/claude/commands/session/fix-build.md +182 -0
  89. package/claude/commands/session/fix-test.md +189 -0
  90. package/claude/commands/session/pending.md +232 -0
  91. package/claude/commands/session/refine.md +188 -0
  92. package/claude/commands/session/resume.md +192 -0
  93. package/claude/commands/session/review.md +192 -0
  94. package/claude/commands/session/scope-change.md +181 -0
  95. package/claude/commands/session/start-blocks.md +347 -0
  96. package/claude/commands/session/start.md +476 -0
  97. package/claude/commands/session/status.md +169 -0
  98. package/claude/commands/session/test-fix.md +221 -0
  99. package/claude/commands/session/test-run.md +203 -0
  100. package/claude/commands/session/test-write.md +242 -0
  101. package/claude/commands/session/validate.md +162 -0
  102. package/claude/config/context.json +54 -0
  103. package/claude/config/github.json +69 -0
  104. package/claude/config/github.schema.json +106 -0
  105. package/claude/config/team.json +46 -0
  106. package/claude/config/team.schema.json +106 -0
  107. package/claude/config/workspace.json +49 -0
  108. package/claude/config/workspace.schema.json +64 -0
  109. package/claude/scripts/.gitkeep +0 -0
  110. package/claude/sessions/.gitkeep +0 -0
  111. package/claude/skills/README.md +228 -0
  112. package/claude/skills/accessibility/SKILL.md +573 -0
  113. package/claude/skills/api-bypass-layers/SKILL.md +550 -0
  114. package/claude/skills/asana-integration/SKILL.md +499 -0
  115. package/claude/skills/better-auth/SKILL.md +666 -0
  116. package/claude/skills/billing-subscriptions/SKILL.md +660 -0
  117. package/claude/skills/block-decision-matrix/SKILL.md +359 -0
  118. package/claude/skills/clickup-integration/SKILL.md +434 -0
  119. package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
  120. package/claude/skills/create-plugin/SKILL.md +425 -0
  121. package/claude/skills/create-theme/SKILL.md +331 -0
  122. package/claude/skills/cypress-api/SKILL.md +511 -0
  123. package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
  124. package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
  125. package/claude/skills/cypress-e2e/SKILL.md +526 -0
  126. package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
  127. package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
  128. package/claude/skills/cypress-selectors/SKILL.md +309 -0
  129. package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
  130. package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
  131. package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
  132. package/claude/skills/database-migrations/SKILL.md +335 -0
  133. package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
  134. package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
  135. package/claude/skills/design-system/SKILL.md +682 -0
  136. package/claude/skills/documentation/SKILL.md +540 -0
  137. package/claude/skills/entity-api/SKILL.md +482 -0
  138. package/claude/skills/entity-system/SKILL.md +635 -0
  139. package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
  140. package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
  141. package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
  142. package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
  143. package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
  144. package/claude/skills/github/SKILL.md +467 -0
  145. package/claude/skills/i18n-nextintl/SKILL.md +302 -0
  146. package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
  147. package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
  148. package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
  149. package/claude/skills/impact-analysis/SKILL.md +203 -0
  150. package/claude/skills/jest-unit/SKILL.md +306 -0
  151. package/claude/skills/jest-unit/references/component-testing.md +371 -0
  152. package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
  153. package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
  154. package/claude/skills/jira-integration/SKILL.md +539 -0
  155. package/claude/skills/mock-analysis/SKILL.md +276 -0
  156. package/claude/skills/monorepo-architecture/SKILL.md +162 -0
  157. package/claude/skills/nextjs-api-development/SKILL.md +364 -0
  158. package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
  159. package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
  160. package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
  161. package/claude/skills/notion-integration/SKILL.md +641 -0
  162. package/claude/skills/npm-development-workflow/SKILL.md +480 -0
  163. package/claude/skills/page-builder-blocks/SKILL.md +483 -0
  164. package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
  165. package/claude/skills/permissions-system/SKILL.md +619 -0
  166. package/claude/skills/plugins/SKILL.md +340 -0
  167. package/claude/skills/plugins/references/plugin-templates.md +414 -0
  168. package/claude/skills/plugins/references/plugin-testing.md +353 -0
  169. package/claude/skills/plugins/references/plugin-types.md +198 -0
  170. package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
  171. package/claude/skills/pom-patterns/SKILL.md +452 -0
  172. package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
  173. package/claude/skills/rate-limiting/SKILL.md +342 -0
  174. package/claude/skills/react-best-practices/AGENTS.md +2410 -0
  175. package/claude/skills/react-best-practices/README.md +123 -0
  176. package/claude/skills/react-best-practices/SKILL.md +125 -0
  177. package/claude/skills/react-best-practices/metadata.json +15 -0
  178. package/claude/skills/react-best-practices/rules/_sections.md +46 -0
  179. package/claude/skills/react-best-practices/rules/_template.md +28 -0
  180. package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  181. package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  182. package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  183. package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  184. package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  185. package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  186. package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  187. package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  188. package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  189. package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  190. package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  191. package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  192. package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  193. package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  194. package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  195. package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  196. package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  197. package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  198. package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  199. package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  200. package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  201. package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  202. package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  203. package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  204. package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  205. package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  206. package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  207. package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  208. package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  209. package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  210. package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  211. package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  212. package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  213. package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  214. package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  215. package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  216. package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  217. package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  218. package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  219. package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  220. package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  221. package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  222. package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  223. package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  224. package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
  225. package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  227. package/claude/skills/react-patterns/SKILL.md +677 -0
  228. package/claude/skills/registry-system/SKILL.md +331 -0
  229. package/claude/skills/scheduled-actions/SKILL.md +431 -0
  230. package/claude/skills/scope-enforcement/SKILL.md +542 -0
  231. package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
  232. package/claude/skills/server-actions/SKILL.md +493 -0
  233. package/claude/skills/service-layer/SKILL.md +587 -0
  234. package/claude/skills/session-management/SKILL.md +266 -0
  235. package/claude/skills/session-management/scripts/create-session.py +166 -0
  236. package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
  237. package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
  238. package/claude/skills/session-management/scripts/session-archive.sh +87 -0
  239. package/claude/skills/session-management/scripts/session-close.sh +133 -0
  240. package/claude/skills/session-management/scripts/session-init.sh +225 -0
  241. package/claude/skills/session-management/scripts/session-list.sh +163 -0
  242. package/claude/skills/session-management/scripts/split-plan.sh +116 -0
  243. package/claude/skills/shadcn-components/SKILL.md +586 -0
  244. package/claude/skills/shadcn-theming/SKILL.md +446 -0
  245. package/claude/skills/suspense-loading/SKILL.md +280 -0
  246. package/claude/skills/tailwind-theming/SKILL.md +479 -0
  247. package/claude/skills/tanstack-query/SKILL.md +608 -0
  248. package/claude/skills/test-coverage/SKILL.md +239 -0
  249. package/claude/skills/web-design-guidelines/SKILL.md +39 -0
  250. package/claude/skills/zod-validation/SKILL.md +537 -0
  251. package/claude/templates/blocks/progress.md +86 -0
  252. package/claude/templates/iteration/changes.md +61 -0
  253. package/claude/templates/iteration/progress.md +55 -0
  254. package/claude/templates/log.md +31 -0
  255. package/claude/templates/story/context.md +77 -0
  256. package/claude/templates/story/pendings.md +37 -0
  257. package/claude/templates/story/plan.md +299 -0
  258. package/claude/templates/story/requirements.md +109 -0
  259. package/claude/templates/story/scope.json +10 -0
  260. package/claude/templates/story/tests.md +91 -0
  261. package/claude/templates/task/progress.md +58 -0
  262. package/claude/templates/task/requirements.md +54 -0
  263. package/claude/workflows/README.md +154 -0
  264. package/claude/workflows/blocks.md +614 -0
  265. package/claude/workflows/story.md +1207 -0
  266. package/claude/workflows/task.md +927 -0
  267. package/claude/workflows/tweak.md +527 -0
  268. package/cursor/.gitkeep +0 -0
  269. package/package.json +34 -0
  270. package/scripts/setup.mjs +282 -0
  271. package/scripts/sync.mjs +209 -0
@@ -0,0 +1,479 @@
1
+ ---
2
+ name: tailwind-theming
3
+ description: |
4
+ Tailwind CSS theming system for this Next.js application.
5
+ Covers CSS variables, semantic tokens, dark mode, buildSectionClasses, and theme build process.
6
+ Use this skill when implementing UI styling or working with theme configurations.
7
+ allowed-tools: Read, Glob, Grep
8
+ version: 1.0.0
9
+ ---
10
+
11
+ # Tailwind Theming Skill
12
+
13
+ Patterns for working with the Tailwind CSS v4 theming system, CSS variables, and semantic tokens.
14
+
15
+ ## Architecture Overview
16
+
17
+ ```
18
+ TAILWIND THEMING (v4):
19
+
20
+ Source Files:
21
+ contents/themes/{THEME}/
22
+ ├── styles/
23
+ │ ├── globals.css # CSS variables (light + dark)
24
+ │ └── components.css # Component-specific styles
25
+ ├── config/
26
+ │ └── theme.config.ts # Theme settings
27
+ └── public/
28
+ └── theme-assets/ # Images, fonts
29
+
30
+ Generated Files (DO NOT EDIT):
31
+ ├── core/theme-styles.css # Compiled theme CSS
32
+ └── public/theme/ # Copied assets
33
+
34
+ Build Script:
35
+ └── core/scripts/build/theme.mjs
36
+ ```
37
+
38
+ ## When to Use This Skill
39
+
40
+ - Styling components with semantic tokens
41
+ - Understanding CSS variable system
42
+ - Implementing dark mode support
43
+ - Using buildSectionClasses in blocks
44
+ - Working with background color presets
45
+
46
+ ## CSS Variables (Design Tokens)
47
+
48
+ ### Core Semantic Colors
49
+
50
+ ```css
51
+ /* Light Mode (:root) */
52
+ :root {
53
+ /* Backgrounds */
54
+ --background: oklch(1 0 0); /* Page background */
55
+ --card: oklch(1 0 0); /* Card surfaces */
56
+ --popover: oklch(1 0 0); /* Dropdowns, popovers */
57
+
58
+ /* Foregrounds (text) */
59
+ --foreground: oklch(0.145 0 0); /* Primary text */
60
+ --card-foreground: oklch(0.145 0 0); /* Card text */
61
+ --popover-foreground: oklch(0.145 0 0); /* Popover text */
62
+
63
+ /* Interactive */
64
+ --primary: oklch(0.205 0 0); /* Primary buttons/links */
65
+ --primary-foreground: oklch(0.985 0 0); /* Text on primary */
66
+ --secondary: oklch(0.97 0 0); /* Secondary elements */
67
+ --secondary-foreground: oklch(0.205 0 0);
68
+
69
+ /* States */
70
+ --muted: oklch(0.97 0 0); /* Muted backgrounds */
71
+ --muted-foreground: oklch(0.556 0 0); /* Muted/placeholder text */
72
+ --accent: oklch(0.97 0 0); /* Accent highlights */
73
+ --accent-foreground: oklch(0.205 0 0);
74
+
75
+ /* Feedback */
76
+ --destructive: oklch(0.577 0.245 27.325); /* Error/danger */
77
+ --destructive-foreground: oklch(1 0 0);
78
+
79
+ /* Borders & Inputs */
80
+ --border: oklch(0.922 0 0); /* Border color */
81
+ --input: oklch(0.922 0 0); /* Input borders */
82
+ --ring: oklch(0.708 0 0); /* Focus rings */
83
+
84
+ /* Radius */
85
+ --radius: 0.5rem; /* Base border radius */
86
+ }
87
+ ```
88
+
89
+ ### Dark Mode Variables
90
+
91
+ ```css
92
+ /* Dark Mode (.dark selector) */
93
+ .dark {
94
+ /* Inverted - dark backgrounds, light text */
95
+ --background: oklch(0.145 0 0);
96
+ --foreground: oklch(0.985 0 0);
97
+
98
+ --card: oklch(0.145 0 0);
99
+ --card-foreground: oklch(0.985 0 0);
100
+
101
+ --primary: oklch(0.922 0 0);
102
+ --primary-foreground: oklch(0.205 0 0);
103
+
104
+ --muted: oklch(0.269 0 0);
105
+ --muted-foreground: oklch(0.708 0 0);
106
+
107
+ --border: oklch(0.269 0 0);
108
+ --input: oklch(0.269 0 0);
109
+
110
+ /* Destructive stays similar but adjusted for dark */
111
+ --destructive: oklch(0.396 0.141 25.723);
112
+ --destructive-foreground: oklch(0.985 0 0);
113
+ }
114
+ ```
115
+
116
+ ### Sidebar Variables
117
+
118
+ ```css
119
+ :root {
120
+ --sidebar: oklch(0.985 0 0);
121
+ --sidebar-foreground: oklch(0.145 0 0);
122
+ --sidebar-primary: oklch(0.205 0 0);
123
+ --sidebar-primary-foreground: oklch(0.985 0 0);
124
+ --sidebar-accent: oklch(0.97 0 0);
125
+ --sidebar-accent-foreground: oklch(0.205 0 0);
126
+ --sidebar-border: oklch(0.922 0 0);
127
+ --sidebar-ring: oklch(0.708 0 0);
128
+ }
129
+ ```
130
+
131
+ ### Chart Colors
132
+
133
+ ```css
134
+ :root {
135
+ --chart-1: oklch(0.81 0.1 252);
136
+ --chart-2: oklch(0.62 0.19 260);
137
+ --chart-3: oklch(0.55 0.22 263);
138
+ --chart-4: oklch(0.49 0.22 264);
139
+ --chart-5: oklch(0.42 0.18 266);
140
+ }
141
+ ```
142
+
143
+ ## Semantic Token Usage
144
+
145
+ ### Correct Usage
146
+
147
+ ```typescript
148
+ // ✅ ALWAYS use semantic tokens
149
+ <div className="bg-background text-foreground">
150
+ <div className="bg-card text-card-foreground">
151
+ <p className="text-muted-foreground">
152
+ <button className="bg-primary text-primary-foreground">
153
+ <span className="text-destructive">
154
+
155
+ // ✅ Borders and inputs
156
+ <div className="border border-border">
157
+ <input className="border-input focus:ring-ring">
158
+
159
+ // ✅ Radius
160
+ <div className="rounded-lg"> {/* Uses --radius */}
161
+ <div className="rounded-sm"> {/* calc(--radius - 4px) */}
162
+ ```
163
+
164
+ ### Forbidden Patterns
165
+
166
+ ```typescript
167
+ // ❌ NEVER hardcode colors
168
+ <div className="bg-white text-black">
169
+ <div className="bg-gray-100">
170
+ <p className="text-gray-500">
171
+ <button className="bg-blue-500 text-white">
172
+
173
+ // ❌ NEVER use arbitrary color values
174
+ <div className="bg-[#ffffff]">
175
+ <p className="text-[rgb(107,114,128)]">
176
+ ```
177
+
178
+ ## Background Color Presets (Blocks)
179
+
180
+ ### Available Values
181
+
182
+ ```typescript
183
+ type BackgroundColor =
184
+ | 'transparent' // bg-transparent
185
+ | 'white' // bg-white
186
+ | 'gray-50' // bg-gray-50
187
+ | 'gray-100' // bg-gray-100
188
+ | 'gray-900' // bg-gray-900 text-white
189
+ | 'primary' // bg-primary text-primary-foreground
190
+ | 'primary-light' // bg-primary/10
191
+ | 'primary-dark' // bg-primary-dark text-white
192
+ | 'secondary' // bg-secondary text-secondary-foreground
193
+ | 'accent' // bg-accent text-accent-foreground
194
+ ```
195
+
196
+ ### getBackgroundClasses Function
197
+
198
+ ```typescript
199
+ // core/types/blocks.ts
200
+
201
+ export function getBackgroundClasses(backgroundColor?: BackgroundColor): string {
202
+ const bgMap: Record<BackgroundColor, string> = {
203
+ transparent: 'bg-transparent',
204
+ white: 'bg-white',
205
+ 'gray-50': 'bg-gray-50',
206
+ 'gray-100': 'bg-gray-100',
207
+ 'gray-900': 'bg-gray-900 text-white',
208
+ primary: 'bg-primary text-primary-foreground',
209
+ 'primary-light': 'bg-primary/10',
210
+ 'primary-dark': 'bg-primary-dark text-white',
211
+ secondary: 'bg-secondary text-secondary-foreground',
212
+ accent: 'bg-accent text-accent-foreground',
213
+ }
214
+ return bgMap[backgroundColor || 'transparent']
215
+ }
216
+ ```
217
+
218
+ ## buildSectionClasses Helper
219
+
220
+ ### Function Signature
221
+
222
+ ```typescript
223
+ // core/types/blocks.ts
224
+
225
+ export function buildSectionClasses(
226
+ baseClasses: string,
227
+ props: Partial<{
228
+ backgroundColor?: BackgroundColor
229
+ className?: string
230
+ }>
231
+ ): string
232
+ ```
233
+
234
+ ### Usage in Blocks
235
+
236
+ ```typescript
237
+ import { buildSectionClasses } from '@/core/types/blocks'
238
+ import type { HeroProps } from './schema'
239
+
240
+ export function HeroBlock({
241
+ title,
242
+ content,
243
+ backgroundColor,
244
+ className,
245
+ id,
246
+ }: HeroProps) {
247
+ // Combine base classes + background + custom
248
+ const sectionClasses = buildSectionClasses(
249
+ 'relative flex min-h-[600px] items-center justify-center px-4 py-20',
250
+ { backgroundColor, className }
251
+ )
252
+
253
+ return (
254
+ <section id={id} className={sectionClasses}>
255
+ {/* ... */}
256
+ </section>
257
+ )
258
+ }
259
+ ```
260
+
261
+ ### Output Examples
262
+
263
+ ```typescript
264
+ buildSectionClasses('py-16 px-4', {})
265
+ // "py-16 px-4"
266
+
267
+ buildSectionClasses('py-16 px-4', { backgroundColor: 'gray-900' })
268
+ // "py-16 px-4 bg-gray-900 text-white"
269
+
270
+ buildSectionClasses('py-16 px-4', {
271
+ backgroundColor: 'primary',
272
+ className: 'custom-class'
273
+ })
274
+ // "py-16 px-4 bg-primary text-primary-foreground custom-class"
275
+ ```
276
+
277
+ ## Dark Mode Implementation
278
+
279
+ ### Architecture
280
+
281
+ ```
282
+ 1. CSS Variables → Define light/dark values
283
+ 2. next-themes → Manages .dark class on <html>
284
+ 3. Tailwind → Reads CSS variables automatically
285
+ ```
286
+
287
+ ### Theme Provider Setup
288
+
289
+ ```typescript
290
+ // core/providers/theme-provider.tsx
291
+ import { ThemeProvider as NextThemeProvider } from 'next-themes'
292
+
293
+ export function ThemeProvider({ children }) {
294
+ return (
295
+ <NextThemeProvider
296
+ attribute="class" // Adds .dark to <html>
297
+ defaultTheme={defaultTheme} // light | dark | system
298
+ enableSystem // Respects OS preference
299
+ disableTransitionOnChange // No color flash
300
+ >
301
+ {children}
302
+ </NextThemeProvider>
303
+ )
304
+ }
305
+ ```
306
+
307
+ ### Theme Toggle
308
+
309
+ ```typescript
310
+ import { useTheme } from 'next-themes'
311
+
312
+ function ThemeToggle() {
313
+ const { theme, setTheme } = useTheme()
314
+
315
+ return (
316
+ <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
317
+ Toggle theme
318
+ </button>
319
+ )
320
+ }
321
+ ```
322
+
323
+ ### Default Theme Resolution
324
+
325
+ ```typescript
326
+ // Priority order:
327
+ // 1. User preference (stored in DB: uiPreferences.theme)
328
+ // 2. Theme config default (theme.config.ts → defaultMode)
329
+ // 3. System preference
330
+ // 4. Fallback: 'light'
331
+ ```
332
+
333
+ ## Theme Build Process
334
+
335
+ ### Build Commands
336
+
337
+ ```bash
338
+ # Rebuild theme CSS
339
+ pnpm theme:build
340
+
341
+ # Or manually
342
+ node core/scripts/build/theme.mjs
343
+
344
+ # Watch mode (auto-rebuild)
345
+ node core/scripts/build/theme.mjs --watch
346
+ ```
347
+
348
+ ### What Build Does
349
+
350
+ 1. **Reads** `NEXT_PUBLIC_ACTIVE_THEME` from `.env`
351
+ 2. **Finds** `contents/themes/{theme}/styles/globals.css`
352
+ 3. **Finds** `contents/themes/{theme}/styles/components.css`
353
+ 4. **Copies** assets from `contents/themes/{theme}/public/` → `public/theme/`
354
+ 5. **Copies** block thumbnails → `public/theme/blocks/{slug}/`
355
+ 6. **Generates** `core/theme-styles.css`
356
+
357
+ ### Generated File
358
+
359
+ ```css
360
+ /*
361
+ * Generated Theme CSS
362
+ * Theme: default
363
+ * Build time: 2025-12-30T12:00:00.000Z
364
+ * DO NOT EDIT - Auto-generated by theme.mjs
365
+ */
366
+
367
+ /* Contents of globals.css */
368
+ :root {
369
+ --background: ...
370
+ }
371
+
372
+ /* Contents of components.css */
373
+ .custom-component {
374
+ ...
375
+ }
376
+ ```
377
+
378
+ ## @theme Mapping (Tailwind v4)
379
+
380
+ ```css
381
+ /* In globals.css - Maps CSS vars to Tailwind */
382
+ @theme inline {
383
+ /* Colors */
384
+ --color-background: var(--background);
385
+ --color-foreground: var(--foreground);
386
+ --color-card: var(--card);
387
+ --color-primary: var(--primary);
388
+ /* ... */
389
+
390
+ /* Fonts */
391
+ --font-sans: var(--font-sans);
392
+ --font-mono: var(--font-mono);
393
+
394
+ /* Radius */
395
+ --radius-sm: calc(var(--radius) - 4px);
396
+ --radius-md: calc(var(--radius) - 2px);
397
+ --radius-lg: var(--radius);
398
+ --radius-xl: calc(var(--radius) + 4px);
399
+
400
+ /* Shadows */
401
+ --shadow-sm: var(--shadow-sm);
402
+ --shadow-md: var(--shadow-md);
403
+ }
404
+ ```
405
+
406
+ ## Theme File Structure
407
+
408
+ ```
409
+ contents/themes/default/
410
+ ├── config/
411
+ │ ├── theme.config.ts # Theme metadata
412
+ │ ├── app.config.ts # App settings
413
+ │ ├── permissions.config.ts # Role permissions
414
+ │ └── plans.config.ts # Billing plans
415
+ ├── styles/
416
+ │ ├── globals.css # CSS variables (light + dark)
417
+ │ └── components.css # Custom component styles
418
+ ├── blocks/
419
+ │ └── {slug}/
420
+ │ └── thumbnail.png # Block preview image
421
+ ├── public/
422
+ │ └── theme-assets/ # Static assets
423
+ └── messages/
424
+ ├── en.json # English translations
425
+ └── es.json # Spanish translations
426
+ ```
427
+
428
+ ## Anti-Patterns
429
+
430
+ ```typescript
431
+ // NEVER: Hardcode colors
432
+ <div className="bg-white text-gray-900">
433
+
434
+ // CORRECT: Use semantic tokens
435
+ <div className="bg-background text-foreground">
436
+
437
+ // NEVER: Use arbitrary colors
438
+ <div className="bg-[#1a1a1a]">
439
+
440
+ // CORRECT: Define in CSS variables if needed
441
+ <div className="bg-background">
442
+
443
+ // NEVER: Hardcode dark mode classes
444
+ <div className="bg-white dark:bg-gray-900">
445
+
446
+ // CORRECT: Use variables that auto-switch
447
+ <div className="bg-background"> {/* Switches automatically */}
448
+
449
+ // NEVER: Skip buildSectionClasses in blocks
450
+ <section className={`py-16 ${backgroundColor === 'gray-900' ? 'bg-gray-900 text-white' : ''}`}>
451
+
452
+ // CORRECT: Use helper function
453
+ <section className={buildSectionClasses('py-16', { backgroundColor })}>
454
+
455
+ // NEVER: Modify generated CSS files
456
+ // core/theme-styles.css - DO NOT EDIT
457
+
458
+ // CORRECT: Modify source files and rebuild
459
+ // contents/themes/default/styles/globals.css
460
+ ```
461
+
462
+ ## Checklist
463
+
464
+ Before finalizing theme implementation:
465
+
466
+ - [ ] Using semantic tokens (bg-background, not bg-white)
467
+ - [ ] No hardcoded colors
468
+ - [ ] Dark mode works automatically (variables switch)
469
+ - [ ] Blocks use buildSectionClasses helper
470
+ - [ ] Background color uses BackgroundColor type
471
+ - [ ] Theme rebuilt after CSS changes
472
+ - [ ] Assets copied to public/theme/
473
+ - [ ] No modifications to generated files
474
+
475
+ ## Related Skills
476
+
477
+ - `shadcn-components` - Component styling patterns
478
+ - `page-builder-blocks` - Block styling with buildSectionClasses
479
+ - `accessibility` - Color contrast requirements