css-is-awesome 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/AGENTS.md +343 -0
  2. package/CHANGELOG.md +1036 -0
  3. package/CLAUDE.md +9 -0
  4. package/CONTRACT.md +580 -0
  5. package/GEMINI.md +9 -0
  6. package/LICENSE +21 -0
  7. package/LICENSE-third-party +88 -0
  8. package/MIGRATION.md +312 -0
  9. package/README.md +380 -0
  10. package/ROADMAP.md +714 -0
  11. package/THEMING.md +290 -0
  12. package/THREE-TIERS.md +158 -0
  13. package/VERSIONING.md +200 -0
  14. package/_index.scss +34 -0
  15. package/api.scss +16 -0
  16. package/bin/README.md +57 -0
  17. package/bin/cia.cjs +114 -0
  18. package/bin/migrate-bootstrap.cjs +427 -0
  19. package/bin/migrate-tailwind.cjs +832 -0
  20. package/css-is-awesome.instructions.md +533 -0
  21. package/dist/css-is-awesome.core.css +598 -0
  22. package/dist/css-is-awesome.core.min.css +1 -0
  23. package/dist/css-is-awesome.css +3733 -0
  24. package/dist/css-is-awesome.min.css +1 -0
  25. package/dist/css-is-awesome.utilities.css +2445 -0
  26. package/dist/css-is-awesome.utilities.min.css +1 -0
  27. package/dist/tokens.css +508 -0
  28. package/dist/tokens.d.ts +266 -0
  29. package/dist/tokens.min.css +1 -0
  30. package/figma-tokens/README.md +57 -0
  31. package/figma-tokens/primitives-brand.scss +121 -0
  32. package/figma-tokens/semantic-dark.scss +61 -0
  33. package/figma-tokens/semantic-light.scss +61 -0
  34. package/figma-tokens/tokens.json +144 -0
  35. package/llm.txt +183 -0
  36. package/mcp/server.cjs +1495 -0
  37. package/package.json +199 -0
  38. package/public/icons/README.md +278 -0
  39. package/public/icons/arrow-right.svg +4 -0
  40. package/public/icons/check.svg +4 -0
  41. package/public/icons/chevron-down.svg +4 -0
  42. package/public/icons/close.svg +4 -0
  43. package/public/icons/core/arrow-down.svg +13 -0
  44. package/public/icons/core/arrow-left.svg +13 -0
  45. package/public/icons/core/arrow-right.svg +13 -0
  46. package/public/icons/core/arrow-up.svg +13 -0
  47. package/public/icons/core/bell.svg +13 -0
  48. package/public/icons/core/calendar.svg +15 -0
  49. package/public/icons/core/check.svg +12 -0
  50. package/public/icons/core/chevron-down.svg +12 -0
  51. package/public/icons/core/chevron-left.svg +12 -0
  52. package/public/icons/core/chevron-right.svg +12 -0
  53. package/public/icons/core/chevron-up.svg +12 -0
  54. package/public/icons/core/clock.svg +13 -0
  55. package/public/icons/core/close.svg +13 -0
  56. package/public/icons/core/copy.svg +13 -0
  57. package/public/icons/core/download.svg +14 -0
  58. package/public/icons/core/edit.svg +13 -0
  59. package/public/icons/core/error.svg +14 -0
  60. package/public/icons/core/external-link.svg +14 -0
  61. package/public/icons/core/eye-off.svg +15 -0
  62. package/public/icons/core/eye.svg +13 -0
  63. package/public/icons/core/filter.svg +12 -0
  64. package/public/icons/core/heart.svg +12 -0
  65. package/public/icons/core/help.svg +14 -0
  66. package/public/icons/core/home.svg +13 -0
  67. package/public/icons/core/info.svg +14 -0
  68. package/public/icons/core/loading.svg +12 -0
  69. package/public/icons/core/lock.svg +13 -0
  70. package/public/icons/core/mail.svg +13 -0
  71. package/public/icons/core/menu.svg +14 -0
  72. package/public/icons/core/message.svg +12 -0
  73. package/public/icons/core/minus.svg +12 -0
  74. package/public/icons/core/more-horizontal.svg +14 -0
  75. package/public/icons/core/pause.svg +13 -0
  76. package/public/icons/core/play.svg +12 -0
  77. package/public/icons/core/plus.svg +13 -0
  78. package/public/icons/core/refresh.svg +15 -0
  79. package/public/icons/core/save.svg +14 -0
  80. package/public/icons/core/search.svg +13 -0
  81. package/public/icons/core/settings.svg +13 -0
  82. package/public/icons/core/share.svg +14 -0
  83. package/public/icons/core/sort.svg +15 -0
  84. package/public/icons/core/star.svg +12 -0
  85. package/public/icons/core/success.svg +13 -0
  86. package/public/icons/core/trash.svg +16 -0
  87. package/public/icons/core/unlock.svg +13 -0
  88. package/public/icons/core/upload.svg +14 -0
  89. package/public/icons/core/user.svg +13 -0
  90. package/public/icons/core/users.svg +15 -0
  91. package/public/icons/core/warning.svg +14 -0
  92. package/public/icons/download.svg +4 -0
  93. package/public/icons/edit.svg +4 -0
  94. package/public/icons/menu.svg +4 -0
  95. package/public/icons/search.svg +4 -0
  96. package/public/theme.css +4179 -0
  97. package/public/themes/README.md +102 -0
  98. package/public/themes/boilerplate/theme.css +154 -0
  99. package/public/themes/boilerplate-dark/theme.css +171 -0
  100. package/public/themes/boilerplate-light/theme.css +171 -0
  101. package/public/themes/cupertino/theme.css +165 -0
  102. package/public/themes/cupertino-dark/theme.css +200 -0
  103. package/public/themes/cupertino-light/theme.css +227 -0
  104. package/public/themes/glass/theme.css +190 -0
  105. package/public/themes/glass-dark/theme.css +201 -0
  106. package/public/themes/glass-light/theme.css +229 -0
  107. package/public/themes/graphite/theme.css +155 -0
  108. package/public/themes/graphite-dark/theme.css +223 -0
  109. package/public/themes/graphite-light/theme.css +191 -0
  110. package/public/themes/press/theme.css +189 -0
  111. package/public/themes/press-dark/theme.css +199 -0
  112. package/public/themes/press-light/theme.css +235 -0
  113. package/public/themes/prism/theme.css +159 -0
  114. package/public/themes/prism-dark/theme.css +185 -0
  115. package/public/themes/prism-light/theme.css +188 -0
  116. package/public/themes/sketchbook/theme.css +152 -0
  117. package/public/themes/sketchbook-dark/theme.css +194 -0
  118. package/public/themes/sketchbook-light/theme.css +188 -0
  119. package/public/themes/terminal/theme.css +159 -0
  120. package/public/themes/terminal-dark/theme.css +229 -0
  121. package/public/themes/terminal-light/theme.css +152 -0
  122. package/scripts/README.md +70 -0
  123. package/scripts/icon-contract.json +67 -0
  124. package/scripts/icon-validator.js +205 -0
  125. package/scripts/prepare-dist.mjs +65 -0
  126. package/scripts/theme-a11y.js +415 -0
  127. package/scripts/theme-contract.json +171 -0
  128. package/scripts/theme-validator.js +674 -0
  129. package/scss/README.md +55 -0
  130. package/scss/_animations-utilities.scss +107 -0
  131. package/scss/_animations.scss +248 -0
  132. package/scss/_app-styles.scss +15 -0
  133. package/scss/_generator.scss +174 -0
  134. package/scss/_icons.scss +475 -0
  135. package/scss/_index.scss +17 -0
  136. package/scss/_layout.scss +597 -0
  137. package/scss/_mixins.scss +1036 -0
  138. package/scss/_system.scss +291 -0
  139. package/scss/_utilities.scss +377 -0
  140. package/scss/api.scss +61 -0
  141. package/scss/components/_accordion.scss +72 -0
  142. package/scss/components/_buttons.scss +171 -0
  143. package/scss/components/_copy-button.scss +69 -0
  144. package/scss/components/_data.scss +190 -0
  145. package/scss/components/_feedback.scss +197 -0
  146. package/scss/components/_forms.scss +272 -0
  147. package/scss/components/_index.scss +17 -0
  148. package/scss/components/_navigation.scss +186 -0
  149. package/scss/components/_overlay.scss +259 -0
  150. package/scss/components/_stepper.scss +159 -0
  151. package/scss/components/_tabs.scss +72 -0
  152. package/scss/core.scss +54 -0
  153. package/scss/examples/_theming.scss +107 -0
  154. package/scss/examples/_usage.scss +317 -0
  155. package/scss/main.scss +64 -0
  156. package/scss/recipes/README.md +110 -0
  157. package/scss/recipes/_bare-tags.scss +232 -0
  158. package/scss/recipes/_recipe-template.md +119 -0
  159. package/scss/recipes/combobox.md +509 -0
  160. package/scss/recipes/dialog.md +265 -0
  161. package/scss/recipes/print-to-pdf.md +263 -0
  162. package/scss/theme/README.md +67 -0
  163. package/scss/theme/_brand.scss +18 -0
  164. package/scss/theme/_colors-dark.scss +68 -0
  165. package/scss/theme/_colors-light.scss +70 -0
  166. package/scss/theme/_components.scss +94 -0
  167. package/scss/theme/_icons.scss +104 -0
  168. package/scss/theme/_index.scss +62 -0
  169. package/scss/theme/_shadows.scss +65 -0
  170. package/scss/theme/_shape.scss +13 -0
  171. package/scss/theme/_typography.scss +9 -0
  172. package/scss/theme/registry.json +447 -0
  173. package/scss/themes/boilerplate-dark.scss +212 -0
  174. package/scss/themes/boilerplate-light.scss +209 -0
  175. package/scss/themes/boilerplate.scss +181 -0
  176. package/scss/themes/cupertino-dark.scss +238 -0
  177. package/scss/themes/cupertino-light.scss +266 -0
  178. package/scss/themes/cupertino.scss +194 -0
  179. package/scss/themes/glass-dark.scss +238 -0
  180. package/scss/themes/glass-light.scss +266 -0
  181. package/scss/themes/glass.scss +220 -0
  182. package/scss/themes/graphite-dark.scss +260 -0
  183. package/scss/themes/graphite-light.scss +228 -0
  184. package/scss/themes/graphite.scss +182 -0
  185. package/scss/themes/press-dark.scss +237 -0
  186. package/scss/themes/press-light.scss +273 -0
  187. package/scss/themes/press.scss +241 -0
  188. package/scss/themes/prism-dark.scss +217 -0
  189. package/scss/themes/prism-light.scss +220 -0
  190. package/scss/themes/prism.scss +190 -0
  191. package/scss/themes/sketchbook-dark.scss +231 -0
  192. package/scss/themes/sketchbook-light.scss +231 -0
  193. package/scss/themes/sketchbook.scss +178 -0
  194. package/scss/themes/terminal-dark.scss +267 -0
  195. package/scss/themes/terminal-light.scss +175 -0
  196. package/scss/themes/terminal.scss +185 -0
  197. package/scss/tokens.scss +23 -0
  198. package/scss/utilities-only.scss +4 -0
package/ROADMAP.md ADDED
@@ -0,0 +1,714 @@
1
+ # css-is-awesome — Roadmap
2
+
3
+ A phased plan to turn the extracted SCSS system into a polished, Bootstrap-style distributable library. Each phase stands on its own and can ship independently.
4
+
5
+ ## Product architecture
6
+
7
+ **Strategic decision (2026-05-03):** the umbrella is split into THREE distinct products. css-is-awesome is the styling system — it does NOT ship React/JS components. See [`roadmap/product-architecture.md`](./roadmap/product-architecture.md) for the full rationale.
8
+
9
+ 1. **css-is-awesome** (this repo) — the styling system whose themes pass a typed contract; one file swaps the entire skin. Pure SCSS + CSS, no React.
10
+ 2. **Add-ons** — themes, icon packs, animation libraries, mixin extras. Drop-in single-file assets, no build step. The existing one-file `theme.css` model is the template.
11
+ 3. **Gremlin UI** — FUTURE separate npm package: a React component library that depends on css-is-awesome for theming. Picks up the components currently sitting in `src/components/`. Name TBD ("Gremlin UI" / "Components are Awesome" / "Gremlin Components").
12
+ 4. **Gremlin Boilerplate** — FUTURE Next.js starter that pre-wires css-is-awesome + Gremlin UI + auth + an opinionated app shell. Evolves from `boiler-project-ai`.
13
+
14
+ Gremlin UI and Gremlin Boilerplate are out of this repo's primary scope, but planning starts here so we don't paint ourselves into a corner.
15
+
16
+ ```
17
+ Gremlin Boilerplate ──► Gremlin UI ──► css-is-awesome ──► Add-ons
18
+ (Next.js app) (React lib) (this repo) (themes,
19
+ icon packs,
20
+ animations)
21
+ ```
22
+
23
+ Dependency direction is one-way: lower layers never know about higher ones.
24
+
25
+ ## Two views
26
+
27
+ - **This file (phases):** delivery milestones — what ships in v0.1, v0.2, v0.5, v1.0, etc.
28
+ - **[`roadmap/epics/`](./roadmap/epics/README.md):** thematic work slices with features + user stories + acceptance criteria.
29
+
30
+ User stories from any epic may ship across multiple phases. Epics don't gate phases; they just describe the work in depth.
31
+
32
+ ---
33
+
34
+ ## Phase 0 — Foundation (DONE)
35
+
36
+ - [x] Extract SCSS source from `boiler-project-ai`
37
+ - [x] Set up `package.json` with build scripts
38
+ - [x] README with install + usage
39
+ - [x] Initial commit + GitHub push
40
+
41
+ ---
42
+
43
+ ## Phase 1 — Clean & Stabilize (v0.2)
44
+
45
+ **Goal:** Fix existing issues, lock down the API surface, make the library safe to consume.
46
+
47
+ ### Bug fixes
48
+ - [x] Fix unquoted color-name warning in `scss/_generator.scss:21` (quote `$key` when interpolating)
49
+ - [x] Pick ONE theme-switch pattern: `[data-theme="dark"]` OR `.theme-dark` — deprecate the other
50
+ - [x] Audit `@use` paths for consumer portability (work with aliased imports)
51
+
52
+ ### Developer experience
53
+ - [x] Add `dist/` build output committed to releases (not git — via npm publish) — verified in tarball (`npm pack` smoke test)
54
+ - [x] Add `CHANGELOG.md` with semver discipline
55
+ - [x] Add `LICENSE` file (MIT)
56
+ - [x] Add `.editorconfig` for contribution consistency
57
+
58
+ ### Quality
59
+ - [x] Stylelint config + lint pass on all SCSS
60
+ - [x] `npm run lint` script
61
+ - [x] Verify compile output size (gzipped CSS target: <15 KB for core) — 2 KB gzipped
62
+
63
+ **Release:** `v0.2.0` — first "safe to use" version.
64
+
65
+ ---
66
+
67
+ ## Phase 2 — Bootstrap-Style Utility Classes (v0.3)
68
+
69
+ **Goal:** The big Bootstrap-parity lever. Give consumers drop-in utility classes so they don't need SCSS at all.
70
+
71
+ ### Utility CSS generation
72
+ - [x] New `scss/_utilities.scss` that emits utility classes from existing tokens (all `cia-` prefixed)
73
+ - [x] **Spacing:** `.cia-m-xs` through `.cia-m-4xl`, `.cia-mt/mr/mb/ml-*`, `.cia-mx/my-*`, same for padding + gap
74
+ - [x] **Typography:** `.cia-text-xs` through `.cia-text-6xl`, `.cia-font-light/normal/semibold/bold`, `.cia-text-primary/secondary/muted`, `.cia-leading-tight/normal/loose`
75
+ - [x] **Colors:** `.cia-bg-surface-*`, `.cia-text-*`, `.cia-border-*`, status variants
76
+ - [x] **Layout:** `.cia-flex`, `.cia-flex-center`, `.cia-flex-between`, `.cia-stack`, `.cia-grid`, `.cia-inline`
77
+ - [x] **Display:** `.cia-hidden`, `.cia-block`, `.cia-flex`, `.cia-grid`, `.cia-inline-*`
78
+ - [x] **Position:** `.cia-static`, `.cia-relative`, `.cia-absolute`, `.cia-fixed`, `.cia-sticky`
79
+ - [x] **Border/Radius:** `.cia-rounded-sm/md/lg/full`, `.cia-border`, `.cia-border-0`
80
+ - [x] **Shadow:** `.cia-shadow-sm/md/lg/xl`, `.cia-shadow-inner`, `.cia-shadow-none`
81
+ - [x] **Responsive variants:** `.cia-sm\:flex`, `.cia-md\:hidden`, etc. (included, `min-width` syntax; both directions supported via `m.media` / `m.media-down`)
82
+
83
+ ### Build outputs
84
+ - [x] `dist/css-is-awesome.css` — full system + utilities (10 KB gzip)
85
+ - [x] `dist/css-is-awesome.core.css` — tokens + resets only (2 KB gzip)
86
+ - [x] `dist/css-is-awesome.utilities.css` — utilities only (8 KB gzip)
87
+ - [x] All above as `.min.css` via Sass compressed mode
88
+
89
+ **Release:** `v0.3.0` — consumers can write `<div class="cia-flex-between cia-p-md cia-bg-surface-subtle cia-rounded-lg">` without touching SCSS.
90
+
91
+ ---
92
+
93
+ ## Phase 3 — Theming & Customization (v0.4)
94
+
95
+ **Goal:** Make it easy to override tokens without forking.
96
+
97
+ - [x] Documented override pattern: consumers set CSS custom properties at `:root` to remap any token
98
+ - [x] SCSS-level override pattern: `@use "css-is-awesome/scss/theme" with ($overrides...)`
99
+ - [x] Brand theming guide (replace `#3A5FCD` with your brand in 3 lines)
100
+ - [x] Multi-brand example: light/dark + brand A/brand B via `[data-theme="brand-a-light"]`
101
+ - [x] Runtime theme-switch JS snippet in docs (localStorage, `prefers-color-scheme` honor)
102
+ - [x] Export Figma Tokens JSON alongside SCSS (for design-tool sync)
103
+
104
+ **Release:** `v0.4.0` — fully themeable.
105
+
106
+ ---
107
+
108
+ ## Phase 4 — Documentation Site (v0.5)
109
+
110
+ **Goal:** A living docs site where people can see, copy, and steal.
111
+
112
+ **Decision (revised):** Next.js 15 + App Router + TypeScript. Static-exported (`output: "export"`) so it deploys to any static host. Replaced the original "plain static HTML" plan — dogfooding still intact (the site consumes our own CSS), but we get proper routing, component reuse, and TypeScript safety.
113
+
114
+ ### Template (DONE)
115
+ - [x] Ported Sketchbook sketch → `src/app/` (index, docs, examples, blog, about)
116
+ - [x] Favicon wired via `src/app/favicon.ico` (Next.js App Router convention)
117
+ - [x] Two-file contract preserved: `public/theme.css` (swappable tokens) + `src/app/globals.css` (base system)
118
+ - [x] Co-located SCSS: every `page.tsx` gets a sibling `page.scss`; every component gets its own `.scss`
119
+ - [x] `npm run dev` + `npm run build` scripts
120
+
121
+ ### App structure (DONE)
122
+ - [x] `src/app/` — routes: `/`, `/docs`, `/examples`, `/blog`, `/about`, `/themes`, `/compare`
123
+ - [x] `src/components/` — extracted components (see below)
124
+ - [x] `public/` — theme files, icon sprite
125
+ - [x] `scss/` — the design-system library (unchanged by this phase; separate concern)
126
+
127
+ ### Extracted components (DONE)
128
+ Shared chrome + reusable building blocks now live in `src/components/`:
129
+ - `SiteHeader` — docs header with nav + active state
130
+ - `ThemePicker` — live 6-theme swap widget
131
+ - `Button`, `Card`, `Icon`, `Seal`, `LogoMark` — atoms
132
+ - `Post`, `Principle`, `TimelineItem`, `StatChip` — data-driven repeating blocks
133
+ - `Example` (+ `.Preview` / `.Code` compound slots) — code + preview wrapper
134
+ - `DocsSidebar`, `Logo`, `DraftStamp` — structural
135
+
136
+ ### Content
137
+ - [x] Replace placeholder docs copy with real install/usage for the published `cia-` system — `/docs` intro now ships real Quick Start, three-tier story, utility-vs-mixin side-by-side, expanded "What next" links.
138
+ - [ ] Sections: Tokens (color/spacing/type grids — DONE), Utilities (searchable table — TODO), Mixins API (TODO), Migration from Bootstrap (started; needs polish).
139
+ - [x] Live color swatches, spacing visualizers, type scale preview — `/docs/tokens` reads `getComputedStyle` after mount and re-resolves on theme swap via `useThemeAttribute`.
140
+ - [x] Copy-to-clipboard code snippets — every `<Example.Code>` has a Copy button (CopyButton client island, secure-context fallback to execCommand).
141
+ - [ ] Deploy to the external host + link from README + `package.json` `homepage` (Pages workflow exists; live URL not yet linked from README).
142
+
143
+ ### New pages
144
+ - [x] **`/themes` gallery** — all 6 themes with live-swap preview + download per tile. Uses `ThemeTile` component. (Now at `/themes/gallery`; `/themes` is the editor.)
145
+ - [x] **`/compare` page** — honest three-column vs Tailwind vs Bootstrap with feature table and "where each wins" verdicts.
146
+ - [x] **`/compare` bundle-size table** — three-tier story (core / utilities / full) with gzipped KB landed in the 2026-05-07 refresh.
147
+ - [x] **`/docs` intro page** — real Quick Start, three-tier story, utility-vs-mixin side-by-side, expanded "What next" links.
148
+ - [x] **`/showcase` page** — shipped with 4 placeholder example blocks (marketing / blog / dashboard / 404). Content rework tracked in Phase 5.5 Step 1.5.
149
+
150
+ **Release:** `v0.5.0` — docs are the pitch.
151
+
152
+ ---
153
+
154
+ ## Phase 4.5 — Theme System (v0.5 / v0.6 crossover)
155
+
156
+ **Goal:** Themes as one-file add-ons. User downloads a `theme.css`, replaces the one they have, everything reskins.
157
+
158
+ **Model locked in:**
159
+ - Theme = a single CSS file that declares CSS custom properties on `:root`.
160
+ - Tokens only — no component CSS, no new rules. Base system stays clean.
161
+ - Install = copy over `theme.css`. No build step, no tool required.
162
+ - Discovery = a Themes gallery page on the docs site with live `<link>` swapping.
163
+
164
+ ### Work
165
+ - [x] Lock the **token API contract** — documented in `docs/theme.css` header as the authoritative slot list every theme declares. Slots grouped: surfaces · ink · lines · primary · seal · accent · code · type · radius · shadow · blur · glow · motion.
166
+ - [x] Decide **sizing scale** — LOCKED on numbered scale as the source of truth, with t-shirt aliases layered on top (settled out of session 2026-05-04). Both `m.space(4)` and `m.space(md)` resolve identically.
167
+ - [ ] Pull Sketchbook's docs-specific flourishes (construction lines, seal, draft stamp, brush rules) out of any future "base system" port — they belong in docs chrome only.
168
+ - [x] Ship 5 additional themes to prove the swap:
169
+ - [x] Press (editorial newsprint)
170
+ - [x] Graphite (dark aluminum) — the dark-mode proof
171
+ - [x] Glass (visionOS glassmorphism) — exercises `--blur-*` + `--paper-glass`
172
+ - [x] Cupertino (macOS native)
173
+ - [x] Terminal (CRT phosphor) — mono-only stress test
174
+ - [x] Build the `/themes` gallery page — live preview + one-click download per tile. (Moved to `/themes/gallery` when `/themes` became the editor.)
175
+ - [x] Write `CONTRIBUTING-THEMES.md` for community submissions later.
176
+
177
+ ### Animation system
178
+ - [x] Keyframe library in `scss/_animations.scss` (fade/slide/scale/pop/pulse/shimmer/spin/wiggle)
179
+ - [x] `animate()` mixin with name/speed/delay/iteration/fill/timing params
180
+ - [x] `animate-on()` interaction helper (hover/focus · lift/glow/press/fade)
181
+ - [x] `.cia-anim-*` and `.cia-hover-*` utility classes emitted from the same source
182
+ - [x] Theme-driven — reads `--duration-fast/normal/slow` and `--ease` so each theme controls feel
183
+ - [x] `prefers-reduced-motion` respected globally
184
+ - [x] Docs page with live animation preview grid (`/docs/animation` — 12 keyframes as cards, hover/click replay, theme-swap retimes everything in place)
185
+
186
+ ### Theme icon packs
187
+ - [x] `.cia-icon` component in base `styles.css` — `currentColor` + font-size sizing
188
+ - [x] Seed sprite at `docs/icons.svg` (8 icons: edit, download, check, close, search, menu, arrow-right, chevron-down)
189
+ - [x] Per-theme `icons.svg` slot documented — drop a replacement sprite in the theme folder to swap the pack
190
+ - [x] **Vendor Lucide as default `core` pack** — 49 glyphs at `public/icons/core/`, ISC + Feather-derived MIT, with `LICENSE-third-party` notice. Vendored via `scripts/vendor-lucide-core.mjs` from `lucide-static`. See [`roadmap/icons-proposal.md`](./roadmap/icons-proposal.md) for the full glyph list.
191
+ - [x] **Icon pack switching mechanism** — per-theme override via `--cia-icon-<name>` CSS custom property (resolution: per-theme override → core pack → 404). Mixin signatures (`m.svg(name)`) unchanged. Documented in `CONTRACT.md` "Icons contract" + `AGENTS.md` "Icons" section. Drop-in workflow: just `cp my.svg public/icons/core/` and call `m.svg(my)` — no JSON edit required for non-contract glyphs. New `npm run validate-icons` enforces the contract pack.
192
+ - [ ] Ship icon packs for Press, Graphite, Glass, Cupertino, Terminal
193
+ - [ ] Icon index page listing every symbol by name
194
+
195
+ ### Themes editor
196
+ - [x] **Theme editor page** at `/themes` — browser-only theme builder; live preview, contract-slot controls (color pickers, length sliders, number/string inputs), Blob download of `theme.css` with both `[data-theme="<name>-light"]` and `[data-theme="<name>-dark"]` blocks (validator-conformant), per-family override persistence in `localStorage`. Category tabs (Color / Layout / Type / Motion), sub-page pills under Color (Foundation / Components / Status), pagination at >4 groups per page, modified-state badge, name field with sanitizer. The `/themes/gallery` page hosts the 6-tile theme gallery.
197
+ - [x] **Theme editor import** — upload a previously-downloaded `theme.css` to round-trip back into the editor and keep iterating (uncommitted on `main` 2026-05-12; `src/lib/theme-parse.ts` + ThemeEditorDock changes).
198
+
199
+ ### Boilerplate theme
200
+ - [x] **`public/themes/boilerplate/theme.css`** — neutral starter (light + dark in one file, full 123-token contract). Slate-leaning grays + clean blue accent (`#2563eb` light / `#3b82f6` dark), system UI sans-serif, ui-monospace, subtle shadows, standard 4/6/8/12 px radii. Bundled into `public/theme.css`, selectable in `<ThemeSelect>` / `<ThemePicker>` / `/themes/gallery`. Gating dependency for the v0.7 publish.
201
+
202
+ **Release:** `v0.5.x` — theme system live, 6 themes shipped, animations + icon-pack mechanism in place, themes editor + boilerplate theme available.
203
+
204
+ ---
205
+
206
+ ## Phase 5 — Distribution & CDN (v0.7)
207
+
208
+ **Goal:** Cut the first real npm release as a styling-system-only package. css-is-awesome ships SCSS + CSS — no React, no TS modules. Components move out (see Phase 8).
209
+
210
+ ### Pre-publish (in order)
211
+ - [x] **Revert React packaging from `feat/v0.7-port-fixes`** — done in commit `53cbeda`. The React bundle, tsup config, and component publishing exports are stripped. Boilerplate copies its components from `src/components/` shadcn-style.
212
+ - [x] **Fix `_app-styles.scss` leak** — already fixed in `d986ea7` weeks ago. Verified by Agent X (no docs-only selectors in any of the four `dist/*.css` builds).
213
+ - [x] **`npm pack` smoke test** — Agent X verified the tarball: 162 kB packed / 1.0 MB unpacked / 125 files. No `dist/components/`, no `src/`, no tests, no `.next/` or `out/`. Top-level layout: `dist/`, `scss/`, `public/` (now includes `icons/`), `figma-tokens/`, both `LICENSE` files, key `.md` docs.
214
+ - [x] **Hand-design boilerplate theme** at `public/themes/boilerplate/theme.css` (tracked in Phase 4.5 — done).
215
+ - [x] **Add `public/icons` and `LICENSE-third-party` to `package.json` `files`** so the new Lucide pack ships in the tarball.
216
+ - [x] **`npm publish` 0.7.0+** — the package shipped publicly via semantic-release. Current published version is **0.8.2** (panel R7 bug-fix patch, 2026-05-21) after the v0.8 mixin-first reframe (BREAKING) and v0.8.1 animations split.
217
+ - [x] **Boilerplate consumer install** — boiler-project-ai is on `feature/v2.5-wave8-bare-tags` consuming `css-is-awesome@0.8.2` via `file:` workspace dep. Wave 8 atom conversion wrapped on the feature branch (2026-05-21). End-to-end mixin API + bare-tags Tier-2 pattern verified.
218
+
219
+ ### Follow-on
220
+ - [x] Verify jsDelivr + unpkg auto-serve the `dist/` files — README shows `cdn.jsdelivr.net/npm/css-is-awesome@0.8/...` examples for both theme files + bundle.
221
+ - [x] README "CDN" section with exact `<link>` tag — shipped.
222
+ - [ ] SRI hashes for security-conscious users
223
+ - [ ] **CDN review before v1.0** — is jsDelivr still the right call, or should we move to a self-hosted edge or alternate CDN? Audit uptime, cache hit rate, supply-chain posture, tracking concerns; decide stay or switch (see Epic 5 Feature 5.14 US-5.14.4).
224
+ - [x] **AI-agent instruction files** — `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `llm.txt` all shipped at package root.
225
+ - [ ] GitHub Release with bundled zip download (for non-npm users)
226
+ - [x] `package.json` `exports` field for correct module resolution — shipped.
227
+
228
+ **Released through 0.8.2** (2026-05-21). The mixin-first v0.8 reframe (BREAKING) shipped, followed by 0.8.1 animations split + 5 new mixins, then 0.8.2 panel R7 bug-fix patch. The 27-tool MCP server (`@cia/mcp-server`) shipped alongside (2026-05-22). v1.0.0 is reserved for production-stability sign-off (Phase 6+).
229
+
230
+ ---
231
+
232
+ ## Phase 5.5 — Site polish & dogfood pass (v0.7.x)
233
+
234
+ **Goal:** The docs site is the system's storefront — make it visibly
235
+ practice what the library preaches. Two-step plan: clean up site
236
+ issues first, then convert page-level styles from raw token consumers
237
+ to mixin-API consumers.
238
+
239
+ Full audit punch list lives in
240
+ [`roadmap/site-audit-2026-05-13.md`](./roadmap/site-audit-2026-05-13.md).
241
+
242
+ ### Step 1 — Style pass (style-first, before any dogfood rewrites)
243
+ - [ ] **Dead links** — 7 `href="#"` blog tiles + 4 in `/showcase` +
244
+ footer links in `/examples`. Either real targets, disabled state,
245
+ or remove. Demo `href="#"` inside `Example` blocks → `<button>`.
246
+ - [ ] **Add `<main>` landmark** to docs layout and any other route
247
+ missing it (landing, about, blog, compare, showcase, examples,
248
+ themes).
249
+ - [ ] **Focus styles for nav anchors** in `/themes` sidebar — global
250
+ rule only targets `button`.
251
+ - [ ] **Hardcoded hex fallbacks** in `var()` defaults — Logo,
252
+ ThemeEditorDock (TSX + SCSS + rows.tsx), ThemePicker. Decide
253
+ policy: neutral fallback tokens vs strip fallbacks entirely.
254
+ - [ ] **Version display** — three different versions visible across
255
+ landing / about / showcase (`v0.1` × 2, `v0.5` × 1). Pick a single
256
+ source.
257
+ - [ ] **Per-route metadata** — every route exports its own
258
+ `metadata` so browser tab + social cards are not all "CSS is
259
+ Awesome".
260
+
261
+ ### Step 1.5 — Storefront content rework
262
+
263
+ `/showcase`, `/blog`, and `/about` currently render placeholder /
264
+ out-of-date copy that contradicts the rest of the site. Fix the
265
+ content before doing any CSS work on these files so the dogfood
266
+ pass doesn't restyle copy that's about to be replaced.
267
+
268
+ **`/blog`** — All 7 posts are fiction with `href="#"`. Dates run
269
+ Feb–Apr 2026 and excerpts read like real posts that don't exist.
270
+ Decide:
271
+ - [ ] **Path A — Ship a subset for real.** Pick 2-3 of the 7 drafted
272
+ topics ("Why the overflow stays", "Five voices, one system",
273
+ "Planning a CLI and an MCP server" are the strongest hooks) and
274
+ author real posts at real routes (`/blog/[slug]`).
275
+ - [ ] **Path B — Single placeholder.** Replace the listing with a
276
+ single hero + a "first post coming Q3" panel until there are
277
+ posts to ship. Removes 7 dead links in one stroke.
278
+
279
+ **`/about`** — Content is mostly authentic but factually stale:
280
+ - [ ] Timeline says **"v0.1.0 on npm in 2025"** — never happened;
281
+ the npm publish is still gated (Phase 5). Update to reflect the
282
+ actual release history once 0.7.0 publishes.
283
+ - [ ] "**Five voices, one system**" + "Sketchbook arrives later in
284
+ the year" — there are now 8 theme families (Sketchbook, Press,
285
+ Graphite, Glass, Cupertino, Terminal, Boilerplate, Prism),
286
+ and Sketchbook shipped. Update theme count + remove the "later in
287
+ the year" framing.
288
+ - [ ] `<Seal>Approved · v0.1</Seal>` at the bottom — version drift
289
+ (already tracked in Step 1, dedupe).
290
+ - [ ] Light content pass on the principles + "what it isn't"
291
+ sections — verify nothing else contradicts the current product
292
+ state.
293
+
294
+ **`/showcase`** — 4 example blocks, all with placeholder CTAs and
295
+ stale version copy:
296
+ - [ ] **Marketing hero block** — "v1.0 shipping soon" copy contradicts
297
+ the actual 0.7 trajectory; `<Seal>New · v0.5</Seal>` is wrong.
298
+ Fix copy + Seal to track real version.
299
+ - [ ] **Real CTAs** — `Get started` → `/docs/install`, `Read the
300
+ docs` → `/docs`, `Take me home` already correct, `Report broken
301
+ link` → GitHub issues URL.
302
+ - [ ] **Expand the page** — currently 4 blocks (marketing / blog /
303
+ dashboard / 404). Decide whether to add pricing, app-shell,
304
+ signup, docs-page-in-context, or empty-state to make the "see
305
+ it work in production" pitch land harder.
306
+ - [ ] **Per-block theme swap** — currently the whole site reskins;
307
+ showcase would benefit from a "lock this block to theme X" toggle
308
+ so visitors can A/B two themes side-by-side without leaving the
309
+ page. Stretch goal.
310
+
311
+ ### Step 2 — Dogfood conversion (the structural gap)
312
+ - [ ] **Audit baseline** — count `var(--*)` and `font-family:` /
313
+ `font-size:` raw declarations across `src/app/**/page.module.scss`.
314
+ This is the target metric for the conversion.
315
+ - [ ] **Convert page modules** to consume the mixin API:
316
+ `@use 'mixins' as m;` + `@include m.type(...)`, `m.space(...)`,
317
+ `m.color(...)`, `m.font-size(...)`, etc. One page at a time;
318
+ visual-regress after each.
319
+ - [ ] **Replace raw layout with `cia-*` utilities** where the
320
+ Tailwind-style class is clearer than a one-off rule.
321
+ - [ ] **Keep the artisanal chrome** — Sketchbook's paper/grain/seal
322
+ flourishes stay handcrafted (they're an intentional counter-example),
323
+ but the *typography + spacing scale* underneath them should come
324
+ from the system.
325
+
326
+ ### Step 3 — Coverage + cross-theme + Lighthouse
327
+ - [ ] **Component gallery page** — every component in
328
+ `src/components/` rendered at least once (currently `Divider`,
329
+ `List`, `MenuItem`, `Pagination`, `Popover`, `Radio`, `Select`,
330
+ `Slider`, `Switch`, `Textarea`, `Tooltip` aren't shown on the
331
+ site).
332
+ - [ ] **Cross-theme spot-check** — every page in all 8 themes ×
333
+ light/dark. Catches hex fallbacks the static audit missed.
334
+ - [ ] **Lighthouse + axe pass** — automated a11y + perf baseline,
335
+ fix what surfaces.
336
+
337
+ **Release:** `v0.7.x` patch range. No library-API change; this is
338
+ docs-site quality only.
339
+
340
+ ---
341
+
342
+ ## Phase 5.95 — Post-1.0 hardening (2026-08-17 → 08-18)
343
+
344
+ **v1.0.0 was cut 2026-08-17** (`253610a`, tagged) at 24 of 42 stories, deliberately: no external users yet, so the SemVer commitment cost nothing. **Not published to npm** — the `@1` CDN URLs will 404 until it is.
345
+
346
+ What the cut surfaced, in the order it hurt:
347
+
348
+ - [x] **Packaging break — both documented SCSS imports failed on a clean install.** `@use 'css-is-awesome'` and `@use 'css-is-awesome/api'` errored for anyone installing the package; Sass does not read `package.json` `"exports"`. Fixed with root-level forwarding shims (`api.scss`, `_index.scss`). Only the deep paths ever worked, which is why every in-repo check and the Boiler showcase stayed green.
349
+ - [x] **Nothing tested the published artifact.** Added `validate-package` (packs → installs → compiles all ten documented specifiers) and wired it into CI, alongside `validate-icons` and `validate-api`, which existed but had never been executed by the workflow.
350
+ - [x] **A11y validator was blind to `light-dark()`** — 7 themes scored 0/17 pairs, 119 silent skips, green checkmark. Now evaluates both schemes and keeps the worse row.
351
+ - [x] **`prism` shipped but was missing from every theme picker** (4 hand-maintained lists). Added, plus a test asserting all 8 families are offered.
352
+ - [x] **Blog was 7 dead stubs.** Replaced with a real markdown-driven `/blog` + `/blog/[slug]` and 7 posts written from the commit history.
353
+ - [x] **Visual baselines stale since 2026-05-03**, keeping CI red. Keyed by `{platform}`, win32 set regenerated. **Linux set still needs one manual run of the "Update visual snapshots" workflow.**
354
+ - [x] Release friction: `pack:consumer` collapses the three-step pack → re-pin → install dance into one command.
355
+
356
+ **Still open:** publish to npm; run the snapshot workflow once to green CI; the 18 remaining v1.0 stories (Playground is 0/7).
357
+
358
+ ---
359
+
360
+ ## Phase 5.9 — v1.0 Lockdown (recipes-first)
361
+
362
+ **Locked 2026-05-23** after long architecture synthesis (panel review + Gemini external read + Jerry instinct refinement).
363
+
364
+ **Goal:** Ship v1.0 as a humans-first design system whose AI-friendliness is the bonus. Five tracks, ~42 user stories, ~18-26 working days.
365
+
366
+ ### Priority ladder (the v1.0 pitch order)
367
+
368
+ 1. **Users first** — easy to learn, no framework lock-in, no maintenance treadmill
369
+ 2. **Tokens** — one source of truth, swap one value = whole app shifts
370
+ 3. **Theme editor on website** — visual customization for all 123 tokens
371
+ 4. **Mixin-first speed** — `@include cia.btn(primary)` on any selector
372
+ 5. **AI second (huge bonus)** — recipes book + MCP server make cia uniquely AI-composable
373
+
374
+ ### The 5 epics
375
+
376
+ Full backlog: [`roadmap/epics/v1-0/README.md`](./roadmap/epics/v1-0/README.md).
377
+
378
+ | # | Epic | Mission | Effort | Stories |
379
+ |---|---|---|---|---|
380
+ | [01](./roadmap/epics/v1-0/EPIC-01-recipes-book.md) | **Recipes Book** | Recipe format + first 5 recipes (dialog, combobox, datepicker, data-table, command-palette). MCP exposes them. | ~5-7 days | 13 |
381
+ | [02](./roadmap/epics/v1-0/EPIC-02-theme-editor-polish.md) | **Theme Editor Polish** | Download `.scss`/`.css`, share URL, inline contrast validator, reset/diff. | ~3-4 days | 9 |
382
+ | [03](./roadmap/epics/v1-0/EPIC-03-migration-on-ramp.md) | **Migration On-Ramp** | `npx cia migrate` from Tailwind config + Bootstrap variables. | ~3-5 days | 6 |
383
+ | [04](./roadmap/epics/v1-0/EPIC-04-playground.md) | **Playground** | `/playground` page with in-browser SCSS compile + theme picker + share URL. | ~4-6 days | 7 |
384
+ | [05](./roadmap/epics/v1-0/EPIC-05-bug-fixes-mcp-polish.md) | **Bug Fixes + MCP Polish** | Round 8 audit cleanup + MCP tests + `/docs/composition` page. | ~3-4 days | 7 |
385
+
386
+ ### What is KILLED at v1.0 lock
387
+
388
+ - ❌ `@cia/react` as a separate npm component library Jerry maintains forever
389
+ - ❌ shadcn-style component ejection CLI for cia
390
+ - ❌ `@cia/a11y` as cia-original JS shims (deferred → `@cia/a11y-recipes` post-v1.0)
391
+ - ❌ Component library as the v1.0 selling point — recipes ARE the deliverable
392
+ - ❌ VS Code extension at v1.0 (deferred to v1.5; playground covers the demo need)
393
+
394
+ ### What is DEFERRED to post-v1.0
395
+
396
+ See [`roadmap/epics/v1-0/post-v1-ideas.md`](./roadmap/epics/v1-0/post-v1-ideas.md). Highlights: VS Code extension (v1.5), Recipes Maker, `@cia/a11y-recipes`, `npm create cia` wizard, framework recipe packs (`@cia/angular`, etc.), Figma plugin, RTL audit, theme marketplace.
397
+
398
+ ### 8-week pre-release sprint — the GOOD → GREAT path
399
+
400
+ **Locked 2026-05-26 (revised same day).** The architecture is GREAT; the shipped surface needs to catch up. This 8-week sprint closes that gap before public launch. Each week ships as its own feature branch + PR.
401
+
402
+ | Wk | Ship | Why this week |
403
+ |---|---|---|
404
+ | 1 | `npx cia migrate tailwind` + `npx cia migrate bootstrap` (Epic 03, 6 stories) | Single biggest adoption hack. Every "should I switch?" stops at "I have a tuned Tailwind config" until this ships. |
405
+ | 2 | 5 hard recipes: combobox, datepicker, data-table, command-palette, toast (Epic 01 F1.2 + v1.1 toast) | Catalog jumps 1 → 6. These are the hard ones shadcn nails. Closes the "thin catalog" perception. |
406
+ | 3 | `/playground` page (Epic 04, 7 stories) | Every Tailwind launch tweet links Tailwind Play. cia has no equivalent. Every recipe page links "Try it →". |
407
+ | 4 | Theme editor inline contrast validator + 5 more recipes (breadcrumb, pagination, form-validation, file-upload, page-header) | Visible WCAG win. Catalog at ~11 recipes. (`/docs/composition` standalone deferred — its story lives on the YouTube channel after launch.) |
408
+ | 5 | First 3 blog posts (pivot narratives) | Gremlin UI → recipes pivot, `@layer` → `:where()` pivot, Zero-JS positioning real-talk. Honest decision storytelling validates the architecture publicly. |
409
+ | 6 | **boilerplate-slim Angular set (34) + HTML set (34) complete** (separate repo) | Multi-framework proof. shadcn comparison flips ("React-only" → "React + Angular + HTML at v1.0"). |
410
+ | 7 | `/showcase` rebuild + `/docs/migrate-from-shadcn` guide | The shadcn graduate is cia's named target — they need a specific bridge, not generic docs. Showcase rebuild demonstrates cia + boilerplate-slim in real layouts. |
411
+ | 8 | Boiler-project-ai relaunch + invite 5-10 external testers + launch post + first 3 community PRs welcomed | First real consumer + early community signals + public launch. |
412
+
413
+ ### Definition of "the best out there" after this sprint
414
+
415
+ - [ ] Migration CLI handles real Tailwind + Bootstrap configs end-to-end
416
+ - [ ] 11+ recipes shipped across overlay / input / data / navigation / feedback
417
+ - [ ] `/playground` functional in-browser; every recipe page links to a starter URL
418
+ - [ ] Inline contrast validator runs live in the theme editor
419
+ - [ ] First 3 blog posts published with citations + dated decision receipts
420
+ - [ ] boilerplate-slim ships React + Angular + HTML (34 each)
421
+ - [ ] `/showcase` rebuilt + `/docs/migrate-from-shadcn` guide published
422
+ - [ ] Boiler dogfoods cia + ≥5 external testers have built something real
423
+ - [ ] Launch post on Bluesky / X / dev.to / Substack
424
+
425
+ **Skipping earlier weeks breaks the chain.** Migration first because it unlocks evaluation. Recipes second because they're day-one deliverable. Playground third because it's the demo surface. Composition + validator fourth because they close Gemini's critique. Blog posts fifth because they validate the architecture in public. boilerplate-slim multi-framework sixth because it's the breadth signal. Showcase + migrate-from-shadcn seventh because they're the conversion bridge. Launch eighth because by then we have something defensible.
426
+
427
+ ### The two-product architecture (separate repos)
428
+
429
+ cia's umbrella decomposes into TWO products with a one-way dependency:
430
+
431
+ | | **css-is-awesome** (cia) | **boilerplate-slim** |
432
+ |---|---|---|
433
+ | What | Styling foundation: tokens + mixins + themes + recipes + MCP | 34 components × 3 frameworks (React + Angular + HTML) |
434
+ | Zero JS in npm package | ✅ Hard rule | ❌ Ships JS (consumer-facing components) |
435
+ | Standalone use | ✅ Yes | ❌ Requires cia |
436
+ | Repo | `Jerry2d3d/css-is-awesome` | `Jerry2d3d/boilerplate-slim` (separate) |
437
+ | Semver | Independent | Independent, pins to cia |
438
+
439
+ Never fold boilerplate-slim into cia npm. Never make cia depend on boilerplate-slim. Update each on its own cadence.
440
+
441
+ ### Wishlist — open ideas
442
+
443
+ Open list of ideas that could make cia better, captured in [`WISHLIST.md`](./WISHLIST.md). Seeded entries (2026-05-26): **Figma → MCP → Code** (designer-to-code loop, HTML output target), **HTML → PDF** (standalone tool wrapping `@media print` + headless browser). These are seeds, not committed work — promote to an epic when they earn their weight.
444
+
445
+ ### Definition of done
446
+
447
+ - All 5 epic DODs met (42 stories shipped or punted)
448
+ - Tarball under 250 KB packed
449
+ - Zero JS in npm `files` manifest (CLI in `bin/` allowed)
450
+ - `validate-themes` passes FAIL-by-default across 8 themes
451
+ - `validate-recipes` passes in CI
452
+ - README, llm.txt, AGENTS.md, CHANGELOG, MIGRATION updated
453
+ - semantic-release publishes `1.0.0` cleanly
454
+
455
+ **Release:** `v1.0.0` — the recipes-first reframe.
456
+
457
+ ---
458
+
459
+ ## Phase 6 — Post-v1.0 sequence (v1.1 → v2.0)
460
+
461
+ **Locked 2026-05-23** alongside Phase 5.9. Full epic + feature + user-story backlog at [`roadmap/epics/`](./roadmap/epics/README.md).
462
+
463
+ | Release | Theme | Epic folder | Stories | Effort |
464
+ |---|---|---|---|---|
465
+ | **v1.1** | Recipes momentum (7 more recipes, install wizard, @cia/a11y-recipes add-on, @cia/react codegen POC) | [v1-1](./roadmap/epics/v1-1/README.md) | 43 | ~25-35 days |
466
+ | **v1.2** | Coverage (RTL audit, form-validation recipes, i18n recipes, print recipe, MUI + Chakra migration) | [v1-2](./roadmap/epics/v1-2/README.md) | 32 | ~16-22 days |
467
+ | **v1.3** | Ecosystem (Figma plugin, theme marketplace, DTCG migration CLI, @cia/angular) | [v1-3](./roadmap/epics/v1-3/README.md) | 34 | ~28-35 days |
468
+ | v1.4 | *Reserved — scoped based on v1.1-v1.3 community feedback* | — | — | — |
469
+ | **v1.5** | IDE integration (VS Code extension) | [v1-5](./roadmap/epics/v1-5/README.md) | 15 | ~10 days |
470
+ | **v2.0** | Visual builder (Recipes Maker — Jerry's idea, may never ship) | [v2-0](./roadmap/epics/v2-0/README.md) | 18 | ~15-20 days |
471
+
472
+ **Total post-v1.0 planned stories:** 142. **Total estimated effort:** ~94-122 working days.
473
+
474
+ The original Phase 6 ("Ecosystem v1.1+") below describes legacy items some of which have shipped (MCP server, CI, semantic-release, badges) and others (TypeScript token defs, PostCSS plugin, starter templates) which are now absorbed into post-v1.0 epics or deferred. Preserved for history:
475
+
476
+ ---
477
+
478
+ ### Phase 6 (legacy — partially shipped, partially superseded)
479
+
480
+ **Goal:** Solidify as a real project.
481
+
482
+ - [x] **MCP server** (shipped 2026-05-22) — 30 tools across 8 resource families (themes / mixins / functions / tokens / animations / components / recipes / docs) + `assemble_prompt` + `resolve_size`. Any MCP-aware client (Claude Code, Cursor, Aider, Gemini, Copilot) can discover the entire library surface without grep-walking. `mcp/server.cjs` + `bin: css-is-awesome-mcp`. See README "MCP server" section.
483
+ - [x] GitHub Action: CI (build + lint), Release (semver + npm publish + changelog) — semantic-release wired up since v0.7.
484
+ - [x] Badge suite in README (npm version, license, semantic-release) — shipped.
485
+ - [x] Contribution guide + issue templates — `CONTRIBUTING.md` + `CONTRIBUTING-THEMES.md` shipped.
486
+ - [ ] TypeScript token definitions (`tokens.d.ts`) — type-safe token access from JS
487
+ - [ ] PostCSS plugin for tree-shaking unused utilities
488
+ - [ ] Starter templates: plain HTML, Vite, Next.js, Astro
489
+ - [ ] Storybook or Ladle instance — lives in Gremlin UI's repo, not here (see Phase 8).
490
+
491
+ ---
492
+
493
+ ## Phase 7 — Differentiators (post-v1.0)
494
+
495
+ **Goal:** Move from "another design system" to "the obvious choice for SCSS-first teams who want zero-JS theming." Items from the Gemini critique that widen the moat once the foundations are stable.
496
+
497
+ - [ ] **Zero-JS interactive components** — tabs, accordion, modal, popover, tooltip built on `:has()`, the popover API, and `@container`. Biggest moat vs shadcn — they need a runtime, we don't.
498
+ - [x] **A11y linter inside `theme-validator.js`** — WCAG 2.2 AA contrast checks on 17 token pairs per theme. **FAIL-by-default as of v0.7** (commit `4e1bbf1`, 2026-05-11) after triaging every theme; zero FAILs across all 22 theme blocks. `--allow-a11y-fail` opts out; `--strict` is retained as a no-op alias for backwards compat. `--border-default` is treated as decorative (informational only) per WCAG 2.2 SC 1.4.11.
499
+ - [ ] **SCSS↔TS token bridge** — generate `tokens.d.ts` from the contract so consumers get type-safe token access in JS/TS.
500
+ - [ ] **Intrinsic layout mixins** — stack/cluster/switcher (Every Layout patterns) as first-class mixins so consumers stop hand-rolling flex utilities.
501
+ - [ ] **Tailwind→Awesome migration CLI** — parses Tailwind class strings in a project and suggests `cia-*` utility or mixin equivalents; lowest-friction path for migrants.
502
+ - [ ] **Component depth audit** — catalog gaps vs Bootstrap (modal, toast, popover, tooltip, accordion, breadcrumb, pagination, badge, avatar, dropdown, offcanvas) and prioritize zero-JS implementations.
503
+
504
+ ---
505
+
506
+ ## Phase 8 — Companion products (post-1.0) — REVISED 2026-05-23
507
+
508
+ **Original plan (Gremlin UI as a sister React component library Jerry maintains) was REPLACED 2026-05-23** after architecture synthesis. The decision:
509
+
510
+ - **No separate React component library to maintain.** "I don't want to keep up with a component library" — Jerry, 2026-05-23.
511
+ - **boiler-project-ai becomes a SHOWCASE / reference implementation**, NOT a published @cia/react npm package. It dogfoods cia recipes and proves the pattern. May ship publicly later as a consumer-grade React kit, but NOT the cia product.
512
+ - **Recipes book (Phase 5.9 Epic 01) replaces the React component library** as the v1.0 deliverable.
513
+
514
+ ### Showcase: boiler-project-ai (separate repo, Jerry's)
515
+ - [ ] Rebuild boiler on top of v0.8.2+ cia, consuming via `file:` or `npm install`
516
+ - [ ] Eat cia recipes — every boiler component built from a published recipe
517
+ - [ ] Public README positions it as "the reference cia app, not a component library"
518
+ - [ ] Possible future release as `@jerry2d3d/cia-boiler` or similar Jerry-namespaced package; out of cia repo scope
519
+
520
+ ### Framework recipe packs (deferred to post-v1.0 — see [post-v1-ideas.md](./roadmap/epics/v1-0/post-v1-ideas.md))
521
+ - `@cia/react` — trigger: v1.1 IF generated-from-recipes proves viable
522
+ - `@cia/angular` — Jerry's stated next-framework target after `@cia/react`
523
+ - `@cia/vue`, `@cia/svelte` — lowest priority unless community demand surfaces
524
+
525
+ ### Original Gremlin UI / Gremlin Boilerplate plan (ARCHIVED)
526
+ Naming "Gremlin UI" / "Gremlin Components" / "Companion Boilerplate" — all retired. The Phase 5.9 recipes-first architecture means cia ships ONE thing (the styling engine + recipes), not three coupled products.
527
+
528
+ ---
529
+
530
+ ## Stretch / Future
531
+
532
+ - [ ] Tailwind preset — expose tokens as a Tailwind config for dual-audience support
533
+ - [ ] Figma library companion (auto-synced with tokens)
534
+ - [ ] Animation/motion preset expansion (keyframe library)
535
+ - [ ] Print stylesheet preset
536
+ - [ ] RTL (right-to-left) support
537
+
538
+ ---
539
+
540
+ ## Open Questions
541
+
542
+ 1. ~~**Utility naming:** stay close to Bootstrap (`.p-3`) or Tailwind-like (`.p-md`)?~~ **Decided:** Tailwind-style (`.cia-p-md`) with `cia-` prefix.
543
+ 2. ~~**Namespace:** should utilities be prefixed?~~ **Decided:** yes, `cia-` on everything.
544
+ 3. **Default CSS output:** include utilities by default or opt-in? Still open.
545
+ 4. **Browser support target:** modern evergreen only, or include a legacy build? Still open.
546
+ 5. **Sizing scale:** refactor `xs/sm/md/lg/xl/2xl/3xl/4xl` → numbered `1–9` with aliases? **Pending — blocks the theme token contract.**
547
+
548
+ ---
549
+
550
+ ## What's next (decision order)
551
+
552
+ Items 1-13, 15, 16, the a11y linter triage, and the theme-editor import round-trip all shipped before 2026-05-12. Status as of 2026-05-12:
553
+
554
+ 1. ~~Lock theme token API contract~~ — done.
555
+ 2. ~~Wire `/themes` gallery page~~ — done. (Now `/themes/gallery`; `/themes` is the editor.)
556
+ 3. ~~Build `/compare` page~~ — done. (Refreshed 2026-05-07 with editor / icons / animations / bundle-tier rows.)
557
+ 4. ~~Revert React packaging~~ — done.
558
+ 5. ~~Fix `_app-styles.scss` leak~~ — already fixed; ROADMAP entry was stale.
559
+ 6. ~~`npm pack` smoke test~~ — done. Tarball is 162 kB / 125 files, clean.
560
+ 7. ~~Hand-design boilerplate theme~~ — done (slate neutrals, system fonts, light + dark).
561
+ 10. ~~Update `/compare` page~~ with three-tier + bundle table — done.
562
+ 11. ~~Vendor Lucide as default `core` icon pack~~ — done. 49/49 glyphs at `public/icons/core/`, per-theme override mechanism, `LICENSE-third-party`, `npm run validate-icons`.
563
+ 12. ~~Themes editor at `/themes/editor`~~ — done at `/themes` (with `/themes/gallery` for the tile gallery). Live preview, contract-slot controls, Blob download, localStorage autosave per family.
564
+ 13. ~~Replace placeholder `/docs` copy~~ — partial. Intro + tokens + animation done; utilities table + mixins API reference still TODO.
565
+ 15. ~~Animation preview page~~ — done at `/docs/animation`.
566
+ 16. ~~Decide sizing scale~~ — locked numbered as source of truth, t-shirt aliases layered on top.
567
+ 19. ~~A11y linter triage~~ — done 2026-05-11 (commit `4e1bbf1`). Zero FAILs across all 22 theme blocks. `--border-default` reclassified as decorative (info status) per WCAG 2.2 SC 1.4.11. Validator now FAILs by default; `--allow-a11y-fail` opts out; `--strict` retained as a no-op alias.
568
+ 20. ~~Theme-editor import~~ — upload `.css` to keep editing landed 2026-05-12 (uncommitted on `main`; round-trips a previously-downloaded theme file).
569
+
570
+ ### Open / next up — Phase 5 is the live gate
571
+
572
+ **Phase 5 (publish v0.7) is the correct next step.** A11y is at zero FAILs, validator is FAIL-by-default, tarball is clean, boilerplate theme + Lucide icons ship, theme editor round-trips. Only the publish command itself + a downstream smoke install remain.
573
+
574
+ 8. **`npm publish` 0.7.0** — bump version, `npm publish --access public`. Awaiting explicit user go.
575
+ 9. **Boilerplate consumer install from registry** — depends on #8.
576
+
577
+ ### After v0.7 ships
578
+
579
+ 14. **Ship theme-specific `icons.svg`** for each of the 5 non-Sketchbook themes (or just a couple to prove the per-theme override mechanism). Mechanism is proven; only the demo content is missing.
580
+ 17. **Phase 7 differentiators**:
581
+ - Zero-JS interactive components, TS token bridge, intrinsic layout mixins, Tailwind→Awesome CLI, `/showcase` page, component depth audit — all unstarted.
582
+ 18. **Phase 8 companion products** — Gremlin UI + Gremlin Boilerplate. Trigger: cia 1.0 ships and ~17 boilerplate-wanted components are stable.
583
+
584
+ ### Smaller items still on the board
585
+
586
+ - **Utilities searchable table** at `/docs/utilities` (placeholder content currently). Last big docs gap before launch.
587
+ - **Mixins API reference** at `/docs/mixins`. Last big docs gap before launch.
588
+ - **README homepage URL** + Pages-deploy verification.
589
+ - **Icon index page** listing every glyph in every pack.
590
+ - **Pull Sketchbook docs-flourishes** (seal, draft stamp, brush rules) out of any future "base system" port.
591
+
592
+ ---
593
+
594
+ ## YouTube channel — after v1.0 locks in
595
+
596
+ **Locked 2026-05-26.** End-of-roadmap item by design. No filming until cia v1.0 is stable. Videos recorded against a moving target go stale before they release.
597
+
598
+ ### The lock-in gate (do not record before this)
599
+
600
+ All of the following must be true before Season 1 production begins:
601
+
602
+ - [ ] cia v1.0.0 published to npm
603
+ - [ ] All v1.0 epic acceptance criteria met (42 stories shipped or explicitly punted)
604
+ - [ ] No planned mixin renames or API changes within the next 6 months
605
+ - [ ] Recipes book stable — at least 11 recipes shipped and not changing
606
+ - [ ] Theme editor polish complete (download, share URL, contrast validator)
607
+ - [ ] MCP server v1.0 stable; no breaking schema changes planned
608
+ - [ ] First 30 days of real consumer signal collected post-launch (catch any "we missed X" before locking content)
609
+ - [ ] CHANGELOG settles for at least 30 days without a major API entry
610
+
611
+ Recording a 12-15 video season takes 3-4 weeks of intensive production. If cia ships v1.0.1 mid-recording with a renamed mixin, half the videos go stale before they release. The gate protects against that.
612
+
613
+ ### The framing — sponsored, not subject
614
+
615
+ The channel is a **CSS/SCSS knowledge channel sponsored by css-is-awesome**, NOT a cia tutorial channel. Channel name differs from cia (top candidate: **Jerry on CSS** — founder authority, portable across whatever Jerry builds next). cia gets the "brought to you by" credit; the content is broader.
616
+
617
+ ```
618
+ WRONG: "How to use css-is-awesome" (limited runway, sales-y)
619
+ RIGHT: "Real CSS / modern CSS / design system opinions —
620
+ brought to you by css-is-awesome" (infinite runway, authority)
621
+ ```
622
+
623
+ This mirrors Vercel's marketing model (talks about web platform; Next.js sells itself) rather than Linear's (product-focused, slower growth).
624
+
625
+ ### Topic clusters
626
+
627
+ Six content lanes. cia appears organically across all six — never the headline, always present.
628
+
629
+ 1. **Modern CSS techniques** — container queries, `light-dark()`, anchor positioning, `:has()`, view transitions, scroll-driven animations
630
+ 2. **Design system opinions** — mixin-first vs class-soup, tokens beyond colors, theme architecture, why component libraries fail
631
+ 3. **AI + CSS** — how AI agents read CSS, MCP for design systems, prompting Claude for components, the recipe book pattern
632
+ 4. **Build sessions** — command palette in 15 min, print invoices from HTML, theme editor live-coded
633
+ 5. **Industry analysis** — Tailwind v4 vs shadcn vs cia, design system failure modes, Bootstrap→modern migration
634
+ 6. **Tools & tips** — SCSS mixins, dev tools, VS Code extensions, debugging CSS
635
+
636
+ ### Production model — TV seasons
637
+
638
+ 1. **Production block** — 3-4 weeks of intensive batch recording. **12-15 videos per season** (calibrated down from Jerry's initial 27-video target so the math works in 3-4 weeks of part-time production; ~5.5 hrs per video × 13 = ~72 hrs).
639
+ 2. **Release block** — 1 video per week through the season. 12-15 weeks of content per season at a steady cadence.
640
+ 3. **Inter-season break** — recharge + plan next batch. 4 weeks typical.
641
+ 4. **Ad-hoc videos** — slot in between scheduled releases for time-sensitive topics (AI changes, MCP updates, competitor launches, breaking CSS spec news). Label them differently (e.g. "Hot Take" or "News Cut") so they don't confuse the season arc.
642
+ 5. **Fresh slots** — reserve 2-3 video slots per season for last-minute recording so the season can react to recent events without breaking the schedule.
643
+
644
+ Roughly **2 seasons per year + ad-hoc = 30-40 videos per year**. Sustainable. Avoids the burnout-by-video-5 that kills most weekly channels.
645
+
646
+ ### Season planning
647
+
648
+ Each season has a narrative arc. Viewers come back for the next season because they know what it's about.
649
+
650
+ | Season | Theme | Goal |
651
+ |---|---|---|
652
+ | **Season 1** | "Modern CSS in 2026" | Broad audience build. Container queries, `light-dark()`, anchor positioning, `:has()`, view transitions. cia mentioned naturally as the sponsor. |
653
+ | **Season 2** | "Design System Opinions" | cia's natural territory. Mixin-first, token architecture, theme strategy, why component libraries fail. |
654
+ | **Season 3** | "AI + CSS" | cia's distinctive angle. MCP for design systems, prompting Claude for components, the recipe book pattern. |
655
+ | **Season 4+** | TBD | Based on what S1-S3 audience responds to. Ship-then-see applies. |
656
+
657
+ **Final episode of each season teases the next** — 60-second trailer at the end of the season finale. Builds anticipation for the next batch.
658
+
659
+ ### Production setup decisions
660
+
661
+ Lock these BEFORE video 1 (one-time decisions; reuse forever):
662
+
663
+ | Decision | Recommendation |
664
+ |---|---|
665
+ | **Channel name** | Jerry on CSS (top pick), Real CSS, or Awesome CSS |
666
+ | **Recording software** | OBS Studio (free, cross-platform) |
667
+ | **Microphone** | One decent USB mic — Shure MV7, RØDE NT-USB+, or Audio-Technica AT2020USB+ (~$150-200) |
668
+ | **Editing software** | DaVinci Resolve (free, pro-grade) or CapCut (faster for short videos) |
669
+ | **Format** | Voice-over screen recording is the starting default (fastest production, lowest friction). Add face-cam after 5-10 videos if Jerry wants. |
670
+ | **Length** | 8-15 minutes per video (sweet spot for retention without burnout) |
671
+ | **Thumbnail template** | 3-5 word title + visual; consistent design across all videos |
672
+ | **Intro/outro motif** | 5 seconds max; don't waste retention budget on branded intros |
673
+ | **Description template** | 1-paragraph hook + chapter timestamps + relevant links |
674
+ | **Release rhythm** | Same day + time each week during a season (algorithm rewards consistency). Public commitment posted at season start. |
675
+
676
+ ### Calibration math on Jerry's original 27-videos-per-season target
677
+
678
+ | Step | Time per video |
679
+ |---|---|
680
+ | Outline / script | 30-60 min |
681
+ | Recording (incl. re-takes) | 1-2 hrs |
682
+ | Editing | 2-4 hrs |
683
+ | Thumbnail design | 20-40 min |
684
+ | Description + chapters + tags | 15 min |
685
+ | **Total per video** | **~4-7 hrs** |
686
+
687
+ 27 videos × 5.5 hrs average = ~148 hours. In 3-4 weeks of full-time production that's possible but **exhausting** — and Jerry is also building cia + boilerplate-slim in parallel. **12-15 videos per season** uses ~66-83 hours, realistic in 3-4 weeks of half-time YouTube work. If Season 1 production goes faster than expected, batch 3-5 extra videos for Season 1.5 or save for Season 2.
688
+
689
+ ### Success metric
690
+
691
+ After Season 1 (12-15 videos shipped over 12-15 weeks), the question is: **is the channel growing organically?**
692
+
693
+ - Subscriber count growing at 50+ per video → working, plan Season 2
694
+ - Average view duration > 40% → working, content is right
695
+ - Both stagnating → pivot format OR kill the channel; don't grind on dead content
696
+
697
+ ### What this channel is NOT
698
+
699
+ - NOT a daily vlog
700
+ - NOT a sales channel for cia
701
+ - NOT a "subscribe, like, comment, hit the bell" channel (that script is dead)
702
+ - NOT a guaranteed-weekly-content channel (sustainability over speed)
703
+ - NOT a channel for content cross-posted from blog (different medium, different audience)
704
+ - NOT something that ships during the v1.0 sprint — see the LOCK-IN GATE above
705
+
706
+ ### Trigger to begin
707
+
708
+ When the lock-in gate items above are all checked. Likely **3-6 months after v1.0 launches** — give the product time to settle, collect real consumer signal, lock the API, then start filming.
709
+
710
+ Full strategy + memory (with rationale, name-discussion details, format math, and "ship-then-see" alignment) lives in `project_youtube_channel_strategy.md`.
711
+
712
+ ---
713
+
714
+ *Roadmap is iterative — phases can be reordered or merged based on what's most useful to ship next.*