@cyberskill/design 2.7.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/DESIGN.md +8 -8
  2. package/README.md +15 -9
  3. package/SECURITY.md +4 -4
  4. package/SKILL.md +1 -1
  5. package/THIRD-PARTY-NOTICES.md +1 -1
  6. package/VERSION +1 -1
  7. package/_ds_bundle.js +2 -2
  8. package/_ds_bundle.js.map +1 -1
  9. package/_ds_manifest.json +210 -200
  10. package/_esm/cs.mjs +2 -2
  11. package/base/a11y.css +18 -2
  12. package/base/ai.css +2 -2
  13. package/base/collections.css +6 -2
  14. package/base/components.css +107 -20
  15. package/base/controls.css +59 -31
  16. package/base/data.css +17 -5
  17. package/base/feedback.css +8 -0
  18. package/base/forms.css +7 -4
  19. package/base/glass.css +95 -0
  20. package/base/navigation.css +9 -1
  21. package/base/responsive.css +9 -4
  22. package/components/contracts.json +202 -62
  23. package/components/css-index.json +145 -41
  24. package/components/data/data.card.html +1 -1
  25. package/components/prompt-api.json +2 -2
  26. package/components/release-compatibility.json +1 -1
  27. package/components/specifications.json +204 -64
  28. package/components/static-html-reference.json +20 -20
  29. package/dist/esm/build.json +1 -1
  30. package/dist/styles.css +389 -89
  31. package/dist/styles.min.css +1 -1
  32. package/docs/UPSTREAM.md +3 -6
  33. package/docs/benchmark-rubric.md +1 -1
  34. package/docs/browser-support.md +1 -1
  35. package/docs/component-api.md +1 -1
  36. package/docs/consuming.md +1 -1
  37. package/docs/contrast-report.md +8 -8
  38. package/docs/conventions.md +5 -5
  39. package/docs/decisions.md +3 -3
  40. package/docs/deploy.md +2 -2
  41. package/docs/design-styles.md +9 -8
  42. package/docs/doctrine.md +1 -1
  43. package/docs/four-axes.md +3 -3
  44. package/docs/quality-gates.md +3 -1
  45. package/docs/reference-catalog.json +59 -59
  46. package/docs/release-notes.md +30 -2
  47. package/docs/static-html-reference.md +18 -18
  48. package/docs/storybook.md +1 -1
  49. package/docs/template-inventory.json +35 -35
  50. package/docs/vi/UPSTREAM.md +3 -6
  51. package/docs/vi/benchmark-rubric.md +1 -1
  52. package/docs/vi/browser-support.md +1 -1
  53. package/docs/vi/component-api.md +1 -1
  54. package/docs/vi/consuming.md +1 -1
  55. package/docs/vi/contrast-report.md +8 -8
  56. package/docs/vi/conventions.md +5 -5
  57. package/docs/vi/decisions.md +3 -3
  58. package/docs/vi/deploy.md +2 -2
  59. package/docs/vi/design-styles.md +9 -8
  60. package/docs/vi/doctrine.md +1 -1
  61. package/docs/vi/entrypoints/CONTRIBUTING.md +9 -2
  62. package/docs/vi/entrypoints/DESIGN.md +8 -8
  63. package/docs/vi/entrypoints/README.md +15 -9
  64. package/docs/vi/entrypoints/SKILL.md +1 -1
  65. package/docs/vi/entrypoints/llms.txt +1 -1
  66. package/docs/vi/four-axes.md +3 -3
  67. package/docs/vi/quality-gates.md +3 -1
  68. package/docs/vi/release-notes.md +30 -2
  69. package/docs/vi/static-html-reference.md +18 -18
  70. package/docs/vi/storybook.md +1 -1
  71. package/guidance/agent-contract.json +3 -3
  72. package/guidelines/atomic-view.html +7 -7
  73. package/guidelines/brand-imagery.html +1 -1
  74. package/guidelines/colors-surfaces.html +4 -4
  75. package/guidelines/colors-text.html +4 -4
  76. package/guidelines/elements-components.html +3 -3
  77. package/guidelines/elements-concept.html +1 -1
  78. package/guidelines/guideline-language.js +1 -1
  79. package/guidelines/motion.html +4 -4
  80. package/guidelines/responsive-bilingual.html +4 -4
  81. package/llms.txt +1 -1
  82. package/package.json +11 -10
  83. package/styles/components/manifest.json +184 -140
  84. package/styles.layered.css +245 -59
  85. package/styles.layered.provenance.json +16 -16
  86. package/templates/_vendor/doc-export.js +8 -1
  87. package/templates/ai-cluster-demo.html +2 -2
  88. package/templates/app-shell/AppShell.dc.html +2 -2
  89. package/templates/bod-deck/BodDeck.dc.html +3 -3
  90. package/templates/bod-investor-update/BodInvestorUpdate.dc.html +1 -1
  91. package/templates/dashboard/Dashboard.dc.html +2 -2
  92. package/templates/delivery-qbr-deck/DeliveryQbrDeck.dc.html +2 -2
  93. package/templates/delivery-status-email/DeliveryStatusEmail.dc.html +1 -1
  94. package/templates/email/Email-VN-standalone.html +2 -2
  95. package/templates/email-safe/email-announcement.html +5 -5
  96. package/templates/email-safe/email-dunning.html +5 -5
  97. package/templates/email-safe/email-investor.html +5 -5
  98. package/templates/email-safe/email-launch.html +5 -5
  99. package/templates/email-safe/email-newsletter.html +6 -6
  100. package/templates/email-safe/email-status.html +5 -5
  101. package/templates/email-safe/email-transactional.html +5 -5
  102. package/templates/kitchen-sink.html +10 -6
  103. package/templates/marketing-newsletter/MarketingNewsletter.dc.html +4 -4
  104. package/templates/marketing-page/MarketingPage.dc.html +4 -2
  105. package/templates/playground.html +5 -4
  106. package/templates/sales-proposal-deck/SalesProposalDeck.dc.html +5 -5
  107. package/tokens/colors.css +1 -1
  108. package/tokens/declarations.json +1851 -1355
  109. package/tokens/element-seeds.json +1 -1
  110. package/tokens/elements.css +40 -10
  111. package/tokens/elevation.css +2 -2
  112. package/tokens/modes/dark__default__comfortable__high.dtcg.json +1 -1
  113. package/tokens/modes/dark__default__comfortable__standard.dtcg.json +1 -1
  114. package/tokens/modes/dark__default__compact__high.dtcg.json +1 -1
  115. package/tokens/modes/dark__default__compact__standard.dtcg.json +1 -1
  116. package/tokens/modes/dark__hoa-lava__comfortable__high.dtcg.json +1 -1
  117. package/tokens/modes/dark__hoa-lava__comfortable__standard.dtcg.json +1 -1
  118. package/tokens/modes/dark__hoa-lava__compact__high.dtcg.json +1 -1
  119. package/tokens/modes/dark__hoa-lava__compact__standard.dtcg.json +1 -1
  120. package/tokens/modes/dark__hoa-plasma__comfortable__high.dtcg.json +1 -1
  121. package/tokens/modes/dark__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  122. package/tokens/modes/dark__hoa-plasma__compact__high.dtcg.json +1 -1
  123. package/tokens/modes/dark__hoa-plasma__compact__standard.dtcg.json +1 -1
  124. package/tokens/modes/dark__hoa__comfortable__high.dtcg.json +1 -1
  125. package/tokens/modes/dark__hoa__comfortable__standard.dtcg.json +1 -1
  126. package/tokens/modes/dark__hoa__compact__high.dtcg.json +1 -1
  127. package/tokens/modes/dark__hoa__compact__standard.dtcg.json +1 -1
  128. package/tokens/modes/dark__kim-steel__comfortable__high.dtcg.json +1 -1
  129. package/tokens/modes/dark__kim-steel__comfortable__standard.dtcg.json +1 -1
  130. package/tokens/modes/dark__kim-steel__compact__high.dtcg.json +1 -1
  131. package/tokens/modes/dark__kim-steel__compact__standard.dtcg.json +1 -1
  132. package/tokens/modes/dark__kim-titanium__comfortable__high.dtcg.json +1 -1
  133. package/tokens/modes/dark__kim-titanium__comfortable__standard.dtcg.json +1 -1
  134. package/tokens/modes/dark__kim-titanium__compact__high.dtcg.json +1 -1
  135. package/tokens/modes/dark__kim-titanium__compact__standard.dtcg.json +1 -1
  136. package/tokens/modes/dark__kim__comfortable__high.dtcg.json +1 -1
  137. package/tokens/modes/dark__kim__comfortable__standard.dtcg.json +1 -1
  138. package/tokens/modes/dark__kim__compact__high.dtcg.json +1 -1
  139. package/tokens/modes/dark__kim__compact__standard.dtcg.json +1 -1
  140. package/tokens/modes/dark__moc-bamboo__comfortable__high.dtcg.json +1 -1
  141. package/tokens/modes/dark__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  142. package/tokens/modes/dark__moc-bamboo__compact__high.dtcg.json +1 -1
  143. package/tokens/modes/dark__moc-bamboo__compact__standard.dtcg.json +1 -1
  144. package/tokens/modes/dark__moc-forest__comfortable__high.dtcg.json +1 -1
  145. package/tokens/modes/dark__moc-forest__comfortable__standard.dtcg.json +1 -1
  146. package/tokens/modes/dark__moc-forest__compact__high.dtcg.json +1 -1
  147. package/tokens/modes/dark__moc-forest__compact__standard.dtcg.json +1 -1
  148. package/tokens/modes/dark__moc__comfortable__high.dtcg.json +1 -1
  149. package/tokens/modes/dark__moc__comfortable__standard.dtcg.json +1 -1
  150. package/tokens/modes/dark__moc__compact__high.dtcg.json +1 -1
  151. package/tokens/modes/dark__moc__compact__standard.dtcg.json +1 -1
  152. package/tokens/modes/dark__tho-clay__comfortable__high.dtcg.json +1 -1
  153. package/tokens/modes/dark__tho-clay__comfortable__standard.dtcg.json +1 -1
  154. package/tokens/modes/dark__tho-clay__compact__high.dtcg.json +1 -1
  155. package/tokens/modes/dark__tho-clay__compact__standard.dtcg.json +1 -1
  156. package/tokens/modes/dark__tho-sand__comfortable__high.dtcg.json +1 -1
  157. package/tokens/modes/dark__tho-sand__comfortable__standard.dtcg.json +1 -1
  158. package/tokens/modes/dark__tho-sand__compact__high.dtcg.json +1 -1
  159. package/tokens/modes/dark__tho-sand__compact__standard.dtcg.json +1 -1
  160. package/tokens/modes/dark__tho__comfortable__high.dtcg.json +1 -1
  161. package/tokens/modes/dark__tho__comfortable__standard.dtcg.json +1 -1
  162. package/tokens/modes/dark__tho__compact__high.dtcg.json +1 -1
  163. package/tokens/modes/dark__tho__compact__standard.dtcg.json +1 -1
  164. package/tokens/modes/dark__thuy-mist__comfortable__high.dtcg.json +1 -1
  165. package/tokens/modes/dark__thuy-mist__comfortable__standard.dtcg.json +1 -1
  166. package/tokens/modes/dark__thuy-mist__compact__high.dtcg.json +1 -1
  167. package/tokens/modes/dark__thuy-mist__compact__standard.dtcg.json +1 -1
  168. package/tokens/modes/dark__thuy-ocean__comfortable__high.dtcg.json +1 -1
  169. package/tokens/modes/dark__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  170. package/tokens/modes/dark__thuy-ocean__compact__high.dtcg.json +1 -1
  171. package/tokens/modes/dark__thuy-ocean__compact__standard.dtcg.json +1 -1
  172. package/tokens/modes/dark__thuy__comfortable__high.dtcg.json +1 -1
  173. package/tokens/modes/dark__thuy__comfortable__standard.dtcg.json +1 -1
  174. package/tokens/modes/dark__thuy__compact__high.dtcg.json +1 -1
  175. package/tokens/modes/dark__thuy__compact__standard.dtcg.json +1 -1
  176. package/tokens/modes/index.json +275 -275
  177. package/tokens/modes/light__default__comfortable__high.dtcg.json +1 -1
  178. package/tokens/modes/light__default__comfortable__standard.dtcg.json +1 -1
  179. package/tokens/modes/light__default__compact__high.dtcg.json +1 -1
  180. package/tokens/modes/light__default__compact__standard.dtcg.json +1 -1
  181. package/tokens/modes/light__hoa-lava__comfortable__high.dtcg.json +1 -1
  182. package/tokens/modes/light__hoa-lava__comfortable__standard.dtcg.json +1 -1
  183. package/tokens/modes/light__hoa-lava__compact__high.dtcg.json +1 -1
  184. package/tokens/modes/light__hoa-lava__compact__standard.dtcg.json +1 -1
  185. package/tokens/modes/light__hoa-plasma__comfortable__high.dtcg.json +1 -1
  186. package/tokens/modes/light__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  187. package/tokens/modes/light__hoa-plasma__compact__high.dtcg.json +1 -1
  188. package/tokens/modes/light__hoa-plasma__compact__standard.dtcg.json +1 -1
  189. package/tokens/modes/light__hoa__comfortable__high.dtcg.json +1 -1
  190. package/tokens/modes/light__hoa__comfortable__standard.dtcg.json +1 -1
  191. package/tokens/modes/light__hoa__compact__high.dtcg.json +1 -1
  192. package/tokens/modes/light__hoa__compact__standard.dtcg.json +1 -1
  193. package/tokens/modes/light__kim-steel__comfortable__high.dtcg.json +1 -1
  194. package/tokens/modes/light__kim-steel__comfortable__standard.dtcg.json +1 -1
  195. package/tokens/modes/light__kim-steel__compact__high.dtcg.json +1 -1
  196. package/tokens/modes/light__kim-steel__compact__standard.dtcg.json +1 -1
  197. package/tokens/modes/light__kim-titanium__comfortable__high.dtcg.json +1 -1
  198. package/tokens/modes/light__kim-titanium__comfortable__standard.dtcg.json +1 -1
  199. package/tokens/modes/light__kim-titanium__compact__high.dtcg.json +1 -1
  200. package/tokens/modes/light__kim-titanium__compact__standard.dtcg.json +1 -1
  201. package/tokens/modes/light__kim__comfortable__high.dtcg.json +1 -1
  202. package/tokens/modes/light__kim__comfortable__standard.dtcg.json +1 -1
  203. package/tokens/modes/light__kim__compact__high.dtcg.json +1 -1
  204. package/tokens/modes/light__kim__compact__standard.dtcg.json +1 -1
  205. package/tokens/modes/light__moc-bamboo__comfortable__high.dtcg.json +1 -1
  206. package/tokens/modes/light__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  207. package/tokens/modes/light__moc-bamboo__compact__high.dtcg.json +1 -1
  208. package/tokens/modes/light__moc-bamboo__compact__standard.dtcg.json +1 -1
  209. package/tokens/modes/light__moc-forest__comfortable__high.dtcg.json +1 -1
  210. package/tokens/modes/light__moc-forest__comfortable__standard.dtcg.json +1 -1
  211. package/tokens/modes/light__moc-forest__compact__high.dtcg.json +1 -1
  212. package/tokens/modes/light__moc-forest__compact__standard.dtcg.json +1 -1
  213. package/tokens/modes/light__moc__comfortable__high.dtcg.json +1 -1
  214. package/tokens/modes/light__moc__comfortable__standard.dtcg.json +1 -1
  215. package/tokens/modes/light__moc__compact__high.dtcg.json +1 -1
  216. package/tokens/modes/light__moc__compact__standard.dtcg.json +1 -1
  217. package/tokens/modes/light__tho-clay__comfortable__high.dtcg.json +1 -1
  218. package/tokens/modes/light__tho-clay__comfortable__standard.dtcg.json +1 -1
  219. package/tokens/modes/light__tho-clay__compact__high.dtcg.json +1 -1
  220. package/tokens/modes/light__tho-clay__compact__standard.dtcg.json +1 -1
  221. package/tokens/modes/light__tho-sand__comfortable__high.dtcg.json +1 -1
  222. package/tokens/modes/light__tho-sand__comfortable__standard.dtcg.json +1 -1
  223. package/tokens/modes/light__tho-sand__compact__high.dtcg.json +1 -1
  224. package/tokens/modes/light__tho-sand__compact__standard.dtcg.json +1 -1
  225. package/tokens/modes/light__tho__comfortable__high.dtcg.json +1 -1
  226. package/tokens/modes/light__tho__comfortable__standard.dtcg.json +1 -1
  227. package/tokens/modes/light__tho__compact__high.dtcg.json +1 -1
  228. package/tokens/modes/light__tho__compact__standard.dtcg.json +1 -1
  229. package/tokens/modes/light__thuy-mist__comfortable__high.dtcg.json +1 -1
  230. package/tokens/modes/light__thuy-mist__comfortable__standard.dtcg.json +1 -1
  231. package/tokens/modes/light__thuy-mist__compact__high.dtcg.json +1 -1
  232. package/tokens/modes/light__thuy-mist__compact__standard.dtcg.json +1 -1
  233. package/tokens/modes/light__thuy-ocean__comfortable__high.dtcg.json +1 -1
  234. package/tokens/modes/light__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  235. package/tokens/modes/light__thuy-ocean__compact__high.dtcg.json +1 -1
  236. package/tokens/modes/light__thuy-ocean__compact__standard.dtcg.json +1 -1
  237. package/tokens/modes/light__thuy__comfortable__high.dtcg.json +1 -1
  238. package/tokens/modes/light__thuy__comfortable__standard.dtcg.json +1 -1
  239. package/tokens/modes/light__thuy__compact__high.dtcg.json +1 -1
  240. package/tokens/modes/light__thuy__compact__standard.dtcg.json +1 -1
  241. package/tokens/modes/system-dark__default__comfortable__high.dtcg.json +1 -1
  242. package/tokens/modes/system-dark__default__comfortable__standard.dtcg.json +1 -1
  243. package/tokens/modes/system-dark__default__compact__high.dtcg.json +1 -1
  244. package/tokens/modes/system-dark__default__compact__standard.dtcg.json +1 -1
  245. package/tokens/modes/system-dark__hoa-lava__comfortable__high.dtcg.json +1 -1
  246. package/tokens/modes/system-dark__hoa-lava__comfortable__standard.dtcg.json +1 -1
  247. package/tokens/modes/system-dark__hoa-lava__compact__high.dtcg.json +1 -1
  248. package/tokens/modes/system-dark__hoa-lava__compact__standard.dtcg.json +1 -1
  249. package/tokens/modes/system-dark__hoa-plasma__comfortable__high.dtcg.json +1 -1
  250. package/tokens/modes/system-dark__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  251. package/tokens/modes/system-dark__hoa-plasma__compact__high.dtcg.json +1 -1
  252. package/tokens/modes/system-dark__hoa-plasma__compact__standard.dtcg.json +1 -1
  253. package/tokens/modes/system-dark__hoa__comfortable__high.dtcg.json +1 -1
  254. package/tokens/modes/system-dark__hoa__comfortable__standard.dtcg.json +1 -1
  255. package/tokens/modes/system-dark__hoa__compact__high.dtcg.json +1 -1
  256. package/tokens/modes/system-dark__hoa__compact__standard.dtcg.json +1 -1
  257. package/tokens/modes/system-dark__kim-steel__comfortable__high.dtcg.json +1 -1
  258. package/tokens/modes/system-dark__kim-steel__comfortable__standard.dtcg.json +1 -1
  259. package/tokens/modes/system-dark__kim-steel__compact__high.dtcg.json +1 -1
  260. package/tokens/modes/system-dark__kim-steel__compact__standard.dtcg.json +1 -1
  261. package/tokens/modes/system-dark__kim-titanium__comfortable__high.dtcg.json +1 -1
  262. package/tokens/modes/system-dark__kim-titanium__comfortable__standard.dtcg.json +1 -1
  263. package/tokens/modes/system-dark__kim-titanium__compact__high.dtcg.json +1 -1
  264. package/tokens/modes/system-dark__kim-titanium__compact__standard.dtcg.json +1 -1
  265. package/tokens/modes/system-dark__kim__comfortable__high.dtcg.json +1 -1
  266. package/tokens/modes/system-dark__kim__comfortable__standard.dtcg.json +1 -1
  267. package/tokens/modes/system-dark__kim__compact__high.dtcg.json +1 -1
  268. package/tokens/modes/system-dark__kim__compact__standard.dtcg.json +1 -1
  269. package/tokens/modes/system-dark__moc-bamboo__comfortable__high.dtcg.json +1 -1
  270. package/tokens/modes/system-dark__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  271. package/tokens/modes/system-dark__moc-bamboo__compact__high.dtcg.json +1 -1
  272. package/tokens/modes/system-dark__moc-bamboo__compact__standard.dtcg.json +1 -1
  273. package/tokens/modes/system-dark__moc-forest__comfortable__high.dtcg.json +1 -1
  274. package/tokens/modes/system-dark__moc-forest__comfortable__standard.dtcg.json +1 -1
  275. package/tokens/modes/system-dark__moc-forest__compact__high.dtcg.json +1 -1
  276. package/tokens/modes/system-dark__moc-forest__compact__standard.dtcg.json +1 -1
  277. package/tokens/modes/system-dark__moc__comfortable__high.dtcg.json +1 -1
  278. package/tokens/modes/system-dark__moc__comfortable__standard.dtcg.json +1 -1
  279. package/tokens/modes/system-dark__moc__compact__high.dtcg.json +1 -1
  280. package/tokens/modes/system-dark__moc__compact__standard.dtcg.json +1 -1
  281. package/tokens/modes/system-dark__tho-clay__comfortable__high.dtcg.json +1 -1
  282. package/tokens/modes/system-dark__tho-clay__comfortable__standard.dtcg.json +1 -1
  283. package/tokens/modes/system-dark__tho-clay__compact__high.dtcg.json +1 -1
  284. package/tokens/modes/system-dark__tho-clay__compact__standard.dtcg.json +1 -1
  285. package/tokens/modes/system-dark__tho-sand__comfortable__high.dtcg.json +1 -1
  286. package/tokens/modes/system-dark__tho-sand__comfortable__standard.dtcg.json +1 -1
  287. package/tokens/modes/system-dark__tho-sand__compact__high.dtcg.json +1 -1
  288. package/tokens/modes/system-dark__tho-sand__compact__standard.dtcg.json +1 -1
  289. package/tokens/modes/system-dark__tho__comfortable__high.dtcg.json +1 -1
  290. package/tokens/modes/system-dark__tho__comfortable__standard.dtcg.json +1 -1
  291. package/tokens/modes/system-dark__tho__compact__high.dtcg.json +1 -1
  292. package/tokens/modes/system-dark__tho__compact__standard.dtcg.json +1 -1
  293. package/tokens/modes/system-dark__thuy-mist__comfortable__high.dtcg.json +1 -1
  294. package/tokens/modes/system-dark__thuy-mist__comfortable__standard.dtcg.json +1 -1
  295. package/tokens/modes/system-dark__thuy-mist__compact__high.dtcg.json +1 -1
  296. package/tokens/modes/system-dark__thuy-mist__compact__standard.dtcg.json +1 -1
  297. package/tokens/modes/system-dark__thuy-ocean__comfortable__high.dtcg.json +1 -1
  298. package/tokens/modes/system-dark__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  299. package/tokens/modes/system-dark__thuy-ocean__compact__high.dtcg.json +1 -1
  300. package/tokens/modes/system-dark__thuy-ocean__compact__standard.dtcg.json +1 -1
  301. package/tokens/modes/system-dark__thuy__comfortable__high.dtcg.json +1 -1
  302. package/tokens/modes/system-dark__thuy__comfortable__standard.dtcg.json +1 -1
  303. package/tokens/modes/system-dark__thuy__compact__high.dtcg.json +1 -1
  304. package/tokens/modes/system-dark__thuy__compact__standard.dtcg.json +1 -1
  305. package/tokens/modes/system-light__default__comfortable__high.dtcg.json +1 -1
  306. package/tokens/modes/system-light__default__comfortable__standard.dtcg.json +1 -1
  307. package/tokens/modes/system-light__default__compact__high.dtcg.json +1 -1
  308. package/tokens/modes/system-light__default__compact__standard.dtcg.json +1 -1
  309. package/tokens/modes/system-light__hoa-lava__comfortable__high.dtcg.json +1 -1
  310. package/tokens/modes/system-light__hoa-lava__comfortable__standard.dtcg.json +1 -1
  311. package/tokens/modes/system-light__hoa-lava__compact__high.dtcg.json +1 -1
  312. package/tokens/modes/system-light__hoa-lava__compact__standard.dtcg.json +1 -1
  313. package/tokens/modes/system-light__hoa-plasma__comfortable__high.dtcg.json +1 -1
  314. package/tokens/modes/system-light__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  315. package/tokens/modes/system-light__hoa-plasma__compact__high.dtcg.json +1 -1
  316. package/tokens/modes/system-light__hoa-plasma__compact__standard.dtcg.json +1 -1
  317. package/tokens/modes/system-light__hoa__comfortable__high.dtcg.json +1 -1
  318. package/tokens/modes/system-light__hoa__comfortable__standard.dtcg.json +1 -1
  319. package/tokens/modes/system-light__hoa__compact__high.dtcg.json +1 -1
  320. package/tokens/modes/system-light__hoa__compact__standard.dtcg.json +1 -1
  321. package/tokens/modes/system-light__kim-steel__comfortable__high.dtcg.json +1 -1
  322. package/tokens/modes/system-light__kim-steel__comfortable__standard.dtcg.json +1 -1
  323. package/tokens/modes/system-light__kim-steel__compact__high.dtcg.json +1 -1
  324. package/tokens/modes/system-light__kim-steel__compact__standard.dtcg.json +1 -1
  325. package/tokens/modes/system-light__kim-titanium__comfortable__high.dtcg.json +1 -1
  326. package/tokens/modes/system-light__kim-titanium__comfortable__standard.dtcg.json +1 -1
  327. package/tokens/modes/system-light__kim-titanium__compact__high.dtcg.json +1 -1
  328. package/tokens/modes/system-light__kim-titanium__compact__standard.dtcg.json +1 -1
  329. package/tokens/modes/system-light__kim__comfortable__high.dtcg.json +1 -1
  330. package/tokens/modes/system-light__kim__comfortable__standard.dtcg.json +1 -1
  331. package/tokens/modes/system-light__kim__compact__high.dtcg.json +1 -1
  332. package/tokens/modes/system-light__kim__compact__standard.dtcg.json +1 -1
  333. package/tokens/modes/system-light__moc-bamboo__comfortable__high.dtcg.json +1 -1
  334. package/tokens/modes/system-light__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  335. package/tokens/modes/system-light__moc-bamboo__compact__high.dtcg.json +1 -1
  336. package/tokens/modes/system-light__moc-bamboo__compact__standard.dtcg.json +1 -1
  337. package/tokens/modes/system-light__moc-forest__comfortable__high.dtcg.json +1 -1
  338. package/tokens/modes/system-light__moc-forest__comfortable__standard.dtcg.json +1 -1
  339. package/tokens/modes/system-light__moc-forest__compact__high.dtcg.json +1 -1
  340. package/tokens/modes/system-light__moc-forest__compact__standard.dtcg.json +1 -1
  341. package/tokens/modes/system-light__moc__comfortable__high.dtcg.json +1 -1
  342. package/tokens/modes/system-light__moc__comfortable__standard.dtcg.json +1 -1
  343. package/tokens/modes/system-light__moc__compact__high.dtcg.json +1 -1
  344. package/tokens/modes/system-light__moc__compact__standard.dtcg.json +1 -1
  345. package/tokens/modes/system-light__tho-clay__comfortable__high.dtcg.json +1 -1
  346. package/tokens/modes/system-light__tho-clay__comfortable__standard.dtcg.json +1 -1
  347. package/tokens/modes/system-light__tho-clay__compact__high.dtcg.json +1 -1
  348. package/tokens/modes/system-light__tho-clay__compact__standard.dtcg.json +1 -1
  349. package/tokens/modes/system-light__tho-sand__comfortable__high.dtcg.json +1 -1
  350. package/tokens/modes/system-light__tho-sand__comfortable__standard.dtcg.json +1 -1
  351. package/tokens/modes/system-light__tho-sand__compact__high.dtcg.json +1 -1
  352. package/tokens/modes/system-light__tho-sand__compact__standard.dtcg.json +1 -1
  353. package/tokens/modes/system-light__tho__comfortable__high.dtcg.json +1 -1
  354. package/tokens/modes/system-light__tho__comfortable__standard.dtcg.json +1 -1
  355. package/tokens/modes/system-light__tho__compact__high.dtcg.json +1 -1
  356. package/tokens/modes/system-light__tho__compact__standard.dtcg.json +1 -1
  357. package/tokens/modes/system-light__thuy-mist__comfortable__high.dtcg.json +1 -1
  358. package/tokens/modes/system-light__thuy-mist__comfortable__standard.dtcg.json +1 -1
  359. package/tokens/modes/system-light__thuy-mist__compact__high.dtcg.json +1 -1
  360. package/tokens/modes/system-light__thuy-mist__compact__standard.dtcg.json +1 -1
  361. package/tokens/modes/system-light__thuy-ocean__comfortable__high.dtcg.json +1 -1
  362. package/tokens/modes/system-light__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  363. package/tokens/modes/system-light__thuy-ocean__compact__high.dtcg.json +1 -1
  364. package/tokens/modes/system-light__thuy-ocean__compact__standard.dtcg.json +1 -1
  365. package/tokens/modes/system-light__thuy__comfortable__high.dtcg.json +1 -1
  366. package/tokens/modes/system-light__thuy__comfortable__standard.dtcg.json +1 -1
  367. package/tokens/modes/system-light__thuy__compact__high.dtcg.json +1 -1
  368. package/tokens/modes/system-light__thuy__compact__standard.dtcg.json +1 -1
  369. package/tokens/native/CSModes.kt +129 -125
  370. package/tokens/native/CSModes.swift +129 -125
  371. package/tokens/native/CSTokens.kt +8 -8
  372. package/tokens/native/CSTokens.swift +8 -8
  373. package/tokens/native/cs_modes.dart +129 -125
  374. package/tokens/native/cs_tokens.dart +8 -8
  375. package/tokens/native/mode-provenance.json +11 -11
  376. package/tokens/provenance.json +6 -6
  377. package/tokens/styles.css +8 -4
  378. package/tokens/tokens.dtcg.json +26 -26
  379. package/tokens/tokens.js +12 -12
  380. package/tokens/tokens.json +11 -11
  381. package/tokens/variables.css +48 -15
  382. package/tokens/viewer.html +1 -0
  383. package/ui_kits/status-hub/login.html +3 -3
  384. package/ui_kits/status-hub/project.html +4 -6
  385. package/ui_kits/status-hub/settings.html +2 -3
  386. package/ui_kits/status-hub/status.css +24 -15
  387. package/ui_kits/website/careers.html +10 -17
  388. package/ui_kits/website/chat.html +14 -3
  389. package/ui_kits/website/site.css +21 -21
  390. package/ui_kits/website/work.html +4 -10
package/docs/UPSTREAM.md CHANGED
@@ -16,15 +16,12 @@ Verified live in browser: **69/69** `D1`–`D10` checks (`10.0 / 10`), **64/64**
16
16
  | `components/feedback/feedback.card.html` | `.frame { flex: 1 1 100%; min-width: 0 }` | Prevents the toast demo frame from collapsing to zero width inside the flex row. |
17
17
  | `components/logo/logo.card.html` | Lockup wordmark `color: var(--cs-color-text-primary)`. | Ensures the wordmark remains visible in dark mode. |
18
18
 
19
- ## 2 · Shipped verification suite (`audit/`)
19
+ ## 2 · Automated verification suite (`_audit/ci/`)
20
20
 
21
21
  | File | Purpose |
22
22
  |---|---|
23
- | `audit/v2.5.0-verification.html`, `audit/verify-v2.5.0.js`, `audit/fixture-v2.5.0.html` | Verification Audit & Specimen Workbench: 10 dimensions (`P0` tint safety · `P1` 32-scope WCAG 1.4.11 · `P2` Umber separation, 14-control invalid parity, VI diacritics · `P3` nested glass, `DESIGN.md`/asset contract · `D8`–`D10` Doctrine Immutables: dual-ring focus, ≥ 44px touch targets & motion safety, high-contrast, density & semantic status contrast), 69 checks × `v2.5.0+` / `v2.4.0` / `v2.3.1`, 32×6 contrast matrix, edge-case report, JSON export, and specimen switcher (`version × theme × element × variant`). |
24
- | `audit/v2.5.0-verification.json`, `_audit/ci/verify-audit-benchmarks-browser.mjs` | Machine-readable receipt and automated CI/prepublish non-regression gate (`npm run test:audit-regression`): **10.0 / 10** (`69/69` across `D1`–`D10`), embedded baseline suite **64/64** (`v2.4.0` tag `62/64`, `v2.3.1` `8/64`), render health **146/146**, and **0 watch** items. |
25
- | `audit/render-health.html` | Loads all 146 templates, component cards, and UI-kit/guideline pages in hidden frames (as authored / forced dark / high-contrast / any Ngũ Hành scope) and verifies zero unstyled, unresolved, erroring, empty, or low-contrast pages. |
26
- | `audit/fixture.html`, `audit/verify.js`, `audit/v2.4.0-verification.html` | Three-version loader (`?v=current|v240|baseline`) re-running the 64 baseline checks across `v2.5.0`, `v2.4.0`, and `v2.3.1`. |
27
- | `audit/baseline-2.4.0/styles.flat.css`, `audit/baseline-2.3.1/styles.flat.css` | Flattened `styles.css` closures from tags `v2.4.0` and `v2.3.1` for live three-version comparison. |
23
+ | `_audit/ci/verify-audit-benchmarks-browser.mjs`, `_audit/ci/lib/benchmark-checks.mjs` | Automated CI/prepublish live-browser benchmark gate (`npm run test:audit-regression`): scores **10.0 / 10** (`129/129` across 20 dimensions `D1`–`D20`), core baseline suite **64/64** (`10.0 / 10`), 192/192 cells in the 32×6 non-text contrast matrix (`≥ 3.0:1`), 3/3 Generation-2 complex stress-test screens, and **0 watch** items. |
24
+ | `_audit/ci/fixtures/benchmark-20d.html`, `_audit/ci/fixtures/benchmark-baseline.html`, `_audit/ci/fixtures/benchmark-gen2.html` | Current-tree DOM fixtures exercising 32 Theme × Element × Variant scopes, 14 form controls, Vietnamese diacritic metrics, container queries, print/glass rules, and complex multi-scope enterprise/AI/mobile screens against `/dist/styles.css` and `/styles.css`. |
28
25
 
29
26
  ## 3 · Host-specific items excluded from upstream
30
27
 
@@ -28,7 +28,7 @@ Self-audit checklist for evolving CyberSkill Design System — external standard
28
28
 
29
29
  ## Style expansion checklist (`data-cs-style`)
30
30
 
31
- Sole pack today: **liquid-glass** (`tokens/styles.css`, gate `_audit/style-contract.html`). When adding a style pack beyond liquid-glass:
31
+ Live packs: **liquid-glass** (default; absent ≡ default) and **matte-paper** (`tokens/styles.css` + `base/glass.css`, gate `_audit/style-contract.html`). When adding another style pack:
32
32
 
33
33
  1. Token overlay that **consumes** the existing 10 `--cs-accent-*` roles, including `--cs-accent-on-strong` (do not invent parallel Element packs).
34
34
  2. Specimen card + Storybook / Atomic View wiring if the style is product-selectable.
@@ -4,7 +4,7 @@ The supported web target is the latest two stable releases of Chrome, Firefox, S
4
4
 
5
5
  ## Required capabilities
6
6
 
7
- The system uses `color-mix(in oklab, ...)`, inline-size container queries, `:has()`, `text-wrap: balance` and native `inert`. These features predate the selected floor in the [pinned MDN browser compatibility data](https://github.com/mdn/browser-compat-data/tree/12bc0268c7fe89a4b23fab5c54702c1fb9c34f7a). The retained source record is `_audit/remediation/browser-compatibility-source.json`. No legacy-browser fallback or `inert` polyfill is promised.
7
+ The system uses `color-mix(in oklab, ...)`, inline-size container queries, `:has()`, `text-wrap: balance` and native `inert`. These features predate the selected floor in the [pinned MDN browser compatibility data](https://github.com/mdn/browser-compat-data/tree/12bc0268c7fe89a4b23fab5c54702c1fb9c34f7a). The retained source record is `_audit/ci/fixtures/browser-compatibility-source.json`. No legacy-browser fallback or `inert` polyfill is promised.
8
8
 
9
9
  For the selected latest-two stable floor, native `inert` is available and no `inert` polyfill is required. Its introduction versions are Chrome 102 ([Chrome release notes](https://developer.chrome.com/blog/new-in-chrome-102)), Firefox 112 ([Mozilla developer release notes](https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/112)), and Safari 15.5 on macOS, iOS and iPadOS ([WebKit release notes](https://webkit.org/blog/12669/new-webkit-features-in-safari-15-5/)); the [HTML Standard](https://html.spec.whatwg.org/multipage/interaction.html#the-inert-attribute) documents the native behavior. This is a feature-availability conclusion for the declared floor, not certification of every admitted browser release, physical-device focus behavior or assistive-technology behavior. Older targets remain outside this promise and need a separately validated fallback.
10
10
 
@@ -8,7 +8,7 @@ Removing a public contract requires a major release **and both** at least two di
8
8
 
9
9
  The authored `components/release-compatibility.json` records the pre-candidate baseline, reviewed pending change classifications, dated notices and publication evidence. Release planning, prepared-candidate verification and tag verification enforce it alongside the unchanged support-approval and exact-source gates. The approved compiled-default entry, APG Menu keyboard, SegmentedControl radio default and default floating placement changes are classified as breaking for the current unreleased revision; patch/minor preparation is blocked. This does not assign a new release identifier, approve support evidence, create a tag or authorize publication. Before a later release cycle, reconcile the baseline and pending entries against the actual accepted publication; never silently clear notice history.
10
10
 
11
- SegmentedControl retains deprecated semantic aliases `role="tablist"` and `role="radiogroup"`. When `mode` is omitted, the alias selects matching tab or radio children; explicit `mode` takes precedence, and the default remains radio. Other role values reject rather than producing mismatched ARIA semantics. Prefer `mode="tabs"` or `mode="radio"`. The earlier removal proposal is archived in `_audit/remediation/segmented-role-removal-proposal-history.json`; it is not a current removal. Rejecting arbitrary roles remains classified as breaking. Announcement fields remain null: this local guidance does not establish a published notice, date or version. Any future removal still requires a major release after two distinct published minor releases and 90 days of recorded notice, alongside all other release gates.
11
+ SegmentedControl retains deprecated semantic aliases `role="tablist"` and `role="radiogroup"`. When `mode` is omitted, the alias selects matching tab or radio children; explicit `mode` takes precedence, and the default remains radio. Other role values reject rather than producing mismatched ARIA semantics. Prefer `mode="tabs"` or `mode="radio"`. The earlier removal proposal is archived in `_audit/ci/fixtures/segmented-role-removal-proposal-history.json`; it is not a current removal. Rejecting arbitrary roles remains classified as breaking. Announcement fields remain null: this local guidance does not establish a published notice, date or version. Any future removal still requires a major release after two distinct published minor releases and 90 days of recorded notice, alongside all other release gates.
12
12
 
13
13
  The currently declared React support lines are 18.x and 19.x; packed-consumer and hydration fixtures test their pinned versions. This is a major-version support window, not proof of every historical patch or a promise about unreleased React majors. Removing a declared line follows the same major-release and deprecation policy. New React majors require explicit compatibility validation before widening peer ranges. Browser targets remain the latest-two policy in the browser-support guide, with engine and physical-device evidence reported separately.
14
14
 
package/docs/consuming.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Consuming & upgrading the CyberSkill Design System
2
2
 
3
- **Source checkout:** VERSION **<!-- cs-source-version:checkout -->2.7.0<!-- /cs-source-version -->** is local source identity, not a registry-availability claim. For an unpublished candidate, validate the reviewed local package tarball or source checkout. Registry commands below refer to published stable 2.6.0 (and the dated ADOPT-001 1.7.2 sibling inventory) and are not automatically updated by preparation. Preparation does not authorize publication.
3
+ **Source checkout:** VERSION **<!-- cs-source-version:checkout -->2.9.0<!-- /cs-source-version -->** is local source identity, not a registry-availability claim. For an unpublished candidate, validate the reviewed local package tarball or source checkout. Registry commands below refer to published stable 2.8.0 (and the dated ADOPT-001 1.7.2 sibling inventory) and are not automatically updated by preparation. Preparation does not authorize publication.
4
4
 
5
5
  How any project — human-driven or agent-driven — adopts this HTML-first design system, and how to take updates safely. Published on Storybook **Docs** at `design.cyberskill.world`.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Contrast report — elemental pairings (APCA)
2
2
 
3
- Generated · sweep at VERSION 2.7.0.
3
+ Generated · sweep at VERSION 2.9.0.
4
4
 
5
5
  Published on Storybook **Docs** at `design.cyberskill.world`.
6
6
 
@@ -104,10 +104,10 @@ Rows use the declared light or dark `--cs-color-link` colour. White, reference-p
104
104
  | tho · sand | link on tint (body) | #695300 / #FEF8E7 | 6.98:1 | ✓ |
105
105
  | tho · sand | link on reference raised cream (body) | #695300 / #FBF4E9 | 6.77:1 | ✓ |
106
106
  | tho · sand | link on reference dark panel (body) | #F9E5AE / #221710 | 14.06:1 | ✓ |
107
- | tho | link on white (body) | #644A05 / #FFFFFF | 8.32:1 | ✓ |
108
- | tho | link on reference page (body) | #644A05 / #FFFDF8 | 8.19:1 | ✓ |
109
- | tho | link on tint (body) | #644A05 / #FBF4E9 | 7.62:1 | ✓ |
110
- | tho | link on reference raised cream (body) | #644A05 / #FBF4E9 | 7.62:1 | ✓ |
107
+ | tho | link on white (body) | #744000 / #FFFFFF | 8.48:1 | ✓ |
108
+ | tho | link on reference page (body) | #744000 / #FFFDF8 | 8.34:1 | ✓ |
109
+ | tho | link on tint (body) | #744000 / #FBF4E9 | 7.76:1 | ✓ |
110
+ | tho | link on reference raised cream (body) | #744000 / #FBF4E9 | 7.76:1 | ✓ |
111
111
  | tho | link on reference dark panel (body) | #FFD57A / #221710 | 12.56:1 | ✓ |
112
112
  | tho · clay | link on white (body) | #462402 / #FFFFFF | 13.87:1 | ✓ |
113
113
  | tho · clay | link on reference page (body) | #462402 / #FFFDF8 | 13.65:1 | ✓ |
@@ -184,8 +184,8 @@ Pair `--cs-accent-strong` with `--cs-accent-on-strong`: both light and dark pack
184
184
  |---|---|---|---|---|
185
185
  | tho · sand | light | #FFFFFF / #856A03 | 80.8 | ✓ |
186
186
  | tho · sand | dark | #FFFFFF / #80671A | 82.2 | ✓ |
187
- | tho | light | #FFFFFF / #916D11 | 78.4 | ✓ |
188
- | tho | dark | #FFFFFF / #6E5205 | 90.1 | ✓ |
187
+ | tho | light | #FFFFFF / #A4631E | 78.4 | ✓ |
188
+ | tho | dark | #FFFFFF / #7D480C | 90.5 | ✓ |
189
189
  | tho · clay | light | #FFFFFF / #5A3004 | 99.5 | ✓ |
190
190
  | tho · clay | dark | #FFFFFF / #5C3001 | 99.3 | ✓ |
191
191
  | hoa · plasma | light | #FFFFFF / #896163 | 81.7 | ✓ |
@@ -221,7 +221,7 @@ Proposal targets in `_audit/apca-dark-preview.html`: bright ≥ 75 · accent ≥
221
221
  | Pack | bright | accent | on | ink |
222
222
  |---|---|---|---|---|
223
223
  | tho · sand | 90.5 | 76.1 | 82.2 | 87.4 |
224
- | tho | 81.9 | 64.7 | 90.1 | 81 |
224
+ | tho | 81.9 | 64.7 | 90.5 | 81 |
225
225
  | tho · clay | 77.1 | 60.6 | 99.3 | 79.4 |
226
226
  | hoa · plasma | 89.4 | 75.1 | 82.8 | 86.4 |
227
227
  | hoa | 81.2 | 63.2 | 90.9 | 80.3 |
@@ -13,10 +13,10 @@ Every rendered surface resolves four orthogonal scopes — never encode one axis
13
13
  |---|---|---|---|
14
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
- | **Language** | `lang` / Language tweak | EN · VI required; `ja` spike (BCP-47 primary subtags) | component registry + template props — see `docs/decisions/locale-architecture.md` |
17
- | **Style** | `data-cs-style` (optional; absent ≡ `liquid-glass`) | surface material pack | `tokens/styles.css` |
16
+ | **Language** | `lang` / Language tweak | EN · VI (`vi` default on UI surfaces; internal `ja` i18n spike) | component registry + template props — see `docs/decisions/locale-architecture.md` |
17
+ | **Style** | `data-cs-style` (optional; absent ≡ `liquid-glass`) | surface material pack (`liquid-glass` · `matte-paper`) | `tokens/styles.css` + `base/glass.css` |
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 composite focus indicator (text-primary contour + ochre halo), APCA floors, ≥44px targets.
19
+ Style ships two packs: **liquid-glass** (default) and **matte-paper** (opaque crisp paper surfaces). Immutable under all axes: Umber/Ochre anchors, voice, type families, semantic status colors, the composite focus indicator (text-primary contour + ochre halo), APCA floors, ≥44px targets.
20
20
 
21
21
  ## Naming grammar
22
22
 
@@ -78,13 +78,13 @@ only for HTML element content, never URL, attribute, CSS or script contexts.
78
78
 
79
79
  **New element variant** — stay inside the element's oklch envelope; set the 10 `--cs-accent-*` contract tokens (incl. `--cs-accent-on-strong` ≥4.5:1 and body APCA75 on `-strong`) 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.
80
80
 
81
- **Ship check** — follow the portable verification gate in `docs/doctrine.md`, then run `_audit/docs-consistency.html` **and** `_audit/namespace-portability.html` (both must be green). source checkout VERSION **<!-- cs-source-version:checkout -->2.7.0<!-- /cs-source-version -->**.
81
+ **Ship check** — follow the portable verification gate in `docs/doctrine.md`, then run `_audit/docs-consistency.html` **and** `_audit/namespace-portability.html` (both must be green). source checkout VERSION **<!-- cs-source-version:checkout -->2.9.0<!-- /cs-source-version -->**.
82
82
 
83
83
  ## Decision log (owner-approved)
84
84
 
85
85
  - Elements fully replace Ochre inside product scopes; plasma's hot-pink edge approved (Jul 2026).
86
86
 
87
- - Axes are Theme × Element × Language × Style. Style pack is liquid-glass (sole pack; absent ≡ default).
87
+ - Axes are Theme × Element × Language × Style. Style packs are `liquid-glass` (default; absent ≡ default) and `matte-paper`.
88
88
 
89
89
  - Product registry is **locked** (Jul 2026) — eight portfolio mappings in `docs/products.md`; do not invent new product → element assignments.
90
90
 
package/docs/decisions.md CHANGED
@@ -15,7 +15,7 @@ The numbered sections below preserve dated decisions and stable citation IDs; th
15
15
  | Security release window and acknowledgement target | `SECURITY.md` |
16
16
  | Support acceptance and retained approvals | `components/lifecycle.json`, `docs/conventions.md` |
17
17
  | Release preparation and separate authorization | `docs/release-notes.md`, `.github/workflows/release.yml` |
18
- | Validation and current finding dispositions | `_audit/remediation/assessment-remediation.md`, `test-results/final-validation.json` |
18
+ | Validation and current finding dispositions | `_audit/ci/unit-suites.json`, `test-results/final-validation.json` |
19
19
 
20
20
  Published release notes remain historical records. A local build, a prepared candidate, an approved support record and a published release are distinct states.
21
21
 
@@ -104,7 +104,7 @@ Operational follow-ups — not product marketing, not a backlog surface:
104
104
 
105
105
  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`.
106
106
 
107
- 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).
107
+ 8. **Style axis (`data-cs-style`)** (Jul 2026; expanded Nov 2026) — Fourth product axis; live packs **liquid-glass** (default; absent ≡ liquid-glass) and **matte-paper** (zero-blur opaque crisp paper surfaces for editorial/dense workspaces). Contract: `tokens/styles.css` + `base/glass.css` + hard gate `_audit/style-contract.html`. Future Style packs may expand only via owner approval + Expansion Rule checklist in `docs/benchmark-rubric.md` (do not invent packs casually).
108
108
 
109
109
  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.
110
110
 
@@ -130,7 +130,7 @@ Rules:
130
130
 
131
131
  Normative record: [`docs/decisions/locale-architecture.md`](./decisions/locale-architecture.md).
132
132
 
133
- - Language stays a product axis (Theme × Element × Language × Style). Values are primary language subtags (`en` · `vi` · spike `ja`), not a nested locale axis and not full region tags yet.
133
+ - Language stays a product axis (Theme × Element × Language × Style). UI surfaces expose `vi` · `en` only (`vi` default); `ja` remains an internal programmatic BCP-47 fallback spike for Pagination, not a UI toolbar locale.
134
134
  - Registry keeps required EN·VI pairs; optional spike tables must match `en` keys when present.
135
135
  - Vietnamese-first default unchanged (`lang` unset → `vi`). Plural/ICU and region variants are follow-on.
136
136
 
package/docs/deploy.md CHANGED
@@ -5,7 +5,7 @@ Published on Storybook **Docs** at `design.cyberskill.world`.
5
5
  Two tracks:
6
6
 
7
7
  1. **Portable design system (consumers)** — HTML consumers can link the reviewed `styles.css` and optional `_ds_bundle.js`, or use the browser legacy entry `_esm/cs.mjs`, without a bundler. The default npm import (`dist/esm/_esm/react.mjs`) is compiled ESM with React peers; React apps need a compatible module resolver. Source JSX remains available through the explicit source export. Storybook is host tooling. The npm portable payload follows `package.json` → `files`; public hosting uses the reviewed allowlist in `scripts/public-site-policy.json`.
8
- 2. **Host site (`design.cyberskill.world`)** — static output packaged for Vercel. Packaging **does** run Node once at deploy time so Storybook ships as the product surface at `/`. There is still no long-running app server.
8
+ 2. **Host site (`design.cyberskill.world`)** — static output packaged for GitHub Pages (`.github/workflows/pages.yml` publishing `.vercel-static/` with `.nojekyll` and `CNAME`) or any static host. Packaging **does** run Node once at deploy time so Storybook ships as the product surface at `/`. There is still no long-running app server.
9
9
 
10
10
  Production **`/`** is the Storybook static build. Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, and `/playground/:path*` redirect to `/`.
11
11
 
@@ -48,7 +48,7 @@ If you host under a **different** domain, change the absolute URLs in those meta
48
48
 
49
49
  **Without Storybook:** after provenance review and explicit deployment approval, serve the reviewed portable inventory as the webroot.
50
50
 
51
- **With Storybook at `/`:** `npm run build:site` writes a reviewed portable mirror to `.vercel-static/` and the Vercel deployment artifact to `.vercel/output/`. Vercel uses the latter's `config.json`; do not supply an old Output Directory override or rewrite `vercel.json` during a build to predict hashes that do not exist yet.
51
+ **With Storybook at `/`:** `npm run build:site` writes a reviewed portable mirror to `.vercel-static/` (including `.nojekyll` and `CNAME` for GitHub Pages deployment via `.github/workflows/pages.yml`) and the Vercel deployment artifact to `.vercel/output/`. Vercel uses the latter's `config.json`; do not supply an old Output Directory override or rewrite `vercel.json` during a build to predict hashes that do not exist yet.
52
52
 
53
53
  Other static hosts need an adapter that maps each final HTML path and its aliases to the exact CSP in `public-site-csp.json`, retains the security headers and legacy redirects from `scripts/site-deployment-policy.json`, and denies inline scripts on unknown paths. Hashes must come from the final emitted bytes, including the deterministic template logic wrapper. A single copied CSP string cannot represent these page-specific permissions.
54
54
 
@@ -1,13 +1,13 @@
1
1
  # Design styles
2
2
 
3
- The live styling axes are **Theme × Element × Language × Style**. Style’s sole pack today is **liquid-glass**. An absent style attribute selects that pack. Unmarked descendants inherit their nearest theme and element scopes; the neutral root defaults to light with the studio brand anchors. Published on Storybook **Docs** at `design.cyberskill.world`.
3
+ The live styling axes are **Theme × Element × Language × Style**. Style ships two surface material packs: **liquid-glass** (default; an absent style attribute selects it) and **matte-paper** (opaque crisp paper surfaces with zero backdrop blur). Unmarked descendants inherit their nearest theme and element scopes; the neutral root defaults to light with the studio brand anchors. Published on Storybook **Docs** at `design.cyberskill.world`.
4
4
 
5
5
  | Axis | How to set it | What it changes |
6
6
  |---|---|---|
7
7
  | **Theme** | `data-theme="light"`, `"dark"` or `"system"`; absence inherits the nearest scope (light at the neutral root) | light/dark semantic colours (product UI axis). Explicit light resets a dark ancestor. System follows the OS light/dark preference through `prefers-color-scheme`; Storybook toolbar and Atomic View expose all three values |
8
8
  | **Element** | `data-cs-element` + optional `data-cs-variant` | Ngũ Hành product identity (**15 packs** = 5 elements × soft/middle/deep) |
9
- | **Language** | `lang` / Language tweak | EN · VI built-in copy, Vietnamese by default; optional `ja` is a bounded Pagination spike, not full Japanese coverage |
10
- | **Style** | `data-cs-style` (optional; absent ≡ `liquid-glass`) | Surface material pack. Sole pack today: **liquid-glass** (`tokens/styles.css` + `base/glass.css`) |
9
+ | **Language** | `lang` / Language tweak | EN · VI built-in copy (`vi` default on UI surfaces); programmatic `ja` remains an internal Pagination i18n spike, not a UI toolbar locale |
10
+ | **Style** | `data-cs-style` (optional; absent ≡ `liquid-glass`) | Surface material pack: **liquid-glass** (default frosted optical blur) · **matte-paper** (opaque crisp paper surfaces, `tokens/styles.css` + `base/glass.css`) |
11
11
 
12
12
  ## Element colour contract
13
13
 
@@ -24,11 +24,12 @@ Source of truth: [`tokens/element-seeds.json`](../tokens/element-seeds.json) →
24
24
  | **Never remap** | composite focus indicator (text-primary contour + ochre halo) · semantic status colours |
25
25
  | **Geometry gate** | [`_audit/element-geometry.html`](../_audit/element-geometry.html) — intensity sync · variant distinctness · hue identity |
26
26
 
27
- ## Style pack — liquid-glass
27
+ ## Style packs — liquid-glass & matte-paper
28
28
 
29
- - Liquid-glass materials (`cs-surface-*`) are the default surface language.
29
+ - **liquid-glass** (`cs-surface-*`, default when `data-cs-style` is absent) is the optical frosted-glass surface language.
30
+ - **matte-paper** (`data-cs-style="matte-paper"`) removes backdrop blur, switches `.cs-surface-*` and `.cs-card` / `.cs-dialog` / `.cs-drawer` / `.cs-popover__panel` / `.cs-menu__list` to crisp opaque `--cs-color-surface-panel` / `--cs-color-surface-raised` fills with `1px` solid `--cs-color-border-default` borders and tactile flat elevation (`--cs-shadow-xs`), ideal for legal/editorial instruments, dense ERP tables, and SOC War-Rooms; a nested `[data-cs-style="liquid-glass"]` restores optical blur.
30
31
  - 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.
32
+ - Gate: [`_audit/style-contract.html`](../_audit/style-contract.html) — allowlists `liquid-glass` and `matte-paper`.
32
33
  - Rejected by doctrine: neon/cyberpunk cold hues, memphis playfulness, full skeuomorphism, emoji in UI chrome.
33
34
  - 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.
34
35
 
@@ -40,7 +41,7 @@ Prefer:
40
41
  3. A documented pattern in `docs/conventions.md` + a specimen card when the pattern should be reusable.
41
42
  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 10 accent roles (incl. `on-strong`); they must not invent parallel Element packs.
42
43
 
43
- Do not invent a fifth product axis, and do not add a second Style pack without the Expansion Rule checklist.
44
+ Do not invent a fifth product axis, and do not add an unreviewed Style pack without the Expansion Rule checklist.
44
45
 
45
46
  ## Internal theme switches
46
47
 
@@ -53,7 +54,7 @@ Maintain the authored generator and run `npm run tokens:generate` and `npm run t
53
54
 
54
55
  ## Density and public spacing roles
55
56
 
56
- `data-cs-density="compact"` currently affects Button and shared `.cs-field__control` metrics. The latter is used by TextField, Textarea, Select, NativeSelect and Mentions. Component tokens carry these overrides directly; the separate `--cs-density-*` utility exports do not establish broader component adoption. Existing coarse-pointer target floors remain in force.
57
+ `data-cs-density="compact"` tightens Button, shared `.cs-field__control` metrics (TextField, Textarea, Select, NativeSelect, Mentions), and container rhythm across `.cs-card`, `.cs-table`, `.cs-dialog`, `.cs-field`, `.cs-review-gate`, `.cs-alert`, `.cs-toast`, `.cs-tag`, `.cs-tab`, `.cs-menu`, `.cs-stat`, and `.cs-divider` (with nested `[data-cs-density="comfortable"]` reset). Existing `>= 44px` coarse-pointer target floors remain strictly in force. `data-cs-contrast="high"` (and `prefers-contrast: more`) reinforces text/border tokens plus form controls, glass surface borders, and table/datagrid cell dividers.
57
58
 
58
59
  Spacing roles can replace a literal only when they express the same layout role. The current remediations verify unchanged geometry plus actual token intervention for controls and collection layouts. Border widths, font sizes, fixed geometry and touch targets are not automatically spacing-token candidates. A `px` census therefore measures literals, not defects.
59
60
 
package/docs/doctrine.md CHANGED
@@ -42,7 +42,7 @@ Deep checks, never surface spot-checks. Cover the **whole set and every relevant
42
42
  | Language | Vietnamese-first; every UI string ships an EN + VN pair |
43
43
  | Accessibility floor | APCA Lc ≥ 75 body text; focus rings never removed; ≥ 44px touch targets |
44
44
  | Axes | Theme × Element × Language × Style (independent) |
45
- | Style pack | liquid-glass (sole pack; absent ≡ default) |
45
+ | Style pack | liquid-glass (default; absent ≡ default) · matte-paper |
46
46
 
47
47
  One accent per surface. Semantic statuses and the composite focus indicator (text-primary contour + ochre halo) are never elemental. Lumi stays golden in every element.
48
48
 
package/docs/four-axes.md CHANGED
@@ -4,8 +4,8 @@ The design system exposes four **independent** axes — the same switches in thi
4
4
 
5
5
  1. **Theme** — `data-theme` — light (default) · dark · **system** (OS `prefers-color-scheme`)
6
6
  2. **Element** — `data-cs-element` (+ optional `data-cs-variant`) — Ngũ Hành product identity: Kim · Mộc · Thủy · Hỏa · Thổ, the packs declared by the [current catalog](reference-catalog.json) in the Element toolbar (same set as **Foundations/Elements**, Atomic View, and template EL maps)
7
- 3. **Language** — `lang` — `en` · `vi` (see **I18n**)
8
- 4. **Style** — `data-cs-style` — sole pack today: `liquid-glass` (absent ≡ liquid-glass)
7
+ 3. **Language** — `lang` — `vi` (default) · `en` (see **I18n**)
8
+ 4. **Style** — `data-cs-style` — `liquid-glass` (default; absent ≡ liquid-glass) · `matte-paper` (opaque crisp paper surfaces)
9
9
 
10
10
  State them on a container for components that consume these scopes. Template support is declared per template in `docs/reference-catalog.json` (published counts); static print documents, UI kits and fixed-language collateral have documented boundaries. Language changes also require translated content and a renderer that selects it:
11
11
 
@@ -33,4 +33,4 @@ Storybook defaults: `light · tho · vi · liquid-glass`.
33
33
  - Don't remap semantic status colours or the Ochre focus halo per element
34
34
  - Don't mix two element accents as primary + secondary (gradient wash along Tương sinh only)
35
35
  - Don't inline one-language UI chrome in components
36
- - Don't invent a second Style pack without the Expansion Rule checklist
36
+ - Don't invent an unreviewed Style pack without the Expansion Rule checklist
@@ -49,7 +49,7 @@ Benchmark principles (WCAG · APCA · OKLCH · DTCG · CDS doctrine + style expa
49
49
  | Template language parity | `_audit/template-lang-parity.html` | Static source scan of all 85 `.dc.html`: en/vi hole-map key sets identical and non-empty (21 map templates); `sc-if` `isEN`/`isVN` branches paired (24 branch templates); every `language`-tweak template has a bilingual mechanism; EN-leak lexicon (Unsubscribe · View in browser · Preferences · All rights reserved · Manage subscription · Sent with) never appears outside `isEN` guards / the `en` map. VN-first stacked instruments (38 `vn-*` + 3 `doc-*`) are leak-exempt by design — both languages always render | 0 key drifts, 0 unpaired branches, 0 leaks (`__langparity`) | Hard | Fast board CI |
50
50
  | APCA dark packs | `_audit/apca-dark-preview.html` | All 15 element×variant packs hold their APCA targets in dark (bright-as-text ≥ 75, accent UI ≥ 60, ink-on-accent ≥ 75, ink-on-tint ≥ 75) | 0 current failures (`__apcaPreview.currentFail === 0`) | Hard | Fast board CI |
51
51
  | Element geometry | `_audit/element-geometry.html` | Soft/middle/deep intensity sync across five elements; variant distinctness; light↔dark hue identity; Thổ middle pins logo ochre; packs generated from seeds | `__elementgeometry.pass` | Hard | Fast board CI |
52
- | Style contract | `_audit/style-contract.html` | Style axis allowlist: sole pack `liquid-glass` (absent ≡ default); `styles.css` imports `tokens/styles.css`; `--cs-style-pack` resolves; no unknown `data-cs-style` in scanned sources | `__stylecontract.pass` | Hard | Fast board CI |
52
+ | Style contract | `_audit/style-contract.html` | Style axis allowlist: `liquid-glass` (default; absent ≡ default) and `matte-paper`; `styles.css` imports `tokens/styles.css`; `--cs-style-pack` resolves for both; no unknown `data-cs-style` in scanned sources | `__stylecontract.pass` | Hard | Fast board CI |
53
53
  | Visual baselines | `_audit/visual-diff.html` | Template baselines exist and are loadable for side-by-side / overlay comparison | Baselines present; drift judged by eye (`__visualdiff`) | Advisory | Fast board CI |
54
54
  | Component baselines | `_audit/component-visual-diff.html` | 12 curated component crops anchor the atomic tiers for visual comparison | Crops render + baselines present (`__componentVisualDiff`) | Advisory | Fast board CI |
55
55
  | Component state paint | `_audit/component-state-paint.html` | Primary, secondary, ghost and danger buttons, an open dialog, an open menu, a field error and a selected data row paint the authored light and dark colors. Channel delta uses `PIXEL_CHANNEL_TOLERANCE` from the pixel contract. The 15 Linux page PNGs stay the pixel-diff set. | `__statepaint.pass` | Hard | Fast board CI + three-engine unit test |
@@ -160,3 +160,5 @@ The packed-assets check parses every packed JS/CJS/MJS/JSX file for literal impo
160
160
  Packed HTML inline scripts are also scanned when their type is absent, `module`, `text/javascript`, `application/javascript`, `text/ecmascript`, `application/ecmascript`, `text/babel` or `text/jsx`. Data and other script types are excluded. Inline module paths resolve relative to the HTML file. Missing-import and invalid-syntax probes must fail; JSON data blocks must remain unparsed. This scans dependency syntax without executing the inline programs or certifying every runtime resource.
161
161
 
162
162
  `npm run test:font-rendering` uses Chromium platform-font inspection to reject system fallback for the defined Vietnamese repertoire in NFC and NFD forms. It is part of `test:unit`. The D82 font-subset repair passes the defined NFC/NFD repertoire on both source and flattened stylesheets, with no system fallback in the Chromium fixture. This does not certify every Unicode character, native platform or human visual acceptance. Static cmap coverage and `document.fonts.ready` are not sufficient rendering proof; do not normalize caller data silently to bypass the gate.
163
+
164
+ `npm run test:audit-regression` (`node _audit/ci/verify-audit-benchmarks-browser.mjs`) runs headless Chromium across `_audit/ci/fixtures/benchmark-20d.html`, `_audit/ci/fixtures/benchmark-baseline.html`, and `_audit/ci/fixtures/benchmark-gen2.html` using shared assertions in `_audit/ci/lib/benchmark-checks.mjs`. It verifies **129/129** checks across 20 dimensions (`D1`–`D20`) at **10.0 / 10**, **64/64** baseline checks at **10.0 / 10**, **192/192** cells (`≥ 3.0:1`) across the 32×6 non-text contrast matrix, and **3/3** Generation-2 stress-test product screens with **0 watch** items. To extend the benchmark after internal reviews or external AI evaluations (Google Stitch / Claude Design), add new assertions to `_audit/ci/lib/benchmark-checks.mjs` and remove temporary external artifacts once verified.