@cyberskill/design 2.8.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 (383) hide show
  1. package/DESIGN.md +7 -7
  2. package/README.md +14 -8
  3. package/SECURITY.md +4 -4
  4. package/SKILL.md +1 -1
  5. package/VERSION +1 -1
  6. package/_ds_bundle.js +2 -2
  7. package/_ds_bundle.js.map +1 -1
  8. package/_ds_manifest.json +210 -200
  9. package/_esm/cs.mjs +2 -2
  10. package/base/a11y.css +18 -2
  11. package/base/ai.css +2 -2
  12. package/base/collections.css +6 -3
  13. package/base/components.css +107 -20
  14. package/base/controls.css +55 -27
  15. package/base/data.css +17 -5
  16. package/base/feedback.css +8 -0
  17. package/base/forms.css +7 -4
  18. package/base/glass.css +95 -0
  19. package/base/navigation.css +9 -1
  20. package/base/responsive.css +9 -4
  21. package/components/contracts.json +202 -62
  22. package/components/css-index.json +145 -41
  23. package/components/data/data.card.html +1 -1
  24. package/components/prompt-api.json +2 -2
  25. package/components/release-compatibility.json +1 -1
  26. package/components/specifications.json +204 -64
  27. package/components/static-html-reference.json +20 -20
  28. package/dist/esm/build.json +1 -1
  29. package/dist/styles.css +385 -86
  30. package/dist/styles.min.css +1 -1
  31. package/docs/benchmark-rubric.md +1 -1
  32. package/docs/consuming.md +1 -1
  33. package/docs/contrast-report.md +8 -8
  34. package/docs/conventions.md +5 -5
  35. package/docs/decisions.md +2 -2
  36. package/docs/deploy.md +1 -1
  37. package/docs/design-styles.md +9 -8
  38. package/docs/doctrine.md +1 -1
  39. package/docs/four-axes.md +3 -3
  40. package/docs/quality-gates.md +3 -1
  41. package/docs/reference-catalog.json +52 -52
  42. package/docs/release-notes.md +18 -2
  43. package/docs/static-html-reference.md +18 -18
  44. package/docs/storybook.md +1 -1
  45. package/docs/template-inventory.json +35 -35
  46. package/docs/vi/benchmark-rubric.md +1 -1
  47. package/docs/vi/consuming.md +1 -1
  48. package/docs/vi/contrast-report.md +8 -8
  49. package/docs/vi/conventions.md +5 -5
  50. package/docs/vi/decisions.md +2 -2
  51. package/docs/vi/deploy.md +1 -1
  52. package/docs/vi/design-styles.md +9 -8
  53. package/docs/vi/doctrine.md +1 -1
  54. package/docs/vi/entrypoints/CONTRIBUTING.md +9 -2
  55. package/docs/vi/entrypoints/DESIGN.md +7 -7
  56. package/docs/vi/entrypoints/README.md +14 -8
  57. package/docs/vi/entrypoints/SKILL.md +1 -1
  58. package/docs/vi/entrypoints/llms.txt +1 -1
  59. package/docs/vi/four-axes.md +3 -3
  60. package/docs/vi/quality-gates.md +3 -1
  61. package/docs/vi/release-notes.md +18 -2
  62. package/docs/vi/static-html-reference.md +18 -18
  63. package/docs/vi/storybook.md +1 -1
  64. package/guidance/agent-contract.json +3 -3
  65. package/guidelines/atomic-view.html +7 -7
  66. package/guidelines/brand-imagery.html +1 -1
  67. package/guidelines/colors-surfaces.html +4 -4
  68. package/guidelines/colors-text.html +4 -4
  69. package/guidelines/elements-components.html +3 -3
  70. package/guidelines/elements-concept.html +1 -1
  71. package/guidelines/guideline-language.js +1 -1
  72. package/guidelines/motion.html +4 -4
  73. package/guidelines/responsive-bilingual.html +4 -4
  74. package/llms.txt +1 -1
  75. package/package.json +1 -1
  76. package/styles/components/manifest.json +179 -139
  77. package/styles.layered.css +245 -59
  78. package/styles.layered.provenance.json +16 -16
  79. package/templates/_vendor/doc-export.js +8 -1
  80. package/templates/ai-cluster-demo.html +2 -2
  81. package/templates/app-shell/AppShell.dc.html +2 -2
  82. package/templates/bod-deck/BodDeck.dc.html +3 -3
  83. package/templates/bod-investor-update/BodInvestorUpdate.dc.html +1 -1
  84. package/templates/dashboard/Dashboard.dc.html +2 -2
  85. package/templates/delivery-qbr-deck/DeliveryQbrDeck.dc.html +2 -2
  86. package/templates/delivery-status-email/DeliveryStatusEmail.dc.html +1 -1
  87. package/templates/email/Email-VN-standalone.html +2 -2
  88. package/templates/email-safe/email-announcement.html +5 -5
  89. package/templates/email-safe/email-dunning.html +5 -5
  90. package/templates/email-safe/email-investor.html +5 -5
  91. package/templates/email-safe/email-launch.html +5 -5
  92. package/templates/email-safe/email-newsletter.html +6 -6
  93. package/templates/email-safe/email-status.html +5 -5
  94. package/templates/email-safe/email-transactional.html +5 -5
  95. package/templates/kitchen-sink.html +10 -6
  96. package/templates/marketing-newsletter/MarketingNewsletter.dc.html +4 -4
  97. package/templates/marketing-page/MarketingPage.dc.html +4 -2
  98. package/templates/playground.html +5 -4
  99. package/templates/sales-proposal-deck/SalesProposalDeck.dc.html +5 -5
  100. package/tokens/colors.css +1 -1
  101. package/tokens/declarations.json +1851 -1355
  102. package/tokens/element-seeds.json +1 -1
  103. package/tokens/elements.css +40 -10
  104. package/tokens/elevation.css +2 -2
  105. package/tokens/modes/dark__default__comfortable__high.dtcg.json +1 -1
  106. package/tokens/modes/dark__default__comfortable__standard.dtcg.json +1 -1
  107. package/tokens/modes/dark__default__compact__high.dtcg.json +1 -1
  108. package/tokens/modes/dark__default__compact__standard.dtcg.json +1 -1
  109. package/tokens/modes/dark__hoa-lava__comfortable__high.dtcg.json +1 -1
  110. package/tokens/modes/dark__hoa-lava__comfortable__standard.dtcg.json +1 -1
  111. package/tokens/modes/dark__hoa-lava__compact__high.dtcg.json +1 -1
  112. package/tokens/modes/dark__hoa-lava__compact__standard.dtcg.json +1 -1
  113. package/tokens/modes/dark__hoa-plasma__comfortable__high.dtcg.json +1 -1
  114. package/tokens/modes/dark__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  115. package/tokens/modes/dark__hoa-plasma__compact__high.dtcg.json +1 -1
  116. package/tokens/modes/dark__hoa-plasma__compact__standard.dtcg.json +1 -1
  117. package/tokens/modes/dark__hoa__comfortable__high.dtcg.json +1 -1
  118. package/tokens/modes/dark__hoa__comfortable__standard.dtcg.json +1 -1
  119. package/tokens/modes/dark__hoa__compact__high.dtcg.json +1 -1
  120. package/tokens/modes/dark__hoa__compact__standard.dtcg.json +1 -1
  121. package/tokens/modes/dark__kim-steel__comfortable__high.dtcg.json +1 -1
  122. package/tokens/modes/dark__kim-steel__comfortable__standard.dtcg.json +1 -1
  123. package/tokens/modes/dark__kim-steel__compact__high.dtcg.json +1 -1
  124. package/tokens/modes/dark__kim-steel__compact__standard.dtcg.json +1 -1
  125. package/tokens/modes/dark__kim-titanium__comfortable__high.dtcg.json +1 -1
  126. package/tokens/modes/dark__kim-titanium__comfortable__standard.dtcg.json +1 -1
  127. package/tokens/modes/dark__kim-titanium__compact__high.dtcg.json +1 -1
  128. package/tokens/modes/dark__kim-titanium__compact__standard.dtcg.json +1 -1
  129. package/tokens/modes/dark__kim__comfortable__high.dtcg.json +1 -1
  130. package/tokens/modes/dark__kim__comfortable__standard.dtcg.json +1 -1
  131. package/tokens/modes/dark__kim__compact__high.dtcg.json +1 -1
  132. package/tokens/modes/dark__kim__compact__standard.dtcg.json +1 -1
  133. package/tokens/modes/dark__moc-bamboo__comfortable__high.dtcg.json +1 -1
  134. package/tokens/modes/dark__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  135. package/tokens/modes/dark__moc-bamboo__compact__high.dtcg.json +1 -1
  136. package/tokens/modes/dark__moc-bamboo__compact__standard.dtcg.json +1 -1
  137. package/tokens/modes/dark__moc-forest__comfortable__high.dtcg.json +1 -1
  138. package/tokens/modes/dark__moc-forest__comfortable__standard.dtcg.json +1 -1
  139. package/tokens/modes/dark__moc-forest__compact__high.dtcg.json +1 -1
  140. package/tokens/modes/dark__moc-forest__compact__standard.dtcg.json +1 -1
  141. package/tokens/modes/dark__moc__comfortable__high.dtcg.json +1 -1
  142. package/tokens/modes/dark__moc__comfortable__standard.dtcg.json +1 -1
  143. package/tokens/modes/dark__moc__compact__high.dtcg.json +1 -1
  144. package/tokens/modes/dark__moc__compact__standard.dtcg.json +1 -1
  145. package/tokens/modes/dark__tho-clay__comfortable__high.dtcg.json +1 -1
  146. package/tokens/modes/dark__tho-clay__comfortable__standard.dtcg.json +1 -1
  147. package/tokens/modes/dark__tho-clay__compact__high.dtcg.json +1 -1
  148. package/tokens/modes/dark__tho-clay__compact__standard.dtcg.json +1 -1
  149. package/tokens/modes/dark__tho-sand__comfortable__high.dtcg.json +1 -1
  150. package/tokens/modes/dark__tho-sand__comfortable__standard.dtcg.json +1 -1
  151. package/tokens/modes/dark__tho-sand__compact__high.dtcg.json +1 -1
  152. package/tokens/modes/dark__tho-sand__compact__standard.dtcg.json +1 -1
  153. package/tokens/modes/dark__tho__comfortable__high.dtcg.json +1 -1
  154. package/tokens/modes/dark__tho__comfortable__standard.dtcg.json +1 -1
  155. package/tokens/modes/dark__tho__compact__high.dtcg.json +1 -1
  156. package/tokens/modes/dark__tho__compact__standard.dtcg.json +1 -1
  157. package/tokens/modes/dark__thuy-mist__comfortable__high.dtcg.json +1 -1
  158. package/tokens/modes/dark__thuy-mist__comfortable__standard.dtcg.json +1 -1
  159. package/tokens/modes/dark__thuy-mist__compact__high.dtcg.json +1 -1
  160. package/tokens/modes/dark__thuy-mist__compact__standard.dtcg.json +1 -1
  161. package/tokens/modes/dark__thuy-ocean__comfortable__high.dtcg.json +1 -1
  162. package/tokens/modes/dark__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  163. package/tokens/modes/dark__thuy-ocean__compact__high.dtcg.json +1 -1
  164. package/tokens/modes/dark__thuy-ocean__compact__standard.dtcg.json +1 -1
  165. package/tokens/modes/dark__thuy__comfortable__high.dtcg.json +1 -1
  166. package/tokens/modes/dark__thuy__comfortable__standard.dtcg.json +1 -1
  167. package/tokens/modes/dark__thuy__compact__high.dtcg.json +1 -1
  168. package/tokens/modes/dark__thuy__compact__standard.dtcg.json +1 -1
  169. package/tokens/modes/index.json +275 -275
  170. package/tokens/modes/light__default__comfortable__high.dtcg.json +1 -1
  171. package/tokens/modes/light__default__comfortable__standard.dtcg.json +1 -1
  172. package/tokens/modes/light__default__compact__high.dtcg.json +1 -1
  173. package/tokens/modes/light__default__compact__standard.dtcg.json +1 -1
  174. package/tokens/modes/light__hoa-lava__comfortable__high.dtcg.json +1 -1
  175. package/tokens/modes/light__hoa-lava__comfortable__standard.dtcg.json +1 -1
  176. package/tokens/modes/light__hoa-lava__compact__high.dtcg.json +1 -1
  177. package/tokens/modes/light__hoa-lava__compact__standard.dtcg.json +1 -1
  178. package/tokens/modes/light__hoa-plasma__comfortable__high.dtcg.json +1 -1
  179. package/tokens/modes/light__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  180. package/tokens/modes/light__hoa-plasma__compact__high.dtcg.json +1 -1
  181. package/tokens/modes/light__hoa-plasma__compact__standard.dtcg.json +1 -1
  182. package/tokens/modes/light__hoa__comfortable__high.dtcg.json +1 -1
  183. package/tokens/modes/light__hoa__comfortable__standard.dtcg.json +1 -1
  184. package/tokens/modes/light__hoa__compact__high.dtcg.json +1 -1
  185. package/tokens/modes/light__hoa__compact__standard.dtcg.json +1 -1
  186. package/tokens/modes/light__kim-steel__comfortable__high.dtcg.json +1 -1
  187. package/tokens/modes/light__kim-steel__comfortable__standard.dtcg.json +1 -1
  188. package/tokens/modes/light__kim-steel__compact__high.dtcg.json +1 -1
  189. package/tokens/modes/light__kim-steel__compact__standard.dtcg.json +1 -1
  190. package/tokens/modes/light__kim-titanium__comfortable__high.dtcg.json +1 -1
  191. package/tokens/modes/light__kim-titanium__comfortable__standard.dtcg.json +1 -1
  192. package/tokens/modes/light__kim-titanium__compact__high.dtcg.json +1 -1
  193. package/tokens/modes/light__kim-titanium__compact__standard.dtcg.json +1 -1
  194. package/tokens/modes/light__kim__comfortable__high.dtcg.json +1 -1
  195. package/tokens/modes/light__kim__comfortable__standard.dtcg.json +1 -1
  196. package/tokens/modes/light__kim__compact__high.dtcg.json +1 -1
  197. package/tokens/modes/light__kim__compact__standard.dtcg.json +1 -1
  198. package/tokens/modes/light__moc-bamboo__comfortable__high.dtcg.json +1 -1
  199. package/tokens/modes/light__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  200. package/tokens/modes/light__moc-bamboo__compact__high.dtcg.json +1 -1
  201. package/tokens/modes/light__moc-bamboo__compact__standard.dtcg.json +1 -1
  202. package/tokens/modes/light__moc-forest__comfortable__high.dtcg.json +1 -1
  203. package/tokens/modes/light__moc-forest__comfortable__standard.dtcg.json +1 -1
  204. package/tokens/modes/light__moc-forest__compact__high.dtcg.json +1 -1
  205. package/tokens/modes/light__moc-forest__compact__standard.dtcg.json +1 -1
  206. package/tokens/modes/light__moc__comfortable__high.dtcg.json +1 -1
  207. package/tokens/modes/light__moc__comfortable__standard.dtcg.json +1 -1
  208. package/tokens/modes/light__moc__compact__high.dtcg.json +1 -1
  209. package/tokens/modes/light__moc__compact__standard.dtcg.json +1 -1
  210. package/tokens/modes/light__tho-clay__comfortable__high.dtcg.json +1 -1
  211. package/tokens/modes/light__tho-clay__comfortable__standard.dtcg.json +1 -1
  212. package/tokens/modes/light__tho-clay__compact__high.dtcg.json +1 -1
  213. package/tokens/modes/light__tho-clay__compact__standard.dtcg.json +1 -1
  214. package/tokens/modes/light__tho-sand__comfortable__high.dtcg.json +1 -1
  215. package/tokens/modes/light__tho-sand__comfortable__standard.dtcg.json +1 -1
  216. package/tokens/modes/light__tho-sand__compact__high.dtcg.json +1 -1
  217. package/tokens/modes/light__tho-sand__compact__standard.dtcg.json +1 -1
  218. package/tokens/modes/light__tho__comfortable__high.dtcg.json +1 -1
  219. package/tokens/modes/light__tho__comfortable__standard.dtcg.json +1 -1
  220. package/tokens/modes/light__tho__compact__high.dtcg.json +1 -1
  221. package/tokens/modes/light__tho__compact__standard.dtcg.json +1 -1
  222. package/tokens/modes/light__thuy-mist__comfortable__high.dtcg.json +1 -1
  223. package/tokens/modes/light__thuy-mist__comfortable__standard.dtcg.json +1 -1
  224. package/tokens/modes/light__thuy-mist__compact__high.dtcg.json +1 -1
  225. package/tokens/modes/light__thuy-mist__compact__standard.dtcg.json +1 -1
  226. package/tokens/modes/light__thuy-ocean__comfortable__high.dtcg.json +1 -1
  227. package/tokens/modes/light__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  228. package/tokens/modes/light__thuy-ocean__compact__high.dtcg.json +1 -1
  229. package/tokens/modes/light__thuy-ocean__compact__standard.dtcg.json +1 -1
  230. package/tokens/modes/light__thuy__comfortable__high.dtcg.json +1 -1
  231. package/tokens/modes/light__thuy__comfortable__standard.dtcg.json +1 -1
  232. package/tokens/modes/light__thuy__compact__high.dtcg.json +1 -1
  233. package/tokens/modes/light__thuy__compact__standard.dtcg.json +1 -1
  234. package/tokens/modes/system-dark__default__comfortable__high.dtcg.json +1 -1
  235. package/tokens/modes/system-dark__default__comfortable__standard.dtcg.json +1 -1
  236. package/tokens/modes/system-dark__default__compact__high.dtcg.json +1 -1
  237. package/tokens/modes/system-dark__default__compact__standard.dtcg.json +1 -1
  238. package/tokens/modes/system-dark__hoa-lava__comfortable__high.dtcg.json +1 -1
  239. package/tokens/modes/system-dark__hoa-lava__comfortable__standard.dtcg.json +1 -1
  240. package/tokens/modes/system-dark__hoa-lava__compact__high.dtcg.json +1 -1
  241. package/tokens/modes/system-dark__hoa-lava__compact__standard.dtcg.json +1 -1
  242. package/tokens/modes/system-dark__hoa-plasma__comfortable__high.dtcg.json +1 -1
  243. package/tokens/modes/system-dark__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  244. package/tokens/modes/system-dark__hoa-plasma__compact__high.dtcg.json +1 -1
  245. package/tokens/modes/system-dark__hoa-plasma__compact__standard.dtcg.json +1 -1
  246. package/tokens/modes/system-dark__hoa__comfortable__high.dtcg.json +1 -1
  247. package/tokens/modes/system-dark__hoa__comfortable__standard.dtcg.json +1 -1
  248. package/tokens/modes/system-dark__hoa__compact__high.dtcg.json +1 -1
  249. package/tokens/modes/system-dark__hoa__compact__standard.dtcg.json +1 -1
  250. package/tokens/modes/system-dark__kim-steel__comfortable__high.dtcg.json +1 -1
  251. package/tokens/modes/system-dark__kim-steel__comfortable__standard.dtcg.json +1 -1
  252. package/tokens/modes/system-dark__kim-steel__compact__high.dtcg.json +1 -1
  253. package/tokens/modes/system-dark__kim-steel__compact__standard.dtcg.json +1 -1
  254. package/tokens/modes/system-dark__kim-titanium__comfortable__high.dtcg.json +1 -1
  255. package/tokens/modes/system-dark__kim-titanium__comfortable__standard.dtcg.json +1 -1
  256. package/tokens/modes/system-dark__kim-titanium__compact__high.dtcg.json +1 -1
  257. package/tokens/modes/system-dark__kim-titanium__compact__standard.dtcg.json +1 -1
  258. package/tokens/modes/system-dark__kim__comfortable__high.dtcg.json +1 -1
  259. package/tokens/modes/system-dark__kim__comfortable__standard.dtcg.json +1 -1
  260. package/tokens/modes/system-dark__kim__compact__high.dtcg.json +1 -1
  261. package/tokens/modes/system-dark__kim__compact__standard.dtcg.json +1 -1
  262. package/tokens/modes/system-dark__moc-bamboo__comfortable__high.dtcg.json +1 -1
  263. package/tokens/modes/system-dark__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  264. package/tokens/modes/system-dark__moc-bamboo__compact__high.dtcg.json +1 -1
  265. package/tokens/modes/system-dark__moc-bamboo__compact__standard.dtcg.json +1 -1
  266. package/tokens/modes/system-dark__moc-forest__comfortable__high.dtcg.json +1 -1
  267. package/tokens/modes/system-dark__moc-forest__comfortable__standard.dtcg.json +1 -1
  268. package/tokens/modes/system-dark__moc-forest__compact__high.dtcg.json +1 -1
  269. package/tokens/modes/system-dark__moc-forest__compact__standard.dtcg.json +1 -1
  270. package/tokens/modes/system-dark__moc__comfortable__high.dtcg.json +1 -1
  271. package/tokens/modes/system-dark__moc__comfortable__standard.dtcg.json +1 -1
  272. package/tokens/modes/system-dark__moc__compact__high.dtcg.json +1 -1
  273. package/tokens/modes/system-dark__moc__compact__standard.dtcg.json +1 -1
  274. package/tokens/modes/system-dark__tho-clay__comfortable__high.dtcg.json +1 -1
  275. package/tokens/modes/system-dark__tho-clay__comfortable__standard.dtcg.json +1 -1
  276. package/tokens/modes/system-dark__tho-clay__compact__high.dtcg.json +1 -1
  277. package/tokens/modes/system-dark__tho-clay__compact__standard.dtcg.json +1 -1
  278. package/tokens/modes/system-dark__tho-sand__comfortable__high.dtcg.json +1 -1
  279. package/tokens/modes/system-dark__tho-sand__comfortable__standard.dtcg.json +1 -1
  280. package/tokens/modes/system-dark__tho-sand__compact__high.dtcg.json +1 -1
  281. package/tokens/modes/system-dark__tho-sand__compact__standard.dtcg.json +1 -1
  282. package/tokens/modes/system-dark__tho__comfortable__high.dtcg.json +1 -1
  283. package/tokens/modes/system-dark__tho__comfortable__standard.dtcg.json +1 -1
  284. package/tokens/modes/system-dark__tho__compact__high.dtcg.json +1 -1
  285. package/tokens/modes/system-dark__tho__compact__standard.dtcg.json +1 -1
  286. package/tokens/modes/system-dark__thuy-mist__comfortable__high.dtcg.json +1 -1
  287. package/tokens/modes/system-dark__thuy-mist__comfortable__standard.dtcg.json +1 -1
  288. package/tokens/modes/system-dark__thuy-mist__compact__high.dtcg.json +1 -1
  289. package/tokens/modes/system-dark__thuy-mist__compact__standard.dtcg.json +1 -1
  290. package/tokens/modes/system-dark__thuy-ocean__comfortable__high.dtcg.json +1 -1
  291. package/tokens/modes/system-dark__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  292. package/tokens/modes/system-dark__thuy-ocean__compact__high.dtcg.json +1 -1
  293. package/tokens/modes/system-dark__thuy-ocean__compact__standard.dtcg.json +1 -1
  294. package/tokens/modes/system-dark__thuy__comfortable__high.dtcg.json +1 -1
  295. package/tokens/modes/system-dark__thuy__comfortable__standard.dtcg.json +1 -1
  296. package/tokens/modes/system-dark__thuy__compact__high.dtcg.json +1 -1
  297. package/tokens/modes/system-dark__thuy__compact__standard.dtcg.json +1 -1
  298. package/tokens/modes/system-light__default__comfortable__high.dtcg.json +1 -1
  299. package/tokens/modes/system-light__default__comfortable__standard.dtcg.json +1 -1
  300. package/tokens/modes/system-light__default__compact__high.dtcg.json +1 -1
  301. package/tokens/modes/system-light__default__compact__standard.dtcg.json +1 -1
  302. package/tokens/modes/system-light__hoa-lava__comfortable__high.dtcg.json +1 -1
  303. package/tokens/modes/system-light__hoa-lava__comfortable__standard.dtcg.json +1 -1
  304. package/tokens/modes/system-light__hoa-lava__compact__high.dtcg.json +1 -1
  305. package/tokens/modes/system-light__hoa-lava__compact__standard.dtcg.json +1 -1
  306. package/tokens/modes/system-light__hoa-plasma__comfortable__high.dtcg.json +1 -1
  307. package/tokens/modes/system-light__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  308. package/tokens/modes/system-light__hoa-plasma__compact__high.dtcg.json +1 -1
  309. package/tokens/modes/system-light__hoa-plasma__compact__standard.dtcg.json +1 -1
  310. package/tokens/modes/system-light__hoa__comfortable__high.dtcg.json +1 -1
  311. package/tokens/modes/system-light__hoa__comfortable__standard.dtcg.json +1 -1
  312. package/tokens/modes/system-light__hoa__compact__high.dtcg.json +1 -1
  313. package/tokens/modes/system-light__hoa__compact__standard.dtcg.json +1 -1
  314. package/tokens/modes/system-light__kim-steel__comfortable__high.dtcg.json +1 -1
  315. package/tokens/modes/system-light__kim-steel__comfortable__standard.dtcg.json +1 -1
  316. package/tokens/modes/system-light__kim-steel__compact__high.dtcg.json +1 -1
  317. package/tokens/modes/system-light__kim-steel__compact__standard.dtcg.json +1 -1
  318. package/tokens/modes/system-light__kim-titanium__comfortable__high.dtcg.json +1 -1
  319. package/tokens/modes/system-light__kim-titanium__comfortable__standard.dtcg.json +1 -1
  320. package/tokens/modes/system-light__kim-titanium__compact__high.dtcg.json +1 -1
  321. package/tokens/modes/system-light__kim-titanium__compact__standard.dtcg.json +1 -1
  322. package/tokens/modes/system-light__kim__comfortable__high.dtcg.json +1 -1
  323. package/tokens/modes/system-light__kim__comfortable__standard.dtcg.json +1 -1
  324. package/tokens/modes/system-light__kim__compact__high.dtcg.json +1 -1
  325. package/tokens/modes/system-light__kim__compact__standard.dtcg.json +1 -1
  326. package/tokens/modes/system-light__moc-bamboo__comfortable__high.dtcg.json +1 -1
  327. package/tokens/modes/system-light__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  328. package/tokens/modes/system-light__moc-bamboo__compact__high.dtcg.json +1 -1
  329. package/tokens/modes/system-light__moc-bamboo__compact__standard.dtcg.json +1 -1
  330. package/tokens/modes/system-light__moc-forest__comfortable__high.dtcg.json +1 -1
  331. package/tokens/modes/system-light__moc-forest__comfortable__standard.dtcg.json +1 -1
  332. package/tokens/modes/system-light__moc-forest__compact__high.dtcg.json +1 -1
  333. package/tokens/modes/system-light__moc-forest__compact__standard.dtcg.json +1 -1
  334. package/tokens/modes/system-light__moc__comfortable__high.dtcg.json +1 -1
  335. package/tokens/modes/system-light__moc__comfortable__standard.dtcg.json +1 -1
  336. package/tokens/modes/system-light__moc__compact__high.dtcg.json +1 -1
  337. package/tokens/modes/system-light__moc__compact__standard.dtcg.json +1 -1
  338. package/tokens/modes/system-light__tho-clay__comfortable__high.dtcg.json +1 -1
  339. package/tokens/modes/system-light__tho-clay__comfortable__standard.dtcg.json +1 -1
  340. package/tokens/modes/system-light__tho-clay__compact__high.dtcg.json +1 -1
  341. package/tokens/modes/system-light__tho-clay__compact__standard.dtcg.json +1 -1
  342. package/tokens/modes/system-light__tho-sand__comfortable__high.dtcg.json +1 -1
  343. package/tokens/modes/system-light__tho-sand__comfortable__standard.dtcg.json +1 -1
  344. package/tokens/modes/system-light__tho-sand__compact__high.dtcg.json +1 -1
  345. package/tokens/modes/system-light__tho-sand__compact__standard.dtcg.json +1 -1
  346. package/tokens/modes/system-light__tho__comfortable__high.dtcg.json +1 -1
  347. package/tokens/modes/system-light__tho__comfortable__standard.dtcg.json +1 -1
  348. package/tokens/modes/system-light__tho__compact__high.dtcg.json +1 -1
  349. package/tokens/modes/system-light__tho__compact__standard.dtcg.json +1 -1
  350. package/tokens/modes/system-light__thuy-mist__comfortable__high.dtcg.json +1 -1
  351. package/tokens/modes/system-light__thuy-mist__comfortable__standard.dtcg.json +1 -1
  352. package/tokens/modes/system-light__thuy-mist__compact__high.dtcg.json +1 -1
  353. package/tokens/modes/system-light__thuy-mist__compact__standard.dtcg.json +1 -1
  354. package/tokens/modes/system-light__thuy-ocean__comfortable__high.dtcg.json +1 -1
  355. package/tokens/modes/system-light__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  356. package/tokens/modes/system-light__thuy-ocean__compact__high.dtcg.json +1 -1
  357. package/tokens/modes/system-light__thuy-ocean__compact__standard.dtcg.json +1 -1
  358. package/tokens/modes/system-light__thuy__comfortable__high.dtcg.json +1 -1
  359. package/tokens/modes/system-light__thuy__comfortable__standard.dtcg.json +1 -1
  360. package/tokens/modes/system-light__thuy__compact__high.dtcg.json +1 -1
  361. package/tokens/modes/system-light__thuy__compact__standard.dtcg.json +1 -1
  362. package/tokens/native/CSModes.kt +129 -125
  363. package/tokens/native/CSModes.swift +129 -125
  364. package/tokens/native/CSTokens.kt +8 -8
  365. package/tokens/native/CSTokens.swift +8 -8
  366. package/tokens/native/cs_modes.dart +129 -125
  367. package/tokens/native/cs_tokens.dart +8 -8
  368. package/tokens/native/mode-provenance.json +11 -11
  369. package/tokens/provenance.json +6 -6
  370. package/tokens/styles.css +8 -4
  371. package/tokens/tokens.dtcg.json +26 -26
  372. package/tokens/tokens.js +12 -12
  373. package/tokens/tokens.json +11 -11
  374. package/tokens/variables.css +48 -15
  375. package/tokens/viewer.html +1 -0
  376. package/ui_kits/status-hub/login.html +3 -3
  377. package/ui_kits/status-hub/project.html +4 -6
  378. package/ui_kits/status-hub/settings.html +2 -3
  379. package/ui_kits/status-hub/status.css +24 -15
  380. package/ui_kits/website/careers.html +10 -17
  381. package/ui_kits/website/chat.html +14 -3
  382. package/ui_kits/website/site.css +21 -21
  383. package/ui_kits/website/work.html +4 -10
package/_esm/cs.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // CyberSkill Design System — ESM entry point (GENERATED by scripts/generate-export-catalog.mjs at v2.8.0).
1
+ // CyberSkill Design System — ESM entry point (GENERATED by scripts/generate-export-catalog.mjs at v2.9.0).
2
2
  // No build step: import this module directly in a browser. It loads the pinned umd-react@19.2.8
3
3
  // distribution; its retained React and ReactDOM files report runtime version 19.2.4.
4
4
  // (official React 19 dropped UMD; pinned + SRI; skipped when window.React already exists), side-loads
@@ -33,7 +33,7 @@ if (!found()) await ensureScript("../_ds_bundle.js");
33
33
  export const CS = g[found()];
34
34
  if (!CS) throw new Error("cs.js: bundle loaded but no CyberSkillDesignSystem_* namespace found");
35
35
  export default CS;
36
- export const VERSION = "2.8.0";
36
+ export const VERSION = "2.9.0";
37
37
  export const AIDisclosureBadge = CS.AIDisclosureBadge;
38
38
  export const Accordion = CS.Accordion;
39
39
  export const Alert = CS.Alert;
package/base/a11y.css CHANGED
@@ -142,8 +142,24 @@
142
142
  * --cs-color-border-default / --cs-color-text-muted from the --_cs-standard /
143
143
  * --_cs-high channel toggles, which flip to high under prefers-contrast: more
144
144
  * (light #9a8060 / #45210e · dark #7a6450 / #f5ead9) unless a scope sets
145
- * data-cs-contrast explicitly. The former contextual overrides here were
146
- * already superseded by that resolver's higher specificity. */
145
+ * data-cs-contrast explicitly. Below, explicit [data-cs-contrast="high"] also
146
+ * reinforces field controls, glass borders and table cell dividers, with a
147
+ * clean nested [data-cs-contrast="standard"] reset. */
148
+ [data-cs-contrast="high"] :is(.cs-field__control, .cs-select, .cs-combobox, .cs-search, .cs-taginput, .cs-otp__slot, .cs-datepicker__field, .cs-surface-light, .cs-surface-standard, .cs-glass-card, .cs-surface-heavy) {
149
+ border-color: color-mix(in oklab, var(--cs-color-text-primary) 54%, var(--cs-color-surface-panel));
150
+ }
151
+ [data-cs-contrast="high"] :is(.cs-table th, .cs-table td, .cs-datagrid th, .cs-datagrid td) {
152
+ border-block-end-color: color-mix(in oklab, var(--cs-color-text-primary) 42%, var(--cs-color-surface-panel));
153
+ }
154
+ [data-cs-contrast="high"] [data-cs-contrast="standard"] :is(.cs-field__control, .cs-select, .cs-combobox, .cs-search, .cs-taginput, .cs-otp__slot, .cs-datepicker__field) {
155
+ border-color: var(--cs-component-textfield-border-default, #bfa58f);
156
+ }
157
+ [data-cs-contrast="high"] [data-cs-contrast="standard"] .cs-surface-light { border-color: var(--cs-glass-light-border); }
158
+ [data-cs-contrast="high"] [data-cs-contrast="standard"] :is(.cs-surface-standard, .cs-glass-card) { border-color: var(--cs-glass-standard-border); }
159
+ [data-cs-contrast="high"] [data-cs-contrast="standard"] .cs-surface-heavy { border-color: var(--cs-glass-heavy-border); }
160
+ [data-cs-contrast="high"] [data-cs-contrast="standard"] :is(.cs-table th, .cs-table td, .cs-datagrid th, .cs-datagrid td) {
161
+ border-block-end-color: var(--cs-color-border-subtle, var(--_cs-border-subtle));
162
+ }
147
163
 
148
164
  /* Forced colors removes authored backgrounds and shadows. State must survive
149
165
  * that substitution using real borders, system colors and knob position. */
package/base/ai.css CHANGED
@@ -3,7 +3,7 @@
3
3
  * AIDisclosureBadge + HumanReviewGate (base/components.css). */
4
4
 
5
5
  /* PromptInput */
6
- .cs-prompt { border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); background: var(--cs-color-surface-panel); padding: 10px 12px; display: grid; gap: 8px; }
6
+ .cs-prompt { border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-lg); background: var(--cs-color-surface-panel); padding: 10px 12px; display: grid; gap: 8px; }
7
7
  .cs-prompt.is-invalid, .is-invalid .cs-prompt, .cs-prompt[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
8
8
  .cs-prompt:focus-within {
9
9
  border-color: var(--cs-color-text-primary);
@@ -48,7 +48,7 @@
48
48
  .cs-suggest button svg { color: var(--cs-color-brand-ochre); }
49
49
 
50
50
  /* TypingIndicator */
51
- .cs-typing { display: inline-flex; align-items: center; gap: 5px; padding: 12px 16px; background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-border-default); border-radius: 14px; border-end-start-radius: 4px; }
51
+ .cs-typing { display: inline-flex; justify-self: start; inline-size: fit-content; align-items: center; gap: 5px; padding: 12px 16px; background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-border-default); border-radius: 14px; border-end-start-radius: 4px; }
52
52
  .cs-typing span { inline-size: 7px; block-size: 7px; border-radius: 50%; background: var(--cs-color-text-muted); animation: cs-typing 1.2s var(--cs-ease-standard) infinite; }
53
53
  .cs-typing span:nth-child(2) { animation-delay: 0.18s; }
54
54
  .cs-typing span:nth-child(3) { animation-delay: 0.36s; }
@@ -28,7 +28,10 @@ button.cs-item--interactive { border: 1px solid transparent; background: var(--c
28
28
  }
29
29
  .cs-item--interactive:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
30
30
  .cs-item.is-selected { border-color: var(--cs-color-text-accent); background: color-mix(in oklab, var(--cs-accent) 18%, var(--cs-color-surface-panel)); }
31
- .cs-item.is-selected .cs-item__description { color: var(--_cs-light, var(--cs-color-text-muted))var(--_cs-dark, var(--cs-color-text-primary)); }
31
+ .cs-item.is-selected .cs-item__description { color: var(--cs-color-text-primary); }
32
+ tr.cs-item { display: table-row; }
33
+ tr.cs-item.is-selected > td, tr.cs-item.is-selected > th { background: color-mix(in oklab, var(--cs-accent) 18%, var(--cs-color-surface-panel)); }
34
+ tr.cs-item.is-selected > td:first-child, tr.cs-item.is-selected > th:first-child { box-shadow: inset 3px 0 0 var(--cs-color-text-accent); }
32
35
  .cs-item.is-disabled, .cs-item[aria-disabled="true"] { opacity: 0.55; cursor: not-allowed; pointer-events: none; }
33
36
  /* Static Item text remains information, rather than an inactive control. */
34
37
  div.cs-item.is-disabled { opacity: 1; }
@@ -81,8 +84,8 @@ div.cs-item.is-disabled { opacity: 1; }
81
84
  --cs-code-bg: #2b1e14;
82
85
  --cs-code-fg: #f5ead9;
83
86
  --cs-code-border: #4a3a2c;
84
- --cs-code-muted: #c9b7a3;
85
- position: relative; background: var(--cs-code-bg); color: var(--cs-code-fg); border-radius: var(--cs-radius-lg); overflow: hidden; border: 1px solid var(--cs-code-border);
87
+ --cs-code-muted: #e9d6c2;
88
+ color-scheme: dark; position: relative; background: var(--cs-code-bg); color: var(--cs-code-fg); border-radius: var(--cs-radius-lg); overflow: hidden; border: 1px solid var(--cs-code-border);
86
89
  }
87
90
  .cs-code__bar { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; border-block-end: 1px solid var(--cs-code-border); font-family: var(--cs-font-family-mono); font-size: var(--cs-font-size-xs); color: var(--cs-code-muted); }
88
91
  .cs-code__copy { border: 0; background: transparent; color: var(--cs-code-muted); cursor: pointer; font: inherit; font-family: var(--cs-font-family-ui); font-weight: 600; min-block-size: 32px; padding-inline: 8px; border-radius: var(--cs-radius-sm); }
@@ -21,11 +21,12 @@
21
21
  min-width: var(--cs-component-button-md-minHeight, 44px);
22
22
  padding-block: var(--cs-component-button-md-paddingY, 12px);
23
23
  padding-inline: var(--cs-component-button-md-paddingX, 20px);
24
+ text-decoration: none;
24
25
  transition: background var(--cs-duration-fast, 120ms) var(--cs-ease-standard, ease),
25
26
  border-color var(--cs-duration-fast, 120ms) var(--cs-ease-standard, ease),
26
27
  filter var(--cs-duration-fast, 120ms) var(--cs-ease-standard, ease);
27
28
  }
28
- .cs-button:hover { filter: brightness(1.08); }
29
+ .cs-button:hover { color: var(--cs-component-button-primary-fg, #ffffff); filter: brightness(1.08); text-decoration: none; }
29
30
  .cs-button:active { transform: translateY(0.5px); }
30
31
 
31
32
  .cs-button:focus-visible,
@@ -41,20 +42,32 @@
41
42
  border-color: var(--_cs-light, var(--cs-accent-strong, #45210e))var(--_cs-dark, var(--cs-accent, #f4ba17));
42
43
  color: var(--_cs-light, var(--cs-color-text-accent, #45210e))var(--_cs-dark, var(--cs-color-text-accent, #f4ba17));
43
44
  }
44
- .cs-button--secondary:hover { background: var(--cs-color-surface-raised, #fbf4e9); filter: none; }
45
+ .cs-button--secondary:hover {
46
+ background: var(--cs-color-surface-raised, #fbf4e9);
47
+ color: var(--_cs-light, var(--cs-color-text-accent, #45210e))var(--_cs-dark, var(--cs-color-text-accent, #f4ba17));
48
+ filter: none;
49
+ }
45
50
 
46
51
  .cs-button--tertiary {
47
52
  background: var(--cs-color-surface-raised, #fbf4e9);
48
53
  border-color: transparent;
49
54
  color: var(--_cs-light, var(--cs-color-brand-umber, #45210e))var(--_cs-dark, var(--cs-color-text-primary));
50
55
  }
51
- .cs-button--tertiary:hover { filter: none; border-color: var(--cs-color-border-default, #e7d9c6); }
56
+ .cs-button--tertiary:hover {
57
+ border-color: var(--cs-color-border-default, #e7d9c6);
58
+ color: var(--_cs-light, var(--cs-color-brand-umber, #45210e))var(--_cs-dark, var(--cs-color-text-primary));
59
+ filter: none;
60
+ }
52
61
 
53
62
  .cs-button--ghost {
54
63
  background: transparent;
55
64
  color: var(--_cs-light, var(--cs-color-brand-umber, #45210e))var(--_cs-dark, var(--cs-color-text-primary));
56
65
  }
57
- .cs-button--ghost:hover { background: var(--cs-color-surface-raised, #fbf4e9); filter: none; }
66
+ .cs-button--ghost:hover {
67
+ background: var(--cs-color-surface-raised, #fbf4e9);
68
+ color: var(--_cs-light, var(--cs-color-brand-umber, #45210e))var(--_cs-dark, var(--cs-color-text-primary));
69
+ filter: none;
70
+ }
58
71
 
59
72
  /* Dark theme: umber text/border on the low-emphasis buttons is invisible on dark surfaces —
60
73
  remap so secondary reads as an ochre outline and tertiary/ghost use the light body colour. */
@@ -63,12 +76,17 @@
63
76
  background: var(--cs-color-semantic-danger, #b42318);
64
77
  color: var(--cs-color-semantic-danger-fg, #ffffff);
65
78
  }
79
+ .cs-button--danger:hover { color: var(--cs-color-semantic-danger-fg, #ffffff); }
66
80
 
67
81
  .cs-button--danger-ghost {
68
82
  background: transparent;
69
83
  color: var(--cs-color-semantic-danger-text, #4b0502);
70
84
  }
71
- .cs-button--danger-ghost:hover { background: color-mix(in oklab, var(--cs-color-semantic-danger, #b42318) 3%, transparent); filter: none; }
85
+ .cs-button--danger-ghost:hover {
86
+ background: color-mix(in oklab, var(--cs-color-semantic-danger, #b42318) 3%, transparent);
87
+ color: var(--cs-color-semantic-danger-text, #4b0502);
88
+ filter: none;
89
+ }
72
90
 
73
91
  .cs-button--xs {
74
92
  min-height: var(--cs-component-button-xs-minHeight, 28px);
@@ -88,6 +106,8 @@
88
106
  padding-block: var(--cs-component-button-lg-paddingY, 16px);
89
107
  padding-inline: var(--cs-component-button-lg-paddingX, 28px);
90
108
  }
109
+ .cs-button--md { min-height: var(--cs-component-button-md-minHeight, 44px); }
110
+ .cs-button__icon, .cs-button__label { display: inline; }
91
111
  .cs-button--full { inline-size: 100%; }
92
112
 
93
113
  .cs-button.is-disabled,
@@ -112,7 +132,7 @@
112
132
  /* ---- TextField ---- */
113
133
  .cs-field { align-content: start; color: var(--cs-color-text-primary, #45210e); display: grid; gap: 0.375rem; }
114
134
  .cs-field__label { font-weight: 700; }
115
- .cs-field__description { color: var(--cs-color-text-muted, #3f2d21); font-size: 0.875rem; }
135
+ .cs-field__description { color: var(--cs-color-text-muted, #5e4436); font-size: 0.875rem; }
116
136
  .cs-field__control {
117
137
  border: 1px solid var(--cs-component-textfield-border-default, #bfa58f);
118
138
  border-radius: var(--cs-radius-md, 8px);
@@ -123,7 +143,7 @@
123
143
  padding-block: var(--cs-component-textfield-paddingY, 10px);
124
144
  padding-inline: var(--cs-component-textfield-paddingX, 12px);
125
145
  }
126
- .cs-field__control::placeholder { color: var(--cs-color-text-muted, #3f2d21); opacity: 0.7; }
146
+ .cs-field__control::placeholder { color: var(--cs-color-text-muted, #5e4436); opacity: 0.7; }
127
147
  .cs-field.is-invalid .cs-field__control, .cs-field__control.is-invalid, .cs-field__control[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger, #b42318); }
128
148
  .cs-field__error { color: var(--cs-color-semantic-danger-text, #4b0502); font-size: 0.875rem; }
129
149
 
@@ -133,7 +153,7 @@
133
153
  .cs-dialog {
134
154
  background: var(--cs-color-surface-panel, #ffffff);
135
155
  border-radius: var(--cs-radius-lg, 14px);
136
- box-shadow: var(--cs-shadow-xl, 0 24px 80px rgba(31, 19, 11, 0.26));
156
+ box-shadow: var(--cs-shadow-xl, 0 24px 80px rgba(69, 33, 14, 0.24));
137
157
  color: var(--cs-color-text-primary, #45210e);
138
158
  left: 0;
139
159
  right: 0;
@@ -150,7 +170,8 @@
150
170
  }
151
171
  .cs-dialog__header,
152
172
  .cs-dialog__actions,
153
- .cs-review-gate__actions {
173
+ .cs-review-gate__actions,
174
+ .cs-human-review-gate__actions {
154
175
  align-items: center; display: flex; flex-wrap: wrap; gap: 0.75rem; justify-content: space-between;
155
176
  }
156
177
  .cs-dialog__actions { justify-content: flex-end; }
@@ -158,10 +179,12 @@
158
179
  .cs-dialog__body { margin-block: 1rem; }
159
180
  /* AlertDialog — confirm/destructive modal (shares dialog layer; tighter panel) */
160
181
  .cs-alert-dialog { max-inline-size: min(28rem, calc(100vw - 2rem)); }
182
+ .cs-alert-dialog__cancel, .cs-alert-dialog__confirm { box-sizing: border-box; }
161
183
  .cs-alert-dialog--destructive .cs-dialog__title { color: var(--cs-color-semantic-danger-text, #4b0502); }
162
184
  @media (max-width: 640px) {
163
185
  .cs-dialog { max-inline-size: calc(100vw - 1rem); top: 4vh; padding: var(--cs-space-4, 16px); }
164
- .cs-dialog__actions .cs-button, .cs-review-gate__actions .cs-button { flex: 1 1 auto; }
186
+ .cs-dialog__actions .cs-button, .cs-review-gate__actions .cs-button, .cs-human-review-gate__actions .cs-button { flex: 1 1 auto; }
187
+ .cs-review-gate, .cs-human-review-gate { padding: var(--cs-space-3, 12px); gap: 0.5rem; }
165
188
  }
166
189
 
167
190
 
@@ -200,10 +223,10 @@
200
223
  }
201
224
  .cs-table thead th {
202
225
  font-size: var(--cs-font-size-xs, 0.75rem); text-transform: uppercase;
203
- letter-spacing: var(--cs-letter-spacing-caps, 0.08em); color: var(--cs-color-text-muted, #3f2d21);
226
+ letter-spacing: var(--cs-letter-spacing-caps, 0.08em); color: var(--cs-color-text-muted, #5e4436);
204
227
  }
205
228
  .cs-table caption { font-weight: 700; margin-block-end: 0.5rem; text-align: start; }
206
- .cs-table__empty { color: var(--cs-color-text-muted, #3f2d21); }
229
+ .cs-table__empty { color: var(--cs-color-text-muted, #5e4436); }
207
230
 
208
231
  /* ---- AIDisclosureBadge ---- */
209
232
  .cs-ai-disclosure { display: inline-block; position: relative; }
@@ -216,31 +239,95 @@
216
239
  background: var(--cs-color-surface-panel, #ffffff);
217
240
  color: var(--cs-color-text-primary, #45210e);
218
241
  border: 1px solid var(--cs-color-border-subtle, var(--_cs-border-subtle)); border-radius: var(--cs-radius-md, 8px);
219
- box-shadow: var(--cs-shadow-xs, 0 1px 2px rgba(31, 19, 11, 0.08));
242
+ box-shadow: var(--cs-shadow-xs, 0 1px 2px rgba(69, 33, 14, 0.06));
220
243
  display: grid; gap: 0.375rem; inset-block-start: calc(100% + 0.375rem); inset-inline-start: 0;
221
244
  min-inline-size: 18rem; padding: 0.75rem; position: absolute; z-index: var(--cs-depth-dropdown, 60);
222
245
  }
223
- .cs-ai-disclosure__sources { color: var(--cs-color-text-muted, #3f2d21); font-size: 0.8125rem; }
246
+ .cs-ai-disclosure__details { margin: 0; }
247
+ .cs-ai-disclosure__sources { color: var(--cs-color-text-muted, #5e4436); font-size: 0.8125rem; }
224
248
 
225
249
  /* ---- HumanReviewGate ---- */
226
- .cs-review-gate {
250
+ .cs-review-gate,
251
+ .cs-human-review-gate {
227
252
  border: 1px solid var(--cs-color-semantic-warning, #92400e);
228
253
  border-radius: var(--cs-radius-md, 8px); color: var(--cs-color-text-primary, #45210e);
229
254
  display: grid; gap: 0.75rem; padding: var(--cs-space-4, 16px);
230
255
  background: color-mix(in oklab, var(--cs-color-semantic-warning, #92400e) 5%, var(--cs-color-surface-panel, #fff));
231
256
  }
232
- .cs-review-gate__risk {
257
+ .cs-review-gate__risk,
258
+ .cs-human-review-gate__risk {
233
259
  color: var(--cs-color-semantic-warning-text, #441801); font-weight: 700;
234
260
  text-transform: uppercase; letter-spacing: 0.04em; font-size: 0.8125rem;
235
261
  }
236
- .cs-review-gate__summary { margin: 0; }
237
- .cs-review-gate__reviewer { margin: 0; color: var(--cs-color-text-muted, #3f2d21); font-size: 0.875rem; }
262
+ .cs-review-gate__summary,
263
+ .cs-human-review-gate__summary { margin: 0; }
264
+ .cs-review-gate__reviewer,
265
+ .cs-human-review-gate__reviewer { margin: 0; color: var(--cs-color-text-muted, #5e4436); font-size: 0.875rem; }
238
266
 
239
- /* ---- Logo ---- */
267
+ /* ---- Logo & Icon ---- */
240
268
  .cs-logo { block-size: auto; display: inline-block; vertical-align: middle; }
269
+ .cs-icon { vertical-align: middle; flex: none; }
270
+
271
+ /* ---- Legal / A4 Document Sheet Primitives (.cs-doc-*) ---- */
272
+ .cs-doc-sheet {
273
+ background: var(--cs-color-surface-panel, #ffffff);
274
+ border: 1px solid var(--cs-color-border-default, #e7d9c6);
275
+ border-radius: var(--cs-radius-lg, 12px);
276
+ box-shadow: var(--cs-shadow-md);
277
+ color: var(--cs-color-text-primary, #45210e);
278
+ inline-size: 100%;
279
+ max-inline-size: 860px;
280
+ margin-inline: auto;
281
+ padding: clamp(20px, 4vw, 48px) clamp(20px, 4.5vw, 56px);
282
+ box-sizing: border-box;
283
+ }
284
+ .cs-doc-motto {
285
+ text-align: center;
286
+ padding-block-end: var(--cs-space-4, 16px);
287
+ margin-block-end: var(--cs-space-4, 16px);
288
+ border-block-end: 2px double var(--cs-color-border-strong, var(--cs-color-border-default));
289
+ }
290
+ .cs-doc-section-bar {
291
+ display: flex;
292
+ align-items: center;
293
+ justify-content: space-between;
294
+ gap: var(--cs-space-3, 12px);
295
+ padding: 8px 12px;
296
+ margin-block: var(--cs-space-4, 16px) var(--cs-space-3, 12px);
297
+ background: var(--cs-color-surface-raised, #fbf4e9);
298
+ border-inline-start: 3px solid var(--cs-accent, #f4ba17);
299
+ border-radius: 0 var(--cs-radius-sm, 6px) var(--cs-radius-sm, 6px) 0;
300
+ font-weight: 700;
301
+ }
302
+ .cs-doc-blank,
303
+ .cs-doc-field {
304
+ display: inline-flex;
305
+ align-items: baseline;
306
+ gap: 4px;
307
+ min-inline-size: 5rem;
308
+ padding-inline: 6px;
309
+ padding-block: 1px;
310
+ border-block-end: 1.5px dotted var(--cs-color-text-accent, var(--cs-accent-strong));
311
+ background: color-mix(in oklab, var(--cs-accent, #f4ba17) 14%, transparent);
312
+ border-radius: 3px 3px 0 0;
313
+ font-weight: 600;
314
+ color: var(--cs-color-text-primary, #45210e);
315
+ }
241
316
 
242
317
  /* ---- UI font binding: components consume the brand UI-font token ---- */
243
318
  .cs-button, .cs-field, .cs-field__control, .cs-dialog, .cs-table,
244
- .cs-ai-disclosure, .cs-review-gate, .cs-logo {
319
+ .cs-ai-disclosure, .cs-review-gate, .cs-human-review-gate, .cs-logo, .cs-doc-sheet {
245
320
  font-family: var(--cs-font-family-ui, ui-sans-serif, system-ui);
246
321
  }
322
+
323
+ /* ---- Compact density scope (44px interactive touch floors remain intact) ---- */
324
+ [data-cs-density="compact"] :is(.cs-table th, .cs-table td) { padding: 6px 10px; }
325
+ [data-cs-density="compact"] .cs-dialog { padding: var(--cs-density-space-6, 18px); }
326
+ [data-cs-density="compact"] .cs-dialog__body { margin-block: var(--cs-density-space-4, 12px); }
327
+ [data-cs-density="compact"] .cs-field { gap: 4px; }
328
+ [data-cs-density="compact"] :is(.cs-review-gate, .cs-human-review-gate) { padding: var(--cs-density-space-4, 12px); gap: var(--cs-density-space-2, 6px); }
329
+ [data-cs-density="compact"] [data-cs-density="comfortable"] :is(.cs-table th, .cs-table td) { padding: 0.625rem 0.75rem; }
330
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-dialog { padding: var(--cs-space-6, 24px); }
331
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-dialog__body { margin-block: 1rem; }
332
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-field { gap: 0.375rem; }
333
+ [data-cs-density="compact"] [data-cs-density="comfortable"] :is(.cs-review-gate, .cs-human-review-gate) { padding: var(--cs-space-4, 16px); gap: 0.75rem; }
package/base/controls.css CHANGED
@@ -31,7 +31,7 @@
31
31
  .cs-stepper input::-webkit-outer-spin-button, .cs-stepper input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
32
32
 
33
33
  /* Slider (native range) */
34
- .cs-slider { inline-size: 100%; accent-color: var(--_cs-light, var(--cs-accent-strong))var(--_cs-dark, var(--cs-accent)); block-size: 22px; cursor: pointer; }
34
+ .cs-slider { inline-size: 100%; max-inline-size: 100%; margin: 0; box-sizing: border-box; accent-color: var(--_cs-light, var(--cs-accent-strong))var(--_cs-dark, var(--cs-accent)); block-size: 22px; cursor: pointer; }
35
35
  .cs-slider:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 4px; border-radius: var(--cs-radius-full); box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
36
36
 
37
37
  /* FileUpload / dropzone */
@@ -70,11 +70,12 @@
70
70
  .cs-rating button.on { color: var(--cs-color-text-accent); }
71
71
  .cs-rating[data-readonly="true"] button { cursor: default; }
72
72
  .cs-rating button:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; border-radius: 4px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
73
- .cs-otp { display: inline-flex; gap: 8px; }
74
- .cs-otp input { inline-size: 44px; block-size: 52px; text-align: center; font: 700 22px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); }
75
- .cs-otp.is-invalid input, .is-invalid .cs-otp input, .cs-otp input.is-invalid, .cs-otp input[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
76
- .cs-otp input:focus { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; border-color: var(--cs-accent); box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
77
- .cs-otp input:disabled { opacity: .5; cursor: not-allowed; background: var(--cs-color-surface-raised); }
73
+ .cs-otp, .cs-input-otp { display: inline-flex; justify-content: space-between; gap: 8px; max-inline-size: 100%; }
74
+ .cs-otp input, .cs-input-otp input, .cs-otp__slot, .cs-input-otp__slot { inline-size: 44px; block-size: 52px; min-inline-size: 44px; min-block-size: 44px; text-align: center; font: 700 22px var(--cs-font-family-mono); font-variant-numeric: tabular-nums; color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); box-sizing: border-box; }
75
+ .cs-otp__slot, .cs-input-otp__slot { display: inline-flex; align-items: center; justify-content: center; }
76
+ .cs-otp.is-invalid input, .cs-input-otp.is-invalid input, .is-invalid :is(.cs-otp, .cs-input-otp) input, :is(.cs-otp, .cs-input-otp) input.is-invalid, :is(.cs-otp, .cs-input-otp) input[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
77
+ .cs-otp input:focus, .cs-input-otp input:focus { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; border-color: var(--cs-accent); box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
78
+ .cs-otp input:disabled, .cs-input-otp input:disabled { opacity: .5; cursor: not-allowed; background: var(--cs-color-surface-raised); }
78
79
  .cs-btngroup { display: inline-flex; }
79
80
  .cs-btngroup .cs-button { border-radius: 0; }
80
81
  .cs-btngroup .cs-button:first-child { border-start-start-radius: var(--cs-component-button-radius, 8px); border-end-start-radius: var(--cs-component-button-radius, 8px); }
@@ -82,28 +83,28 @@
82
83
  .cs-btngroup .cs-button + .cs-button { margin-inline-start: -1px; }
83
84
 
84
85
  /* ---- v3 Batch 2 part 2 (Jul 2026): Combobox · InputGroup · TagInput ---- */
85
- .cs-combobox { position: relative; display: inline-block; min-inline-size: 260px; }
86
- .cs-combobox input { inline-size: 100%; box-sizing: border-box; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 10px 34px 10px var(--cs-space-3); min-block-size: 44px; }
86
+ .cs-combobox { position: relative; display: inline-block; min-inline-size: 260px; max-inline-size: 100%; box-sizing: border-box; }
87
+ .cs-combobox input { inline-size: 100%; box-sizing: border-box; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: 10px 34px 10px var(--cs-space-3); min-block-size: 44px; }
87
88
  .is-invalid .cs-combobox input, .cs-combobox.is-invalid input, .cs-combobox input.is-invalid, .cs-combobox[aria-invalid="true"] input, .cs-combobox input[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger, #b42318); }
88
- .cs-combobox input:focus { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
89
+ .cs-combobox input:focus { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
89
90
  .cs-combobox__caret { position: absolute; inset-inline-end: 10px; inset-block-start: 50%; translate: 0 -50%; pointer-events: none; color: var(--cs-color-text-muted); }
90
91
  .cs-combobox__popup { color: var(--cs-color-text-primary); position: absolute; z-index: var(--cs-depth-dropdown, 60); inset-inline: 0; inset-block-start: calc(100% + 6px); max-block-size: 240px; overflow: auto; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 6px; margin: 0; }
91
92
  .cs-combobox__list { padding: 0; margin: 0; list-style: none; }
92
93
  .cs-combobox__opt { padding: 8px 10px; border-radius: var(--cs-radius-sm); cursor: pointer; font-size: var(--cs-font-size-sm); }
93
94
  .cs-combobox__opt[aria-selected="true"], .cs-combobox__opt.hl { background: var(--_cs-light, var(--cs-accent-tint))var(--_cs-dark, color-mix(in oklab, var(--cs-accent) 22%, var(--cs-color-surface-panel))); color: var(--_cs-light, var(--cs-color-text-primary))var(--_cs-dark, var(--cs-accent-bright)); }
94
95
  .cs-combobox__empty { padding: 10px; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); }
95
- .cs-igroup { display: inline-flex; align-items: stretch; min-inline-size: 260px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); overflow: hidden; }
96
+ .cs-igroup { display: inline-flex; align-items: stretch; min-inline-size: 260px; max-inline-size: 100%; box-sizing: border-box; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); overflow: hidden; }
96
97
  .cs-igroup.is-invalid, .is-invalid .cs-igroup, .cs-igroup[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
97
- .cs-igroup:focus-within { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
98
+ .cs-igroup:focus-within { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
98
99
  .cs-igroup > input { flex: 1; min-inline-size: 0; border: 0; background: transparent; color: var(--cs-color-text-primary); font: 500 14px var(--cs-font-family-ui); padding: 10px 12px; min-block-size: 44px; box-sizing: border-box; }
99
100
  .cs-igroup > input:focus { outline: none; }
100
101
  .cs-igroup__fix { display: flex; align-items: center; padding: 0 10px; color: var(--cs-color-text-muted); background: var(--cs-color-surface-raised); border-inline-end: 1px solid var(--cs-color-border-default); font-size: var(--cs-font-size-sm); }
101
102
  .cs-igroup__fix--suffix { border-inline-end: 0; border-inline-start: 1px solid var(--cs-color-border-default); }
102
103
  .cs-igroup__btn { border: 0; background: none; color: var(--cs-color-text-muted); cursor: pointer; display: grid; place-items: center; padding: 0 10px; }
103
104
  .cs-igroup__btn:hover { color: var(--cs-color-text-primary); }
104
- .cs-taginput { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-inline-size: 280px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 6px var(--cs-space-2); min-block-size: 44px; box-sizing: border-box; }
105
+ .cs-taginput { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-inline-size: 280px; max-inline-size: 100%; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: 6px var(--cs-space-2); min-block-size: 44px; box-sizing: border-box; }
105
106
  .cs-taginput.is-invalid, .is-invalid .cs-taginput, .cs-taginput[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
106
- .cs-taginput:focus-within { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
107
+ .cs-taginput:focus-within { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
107
108
  .cs-taginput > input { flex: 1; min-inline-size: 120px; border: 0; background: transparent; color: var(--cs-color-text-primary); font: 500 14px var(--cs-font-family-ui); padding: 6px var(--cs-space-1); }
108
109
  .cs-taginput > input:focus { outline: none; }
109
110
  /* Disabled editing must not dim already committed, noninteractive values. */
@@ -123,15 +124,16 @@
123
124
  .cs-cal__grid button.sel { background: var(--cs-accent-bright); color: var(--cs-color-brand-umber); font-weight: 700; box-shadow: inset 0 0 0 2px var(--cs-accent-strong); }
124
125
  .cs-cal__grid button:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
125
126
  .cs-datepicker { position: relative; display: inline-block; max-inline-size: 100%; }
126
- .cs-datepicker__field, .cs-datepicker__trigger { display: inline-flex; align-items: center; gap: var(--cs-space-2); min-inline-size: 220px; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: var(--cs-space-2) var(--cs-space-3); cursor: pointer; }
127
+ .cs-datepicker__field { display: inline-flex; align-items: center; gap: var(--cs-space-2); min-inline-size: 220px; max-inline-size: 100%; box-sizing: border-box; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: var(--cs-space-2) var(--cs-space-3); cursor: pointer; }
128
+ .cs-datepicker__trigger { display: inline-flex; align-items: center; gap: var(--cs-space-2); min-inline-size: 220px; max-inline-size: 100%; box-sizing: border-box; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: var(--cs-space-2) var(--cs-space-3); cursor: pointer; }
127
129
  .cs-datepicker.is-invalid .cs-datepicker__field, .cs-datepicker.is-invalid .cs-datepicker__trigger, .is-invalid .cs-datepicker__field, .is-invalid .cs-datepicker__trigger, .cs-datepicker__field.is-invalid, .cs-datepicker__trigger.is-invalid, .cs-datepicker__field[aria-invalid="true"], .cs-datepicker__trigger[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
128
- .cs-datepicker__field:focus-visible, .cs-datepicker__trigger:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
130
+ .cs-datepicker__field:focus-visible, .cs-datepicker__trigger:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
129
131
  .cs-datepicker__field .ph, .cs-datepicker__trigger .ph { color: var(--cs-color-text-muted); }
130
132
  .cs-datepicker__pop { position: absolute; z-index: var(--cs-depth-dropdown, 60); inset-block-start: calc(100% + 6px); inset-inline-start: var(--_cs-panel-inline-offset, 0px); inline-size: max-content; max-inline-size: var(--_cs-panel-max-inline-size, calc(100vw - 16px)); }
131
133
  .cs-datepicker__pop .cs-cal { min-inline-size: 0; max-inline-size: 100%; box-sizing: border-box; overflow-x: auto; }
132
- .cs-timepicker { display: inline-flex; align-items: center; gap: 8px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 0 10px; min-block-size: 44px; color: var(--cs-color-text-muted); }
134
+ .cs-timepicker { display: inline-flex; align-items: center; gap: 8px; max-inline-size: 100%; box-sizing: border-box; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: 0 10px; min-block-size: 44px; color: var(--cs-color-text-muted); }
133
135
  .cs-timepicker.is-invalid, .is-invalid .cs-timepicker, .cs-timepicker[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
134
- .cs-timepicker:focus-within { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
136
+ .cs-timepicker:focus-within { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
135
137
  .cs-timepicker select { border: 0; background: transparent; color: var(--cs-color-text-primary); font: 600 14px var(--cs-font-family-mono); padding: 8px 2px; cursor: pointer; }
136
138
  .cs-timepicker select:focus { outline: none; }
137
139
 
@@ -225,6 +227,7 @@
225
227
  .cs-carousel__dots button[aria-current="true"]::before { background: var(--cs-color-text-accent); }
226
228
  @media (prefers-reduced-motion: reduce) { .cs-carousel__track { transition: none; } }
227
229
  .cs-comment { display: flex; gap: 10px; }
230
+ .cs-comment__avatar { flex: none; }
228
231
  .cs-comment__main { flex: 1; min-inline-size: 0; }
229
232
  .cs-comment__head { display: flex; align-items: baseline; gap: 8px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
230
233
  .cs-comment__meta { color: var(--cs-color-text-muted); font-size: var(--cs-font-size-xs); }
@@ -235,6 +238,10 @@
235
238
 
236
239
  /* ---- v3 Batch 6a (Jul 2026): Form · Tree · BackTop · Watermark ---- */
237
240
  .cs-form { display: grid; gap: var(--cs-space-4); }
241
+ .cs-form-array { border: 0; padding: 0; margin: 0; }
242
+ .cs-form-array__rows { display: grid; gap: 8px; }
243
+ .cs-form-array__row { display: flex; gap: 8px; align-items: center; }
244
+ .cs-form-wizard, .cs-form-wizard__steps, .cs-form-wizard__body, .cs-form-wizard__nav { box-sizing: border-box; }
238
245
  /* FIND-015 — visible pending + interaction lock while asyncRules / submit run. */
239
246
  .cs-form.is-pending { opacity: 0.72; }
240
247
  .cs-form.is-pending :is(button, input, select, textarea, [role="button"]) {
@@ -260,12 +267,13 @@
260
267
  .cs-tree__label { border: 0; background: none; color: var(--cs-color-text-primary); font: inherit; padding: 4px 6px; cursor: pointer; border-radius: var(--cs-radius-sm); }
261
268
  .cs-backtop { position: fixed; inset-inline-end: 24px; inset-block-end: 84px; z-index: var(--cs-depth-overlay, 80); inline-size: 44px; block-size: 44px; border-radius: 999px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); display: grid; place-items: center; cursor: pointer; box-shadow: var(--cs-shadow-md); }
262
269
  .cs-backtop:hover { border-color: var(--cs-accent); }
270
+ .cs-watermark { position: relative; }
263
271
 
264
272
  /* ---- v3 Batch 6b (Jul 2026): TreeSelect · Cascader · Transfer · Mentions ---- */
265
- .cs-treeselect, .cs-cascader { position: relative; display: inline-block; min-inline-size: 240px; }
266
- .cs-treeselect__field, .cs-treeselect__trigger, .cs-cascader__field, .cs-cascader__trigger { display: inline-flex; align-items: center; justify-content: space-between; gap: 10px; inline-size: 100%; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; box-sizing: border-box; }
273
+ .cs-treeselect, .cs-cascader { position: relative; display: inline-block; min-inline-size: 240px; max-inline-size: 100%; box-sizing: border-box; }
274
+ .cs-treeselect__field, .cs-treeselect__trigger, .cs-cascader__field, .cs-cascader__trigger { display: inline-flex; align-items: center; justify-content: space-between; gap: 10px; inline-size: 100%; min-block-size: 44px; font: 500 14px var(--cs-font-family-ui); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; box-sizing: border-box; }
267
275
  .cs-treeselect.is-invalid :is(.cs-treeselect__field, .cs-treeselect__trigger), .cs-cascader.is-invalid :is(.cs-treeselect__field, .cs-cascader__field, .cs-cascader__trigger), .is-invalid :is(.cs-treeselect__field, .cs-treeselect__trigger, .cs-cascader__field, .cs-cascader__trigger), :is(.cs-treeselect__field, .cs-treeselect__trigger, .cs-cascader__field, .cs-cascader__trigger).is-invalid, :is(.cs-treeselect__field, .cs-treeselect__trigger, .cs-cascader__field, .cs-cascader__trigger)[aria-invalid="true"] { border-color: var(--cs-color-semantic-danger); }
268
- .cs-treeselect__field:focus-visible, .cs-treeselect__trigger:focus-visible, .cs-cascader__field:focus-visible, .cs-cascader__trigger:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
276
+ .cs-treeselect__field:focus-visible, .cs-treeselect__trigger:focus-visible, .cs-cascader__field:focus-visible, .cs-cascader__trigger:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
269
277
  .cs-treeselect__field .ph, .cs-treeselect__trigger .ph, .cs-cascader__field .ph, .cs-cascader__trigger .ph { color: var(--cs-color-text-muted); }
270
278
  .cs-treeselect__pop, .cs-cascader__pop { position: absolute; z-index: var(--cs-depth-dropdown, 60); inset-block-start: calc(100% + 6px); inset-inline-start: 0; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 8px; min-inline-size: 100%; }
271
279
  .cs-cascader__pop { display: flex; padding: 0; overflow: hidden; }
@@ -287,15 +295,16 @@
287
295
 
288
296
  /* ---- v3 Batch 6c (Jul 2026): ColorPicker · Tour · QRCode ---- */
289
297
  .cs-colorpicker { position: relative; display: inline-block; }
290
- .cs-colorpicker__field { display: inline-flex; align-items: center; gap: 9px; min-block-size: 44px; font: 600 13px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; }
298
+ .cs-colorpicker__field { display: inline-flex; align-items: center; gap: 9px; min-block-size: 44px; font: 600 13px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-md); padding: 8px 12px; cursor: pointer; }
291
299
  .cs-colorpicker__field i { inline-size: 20px; block-size: 20px; border-radius: 6px; border: 1px solid var(--cs-color-border-default); }
292
- .cs-colorpicker__field:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 1px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
300
+ .cs-colorpicker__field:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
293
301
  .cs-colorpicker__pop { position: absolute; z-index: var(--cs-depth-dropdown, 60); inset-block-start: calc(100% + 6px); inset-inline-start: 0; display: grid; gap: 10px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); box-shadow: var(--cs-shadow-md); padding: 12px; }
294
302
  .cs-colorpicker__grid { display: grid; grid-template-columns: repeat(5, 26px); gap: 8px; }
295
303
  .cs-colorpicker__grid button { inline-size: 26px; block-size: 26px; border-radius: 7px; border: 1px solid var(--cs-color-border-default); cursor: pointer; }
296
304
  .cs-colorpicker__grid button.on { outline: var(--cs-focus-ring, 3px) solid var(--cs-color-accent-ochre); outline-offset: 1px; }
297
305
  .cs-colorpicker__grid button:focus-visible { outline: 2px solid var(--cs-color-text-primary); outline-offset: 2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
298
306
  .cs-colorpicker__hex input { inline-size: 110px; font: 600 13px var(--cs-font-family-mono); color: var(--cs-color-text-primary); background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-sm); padding: 6px 8px; }
307
+ .cs-tour { display: inline-block; }
299
308
  .cs-tour__scrim { position: fixed; inset: 0; z-index: var(--cs-depth-modal, 100); background: var(--cs-color-surface-scrim, var(--_cs-surface-scrim)); }
300
309
  .cs-tour__hole { position: fixed; z-index: calc(var(--cs-depth-modal, 100) + 1); border-radius: var(--cs-radius-md); box-shadow: 0 0 0 4000px var(--cs-color-surface-scrim, var(--_cs-surface-scrim)); outline: var(--cs-focus-ring, 3px) solid var(--cs-color-brand-ochre); pointer-events: none; background: transparent; }
301
310
  .cs-tour__pop { position: fixed; z-index: calc(var(--cs-depth-modal, 100) + 2); inline-size: 280px; background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-xl); padding: 14px 16px; }
@@ -307,24 +316,31 @@
307
316
  .cs-qrcode { display: inline-block; padding: 10px; background: var(--cs-color-surface-panel, #fff); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); line-height: 0; }
308
317
 
309
318
  /* ---- v3 Batch 7a (Jul 2026): Masonry · Splitter · HotKeys · Dock ---- */
319
+ .cs-masonry { display: block; }
310
320
  .cs-masonry__item { break-inside: avoid; }
311
321
  .cs-splitter { display: flex; align-items: stretch; border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); overflow: hidden; background: var(--cs-color-surface-panel); }
312
- .cs-splitter__pane { overflow: auto; padding: 14px; min-inline-size: 0; }
322
+ .cs-splitter__pane { overflow: auto; padding: 14px; min-inline-size: 0; min-block-size: 0; scroll-padding-block-end: var(--cs-space-6, 24px); }
313
323
  .cs-splitter__bar { inline-size: 8px; cursor: col-resize; background: var(--cs-color-surface-raised); border-inline: 1px solid var(--cs-color-border-default); touch-action: none; }
314
324
  .cs-splitter__bar:hover { background: color-mix(in oklab, var(--cs-accent) 18%, var(--cs-color-surface-panel)); }
315
325
  .cs-splitter__bar:focus-visible { background: var(--cs-color-surface-raised); outline: 2px solid var(--cs-color-text-primary); outline-offset: -2px; box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
326
+ .cs-hotkeys { display: inline-block; }
316
327
  .cs-hotkeys__sheet { position: fixed; inset: 0; z-index: var(--cs-depth-modal, 100); background: var(--cs-color-surface-scrim, var(--_cs-surface-scrim)); display: grid; place-items: center; }
317
328
  .cs-hotkeys__card { background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-xl); padding: 18px 20px; min-inline-size: 300px; }
318
329
  .cs-hotkeys__card b { font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
319
330
  .cs-hotkeys__card ul { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 8px; }
320
331
  .cs-hotkeys__card li { display: flex; justify-content: space-between; gap: 20px; font-size: var(--cs-font-size-sm); color: var(--cs-color-text-primary); }
321
- .cs-dock { display: inline-flex; align-items: flex-end; gap: 8px; background: color-mix(in oklab, var(--cs-color-surface-panel) 82%, transparent); border: 1px solid var(--cs-color-border-default); border-radius: 18px; padding: 8px 12px; backdrop-filter: blur(10px); }
332
+ .cs-dock { display: inline-flex; align-items: flex-end; gap: 8px; background: color-mix(in oklab, var(--cs-color-surface-panel) 82%, transparent); border: 1px solid var(--cs-color-border-default); border-radius: 18px; padding: 8px 12px; -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); }
333
+ @media (prefers-reduced-transparency: reduce) { .cs-dock { -webkit-backdrop-filter: none; backdrop-filter: none; background: var(--cs-color-surface-panel); } }
334
+ [data-cs-style="matte-paper"] .cs-dock { -webkit-backdrop-filter: none; backdrop-filter: none; background: var(--cs-color-surface-panel); box-shadow: var(--cs-shadow-xs); }
335
+ [data-cs-style="matte-paper"] [data-cs-style="liquid-glass"] .cs-dock { background: color-mix(in oklab, var(--cs-color-surface-panel) 82%, transparent); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: none; }
322
336
  .cs-dock__item { inline-size: 44px; block-size: 44px; border-radius: 12px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); display: grid; place-items: center; cursor: pointer; transition: transform var(--cs-duration-fast, 120ms); position: relative; }
323
337
  .cs-dock__item.is-active::after { content: ""; position: absolute; inset-block-end: -6px; inline-size: 4px; block-size: 4px; border-radius: 999px; background: var(--cs-color-text-accent); }
324
338
  @media (prefers-reduced-motion: reduce) { .cs-dock__item { transition: none; } }
325
339
 
326
340
  /* ---- v3 Batch 7b (Jul 2026): DataGrid · TreeTable · Sortable ---- */
327
- .cs-datagrid { overflow: auto; border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); background: var(--cs-color-surface-panel); }
341
+ .cs-datagrid { overflow: auto; max-inline-size: 100%; min-inline-size: 0; border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-md); background: var(--cs-color-surface-panel); }
342
+ .cs-datagrid--virtual { position: relative; overflow: auto; }
343
+ .cs-datagrid__pinned { position: sticky; inset-inline-start: 0; z-index: 2; background: inherit; }
328
344
  .cs-datagrid .cs-table { margin: 0; }
329
345
  .cs-datagrid thead th { position: sticky; inset-block-start: 0; background: var(--cs-color-surface-raised); z-index: 1; }
330
346
  .cs-datagrid__check { display: inline-flex; align-items: center; justify-content: center; }
@@ -357,8 +373,8 @@
357
373
  --cs-term-dot: #5b4331;
358
374
  --cs-term-bg: #1a1108;
359
375
  --cs-term-fg: #f5ead9;
360
- --cs-term-muted: #c9b7a3;
361
- max-inline-size: 480px; border-radius: var(--cs-radius-lg); overflow: hidden; border: 1px solid var(--cs-term-border); box-shadow: var(--cs-shadow-md);
376
+ --cs-term-muted: #e9d6c2;
377
+ color-scheme: dark; background: var(--cs-term-bg); color: var(--cs-term-fg); max-inline-size: 480px; border-radius: var(--cs-radius-lg); overflow: hidden; border: 1px solid var(--cs-term-border); box-shadow: var(--cs-shadow-md);
362
378
  }
363
379
  .cs-terminal__bar { display: flex; align-items: center; gap: 6px; background: var(--cs-term-bar); color: var(--cs-term-muted); font: 600 11px var(--cs-font-family-mono); padding: 8px 12px; }
364
380
  .cs-terminal__bar i { inline-size: 10px; block-size: 10px; border-radius: 999px; background: var(--cs-term-dot); }
@@ -374,3 +390,15 @@
374
390
  box-shadow: 0 0 0 5px var(--cs-color-accent-ochre);
375
391
  }
376
392
  .cs-terminal__out { color: var(--cs-term-muted); white-space: pre-wrap; }
393
+
394
+ /* ---- Composed .cs-field alignment + narrow container containment ---- */
395
+ .cs-field > :is(.cs-timepicker, .cs-colorpicker, .cs-segmented, .cs-toggle) {
396
+ justify-self: start;
397
+ }
398
+ @media (max-width: 360px) {
399
+ .cs-combobox, .cs-igroup, .cs-taginput, .cs-treeselect, .cs-cascader,
400
+ .cs-datepicker__field, .cs-datepicker__trigger {
401
+ min-inline-size: 0;
402
+ max-inline-size: 100%;
403
+ }
404
+ }
package/base/data.css CHANGED
@@ -1,7 +1,7 @@
1
1
  /* CyberSkill — data display + layout (.cs-*). */
2
2
 
3
3
  /* Card */
4
- .cs-card { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-sm); color: var(--cs-color-text-primary); overflow: hidden; }
4
+ .cs-card { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); box-shadow: var(--cs-shadow-sm); color: var(--cs-color-text-primary); overflow: hidden; min-inline-size: 0; }
5
5
  .cs-card--flat { box-shadow: none; }
6
6
  .cs-card--raised { background: var(--cs-color-surface-raised); }
7
7
  .cs-card--featured { background: color-mix(in oklab, var(--cs-accent) 12%, var(--cs-color-surface-raised)); border-color: var(--cs-accent); box-shadow: var(--cs-shadow-md); }
@@ -11,10 +11,10 @@
11
11
  .cs-card--flat.cs-card--interactive:focus-visible { box-shadow: 0 0 0 5px var(--cs-color-accent-ochre); }
12
12
  .cs-card--interactive:active { transform: translateY(1px); }
13
13
  .cs-card__media { display: block; inline-size: 100%; }
14
- .cs-card__header { padding: 18px 20px 0; }
15
- .cs-card__title { margin: 0; font-size: var(--cs-text-h4); font-weight: 700; line-height: var(--cs-font-lineHeight-heading); }
16
- .cs-card__subtitle { margin: 4px 0 0; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); }
17
- .cs-card__body { padding: 16px 20px; }
14
+ .cs-card__header { padding: 18px 20px 0; min-inline-size: 0; }
15
+ .cs-card__title { margin: 0; font-size: var(--cs-text-h4); font-weight: 700; line-height: var(--cs-font-lineHeight-heading); overflow-wrap: anywhere; }
16
+ .cs-card__subtitle { margin: 4px 0 0; color: var(--cs-color-text-muted); font-size: var(--cs-font-size-sm); overflow-wrap: anywhere; }
17
+ .cs-card__body { padding: 16px 20px; min-inline-size: 0; }
18
18
  .cs-card__body > :first-child { margin-block-start: 0; }
19
19
  .cs-card__body > :last-child { margin-block-end: 0; }
20
20
  .cs-card__footer { padding: 12px 20px 18px; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
@@ -103,3 +103,15 @@
103
103
 
104
104
  [data-cs-floating-root][data-open="true"] > .cs-tooltip__bubble { opacity: 1; pointer-events: auto; }
105
105
  [data-cs-floating-root][data-managed] > .cs-tooltip__bubble::before { content: ""; position: absolute; top: 100%; left: 0; right: 0; height: 8px; }
106
+
107
+ /* Compact density scope (resets cleanly under nested [data-cs-density="comfortable"]) */
108
+ [data-cs-density="compact"] .cs-card__header { padding: var(--cs-density-space-4, 12px) var(--cs-density-space-5, 16px) 0; }
109
+ [data-cs-density="compact"] .cs-card__body { padding: var(--cs-density-space-4, 12px) var(--cs-density-space-5, 16px); }
110
+ [data-cs-density="compact"] .cs-card__footer { padding: var(--cs-density-space-3, 9px) var(--cs-density-space-5, 16px) var(--cs-density-space-4, 12px); gap: var(--cs-density-space-2, 6px); }
111
+ [data-cs-density="compact"] .cs-stat { gap: 1px; }
112
+ [data-cs-density="compact"] .cs-divider { margin-block: var(--cs-density-space-3, 9px); }
113
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-card__header { padding: 18px 20px 0; }
114
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-card__body { padding: 16px 20px; }
115
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-card__footer { padding: 12px 20px 18px; gap: 10px; }
116
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-stat { gap: 3px; }
117
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-divider { margin-block: var(--cs-space-4); }
package/base/feedback.css CHANGED
@@ -66,3 +66,11 @@
66
66
  .cs-skeleton--circle { border-radius: 50%; }
67
67
  @keyframes cs-shimmer { from { background-position: 100% 0; } to { background-position: 0 0; } }
68
68
  @media (prefers-reduced-motion: reduce) { .cs-skeleton { animation: none; } }
69
+
70
+ /* Compact density scope (resets cleanly under nested [data-cs-density="comfortable"]) */
71
+ [data-cs-density="compact"] .cs-alert { padding: 10px 12px; gap: 8px; }
72
+ [data-cs-density="compact"] .cs-toast { padding: 9px 12px; gap: 8px; }
73
+ [data-cs-density="compact"] .cs-tag { padding: 3px 8px; }
74
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-alert { padding: 14px 16px; gap: 12px; }
75
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-toast { padding: 12px 14px; gap: 12px; }
76
+ [data-cs-density="compact"] [data-cs-density="comfortable"] .cs-tag { padding: 5px 10px; }