@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
@@ -8,7 +8,7 @@
8
8
  --cs-color-text-primary: #45210E;
9
9
  --cs-color-text-inverse: #FFFFFF;
10
10
  --cs-color-text-accent: #6E3B0E;
11
- --cs-color-text-muted: #3F2D21;
11
+ --cs-color-text-muted: #5E4436;
12
12
  --cs-color-semantic-success: #166534;
13
13
  --cs-color-semantic-danger: #B42318;
14
14
  --cs-color-semantic-warning: #92400E;
@@ -176,9 +176,9 @@
176
176
  --cs-glass-heavy-blur: 24px; --cs-glass-heavy-saturate: 180%; --cs-glass-heavy-opacity: 90%;
177
177
  --cs-shadow-xs: 0 1px 2px rgba(69, 33, 14, 0.06);
178
178
  --cs-shadow-sm: 0 1px 3px rgba(69, 33, 14, 0.04), 0 8px 24px rgba(69, 33, 14, 0.06);
179
- --cs-shadow-md: 0 12px 30px rgba(31, 19, 11, 0.18);
179
+ --cs-shadow-md: 0 12px 30px rgba(69, 33, 14, 0.14);
180
180
  --cs-shadow-lg: 0 20px 60px rgba(69, 33, 14, 0.18);
181
- --cs-shadow-xl: 0 24px 80px rgba(31, 19, 11, 0.26);
181
+ --cs-shadow-xl: 0 24px 80px rgba(69, 33, 14, 0.24);
182
182
  }
183
183
  [data-theme="dark"] {
184
184
  --cs-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.40);
@@ -278,7 +278,7 @@
278
278
  /* Source: tokens/elements.css */
279
279
  :root {
280
280
  --cs-accent: #F4BA17;
281
- --cs-accent-strong: #916D11;
281
+ --cs-accent-strong: #A4631E;
282
282
  --cs-accent-bright: #F4BA17;
283
283
  --cs-accent-on: #45210E;
284
284
  --cs-accent-on-strong: #FFFFFF;
@@ -305,7 +305,7 @@
305
305
  --_cs-dark-color-text-inverse: #1a1108;
306
306
  --_cs-light-color-text-accent: #6E3B0E;
307
307
  --_cs-dark-color-text-accent: #FECD5D;
308
- --_cs-light-color-text-muted: #3F2D21;
308
+ --_cs-light-color-text-muted: #5E4436;
309
309
  --_cs-dark-color-text-muted: #E9D6C2;
310
310
  --_cs-light-color-semantic-success: #166534;
311
311
  --_cs-dark-color-semantic-success: #4ADE80;
@@ -357,16 +357,16 @@
357
357
  --_cs-dark-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.40);
358
358
  --_cs-light-shadow-sm: 0 1px 3px rgba(69, 33, 14, 0.04), 0 8px 24px rgba(69, 33, 14, 0.06);
359
359
  --_cs-dark-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.34), 0 8px 24px rgba(0, 0, 0, 0.42);
360
- --_cs-light-shadow-md: 0 12px 30px rgba(31, 19, 11, 0.18);
360
+ --_cs-light-shadow-md: 0 12px 30px rgba(69, 33, 14, 0.14);
361
361
  --_cs-dark-shadow-md: 0 12px 30px rgba(0, 0, 0, 0.50);
362
362
  --_cs-light-shadow-lg: 0 20px 60px rgba(69, 33, 14, 0.18);
363
363
  --_cs-dark-shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.55);
364
- --_cs-light-shadow-xl: 0 24px 80px rgba(31, 19, 11, 0.26);
364
+ --_cs-light-shadow-xl: 0 24px 80px rgba(69, 33, 14, 0.24);
365
365
  --_cs-dark-shadow-xl: 0 24px 80px rgba(0, 0, 0, 0.62);
366
366
  --_cs-light-accent: #F4BA17;
367
367
  --_cs-dark-accent: #F4BA17;
368
- --_cs-light-accent-strong: #916D11;
369
- --_cs-dark-accent-strong: #916D11;
368
+ --_cs-light-accent-strong: #A4631E;
369
+ --_cs-dark-accent-strong: #A4631E;
370
370
  --_cs-light-accent-bright: #F4BA17;
371
371
  --_cs-dark-accent-bright: #F4BA17;
372
372
  --_cs-light-accent-on: #45210E;
@@ -421,6 +421,8 @@
421
421
  --_cs-dark-color-text-accent: #F9E5AE;
422
422
  --_cs-light-color-link: #695300;
423
423
  --_cs-dark-color-link: #F9E5AE;
424
+ --_cs-light-color-text-muted: #5E4436;
425
+ --_cs-dark-color-text-muted: #EBD8C4;
424
426
  --_cs-light-color-link-hover: #45210E;
425
427
  --_cs-dark-color-link-hover: #f5ead9;
426
428
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -439,8 +441,8 @@
439
441
  [data-cs-element="tho"] {
440
442
  --_cs-light-accent: #F4BA17;
441
443
  --_cs-dark-accent: #E9B321;
442
- --_cs-light-accent-strong: #916D11;
443
- --_cs-dark-accent-strong: #6E5205;
444
+ --_cs-light-accent-strong: #A4631E;
445
+ --_cs-dark-accent-strong: #7D480C;
444
446
  --_cs-light-accent-bright: #F4BA17;
445
447
  --_cs-dark-accent-bright: #FDD378;
446
448
  --_cs-light-accent-on: #45210E;
@@ -459,8 +461,10 @@
459
461
  --_cs-dark-accent-grad-b: #C4B78F;
460
462
  --_cs-light-color-text-accent: #6E3B0E;
461
463
  --_cs-dark-color-text-accent: #FFD57A;
462
- --_cs-light-color-link: #644A05;
464
+ --_cs-light-color-link: #744000;
463
465
  --_cs-dark-color-link: #FFD57A;
466
+ --_cs-light-color-text-muted: #5E4436;
467
+ --_cs-dark-color-text-muted: #E9D6C2;
464
468
  --_cs-light-color-link-hover: #45210E;
465
469
  --_cs-dark-color-link-hover: #f5ead9;
466
470
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -472,7 +476,7 @@
472
476
  --_cs-light-color-border-default: color-mix(in oklab, var(--_cs-light-accent) 40%, #E7D9C6);
473
477
  --_cs-dark-color-border-default: color-mix(in oklab, var(--_cs-dark-accent) 40%, #4a3a2c);
474
478
  --_cs-light-component-button-primary-bg: #45210E;
475
- --_cs-dark-component-button-primary-bg: #6E5205;
479
+ --_cs-dark-component-button-primary-bg: #7D480C;
476
480
  --_cs-light-component-button-primary-fg: #FFFFFF;
477
481
  --_cs-dark-component-button-primary-fg: #FFFFFF;
478
482
  }
@@ -501,6 +505,8 @@
501
505
  --_cs-dark-color-text-accent: #FFD2AF;
502
506
  --_cs-light-color-link: #462402;
503
507
  --_cs-dark-color-link: #FFD2AF;
508
+ --_cs-light-color-text-muted: #442B1E;
509
+ --_cs-dark-color-text-muted: #E9D6C2;
504
510
  --_cs-light-color-link-hover: #45210E;
505
511
  --_cs-dark-color-link-hover: #f5ead9;
506
512
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -541,6 +547,8 @@
541
547
  --_cs-dark-color-text-accent: #FDDDDE;
542
548
  --_cs-light-color-link: #714B4D;
543
549
  --_cs-dark-color-link: #FDDDDE;
550
+ --_cs-light-color-text-muted: #5E4436;
551
+ --_cs-dark-color-text-muted: #E9D6C2;
544
552
  --_cs-light-color-link-hover: #45210E;
545
553
  --_cs-dark-color-link-hover: #f5ead9;
546
554
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -581,6 +589,8 @@
581
589
  --_cs-dark-color-text-accent: #FFD1BA;
582
590
  --_cs-light-color-link: #793609;
583
591
  --_cs-dark-color-link: #FFD1BA;
592
+ --_cs-light-color-text-muted: #5E4436;
593
+ --_cs-dark-color-text-muted: #E9D6C2;
584
594
  --_cs-light-color-link-hover: #45210E;
585
595
  --_cs-dark-color-link-hover: #f5ead9;
586
596
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -621,6 +631,8 @@
621
631
  --_cs-dark-color-text-accent: #FDD0CA;
622
632
  --_cs-light-color-link: #550306;
623
633
  --_cs-dark-color-link: #FDD0CA;
634
+ --_cs-light-color-text-muted: #422A1D;
635
+ --_cs-dark-color-text-muted: #E9D6C2;
624
636
  --_cs-light-color-link-hover: #45210E;
625
637
  --_cs-dark-color-link-hover: #f5ead9;
626
638
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -661,6 +673,8 @@
661
673
  --_cs-dark-color-text-accent: #A6F8F6;
662
674
  --_cs-light-color-link: #116060;
663
675
  --_cs-dark-color-link: #A6F8F6;
676
+ --_cs-light-color-text-muted: #5E4436;
677
+ --_cs-dark-color-text-muted: #EBD8C4;
664
678
  --_cs-light-color-link-hover: #45210E;
665
679
  --_cs-dark-color-link-hover: #f5ead9;
666
680
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -701,6 +715,8 @@
701
715
  --_cs-dark-color-text-accent: #79EDFF;
702
716
  --_cs-light-color-link: #0D535C;
703
717
  --_cs-dark-color-link: #79EDFF;
718
+ --_cs-light-color-text-muted: #5E4436;
719
+ --_cs-dark-color-text-muted: #E9D6C2;
704
720
  --_cs-light-color-link-hover: #45210E;
705
721
  --_cs-dark-color-link-hover: #f5ead9;
706
722
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -741,6 +757,8 @@
741
757
  --_cs-dark-color-text-accent: #AFE2FA;
742
758
  --_cs-light-color-link: #003142;
743
759
  --_cs-dark-color-link: #AFE2FA;
760
+ --_cs-light-color-text-muted: #452D1F;
761
+ --_cs-dark-color-text-muted: #E9D6C2;
744
762
  --_cs-light-color-link-hover: #45210E;
745
763
  --_cs-dark-color-link-hover: #f5ead9;
746
764
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -781,6 +799,8 @@
781
799
  --_cs-dark-color-text-accent: #DCF0B1;
782
800
  --_cs-light-color-link: #4A5B02;
783
801
  --_cs-dark-color-link: #DCF0B1;
802
+ --_cs-light-color-text-muted: #5E4436;
803
+ --_cs-dark-color-text-muted: #EBD8C4;
784
804
  --_cs-light-color-link-hover: #45210E;
785
805
  --_cs-dark-color-link-hover: #f5ead9;
786
806
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -821,6 +841,8 @@
821
841
  --_cs-dark-color-text-accent: #B2EC9E;
822
842
  --_cs-light-color-link: #24570B;
823
843
  --_cs-dark-color-link: #B2EC9E;
844
+ --_cs-light-color-text-muted: #5E4436;
845
+ --_cs-dark-color-text-muted: #E9D6C2;
824
846
  --_cs-light-color-link-hover: #45210E;
825
847
  --_cs-dark-color-link-hover: #f5ead9;
826
848
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -861,6 +883,8 @@
861
883
  --_cs-dark-color-text-accent: #B0E7C3;
862
884
  --_cs-light-color-link: #04361D;
863
885
  --_cs-dark-color-link: #B0E7C3;
886
+ --_cs-light-color-text-muted: #452D1F;
887
+ --_cs-dark-color-text-muted: #E9D6C2;
864
888
  --_cs-light-color-link-hover: #45210E;
865
889
  --_cs-dark-color-link-hover: #f5ead9;
866
890
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -901,6 +925,8 @@
901
925
  --_cs-dark-color-text-accent: #D6E9FD;
902
926
  --_cs-light-color-link: #3D5670;
903
927
  --_cs-dark-color-link: #D6E9FD;
928
+ --_cs-light-color-text-muted: #5E4436;
929
+ --_cs-dark-color-text-muted: #EBD8C4;
904
930
  --_cs-light-color-link-hover: #45210E;
905
931
  --_cs-dark-color-link-hover: #f5ead9;
906
932
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -941,6 +967,8 @@
941
967
  --_cs-dark-color-text-accent: #E5DBBA;
942
968
  --_cs-light-color-link: #564B27;
943
969
  --_cs-dark-color-link: #E5DBBA;
970
+ --_cs-light-color-text-muted: #5E4436;
971
+ --_cs-dark-color-text-muted: #E9D6C2;
944
972
  --_cs-light-color-link-hover: #45210E;
945
973
  --_cs-dark-color-link-hover: #f5ead9;
946
974
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -981,6 +1009,8 @@
981
1009
  --_cs-dark-color-text-accent: #C8DBFD;
982
1010
  --_cs-light-color-link: #1B2E4C;
983
1011
  --_cs-dark-color-link: #C8DBFD;
1012
+ --_cs-light-color-text-muted: #442B1E;
1013
+ --_cs-dark-color-text-muted: #E9D6C2;
984
1014
  --_cs-light-color-link-hover: #45210E;
985
1015
  --_cs-dark-color-link-hover: #f5ead9;
986
1016
  --_cs-light-color-surface-panel: color-mix(in oklab, var(--_cs-light-accent) 4%, #FFFFFF);
@@ -1052,6 +1082,9 @@
1052
1082
  [data-cs-style="liquid-glass"] {
1053
1083
  --cs-style-pack: liquid-glass;
1054
1084
  }
1085
+ [data-cs-style="matte-paper"] {
1086
+ --cs-style-pack: matte-paper;
1087
+ }
1055
1088
  /* Source: tokens/theme-attributes.css */
1056
1089
  :root {
1057
1090
  --cs-density-space-1: var(--cs-space-1);
@@ -1166,14 +1199,14 @@
1166
1199
  --cs-term-dot: #5b4331;
1167
1200
  --cs-term-bg: #1a1108;
1168
1201
  --cs-term-fg: #f5ead9;
1169
- --cs-term-muted: #c9b7a3;
1202
+ --cs-term-muted: #e9d6c2;
1170
1203
  }
1171
1204
  /* Source: base/collections.css */
1172
1205
  .cs-code {
1173
1206
  --cs-code-bg: #2b1e14;
1174
1207
  --cs-code-fg: #f5ead9;
1175
1208
  --cs-code-border: #4a3a2c;
1176
- --cs-code-muted: #c9b7a3;
1209
+ --cs-code-muted: #e9d6c2;
1177
1210
  }
1178
1211
  /* Source: base/shell.css */
1179
1212
  /* Source: base/glass.css */
@@ -24,6 +24,7 @@
24
24
  .chips button[aria-pressed="true"]{background:var(--_cs-light,var(--cs-color-brand-umber)) var(--_cs-dark,var(--cs-color-brand-ochre));color:var(--_cs-light,var(--cs-color-text-inverse)) var(--_cs-dark,var(--cs-color-brand-umber));border-color:var(--_cs-light,var(--cs-color-brand-umber)) var(--_cs-dark,var(--cs-color-brand-ochre))}
25
25
  .chips :is(.n,.num){font-family:var(--cs-font-family-mono);font-size:12px;opacity:.85;margin-inline-start:4px}
26
26
  .panel{flex:1;min-height:0;min-width:0;max-width:100%;overflow:auto}
27
+ #tablePanel{padding-block-end:20px}
27
28
  .panel.hide{display:none}
28
29
  table{width:100%;border-collapse:collapse;font-size:13px}
29
30
  th,td{text-align:start;padding:8px 12px;border-block-end:1px solid var(--cs-color-border-default);vertical-align:top}
@@ -29,7 +29,7 @@
29
29
  .fine { text-align: center; font-size: 13px; color: var(--cs-color-text-muted); margin-top: 4px; }
30
30
  .state-bar { max-width: calc(100% - 96px); position: fixed; left: 20px; bottom: 20px; z-index: 60; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; padding: 10px 12px; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); border-radius: 12px; box-shadow: var(--cs-shadow-xs); font-size: 13px; }
31
31
  .state-bar label { flex-wrap: wrap; display: flex; align-items: center; gap: 6px; color: var(--cs-color-text-muted); }
32
- .state-bar select { font: inherit; }
32
+ .state-bar select { font: inherit; border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-sm); background: var(--cs-color-surface-page); color: var(--cs-color-text-primary); padding: 4px 8px; }
33
33
  [hidden] { display: none !important; }
34
34
  @media (max-width: 820px) { .state-bar { position: static; margin: 0 76px 20px 20px; } .login { grid-template-columns: minmax(0, 1fr); } .pane-brand { display: none; } }
35
35
  </style>
@@ -80,13 +80,13 @@
80
80
  </select>
81
81
  </label>
82
82
  </div>
83
- <button id="themeToggle" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện" style="position:fixed;right:20px;bottom:20px;z-index:60;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-panel);color:var(--cs-color-text-primary);width:44px;height:44px;border-radius:999px;cursor:pointer;box-shadow:var(--cs-shadow-md)">☾</button>
83
+ <button id="themeToggle" type="button" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện" style="position:fixed;right:20px;bottom:20px;z-index:60;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-panel);color:var(--cs-color-text-primary);width:44px;height:44px;border-radius:999px;cursor:pointer;box-shadow:var(--cs-shadow-md);display:grid;place-items:center"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path id="themeTogglePath" d="M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z"/></svg></button>
84
84
  <script>
85
85
  document.querySelector("form").addEventListener("submit", function (event) { event.preventDefault(); });
86
86
  document.getElementById("themeToggle").addEventListener("click", function () {
87
87
  var el = document.documentElement, dark = el.getAttribute("data-theme") === "dark";
88
88
  el.setAttribute("data-theme", dark ? "light" : "dark");
89
- this.textContent = dark ? "☾" : "☀";
89
+ document.getElementById("themeTogglePath").setAttribute("d", dark ? "M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z" : "M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4");
90
90
  });
91
91
  function applyState(state) {
92
92
  var banner = document.getElementById("errBanner");
@@ -17,7 +17,7 @@
17
17
  .crumb { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--cs-color-text-muted); margin: 18px 0 16px; flex-wrap: wrap; }
18
18
  .crumb a { color: var(--cs-color-text-muted); text-decoration: none; white-space: nowrap; }
19
19
  .crumb a:hover { color: var(--cs-color-text-accent); }
20
- .crumb .sep { color: var(--cs-color-border-default); }
20
+ .crumb .sep { color: var(--cs-color-text-muted); }
21
21
  .crumb .cur { color: var(--cs-color-text-primary); font-weight: 600; }
22
22
  .pd-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 8px; }
23
23
  .pd-head h1 { font-size: 30px; font-weight: 800; letter-spacing: -.02em; margin: 0 0 6px; }
@@ -34,7 +34,6 @@
34
34
  .task:first-of-type { border-top: 0; }
35
35
  .task .mono { font-family: var(--cs-font-family-mono); font-size: 12.5px; color: var(--cs-color-text-primary); }
36
36
  .task .nm { flex: 1; font-size: 14px; }
37
- .toggle { position: fixed; right: 20px; bottom: 20px; z-index: 60; border: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary); width: 44px; height: 44px; border-radius: 999px; cursor: pointer; box-shadow: var(--cs-shadow-xs); display: grid; place-items: center; }
38
37
  @media (max-width: 820px) { .pd-grid { grid-template-columns: 1fr; } }
39
38
  @container cs (max-width: 768px) { .pd-grid { grid-template-columns: 1fr; } }
40
39
  </style>
@@ -48,7 +47,7 @@
48
47
  <span class="hd-mark"><img src="../../assets/logo-mark.svg" alt="" /></span>
49
48
  <div><h1>Status Hub</h1><p class="hd-sub" data-vi="CyberSkill · chi tiết dự án">CyberSkill · project detail</p></div>
50
49
  </div>
51
- <div class="hd-side"><button type="button" class="cs-button cs-button--secondary cs-button--sm" data-preview-language-toggle>Tiếng Việt</button><p class="hd-meta"><span data-vi="Dữ liệu minh họa">Sample data</span><br /><span data-vi="2 giờ trước · An Le">2h ago · An Le</span></p></div>
50
+ <div class="hd-side"><p class="hd-meta"><span data-vi="Dữ liệu minh họa">Sample data</span><br /><span data-vi="2 giờ trước · An Le">2h ago · An Le</span></p><button type="button" class="btn ghost" style="width:auto;padding:0 12px;font-weight:700;font-size:13px" data-preview-language-toggle>Tiếng Việt</button><button type="button" class="btn ghost" id="themeToggle" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path id="themeTogglePath" d="M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z"/></svg></button></div>
52
51
  </div>
53
52
  </header>
54
53
 
@@ -81,7 +80,7 @@
81
80
  <div class="stat"><div class="l" data-vi="Tiến độ">Progress</div><div class="v">72%</div></div>
82
81
  <div class="stat"><div class="l" data-vi="Công việc">Tasks</div><div class="v">18</div></div>
83
82
  <div class="stat"><div class="l" data-vi="Đã ra mắt">Shipped</div><div class="v">13</div></div>
84
- <div class="stat"><div class="l" data-vi="Mục tiêu">Target</div><div class="v" style="font-size:18px;padding-top:6px" data-vi="Tuần này">This week</div></div>
83
+ <div class="stat"><div class="l" data-vi="Mục tiêu">Target</div><div class="v" style="font-size:21px;padding-top:4px" data-vi="Tuần này">This week</div></div>
85
84
  </div>
86
85
 
87
86
  <div style="margin:8px 0 22px">
@@ -129,13 +128,12 @@
129
128
  </div>
130
129
  </main>
131
130
  </div>
132
- <button class="toggle" id="themeToggle" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện">☾</button>
133
131
  <script>
134
132
  document.getElementById("themeToggle").addEventListener("click", function () {
135
133
  var el = document.documentElement;
136
134
  var dark = el.getAttribute("data-theme") === "dark";
137
135
  el.setAttribute("data-theme", dark ? "light" : "dark");
138
- this.textContent = dark ? "☾" : "☀";
136
+ document.getElementById("themeTogglePath").setAttribute("d", dark ? "M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z" : "M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4");
139
137
  });
140
138
  </script>
141
139
  <script src="static-locale.js"></script>
@@ -37,7 +37,7 @@
37
37
  <span class="hd-mark"><img src="../../assets/logo-mark.svg" alt="" /></span>
38
38
  <div><h1 data-vi="Cài đặt">Settings</h1><p class="hd-sub" data-vi="CyberSkill · không gian làm việc và tùy chọn">CyberSkill · workspace &amp; preferences</p></div>
39
39
  </div>
40
- <div class="hd-side"><div class="hd-meta"><span data-vi="Hồ sơ minh họa">Sample profile</span><br />an@cyberskill.world</div></div>
40
+ <div class="hd-side"><div class="hd-meta"><span data-vi="Hồ sơ minh họa">Sample profile</span><br />an@cyberskill.world</div><button type="button" class="btn ghost" id="themeToggle" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path id="themeTogglePath" d="M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z"/></svg></button></div>
41
41
  </div>
42
42
  </header>
43
43
 
@@ -93,13 +93,12 @@
93
93
  </form>
94
94
  </main>
95
95
  </div>
96
- <button id="themeToggle" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện" style="position:fixed;right:20px;bottom:20px;z-index:60;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-panel);color:var(--cs-color-text-primary);width:44px;height:44px;border-radius:999px;cursor:pointer;box-shadow:var(--cs-shadow-md)">☾</button>
97
96
  <script>
98
97
  document.querySelector("form").addEventListener("submit", function (event) { event.preventDefault(); });
99
98
  document.getElementById("themeToggle").addEventListener("click", function () {
100
99
  var el = document.documentElement, dark = el.getAttribute("data-theme") === "dark";
101
100
  el.setAttribute("data-theme", dark ? "light" : "dark");
102
- this.textContent = dark ? "☾" : "☀";
101
+ document.getElementById("themeTogglePath").setAttribute("d", dark ? "M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z" : "M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4");
103
102
  });
104
103
 
105
104
  document.getElementById("appearance-theme").addEventListener("click", function(){ document.getElementById("themeToggle").click(); });
@@ -56,7 +56,7 @@ html, body { overflow-x: clip; }
56
56
  .hd-mark img { width: 42px; height: 42px; display: block; }
57
57
  .hd h1 { margin: 0; font-size: 24px; letter-spacing: .2px; line-height: var(--cs-font-lineHeight-heading); }
58
58
  .hd-sub { margin: 2px 0 0; font-size: 13.5px; opacity: .8; }
59
- .hd-side { display: flex; align-items: center; gap: var(--cs-space-4); }
59
+ .hd-side { display: flex; align-items: center; gap: var(--cs-space-4); flex-wrap: wrap; }
60
60
  .hd-meta { margin: 0; font-size: 12.5px; opacity: .75; text-align: right; }
61
61
 
62
62
  /* buttons */
@@ -65,7 +65,11 @@ html, body { overflow-x: clip; }
65
65
  font: inherit; font-size: 13.5px; font-weight: 600; }
66
66
  .btn:hover { border-color: var(--cs-color-brand-ochre); }
67
67
  .hd .btn.ghost { background: transparent; border-color: var(--cs-status-ghost-border);
68
- color: var(--cs-status-header-fg); width: 38px; height: 38px; padding: 0; display: grid; place-items: center; }
68
+ color: var(--cs-status-header-fg); width: 38px; height: 38px; padding: 0; display: inline-flex; align-items: center; justify-content: center; }
69
+ .hd .btn.ghost:hover { border-color: var(--cs-color-brand-ochre); }
70
+ @media (pointer: coarse) {
71
+ .hd .btn.ghost { min-width: 44px; min-height: 44px; }
72
+ }
69
73
 
70
74
  /* deck */
71
75
  .deck { margin: var(--cs-space-6) 0 var(--cs-space-4); display: grid; gap: var(--cs-space-4);
@@ -93,10 +97,10 @@ html, body { overflow-x: clip; }
93
97
  .dot { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }
94
98
  .spark { display: flex; align-items: flex-end; gap: 6px; height: 96px; margin-top: var(--cs-space-2); }
95
99
  .spark a { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center;
96
- gap: 4px; text-decoration: none; color: var(--cs-color-text-muted); font-size: 10.5px; }
100
+ gap: 4px; text-decoration: none; color: var(--cs-color-text-muted); font-size: 11px; }
97
101
  .spark i { display: block; width: 100%; background: var(--cs-color-brand-ochre); border-radius: 4px 4px 0 0; min-height: 3px; }
98
102
  .spark a:hover i { background: var(--cs-color-text-accent); }
99
- .spark b { font-size: 11px; color: var(--cs-color-text-primary); font-weight: 600; }
103
+ .spark b { font-size: 11.5px; color: var(--cs-color-text-primary); font-weight: 600; }
100
104
 
101
105
  /* now shipping */
102
106
  .now { background: var(--cs-color-surface-raised); border: 1px solid var(--cs-color-brand-ochre);
@@ -112,6 +116,7 @@ html, body { overflow-x: clip; }
112
116
  border: 1px solid var(--cs-color-border-default); border-radius: 14px;
113
117
  padding: var(--cs-space-3) var(--cs-space-4); margin-bottom: var(--cs-space-4); }
114
118
  @media (prefers-reduced-transparency: reduce) { .bar { -webkit-backdrop-filter: none; backdrop-filter: none; background: var(--cs-color-surface-page); } }
119
+ [data-cs-style="matte-paper"] .bar { -webkit-backdrop-filter: none; backdrop-filter: none; background: var(--cs-color-surface-panel); box-shadow: var(--cs-shadow-xs); }
115
120
  .bar-top { display: flex; gap: var(--cs-space-3); align-items: center; flex-wrap: wrap; }
116
121
  .srch { flex: 1 1 340px; display: flex; align-items: center; gap: var(--cs-space-2);
117
122
  background: var(--cs-color-surface-panel); border: 1px solid var(--cs-component-textfield-border-default);
@@ -125,21 +130,21 @@ html, body { overflow-x: clip; }
125
130
  .ln { border: 0; background: transparent; border-radius: var(--cs-radius-full); padding: 7px 15px;
126
131
  font: inherit; font-size: 13.5px; font-weight: 600; cursor: pointer; color: var(--cs-color-text-accent); }
127
132
  .ln[aria-selected="true"] { background: var(--_cs-light, var(--cs-color-brand-umber)) var(--_cs-dark, var(--cs-color-brand-ochre)); color: var(--_cs-light, var(--cs-color-text-inverse)) var(--_cs-dark, var(--cs-status-on-ochre)); }
128
- .facet { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--cs-color-text-muted); }
133
+ .facet { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--cs-color-text-muted); }
129
134
  .facet select { background: var(--cs-color-surface-panel); color: var(--cs-color-text-primary);
130
- border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-sm); padding: 6px 8px;
131
- font-family: inherit; font-size: 13px; }
135
+ border: 1px solid var(--cs-component-textfield-border-default, var(--cs-color-border-default)); border-radius: var(--cs-radius-full); min-height: 36px; padding: 0 12px;
136
+ font-family: inherit; font-size: 13px; cursor: pointer; }
132
137
  .cnt { margin-left: auto; font-size: 12.5px; color: var(--cs-color-text-muted); }
133
138
 
134
139
  /* pills + chips */
135
- .pill { display: inline-block; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: var(--cs-radius-full);
140
+ .pill { display: inline-block; font-size: 11.5px; font-weight: 700; padding: 2px 8px; border-radius: var(--cs-radius-full);
136
141
  text-transform: uppercase; letter-spacing: .04em; }
137
142
  .pill.done { background: var(--cs-color-semantic-success); color: var(--cs-status-on-fill); }
138
143
  .pill.active { background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre); }
139
144
  .pill.hold { background: var(--cs-color-semantic-danger); color: var(--cs-status-on-fill); }
140
145
  .pill.todo { background: var(--cs-color-border-default); color: var(--cs-color-text-accent); }
141
146
  .task-chips { display: flex; flex-wrap: wrap; gap: 5px; margin-top: var(--cs-space-2); }
142
- .chip { font-size: 11px; font-weight: 600; padding: 3px 7px;
147
+ .chip { font-size: 11.5px; font-weight: 600; padding: 3px 7px;
143
148
  border-radius: 6px; cursor: pointer; background: var(--cs-color-surface-raised); color: var(--cs-color-text-accent);
144
149
  border: 1px solid var(--cs-color-border-default); }
145
150
  .chip:hover { border-color: var(--cs-color-brand-ochre); }
@@ -150,9 +155,9 @@ html, body { overflow-x: clip; }
150
155
  /* board */
151
156
  .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); gap: var(--cs-space-4); }
152
157
  .card { background: var(--cs-color-surface-panel); border: 1px solid var(--cs-color-border-default);
153
- border-radius: 14px; padding: var(--cs-space-4); cursor: pointer; text-align: left; font: inherit; color: inherit; }
158
+ border-radius: 14px; padding: var(--cs-space-4); cursor: pointer; text-align: left; font: inherit; color: inherit; box-shadow: var(--cs-shadow-xs); }
154
159
  .card:hover { border-color: var(--cs-color-brand-ochre); }
155
- .card.hot { border-color: var(--cs-color-brand-ochre); }
160
+ .card.hot { border-inline-start: 3px solid var(--cs-color-brand-ochre); }
156
161
  .card-h { display: flex; align-items: baseline; justify-content: space-between; gap: var(--cs-space-2); }
157
162
  .card-h h3 { margin: 0; font-size: 15px; line-height: var(--cs-font-lineHeight-heading); }
158
163
  .card-h .pct { font-size: 12.5px; color: var(--cs-color-text-muted); white-space: nowrap; }
@@ -166,7 +171,7 @@ html, body { overflow-x: clip; }
166
171
  background: var(--cs-color-surface-panel); }
167
172
  table.tbl { border-collapse: collapse; width: 100%; font-size: 13px; }
168
173
  .tbl th, .tbl td { text-align: left; padding: 9px 12px; border-bottom: 1px solid var(--cs-color-border-default); vertical-align: top; }
169
- .tbl thead th { background: var(--cs-color-surface-raised); font-size: 11.5px; text-transform: uppercase;
174
+ .tbl thead th { background: var(--cs-color-surface-raised); font-size: 12px; text-transform: uppercase;
170
175
  letter-spacing: .06em; color: var(--cs-color-text-muted); white-space: nowrap; }
171
176
  .tbl tbody tr { cursor: pointer; }
172
177
  .tbl tbody tr:hover { background: var(--cs-color-surface-raised); }
@@ -183,7 +188,7 @@ table.tbl { border-collapse: collapse; width: 100%; font-size: 13px; }
183
188
  .rel.now .tick { background: var(--cs-color-brand-ochre); color: var(--cs-status-on-ochre); }
184
189
  .rel-h { display: flex; align-items: baseline; gap: var(--cs-space-3); flex-wrap: wrap; }
185
190
  .rel-h b { font-size: 17px; font-family: var(--cs-font-family-mono); }
186
- .rel-sec h4 { margin: var(--cs-space-3) 0 var(--cs-space-1); font-size: 11.5px; text-transform: uppercase;
191
+ .rel-sec h4 { margin: var(--cs-space-3) 0 var(--cs-space-1); font-size: 12px; text-transform: uppercase;
187
192
  letter-spacing: .07em; color: var(--cs-color-text-muted); }
188
193
  .rel-sec ul { margin: 0; padding-left: 18px; font-size: 13.5px; }
189
194
  .rel-sec li { margin: 3px 0; }
@@ -206,7 +211,7 @@ table.tbl { border-collapse: collapse; width: 100%; font-size: 13px; }
206
211
  .dw-b { overflow: auto; padding: var(--cs-space-5); flex: 1; }
207
212
  .meta { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--cs-space-3);
208
213
  margin: 0 0 var(--cs-space-4); }
209
- .meta dt { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--cs-color-text-muted); }
214
+ .meta dt { font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--cs-color-text-muted); }
210
215
  .meta dd { margin: 2px 0 0; font-size: 13.5px; }
211
216
  .sect h3 { margin: var(--cs-space-5) 0 var(--cs-space-2); font-size: 12px; text-transform: uppercase;
212
217
  letter-spacing: .08em; color: var(--cs-color-text-muted); }
@@ -218,8 +223,12 @@ table.tbl { border-collapse: collapse; width: 100%; font-size: 13px; }
218
223
  .ft { margin: var(--cs-space-12) 0 var(--cs-space-16); text-align: center; font-size: 12px; color: var(--cs-color-text-muted); }
219
224
 
220
225
  /* Viewport fallback. */
221
- @media (max-width: 768px), (min-width: 1024px) { .pill, .chip, .tbl thead th, .rel-sec h4, .meta dt, .spark a, .spark b { font-size: 12px; } }
222
226
  @media (max-width: 900px) { .deck { grid-template-columns: 1fr; } .hd-meta { text-align: left; } }
227
+ @media (max-width: 480px) {
228
+ .wrap, .hd-in { padding-inline: var(--cs-space-4); }
229
+ .hd-in { gap: var(--cs-space-3); }
230
+ .hd-side { gap: var(--cs-space-2); }
231
+ }
223
232
  /* G1 / TASK-IMP-025 — deck + board card grid from `.wrap` container width. */
224
233
  @container cs (max-width: 768px) {
225
234
  .deck { grid-template-columns: 1fr; }
@@ -12,30 +12,24 @@
12
12
  <style>
13
13
  /* hero: banner */
14
14
  html, body { margin: 0; }
15
- @media screen and (min-width: 1024px) {
16
- .car-hero + .sec { padding-top: 84px; }
17
- .roles { gap: 28px; }
18
- .role { padding: 36px 28px; }
19
- }
20
- .car-hero { background: var(--cs-color-brand-umber); color: #fff; padding: 88px 0 64px; position: relative; overflow: hidden; }
15
+ .car-hero { background: var(--cs-color-brand-umber); color: #fff; padding: 76px 0 56px; position: relative; overflow: hidden; }
21
16
  .car-hero::before { content: ""; position: absolute; inset: 0; background-image: url("../../assets/aurora-tho.webp"); background-size: cover; background-position: center; opacity: .32; }
22
17
  .car-hero::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(26,17,8,.28), rgba(26,17,8,.78)); }
23
18
  .car-hero .container { position: relative; z-index: 1; }
24
19
  .car-hero h1 { font-size: clamp(36px, 5vw, 54px); font-weight: 800; letter-spacing: -.02em; color: var(--cs-color-brand-ochre); margin: 12px 0 6px; }
25
20
  .car-hero p { font-size: 18px; opacity: .92; max-width: 600px; margin: 0; }
26
- .vals { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
27
- .val { border-top: 3px solid var(--cs-color-brand-ochre); padding-top: 12px; }
28
- .sec .eyebrow { margin-bottom: 20px; }
21
+ .vals { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-top: 24px; }
22
+ .val { border-top: 3px solid var(--cs-color-brand-ochre); padding-top: 14px; }
23
+ .sec .eyebrow { margin-bottom: 8px; }
29
24
  .val h3 { margin: 0 0 6px; font-size: 18px; }
30
25
  .val p { margin: 0; color: var(--cs-color-text-muted); font-size: 14px; line-height: 1.5; }
31
- .roles { display: grid; gap: 12px; }
32
- .role { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 20px 24px; border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); background: var(--cs-color-surface-panel); transition: border-color .12s; flex-wrap: wrap; }
33
- .role:hover { border-color: var(--cs-color-brand-ochre); }
26
+ .roles { display: grid; gap: 14px; margin-top: 24px; }
27
+ .role { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 22px 24px; border: 1px solid var(--cs-color-border-default); border-radius: var(--cs-radius-lg); background: var(--cs-color-surface-panel); box-shadow: var(--cs-shadow-xs); transition: border-color var(--cs-duration-fast) var(--cs-ease-standard); flex-wrap: wrap; }
28
+ .role:hover { border-color: var(--cs-color-brand-ochre); box-shadow: var(--cs-shadow-sm); }
34
29
  .role h3 { margin: 0 0 4px; font-size: 19px; }
35
30
  .role .meta { color: var(--cs-color-text-muted); font-size: 14px; display: flex; gap: 14px; flex-wrap: wrap; }
36
31
  @media (max-width: 760px) { .vals { grid-template-columns: 1fr 1fr; } .nav { display: none; } }
37
- /* Fixed44px theme button sits20px above the edge; reserve20px clearance. */
38
- .ft { padding-bottom: 84px; }
32
+ @media (max-width: 480px) { .vals { grid-template-columns: 1fr; } }
39
33
  </style>
40
34
  </head>
41
35
  <body>
@@ -45,7 +39,7 @@
45
39
  <div class="container hdr-in">
46
40
  <a class="brand" href="index.html"><img src="../../assets/logo-mark.svg" alt="" />CyberSkill</a>
47
41
  <nav class="nav"><a href="index.html#services" data-vi="Dịch vụ">Services</a><a href="work.html" data-vi="Dự án">Work</a><a href="careers.html" data-vi="Tuyển dụng">Careers</a><a href="index.html#contact" data-vi="Liên hệ">Contact</a></nav>
48
- <div class="hdr-side"><a class="mini" href="#" id="langToggle" aria-label="Switch to Tiếng Việt" data-vi-aria-label="Chuyển sang English">Tiếng Việt</a><a class="mini" style="background:var(--cs-color-brand-umber);color:#fff;border-color:transparent" href="index.html#top" data-vi="Trò chuyện với Lumi">Talk to Lumi</a></div>
42
+ <div class="hdr-side"><a class="mini" href="#" id="langToggle" aria-label="Switch to Tiếng Việt" data-vi-aria-label="Chuyển sang English">Tiếng Việt</a><button id="themeToggle" type="button" class="mini icon" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path id="themeTogglePath" d="M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z"/></svg></button><a class="mini" style="background:var(--cs-color-brand-umber);color:#fff;border-color:transparent" href="index.html#top" data-vi="Trò chuyện với Lumi">Talk to Lumi</a></div>
49
43
  </div>
50
44
  </header>
51
45
 
@@ -102,12 +96,11 @@
102
96
  </div>
103
97
  </footer>
104
98
  </div>
105
- <button id="themeToggle" aria-label="Toggle theme" data-vi-aria-label="Đổi giao diện" style="position:fixed;right:20px;bottom:20px;z-index:60;border:1px solid var(--cs-color-border-default);background:var(--cs-color-surface-panel);color:var(--cs-color-text-primary);width:44px;height:44px;border-radius:999px;cursor:pointer;box-shadow:var(--cs-shadow-md)">☾</button>
106
99
  <script>
107
100
  document.getElementById("themeToggle").addEventListener("click", function () {
108
101
  var el = document.documentElement, dark = el.getAttribute("data-theme") === "dark";
109
102
  el.setAttribute("data-theme", dark ? "light" : "dark");
110
- this.textContent = dark ? "☾" : "☀";
103
+ document.getElementById("themeTogglePath").setAttribute("d", dark ? "M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z" : "M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4");
111
104
  });
112
105
  </script>
113
106
  <script>
@@ -13,6 +13,8 @@
13
13
  html, body { margin: 0; height: 100%; }
14
14
  .lumi-page { display: grid; grid-template-columns: 288px 1fr; height: 100vh; background: var(--cs-color-surface-page); font-family: var(--cs-font-family-ui); color: var(--cs-color-text-primary); }
15
15
  .lumi-side { border-right: 1px solid var(--cs-color-border-default); background: var(--cs-color-surface-panel); display: flex; flex-direction: column; padding: 16px 14px; gap: 4px; }
16
+ .lumi-side .cs-sidebar { inline-size: 100%; padding: 0; border-inline-end: 0; background: transparent; }
17
+ .lumi-theme { width: 44px; padding-inline: 0; justify-content: center; }
16
18
  .lumi-brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 17px; color: var(--cs-color-text-primary); padding: 6px 10px 14px; }
17
19
  .lumi-brand img { width: 30px; height: 30px; }
18
20
  .lumi-new { margin: 0 4px 12px; }
@@ -33,9 +35,11 @@
33
35
  .lumi-page .cs-suggest button { color: var(--cs-color-text-primary); }
34
36
  .lumi-page .cs-suggest button, .lumi-page .cs-button--sm, .lumi-page .cs-nav-item { min-height: 44px; }
35
37
  @media (prefers-reduced-transparency: reduce) { .lumi-top { backdrop-filter: none; -webkit-backdrop-filter: none; background: var(--cs-color-surface-panel); } }
38
+ [data-cs-style="matte-paper"] .lumi-top { backdrop-filter: none; -webkit-backdrop-filter: none; background: var(--cs-color-surface-panel); }
36
39
  .lumi-answer-card p { margin: 0; font-size: 15px; line-height: 1.6; }
37
40
  .lumi-answer-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
38
41
  @media (max-width: 820px) { .lumi-page { grid-template-columns: 1fr; } .lumi-side { display: none; } .lumi-mobile-new { display: inline-flex; } }
42
+ @media (max-width: 480px) { .lumi-top { padding: 12px 16px; gap: 8px; } .lumi-thread { padding: 18px 16px; } .lumi-compose { padding: 14px 16px 18px; } }
39
43
  </style>
40
44
  <script src="../../_vendor/react/react.production.min.js"></script>
41
45
  <script src="../../_vendor/react/react-dom.production.min.js"></script>
@@ -47,7 +51,7 @@
47
51
 
48
52
  <div id="root"></div>
49
53
  <script type="text/babel">
50
- const CS = window[Object.keys(window).find(k=>/^CyberSkillDesignSystem_[0-9a-f]{6}$/.test(k))] || {};
54
+ const CS = window[Object.keys(window).find(k=>k.startsWith("CyberSkillDesignSystem_"))] || {};
51
55
  const { LumiAvatar, PromptInput, PromptSuggestions, ChatMessage, TypingIndicator, CitationList, AIDisclosureBadge, ConfidenceMeter, Button, Sidebar, NavItem, Badge } = CS;
52
56
  const { useState, useRef, useEffect } = React;
53
57
 
@@ -63,7 +67,7 @@ const CHAT_COPY = {
63
67
  details: "This fixed sample illustrates the interface. No model or human review is involved; confidence and references are illustrative.",
64
68
  services: "Services", process: "Process", citations: "Sample references", what: "What we build", arc: "The arc of a wish",
65
69
  handoff: "Demo only — no handoff", refine: "Keep refining", placeholder: "Make a wish…", send: "Send",
66
- hint: "Scripted preview; does not send your wish to a model or the team."
70
+ hint: "Scripted preview; does not send your wish to a model or the team.", theme: "Toggle theme"
67
71
  },
68
72
  vi: {
69
73
  skip: "Bỏ qua đến nội dung", newWish: "Điều ước mới", recent: "Hội thoại minh họa",
@@ -76,12 +80,18 @@ const CHAT_COPY = {
76
80
  details: "Mẫu cố định này minh họa giao diện. Không có mô hình hay người kiểm duyệt tham gia; độ tin cậy và tài liệu chỉ để minh họa.",
77
81
  services: "Dịch vụ", process: "Quy trình", citations: "Tài liệu minh họa", what: "Những gì chúng tôi xây", arc: "Hành trình của điều ước",
78
82
  handoff: "Bản mẫu — chưa chuyển giao", refine: "Tiếp tục điều chỉnh", placeholder: "Kể một điều ước…", send: "Gửi",
79
- hint: "Bản xem trước theo kịch bản; chưa gửi điều ước đến mô hình hay đội ngũ."
83
+ hint: "Bản xem trước theo kịch bản; chưa gửi điều ước đến mô hình hay đội ngũ.", theme: "Đổi giao diện"
80
84
  }
81
85
  };
82
86
 
83
87
  function LumiPage() {
84
88
  const [loc, setLoc] = useState("en"), t = CHAT_COPY[loc];
89
+ const [isDark, setIsDark] = useState(() => document.documentElement.getAttribute("data-theme") === "dark");
90
+ function toggleTheme() {
91
+ const next = document.documentElement.getAttribute("data-theme") === "dark" ? "light" : "dark";
92
+ document.documentElement.setAttribute("data-theme", next);
93
+ setIsDark(next === "dark");
94
+ }
85
95
  const [draft, setDraft] = useState("");
86
96
  const pending = useRef(new Set());
87
97
  const composerRef = useRef(null);
@@ -142,6 +152,7 @@ function LumiPage() {
142
152
  <LumiAvatar src="../../assets/lumi-poster.webp" size="md" ring />
143
153
  <div><h1>Lumi</h1><div className="sub">{t.subtitle}</div></div>
144
154
  <button type="button" className="cs-button cs-button--secondary cs-button--sm lumi-language" style={{ marginLeft: "auto" }} onClick={() => setLoc(loc === "en" ? "vi" : "en")}>{loc === "en" ? "Tiếng Việt" : "English"}</button>
155
+ <button type="button" className="cs-button cs-button--secondary cs-button--sm lumi-theme" aria-label={t.theme} onClick={toggleTheme}><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.9" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><path d={isDark ? "M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4" : "M20 13.5A8 8 0 1 1 10.5 4a6.5 6.5 0 0 0 9.5 9.5z"} /></svg></button>
145
156
  <Badge variant="info">{t.badge}</Badge>
146
157
  <button type="button" className="cs-button cs-button--secondary cs-button--sm lumi-mobile-new" onClick={newWish}>✦ {t.newWish}</button>
147
158
  </header>