css-is-awesome 1.12.1 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -323,6 +323,8 @@ Two ways to run it — prefer the dedicated `npx css-is-awesome-mcp` package (ze
323
323
  }
324
324
  ```
325
325
 
326
+ No install step needed — `npx` fetches it on first run. To pin an exact version instead, `npm install css-is-awesome-mcp` first; `npx` then uses that local copy.
327
+
326
328
  Or run this in-repo copy directly — needs its SDK peer deps installed manually first (`npm install -D @modelcontextprotocol/sdk zod` in the client project, since they're optional peers):
327
329
 
328
330
  ```json
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.13.1](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.13.0...v1.13.1) (2026-09-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **themes:** import a single :root theme file into BOTH modes, not just the active tab ([96a860a](https://github.com/Jerry2d3d/css-is-awesome/commit/96a860a1482db67d5bbe9a8b7426308b24250ca6)), closes [#F7F3EA](https://github.com/Jerry2d3d/css-is-awesome/issues/F7F3EA) [#1A1815](https://github.com/Jerry2d3d/css-is-awesome/issues/1A1815)
7
+
8
+ # [1.13.0](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.12.1...v1.13.0) (2026-09-11)
9
+
10
+
11
+ ### Features
12
+
13
+ * **mcp:** add derive-theme:<base> intent to assemble_prompt ([576dfcb](https://github.com/Jerry2d3d/css-is-awesome/commit/576dfcb80363f281d13ecf0c9218de8915de6595))
14
+
1
15
  ## [1.12.1](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.12.0...v1.12.1) (2026-09-11)
2
16
 
3
17
 
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/css-is-awesome?logo=npm&color=cb3837)](https://www.npmjs.com/package/css-is-awesome) [![CI](https://github.com/Jerry2d3d/css-is-awesome/actions/workflows/ci.yml/badge.svg)](https://github.com/Jerry2d3d/css-is-awesome/actions/workflows/ci.yml) [![Node](https://img.shields.io/badge/node-%E2%89%A520-43853d?logo=node.js&logoColor=white)](./package.json) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE) [![semantic-release](https://img.shields.io/badge/semantic--release-enabled-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
6
6
 
7
- **Bring your own selectors. We bring the design system.** One CSS file per theme — drop it in and the page restyles, no markup change. 24 themes. Zero JavaScript in the npm package. Six browser-native interactive components. Small enough to read in an afternoon.
7
+ **Bring your own components. Bring your own selectors. We bring the design system.** No component library to fight, in React, Vue, Angular, Svelte, Web Components, Razor, SharePoint, or plain HTML — cia styles the markup you already own. One CSS file per theme — drop it in and the page restyles, no markup change. 24 themes. Zero JavaScript in the npm package. Six browser-native interactive components. Small enough to read in an afternoon.
8
8
 
9
9
  **Docs:** [cssisawesome.com](https://cssisawesome.com/) · **Install:** `npm install css-is-awesome`
10
10
 
@@ -16,22 +16,18 @@
16
16
 
17
17
  **Then connect the MCP server** and stop guessing at signatures. It answers from the real source — 30 tools covering themes, mixins, functions, tokens, recipes and components.
18
18
 
19
- ```bash
20
- npm install -D @modelcontextprotocol/sdk zod # required — npm will NOT install these for you
21
- ```
22
-
23
19
  ```json
24
20
  {
25
21
  "mcpServers": {
26
22
  "css-is-awesome": {
27
- "command": "node",
28
- "args": ["node_modules/css-is-awesome/mcp/server.cjs"]
23
+ "command": "npx",
24
+ "args": ["css-is-awesome-mcp"]
29
25
  }
30
26
  }
31
27
  }
32
28
  ```
33
29
 
34
- The SDK and `zod` are declared as *optional* peer dependencies, so a plain `npm install css-is-awesome` skips them and this in-repo copy exits with `@modelcontextprotocol/sdk is not installed`. Install both — or skip this entirely and run `npx css-is-awesome-mcp` instead, the dedicated zero-install package (see the MCP section below), which ships the SDK as a real dependency.
30
+ That's the whole setup — [`css-is-awesome-mcp`](https://www.npmjs.com/package/css-is-awesome-mcp) is a dedicated zero-install package, no manual dependency step. `npx` fetches and caches it on first run with no install command needed; if you'd rather pin an exact version in your own `package.json`/lockfile, `npm install css-is-awesome-mcp` works too — `npx` then uses the locally installed copy instead of fetching. (The in-repo copy at `mcp/server.cjs` still works too, if you'd rather not add a second package — see the MCP section below for that path, which needs `npm install -D @modelcontextprotocol/sdk zod` first since those are optional peers here.)
35
31
 
36
32
  Why it matters more here than for older frameworks: no model has memorised cia's API the way it has memorised Tailwind's class names. Without `llm.txt` or MCP, an agent will confidently invent a Tailwind-shaped API. With them, it reads the real thing. Details at [`/docs/mcp`](https://cssisawesome.com/docs/mcp/).
37
33
 
@@ -313,6 +309,12 @@ cia ships a Model Context Protocol stdio server (JSON-RPC over stdio, protocol `
313
309
  }
314
310
  ```
315
311
 
312
+ No install command required — `npx` fetches and caches the package the first time your MCP client runs it. Prefer a pinned version in your own lockfile instead? `npm install css-is-awesome-mcp` works the same way as any other dependency; `npx` then runs the locally installed copy rather than fetching one:
313
+
314
+ ```bash
315
+ npm install css-is-awesome-mcp
316
+ ```
317
+
316
318
  **Alternative — the copy already in your `node_modules`:** cia's own `files` manifest ships [`mcp/server.cjs`](./mcp/server.cjs) too, for anyone who'd rather not add a second package. This copy needs its SDK peer deps installed manually first, since they're declared as *optional* peers (so a plain `npm install css-is-awesome` doesn't pull JS into a CSS-only install):
317
319
 
318
320
  ```bash
@@ -406,7 +408,7 @@ Full detail: [`/docs/testing`](https://cssisawesome.com/docs/testing/).
406
408
 
407
409
  **Stable, [published on npm](https://www.npmjs.com/package/css-is-awesome)** (first published 2026-09-01). The mixin API, functions, token contract, and theme architecture are stable and under strict SemVer — breaking changes require a major bump. See [`VERSIONING.md`](./VERSIONING.md) for the policy.
408
410
 
409
- The 1.0 surface is the v0.8 mixin-first reframe — twelve mixin renames, theme system collapsed to 8 single-file theme families, six zero-JS components, intrinsic-layout vocabulary, opt-in utilities — plus the recipes book, the Tailwind/Bootstrap migration on-ramp, print/PDF support, and the 30-tool MCP server. The npm package ships ZERO JavaScript by hard rule.
411
+ The 1.0 surface is the v0.8 mixin-first reframe — twelve mixin renames, theme system collapsed to 8 single-file theme families, six zero-JS components, intrinsic-layout vocabulary, opt-in utilities — plus the recipes book, the Tailwind/Bootstrap migration on-ramp, print/PDF support, and the 30-tool MCP server (now also available zero-install via the companion [`css-is-awesome-mcp`](https://www.npmjs.com/package/css-is-awesome-mcp) package). The npm package ships ZERO JavaScript by hard rule.
410
412
 
411
413
  See [CHANGELOG.md](./CHANGELOG.md) for the full history and [MIGRATION.md](./MIGRATION.md) for the v0.7 → v0.8 upgrade path.
412
414
 
package/llm.txt CHANGED
@@ -142,6 +142,9 @@ SDK ships as a real dependency, no separate peer-install step:
142
142
  }
143
143
  }
144
144
  ```
145
+ No install command needed — `npx` fetches it on first run. To pin an exact
146
+ version in a lockfile instead, `npm install css-is-awesome-mcp` works the same
147
+ as any other dependency; `npx` then uses that local copy.
145
148
 
146
149
  Alternative: the copy already in `node_modules` (this repo's own `mcp/server.cjs`).
147
150
  **Two dependencies are required and npm will NOT install them for you** for this
package/mcp/server.cjs CHANGED
@@ -1136,6 +1136,40 @@ const handlers = {
1136
1136
  }
1137
1137
  break;
1138
1138
  }
1139
+ case 'derive-theme': {
1140
+ if (!target) throw new Error('assemble_prompt: intent "derive-theme:" requires a base theme name');
1141
+ const base = handlers.get_theme({ name: target });
1142
+ const themeMixin = handlers.get_mixin({ name: 'theme' });
1143
+ const tk = getTokens();
1144
+ banner(`css-is-awesome — deriving a new theme from ${base.name}`);
1145
+ sub('Base theme — copy this, then edit only what should change');
1146
+ lines.push('```scss');
1147
+ lines.push(base.raw_scss);
1148
+ lines.push('```');
1149
+ lines.push('');
1150
+ sub('The `theme()` wrapper contract');
1151
+ lines.push('```scss');
1152
+ lines.push(themeMixin.signature);
1153
+ lines.push('```');
1154
+ if (themeMixin.doc) { lines.push(''); lines.push(themeMixin.doc); }
1155
+ lines.push('');
1156
+ sub('Required + optional tokens (must all still be present)');
1157
+ lines.push(`Required: ${tk.required.length}. Optional: ${tk.optional.length}.`);
1158
+ lines.push('');
1159
+ const dtCats = Object.keys(tk.byCategory).sort();
1160
+ for (const cat of dtCats) {
1161
+ lines.push(`### ${cat} (${tk.byCategory[cat].length})`);
1162
+ lines.push('');
1163
+ for (const name of tk.byCategory[cat].sort()) lines.push(`- ${name}`);
1164
+ lines.push('');
1165
+ }
1166
+ sub('Rules');
1167
+ lines.push('1. This server never writes files. Build the new theme file\'s content from the above, then write it yourself with your own file tools — ask the user where it should go if it isn\'t obvious.');
1168
+ lines.push('2. Keep the `:root, :root[data-theme="<new-name>"]` shape (the base theme above already has it) unless you are deliberately building a multi-theme-bundle entry, where `$standalone: false` applies instead.');
1169
+ lines.push('3. Only change values that should actually differ for the new design — copy everything else from the base theme unchanged, including tokens you don\'t recognize.');
1170
+ lines.push('4. Before calling it done: every required token listed above must still be present in the new file. If this repo is available locally, `node scripts/theme-validator.js <path-to-new-theme.css>` confirms it.');
1171
+ break;
1172
+ }
1139
1173
  case 'animations': {
1140
1174
  const a = getAnimations();
1141
1175
  banner('css-is-awesome — animations');
@@ -1175,7 +1209,7 @@ const handlers = {
1175
1209
  break;
1176
1210
  }
1177
1211
  default:
1178
- throw new Error(`assemble_prompt: unknown intent "${intent}". Try overview | mixin:<name> | component:<name> | theme:<name> | tokens | animations | recipe:<name>.`);
1212
+ throw new Error(`assemble_prompt: unknown intent "${intent}". Try overview | mixin:<name> | component:<name> | theme:<name> | derive-theme:<base> | tokens | animations | recipe:<name>.`);
1179
1213
  }
1180
1214
 
1181
1215
  if (args && typeof args === 'string' && args.trim()) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "css-is-awesome",
3
- "version": "1.12.1",
3
+ "version": "1.13.1",
4
4
  "description": "A token-driven SCSS design system with light/dark theming, semantic color tokens, and a 800+ LOC mixin API.",
5
5
  "homepage": "https://github.com/Jerry2d3d/css-is-awesome#readme",
6
6
  "bugs": {