@cyberskill/design 1.0.0 → 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.
- package/DESIGN.md +10 -9
- package/README.md +31 -28
- package/SKILL.md +13 -9
- package/VERSION +1 -1
- package/_ds_bundle.js +660 -202
- package/_ds_manifest.json +1 -1
- package/_esm/cs.mjs +14 -8
- package/_esm/react.d.ts +216 -0
- package/_esm/react.mjs +114 -0
- package/base/collections.css +31 -0
- package/base/components.css +3 -0
- package/base/data.css +33 -0
- package/base/forms.css +8 -0
- package/base/interaction.css +1 -0
- package/base/typography.css +6 -0
- package/components/_i18n/strings.js +8 -4
- package/components/ai/ai-conversation.card.html +2 -2
- package/components/ai/ai-lumi.card.html +2 -2
- package/components/ai/ai.card.html +2 -2
- package/components/brand/brand.card.html +2 -2
- package/components/button/buttons.card.html +2 -2
- package/components/data/AspectRatio.d.ts +16 -0
- package/components/data/AspectRatio.figma.tsx +12 -0
- package/components/data/AspectRatio.jsx +16 -0
- package/components/data/AspectRatio.prompt.md +7 -0
- package/components/data/Collapsible.d.ts +21 -0
- package/components/data/Collapsible.figma.tsx +12 -0
- package/components/data/Collapsible.jsx +49 -0
- package/components/data/Collapsible.prompt.md +7 -0
- package/components/data/Image.d.ts +4 -0
- package/components/data/Image.prompt.md +2 -2
- package/components/data/Item.d.ts +26 -0
- package/components/data/Item.figma.tsx +12 -0
- package/components/data/Item.jsx +63 -0
- package/components/data/Item.prompt.md +10 -0
- package/components/data/ScrollArea.d.ts +16 -0
- package/components/data/ScrollArea.figma.tsx +12 -0
- package/components/data/ScrollArea.jsx +25 -0
- package/components/data/ScrollArea.prompt.md +7 -0
- package/components/data/collections.card.html +15 -4
- package/components/data/data.card.html +15 -4
- package/components/datatable/datatable.card.html +2 -2
- package/components/dialog/dialog.card.html +2 -2
- package/components/feedback/feedback-2.card.html +2 -2
- package/components/feedback/feedback.card.html +2 -2
- package/components/forms/Cascader.jsx +5 -3
- package/components/forms/Editor.prompt.md +1 -1
- package/components/forms/InputGroup.d.ts +4 -0
- package/components/forms/InputGroup.jsx +38 -8
- package/components/forms/InputGroup.prompt.md +3 -3
- package/components/forms/NativeSelect.d.ts +22 -0
- package/components/forms/NativeSelect.figma.tsx +12 -0
- package/components/forms/NativeSelect.jsx +56 -0
- package/components/forms/NativeSelect.prompt.md +10 -0
- package/components/forms/NumberField.d.ts +5 -0
- package/components/forms/NumberField.jsx +51 -7
- package/components/forms/NumberField.prompt.md +2 -2
- package/components/forms/SegmentedControl.jsx +1 -1
- package/components/forms/TagInput.d.ts +3 -0
- package/components/forms/TagInput.jsx +62 -20
- package/components/forms/TagInput.prompt.md +2 -2
- package/components/forms/forms-2.card.html +2 -2
- package/components/forms/forms.card.html +5 -4
- package/components/icon/Icon.prompt.md +1 -1
- package/components/icon/icon.card.html +2 -2
- package/components/logo/Logo.jsx +2 -1
- package/components/logo/logo.card.html +2 -2
- package/components/navigation/Menu.jsx +14 -1
- package/components/navigation/navigation.card.html +2 -2
- package/components/navigation/shell.card.html +2 -2
- package/components/overlays/AlertDialog.d.ts +29 -0
- package/components/overlays/AlertDialog.figma.tsx +12 -0
- package/components/overlays/AlertDialog.jsx +142 -0
- package/components/overlays/AlertDialog.prompt.md +12 -0
- package/components/overlays/Drawer.jsx +1 -1
- package/components/overlays/Popconfirm.jsx +14 -1
- package/components/overlays/Popover.jsx +14 -1
- package/components/overlays/alertdialog.card.html +42 -0
- package/components/overlays/overlays.card.html +2 -2
- package/components/textfield/textfield.card.html +2 -2
- package/docs/benchmark-rubric.md +46 -0
- package/docs/ci-cd.md +17 -11
- package/docs/consumer-grant.md +37 -0
- package/docs/consuming.md +45 -16
- package/docs/contrast-report.md +91 -103
- package/docs/conventions.md +12 -9
- package/docs/decisions.md +33 -10
- package/docs/deploy.md +1 -1
- package/docs/design-styles.md +26 -8
- package/docs/figma.md +3 -3
- package/docs/live-hub.md +5 -3
- package/docs/products.md +13 -11
- package/docs/quality-gates.md +35 -21
- package/docs/release-notes.md +13 -3
- package/docs/status/assets/favicon.svg +5 -0
- package/docs/status/assets/status-legacy.css +399 -0
- package/docs/status/assets/status-legacy.js +505 -0
- package/docs/status/assets/status.css +644 -0
- package/docs/status/assets/status.js +1308 -0
- package/docs/status/data/status-feed.json +1 -0
- package/docs/status/data/task/TASK-REL-001.js +1 -0
- package/docs/status/index.html +45 -0
- package/docs/status/roadmap.html +4 -0
- package/docs/status/status-legacy.html +121 -0
- package/docs/storybook.md +5 -4
- package/docs/sync.md +3 -2
- package/docs/tasks/BACKLOG.md +25 -0
- package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +55 -0
- package/docs/template-schema-v2.md +15 -3
- package/docs/vi/benchmark-rubric.md +46 -0
- package/docs/vi/ci-cd.md +17 -11
- package/docs/vi/consumer-grant.md +37 -0
- package/docs/vi/consuming.md +45 -16
- package/docs/vi/contrast-report.md +94 -106
- package/docs/vi/conventions.md +12 -9
- package/docs/vi/decisions.md +33 -10
- package/docs/vi/deploy.md +1 -1
- package/docs/vi/design-styles.md +26 -8
- package/docs/vi/figma.md +3 -3
- package/docs/vi/live-hub.md +5 -3
- package/docs/vi/products.md +13 -11
- package/docs/vi/quality-gates.md +35 -21
- package/docs/vi/release-notes.md +18 -8
- package/docs/vi/storybook.md +5 -4
- package/docs/vi/sync.md +3 -2
- package/docs/vi/template-schema-v2.md +15 -3
- package/docs/viewer.html +2 -2
- package/fonts/spacegrotesk-var-latin-ext.woff2 +0 -0
- package/fonts/spacegrotesk-var-latin.woff2 +0 -0
- package/fonts/spacegrotesk-var-vietnamese.woff2 +0 -0
- package/guidelines/atomic-view.html +40 -27
- package/guidelines/elements-geometry.html +69 -0
- package/guidelines/elements-variants.html +17 -17
- package/guidelines/type-families.html +16 -10
- package/llms.txt +17 -11
- package/package.json +38 -16
- package/styles.css +1 -0
- package/templates/ai-cluster-demo.html +29 -14
- package/templates/app-shell/support.js +4 -4
- package/templates/article/content-schema.json +6 -0
- package/templates/article/support.js +4 -4
- package/templates/auth/support.js +4 -4
- package/templates/bod-deck/support.js +4 -4
- package/templates/bod-investor-update/support.js +4 -4
- package/templates/bod-memo/support.js +4 -4
- package/templates/bod-minutes/content-schema.json +12 -0
- package/templates/bod-minutes/support.js +4 -4
- package/templates/bod-report/support.js +4 -4
- package/templates/bod-resolution/support.js +4 -4
- package/templates/culture-event-invite/support.js +4 -4
- package/templates/dashboard/support.js +4 -4
- package/templates/delivery-change-note/support.js +4 -4
- package/templates/delivery-kickoff/support.js +4 -4
- package/templates/delivery-qbr-deck/support.js +4 -4
- package/templates/delivery-runbook/content-schema.json +6 -0
- package/templates/delivery-runbook/support.js +4 -4
- package/templates/delivery-status-email/support.js +4 -4
- package/templates/doc-style-guide/DocStyleGuide.dc.html +2 -2
- package/templates/doc-style-guide/support.js +4 -4
- package/templates/doc-suite-index/support.js +4 -4
- package/templates/doc-templates/DocTemplates.dc.html +1 -1
- package/templates/doc-templates/support.js +4 -4
- package/templates/email/support.js +4 -4
- package/templates/email-safe/README.md +17 -4
- package/templates/email-safe/email-launch.html +3 -3
- package/templates/email-safe/email-newsletter.html +1 -1
- package/templates/finance-dunning-email/support.js +4 -4
- package/templates/finance-expense-report/support.js +4 -4
- package/templates/finance-invoice/support.js +4 -4
- package/templates/finance-quote/support.js +4 -4
- package/templates/hr-announcement/support.js +4 -4
- package/templates/hr-interview-kit/content-schema.json +12 -0
- package/templates/hr-interview-kit/support.js +4 -4
- package/templates/hr-offboarding/content-schema.json +12 -0
- package/templates/hr-offboarding/support.js +4 -4
- package/templates/hr-performance-review/content-schema.json +12 -0
- package/templates/hr-performance-review/support.js +4 -4
- package/templates/hr-pip/content-schema.json +12 -0
- package/templates/hr-pip/support.js +4 -4
- package/templates/legal-msa/content-schema.json +16 -0
- package/templates/legal-msa/support.js +4 -4
- package/templates/legal-sow/support.js +4 -4
- package/templates/marketing-campaign-brief/support.js +4 -4
- package/templates/marketing-case-study/support.js +4 -4
- package/templates/marketing-launch/support.js +4 -4
- package/templates/marketing-newsletter/support.js +4 -4
- package/templates/marketing-page/content-schema.json +0 -1
- package/templates/marketing-page/support.js +4 -4
- package/templates/marketing-press-release/support.js +4 -4
- package/templates/marketing-social-kit/support.js +4 -4
- package/templates/playground.html +8 -4
- package/templates/sales-one-pager/support.js +4 -4
- package/templates/sales-proposal-deck/support.js +4 -4
- package/templates/settings/Settings.dc.html +26 -14
- package/templates/settings/content-schema.json +36 -0
- package/templates/settings/support.js +4 -4
- package/templates/slide-deck/support.js +4 -4
- package/templates/team-meeting-agenda/content-schema.json +16 -0
- package/templates/team-meeting-agenda/support.js +4 -4
- package/templates/tech-incident-report/support.js +4 -4
- package/templates/tech-release-notes/support.js +4 -4
- package/templates/tech-retro/content-schema.json +12 -0
- package/templates/tech-retro/support.js +4 -4
- package/templates/tech-rfc/content-schema.json +6 -0
- package/templates/tech-rfc/support.js +4 -4
- package/templates/vn-appointment-transfer/support.js +4 -4
- package/templates/vn-certificate-of-employment/support.js +4 -4
- package/templates/vn-code-of-conduct/support.js +4 -4
- package/templates/vn-compensation-regulation/support.js +4 -4
- package/templates/vn-contract-amendment/support.js +4 -4
- package/templates/vn-contractor-agreement/support.js +4 -4
- package/templates/vn-data-protection-policy/support.js +4 -4
- package/templates/vn-disciplinary-case-file/support.js +4 -4
- package/templates/vn-disciplinary-schedule/content-schema.json +15 -0
- package/templates/vn-disciplinary-schedule/support.js +4 -4
- package/templates/vn-employee-request/support.js +4 -4
- package/templates/vn-exit-handover/support.js +4 -4
- package/templates/vn-foreign-employee-pack/support.js +4 -4
- package/templates/vn-grassroots-democracy/support.js +4 -4
- package/templates/vn-infosec-policy/support.js +4 -4
- package/templates/vn-internal-labor-regulations/support.js +4 -4
- package/templates/vn-internship-agreement/support.js +4 -4
- package/templates/vn-job-description/support.js +4 -4
- package/templates/vn-labor-contract/support.js +4 -4
- package/templates/vn-labour-management-book/content-schema.json +15 -0
- package/templates/vn-labour-management-book/support.js +4 -4
- package/templates/vn-mutual-nda/support.js +4 -4
- package/templates/vn-ndnca-ip/support.js +4 -4
- package/templates/vn-offer-letter/support.js +4 -4
- package/templates/vn-onboarding-checklist/support.js +4 -4
- package/templates/vn-pdpl-consent/support.js +4 -4
- package/templates/vn-performance-evaluation-regulation/support.js +4 -4
- package/templates/vn-performance-review-form/support.js +4 -4
- package/templates/vn-phantom-stock/support.js +4 -4
- package/templates/vn-probation-contract/support.js +4 -4
- package/templates/vn-receipt-acknowledgement/content-schema.json +15 -0
- package/templates/vn-receipt-acknowledgement/support.js +4 -4
- package/templates/vn-remote-work-policy/support.js +4 -4
- package/templates/vn-resignation-letter/support.js +4 -4
- package/templates/vn-salary-scale/content-schema.json +15 -0
- package/templates/vn-salary-scale/support.js +4 -4
- package/templates/vn-sow-appendix/support.js +4 -4
- package/templates/vn-termination-decision/support.js +4 -4
- package/templates/vn-total-rewards-appendix/support.js +4 -4
- package/templates/vn-training-commitment/support.js +4 -4
- package/templates/vn-travel-expense-policy/support.js +4 -4
- package/tokens/element-seeds.json +112 -0
- package/tokens/elements.css +274 -187
- package/tokens/fonts.css +12 -3
- package/tokens/native/CSTokens.kt +84 -68
- package/tokens/native/CSTokens.swift +84 -68
- package/tokens/native/cs_tokens.dart +84 -68
- package/tokens/provenance.json +9 -9
- package/tokens/styles.css +15 -0
- package/tokens/tokens.dtcg.json +258 -233
- package/tokens/tokens.js +168 -167
- package/tokens/tokens.json +167 -166
- package/tokens/typography.css +9 -1
- package/ui_kits/status-hub/README.md +1 -2
- package/ui_kits/status-hub/index.html +2 -2
- package/ui_kits/status-hub/settings.html +6 -3
- package/ui_kits/website/chat.html +2 -2
- package/ui_kits/website/index.html +2 -2
- package/ui_kits/status-hub/identity-lab.html +0 -134
package/docs/contrast-report.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Contrast report — elemental pairings (APCA)
|
|
2
2
|
|
|
3
|
-
Generated 2026-07-
|
|
3
|
+
Generated 2026-07-27 · sweep at VERSION 1.1.0 pin.
|
|
4
4
|
|
|
5
5
|
**Doctrine encoded by this sweep:** text sits on `-bright` or `-tint`, never on the mid-tone `-accent` — at any size. The accent is for bars, borders, progress fills, and non-text fills only. (Rule stated in `tokens/elements.css` and conventions.)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Packs are generated from `tokens/element-seeds.json` (soft / middle / deep ladder, light↔dark hue lock). Geometry gate: `_audit/element-geometry.html`.
|
|
8
8
|
| Scope | Pairing | fg / bg | Lc | Verdict |
|
|
9
9
|
|---|---|---|---|---|
|
|
10
10
|
| root (Thổ default) | text-accent on white (bold labels) | #6E3B0E / #FFFFFF | 90.7 | ✓ |
|
|
@@ -16,110 +16,98 @@ Token nudges applied for v2.0: bright lightened for clay, hoa, lava, plasma, th
|
|
|
16
16
|
| tho | text-accent on tint (bold labels) | #6E3B0E / #FBF4E9 | 84.6 | ✓ |
|
|
17
17
|
| tho | accent-bright on ink (headings) | #F4BA17 / #45210E | 66.3 | ✓ |
|
|
18
18
|
| tho | accent-on on accent-bright (CTA text) | #45210E / #F4BA17 | 66.3 | ✓ |
|
|
19
|
-
| tho | accent-bright on dark panel (dark labels) | #
|
|
20
|
-
| tho
|
|
21
|
-
| tho
|
|
22
|
-
| tho
|
|
23
|
-
| tho
|
|
24
|
-
| tho
|
|
25
|
-
| tho
|
|
26
|
-
| tho
|
|
27
|
-
| tho
|
|
28
|
-
| tho
|
|
29
|
-
| tho
|
|
30
|
-
| hoa | text-accent on white (bold labels) | #
|
|
31
|
-
| hoa | text-accent on tint (bold labels) | #
|
|
32
|
-
| hoa | accent-bright on ink (headings) | #
|
|
33
|
-
| hoa | accent-on on accent-bright (CTA text) | #
|
|
34
|
-
| hoa | accent-bright on dark panel (dark labels) | #
|
|
35
|
-
| hoa
|
|
36
|
-
| hoa
|
|
37
|
-
| hoa
|
|
38
|
-
| hoa
|
|
39
|
-
| hoa
|
|
40
|
-
| hoa
|
|
41
|
-
| hoa
|
|
42
|
-
| hoa
|
|
43
|
-
| hoa
|
|
44
|
-
| hoa
|
|
45
|
-
| thuy | text-accent on white (bold labels) | #
|
|
46
|
-
| thuy | text-accent on tint (bold labels) | #
|
|
47
|
-
| thuy | accent-bright on ink (headings) | #
|
|
48
|
-
| thuy | accent-on on accent-bright (CTA text) | #
|
|
49
|
-
| thuy | accent-bright on dark panel (dark labels) | #
|
|
50
|
-
| thuy
|
|
51
|
-
| thuy
|
|
52
|
-
| thuy
|
|
53
|
-
| thuy
|
|
54
|
-
| thuy
|
|
55
|
-
| thuy
|
|
56
|
-
| thuy
|
|
57
|
-
| thuy
|
|
58
|
-
| thuy
|
|
59
|
-
| thuy
|
|
60
|
-
| moc | text-accent on white (bold labels) | #
|
|
61
|
-
| moc | text-accent on tint (bold labels) | #
|
|
62
|
-
| moc | accent-bright on ink (headings) | #
|
|
63
|
-
| moc | accent-on on accent-bright (CTA text) | #
|
|
64
|
-
| moc | accent-bright on dark panel (dark labels) | #
|
|
65
|
-
| moc
|
|
66
|
-
| moc
|
|
67
|
-
| moc
|
|
68
|
-
| moc
|
|
69
|
-
| moc
|
|
70
|
-
| moc
|
|
71
|
-
| moc
|
|
72
|
-
| moc
|
|
73
|
-
| moc
|
|
74
|
-
| moc
|
|
75
|
-
| kim | text-accent on white (bold labels) | #
|
|
76
|
-
| kim | text-accent on tint (bold labels) | #
|
|
77
|
-
| kim | accent-bright on ink (headings) | #
|
|
78
|
-
| kim | accent-on on accent-bright (CTA text) | #
|
|
79
|
-
| kim | accent-bright on dark panel (dark labels) | #
|
|
80
|
-
| kim
|
|
81
|
-
| kim
|
|
82
|
-
| kim
|
|
83
|
-
| kim
|
|
84
|
-
| kim
|
|
85
|
-
| kim
|
|
86
|
-
| kim
|
|
87
|
-
| kim
|
|
88
|
-
| kim
|
|
89
|
-
| kim
|
|
19
|
+
| tho | accent-bright on dark panel (dark labels) | #FEC42C / #221710 | 75 | ✓ |
|
|
20
|
+
| tho · sand | text-accent on white (bold labels) | #90825E / #FFFFFF | 65.4 | ✓ |
|
|
21
|
+
| tho · sand | text-accent on tint (bold labels) | #90825E / #FBF7EA | 60.6 | ✓ |
|
|
22
|
+
| tho · sand | accent-bright on ink (headings) | #F6EBCC / #292414 | 92.3 | ✓ |
|
|
23
|
+
| tho · sand | accent-on on accent-bright (CTA text) | #292414 / #F6EBCC | 90.8 | ✓ |
|
|
24
|
+
| tho · sand | accent-bright on dark panel (dark labels) | #F6EBCC / #221710 | 93.8 | ✓ |
|
|
25
|
+
| tho · clay | text-accent on white (bold labels) | #201300 / #FFFFFF | 104.8 | ✓ |
|
|
26
|
+
| tho · clay | text-accent on tint (bold labels) | #201300 / #FFF6E7 | 100 | ✓ |
|
|
27
|
+
| tho · clay | accent-bright on ink (headings) | #DEC7A2 / #2D220E | 71.7 | ✓ |
|
|
28
|
+
| tho · clay | accent-on on accent-bright (CTA text) | #2D220E / #DEC7A2 | 71.8 | ✓ |
|
|
29
|
+
| tho · clay | accent-bright on dark panel (dark labels) | #E4CDA8 / #221710 | 76.7 | ✓ |
|
|
30
|
+
| hoa | text-accent on white (bold labels) | #B47054 / #FFFFFF | 66.2 | ✓ |
|
|
31
|
+
| hoa | text-accent on tint (bold labels) | #B47054 / #FFF4F0 | 60.9 | ✓ |
|
|
32
|
+
| hoa | accent-bright on ink (headings) | #FED3C3 / #381B10 | 82.8 | ✓ |
|
|
33
|
+
| hoa | accent-on on accent-bright (CTA text) | #381B10 / #FED3C3 | 82.1 | ✓ |
|
|
34
|
+
| hoa | accent-bright on dark panel (dark labels) | #FED3C3 / #221710 | 84.2 | ✓ |
|
|
35
|
+
| hoa · plasma | text-accent on white (bold labels) | #967C75 / #FFFFFF | 66.1 | ✓ |
|
|
36
|
+
| hoa · plasma | text-accent on tint (bold labels) | #967C75 / #FEF4F2 | 60.7 | ✓ |
|
|
37
|
+
| hoa · plasma | accent-bright on ink (headings) | #FCE6DF / #2C211E | 91.8 | ✓ |
|
|
38
|
+
| hoa · plasma | accent-on on accent-bright (CTA text) | #2C211E / #FCE6DF | 90.4 | ✓ |
|
|
39
|
+
| hoa · plasma | accent-bright on dark panel (dark labels) | #FCE6DF / #221710 | 93.2 | ✓ |
|
|
40
|
+
| hoa · lava | text-accent on white (bold labels) | #280D00 / #FFFFFF | 104.7 | ✓ |
|
|
41
|
+
| hoa · lava | text-accent on tint (bold labels) | #280D00 / #FFF4EF | 99.4 | ✓ |
|
|
42
|
+
| hoa · lava | accent-bright on ink (headings) | #F1BEA4 / #361D0F | 71 | ✓ |
|
|
43
|
+
| hoa · lava | accent-on on accent-bright (CTA text) | #361D0F / #F1BEA4 | 71.2 | ✓ |
|
|
44
|
+
| hoa · lava | accent-bright on dark panel (dark labels) | #F8C4AA / #221710 | 76.2 | ✓ |
|
|
45
|
+
| thuy | text-accent on white (bold labels) | #108EA0 / #FFFFFF | 65.8 | ✓ |
|
|
46
|
+
| thuy | text-accent on tint (bold labels) | #108EA0 / #E7FBFF | 61.2 | ✓ |
|
|
47
|
+
| thuy | accent-bright on ink (headings) | #99EEFF / #012A30 | 85.3 | ✓ |
|
|
48
|
+
| thuy | accent-on on accent-bright (CTA text) | #012A30 / #99EEFF | 84.3 | ✓ |
|
|
49
|
+
| thuy | accent-bright on dark panel (dark labels) | #99EEFF / #221710 | 87.2 | ✓ |
|
|
50
|
+
| thuy · mist | text-accent on white (bold labels) | #5A8A90 / #FFFFFF | 65.8 | ✓ |
|
|
51
|
+
| thuy · mist | text-accent on tint (bold labels) | #5A8A90 / #EBFAFC | 61.1 | ✓ |
|
|
52
|
+
| thuy · mist | accent-bright on ink (headings) | #CDF4F9 / #13282B | 93.1 | ✓ |
|
|
53
|
+
| thuy · mist | accent-on on accent-bright (CTA text) | #13282B / #CDF4F9 | 91.5 | ✓ |
|
|
54
|
+
| thuy · mist | accent-bright on dark panel (dark labels) | #CDF4F9 / #221710 | 94.7 | ✓ |
|
|
55
|
+
| thuy · ocean | text-accent on white (bold labels) | #011A21 / #FFFFFF | 104.5 | ✓ |
|
|
56
|
+
| thuy · ocean | text-accent on tint (bold labels) | #011A21 / #EAFAFF | 99.8 | ✓ |
|
|
57
|
+
| thuy · ocean | accent-bright on ink (headings) | #A8D3E0 / #10282F | 72.7 | ✓ |
|
|
58
|
+
| thuy · ocean | accent-on on accent-bright (CTA text) | #10282F / #A8D3E0 | 72.6 | ✓ |
|
|
59
|
+
| thuy · ocean | accent-bright on dark panel (dark labels) | #ABD6E3 / #221710 | 76.1 | ✓ |
|
|
60
|
+
| moc | text-accent on white (bold labels) | #629122 / #FFFFFF | 64.9 | ✓ |
|
|
61
|
+
| moc | text-accent on tint (bold labels) | #629122 / #EFFCE3 | 60.5 | ✓ |
|
|
62
|
+
| moc | accent-bright on ink (headings) | #C5ED9C / #182A00 | 85.2 | ✓ |
|
|
63
|
+
| moc | accent-on on accent-bright (CTA text) | #182A00 / #C5ED9C | 84.2 | ✓ |
|
|
64
|
+
| moc | accent-bright on dark panel (dark labels) | #C5ED9C / #221710 | 86.9 | ✓ |
|
|
65
|
+
| moc · bamboo | text-accent on white (bold labels) | #7C8965 / #FFFFFF | 64.9 | ✓ |
|
|
66
|
+
| moc · bamboo | text-accent on tint (bold labels) | #7C8965 / #F4F9ED | 60.2 | ✓ |
|
|
67
|
+
| moc · bamboo | accent-bright on ink (headings) | #E5F1D2 / #212617 | 93 | ✓ |
|
|
68
|
+
| moc · bamboo | accent-on on accent-bright (CTA text) | #212617 / #E5F1D2 | 91.4 | ✓ |
|
|
69
|
+
| moc · bamboo | accent-bright on dark panel (dark labels) | #E5F1D2 / #221710 | 94.5 | ✓ |
|
|
70
|
+
| moc · forest | text-accent on white (bold labels) | #051D00 / #FFFFFF | 104.4 | ✓ |
|
|
71
|
+
| moc · forest | text-accent on tint (bold labels) | #051D00 / #ECFDE7 | 100.2 | ✓ |
|
|
72
|
+
| moc · forest | accent-bright on ink (headings) | #B0D8A3 / #162A0E | 73.2 | ✓ |
|
|
73
|
+
| moc · forest | accent-on on accent-bright (CTA text) | #162A0E / #B0D8A3 | 73.2 | ✓ |
|
|
74
|
+
| moc · forest | accent-bright on dark panel (dark labels) | #B0D8A3 / #221710 | 75 | ✓ |
|
|
75
|
+
| kim | text-accent on white (bold labels) | #AC780B / #FFFFFF | 65.8 | ✓ |
|
|
76
|
+
| kim | text-accent on tint (bold labels) | #AC780B / #FFF5E7 | 60.5 | ✓ |
|
|
77
|
+
| kim | accent-bright on ink (headings) | #FDD89F / #312002 | 83.5 | ✓ |
|
|
78
|
+
| kim | accent-on on accent-bright (CTA text) | #312002 / #FDD89F | 82.8 | ✓ |
|
|
79
|
+
| kim | accent-bright on dark panel (dark labels) | #FDD89F / #221710 | 85 | ✓ |
|
|
80
|
+
| kim · titanium | text-accent on white (bold labels) | #947F65 / #FFFFFF | 65.8 | ✓ |
|
|
81
|
+
| kim · titanium | text-accent on tint (bold labels) | #947F65 / #FDF5ED | 60.5 | ✓ |
|
|
82
|
+
| kim · titanium | accent-bright on ink (headings) | #FBE8D2 / #2B2217 | 92 | ✓ |
|
|
83
|
+
| kim · titanium | accent-on on accent-bright (CTA text) | #2B2217 / #FBE8D2 | 90.6 | ✓ |
|
|
84
|
+
| kim · titanium | accent-bright on dark panel (dark labels) | #FBE8D2 / #221710 | 93.4 | ✓ |
|
|
85
|
+
| kim · steel | text-accent on white (bold labels) | #1F1400 / #FFFFFF | 104.8 | ✓ |
|
|
86
|
+
| kim · steel | text-accent on tint (bold labels) | #1F1400 / #FEF6E7 | 99.8 | ✓ |
|
|
87
|
+
| kim · steel | accent-bright on ink (headings) | #DCC8A2 / #2D220E | 71.8 | ✓ |
|
|
88
|
+
| kim · steel | accent-on on accent-bright (CTA text) | #2D220E / #DCC8A2 | 71.9 | ✓ |
|
|
89
|
+
| kim · steel | accent-bright on dark panel (dark labels) | #DFCBA5 / #221710 | 75.1 | ✓ |
|
|
90
90
|
|
|
91
91
|
**Failures: 0.** All text pairings pass Lc ≥ 60.
|
|
92
92
|
|
|
93
|
-
## Dark
|
|
93
|
+
## Dark pack APCA floors (gate twin)
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
|
95
|
+
Targets match `_audit/apca-dark-preview.html`: bright ≥ 75 · accent ≥ 60 · on/strong ≥ 75 · ink-on-tint ≥ 75.
|
|
96
|
+
| Pack | bright | accent | on | ink |
|
|
97
97
|
|---|---|---|---|---|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
98
|
+
| tho | 75 | 69.2 | 75.6 | 76.8 |
|
|
99
|
+
| tho · sand | 93.8 | 92.7 | 75.6 | 91.5 |
|
|
100
|
+
| tho · clay | 76.7 | 60.4 | 94.1 | 76.2 |
|
|
101
|
+
| hoa | 84.2 | 68.2 | 75.1 | 81.9 |
|
|
102
|
+
| hoa · plasma | 93.2 | 91.2 | 75 | 90.9 |
|
|
103
|
+
| hoa · lava | 76.2 | 61.1 | 94 | 75.7 |
|
|
104
|
+
| thuy | 87.2 | 72.8 | 76 | 84.4 |
|
|
105
|
+
| thuy · mist | 94.7 | 94 | 75.9 | 92 |
|
|
106
|
+
| thuy · ocean | 76.1 | 60.1 | 93.9 | 75.1 |
|
|
107
|
+
| moc | 86.9 | 71.8 | 75.4 | 84.4 |
|
|
108
|
+
| moc · bamboo | 94.5 | 93.6 | 75.3 | 92 |
|
|
109
|
+
| moc · forest | 75 | 60.8 | 93.7 | 76.3 |
|
|
110
|
+
| kim | 85 | 69.2 | 75.6 | 82.6 |
|
|
111
|
+
| kim · titanium | 93.4 | 92.1 | 75.8 | 91.1 |
|
|
112
|
+
| kim · steel | 75.1 | 60.7 | 94 | 76.4 |
|
|
102
113
|
|
|
103
|
-
Core dark also remaps the primary button to Ochre (`#f4ba17` on `#1a1108`) and warms the field border — so no dark control is low-contrast. Dark shadows are umber-tinted (weak on dark by nature); the dark hairline border provides panel separation instead.
|
|
104
|
-
This file is generated — re-run the APCA sweep script after any token change.
|
|
105
|
-
|
|
106
|
-
## Dark elemental packs — APCA verification (v4.0.0, Jul 2026)
|
|
107
|
-
|
|
108
|
-
Generated with the owner-approved dark packs applied; measured by the same SAPC-4g implementation as `_audit/apca-dark-preview.html` (also the regression gate). Targets: bright ≥ 75 · accent ≥ 60 · button ink ≥ 75 · ink-on-tint ≥ 75 — **15/15 packs pass**.
|
|
109
|
-
| Pack | bright | accent | on/strong | ink/tint |
|
|
110
|
-
|---|---|---|---|---|
|
|
111
|
-
| tho | 75 | 69.2 | 75.1 | 75.3 |
|
|
112
|
-
| tho · clay | 75.7 | 61.5 | 76 | 76.1 |
|
|
113
|
-
| tho · sand | 85.1 | 74.3 | 75.7 | 83.6 |
|
|
114
|
-
| hoa | 75.1 | 61.5 | 75.6 | 75.9 |
|
|
115
|
-
| hoa · lava | 75 | 60.6 | 83.5 | 75.8 |
|
|
116
|
-
| hoa · plasma | 75.9 | 60.8 | 75.4 | 76.7 |
|
|
117
|
-
| thuy | 76.6 | 61.6 | 76.7 | 76.6 |
|
|
118
|
-
| thuy · ocean | 77.2 | 60 | 86.6 | 75.5 |
|
|
119
|
-
| thuy · mist | 80.3 | 66.6 | 76 | 78.7 |
|
|
120
|
-
| moc | 76 | 60.1 | 76 | 76.1 |
|
|
121
|
-
| moc · bamboo | 76 | 62.8 | 75 | 76.2 |
|
|
122
|
-
| moc · forest | 76.4 | 60.9 | 88.6 | 76.6 |
|
|
123
|
-
| kim | 75.1 | 60.1 | 75.2 | 75.4 |
|
|
124
|
-
| kim · steel | 76.3 | 61.1 | 76 | 76.6 |
|
|
125
|
-
| kim · titanium | 76.9 | 60.9 | 79.4 | 75.5 |
|
package/docs/conventions.md
CHANGED
|
@@ -4,24 +4,25 @@ For humans and agents *extending this system*. (Consumers: read `SKILL.md`.) The
|
|
|
4
4
|
|
|
5
5
|
## The expansion rule
|
|
6
6
|
|
|
7
|
-
**When anything grows, everything updates in the same change.** A new element/variant, icon, component, token role, language, or template pattern must propagate to: tokens/source → specimen cards (guidelines + the component group card) **and related guideline pages** → component contract trio (`.jsx` + `.d.ts` + `.prompt.md`) → **all** templates (tweak enums and maps) → Storybook
|
|
7
|
+
**When anything grows, everything updates in the same change.** A new element/variant, icon, component, token role, language, or template pattern must propagate to: tokens/source → specimen cards (guidelines + the component group card) **and related guideline pages** → component contract trio (`.jsx` + `.d.ts` + `.prompt.md`) → **all** templates (tweak enums and maps) → Storybook toolbar / Atomic View → docs (README counts, SKILL, **and every related document the change touches** — kit READMEs, registry, contrast report regenerated after token changes). **Bump `VERSION` only with an explicit owner instruction; do not maintain a changelog** — current release is **1.1.0**. Continuity is git history plus curated **Release Notes** (`docs/release-notes.md` / Storybook). Gate every expansion with the compiler check **and a grep for the old enum/list** — nothing ships half-propagated. Documented scope boundaries (doctrine, not gaps): UI-kit pages stay pixel-faithful Thổ recreations (axes demoed in Storybook toolbar and Atomic View); every template is bilingual EN·VN and English-default (client/media collateral stays English-primary), and language variants render **fully separated** — see the decision log.
|
|
8
8
|
|
|
9
|
-
## The
|
|
9
|
+
## The four axes
|
|
10
10
|
|
|
11
|
-
Every rendered surface resolves
|
|
11
|
+
Every rendered surface resolves four orthogonal scopes — never encode one axis inside another:
|
|
12
12
|
| Axis | Attribute | Owns | Packs live in |
|
|
13
13
|
|---|---|---|---|
|
|
14
|
-
| **Theme** | `data-theme="dark\|system"` | light/dark
|
|
14
|
+
| **Theme** | `data-theme="dark\|system"` | light / dark / system (OS) | `tokens/colors.css` |
|
|
15
15
|
| **Element** (Ngũ Hành) | `data-cs-element` + `data-cs-variant` | hue identity per product | `tokens/elements.css` |
|
|
16
16
|
| **Language** | `lang` / Language tweak | EN · VI copy | component registry + template props |
|
|
17
|
+
| **Style** | `data-cs-style` (optional; absent ≡ `liquid-glass`) | surface material pack | `tokens/styles.css` |
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
Style’s sole pack today is **liquid-glass**. Immutable under all axes: Umber/Ochre anchors, voice, type families, semantic status colors, the 3px Ochre focus ring, APCA floors, ≥44px targets.
|
|
19
20
|
|
|
20
21
|
## Naming grammar
|
|
21
22
|
|
|
22
23
|
- Tokens: `--cs-<layer>-<role>[-<state>]` (`--cs-color-text-muted`). Element role layer: `--cs-accent-*` (9-token contract — see `tokens/elements.css` header).
|
|
23
24
|
|
|
24
|
-
- Classes: `.cs-<block>[-<part>][--modifier]`. Data attributes: `data-theme`, `data-cs-element`, `data-cs-variant`.
|
|
25
|
+
- Classes: `.cs-<block>[-<part>][--modifier]`. Data attributes: `data-theme`, `data-cs-element`, `data-cs-variant`, `data-cs-style`.
|
|
25
26
|
|
|
26
27
|
- Files: `tokens/<concern>.css` · `base/<concern>.css` (concern names, never changelog names — "interaction", not "refinements2") · `components/<group>/<Name>.{jsx,d.ts,prompt.md}` · `templates/<dept>-<artifact>/` · `guidelines/<group>-<topic>.html`.
|
|
27
28
|
|
|
@@ -37,18 +38,20 @@ Surface treatment is liquid-glass (fixed). Immutable under all axes: Umber/Ochre
|
|
|
37
38
|
|
|
38
39
|
**New element variant** — stay inside the element's oklch envelope; set the 9 `--cs-accent-*` contract tokens plus `--cs-color-text-accent`/`--cs-color-link` (APCA-check both); the aurora wash inherits from the element via `.cs-aurora-wash` (override the class rule only if the variant truly needs its own image); gradient partner (`grad-b`) must follow Tương sinh.
|
|
39
40
|
|
|
40
|
-
**Ship check** — run the compiler check until clean, then run `_audit/docs-consistency.html` **and** `_audit/namespace-portability.html` (both must be green). Version
|
|
41
|
+
**Ship check** — run the compiler check until clean, then run `_audit/docs-consistency.html` **and** `_audit/namespace-portability.html` (both must be green). Version is LAUNCHED at 1.1.0.
|
|
41
42
|
|
|
42
43
|
## Decision log (owner-approved)
|
|
43
44
|
|
|
44
45
|
- Elements fully replace Ochre inside product scopes; plasma's hot-pink edge approved (Jul 2026).
|
|
45
46
|
|
|
46
|
-
- Axes are Theme × Element × Language
|
|
47
|
+
- Axes are Theme × Element × Language × Style. Style pack is liquid-glass (sole pack; absent ≡ default).
|
|
47
48
|
|
|
48
49
|
- Product registry is **locked** (Jul 2026) — eight portfolio mappings in `docs/products.md`; do not invent new product → element assignments.
|
|
49
50
|
|
|
50
51
|
- Text never sits on the mid-tone `-accent` — codified after the APCA sweep (see `docs/contrast-report.md`).
|
|
51
52
|
|
|
53
|
+
- **The display face is a token role, not a second default (Jul 2026).** `--cs-font-family-display` ships Space Grotesk (variable 300–700, Vietnamese subset) self-hosted alongside Be Vietnam Pro and JetBrains Mono, so a product with a headline face — `cyberskill.world` / Lumi — consumes a DS role instead of maintaining its own `@font-face` exception. **Nothing in the DS points at it**: `--cs-heading-family` still resolves to `--cs-font-family-ui`, every template and UI kit is unchanged, and a scope opts in with `.cs-display-face` (`base/typography.css`), which retargets `--cs-heading-family` only — body copy stays on the UI face. Space Grotesk has no 800, so the extrabold heading weight clamps to 700 within that family (CSS does not hop to Be Vietnam Pro for a missing weight). Adding a family means adding its faces to `tokens/fonts.css` **and** its files to `fonts/` **and** its entries to `_ds_manifest.json` `fonts[]`/`brandFonts[]` — `_audit/font-face-integrity.html` fails on any of the three being out of step, and on any family missing the Vietnamese subset. This changes no product → element mapping; `docs/products.md` stays locked.
|
|
54
|
+
|
|
52
55
|
- Language variants render **fully separated**: switching the Language tweak yields a complete single-language artifact — no partial translation left in headings, labels, helper text, footers, or body. The only bilingual-by-design elements are the CyberSkill name + slogan lockup (`Hiện Thực Hoá Ý Chí · Turn Your Will Into Real`, the canonical form — never a lone half) and the A4 legal identity block (company legal name + state motto). Everything else swaps with the tweak (Jul 2026).
|
|
53
56
|
|
|
54
57
|
- **Namespace is resolved, never hardcoded** — the compiler names the bundle global `window.CyberSkillDesignSystem_<projectId>`, and that 6-hex suffix is derived from the project id, so it changes whenever the system is imported into another project. Templates read the stable `window.CyberSkillDS` alias that `ds-base.js` publishes on bundle load; cards, UI-kit pages, the standalone email, and audit harnesses resolve by prefix (`window[Object.keys(window).find(k=>/^CyberSkillDesignSystem_[0-9a-f]{6}$/.test(k))]`). `_ds_bundle.js`/`_ds_manifest.json` and the frozen `_audit/exports/` snapshot legitimately carry the real suffix (they *define* it). Enforced by `_audit/namespace-portability.html`, which scans every manifest-indexed source — keeps re-import **zero-touch** (Jul 2026).
|
|
@@ -65,7 +68,7 @@ Every template exports; the right path depends on the archetype. All paths prese
|
|
|
65
68
|
| Email / product page / any DC | **Standalone offline HTML** | The DC loads CSS + bundle dynamically via `ds-base.js`, which `super_inline_html` can't see. To bundle: make a `*-standalone.html` copy **in the same folder** (keeps `./support.js` relative) with **static** `<link rel="stylesheet" href="../../styles.css">` + `<script src="../../_ds_bundle.js">` in the raw `<head>` (both inlinable) instead of `ds-base.js`, plus a `<template id="__bundler_thumbnail">`. Bake the target language into the props default. Then `super_inline_html`. |
|
|
66
69
|
| Any | **Editor-native + Claude Code handoff** | The whole project is dev-handoff-ready (compiled bundle + `.d.ts` + `prompt.md` per component); generate the package on request via the handoff skill. |
|
|
67
70
|
|
|
68
|
-
**Font behavior on export.** Brand fonts are self-hosted (`Be Vietnam Pro` UI, mono). PPTX keeps the brand-font **names** but does not embed the files — on a machine without them PowerPoint substitutes a fallback (VN Unicode text is preserved; shapes may reflow slightly). For a fully self-contained hand-off, either tell the recipient to install the fonts, or export with a web-safe swap (`fontSwaps:[{from:'Be Vietnam Pro',to:'Arial'}]` — Arial covers Vietnamese). Standalone HTML **embeds** the fonts (inlined `@font-face` from `styles.css`), so it is always faithful offline (Jul 2026).
|
|
71
|
+
**Font behavior on export.** Brand fonts are self-hosted (`Be Vietnam Pro` UI, `Space Grotesk` opt-in display, mono). PPTX keeps the brand-font **names** but does not embed the files — on a machine without them PowerPoint substitutes a fallback (VN Unicode text is preserved; shapes may reflow slightly). For a fully self-contained hand-off, either tell the recipient to install the fonts, or export with a web-safe swap (`fontSwaps:[{from:'Be Vietnam Pro',to:'Arial'}]` — Arial covers Vietnamese). Standalone HTML **embeds** the fonts (inlined `@font-face` from `styles.css`), so it is always faithful offline (Jul 2026).
|
|
69
72
|
|
|
70
73
|
## Accessibility (base/a11y.css + component ARIA)
|
|
71
74
|
|
package/docs/decisions.md
CHANGED
|
@@ -24,7 +24,7 @@ Stay on the current Figma plan. Variables REST API is Enterprise-only — write
|
|
|
24
24
|
|
|
25
25
|
**Owner choice: Storybook is the single live hub** (Jul 2026)
|
|
26
26
|
|
|
27
|
-
- Operators use Storybook at `/` for Theme × Element × Language and component control matrices.
|
|
27
|
+
- Operators use Storybook at `/` for Theme × Element × Language × Style and component control matrices.
|
|
28
28
|
- No separate Live View page exists in the tree.
|
|
29
29
|
- Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*` redirect to `/`.
|
|
30
30
|
- Portable Atomic View and other static HTML remain for zero-build gates and consumers; they are not the site product entry.
|
|
@@ -44,17 +44,18 @@ Stay on the current Figma plan. Variables REST API is Enterprise-only — write
|
|
|
44
44
|
|
|
45
45
|
**Status: provisional / soft-skip — not a live library publish** (Jul 2026; deferred Jul 2026)
|
|
46
46
|
|
|
47
|
-
- CI job `code-connect` + `figma.config.json` +
|
|
47
|
+
- CI job `code-connect` + `figma.config.json` + 105 `*.figma.tsx` mappings are in-repo (import snippets use `@cyberskill/design`).
|
|
48
48
|
- Publish soft-skips when secrets are missing or the API returns 403/404/429. Soft-skip ≠ successful Code Connect publish.
|
|
49
49
|
- **Owner deferral:** stay on **Figma free / non-Org** for now — do not pursue live Code Connect until an Org/Enterprise seat with a published team library is available. Then replace synthetic `9999:*` stubs in `code-connect/node-map.json` with real `nodeId`s. See `docs/figma.md`.
|
|
50
50
|
|
|
51
|
-
## 7. npm publish —
|
|
51
|
+
## 7. npm publish — live via Trusted Publishing (OIDC)
|
|
52
52
|
|
|
53
|
-
**Status:
|
|
53
|
+
**Status: LAUNCHED `@cyberskill/design@1.1.0`; CI publish uses npm Trusted Publishing; tokens disallowed** (Jul 2026; LAUNCH 2026-07-27)
|
|
54
54
|
|
|
55
|
-
- `package.json` is `private: false`; package name **`@cyberskill/design`** (
|
|
56
|
-
- Workflow `.github/workflows/npm-publish.yml`
|
|
57
|
-
- **
|
|
55
|
+
- `package.json` is `private: false`; package name **`@cyberskill/design`** (`publishConfig.access: public`); `repository.url` matches this GitHub repo for provenance.
|
|
56
|
+
- Workflow `.github/workflows/npm-publish.yml`: `id-token: write` + GitHub-hosted runner; **no** `NPM_TOKEN` / `NODE_AUTH_TOKEN` on the publish step (OIDC). npm Trusted Publisher must list workflow filename **`npm-publish.yml`** for `cyberskill-official/design-system`. Soft-skip on auth / 403 / 404 / EOTP / version conflict.
|
|
57
|
+
- Package **Publishing access** on npmjs: **Require two-factor authentication and disallow tokens** (OIDC Trusted Publishing still works; classic / granular publish tokens are rejected). Long-lived `NPM_TOKEN` secrets are revoked.
|
|
58
|
+
- License stays **UNLICENSED**; version is **1.1.0**. Approved use is recorded in **`docs/consumer-grant.md`** (CyberSkill portfolio products). Registry install alone is not a public license.
|
|
58
59
|
|
|
59
60
|
## 8. Native store packaging — scaffolds shipped; submit disabled
|
|
60
61
|
|
|
@@ -76,18 +77,40 @@ Recorded Jul 2026 — unlock defaults (updated as operator steps land):
|
|
|
76
77
|
|
|
77
78
|
- **Figma Variables** — stay Tokens Studio / non-Enterprise (decision §3). Soft-skip on Variables REST remains honest.
|
|
78
79
|
- **Code Connect** — **skipped while on Figma free**; revisit only after Org + published library + real `nodeId`s (decision §6). Soft-skip ≠ publish.
|
|
79
|
-
- **npm** —
|
|
80
|
+
- **npm** — **LAUNCH `@cyberskill/design@1.1.0`** (publish via `v1.1.0` tag / Trusted Publishing); CI uses **Trusted Publishing (OIDC)** via `npm-publish.yml`; npmjs **disallow tokens**; consumer grant in force at `docs/consumer-grant.md` (decision §7). Default package entry is bundler-native `_esm/react.mjs` (React peer); browser path is `@cyberskill/design/legacy` → `_esm/cs.mjs` (decision §10).
|
|
81
|
+
|
|
82
|
+
## 10. Bundler-native React export (Next / SSR)
|
|
83
|
+
|
|
84
|
+
**Owner choice: ship `_esm/react.mjs` as default `exports["."]`** (Jul 2026; React 19 host Jul 2026)
|
|
85
|
+
|
|
86
|
+
- React / react-dom are **peerDependencies** (`^18 || ^19`); the entry re-exports source JSX (consumer transpiles — e.g. Next `transpilePackages`). Host Storybook / CI **devDependencies** pin **react@19.2.8** / **react-dom@19.2.8**.
|
|
87
|
+
- Browser / no-build keeps `_esm/cs.mjs` at `exports["./legacy"]` (CDN self-ensure + `_ds_bundle.js`). Official React 19 dropped UMD builds — the CDN path loads **`umd-react@19.2.8`** (SRI-pinned) to populate `window.React` / `window.ReactDOM` for `_ds_bundle.js`. Same pin is used in audit HTML, specimen cards, UI kits, and the byte-identical `templates/*/support.js` runtime.
|
|
88
|
+
- Alias `@cyberskill/design/react` mirrors the default entry. VERSION is **1.1.0** post-LAUNCH; republish via Trusted Publishing after merge / tag.
|
|
89
|
+
- Docs: `docs/consuming.md` (+ VI); gates: `package-exports-integrity` + `test:react-entry`.
|
|
80
90
|
|
|
81
91
|
## Maintainer tasks (open)
|
|
82
92
|
|
|
83
93
|
Operational follow-ups — not product marketing, not a backlog surface:
|
|
84
94
|
|
|
85
95
|
1. **Code Connect** — deferred (Figma free). When upgrading to Org: replace `9999:*` stubs in `code-connect/node-map.json` with real published-library node IDs.
|
|
86
|
-
|
|
96
|
+
|
|
97
|
+
~~2. npm consumer grant~~ — **done** (Jul 2026): Trusted Publishing + `docs/consumer-grant.md` (+ VI) for CyberSkill portfolio products.
|
|
87
98
|
|
|
88
99
|
~~3. Finalize products registry~~ — **done** (Jul 2026): see decision §9; `docs/products.md` is locked.
|
|
89
100
|
|
|
90
|
-
|
|
101
|
+
~~4. First registry consumer path~~ — **done** (Jul 2026): `examples/npm-hello/` installs `@cyberskill/design` for locked **Lumi** identity; documented in `docs/consuming.md` (+ VI) and `docs/release-notes.md`. Now targets **1.1.0** post-LAUNCH.
|
|
102
|
+
|
|
103
|
+
5. **Native + element-pack drift on PRs is fail-closed** (Jul 2026) — `regenerate-tokens` runs read-only on pull requests and exits 1 instead of pushing; only `regenerate-tokens-push` (main / schedule / manual) holds `contents: write`. When a PR fails it, run `npm run tokens:elements && node _audit/ci/generate-native-tokens.mjs` and commit packs + natives. See `docs/ci-cd.md`.
|
|
104
|
+
|
|
105
|
+
6. **Shadcn gap / Wave 2** (Jul 2026) — CyberSkill already covers ~53 of shadcn’s 62 primitives as CS-native (forms / overlays / nav / data). Shipped: pilot `ScrollArea`, `Collapsible`, `AspectRatio`; Wave 2 `AlertDialog` (vs Popconfirm), `Item` row primitive, `NativeSelect`. Residual shadcn gaps are intentional non-ports (blocks, Tailwind, Radix CLI). Do **not** port those — map patterns to existing `templates/` + `ui_kits/`.
|
|
106
|
+
|
|
107
|
+
7. **Element colour geometry** (Jul 2026; owner palette bar Jul 2026) — **30** default sets (5 × soft/middle/deep × light/dark) from `tokens/element-seeds.json` (`npm run tokens:elements`): soft = washed pastel, middle = intensity-synced default (Thổ middle pins logo ochre), deep = clearly darker sibling in the same hue family; harmonious role ramps; light↔dark hue lock; APCA dark floors. Geometry gate requires both minΔE and minΔL plus monotonic L. Public variant names unchanged. Hard gate: `_audit/element-geometry.html`. Benchmark rubric: `docs/benchmark-rubric.md`.
|
|
108
|
+
|
|
109
|
+
8. **Style axis (`data-cs-style`)** (Jul 2026) — Fourth product axis; sole live pack **liquid-glass** (absent ≡ liquid-glass). Contract: `tokens/styles.css` + hard gate `_audit/style-contract.html`. Future Style packs may expand indefinitely, each with its own colour-combination language — only via owner approval + Expansion Rule checklist in `docs/benchmark-rubric.md` (do not invent packs casually).
|
|
110
|
+
|
|
111
|
+
9. **Identity Lab retired** (Jul 2026) — Owner choice: delete `ui_kits/status-hub/identity-lab.html` and every product/docs/Storybook reference. Axis demos live in the Storybook Theme × Element × Language × Style toolbar, Atomic View, and the Elements Geometry specimen. Theme × Element × Language × Style **axes remain** product infrastructure (templates, tokens, kits Thổ-faithful). Do not revive the Lab under another name without a new decision.
|
|
112
|
+
|
|
113
|
+
Storybook `FullMatrix` is required whenever a public primary has ≥1 of {size enums, variant enums, state keys} (contract floor ≥28 stories). Schema sidecars remain complete for content-hole templates; axis-only templates omit by design. See `docs/quality-gates.md` and `docs/storybook.md`.
|
|
91
114
|
|
|
92
115
|
## How to change a decision
|
|
93
116
|
|
package/docs/deploy.md
CHANGED
|
@@ -40,7 +40,7 @@ Shipped for production (`design.cyberskill.world`):
|
|
|
40
40
|
|
|
41
41
|
If you host under a **different** domain, change the absolute URLs in those meta tags to match your origin, or re-export the PNG and keep the path `assets/og-dashboard.png`.
|
|
42
42
|
|
|
43
|
-
**Common misconfig:** picking a JS framework preset (Next/CRA) — Vercel then runs the wrong build graph and may 404 root docs. The preset must stay **"Other"** and `vercel.json` must own install/build/output (see table above). `package.json` is publishable (`"private": false`) for the npm path; it also carries **host-only** scripts (`build:storybook`, `build:site`, verify/test) that product apps should not depend on (see `docs/consuming.md` and `docs/storybook.md`). Packaging copies the portable webroot then overlays Storybook at `.vercel-static/` root (portable paths like `/styles.css`, `/_audit/`, `/guidelines/` stay available beside Storybook assets). **How to tell a hosting misconfig from a real docs bug:** open `/_audit/docs-consistency.html` on the *deployed* URL — the gate detects an HTML/error body where a raw `.md`/`.json` was expected and reports "hosting is intercepting this path".
|
|
43
|
+
**Common misconfig:** picking a JS framework preset (Next/CRA) — Vercel then runs the wrong build graph and may 404 root docs. The preset must stay **"Other"** and `vercel.json` must own install/build/output (see table above). `package.json` is publishable (`"private": false`) for the npm path; it also carries **host-only** scripts (`build:storybook`, `build:site`, verify/test) that product apps should not depend on (see `docs/consuming.md` and `docs/storybook.md`). Packaging copies the portable webroot then overlays Storybook at `.vercel-static/` root (portable paths like `/styles.css`, `/_audit/`, `/guidelines/` stay available beside Storybook assets). **`_audit/` stays public on purpose** — Storybook Status embeds `_audit/run.html` full-bleed; removing it would break the product surface. **How to tell a hosting misconfig from a real docs bug:** open `/_audit/docs-consistency.html` on the *deployed* URL — the gate detects an HTML/error body where a raw `.md`/`.json` was expected and reports "hosting is intercepting this path".
|
|
44
44
|
|
|
45
45
|
## Generic VPS / nginx / any static host
|
|
46
46
|
|
package/docs/design-styles.md
CHANGED
|
@@ -1,25 +1,43 @@
|
|
|
1
1
|
# Design styles
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The live styling axes are **Theme × Element × Language × Style**. Style’s sole pack today is **liquid-glass** (absent `data-cs-style` ≡ liquid-glass — same default pattern as light theme / Thổ middle).
|
|
4
|
+
|
|
4
5
|
| Axis | How to set it | What it changes |
|
|
5
6
|
|---|---|---|
|
|
6
|
-
| **Theme** | `data-theme="
|
|
7
|
-
| **Element** | `data-cs-element` + optional `data-cs-variant` | Ngũ Hành product identity (15 packs) |
|
|
7
|
+
| **Theme** | light = attribute absent; `data-theme="dark"` | light/dark semantic colours (product UI axis). Token-level `data-theme="system"` follows the OS (`prefers-color-scheme`) and mirrors dark — Storybook toolbar and Atomic View expose a system control |
|
|
8
|
+
| **Element** | `data-cs-element` + optional `data-cs-variant` | Ngũ Hành product identity (**15 packs** = 5 elements × soft/middle/deep) |
|
|
8
9
|
| **Language** | `lang` / Language tweak | EN · VI copy |
|
|
10
|
+
| **Style** | `data-cs-style` (optional; absent ≡ `liquid-glass`) | Surface material pack. Sole pack today: **liquid-glass** (`tokens/styles.css` + `base/glass.css`) |
|
|
9
11
|
|
|
10
|
-
##
|
|
12
|
+
## Element colour contract
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
Source of truth: [`tokens/element-seeds.json`](../tokens/element-seeds.json) → `npm run tokens:elements` → [`tokens/elements.css`](../tokens/elements.css) (+ JSON / JS / DTCG / native mirrors). **Do not hand-edit pack hexes.**
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
| Rule | Detail |
|
|
17
|
+
|---|---|
|
|
18
|
+
| **Default** | Thổ **middle** (studio) — logo ochre `#F4BA17` on `:root` when no element attribute is set |
|
|
19
|
+
| **Intensity ladder** | Every element has **soft · middle · deep** with shared OKLCH L targets (C scaled per element). Middle is the default (no `data-cs-variant`) |
|
|
20
|
+
| **Names preserved** | Public variants stay `sand/clay`, `plasma/lava`, `mist/ocean`, `bamboo/forest`, `titanium/steel` — mapped onto the ladder (see [`docs/products.md`](products.md) Slot column) |
|
|
21
|
+
| **Character offsets** | Small explicit `dh`/`dc` in the seed file only (e.g. Hỏa·plasma, Kim·steel) — not freehand drift |
|
|
22
|
+
| **Light ↔ dark** | Same hue family (Δh locked); roles remapped + APCA-solved — 15 × 2 = **30 colour sets** |
|
|
23
|
+
| **Text rule** | Text on `-bright` or `-tint` only — never on mid-tone `-accent` |
|
|
24
|
+
| **Never remap** | `--cs-color-accent-ochre` focus ring · semantic status colours |
|
|
25
|
+
| **Geometry gate** | [`_audit/element-geometry.html`](../_audit/element-geometry.html) — intensity sync · variant distinctness · hue identity |
|
|
15
26
|
|
|
27
|
+
## Style pack — liquid-glass
|
|
28
|
+
|
|
29
|
+
- Liquid-glass materials (`cs-surface-*`) are the default surface language.
|
|
30
|
+
- Radius, shadow, and glass tokens come from `tokens/elevation.css` + `base/glass.css`; the Style axis contract lives in [`tokens/styles.css`](../tokens/styles.css).
|
|
31
|
+
- Gate: [`_audit/style-contract.html`](../_audit/style-contract.html) — allowlists `liquid-glass` only.
|
|
16
32
|
- Rejected by doctrine: neon/cyberpunk cold hues, memphis playfulness, full skeuomorphism, emoji in UI chrome.
|
|
33
|
+
- Type families are fixed and token-named: Be Vietnam Pro (UI) · Space Grotesk (`--cs-font-family-display`, opt-in headline face) · JetBrains Mono (code). The display face is a **role a scope may opt into** with `.cs-display-face`, not a product axis.
|
|
17
34
|
|
|
18
35
|
## Adding a new look
|
|
19
36
|
|
|
20
37
|
Prefer:
|
|
21
|
-
1. A new **Element**
|
|
38
|
+
1. A new **Element** intensity tweak (seed offset) when the shift is hue/identity inside Ngũ Hành.
|
|
22
39
|
2. Local composition with existing tokens/classes when the shift is one-off layout.
|
|
23
40
|
3. A documented pattern in `docs/conventions.md` + a specimen card when the pattern should be reusable.
|
|
41
|
+
4. A new **`data-cs-style`** pack only after an Expansion Rule pass — see [`docs/benchmark-rubric.md`](benchmark-rubric.md) style-expansion checklist. Styles consume the same 9 accent roles; they must not invent parallel Element packs.
|
|
24
42
|
|
|
25
|
-
Do not invent a
|
|
43
|
+
Do not invent a fifth product axis, and do not add a second Style pack without the Expansion Rule checklist.
|
package/docs/figma.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## What ships in-repo
|
|
4
4
|
- Design tokens in CSS + DTCG (`tokens/tokens.dtcg.json`) with native Swift/Kotlin/Flutter mirrors.
|
|
5
|
-
- UI kits under `ui_kits/` are HTML recreations that stay pixel-faithful to the brand doctrine (Thổ-first
|
|
5
|
+
- UI kits under `ui_kits/` are HTML recreations that stay pixel-faithful to the brand doctrine (Thổ-first kits; axis demos in Storybook / Atomic View).
|
|
6
6
|
- **Code Connect** mappings for all **99** public primaries (`components/**/*.figma.tsx` + `figma.config.json` + `code-connect/node-map.json`).
|
|
7
7
|
|
|
8
8
|
## Tokens Studio import recipe (hand-sync)
|
|
@@ -47,7 +47,7 @@ Must be **repository secrets** under the Actions tab (exact names, case-sensitiv
|
|
|
47
47
|
|
|
48
48
|
If you hover a PAT and only see scopes like `file_content:read`, `file_comments:*`, `webhooks:*`, `library_*` — that is expected on **Professional / Organization** seats. Figma **does not list** `file_variables:*` unless the account is on **Enterprise**. Regenerating a PAT on a non-Enterprise plan cannot unlock the Variables REST API.
|
|
49
49
|
|
|
50
|
-
**What CI does today:**
|
|
50
|
+
**What CI does today:** the `figma-variables-push` job **soft-skips (exit 0 + report) if `FIGMA_TOKEN` / `FIGMA_FILE_KEY` are empty** — same honesty as Code Connect (missing secrets are not a red main). With secrets present, file open works on any plan; the Variables write also soft-skips with a report when Figma returns **403** / invalid scopes for `file_variables`. Soft-skip ≠ live Variables sync. Full auto-push needs Enterprise + those two scopes on the PAT.
|
|
51
51
|
|
|
52
52
|
**Non-Enterprise alternatives:** hand-sync colour styles from `tokens/tokens.dtcg.json`, or use [Tokens Studio](https://tokens.studio/) / the Plugin API inside the desktop app (plugin path does not use this REST job) — see the import recipe above.
|
|
53
53
|
|
|
@@ -83,7 +83,7 @@ After a successful push, open the file in Figma → **Local variables** → coll
|
|
|
83
83
|
| Mappings | `components/**/<Name>.figma.tsx` — **99** primaries; Button / TextField / Dialog / Card / Alert have prop maps; others are stubs |
|
|
84
84
|
| Generator | `npm run code-connect:generate` → `_audit/ci/generate-code-connect.mjs` |
|
|
85
85
|
| CI job | `code-connect` in `design-system-gates.yml` (PR + `main` + manual) |
|
|
86
|
-
| Local dry-run | `npm run code-connect:dry-run` (no secrets; asserts config + ≥
|
|
86
|
+
| Local dry-run | `npm run code-connect:dry-run` (no secrets; asserts config + ≥105 files) |
|
|
87
87
|
|
|
88
88
|
Document URLs use placeholder file key **`CS_FIGMA_FILE_KEY`**. Publish substitutes `FIGMA_FILE_KEY` via `documentUrlSubstitutions`.
|
|
89
89
|
|
package/docs/live-hub.md
CHANGED
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
|
|
21
21
|
| Surface | Role |
|
|
22
22
|
|---|---|
|
|
23
|
-
| **Storybook** (`/`) | Host product surface: Theme × Element × Language toolbar, Docs/Foundations/Components/Release Notes/Status, and Maintainer/* iframes into portable HTML |
|
|
23
|
+
| **Storybook** (`/`) | Host product surface: Theme × Element × Language × Style toolbar, Docs/Foundations/Components/Release Notes/Status, and Maintainer/* iframes into portable HTML |
|
|
24
24
|
| **Atomic View** (`guidelines/atomic-view.html`) | Portable zero-build component grid for gates and clone-and-open browsing — not the public product entry |
|
|
25
|
-
| **Other guidelines / templates** | Portable specimens; opened from Storybook Maintainer/* when exploring Motion,
|
|
25
|
+
| **Other guidelines / templates** | Portable specimens; opened from Storybook Maintainer/* when exploring Motion, Status Hub / Website / Deck indexes, kitchen-sink, etc. |
|
|
26
26
|
| **Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*`** | Redirect to `/` (stubs + Vercel redirects) |
|
|
27
27
|
|
|
28
28
|
## Surface map (Maintainer/* stories)
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
|---|---|
|
|
32
32
|
| Components/* CSF | React sources under `components/` |
|
|
33
33
|
| Maintainer/Surfaces → Motion | `guidelines/motion.html` |
|
|
34
|
-
| Maintainer/Surfaces →
|
|
34
|
+
| Maintainer/Surfaces → Status Hub | `ui_kits/status-hub/index.html` |
|
|
35
|
+
| Maintainer/Surfaces → Website | `ui_kits/website/index.html` |
|
|
36
|
+
| Maintainer/Surfaces → Deck | `ui_kits/deck/index.html` |
|
|
35
37
|
| Maintainer/Surfaces → Template Playground | `templates/playground.html` |
|
|
36
38
|
| Maintainer/Surfaces → Kitchen Sink | `templates/kitchen-sink.html` |
|
|
37
39
|
| Maintainer/Surfaces → Image Slots | `templates/image-slots-demo.html` |
|
package/docs/products.md
CHANGED
|
@@ -4,22 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
**Source of truth.** Maps CyberSkill portfolio products to Ngũ Hành element packs. One element per product; secondary accents only in gradient washes along Tương sinh.
|
|
6
6
|
|
|
7
|
-
| Product | Element | Variant | Secondary (Tương sinh) | Markup |
|
|
8
|
-
|
|
9
|
-
| **Lumi** — wish assistant | Hỏa · fire | plasma | tho | `data-cs-element="hoa" data-cs-variant="plasma"` |
|
|
10
|
-
| **Status Hub** — client portfolio portal | Thủy · water | river (default) | moc | `data-cs-element="thuy"` |
|
|
11
|
-
| **CyberOS Agent Spine** — agent infra, memory, gates | Kim · metal | steel | thuy | `data-cs-element="kim" data-cs-variant="steel"` |
|
|
12
|
-
| **CyberSkill Design System** — this library | Mộc · wood | leaf (default) | hoa | `data-cs-element="moc"` |
|
|
13
|
-
| **cyberskill.world** — the studio site | Thổ · earth | studio (default) | — | *(no attributes — studio is Thổ)* |
|
|
14
|
-
| **Client delivery suite** — kickoff · QBR · runbooks | Thổ · earth | clay | kim | `data-cs-element="tho" data-cs-variant="clay"` |
|
|
15
|
-
| **Board / investor collateral** | Kim · metal | champagne (default) | thuy | `data-cs-element="kim"` |
|
|
16
|
-
| **HR / employment instruments** | Mộc · wood | bamboo | hoa | `data-cs-element="moc" data-cs-variant="bamboo"` |
|
|
7
|
+
| Product | Element | Variant | Slot | Secondary (Tương sinh) | Markup |
|
|
8
|
+
|---|---|---|---|---|---|
|
|
9
|
+
| **Lumi** — wish assistant | Hỏa · fire | plasma | soft | tho | `data-cs-element="hoa" data-cs-variant="plasma"` |
|
|
10
|
+
| **Status Hub** — client portfolio portal | Thủy · water | river (default) | middle | moc | `data-cs-element="thuy"` |
|
|
11
|
+
| **CyberOS Agent Spine** — agent infra, memory, gates | Kim · metal | steel | deep | thuy | `data-cs-element="kim" data-cs-variant="steel"` |
|
|
12
|
+
| **CyberSkill Design System** — this library | Mộc · wood | leaf (default) | middle | hoa | `data-cs-element="moc"` |
|
|
13
|
+
| **cyberskill.world** — the studio site | Thổ · earth | studio (default) | middle | — | *(no attributes — studio is Thổ)* |
|
|
14
|
+
| **Client delivery suite** — kickoff · QBR · runbooks | Thổ · earth | clay | deep | kim | `data-cs-element="tho" data-cs-variant="clay"` |
|
|
15
|
+
| **Board / investor collateral** | Kim · metal | champagne (default) | middle | thuy | `data-cs-element="kim"` |
|
|
16
|
+
| **HR / employment instruments** | Mộc · wood | bamboo | soft | hoa | `data-cs-element="moc" data-cs-variant="bamboo"` |
|
|
17
|
+
|
|
18
|
+
**Slots** (soft / middle / deep) are the shared intensity ladder — see [`docs/design-styles.md`](design-styles.md). Public variant names stay stable; packs are generated from `tokens/element-seeds.json`.
|
|
17
19
|
|
|
18
20
|
**Why these:** Lumi is conversational spark (plasma). Status Hub is calm status flow (Thủy). Agent Spine is precision infrastructure (Kim·steel). Design System grows everything else (Mộc). Studio brand is Thổ. Delivery is grounded earth (clay). Board collateral is metal precision. HR instruments grow people (bamboo).
|
|
19
21
|
|
|
20
22
|
## Scope
|
|
21
23
|
|
|
22
|
-
- **UI kits stay Thổ-faithful.** `ui_kits/status-hub` and `ui_kits/website` remain Thổ recreations; per-element demos live in **
|
|
24
|
+
- **UI kits stay Thổ-faithful.** `ui_kits/status-hub` and `ui_kits/website` remain Thổ recreations; per-element demos live in the **Storybook Element toolbar**, **Atomic View**, and **Elements Geometry** specimen.
|
|
23
25
|
|
|
24
26
|
- **Consuming a mapping:** scope the product root with the row's Markup and consume `--cs-accent-*`.
|
|
25
27
|
|