@cyberskill/design 1.3.8 → 1.3.10

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 (55) hide show
  1. package/DESIGN.md +8 -7
  2. package/README.md +13 -10
  3. package/SKILL.md +15 -6
  4. package/VERSION +1 -1
  5. package/_ds_bundle.js +2 -2
  6. package/_esm/cs.mjs +2 -2
  7. package/docs/benchmark-rubric.md +3 -3
  8. package/docs/ci-cd.md +1 -1
  9. package/docs/consumer-grant.md +1 -1
  10. package/docs/consuming.md +10 -6
  11. package/docs/contrast-report.md +3 -1
  12. package/docs/conventions.md +3 -3
  13. package/docs/decisions.md +1 -1
  14. package/docs/deploy.md +3 -1
  15. package/docs/design-styles.md +1 -1
  16. package/docs/doctrine.md +51 -0
  17. package/docs/figma.md +2 -0
  18. package/docs/live-hub.md +3 -1
  19. package/docs/products.md +1 -1
  20. package/docs/quality-gates.md +8 -4
  21. package/docs/release-notes.md +17 -2
  22. package/docs/release-runbook.md +1 -1
  23. package/docs/storybook.md +3 -3
  24. package/docs/sync.md +9 -9
  25. package/docs/template-schema-v2.md +1 -1
  26. package/docs/vi/benchmark-rubric.md +3 -3
  27. package/docs/vi/ci-cd.md +1 -1
  28. package/docs/vi/consumer-grant.md +1 -1
  29. package/docs/vi/consuming.md +10 -6
  30. package/docs/vi/contrast-report.md +3 -1
  31. package/docs/vi/conventions.md +3 -3
  32. package/docs/vi/decisions.md +1 -1
  33. package/docs/vi/deploy.md +3 -1
  34. package/docs/vi/design-styles.md +1 -1
  35. package/docs/vi/doctrine.md +51 -0
  36. package/docs/vi/figma.md +2 -0
  37. package/docs/vi/live-hub.md +3 -1
  38. package/docs/vi/products.md +1 -1
  39. package/docs/vi/quality-gates.md +8 -4
  40. package/docs/vi/release-notes.md +17 -2
  41. package/docs/vi/release-runbook.md +1 -1
  42. package/docs/vi/storybook.md +3 -3
  43. package/docs/vi/sync.md +8 -8
  44. package/docs/vi/template-schema-v2.md +1 -1
  45. package/docs/viewer.html +15 -4
  46. package/llms.txt +18 -11
  47. package/package.json +2 -2
  48. package/tokens/element-seeds.json +1 -1
  49. package/tokens/native/CSTokens.kt +1 -1
  50. package/tokens/native/CSTokens.swift +1 -1
  51. package/tokens/native/cs_tokens.dart +1 -1
  52. package/tokens/provenance.json +6 -6
  53. package/tokens/tokens.dtcg.json +1 -1
  54. package/tokens/tokens.js +2 -2
  55. package/tokens/tokens.json +1 -1
package/docs/vi/sync.md CHANGED
@@ -1,10 +1,10 @@
1
- # Repo ↔ Claude Design — round-trip fidelity & đồng bộ hai chiều
1
+ # Repo ↔ môi trường authoring — round-trip fidelity & đồng bộ hai chiều
2
2
 
3
- Repo GitHub (`cyberskill-official/design`) là **nguồn chân lý**. Session Claude Design là filesystem project tạm — tài liệu này nói cách chúng giữ sync mà không mất việc.
3
+ Repo GitHub (`cyberskill-official/design`) là **nguồn chân lý**. Session compiler (ví dụ Claude Design) là filesystem project tạm — tài liệu này nói cách chúng giữ sync mà không mất việc. Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
4
4
 
5
5
  ## Repo có khôi phục nguyên hệ thống không?
6
6
 
7
- **Trong session Claude Design — có.** Mọi thứ định nghĩa hệ thống là file text/asset thuần và round-trip lossless:
7
+ **Trong session compiler DC-capable — có.** Mọi thứ định nghĩa hệ thống là file text/asset thuần và round-trip lossless:
8
8
  - `styles.css` + `tokens/` + `base/` (mọi CSS + `tokens.json`/`tokens.js`)
9
9
  - `components/**` (`.jsx` + `.d.ts` + `.prompt.md` + `*.card.html`)
10
10
  - `templates/**/*.dc.html` (+ `ds-base.js`, `support.js`)
@@ -13,15 +13,15 @@ Repo GitHub (`cyberskill-official/design`) là **nguồn chân lý**. Session Cl
13
13
  - **`_esm/react.mjs`** — entry React bundler-native (export package mặc định; React peer). Regenerated qua `npm run build:react-entry`.
14
14
  - **`_esm/cs.mjs`** — entry ESM browser / no-build legacy (`@cyberskill/design/legacy`). Tiền tố underscore **không** nghĩa là build artifact hay gitignored ở đây (chỉ `uploads/`, `scraps/`, `_audit/exports/` là — xem Hygiene bên dưới); `_esm/` là source, cùng tầng với `templates/` hoặc `docs/`. Một lần port trước đã bỏ nó đúng vì giả định đó và làm gãy ESM smoke gate — nếu bạn port/copy cây này bằng tay, **explicit include mọi thư mục top-level danh sách này đặt tên**, đừng suy từ tiền tố `_`.
15
15
 
16
- - `README.md`, `CONTRIBUTING.md`, `SKILL.md`, `CLAUDE.md`, `VERSION`, `DESIGN.md` (open-spec surface generate — commit, chỉ regen qua `npm run build:design-md`, khóa bởi gate `design-md-parity`)
16
+ - `README.md`, `CONTRIBUTING.md`, `SKILL.md`, `docs/doctrine.md`, shim host (`CLAUDE.md`), `VERSION`, `DESIGN.md` (open-spec surface generate — commit, chỉ regen qua `npm run build:design-md`, khóa bởi gate `design-md-parity`)
17
17
 
18
- Kéo chúng vào project mới (xem bên dưới) và compiler nhận lại như design system — nó khóa vào `styles.css`, cặp `.d.ts`/`.jsx`, HTML `@dsCard`, và `templates/`. File **derived** (`_ds_bundle.js`, `_ds_manifest.json`, `_adherence.oxlintrc.json`) được regenerate mỗi turn từ source, nên không cần tin từ repo — chúng rebuild.
18
+ Kéo chúng vào project mới (xem bên dưới) và compiler nhận lại như design system — nó khóa vào `styles.css`, cặp `.d.ts`/`.jsx`, HTML `@dsCard`, và `templates/`. Artifact compile đã commit (`_ds_bundle.js`, `_ds_manifest.json`, `_adherence.oxlintrc.json`, `dist/styles.min.css`, `DESIGN.md`) là một phần hợp đồng consumer — giữ trong cây và regenerate bằng npm script đã ghi, đừng coi chúng là disposable.
19
19
 
20
- **Ở agent khác (Google Stitch, LLM tool generic) — một phần.** Chúng tiêu thụ được lớp **portable** — `tokens/tokens.json` + `tokens.js`, raw CSS, component `.jsx`, fonts, và Markdown docs — nhưng **không** hiểu format Design-Component `.dc.html` hay compiler điều khiển nó. Vậy agent non-Claude-Design nhận tokens, styles, và source component như file, không phải hành vi DC/tweak/compile live. Hướng những tool đó vào root **`DESIGN.md`** trước (open-spec kiểu Stitch generate: doctrine + mọi giá trị token + inventory, regen từ DTCG qua `npm run build:design-md` và khóa bởi gate `design-md-parity`), rồi `tokens.json` / `tokens.dtcg.json` và CSS cho hợp đồng máy; coi `.dc.html` + compiler là native Claude Design.
20
+ **Ở agent khác (Google Stitch, LLM tool generic) — một phần.** Chúng tiêu thụ được lớp **portable** — `tokens/tokens.json` + `tokens.js`, raw CSS, component `.jsx`, fonts, và Markdown docs — nhưng **không** hiểu format Design-Component `.dc.html` hay compiler điều khiển nó. Vậy agent không-compiler nhận tokens, styles, và source component như file, không phải hành vi DC/tweak/compile live. Hướng những tool đó vào root **`DESIGN.md`** trước (open-spec kiểu Stitch generate: doctrine + mọi giá trị token + inventory, regen từ DTCG qua `npm run build:design-md` và khóa bởi gate `design-md-parity`), rồi `tokens.json` / `tokens.dtcg.json` và CSS cho hợp đồng máy; coi `.dc.html` + compiler là native DC.
21
21
 
22
22
  ## Đồng bộ hai chiều (repo = nguồn chân lý)
23
23
 
24
- Claude Design có thể **đọc/copy từ** GitHub nhưng **không push tới** nó. Vậy sync là *pull tự động, push thủ công*:
24
+ Session compiler có thể **đọc/copy từ** GitHub nhưng thường **không push tới** nó. Vậy sync là *pull tự động, push thủ công*:
25
25
  **Bắt đầu session — pull (tin cậy, tự động):** bảo agent load repo. Nó copy cây vào project mới (đường `github_copy_files`), compiler validate, và bạn tiếp từ chân lý đã commit — không bao giờ từ project state cũ. Luôn bắt đầu đây; đừng resume từ project nửa nhớ.
26
26
 
27
27
  **Kết thúc session — push (thủ công, review):** tải project, rồi từ clone:
@@ -39,7 +39,7 @@ Diff PR là lưới an toàn — nó hiện đúng những gì đổi kể từ
39
39
  ## Hygiene giữ round-trip sạch
40
40
  - **`.gitignore`** transient (`uploads/`, `scraps/`, `_audit/exports/`); commit mọi thứ khác, **kể cả `_esm/`** (xem trên — nó là source, không phải build artifact, dù có tiền tố `_`). Compiled `_ds_bundle.js`/manifest được commit cho consumer không có bước build, nhưng kỳ vọng churn — hoặc ignore và để mỗi session regenerate.
41
41
 
42
- - **`VERSION` đã LAUNCH ở 1.1.0; pin theo `VERSION`** — auto-bump khi push lên `main` (`.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`); owner vẫn có thể force bump. Không maintain file changelog. Continuity là git history; việc maintainer đang mở nằm ở `docs/decisions.md`.
42
+ - **`VERSION` pin theo file** (auto-bump khi push lên `main` qua `.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`; LAUNCH đầu tiên là **1.1.0**; owner vẫn có thể force bump). Không maintain file changelog. Continuity là git history; việc maintainer đang mở nằm ở `docs/decisions.md`.
43
43
 
44
44
  - **Một nguồn chân lý tại một thời điểm.** Đừng sửa repo và project Claude Design song song rồi push cả hai — pull, làm việc, push, theo thứ tự đó, để repo luôn là điểm merge.
45
45
 
@@ -1,6 +1,6 @@
1
1
  # Template content-schema v2 — content slot có kiểu
2
2
 
3
- Metadata thuần additive, opt-in: sidecar `templates/<slug>/content-schema.json` cạnh `.dc.html` của template, khai báo **kiểu** của mỗi `{{ hole }}` đã có trong template — để agent hoặc pipeline điền/validate nội dung khách thật theo chương trình mà không parse HTML hay đoán.
3
+ Metadata thuần additive, opt-in: sidecar `templates/<slug>/content-schema.json` cạnh `.dc.html` của template, khai báo **kiểu** của mỗi `{{ hole }}` đã có trong template — để agent hoặc pipeline điền/validate nội dung khách thật theo chương trình mà không parse HTML hay đoán. Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
4
4
 
5
5
  **Không cần đổi markup template.** `id` của slot là tên hole đã dùng trong `.dc.html` (ví dụ `{{ heroH }}`) và đã bind trong `renderVals()` của logic class — schema chỉ mô tả nó.
6
6
 
package/docs/viewer.html CHANGED
@@ -43,12 +43,23 @@
43
43
  article hr{border:0;border-top:1px dashed var(--cs-color-border-default);margin:20px 0}
44
44
  article a{color:var(--cs-color-link)}article a:hover{color:var(--cs-color-link-hover)}
45
45
  #err{color:#B42318;font-family:var(--cs-font-family-mono);font-size:13px}
46
+ html.embed body{grid-template-columns:1fr}
47
+ html.embed aside{display:none}
48
+ html.embed main{padding:24px 32px}
46
49
  @media (max-width:640px){
47
50
  body{grid-template-columns:1fr}
48
51
  aside{border-inline-end:0;border-block-end:1px solid var(--cs-color-border-default);max-height:38vh}
49
52
  main{padding:18px 16px}
53
+ html.embed main{padding:18px 16px}
50
54
  }
51
- </style></head>
55
+ </style>
56
+ <script>
57
+ (function(){
58
+ var q=new URLSearchParams(location.search);
59
+ if(q.get('embed')==='1'||q.get('chrome')==='0') document.documentElement.classList.add('embed');
60
+ })();
61
+ </script>
62
+ </head>
52
63
  <body>
53
64
  <aside id="nav"><h1>CyberSkill Docs</h1>
54
65
  <div class="langtog" role="group" aria-label="Doc language"><button type="button" id="lang-en" data-lang="en">EN</button><button type="button" id="lang-vi" data-lang="vi">VI</button></div>
@@ -58,13 +69,13 @@
58
69
  <script>
59
70
  const DOCS_EN=[
60
71
  ['Start',[['README.md','README'],['SKILL.md','SKILL (agent rules)'],['llms.txt','llms.txt'],['CONTRIBUTING.md','Contributing']]],
61
- ['Guides',[['docs/consuming.md','Consuming & upgrading (incl. AI-agent quick path)'],['docs/consumer-grant.md','Consumer grant (npm · UNLICENSED)'],['docs/deploy.md','Deploy (Vercel/VPS)'],['docs/template-schema-v2.md','Template content-schema v2'],['docs/conventions.md','Conventions'],['docs/release-notes.md','Release Notes'],['docs/release-runbook.md','Release runbook'],['docs/storybook.md','Storybook (product at /)'],['docs/live-hub.md','Live hub (Storybook at /)'],['docs/design-styles.md','Design styles'],['docs/benchmark-rubric.md','Benchmark rubric'],['docs/products.md','Products'],['docs/contrast-report.md','Contrast report'],['docs/figma.md','Figma']]],
62
- ['Maintainers',[['docs/decisions.md','Decisions'],['docs/ci-cd.md','CI/CD automation'],['docs/quality-gates.md','Quality gates'],['docs/sync.md','Git sync & hygiene']]]
72
+ ['Guides',[['docs/consuming.md','Consuming & upgrading'],['docs/consumer-grant.md','Consumer grant (npm · UNLICENSED)'],['docs/deploy.md','Deploy (Vercel/VPS)'],['docs/template-schema-v2.md','Template content-schema v2'],['docs/conventions.md','Conventions'],['docs/release-notes.md','Release Notes'],['docs/release-runbook.md','Release runbook'],['docs/storybook.md','Storybook (product at /)'],['docs/live-hub.md','Live hub (Storybook at /)'],['docs/design-styles.md','Design styles'],['docs/benchmark-rubric.md','Benchmark rubric'],['docs/products.md','Products'],['docs/contrast-report.md','Contrast report'],['docs/figma.md','Figma']]],
73
+ ['Maintainers',[['docs/doctrine.md','Doctrine'],['docs/decisions.md','Decisions'],['docs/ci-cd.md','CI/CD automation'],['docs/quality-gates.md','Quality gates'],['docs/sync.md','Git sync & hygiene']]]
63
74
  ];
64
75
  const DOCS_VI=[
65
76
  ['Bắt đầu',[['README.md','README (EN)'],['SKILL.md','SKILL (EN)'],['llms.txt','llms.txt (EN)'],['CONTRIBUTING.md','Contributing (EN)']]],
66
77
  ['Hướng dẫn',[['docs/consuming.md','Tiêu thụ & nâng cấp'],['docs/consumer-grant.md','Grant consumer (npm · UNLICENSED)'],['docs/deploy.md','Deploy (Vercel/VPS)'],['docs/template-schema-v2.md','Template schema v2'],['docs/conventions.md','Conventions'],['docs/release-notes.md','Ghi chú phát hành'],['docs/release-runbook.md','Runbook phát hành'],['docs/storybook.md','Storybook (sản phẩm tại /)'],['docs/live-hub.md','Live hub (Storybook tại /)'],['docs/design-styles.md','Phong cách'],['docs/benchmark-rubric.md','Rubric benchmark'],['docs/products.md','Sản phẩm'],['docs/contrast-report.md','Báo cáo contrast'],['docs/figma.md','Figma']]],
67
- ['Maintainer',[['docs/decisions.md','Quyết định'],['docs/ci-cd.md','CI/CD'],['docs/quality-gates.md','Quality gates'],['docs/sync.md','Đồng bộ Git']]]
78
+ ['Maintainer',[['docs/doctrine.md','Học thuyết'],['docs/decisions.md','Quyết định'],['docs/ci-cd.md','CI/CD'],['docs/quality-gates.md','Quality gates'],['docs/sync.md','Đồng bộ Git']]]
68
79
  ];
69
80
  let lang=(localStorage.getItem('cs-docs-lang')==='vi')?'vi':'en';
70
81
  function DOCS(){ return lang==='vi'?DOCS_VI:DOCS_EN; }
package/llms.txt CHANGED
@@ -1,20 +1,23 @@
1
1
  # CyberSkill Design System
2
2
 
3
- > HTML-first, Vietnamese-first design system, LAUNCHED **v1.1.0**; current **v1.3.8**. Immutable anchors: Umber #45210E · Ochre #F4BA17. Four independent axes — Theme (light · dark · system) × Element (Ngũ Hành, 15 variants) × Language (EN · VI) × Style (`data-cs-style` — sole pack **liquid-glass**; absent ≡ default). It ships 106 components / 122 exports, 84 copyable templates (EN·VN for emails + team/legal/finance; client/media collateral EN-first), and tokens in CSS + JSON + ESM + W3C DTCG + native mirrors. This file is the agent/tool front door: it maps each audience to the format it should consume. npm package name is **`@cyberskill/design`** (not `@cyberskill/react`). Release signal: tip SHA + [docs/release-notes.md](docs/release-notes.md) — VERSION **1.3.8**, no CHANGELOG.
3
+ > HTML-first, Vietnamese-first design system, current **v1.3.10** (first LAUNCH **v1.1.0**). Immutable anchors: Umber #45210E · Ochre #F4BA17. Four independent axes — Theme (light · dark · system) × Element (Ngũ Hành, 15 variants) × Language (EN · VI) × Style (`data-cs-style` — sole pack **liquid-glass**; absent ≡ default). It ships 106 components / 122 exports, 84 copyable templates (EN·VN for emails + team/legal/finance; client/media collateral EN-first), and tokens in CSS + JSON + ESM + W3C DTCG + native mirrors. This file is the agent/tool front door: it maps each **capability** to the format it should consume. npm package name is **`@cyberskill/design`** (not `@cyberskill/react`). Release signal: tip SHA + [docs/release-notes.md](docs/release-notes.md) — VERSION **1.3.10**, no CHANGELOG.
4
4
 
5
- The portable contract covers browser and bundler entry points: `styles.css` · `_esm/cs.mjs` legacy · `_ds_bundle.js` · tokens work without a build step; `_esm/react.mjs` is bundler-native JSX (Next/Vite must transpile — not a bare-browser import). The DC layer (`templates/**/*.dc.html`) is **Claude Design / authoring-environment-only**. **Google Stitch must not treat `*.dc.html` as source of truth** — use `DESIGN.md`, DTCG, `styles.css`, kitchen-sink, and `.cs-*` static HTML instead. Dual path: [docs/consuming.md](docs/consuming.md). The full non-negotiables list lives in `CONTRIBUTING.md` and `docs/conventions.md`.
5
+ The portable contract covers browser and bundler entry points: `styles.css` · `_esm/cs.mjs` legacy · `_ds_bundle.js` · tokens work without a build step; `_esm/react.mjs` is bundler-native JSX (Next/Vite must transpile — not a bare-browser import). The DC layer (`templates/**/*.dc.html`) needs a **Design Components compiler**. **Google Stitch must not treat `*.dc.html` as source of truth** — use `DESIGN.md`, DTCG, `styles.css`, kitchen-sink, and `.cs-*` static HTML instead. Dual path: [docs/consuming.md](docs/consuming.md). The full non-negotiables list lives in `CONTRIBUTING.md` and `docs/doctrine.md`. Operator docs are published on the Storybook **Docs** sidebar at `design.cyberskill.world`.
6
6
 
7
7
  ## Consume by audience
8
8
 
9
- - **Claude Code** → [SKILL.md](SKILL.md) first, then [README.md](README.md): compose with `styles.css` + bundler `_esm/react.mjs` / legacy `_esm/cs.mjs` / `_ds_bundle.js` (prefix resolve). Optional DC templates only when the session has the compiler. Gates/`_audit/` need a full clone.
10
- - **Google Stitch** → [DESIGN.md](DESIGN.md) first, then this file + [tokens/tokens.dtcg.json](tokens/tokens.dtcg.json): generate **static** UI. Do **not** open or rewrite `templates/**/*.dc.html` as if they were plain HTML.
9
+ - **DC-capable authoring** (compiler present — e.g. Claude Design, Claude Code with a full clone) → [SKILL.md](SKILL.md) first, then [README.md](README.md): compose with `styles.css` + bundler `_esm/react.mjs` / legacy `_esm/cs.mjs` / `_ds_bundle.js` (prefix resolve). Optional DC templates only when the session has the compiler. Gates/`_audit/` need a full clone.
10
+ - **Static / open-spec** (e.g. Google Stitch) → [DESIGN.md](DESIGN.md) first, then this file + [tokens/tokens.dtcg.json](tokens/tokens.dtcg.json): generate **static** UI. Do **not** open or rewrite `templates/**/*.dc.html` as if they were plain HTML.
11
+ - **Designers** → Storybook at `design.cyberskill.world` (`/` / `npm run storybook`): Foundations, Components, Docs, axis toolbar.
12
+ - **Implementers (npm / Next / Vite)** → [docs/consuming.md](docs/consuming.md) + default `@cyberskill/design` React entry.
13
+ - **Maintainers** → [docs/doctrine.md](docs/doctrine.md) + [docs/quality-gates.md](docs/quality-gates.md).
11
14
  - [styles.css](styles.css): any web / framework / email (Vue, Svelte, plain HTML, React) — link this one file for every `--cs-*` token, the `.cs-*` component classes, and the Liquid Glass surfaces. Framework-agnostic, no build step.
12
15
  - [_esm/react.mjs](_esm/react.mjs): **default** npm entry — `import { Button, … } from "@cyberskill/design"` (React peer; Next/Vite transpile). Also `@cyberskill/design/react`.
13
16
  - [_esm/cs.mjs](_esm/cs.mjs): browser / no-build legacy — `import { Button, … } from "@cyberskill/design/legacy"` (self-ensures React; still link `styles.css`). **Not for Next/SSR.**
14
17
  - [_ds_bundle.js](_ds_bundle.js): React (production) — `styles.css` + `<script src="_ds_bundle.js">`, then resolve the bundle global by prefix (its `_<projectId>` suffix is compiler-assigned and changes on re-import): `const CS = window[Object.keys(window).find(k => /^CyberSkillDesignSystem_/.test(k))]; const { Button, … } = CS`. Proven green by `_audit/consumer-smoke-test.html`. (Templates load via `ds-base.js`, which publishes a stable `window.CyberSkillDS` alias for the same reason.)
15
18
  - [tokens/tokens.json](tokens/tokens.json): design tools / native / token pipelines / other agents (Figma, Google Stitch, Style Dictionary) — every token grouped by category, plus theme/element override maps; also [tokens/tokens.js](tokens/tokens.js) (ESM) and [tokens/tokens.dtcg.json](tokens/tokens.dtcg.json) (**W3C DTCG** format for Tokens Studio for Figma / Style Dictionary). This is the canonical cross-tool contract.
16
19
  - [DESIGN.md](DESIGN.md): agents/tools that read a root DESIGN.md (Google Stitch open-spec style) — **this repo's** generated file with the brand doctrine, every token value (light + dark), and the component/template inventory. Generated from the DTCG source by `npm run build:design-md`; the `design-md-parity` gate pins it — do not hand-edit.
17
- - [templates/](templates/): Design Components (`templates/**/*.dc.html`) + the compiler (tweaks, `x-import`, `@dsCard` cards) for **Claude Design** only. Stitch and other non-DC tools: [templates/kitchen-sink.html](templates/kitchen-sink.html) + `.cs-*` / [examples/static-hello/](examples/static-hello/) — **not** `*.dc.html`.
20
+ - [templates/](templates/): Design Components (`templates/**/*.dc.html`) + the compiler (tweaks, `x-import`, `@dsCard` cards) for **DC-capable authoring** only. Stitch and other non-DC tools: [templates/kitchen-sink.html](templates/kitchen-sink.html) + `.cs-*` / [examples/static-hello/](examples/static-hello/) — **not** `*.dc.html`.
18
21
 
19
22
  ## Key files
20
23
 
@@ -28,7 +31,7 @@ The portable contract covers browser and bundler entry points: `styles.css` · `
28
31
  - [templates/](templates/): 84 copyable starting points (`.dc.html`); `email-safe/` send-ready emails; `kitchen-sink.html`; `playground.html`
29
32
  - [guidelines/](guidelines/): specimen cards + `atomic-view.html` (portable component grid) — host product surface is Storybook at `/`
30
33
  - [examples/static-hello/](examples/static-hello/): zero-install static consumer (Stitch / plain HTML)
31
- - [examples/npm-hello/](examples/npm-hello/): first registry **browser** consumer — `@cyberskill/design@1.3.8` legacy entry (Lumi · Hỏa · plasma); Status Hub teams swap to `thuy`; Next/SSR apps use default `@cyberskill/design` React entry instead
34
+ - [examples/npm-hello/](examples/npm-hello/): first registry **browser** consumer — `@cyberskill/design@1.3.10` legacy entry (Lumi · Hỏa · plasma); Status Hub teams swap to `thuy`; Next/SSR apps use default `@cyberskill/design` React entry instead
32
35
  - [examples/native/](examples/native/): SwiftUI / Compose / Flutter sample apps + store scaffolds — Compose is **Android Studio**-first (no committed `gradlew`; see `examples/native/README.md`)
33
36
  - [ui_kits/](ui_kits/): product recreations — status-hub · website · deck
34
37
  - [fonts/](fonts/): self-hosted Be Vietnam Pro (UI) + Space Grotesk (opt-in display, `--cs-font-family-display`) + JetBrains Mono woff2
@@ -37,12 +40,15 @@ The portable contract covers browser and bundler entry points: `styles.css` · `
37
40
  - [DESIGN.md](DESIGN.md): generated open-spec surface (doctrine + tokens + inventory) for Stitch-style consumers — pinned to DTCG by the design-md-parity gate
38
41
  - [SKILL.md](SKILL.md): agent entry — hard rules + fast orientation
39
42
  - [CONTRIBUTING.md](CONTRIBUTING.md): one-page onboarding for extending the system
40
- - [VERSION](VERSION): pinned 1.3.8 (matches [package.json](package.json))
43
+ - [docs/doctrine.md](docs/doctrine.md): expansion rule, verification depth, immutables
44
+ - [VERSION](VERSION): pinned 1.3.10 (matches [package.json](package.json))
41
45
 
42
46
  ## Docs — consumers
43
47
 
44
- - [docs/consuming.md](docs/consuming.md): adopting & upgrading, Claude Code vs Stitch dual path, package name `@cyberskill/design`; first registry install at [examples/npm-hello/](examples/npm-hello/) (Lumi · Hỏa · plasma); native mirrors at [examples/native/](examples/native/) (SwiftUI / Compose / Flutter samples)
45
- - [docs/release-notes.md](docs/release-notes.md): curated product highlights (not a changelog) — includes `@cyberskill/design@1.3.8` Trusted Publishing / grant pointer
48
+ Published on Storybook **Docs** (`design.cyberskill.world`) and in [docs/viewer.html](docs/viewer.html) (EN|VI).
49
+
50
+ - [docs/consuming.md](docs/consuming.md): adopting & upgrading, DC-capable vs static dual path, package name `@cyberskill/design`; first registry install at [examples/npm-hello/](examples/npm-hello/) (Lumi · Hỏa · plasma); native mirrors at [examples/native/](examples/native/) (SwiftUI / Compose / Flutter samples)
51
+ - [docs/release-notes.md](docs/release-notes.md): curated product highlights (not a changelog) — includes `@cyberskill/design@1.3.10` Trusted Publishing / grant pointer
46
52
  - [docs/consumer-grant.md](docs/consumer-grant.md): written npm grant (CyberSkill portfolio; UNLICENSED)
47
53
  - [docs/conventions.md](docs/conventions.md): authoring rules (naming grammar, the four axes)
48
54
  - [docs/design-styles.md](docs/design-styles.md): the live styling axes and the fixed liquid-glass treatment
@@ -51,13 +57,14 @@ The portable contract covers browser and bundler entry points: `styles.css` · `
51
57
  - [docs/template-schema-v2.md](docs/template-schema-v2.md): typed content-slot spec for templates
52
58
  - [docs/deploy.md](docs/deploy.md): deploying the live site (Vercel / VPS / any static host)
53
59
  - [docs/live-hub.md](docs/live-hub.md): Storybook at `/` is the product surface; surface map
54
- - [docs/storybook.md](docs/storybook.md): host Storybook product surface at `/`
60
+ - [docs/storybook.md](docs/storybook.md): host Storybook product surface at `/` — Docs sidebar is the published reading surface for operator docs
55
61
  - [docs/figma.md](docs/figma.md): Figma / Tokens Studio import recipe
56
62
  - [docs/vi/](docs/vi/): Vietnamese mirror of every operator-facing `docs/*.md`
57
63
  - [docs/viewer.html](docs/viewer.html): reader UI (EN|VI toggle for `docs/*.md`)
58
64
 
59
65
  ## Docs — maintainers
60
66
 
67
+ - [docs/doctrine.md](docs/doctrine.md): expansion, verification, immutables
61
68
  - [docs/decisions.md](docs/decisions.md): recorded owner decisions + open maintainer tasks
62
69
  - [docs/ci-cd.md](docs/ci-cd.md): CI/CD automation — workflow, headless gate runner, provenance pre-check
63
70
  - [docs/quality-gates.md](docs/quality-gates.md): benchmark reference — every quality gate, its assertion, pass criterion, where it runs
@@ -66,7 +73,7 @@ The portable contract covers browser and bundler entry points: `styles.css` · `
66
73
 
67
74
  ## Non-negotiables
68
75
 
69
- - [CONTRIBUTING.md](CONTRIBUTING.md): the full non-negotiables list (with `docs/conventions.md`)
76
+ - [CONTRIBUTING.md](CONTRIBUTING.md): the full non-negotiables list (with `docs/doctrine.md` and `docs/conventions.md`)
70
77
  - [tokens/colors.css](tokens/colors.css): immutable Umber/Ochre anchors · one accent per surface
71
78
  - [base/a11y.css](base/a11y.css): APCA Lc ≥ 75 body text · ≥44px touch targets · 3px ochre focus ring · honour `prefers-reduced-motion`/`prefers-contrast`
72
79
  - [docs/conventions.md](docs/conventions.md): Vietnamese-first bilingual — every UI string ships an EN + VN pair, diacritics preserved
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyberskill/design",
3
- "version": "1.3.8",
3
+ "version": "1.3.10",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -95,7 +95,7 @@
95
95
  "test:nav-model": "node _audit/ci/test-nav-model.mjs",
96
96
  "test:ui-contracts": "node _audit/ci/test-health-tokens-contract.mjs",
97
97
  "test:form-paths": "node _audit/ci/test-form-paths.mjs",
98
- "test:unit": "node _audit/ci/test-nav-model.mjs && node _audit/ci/test-health-tokens-contract.mjs && node _audit/ci/test-docs-consistency.mjs && node _audit/ci/test-base-hex-allowlist.mjs && node _audit/ci/test-form-paths.mjs && node _audit/ci/test-storybook-contract.mjs && node _audit/ci/test-axe-coverage.mjs && node _audit/ci/test-figma-push-helpers.mjs && node _audit/ci/test-native-samples.mjs && node _audit/ci/test-code-connect.mjs && node _audit/ci/test-npm-publish.mjs && node _audit/ci/test-subtree-consume.mjs && node _audit/ci/test-react-entry.mjs && node _audit/ci/test-element-packs.mjs && node _audit/ci/test-i18n-builtins.mjs && node _audit/ci/test-format-currency.mjs && node _audit/ci/check-manifest-coverage.mjs && node _audit/ci/ci-verdict.mjs --selftest && node _audit/ci/test-pack-hygiene.mjs && npm run version:stamp:check && node _audit/ci/test-docs-lang-parity.mjs && node _audit/ci/test-email-safe.mjs && node _audit/ci/test-prop-parity.mjs",
98
+ "test:unit": "node _audit/ci/test-nav-model.mjs && node _audit/ci/test-health-tokens-contract.mjs && node _audit/ci/test-docs-consistency.mjs && node _audit/ci/test-base-hex-allowlist.mjs && node _audit/ci/test-form-paths.mjs && node _audit/ci/test-storybook-contract.mjs && node _audit/ci/test-axe-coverage.mjs && node _audit/ci/test-figma-push-helpers.mjs && node _audit/ci/test-native-samples.mjs && node _audit/ci/test-code-connect.mjs && node _audit/ci/test-npm-publish.mjs && node _audit/ci/test-subtree-consume.mjs && node _audit/ci/test-react-entry.mjs && node _audit/ci/test-element-packs.mjs && node _audit/ci/test-i18n-builtins.mjs && node _audit/ci/test-format-currency.mjs && node _audit/ci/check-manifest-coverage.mjs && node _audit/ci/ci-verdict.mjs --selftest && node _audit/ci/test-pack-hygiene.mjs && npm run version:stamp:check && node _audit/ci/test-docs-lang-parity.mjs && node _audit/ci/test-docs-storybook-coverage.mjs && node _audit/ci/test-docs-link-check.mjs && node _audit/ci/test-email-safe.mjs && node _audit/ci/test-prop-parity.mjs",
99
99
  "test:audit-probe": "node _audit/ci/audit-probe-suite.mjs",
100
100
  "test:element-packs": "node _audit/ci/test-element-packs.mjs",
101
101
  "test:react-entry": "node _audit/ci/test-react-entry.mjs",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "system": "CyberSkill Design System",
4
- "version": "1.3.8",
4
+ "version": "1.3.10",
5
5
  "note": "OKLCH seed contract for the 15 element packs × light/dark (30 sets). SoT for scripts/generate-element-packs.mjs — do not hand-edit tokens/elements.css. Owner bar (Jul 2026): soft/middle/deep clearly distinct; middle intensity synced across elements; harmonious role palettes; light↔dark same-hue identity. Public variant names unchanged."
6
6
  },
7
7
  "intensity": {
@@ -1,6 +1,6 @@
1
1
  // CyberSkill Design System — native design tokens.
2
2
  // GENERATED from tokens/tokens.dtcg.json — do not hand-edit; regenerate on token change.
3
- // release v1.3.8 · source sha256 5d7d5587bec9b99e…
3
+ // release v1.3.10 · source sha256 1b606c94a5612b02…
4
4
  // conversions: rem→px at 16 · em→…Em relative doubles · rgba alpha→ARGB byte (round(a*255)) · durations in ms
5
5
  // dark element packs: see $extensions.overrides.elementsDark
6
6
  // provenance: tokens/provenance.json · parity gate: _audit/token-pipeline-test.html
@@ -1,6 +1,6 @@
1
1
  // CyberSkill Design System — native design tokens.
2
2
  // GENERATED from tokens/tokens.dtcg.json — do not hand-edit; regenerate on token change.
3
- // release v1.3.8 · source sha256 5d7d5587bec9b99e…
3
+ // release v1.3.10 · source sha256 1b606c94a5612b02…
4
4
  // conversions: rem→px at 16 · em→…Em relative doubles · rgba alpha→ARGB byte (round(a*255)) · durations in ms
5
5
  // dark element packs: see $extensions.overrides.elementsDark
6
6
  // provenance: tokens/provenance.json · parity gate: _audit/token-pipeline-test.html
@@ -1,6 +1,6 @@
1
1
  // CyberSkill Design System — native design tokens.
2
2
  // GENERATED from tokens/tokens.dtcg.json — do not hand-edit; regenerate on token change.
3
- // release v1.3.8 · source sha256 5d7d5587bec9b99e…
3
+ // release v1.3.10 · source sha256 1b606c94a5612b02…
4
4
  // conversions: rem→px at 16 · em→…Em relative doubles · rgba alpha→ARGB byte (round(a*255)) · durations in ms
5
5
  // dark element packs: see $extensions.overrides.elementsDark
6
6
  // provenance: tokens/provenance.json · parity gate: _audit/token-pipeline-test.html
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "system": "CyberSkill Design System",
3
- "release": "1.3.8",
3
+ "release": "1.3.10",
4
4
  "source": "tokens/tokens.dtcg.json",
5
- "sourceSha256": "5d7d5587bec9b99e720da1f1ceba6a6804ccc0547243ae47897b6e34cc0f03ce",
5
+ "sourceSha256": "1b606c94a5612b02a1c9f0e48ef12443e5c5f7da653ade97c64fe1f520ba532a",
6
6
  "dtcgStamp": {
7
- "version": "1.3.8",
7
+ "version": "1.3.10",
8
8
  "generated": "2026-07-23"
9
9
  },
10
10
  "conversions": {
@@ -36,17 +36,17 @@
36
36
  {
37
37
  "file": "tokens/native/CSTokens.swift",
38
38
  "lang": "swift",
39
- "sha256": "dcabf92440dc19358959f30db2b9899a43da78c57cc9c6ca81e18e506497119f"
39
+ "sha256": "55d1be1a5a23ba75230d6110bff2d17c9fe88cd3f158ac9f992e94950a792edc"
40
40
  },
41
41
  {
42
42
  "file": "tokens/native/CSTokens.kt",
43
43
  "lang": "kotlin",
44
- "sha256": "9a2599519538b6aeaded59c09076244501e09b9b48100ea3caf570391d3cd5a3"
44
+ "sha256": "1b0ff7f07cdff7f5134169e2a421f0d63660c3cac532c198feaed7ef0532108d"
45
45
  },
46
46
  {
47
47
  "file": "tokens/native/cs_tokens.dart",
48
48
  "lang": "dart",
49
- "sha256": "4b012288aee948f63a59bd056a53cc04a82ee97a754fdda5d7e176ca9cdef0d4"
49
+ "sha256": "e312abf70155c54cc9f0369c08f896f8eb230965146804a22a979c159df7b474"
50
50
  }
51
51
  ]
52
52
  }
@@ -3,7 +3,7 @@
3
3
  "$extensions": {
4
4
  "com.cyberskill": {
5
5
  "system": "CyberSkill Design System",
6
- "version": "1.3.8",
6
+ "version": "1.3.10",
7
7
  "generated": "2026-07-23",
8
8
  "source": "tokens/tokens.json",
9
9
  "note": "Scope overrides (dark/system theme · 15 element×variant packs) are carried under $extensions.overrides keyed by CSS selector — apply the matching selector on :root/ancestor to activate.",
package/tokens/tokens.js CHANGED
@@ -1,8 +1,8 @@
1
- // CyberSkill design tokens — generated from tokens/*.css (v1.3.8). Do not edit by hand.
1
+ // CyberSkill design tokens — generated from tokens/*.css (v1.3.10). Do not edit by hand.
2
2
  export const tokens = {
3
3
  "$meta": {
4
4
  "system": "CyberSkill Design System",
5
- "version": "1.3.8",
5
+ "version": "1.3.10",
6
6
  "generated": "2026-07-23",
7
7
  "note": "Generated from tokens/*.css. Root grouped by category; theme/element scopes carry overrides only. Regenerate after any token change (see docs/conventions.md)."
8
8
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "system": "CyberSkill Design System",
4
- "version": "1.3.8",
4
+ "version": "1.3.10",
5
5
  "generated": "2026-07-23",
6
6
  "note": "Generated from tokens/*.css. Root grouped by category; theme/element scopes carry overrides only. Regenerate after any token change (see docs/conventions.md)."
7
7
  },