@cyberskill/design 1.2.0 → 1.3.9

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 (232) hide show
  1. package/DESIGN.md +11 -9
  2. package/README.md +28 -24
  3. package/SKILL.md +18 -9
  4. package/THIRD-PARTY-NOTICES.md +35 -0
  5. package/VERSION +1 -1
  6. package/_ds_bundle.js +701 -1342
  7. package/_esm/cs.mjs +2 -2
  8. package/_esm/react.mjs +6 -1
  9. package/_vendor/NOTICE.md +16 -0
  10. package/_vendor/babel/README.md +7 -0
  11. package/_vendor/babel/babel.min.js +4 -0
  12. package/_vendor/react/README.md +3 -0
  13. package/_vendor/react/react-dom.production.min.js +1 -0
  14. package/_vendor/react/react.production.min.js +1 -0
  15. package/assets/aurora-hoa.webp +0 -0
  16. package/assets/aurora-kim.webp +0 -0
  17. package/assets/aurora-moc.webp +0 -0
  18. package/assets/aurora-tho.webp +0 -0
  19. package/assets/aurora-thuy.webp +0 -0
  20. package/base/ai.css +8 -3
  21. package/base/collections.css +10 -4
  22. package/base/components.css +5 -2
  23. package/base/controls.css +58 -21
  24. package/base/data.css +1 -1
  25. package/base/feedback.css +9 -2
  26. package/base/forms.css +1 -1
  27. package/base/glass.css +1 -1
  28. package/base/interaction.css +6 -2
  29. package/base/navigation.css +1 -1
  30. package/base/reset.css +7 -1
  31. package/base/responsive.css +13 -12
  32. package/base/shell.css +8 -2
  33. package/components/_i18n/i18n.js +28 -3
  34. package/components/_i18n/strings.js +42 -24
  35. package/components/ai/ChatMessage.d.ts +2 -0
  36. package/components/ai/ChatMessage.jsx +8 -4
  37. package/components/ai/ConfidenceMeter.d.ts +2 -0
  38. package/components/ai/HumanReviewGate.d.ts +2 -0
  39. package/components/ai/PromptInput.d.ts +2 -0
  40. package/components/ai/TypingIndicator.d.ts +2 -0
  41. package/components/ai/ai-conversation.card.html +3 -3
  42. package/components/ai/ai-lumi.card.html +3 -3
  43. package/components/ai/ai.card.html +3 -3
  44. package/components/brand/brand.card.html +3 -3
  45. package/components/button/buttons.card.html +3 -3
  46. package/components/data/Image.jsx +18 -2
  47. package/components/data/Sortable.d.ts +5 -1
  48. package/components/data/Sortable.jsx +42 -9
  49. package/components/data/Sortable.prompt.md +4 -2
  50. package/components/data/Terminal.jsx +3 -2
  51. package/components/data/Tooltip.d.ts +2 -0
  52. package/components/data/Tooltip.jsx +6 -3
  53. package/components/data/Tree.d.ts +2 -1
  54. package/components/data/Tree.jsx +137 -16
  55. package/components/data/Tree.prompt.md +1 -1
  56. package/components/data/collections.card.html +3 -3
  57. package/components/data/data.card.html +3 -3
  58. package/components/datatable/DataTable.d.ts +24 -1
  59. package/components/datatable/DataTable.jsx +78 -5
  60. package/components/datatable/DataTable.prompt.md +2 -1
  61. package/components/datatable/datatable.card.html +20 -16
  62. package/components/dialog/dialog.card.html +3 -3
  63. package/components/feedback/Alert.d.ts +2 -0
  64. package/components/feedback/Alert.jsx +8 -2
  65. package/components/feedback/EmptyState.d.ts +2 -0
  66. package/components/feedback/EmptyState.jsx +6 -3
  67. package/components/feedback/ProgressBar.d.ts +2 -0
  68. package/components/feedback/ProgressBar.jsx +6 -3
  69. package/components/feedback/Toast.jsx +15 -1
  70. package/components/feedback/Toast.prompt.md +2 -1
  71. package/components/feedback/feedback-2.card.html +3 -3
  72. package/components/feedback/feedback.card.html +3 -3
  73. package/components/forms/Cascader.jsx +7 -2
  74. package/components/forms/FileUpload.d.ts +2 -0
  75. package/components/forms/Form.d.ts +3 -1
  76. package/components/forms/Form.jsx +9 -1
  77. package/components/forms/Form.prompt.md +1 -1
  78. package/components/forms/Mentions.d.ts +1 -1
  79. package/components/forms/Mentions.jsx +59 -7
  80. package/components/forms/Mentions.prompt.md +3 -1
  81. package/components/forms/Rating.d.ts +3 -2
  82. package/components/forms/Rating.jsx +34 -3
  83. package/components/forms/Rating.prompt.md +1 -1
  84. package/components/forms/Select.d.ts +2 -0
  85. package/components/forms/Select.jsx +6 -2
  86. package/components/forms/Slider.d.ts +2 -0
  87. package/components/forms/Slider.jsx +5 -2
  88. package/components/forms/Switch.d.ts +2 -0
  89. package/components/forms/Switch.jsx +7 -9
  90. package/components/forms/Toggle.d.ts +2 -0
  91. package/components/forms/Toggle.jsx +14 -2
  92. package/components/forms/forms-2.card.html +3 -3
  93. package/components/forms/forms.card.html +3 -3
  94. package/components/icon/Icon.d.ts +1 -1
  95. package/components/icon/Icon.prompt.md +1 -1
  96. package/components/icon/icon.card.html +3 -3
  97. package/components/logo/logo.card.html +3 -3
  98. package/components/navigation/CommandPalette.d.ts +2 -0
  99. package/components/navigation/Menu.d.ts +2 -0
  100. package/components/navigation/Menu.jsx +60 -6
  101. package/components/navigation/Steps.d.ts +2 -0
  102. package/components/navigation/Steps.jsx +6 -3
  103. package/components/navigation/Tabs.d.ts +2 -0
  104. package/components/navigation/Tabs.jsx +6 -3
  105. package/components/navigation/Toolbar.d.ts +3 -2
  106. package/components/navigation/Toolbar.jsx +117 -11
  107. package/components/navigation/Toolbar.prompt.md +1 -1
  108. package/components/navigation/navigation.card.html +3 -3
  109. package/components/navigation/shell.card.html +3 -3
  110. package/components/overlays/ContextMenu.d.ts +2 -0
  111. package/components/overlays/ContextMenu.jsx +6 -3
  112. package/components/overlays/Drawer.d.ts +2 -0
  113. package/components/overlays/alertdialog.card.html +3 -3
  114. package/components/overlays/overlays.card.html +3 -3
  115. package/components/textfield/textfield.card.html +3 -3
  116. package/dist/styles.min.css +312 -64
  117. package/docs/benchmark-rubric.md +2 -2
  118. package/docs/ci-cd.md +18 -13
  119. package/docs/consumer-grant.md +4 -1
  120. package/docs/consuming.md +16 -12
  121. package/docs/contrast-report.md +81 -1
  122. package/docs/conventions.md +18 -5
  123. package/docs/decisions.md +41 -3
  124. package/docs/deploy.md +19 -6
  125. package/docs/design-styles.md +2 -2
  126. package/docs/doctrine.md +51 -0
  127. package/docs/figma.md +2 -0
  128. package/docs/live-hub.md +3 -1
  129. package/docs/products.md +1 -1
  130. package/docs/quality-gates.md +24 -12
  131. package/docs/release-notes.md +1 -1
  132. package/docs/release-runbook.md +78 -0
  133. package/docs/storybook.md +3 -3
  134. package/docs/sync.md +8 -8
  135. package/docs/template-schema-v2.md +1 -1
  136. package/docs/vi/benchmark-rubric.md +2 -2
  137. package/docs/vi/ci-cd.md +17 -14
  138. package/docs/vi/consumer-grant.md +4 -1
  139. package/docs/vi/consuming.md +16 -12
  140. package/docs/vi/contrast-report.md +81 -1
  141. package/docs/vi/conventions.md +19 -6
  142. package/docs/vi/decisions.md +40 -3
  143. package/docs/vi/deploy.md +19 -6
  144. package/docs/vi/design-styles.md +1 -1
  145. package/docs/vi/doctrine.md +51 -0
  146. package/docs/vi/figma.md +2 -0
  147. package/docs/vi/live-hub.md +3 -1
  148. package/docs/vi/products.md +1 -1
  149. package/docs/vi/quality-gates.md +23 -12
  150. package/docs/vi/release-notes.md +1 -1
  151. package/docs/vi/release-runbook.md +78 -0
  152. package/docs/vi/storybook.md +3 -3
  153. package/docs/vi/sync.md +7 -7
  154. package/docs/vi/template-schema-v2.md +1 -1
  155. package/docs/viewer.html +16 -5
  156. package/fonts/OFL.txt +98 -0
  157. package/guidelines/atomic-view.html +2 -2
  158. package/guidelines/brand-imagery.html +1 -1
  159. package/guidelines/elements-variants.html +5 -5
  160. package/guidelines/spacing-breakpoints.html +2 -1
  161. package/guidelines/surfaces-glass.html +1 -1
  162. package/llms.txt +18 -11
  163. package/package.json +28 -8
  164. package/templates/app-shell/AppShell.dc.html +3 -3
  165. package/templates/app-shell/content-schema.json +7 -0
  166. package/templates/article/Article.dc.html +3 -3
  167. package/templates/article/content-schema.json +7 -0
  168. package/templates/auth/Auth.dc.html +26 -10
  169. package/templates/auth/content-schema.json +25 -0
  170. package/templates/dashboard/Dashboard.dc.html +4 -4
  171. package/templates/dashboard/content-schema.json +7 -0
  172. package/templates/delivery-change-note/DeliveryChangeNote.dc.html +2 -2
  173. package/templates/delivery-runbook/DeliveryRunbook.dc.html +2 -2
  174. package/templates/email-safe/email-announcement.html +2 -2
  175. package/templates/email-safe/email-dunning.html +2 -2
  176. package/templates/email-safe/email-investor.html +2 -2
  177. package/templates/email-safe/email-launch.html +2 -2
  178. package/templates/email-safe/email-newsletter.html +2 -2
  179. package/templates/email-safe/email-status.html +2 -2
  180. package/templates/email-safe/email-transactional.html +2 -2
  181. package/templates/finance-dunning-email/FinanceDunningEmail.dc.html +2 -2
  182. package/templates/finance-expense-report/FinanceExpenseReport.dc.html +2 -2
  183. package/templates/finance-invoice/FinanceInvoice.dc.html +2 -2
  184. package/templates/finance-quote/FinanceQuote.dc.html +4 -4
  185. package/templates/hr-interview-kit/HrInterviewKit.dc.html +1 -1
  186. package/templates/marketing-case-study/MarketingCaseStudy.dc.html +1 -1
  187. package/templates/marketing-page/MarketingPage.dc.html +3 -3
  188. package/templates/marketing-page/content-schema.json +1 -0
  189. package/templates/settings/Settings.dc.html +3 -3
  190. package/templates/settings/content-schema.json +7 -0
  191. package/tokens/element-seeds.json +2 -2
  192. package/tokens/elements.css +193 -19
  193. package/tokens/native/CSTokens.kt +3 -2
  194. package/tokens/native/CSTokens.swift +3 -2
  195. package/tokens/native/cs_tokens.dart +3 -2
  196. package/tokens/provenance.json +8 -8
  197. package/tokens/spacing.css +2 -1
  198. package/tokens/tokens.dtcg.json +19 -14
  199. package/tokens/tokens.js +16 -15
  200. package/tokens/tokens.json +15 -14
  201. package/ui_kits/deck/index.html +1 -1
  202. package/ui_kits/status-hub/StatusHub.jsx +1 -1
  203. package/ui_kits/status-hub/login.html +52 -10
  204. package/ui_kits/status-hub/project.html +1 -1
  205. package/ui_kits/status-hub/settings.html +1 -1
  206. package/ui_kits/website/Website.jsx +1 -1
  207. package/ui_kits/website/careers.html +2 -2
  208. package/ui_kits/website/chat.html +1 -1
  209. package/ui_kits/website/site.css +1 -1
  210. package/ui_kits/website/work.html +2 -2
  211. package/assets/aurora-hoa.png +0 -0
  212. package/assets/aurora-kim.png +0 -0
  213. package/assets/aurora-moc.png +0 -0
  214. package/assets/aurora-thuy.png +0 -0
  215. package/docs/decisions/container-query-migration.md +0 -18
  216. package/docs/decisions/overlay-manager-design.md +0 -101
  217. package/docs/plans/cyberskill-design-system-audit-and-12-month-evolution-plan.md +0 -1490
  218. package/docs/status/assets/favicon.svg +0 -5
  219. package/docs/status/assets/status-legacy.css +0 -399
  220. package/docs/status/assets/status-legacy.js +0 -505
  221. package/docs/status/assets/status.css +0 -644
  222. package/docs/status/assets/status.js +0 -1308
  223. package/docs/status/data/status-feed.json +0 -1
  224. package/docs/status/data/task/TASK-REL-001.js +0 -1
  225. package/docs/status/data/task/TASK-REL-002.js +0 -1
  226. package/docs/status/index.html +0 -46
  227. package/docs/status/roadmap.html +0 -4
  228. package/docs/status/status-legacy.html +0 -122
  229. package/docs/tasks/BACKLOG.md +0 -26
  230. package/docs/tasks/_state/commit-links.yaml +0 -14
  231. package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +0 -55
  232. package/docs/tasks/release/TASK-REL-002-republish-1-1-1/spec.md +0 -54
@@ -11,7 +11,7 @@
11
11
  * --cs-accent-glow · --cs-accent-grad-a/b
12
12
  * TEXT RULE: text sits on -bright or -tint only — never on the mid-tone -accent.
13
13
  * Text on -strong uses --cs-accent-on-strong (WCAG AA ≥4.5:1 light and dark).
14
- * Focus ring --cs-color-accent-ochre and semantic status tokens NEVER remap.
14
+ * Focus indicator (text-primary contour + ochre halo) and semantic status tokens NEVER remap.
15
15
  * Generative cycle (Tương sinh) only for grad-b: Mộc→Hỏa→Thổ→Kim→Thủy→Mộc. */
16
16
  :root {
17
17
  --cs-accent: #F4BA17;
@@ -23,7 +23,7 @@
23
23
  --cs-accent-ink: #45210E;
24
24
  --cs-accent-glow: rgba(244, 186, 23, 0.48);
25
25
  --cs-accent-grad-a: #F4BA17;
26
- --cs-accent-grad-b: #FCAF91;
26
+ --cs-accent-grad-b: #F3B958;
27
27
  }
28
28
 
29
29
  /* ---- Element reach beyond accent ---- */
@@ -59,7 +59,7 @@
59
59
  --cs-accent-ink: #45210E;
60
60
  --cs-accent-glow: rgba(244, 186, 23, 0.48);
61
61
  --cs-accent-grad-a: #F4BA17;
62
- --cs-accent-grad-b: #FCAF91;
62
+ --cs-accent-grad-b: #F3B958;
63
63
  }
64
64
  [data-cs-element="tho"][data-cs-variant="sand"] {
65
65
  --cs-accent: #F8E9C0;
@@ -71,9 +71,9 @@
71
71
  --cs-accent-ink: #292414;
72
72
  --cs-accent-glow: rgba(248, 233, 192, 0.48);
73
73
  --cs-accent-grad-a: #F8E9C0;
74
- --cs-accent-grad-b: #FCAF91;
74
+ --cs-accent-grad-b: #F3B958;
75
75
  --cs-color-text-accent: #90825E;
76
- --cs-color-link: #90825E;
76
+ --cs-color-link: #7B6D4A;
77
77
  }
78
78
  [data-cs-element="tho"][data-cs-variant="clay"] {
79
79
  --cs-accent: #513801;
@@ -85,7 +85,7 @@
85
85
  --cs-accent-ink: #2D220E;
86
86
  --cs-accent-glow: rgba(81, 56, 1, 0.48);
87
87
  --cs-accent-grad-a: #513801;
88
- --cs-accent-grad-b: #FCAF91;
88
+ --cs-accent-grad-b: #F3B958;
89
89
  --cs-color-text-accent: #201300;
90
90
  --cs-color-link: #201300;
91
91
  }
@@ -103,7 +103,7 @@
103
103
  --cs-accent-grad-a: #FCAF91;
104
104
  --cs-accent-grad-b: #F4BA17;
105
105
  --cs-color-text-accent: #B47054;
106
- --cs-color-link: #B47054;
106
+ --cs-color-link: #A15E43;
107
107
  }
108
108
  [data-cs-element="hoa"][data-cs-variant="plasma"] {
109
109
  --cs-accent: #FFE1D8;
@@ -117,7 +117,7 @@
117
117
  --cs-accent-grad-a: #FFE1D8;
118
118
  --cs-accent-grad-b: #F4BA17;
119
119
  --cs-color-text-accent: #967C75;
120
- --cs-color-link: #967C75;
120
+ --cs-color-link: #846B64;
121
121
  }
122
122
  [data-cs-element="hoa"][data-cs-variant="lava"] {
123
123
  --cs-accent: #622B06;
@@ -147,7 +147,7 @@
147
147
  --cs-accent-grad-a: #2EDBF7;
148
148
  --cs-accent-grad-b: #A3D768;
149
149
  --cs-color-text-accent: #108EA0;
150
- --cs-color-link: #108EA0;
150
+ --cs-color-link: #027B8B;
151
151
  }
152
152
  [data-cs-element="thuy"][data-cs-variant="mist"] {
153
153
  --cs-accent: #C0F5FC;
@@ -161,7 +161,7 @@
161
161
  --cs-accent-grad-a: #C0F5FC;
162
162
  --cs-accent-grad-b: #A3D768;
163
163
  --cs-color-text-accent: #5A8A90;
164
- --cs-color-link: #5A8A90;
164
+ --cs-color-link: #48787E;
165
165
  }
166
166
  [data-cs-element="thuy"][data-cs-variant="ocean"] {
167
167
  --cs-accent: #004554;
@@ -191,7 +191,7 @@
191
191
  --cs-accent-grad-a: #A3D768;
192
192
  --cs-accent-grad-b: #FCAF91;
193
193
  --cs-color-text-accent: #629122;
194
- --cs-color-link: #629122;
194
+ --cs-color-link: #517B13;
195
195
  }
196
196
  [data-cs-element="moc"][data-cs-variant="bamboo"] {
197
197
  --cs-accent: #E1F1C8;
@@ -205,7 +205,7 @@
205
205
  --cs-accent-grad-a: #E1F1C8;
206
206
  --cs-accent-grad-b: #FCAF91;
207
207
  --cs-color-text-accent: #7C8965;
208
- --cs-color-link: #7C8965;
208
+ --cs-color-link: #687451;
209
209
  }
210
210
  [data-cs-element="moc"][data-cs-variant="forest"] {
211
211
  --cs-accent: #1A4A01;
@@ -235,7 +235,7 @@
235
235
  --cs-accent-grad-a: #F3B958;
236
236
  --cs-accent-grad-b: #2EDBF7;
237
237
  --cs-color-text-accent: #AC780B;
238
- --cs-color-link: #AC780B;
238
+ --cs-color-link: #966700;
239
239
  }
240
240
  [data-cs-element="kim"][data-cs-variant="titanium"] {
241
241
  --cs-accent: #FEE5C7;
@@ -249,7 +249,7 @@
249
249
  --cs-accent-grad-a: #FEE5C7;
250
250
  --cs-accent-grad-b: #2EDBF7;
251
251
  --cs-color-text-accent: #947F65;
252
- --cs-color-link: #947F65;
252
+ --cs-color-link: #826D54;
253
253
  }
254
254
  [data-cs-element="kim"][data-cs-variant="steel"] {
255
255
  --cs-accent: #503901;
@@ -274,13 +274,22 @@
274
274
  --cs-color-link: var(--cs-accent-bright);
275
275
  --cs-color-link-hover: var(--cs-color-text-primary);
276
276
  }
277
+ @media (prefers-color-scheme: dark) {
278
+ [data-theme="system"] [data-cs-element], [data-cs-element][data-theme="system"] {
279
+ --cs-component-button-primary-bg: var(--cs-accent-strong);
280
+ --cs-component-button-primary-fg: var(--cs-accent-on);
281
+ --cs-color-text-accent: var(--cs-accent-bright);
282
+ --cs-color-link: var(--cs-accent-bright);
283
+ --cs-color-link-hover: var(--cs-color-text-primary);
284
+ }
285
+ }
277
286
 
278
287
  /* ---- Aurora washes ---- */
279
- .cs-aurora-wash { background-image: url("../assets/aurora-gold.jpg"); background-size: cover; background-position: center; }
280
- [data-cs-element="hoa"] .cs-aurora-wash { background-image: url("../assets/aurora-hoa.png"); }
281
- [data-cs-element="thuy"] .cs-aurora-wash { background-image: url("../assets/aurora-thuy.png"); }
282
- [data-cs-element="moc"] .cs-aurora-wash { background-image: url("../assets/aurora-moc.png"); }
283
- [data-cs-element="kim"] .cs-aurora-wash { background-image: url("../assets/aurora-kim.png"); }
288
+ .cs-aurora-wash { background-image: url("../assets/aurora-tho.webp"); background-size: cover; background-position: center; }
289
+ [data-cs-element="hoa"] .cs-aurora-wash { background-image: url("../assets/aurora-hoa.webp"); }
290
+ [data-cs-element="thuy"] .cs-aurora-wash { background-image: url("../assets/aurora-thuy.webp"); }
291
+ [data-cs-element="moc"] .cs-aurora-wash { background-image: url("../assets/aurora-moc.webp"); }
292
+ [data-cs-element="kim"] .cs-aurora-wash { background-image: url("../assets/aurora-kim.webp"); }
284
293
 
285
294
  /* ---- APCA-derived DARK elemental packs (generated; hue-locked to light) ---- */
286
295
  [data-theme="dark"][data-cs-element="tho"][data-cs-variant="sand"] {
@@ -292,6 +301,17 @@
292
301
  --cs-accent-tint: #332701;
293
302
  --cs-accent-ink: #F6EBCC;
294
303
  }
304
+ @media (prefers-color-scheme: dark) {
305
+ [data-theme="system"][data-cs-element="tho"][data-cs-variant="sand"] {
306
+ --cs-accent: #F8E9C0;
307
+ --cs-accent-bright: #F6EBCC;
308
+ --cs-accent-strong: #665A37;
309
+ --cs-accent-on: #f5ead9;
310
+ --cs-accent-on-strong: #FFFDF8;
311
+ --cs-accent-tint: #332701;
312
+ --cs-accent-ink: #F6EBCC;
313
+ }
314
+ }
295
315
  [data-theme="dark"][data-cs-element="tho"] {
296
316
  --cs-accent: #F4BA17;
297
317
  --cs-accent-bright: #FEC42C;
@@ -301,6 +321,17 @@
301
321
  --cs-accent-tint: #352602;
302
322
  --cs-accent-ink: #FECD5E;
303
323
  }
324
+ @media (prefers-color-scheme: dark) {
325
+ [data-theme="system"][data-cs-element="tho"] {
326
+ --cs-accent: #F4BA17;
327
+ --cs-accent-bright: #FEC42C;
328
+ --cs-accent-strong: #73560B;
329
+ --cs-accent-on: #f5ead9;
330
+ --cs-accent-on-strong: #FFFDF8;
331
+ --cs-accent-tint: #352602;
332
+ --cs-accent-ink: #FECD5E;
333
+ }
334
+ }
304
335
  [data-theme="dark"][data-cs-element="tho"][data-cs-variant="clay"] {
305
336
  --cs-accent: #CDB07E;
306
337
  --cs-accent-bright: #E4CDA8;
@@ -310,6 +341,17 @@
310
341
  --cs-accent-tint: #372502;
311
342
  --cs-accent-ink: #E7D0AB;
312
343
  }
344
+ @media (prefers-color-scheme: dark) {
345
+ [data-theme="system"][data-cs-element="tho"][data-cs-variant="clay"] {
346
+ --cs-accent: #CDB07E;
347
+ --cs-accent-bright: #E4CDA8;
348
+ --cs-accent-strong: #1F1300;
349
+ --cs-accent-on: #f5ead9;
350
+ --cs-accent-on-strong: #FFFDF8;
351
+ --cs-accent-tint: #372502;
352
+ --cs-accent-ink: #E7D0AB;
353
+ }
354
+ }
313
355
  [data-theme="dark"][data-cs-element="hoa"][data-cs-variant="plasma"] {
314
356
  --cs-accent: #FFE1D8;
315
357
  --cs-accent-bright: #FCE6DF;
@@ -319,6 +361,17 @@
319
361
  --cs-accent-tint: #38231C;
320
362
  --cs-accent-ink: #FCE6DF;
321
363
  }
364
+ @media (prefers-color-scheme: dark) {
365
+ [data-theme="system"][data-cs-element="hoa"][data-cs-variant="plasma"] {
366
+ --cs-accent: #FFE1D8;
367
+ --cs-accent-bright: #FCE6DF;
368
+ --cs-accent-strong: #6F5750;
369
+ --cs-accent-on: #f5ead9;
370
+ --cs-accent-on-strong: #FFFDF8;
371
+ --cs-accent-tint: #38231C;
372
+ --cs-accent-ink: #FCE6DF;
373
+ }
374
+ }
322
375
  [data-theme="dark"][data-cs-element="hoa"] {
323
376
  --cs-accent: #FCAF91;
324
377
  --cs-accent-bright: #FED3C3;
@@ -328,6 +381,17 @@
328
381
  --cs-accent-tint: #411E0F;
329
382
  --cs-accent-ink: #FED3C3;
330
383
  }
384
+ @media (prefers-color-scheme: dark) {
385
+ [data-theme="system"][data-cs-element="hoa"] {
386
+ --cs-accent: #FCAF91;
387
+ --cs-accent-bright: #FED3C3;
388
+ --cs-accent-strong: #8A4A30;
389
+ --cs-accent-on: #f5ead9;
390
+ --cs-accent-on-strong: #FFFDF8;
391
+ --cs-accent-tint: #411E0F;
392
+ --cs-accent-ink: #FED3C3;
393
+ }
394
+ }
331
395
  [data-theme="dark"][data-cs-element="hoa"][data-cs-variant="lava"] {
332
396
  --cs-accent: #E8A683;
333
397
  --cs-accent-bright: #F8C4AA;
@@ -337,6 +401,17 @@
337
401
  --cs-accent-tint: #401F0B;
338
402
  --cs-accent-ink: #FBC7AD;
339
403
  }
404
+ @media (prefers-color-scheme: dark) {
405
+ [data-theme="system"][data-cs-element="hoa"][data-cs-variant="lava"] {
406
+ --cs-accent: #E8A683;
407
+ --cs-accent-bright: #F8C4AA;
408
+ --cs-accent-strong: #280D00;
409
+ --cs-accent-on: #f5ead9;
410
+ --cs-accent-on-strong: #FFFDF8;
411
+ --cs-accent-tint: #401F0B;
412
+ --cs-accent-ink: #FBC7AD;
413
+ }
414
+ }
340
415
  [data-theme="dark"][data-cs-element="thuy"][data-cs-variant="mist"] {
341
416
  --cs-accent: #C0F5FC;
342
417
  --cs-accent-bright: #CDF4F9;
@@ -346,6 +421,17 @@
346
421
  --cs-accent-tint: #022F34;
347
422
  --cs-accent-ink: #CDF4F9;
348
423
  }
424
+ @media (prefers-color-scheme: dark) {
425
+ [data-theme="system"][data-cs-element="thuy"][data-cs-variant="mist"] {
426
+ --cs-accent: #C0F5FC;
427
+ --cs-accent-bright: #CDF4F9;
428
+ --cs-accent-strong: #316167;
429
+ --cs-accent-on: #f5ead9;
430
+ --cs-accent-on-strong: #FFFDF8;
431
+ --cs-accent-tint: #022F34;
432
+ --cs-accent-ink: #CDF4F9;
433
+ }
434
+ }
349
435
  [data-theme="dark"][data-cs-element="thuy"] {
350
436
  --cs-accent: #2EDBF7;
351
437
  --cs-accent-bright: #99EEFF;
@@ -355,6 +441,17 @@
355
441
  --cs-accent-tint: #032F36;
356
442
  --cs-accent-ink: #99EEFF;
357
443
  }
444
+ @media (prefers-color-scheme: dark) {
445
+ [data-theme="system"][data-cs-element="thuy"] {
446
+ --cs-accent: #2EDBF7;
447
+ --cs-accent-bright: #99EEFF;
448
+ --cs-accent-strong: #046270;
449
+ --cs-accent-on: #f5ead9;
450
+ --cs-accent-on-strong: #FFFDF8;
451
+ --cs-accent-tint: #032F36;
452
+ --cs-accent-ink: #99EEFF;
453
+ }
454
+ }
358
455
  [data-theme="dark"][data-cs-element="thuy"][data-cs-variant="ocean"] {
359
456
  --cs-accent: #82BCCD;
360
457
  --cs-accent-bright: #ABD6E3;
@@ -364,6 +461,17 @@
364
461
  --cs-accent-tint: #002F3A;
365
462
  --cs-accent-ink: #AED9E6;
366
463
  }
464
+ @media (prefers-color-scheme: dark) {
465
+ [data-theme="system"][data-cs-element="thuy"][data-cs-variant="ocean"] {
466
+ --cs-accent: #82BCCD;
467
+ --cs-accent-bright: #ABD6E3;
468
+ --cs-accent-strong: #011A21;
469
+ --cs-accent-on: #f5ead9;
470
+ --cs-accent-on-strong: #FFFDF8;
471
+ --cs-accent-tint: #002F3A;
472
+ --cs-accent-ink: #AED9E6;
473
+ }
474
+ }
367
475
  [data-theme="dark"][data-cs-element="moc"][data-cs-variant="bamboo"] {
368
476
  --cs-accent: #E1F1C8;
369
477
  --cs-accent-bright: #E5F1D2;
@@ -373,6 +481,17 @@
373
481
  --cs-accent-tint: #232D0B;
374
482
  --cs-accent-ink: #E5F1D2;
375
483
  }
484
+ @media (prefers-color-scheme: dark) {
485
+ [data-theme="system"][data-cs-element="moc"][data-cs-variant="bamboo"] {
486
+ --cs-accent: #E1F1C8;
487
+ --cs-accent-bright: #E5F1D2;
488
+ --cs-accent-strong: #54603E;
489
+ --cs-accent-on: #f5ead9;
490
+ --cs-accent-on-strong: #FFFDF8;
491
+ --cs-accent-tint: #232D0B;
492
+ --cs-accent-ink: #E5F1D2;
493
+ }
494
+ }
376
495
  [data-theme="dark"][data-cs-element="moc"] {
377
496
  --cs-accent: #A3D768;
378
497
  --cs-accent-bright: #C5ED9C;
@@ -382,6 +501,17 @@
382
501
  --cs-accent-tint: #1F2E0B;
383
502
  --cs-accent-ink: #C5ED9C;
384
503
  }
504
+ @media (prefers-color-scheme: dark) {
505
+ [data-theme="system"][data-cs-element="moc"] {
506
+ --cs-accent: #A3D768;
507
+ --cs-accent-bright: #C5ED9C;
508
+ --cs-accent-strong: #416501;
509
+ --cs-accent-on: #f5ead9;
510
+ --cs-accent-on-strong: #FFFDF8;
511
+ --cs-accent-tint: #1F2E0B;
512
+ --cs-accent-ink: #C5ED9C;
513
+ }
514
+ }
385
515
  [data-theme="dark"][data-cs-element="moc"][data-cs-variant="forest"] {
386
516
  --cs-accent: #8EC27D;
387
517
  --cs-accent-bright: #B0D8A3;
@@ -391,6 +521,17 @@
391
521
  --cs-accent-tint: #193011;
392
522
  --cs-accent-ink: #B6DFA9;
393
523
  }
524
+ @media (prefers-color-scheme: dark) {
525
+ [data-theme="system"][data-cs-element="moc"][data-cs-variant="forest"] {
526
+ --cs-accent: #8EC27D;
527
+ --cs-accent-bright: #B0D8A3;
528
+ --cs-accent-strong: #061D00;
529
+ --cs-accent-on: #f5ead9;
530
+ --cs-accent-on-strong: #FFFDF8;
531
+ --cs-accent-tint: #193011;
532
+ --cs-accent-ink: #B6DFA9;
533
+ }
534
+ }
394
535
  [data-theme="dark"][data-cs-element="kim"][data-cs-variant="titanium"] {
395
536
  --cs-accent: #FEE5C7;
396
537
  --cs-accent-bright: #FBE8D2;
@@ -400,6 +541,17 @@
400
541
  --cs-accent-tint: #37250B;
401
542
  --cs-accent-ink: #FBE8D2;
402
543
  }
544
+ @media (prefers-color-scheme: dark) {
545
+ [data-theme="system"][data-cs-element="kim"][data-cs-variant="titanium"] {
546
+ --cs-accent: #FEE5C7;
547
+ --cs-accent-bright: #FBE8D2;
548
+ --cs-accent-strong: #6B573E;
549
+ --cs-accent-on: #f5ead9;
550
+ --cs-accent-on-strong: #FFFDF8;
551
+ --cs-accent-tint: #37250B;
552
+ --cs-accent-ink: #FBE8D2;
553
+ }
554
+ }
403
555
  [data-theme="dark"][data-cs-element="kim"] {
404
556
  --cs-accent: #F3B958;
405
557
  --cs-accent-bright: #FDD89F;
@@ -409,6 +561,17 @@
409
561
  --cs-accent-tint: #382503;
410
562
  --cs-accent-ink: #FDD89F;
411
563
  }
564
+ @media (prefers-color-scheme: dark) {
565
+ [data-theme="system"][data-cs-element="kim"] {
566
+ --cs-accent: #F3B958;
567
+ --cs-accent-bright: #FDD89F;
568
+ --cs-accent-strong: #795303;
569
+ --cs-accent-on: #f5ead9;
570
+ --cs-accent-on-strong: #FFFDF8;
571
+ --cs-accent-tint: #382503;
572
+ --cs-accent-ink: #FDD89F;
573
+ }
574
+ }
412
575
  [data-theme="dark"][data-cs-element="kim"][data-cs-variant="steel"] {
413
576
  --cs-accent: #CCB17E;
414
577
  --cs-accent-bright: #DFCBA5;
@@ -418,3 +581,14 @@
418
581
  --cs-accent-tint: #362602;
419
582
  --cs-accent-ink: #E6D1AB;
420
583
  }
584
+ @media (prefers-color-scheme: dark) {
585
+ [data-theme="system"][data-cs-element="kim"][data-cs-variant="steel"] {
586
+ --cs-accent: #CCB17E;
587
+ --cs-accent-bright: #DFCBA5;
588
+ --cs-accent-strong: #1F1400;
589
+ --cs-accent-on: #f5ead9;
590
+ --cs-accent-on-strong: #FFFDF8;
591
+ --cs-accent-tint: #362602;
592
+ --cs-accent-ink: #E6D1AB;
593
+ }
594
+ }
@@ -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.1.1 · source sha256 16b39bda3ee5b664…
3
+ // release v1.3.9 · source sha256 6fab1afd9d3ef915…
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
@@ -65,7 +65,7 @@ object CSTokens {
65
65
  val accentInk = Color(0xFF45210E)
66
66
  val accentGlow = Color(0x7AF4BA17)
67
67
  val accentGradA = Color(0xFFF4BA17)
68
- val accentGradB = Color(0xFFFCAF91)
68
+ val accentGradB = Color(0xFFF3B958)
69
69
  val accentOnStrong = Color(0xFF1A1108)
70
70
  val depthBg = 0
71
71
  val depthSection = 5
@@ -118,6 +118,7 @@ object CSTokens {
118
118
  val radiusLg = 14.dp
119
119
  val radiusFull = 999.dp
120
120
  val breakpointXs = 0.dp
121
+ val breakpointPhone = 360.dp
121
122
  val breakpointSm = 640.dp
122
123
  val breakpointMd = 768.dp
123
124
  val breakpointLg = 1024.dp
@@ -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.1.1 · source sha256 16b39bda3ee5b664…
3
+ // release v1.3.9 · source sha256 6fab1afd9d3ef915…
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
@@ -67,7 +67,7 @@ public enum CSTokens {
67
67
  public static let accentInk = color(0x45210E)
68
68
  public static let accentGlow = color(0xF4BA17, alpha: 0.48)
69
69
  public static let accentGradA = color(0xF4BA17)
70
- public static let accentGradB = color(0xFCAF91)
70
+ public static let accentGradB = color(0xF3B958)
71
71
  public static let accentOnStrong = color(0x1A1108)
72
72
  public static let depthBg: Double = 0
73
73
  public static let depthSection: Double = 5
@@ -120,6 +120,7 @@ public enum CSTokens {
120
120
  public static let radiusLg: CGFloat = 14
121
121
  public static let radiusFull: CGFloat = 999
122
122
  public static let breakpointXs: CGFloat = 0
123
+ public static let breakpointPhone: CGFloat = 360
123
124
  public static let breakpointSm: CGFloat = 640
124
125
  public static let breakpointMd: CGFloat = 768
125
126
  public static let breakpointLg: CGFloat = 1024
@@ -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.1.1 · source sha256 16b39bda3ee5b664…
3
+ // release v1.3.9 · source sha256 6fab1afd9d3ef915…
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
@@ -63,7 +63,7 @@ class CSTokens {
63
63
  static const Color accentInk = Color(0xFF45210E);
64
64
  static const Color accentGlow = Color(0x7AF4BA17);
65
65
  static const Color accentGradA = Color(0xFFF4BA17);
66
- static const Color accentGradB = Color(0xFFFCAF91);
66
+ static const Color accentGradB = Color(0xFFF3B958);
67
67
  static const Color accentOnStrong = Color(0xFF1A1108);
68
68
  static const double depthBg = 0;
69
69
  static const double depthSection = 5;
@@ -116,6 +116,7 @@ class CSTokens {
116
116
  static const double radiusLg = 14;
117
117
  static const double radiusFull = 999;
118
118
  static const double breakpointXs = 0;
119
+ static const double breakpointPhone = 360;
119
120
  static const double breakpointSm = 640;
120
121
  static const double breakpointMd = 768;
121
122
  static const double breakpointLg = 1024;
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "system": "CyberSkill Design System",
3
- "release": "1.2.0",
3
+ "release": "1.3.9",
4
4
  "source": "tokens/tokens.dtcg.json",
5
- "sourceSha256": "16b39bda3ee5b664e468777a5cb3868dd990fa2b8e595866ac8547311acbd9ca",
5
+ "sourceSha256": "6fab1afd9d3ef915ce0be3ce823a7a4f05eb8f6d79bac983e136f71d57522431",
6
6
  "dtcgStamp": {
7
- "version": "1.2.0",
7
+ "version": "1.3.9",
8
8
  "generated": "2026-07-23"
9
9
  },
10
10
  "conversions": {
@@ -16,10 +16,10 @@
16
16
  "darkPackSuffix": "<Scope>Dark (APCA-derived)"
17
17
  },
18
18
  "counts": {
19
- "baseTokens": 161,
19
+ "baseTokens": 162,
20
20
  "byType": {
21
21
  "color": 38,
22
- "dimension": 79,
22
+ "dimension": 80,
23
23
  "number": 27,
24
24
  "shadow": 5,
25
25
  "duration": 4,
@@ -36,17 +36,17 @@
36
36
  {
37
37
  "file": "tokens/native/CSTokens.swift",
38
38
  "lang": "swift",
39
- "sha256": "e30fc4cd3812889f798998962737ad5e73b4412570ced96a73a6fe0b97280437"
39
+ "sha256": "5b880d914d897f2cc4b511702bc951409bd392488451646423c887e2c6670d9b"
40
40
  },
41
41
  {
42
42
  "file": "tokens/native/CSTokens.kt",
43
43
  "lang": "kotlin",
44
- "sha256": "b20806d0f8219a6e26eefe552e112985be1b7cffd583c3e83f12cf01daf50ab4"
44
+ "sha256": "d94ec2bc1ddf3eb715a1dd3c22815aafd68a1e43b3fdb77b1cfe864772b1ab86"
45
45
  },
46
46
  {
47
47
  "file": "tokens/native/cs_tokens.dart",
48
48
  "lang": "dart",
49
- "sha256": "56ad7d6bdcd60140a442c1193d863eb062ac43a1d980d3e6ca50d9f1f69ea5a2"
49
+ "sha256": "350766e8147d1a5d32df9feb8cf0e27e3058fae99ce54ffa971c5957a2cf7acd"
50
50
  }
51
51
  ]
52
52
  }
@@ -21,8 +21,9 @@
21
21
  --cs-radius-lg: 14px; /* cards/panels in product surfaces */
22
22
  --cs-radius-full: 999px;
23
23
 
24
- /* Breakpoints (mobile-first) */
24
+ /* Breakpoints (mobile-first). `phone` is the justified 320-reflow stop (UX-003). */
25
25
  --cs-breakpoint-xs: 0px;
26
+ --cs-breakpoint-phone: 360px;
26
27
  --cs-breakpoint-sm: 640px;
27
28
  --cs-breakpoint-md: 768px;
28
29
  --cs-breakpoint-lg: 1024px;
@@ -3,7 +3,7 @@
3
3
  "$extensions": {
4
4
  "com.cyberskill": {
5
5
  "system": "CyberSkill Design System",
6
- "version": "1.2.0",
6
+ "version": "1.3.9",
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.",
@@ -77,9 +77,9 @@
77
77
  "--cs-accent-ink": "#292414",
78
78
  "--cs-accent-glow": "rgba(248, 233, 192, 0.48)",
79
79
  "--cs-accent-grad-a": "#F8E9C0",
80
- "--cs-accent-grad-b": "#FCAF91",
80
+ "--cs-accent-grad-b": "#F3B958",
81
81
  "--cs-color-text-accent": "#90825E",
82
- "--cs-color-link": "#90825E"
82
+ "--cs-color-link": "#7B6D4A"
83
83
  },
84
84
  "tho": {
85
85
  "--cs-accent": "#F4BA17",
@@ -91,7 +91,7 @@
91
91
  "--cs-accent-ink": "#45210E",
92
92
  "--cs-accent-glow": "rgba(244, 186, 23, 0.48)",
93
93
  "--cs-accent-grad-a": "#F4BA17",
94
- "--cs-accent-grad-b": "#FCAF91"
94
+ "--cs-accent-grad-b": "#F3B958"
95
95
  },
96
96
  "tho.clay": {
97
97
  "--cs-accent": "#513801",
@@ -103,7 +103,7 @@
103
103
  "--cs-accent-ink": "#2D220E",
104
104
  "--cs-accent-glow": "rgba(81, 56, 1, 0.48)",
105
105
  "--cs-accent-grad-a": "#513801",
106
- "--cs-accent-grad-b": "#FCAF91",
106
+ "--cs-accent-grad-b": "#F3B958",
107
107
  "--cs-color-text-accent": "#201300",
108
108
  "--cs-color-link": "#201300"
109
109
  },
@@ -119,7 +119,7 @@
119
119
  "--cs-accent-grad-a": "#FFE1D8",
120
120
  "--cs-accent-grad-b": "#F4BA17",
121
121
  "--cs-color-text-accent": "#967C75",
122
- "--cs-color-link": "#967C75"
122
+ "--cs-color-link": "#846B64"
123
123
  },
124
124
  "hoa": {
125
125
  "--cs-accent": "#FCAF91",
@@ -133,7 +133,7 @@
133
133
  "--cs-accent-grad-a": "#FCAF91",
134
134
  "--cs-accent-grad-b": "#F4BA17",
135
135
  "--cs-color-text-accent": "#B47054",
136
- "--cs-color-link": "#B47054"
136
+ "--cs-color-link": "#A15E43"
137
137
  },
138
138
  "hoa.lava": {
139
139
  "--cs-accent": "#622B06",
@@ -161,7 +161,7 @@
161
161
  "--cs-accent-grad-a": "#C0F5FC",
162
162
  "--cs-accent-grad-b": "#A3D768",
163
163
  "--cs-color-text-accent": "#5A8A90",
164
- "--cs-color-link": "#5A8A90"
164
+ "--cs-color-link": "#48787E"
165
165
  },
166
166
  "thuy": {
167
167
  "--cs-accent": "#2EDBF7",
@@ -175,7 +175,7 @@
175
175
  "--cs-accent-grad-a": "#2EDBF7",
176
176
  "--cs-accent-grad-b": "#A3D768",
177
177
  "--cs-color-text-accent": "#108EA0",
178
- "--cs-color-link": "#108EA0"
178
+ "--cs-color-link": "#027B8B"
179
179
  },
180
180
  "thuy.ocean": {
181
181
  "--cs-accent": "#004554",
@@ -203,7 +203,7 @@
203
203
  "--cs-accent-grad-a": "#E1F1C8",
204
204
  "--cs-accent-grad-b": "#FCAF91",
205
205
  "--cs-color-text-accent": "#7C8965",
206
- "--cs-color-link": "#7C8965"
206
+ "--cs-color-link": "#687451"
207
207
  },
208
208
  "moc": {
209
209
  "--cs-accent": "#A3D768",
@@ -217,7 +217,7 @@
217
217
  "--cs-accent-grad-a": "#A3D768",
218
218
  "--cs-accent-grad-b": "#FCAF91",
219
219
  "--cs-color-text-accent": "#629122",
220
- "--cs-color-link": "#629122"
220
+ "--cs-color-link": "#517B13"
221
221
  },
222
222
  "moc.forest": {
223
223
  "--cs-accent": "#1A4A01",
@@ -245,7 +245,7 @@
245
245
  "--cs-accent-grad-a": "#FEE5C7",
246
246
  "--cs-accent-grad-b": "#2EDBF7",
247
247
  "--cs-color-text-accent": "#947F65",
248
- "--cs-color-link": "#947F65"
248
+ "--cs-color-link": "#826D54"
249
249
  },
250
250
  "kim": {
251
251
  "--cs-accent": "#F3B958",
@@ -259,7 +259,7 @@
259
259
  "--cs-accent-grad-a": "#F3B958",
260
260
  "--cs-accent-grad-b": "#2EDBF7",
261
261
  "--cs-color-text-accent": "#AC780B",
262
- "--cs-color-link": "#AC780B"
262
+ "--cs-color-link": "#966700"
263
263
  },
264
264
  "kim.steel": {
265
265
  "--cs-accent": "#503901",
@@ -641,7 +641,7 @@
641
641
  "$type": "color"
642
642
  },
643
643
  "--cs-accent-grad-b": {
644
- "$value": "#FCAF91",
644
+ "$value": "#F3B958",
645
645
  "$type": "color"
646
646
  },
647
647
  "--cs-accent-on-strong": {
@@ -1012,6 +1012,11 @@
1012
1012
  "$value": "0px",
1013
1013
  "$type": "dimension"
1014
1014
  },
1015
+ "--cs-breakpoint-phone": {
1016
+ "$value": "360px",
1017
+ "$type": "dimension",
1018
+ "$description": "Justified small-phone / 320-reflow stop (UX-003)."
1019
+ },
1015
1020
  "--cs-breakpoint-sm": {
1016
1021
  "$value": "640px",
1017
1022
  "$type": "dimension"