@cyberskill/design 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/DESIGN.md +10 -9
  2. package/README.md +31 -28
  3. package/SKILL.md +13 -9
  4. package/VERSION +1 -1
  5. package/_ds_bundle.js +660 -202
  6. package/_ds_manifest.json +1 -1
  7. package/_esm/cs.mjs +14 -8
  8. package/_esm/react.d.ts +216 -0
  9. package/_esm/react.mjs +114 -0
  10. package/base/collections.css +31 -0
  11. package/base/components.css +3 -0
  12. package/base/data.css +33 -0
  13. package/base/forms.css +8 -0
  14. package/base/interaction.css +1 -0
  15. package/base/typography.css +6 -0
  16. package/components/_i18n/strings.js +8 -4
  17. package/components/ai/ai-conversation.card.html +2 -2
  18. package/components/ai/ai-lumi.card.html +2 -2
  19. package/components/ai/ai.card.html +2 -2
  20. package/components/brand/brand.card.html +2 -2
  21. package/components/button/buttons.card.html +2 -2
  22. package/components/data/AspectRatio.d.ts +16 -0
  23. package/components/data/AspectRatio.figma.tsx +12 -0
  24. package/components/data/AspectRatio.jsx +16 -0
  25. package/components/data/AspectRatio.prompt.md +7 -0
  26. package/components/data/Collapsible.d.ts +21 -0
  27. package/components/data/Collapsible.figma.tsx +12 -0
  28. package/components/data/Collapsible.jsx +49 -0
  29. package/components/data/Collapsible.prompt.md +7 -0
  30. package/components/data/Image.d.ts +4 -0
  31. package/components/data/Image.prompt.md +2 -2
  32. package/components/data/Item.d.ts +26 -0
  33. package/components/data/Item.figma.tsx +12 -0
  34. package/components/data/Item.jsx +63 -0
  35. package/components/data/Item.prompt.md +10 -0
  36. package/components/data/ScrollArea.d.ts +16 -0
  37. package/components/data/ScrollArea.figma.tsx +12 -0
  38. package/components/data/ScrollArea.jsx +25 -0
  39. package/components/data/ScrollArea.prompt.md +7 -0
  40. package/components/data/collections.card.html +15 -4
  41. package/components/data/data.card.html +15 -4
  42. package/components/datatable/datatable.card.html +2 -2
  43. package/components/dialog/dialog.card.html +2 -2
  44. package/components/feedback/feedback-2.card.html +2 -2
  45. package/components/feedback/feedback.card.html +2 -2
  46. package/components/forms/Cascader.jsx +5 -3
  47. package/components/forms/Editor.prompt.md +1 -1
  48. package/components/forms/InputGroup.d.ts +4 -0
  49. package/components/forms/InputGroup.jsx +38 -8
  50. package/components/forms/InputGroup.prompt.md +3 -3
  51. package/components/forms/NativeSelect.d.ts +22 -0
  52. package/components/forms/NativeSelect.figma.tsx +12 -0
  53. package/components/forms/NativeSelect.jsx +56 -0
  54. package/components/forms/NativeSelect.prompt.md +10 -0
  55. package/components/forms/NumberField.d.ts +5 -0
  56. package/components/forms/NumberField.jsx +51 -7
  57. package/components/forms/NumberField.prompt.md +2 -2
  58. package/components/forms/SegmentedControl.jsx +1 -1
  59. package/components/forms/TagInput.d.ts +3 -0
  60. package/components/forms/TagInput.jsx +62 -20
  61. package/components/forms/TagInput.prompt.md +2 -2
  62. package/components/forms/forms-2.card.html +2 -2
  63. package/components/forms/forms.card.html +5 -4
  64. package/components/icon/Icon.prompt.md +1 -1
  65. package/components/icon/icon.card.html +2 -2
  66. package/components/logo/Logo.jsx +2 -1
  67. package/components/logo/logo.card.html +2 -2
  68. package/components/navigation/Menu.jsx +14 -1
  69. package/components/navigation/navigation.card.html +2 -2
  70. package/components/navigation/shell.card.html +2 -2
  71. package/components/overlays/AlertDialog.d.ts +29 -0
  72. package/components/overlays/AlertDialog.figma.tsx +12 -0
  73. package/components/overlays/AlertDialog.jsx +142 -0
  74. package/components/overlays/AlertDialog.prompt.md +12 -0
  75. package/components/overlays/Drawer.jsx +1 -1
  76. package/components/overlays/Popconfirm.jsx +14 -1
  77. package/components/overlays/Popover.jsx +14 -1
  78. package/components/overlays/alertdialog.card.html +42 -0
  79. package/components/overlays/overlays.card.html +2 -2
  80. package/components/textfield/textfield.card.html +2 -2
  81. package/docs/benchmark-rubric.md +46 -0
  82. package/docs/ci-cd.md +17 -11
  83. package/docs/consumer-grant.md +37 -0
  84. package/docs/consuming.md +45 -16
  85. package/docs/contrast-report.md +91 -103
  86. package/docs/conventions.md +12 -9
  87. package/docs/decisions.md +33 -10
  88. package/docs/deploy.md +1 -1
  89. package/docs/design-styles.md +26 -8
  90. package/docs/figma.md +3 -3
  91. package/docs/live-hub.md +5 -3
  92. package/docs/products.md +13 -11
  93. package/docs/quality-gates.md +35 -21
  94. package/docs/release-notes.md +13 -3
  95. package/docs/status/assets/favicon.svg +5 -0
  96. package/docs/status/assets/status-legacy.css +399 -0
  97. package/docs/status/assets/status-legacy.js +505 -0
  98. package/docs/status/assets/status.css +644 -0
  99. package/docs/status/assets/status.js +1308 -0
  100. package/docs/status/data/status-feed.json +1 -0
  101. package/docs/status/data/task/TASK-REL-001.js +1 -0
  102. package/docs/status/index.html +45 -0
  103. package/docs/status/roadmap.html +4 -0
  104. package/docs/status/status-legacy.html +121 -0
  105. package/docs/storybook.md +5 -4
  106. package/docs/sync.md +3 -2
  107. package/docs/tasks/BACKLOG.md +25 -0
  108. package/docs/tasks/release/TASK-REL-001-launch-1-1-0/spec.md +55 -0
  109. package/docs/template-schema-v2.md +15 -3
  110. package/docs/vi/benchmark-rubric.md +46 -0
  111. package/docs/vi/ci-cd.md +17 -11
  112. package/docs/vi/consumer-grant.md +37 -0
  113. package/docs/vi/consuming.md +45 -16
  114. package/docs/vi/contrast-report.md +94 -106
  115. package/docs/vi/conventions.md +12 -9
  116. package/docs/vi/decisions.md +33 -10
  117. package/docs/vi/deploy.md +1 -1
  118. package/docs/vi/design-styles.md +26 -8
  119. package/docs/vi/figma.md +3 -3
  120. package/docs/vi/live-hub.md +5 -3
  121. package/docs/vi/products.md +13 -11
  122. package/docs/vi/quality-gates.md +35 -21
  123. package/docs/vi/release-notes.md +18 -8
  124. package/docs/vi/storybook.md +5 -4
  125. package/docs/vi/sync.md +3 -2
  126. package/docs/vi/template-schema-v2.md +15 -3
  127. package/docs/viewer.html +2 -2
  128. package/fonts/spacegrotesk-var-latin-ext.woff2 +0 -0
  129. package/fonts/spacegrotesk-var-latin.woff2 +0 -0
  130. package/fonts/spacegrotesk-var-vietnamese.woff2 +0 -0
  131. package/guidelines/atomic-view.html +40 -27
  132. package/guidelines/elements-geometry.html +69 -0
  133. package/guidelines/elements-variants.html +17 -17
  134. package/guidelines/type-families.html +16 -10
  135. package/llms.txt +17 -11
  136. package/package.json +38 -16
  137. package/styles.css +1 -0
  138. package/templates/ai-cluster-demo.html +29 -14
  139. package/templates/app-shell/support.js +4 -4
  140. package/templates/article/content-schema.json +6 -0
  141. package/templates/article/support.js +4 -4
  142. package/templates/auth/support.js +4 -4
  143. package/templates/bod-deck/support.js +4 -4
  144. package/templates/bod-investor-update/support.js +4 -4
  145. package/templates/bod-memo/support.js +4 -4
  146. package/templates/bod-minutes/content-schema.json +12 -0
  147. package/templates/bod-minutes/support.js +4 -4
  148. package/templates/bod-report/support.js +4 -4
  149. package/templates/bod-resolution/support.js +4 -4
  150. package/templates/culture-event-invite/support.js +4 -4
  151. package/templates/dashboard/support.js +4 -4
  152. package/templates/delivery-change-note/support.js +4 -4
  153. package/templates/delivery-kickoff/support.js +4 -4
  154. package/templates/delivery-qbr-deck/support.js +4 -4
  155. package/templates/delivery-runbook/content-schema.json +6 -0
  156. package/templates/delivery-runbook/support.js +4 -4
  157. package/templates/delivery-status-email/support.js +4 -4
  158. package/templates/doc-style-guide/DocStyleGuide.dc.html +2 -2
  159. package/templates/doc-style-guide/support.js +4 -4
  160. package/templates/doc-suite-index/support.js +4 -4
  161. package/templates/doc-templates/DocTemplates.dc.html +1 -1
  162. package/templates/doc-templates/support.js +4 -4
  163. package/templates/email/support.js +4 -4
  164. package/templates/email-safe/README.md +17 -4
  165. package/templates/email-safe/email-launch.html +3 -3
  166. package/templates/email-safe/email-newsletter.html +1 -1
  167. package/templates/finance-dunning-email/support.js +4 -4
  168. package/templates/finance-expense-report/support.js +4 -4
  169. package/templates/finance-invoice/support.js +4 -4
  170. package/templates/finance-quote/support.js +4 -4
  171. package/templates/hr-announcement/support.js +4 -4
  172. package/templates/hr-interview-kit/content-schema.json +12 -0
  173. package/templates/hr-interview-kit/support.js +4 -4
  174. package/templates/hr-offboarding/content-schema.json +12 -0
  175. package/templates/hr-offboarding/support.js +4 -4
  176. package/templates/hr-performance-review/content-schema.json +12 -0
  177. package/templates/hr-performance-review/support.js +4 -4
  178. package/templates/hr-pip/content-schema.json +12 -0
  179. package/templates/hr-pip/support.js +4 -4
  180. package/templates/legal-msa/content-schema.json +16 -0
  181. package/templates/legal-msa/support.js +4 -4
  182. package/templates/legal-sow/support.js +4 -4
  183. package/templates/marketing-campaign-brief/support.js +4 -4
  184. package/templates/marketing-case-study/support.js +4 -4
  185. package/templates/marketing-launch/support.js +4 -4
  186. package/templates/marketing-newsletter/support.js +4 -4
  187. package/templates/marketing-page/content-schema.json +0 -1
  188. package/templates/marketing-page/support.js +4 -4
  189. package/templates/marketing-press-release/support.js +4 -4
  190. package/templates/marketing-social-kit/support.js +4 -4
  191. package/templates/playground.html +8 -4
  192. package/templates/sales-one-pager/support.js +4 -4
  193. package/templates/sales-proposal-deck/support.js +4 -4
  194. package/templates/settings/Settings.dc.html +26 -14
  195. package/templates/settings/content-schema.json +36 -0
  196. package/templates/settings/support.js +4 -4
  197. package/templates/slide-deck/support.js +4 -4
  198. package/templates/team-meeting-agenda/content-schema.json +16 -0
  199. package/templates/team-meeting-agenda/support.js +4 -4
  200. package/templates/tech-incident-report/support.js +4 -4
  201. package/templates/tech-release-notes/support.js +4 -4
  202. package/templates/tech-retro/content-schema.json +12 -0
  203. package/templates/tech-retro/support.js +4 -4
  204. package/templates/tech-rfc/content-schema.json +6 -0
  205. package/templates/tech-rfc/support.js +4 -4
  206. package/templates/vn-appointment-transfer/support.js +4 -4
  207. package/templates/vn-certificate-of-employment/support.js +4 -4
  208. package/templates/vn-code-of-conduct/support.js +4 -4
  209. package/templates/vn-compensation-regulation/support.js +4 -4
  210. package/templates/vn-contract-amendment/support.js +4 -4
  211. package/templates/vn-contractor-agreement/support.js +4 -4
  212. package/templates/vn-data-protection-policy/support.js +4 -4
  213. package/templates/vn-disciplinary-case-file/support.js +4 -4
  214. package/templates/vn-disciplinary-schedule/content-schema.json +15 -0
  215. package/templates/vn-disciplinary-schedule/support.js +4 -4
  216. package/templates/vn-employee-request/support.js +4 -4
  217. package/templates/vn-exit-handover/support.js +4 -4
  218. package/templates/vn-foreign-employee-pack/support.js +4 -4
  219. package/templates/vn-grassroots-democracy/support.js +4 -4
  220. package/templates/vn-infosec-policy/support.js +4 -4
  221. package/templates/vn-internal-labor-regulations/support.js +4 -4
  222. package/templates/vn-internship-agreement/support.js +4 -4
  223. package/templates/vn-job-description/support.js +4 -4
  224. package/templates/vn-labor-contract/support.js +4 -4
  225. package/templates/vn-labour-management-book/content-schema.json +15 -0
  226. package/templates/vn-labour-management-book/support.js +4 -4
  227. package/templates/vn-mutual-nda/support.js +4 -4
  228. package/templates/vn-ndnca-ip/support.js +4 -4
  229. package/templates/vn-offer-letter/support.js +4 -4
  230. package/templates/vn-onboarding-checklist/support.js +4 -4
  231. package/templates/vn-pdpl-consent/support.js +4 -4
  232. package/templates/vn-performance-evaluation-regulation/support.js +4 -4
  233. package/templates/vn-performance-review-form/support.js +4 -4
  234. package/templates/vn-phantom-stock/support.js +4 -4
  235. package/templates/vn-probation-contract/support.js +4 -4
  236. package/templates/vn-receipt-acknowledgement/content-schema.json +15 -0
  237. package/templates/vn-receipt-acknowledgement/support.js +4 -4
  238. package/templates/vn-remote-work-policy/support.js +4 -4
  239. package/templates/vn-resignation-letter/support.js +4 -4
  240. package/templates/vn-salary-scale/content-schema.json +15 -0
  241. package/templates/vn-salary-scale/support.js +4 -4
  242. package/templates/vn-sow-appendix/support.js +4 -4
  243. package/templates/vn-termination-decision/support.js +4 -4
  244. package/templates/vn-total-rewards-appendix/support.js +4 -4
  245. package/templates/vn-training-commitment/support.js +4 -4
  246. package/templates/vn-travel-expense-policy/support.js +4 -4
  247. package/tokens/element-seeds.json +112 -0
  248. package/tokens/elements.css +274 -187
  249. package/tokens/fonts.css +12 -3
  250. package/tokens/native/CSTokens.kt +84 -68
  251. package/tokens/native/CSTokens.swift +84 -68
  252. package/tokens/native/cs_tokens.dart +84 -68
  253. package/tokens/provenance.json +9 -9
  254. package/tokens/styles.css +15 -0
  255. package/tokens/tokens.dtcg.json +258 -233
  256. package/tokens/tokens.js +168 -167
  257. package/tokens/tokens.json +167 -166
  258. package/tokens/typography.css +9 -1
  259. package/ui_kits/status-hub/README.md +1 -2
  260. package/ui_kits/status-hub/index.html +2 -2
  261. package/ui_kits/status-hub/settings.html +6 -3
  262. package/ui_kits/website/chat.html +2 -2
  263. package/ui_kits/website/index.html +2 -2
  264. package/ui_kits/status-hub/identity-lab.html +0 -134
@@ -1,48 +1,29 @@
1
1
  /* CyberSkill — Ngũ Hành elemental identity (the L1 product layer).
2
+ * GENERATED from tokens/element-seeds.json by scripts/generate-element-packs.mjs
3
+ * DO NOT HAND-EDIT pack values — change seeds and re-run the generator.
4
+ *
2
5
  * Five elements: Kim (metal) · Mộc (wood) · Thủy (water) · Hỏa (fire) · Thổ (earth).
3
- * The studio itself IS Thổ — Umber + Ochre — so :root defaults to it and every
4
- * page without an element scope looks exactly as before.
6
+ * Soft / middle / deep intensity ladder (middle = default). Thổ middle pins logo ochre.
5
7
  *
6
8
  * Contract — every element/variant sets exactly these 9 role tokens:
7
- * --cs-accent hue anchor (CTAs, highlights)
8
- * --cs-accent-strong pressed / deep / accessible accent text on light
9
- * --cs-accent-bright accent for dark surfaces (headings on ink)
10
- * --cs-accent-on text on accent / accent-bright
11
- * --cs-accent-tint light wash surface
12
- * --cs-accent-ink element-tinted near-black (dark surfaces)
13
- * --cs-accent-glow aurora / glow rgba
14
- * --cs-accent-grad-a/b wash gradient endpoints (b follows Tương sinh)
15
- * Aurora washes ride on the .cs-aurora-wash class (bottom of this file) —
16
- * relative url() cannot pass through a custom property (it re-resolves
17
- * against each consuming DOCUMENT, not this stylesheet).
18
- *
19
- * Scope with data-cs-element="kim|moc|thuy|hoa|tho" (+ data-cs-variant).
20
- * TEXT RULE: text sits on -bright or -tint only — never on the mid-tone -accent
21
- * (-accent is for bars, borders, progress fills, and large non-text fills).
22
- * Rules: semantic status tokens NEVER remap. --cs-color-accent-ochre (the 3px
23
- * focus ring) is NEVER remapped — the Ochre ring is a studio-wide
24
- * accessibility signature. One element per surface; a secondary element may
25
- * appear only as a gradient endpoint, and only along the generative cycle
26
- * (Mộc→Hỏa→Thổ→Kim→Thủy→Mộc). Overcoming (Tương khắc) pairs never mix. */
9
+ * --cs-accent · --cs-accent-strong · --cs-accent-bright · --cs-accent-on
10
+ * --cs-accent-tint · --cs-accent-ink · --cs-accent-glow · --cs-accent-grad-a/b
11
+ * TEXT RULE: text sits on -bright or -tint only — never on the mid-tone -accent.
12
+ * Focus ring --cs-color-accent-ochre and semantic status tokens NEVER remap.
13
+ * Generative cycle (Tương sinh) only for grad-b: Mộc→Hỏa→Thổ→Kim→Thủy→Mộc. */
27
14
  :root {
28
15
  --cs-accent: #F4BA17;
29
- --cs-accent-strong: #B98200;
16
+ --cs-accent-strong: #A47D17;
30
17
  --cs-accent-bright: #F4BA17;
31
18
  --cs-accent-on: #45210E;
32
19
  --cs-accent-tint: #FBF4E9;
33
20
  --cs-accent-ink: #45210E;
34
- --cs-accent-glow: rgba(244, 186, 23, 0.5);
21
+ --cs-accent-glow: rgba(244, 186, 23, 0.48);
35
22
  --cs-accent-grad-a: #F4BA17;
36
- --cs-accent-grad-b: #C77B4A;
23
+ --cs-accent-grad-b: #FCAF91;
37
24
  }
38
25
 
39
- /* ---- Element reach beyond accent (v3 Batch-0 foundation, Jul 2026) ----
40
- * Owner concern: switching Element barely changed the page because elements only
41
- * remapped the 9 ACCENT tokens (a small % of pixels). Now every element scope also
42
- * washes page + panel + raised surfaces + borders with its own accent, so the WHOLE
43
- * surface reads as the element. Per-theme literal bases keep each elevation tier's
44
- * hierarchy and contrast intact (tints capped low: text still sits ≥AA on every
45
- * surface). Pages with NO element attribute are untouched (default Thổ look). */
26
+ /* ---- Element reach beyond accent ---- */
46
27
  [data-cs-element] {
47
28
  --cs-color-surface-panel: color-mix(in oklab, var(--cs-accent) 4%, #FFFFFF);
48
29
  --cs-color-surface-page: color-mix(in oklab, var(--cs-accent) 8%, #FFFDF8);
@@ -64,107 +45,210 @@
64
45
  }
65
46
  }
66
47
 
67
- /* ---- Thổ · Earth — the mother brand (explicit; equals the defaults) ---- */
48
+ /* ---- Thổ · Earth — soft / middle / deep ---- */
68
49
  [data-cs-element="tho"] {
69
- --cs-accent: #F4BA17; --cs-accent-strong: #B98200; --cs-accent-bright: #F4BA17;
70
- --cs-accent-on: #45210E; --cs-accent-tint: #FBF4E9; --cs-accent-ink: #45210E;
71
- --cs-accent-glow: rgba(244, 186, 23, 0.5); --cs-accent-grad-a: #F4BA17; --cs-accent-grad-b: #C77B4A;
72
- }
73
- [data-cs-element="tho"][data-cs-variant="clay"] {
74
- --cs-accent: #C77B4A; --cs-accent-strong: #8F5230; --cs-accent-bright: #EDBF9D;
75
- --cs-accent-on: #2E1607; --cs-accent-tint: #F8EDE4; --cs-accent-ink: #2E1607;
76
- --cs-accent-glow: rgba(199, 123, 74, 0.5); --cs-accent-grad-a: #C77B4A; --cs-accent-grad-b: #F4BA17;
77
- --cs-color-text-accent: #8F5230; --cs-color-link: #8F5230;
50
+ --cs-accent: #F4BA17;
51
+ --cs-accent-strong: #A47D17;
52
+ --cs-accent-bright: #F4BA17;
53
+ --cs-accent-on: #45210E;
54
+ --cs-accent-tint: #FBF4E9;
55
+ --cs-accent-ink: #45210E;
56
+ --cs-accent-glow: rgba(244, 186, 23, 0.48);
57
+ --cs-accent-grad-a: #F4BA17;
58
+ --cs-accent-grad-b: #FCAF91;
78
59
  }
79
60
  [data-cs-element="tho"][data-cs-variant="sand"] {
80
- --cs-accent: #E4C98F; --cs-accent-strong: #A98B4E; --cs-accent-bright: #EFDCB2;
81
- --cs-accent-on: #3A2A10; --cs-accent-tint: #FAF3E3; --cs-accent-ink: #3A2A10;
82
- --cs-accent-glow: rgba(228, 201, 143, 0.55); --cs-accent-grad-a: #E4C98F; --cs-accent-grad-b: #F4BA17;
83
- --cs-color-text-accent: #8A6F3C; --cs-color-link: #8A6F3C;
61
+ --cs-accent: #F8E9C0;
62
+ --cs-accent-strong: #90825E;
63
+ --cs-accent-bright: #F6EBCC;
64
+ --cs-accent-on: #292414;
65
+ --cs-accent-tint: #FBF7EA;
66
+ --cs-accent-ink: #292414;
67
+ --cs-accent-glow: rgba(248, 233, 192, 0.48);
68
+ --cs-accent-grad-a: #F8E9C0;
69
+ --cs-accent-grad-b: #FCAF91;
70
+ --cs-color-text-accent: #90825E;
71
+ --cs-color-link: #90825E;
72
+ }
73
+ [data-cs-element="tho"][data-cs-variant="clay"] {
74
+ --cs-accent: #513801;
75
+ --cs-accent-strong: #201300;
76
+ --cs-accent-bright: #DEC7A2;
77
+ --cs-accent-on: #2D220E;
78
+ --cs-accent-tint: #FFF6E7;
79
+ --cs-accent-ink: #2D220E;
80
+ --cs-accent-glow: rgba(81, 56, 1, 0.48);
81
+ --cs-accent-grad-a: #513801;
82
+ --cs-accent-grad-b: #FCAF91;
83
+ --cs-color-text-accent: #201300;
84
+ --cs-color-link: #201300;
84
85
  }
85
86
 
86
- /* ---- Hỏa · Fire — energy. Variants: ember (default) · lava · plasma ---- */
87
+ /* ---- Hỏa · Fire — soft / middle / deep ---- */
87
88
  [data-cs-element="hoa"] {
88
- --cs-accent: #E0632B; --cs-accent-strong: #A93E14; --cs-accent-bright: #F6A26B;
89
- --cs-accent-on: #231007; --cs-accent-tint: #FBEADF; --cs-accent-ink: #231007;
90
- --cs-accent-glow: rgba(224, 99, 43, 0.5); --cs-accent-grad-a: #E0632B; --cs-accent-grad-b: #F4BA17;
91
- --cs-color-text-accent: #A93E14; --cs-color-link: #A93E14;
92
- }
93
- [data-cs-element="hoa"][data-cs-variant="lava"] {
94
- --cs-accent: #C43D1F; --cs-accent-strong: #7E1F0E; --cs-accent-bright: #F6AC85;
95
- --cs-accent-on: #1D0B05; --cs-accent-tint: #FAE5DC; --cs-accent-ink: #1D0B05;
96
- --cs-accent-glow: rgba(196, 61, 31, 0.55); --cs-accent-grad-a: #C43D1F; --cs-accent-grad-b: #E0632B;
97
- --cs-color-text-accent: #9B2D14; --cs-color-link: #9B2D14;
89
+ --cs-accent: #FCAF91;
90
+ --cs-accent-strong: #B47054;
91
+ --cs-accent-bright: #FED3C3;
92
+ --cs-accent-on: #381B10;
93
+ --cs-accent-tint: #FFF4F0;
94
+ --cs-accent-ink: #381B10;
95
+ --cs-accent-glow: rgba(252, 175, 145, 0.48);
96
+ --cs-accent-grad-a: #FCAF91;
97
+ --cs-accent-grad-b: #F4BA17;
98
+ --cs-color-text-accent: #B47054;
99
+ --cs-color-link: #B47054;
98
100
  }
99
101
  [data-cs-element="hoa"][data-cs-variant="plasma"] {
100
- --cs-accent: #E8506E; --cs-accent-strong: #B02348; --cs-accent-bright: #F7A8B8;
101
- --cs-accent-on: #200812; --cs-accent-tint: #FBE6EB; --cs-accent-ink: #200812;
102
- --cs-accent-glow: rgba(232, 80, 110, 0.5); --cs-accent-grad-a: #E8506E; --cs-accent-grad-b: #F08A52;
103
- --cs-color-text-accent: #B02348; --cs-color-link: #B02348;
102
+ --cs-accent: #FFE1D8;
103
+ --cs-accent-strong: #967C75;
104
+ --cs-accent-bright: #FCE6DF;
105
+ --cs-accent-on: #2C211E;
106
+ --cs-accent-tint: #FEF4F2;
107
+ --cs-accent-ink: #2C211E;
108
+ --cs-accent-glow: rgba(255, 225, 216, 0.48);
109
+ --cs-accent-grad-a: #FFE1D8;
110
+ --cs-accent-grad-b: #F4BA17;
111
+ --cs-color-text-accent: #967C75;
112
+ --cs-color-link: #967C75;
113
+ }
114
+ [data-cs-element="hoa"][data-cs-variant="lava"] {
115
+ --cs-accent: #622B06;
116
+ --cs-accent-strong: #280D00;
117
+ --cs-accent-bright: #F1BEA4;
118
+ --cs-accent-on: #361D0F;
119
+ --cs-accent-tint: #FFF4EF;
120
+ --cs-accent-ink: #361D0F;
121
+ --cs-accent-glow: rgba(98, 43, 6, 0.48);
122
+ --cs-accent-grad-a: #622B06;
123
+ --cs-accent-grad-b: #F4BA17;
124
+ --cs-color-text-accent: #280D00;
125
+ --cs-color-link: #280D00;
104
126
  }
105
127
 
106
- /* ---- Thủy · Water — flow. Variants: river (default) · ocean · mist ---- */
128
+ /* ---- Thủy · Water — soft / middle / deep ---- */
107
129
  [data-cs-element="thuy"] {
108
- --cs-accent: #4E8E9B; --cs-accent-strong: #2F5E6B; --cs-accent-bright: #A6D0DA;
109
- --cs-accent-on: #0E1D20; --cs-accent-tint: #E6F1F2; --cs-accent-ink: #0E1D20;
110
- --cs-accent-glow: rgba(78, 142, 155, 0.5); --cs-accent-grad-a: #4E8E9B; --cs-accent-grad-b: #7A9B57;
111
- --cs-color-text-accent: #2F5E6B; --cs-color-link: #2F5E6B;
112
- }
113
- [data-cs-element="thuy"][data-cs-variant="ocean"] {
114
- --cs-accent: #2E5E7E; --cs-accent-strong: #1C3E56; --cs-accent-bright: #A9CCE0;
115
- --cs-accent-on: #0B161E; --cs-accent-tint: #E4EEF4; --cs-accent-ink: #0B161E;
116
- --cs-accent-glow: rgba(46, 94, 126, 0.55); --cs-accent-grad-a: #2E5E7E; --cs-accent-grad-b: #4E8E9B;
117
- --cs-color-text-accent: #1C3E56; --cs-color-link: #1C3E56;
130
+ --cs-accent: #2EDBF7;
131
+ --cs-accent-strong: #108EA0;
132
+ --cs-accent-bright: #99EEFF;
133
+ --cs-accent-on: #012A30;
134
+ --cs-accent-tint: #E7FBFF;
135
+ --cs-accent-ink: #012A30;
136
+ --cs-accent-glow: rgba(46, 219, 247, 0.48);
137
+ --cs-accent-grad-a: #2EDBF7;
138
+ --cs-accent-grad-b: #A3D768;
139
+ --cs-color-text-accent: #108EA0;
140
+ --cs-color-link: #108EA0;
118
141
  }
119
142
  [data-cs-element="thuy"][data-cs-variant="mist"] {
120
- --cs-accent: #A7C4C9; --cs-accent-strong: #5E7F85; --cs-accent-bright: #C4DADD;
121
- --cs-accent-on: #16262A; --cs-accent-tint: #F0F6F7; --cs-accent-ink: #16262A;
122
- --cs-accent-glow: rgba(167, 196, 201, 0.55); --cs-accent-grad-a: #A7C4C9; --cs-accent-grad-b: #4E8E9B;
123
- --cs-color-text-accent: #4A686E; --cs-color-link: #4A686E;
143
+ --cs-accent: #C0F5FC;
144
+ --cs-accent-strong: #5A8A90;
145
+ --cs-accent-bright: #CDF4F9;
146
+ --cs-accent-on: #13282B;
147
+ --cs-accent-tint: #EBFAFC;
148
+ --cs-accent-ink: #13282B;
149
+ --cs-accent-glow: rgba(192, 245, 252, 0.48);
150
+ --cs-accent-grad-a: #C0F5FC;
151
+ --cs-accent-grad-b: #A3D768;
152
+ --cs-color-text-accent: #5A8A90;
153
+ --cs-color-link: #5A8A90;
154
+ }
155
+ [data-cs-element="thuy"][data-cs-variant="ocean"] {
156
+ --cs-accent: #004554;
157
+ --cs-accent-strong: #011A21;
158
+ --cs-accent-bright: #A8D3E0;
159
+ --cs-accent-on: #10282F;
160
+ --cs-accent-tint: #EAFAFF;
161
+ --cs-accent-ink: #10282F;
162
+ --cs-accent-glow: rgba(0, 69, 84, 0.48);
163
+ --cs-accent-grad-a: #004554;
164
+ --cs-accent-grad-b: #A3D768;
165
+ --cs-color-text-accent: #011A21;
166
+ --cs-color-link: #011A21;
124
167
  }
125
168
 
126
- /* ---- Mộc · Wood — growth. Variants: leaf (default) · bamboo · forest ---- */
169
+ /* ---- Mộc · Wood — soft / middle / deep ---- */
127
170
  [data-cs-element="moc"] {
128
- --cs-accent: #7A9B57; --cs-accent-strong: #4C6B35; --cs-accent-bright: #A9C177;
129
- --cs-accent-on: #18200F; --cs-accent-tint: #EEF3E2; --cs-accent-ink: #18200F;
130
- --cs-accent-glow: rgba(122, 155, 87, 0.5); --cs-accent-grad-a: #7A9B57; --cs-accent-grad-b: #E0632B;
131
- --cs-color-text-accent: #4C6B35; --cs-color-link: #4C6B35;
171
+ --cs-accent: #A3D768;
172
+ --cs-accent-strong: #629122;
173
+ --cs-accent-bright: #C5ED9C;
174
+ --cs-accent-on: #182A00;
175
+ --cs-accent-tint: #EFFCE3;
176
+ --cs-accent-ink: #182A00;
177
+ --cs-accent-glow: rgba(163, 215, 104, 0.48);
178
+ --cs-accent-grad-a: #A3D768;
179
+ --cs-accent-grad-b: #FCAF91;
180
+ --cs-color-text-accent: #629122;
181
+ --cs-color-link: #629122;
132
182
  }
133
183
  [data-cs-element="moc"][data-cs-variant="bamboo"] {
134
- --cs-accent: #A9C177; --cs-accent-strong: #6B8442; --cs-accent-bright: #C4D69B;
135
- --cs-accent-on: #1C240F; --cs-accent-tint: #F3F7E8; --cs-accent-ink: #1C240F;
136
- --cs-accent-glow: rgba(169, 193, 119, 0.55); --cs-accent-grad-a: #A9C177; --cs-accent-grad-b: #7A9B57;
137
- --cs-color-text-accent: #5B7237; --cs-color-link: #5B7237;
184
+ --cs-accent: #E1F1C8;
185
+ --cs-accent-strong: #7C8965;
186
+ --cs-accent-bright: #E5F1D2;
187
+ --cs-accent-on: #212617;
188
+ --cs-accent-tint: #F4F9ED;
189
+ --cs-accent-ink: #212617;
190
+ --cs-accent-glow: rgba(225, 241, 200, 0.48);
191
+ --cs-accent-grad-a: #E1F1C8;
192
+ --cs-accent-grad-b: #FCAF91;
193
+ --cs-color-text-accent: #7C8965;
194
+ --cs-color-link: #7C8965;
138
195
  }
139
196
  [data-cs-element="moc"][data-cs-variant="forest"] {
140
- --cs-accent: #3E5A2E; --cs-accent-strong: #263A1B; --cs-accent-bright: #B3CE9B;
141
- --cs-accent-on: #101708; --cs-accent-tint: #E9EFE1; --cs-accent-ink: #101708;
142
- --cs-accent-glow: rgba(62, 90, 46, 0.55); --cs-accent-grad-a: #3E5A2E; --cs-accent-grad-b: #7A9B57;
143
- --cs-color-text-accent: #31481F; --cs-color-link: #31481F;
197
+ --cs-accent: #1A4A01;
198
+ --cs-accent-strong: #051D00;
199
+ --cs-accent-bright: #B0D8A3;
200
+ --cs-accent-on: #162A0E;
201
+ --cs-accent-tint: #ECFDE7;
202
+ --cs-accent-ink: #162A0E;
203
+ --cs-accent-glow: rgba(26, 74, 1, 0.48);
204
+ --cs-accent-grad-a: #1A4A01;
205
+ --cs-accent-grad-b: #FCAF91;
206
+ --cs-color-text-accent: #051D00;
207
+ --cs-color-link: #051D00;
144
208
  }
145
209
 
146
- /* ---- Kim · Metal — precision. Variants: champagne (default) · steel · titanium ---- */
210
+ /* ---- Kim · Metal — soft / middle / deep ---- */
147
211
  [data-cs-element="kim"] {
148
- --cs-accent: #BFB29B; --cs-accent-strong: #7E7160; --cs-accent-bright: #D8CCB6;
149
- --cs-accent-on: #221C12; --cs-accent-tint: #F3EFE6; --cs-accent-ink: #221C12;
150
- --cs-accent-glow: rgba(191, 178, 155, 0.5); --cs-accent-grad-a: #BFB29B; --cs-accent-grad-b: #4E8E9B;
151
- --cs-color-text-accent: #6E6151; --cs-color-link: #6E6151;
152
- }
153
- [data-cs-element="kim"][data-cs-variant="steel"] {
154
- --cs-accent: #9FA3A3; --cs-accent-strong: #63696B; --cs-accent-bright: #C2C6C6;
155
- --cs-accent-on: #191D1E; --cs-accent-tint: #EFF1F1; --cs-accent-ink: #191D1E;
156
- --cs-accent-glow: rgba(159, 163, 163, 0.5); --cs-accent-grad-a: #9FA3A3; --cs-accent-grad-b: #BFB29B;
157
- --cs-color-text-accent: #565C5E; --cs-color-link: #565C5E;
212
+ --cs-accent: #F3B958;
213
+ --cs-accent-strong: #AC780B;
214
+ --cs-accent-bright: #FDD89F;
215
+ --cs-accent-on: #312002;
216
+ --cs-accent-tint: #FFF5E7;
217
+ --cs-accent-ink: #312002;
218
+ --cs-accent-glow: rgba(243, 185, 88, 0.48);
219
+ --cs-accent-grad-a: #F3B958;
220
+ --cs-accent-grad-b: #2EDBF7;
221
+ --cs-color-text-accent: #AC780B;
222
+ --cs-color-link: #AC780B;
158
223
  }
159
224
  [data-cs-element="kim"][data-cs-variant="titanium"] {
160
- --cs-accent: #8A7F72; --cs-accent-strong: #56504A; --cs-accent-bright: #D9CFC0;
161
- --cs-accent-on: #171310; --cs-accent-tint: #EFEBE5; --cs-accent-ink: #171310;
162
- --cs-accent-glow: rgba(138, 127, 114, 0.5); --cs-accent-grad-a: #8A7F72; --cs-accent-grad-b: #BFB29B;
163
- --cs-color-text-accent: #56504A; --cs-color-link: #56504A;
225
+ --cs-accent: #FEE5C7;
226
+ --cs-accent-strong: #947F65;
227
+ --cs-accent-bright: #FBE8D2;
228
+ --cs-accent-on: #2B2217;
229
+ --cs-accent-tint: #FDF5ED;
230
+ --cs-accent-ink: #2B2217;
231
+ --cs-accent-glow: rgba(254, 229, 199, 0.48);
232
+ --cs-accent-grad-a: #FEE5C7;
233
+ --cs-accent-grad-b: #2EDBF7;
234
+ --cs-color-text-accent: #947F65;
235
+ --cs-color-link: #947F65;
236
+ }
237
+ [data-cs-element="kim"][data-cs-variant="steel"] {
238
+ --cs-accent: #503901;
239
+ --cs-accent-strong: #1F1400;
240
+ --cs-accent-bright: #DCC8A2;
241
+ --cs-accent-on: #2D220E;
242
+ --cs-accent-tint: #FEF6E7;
243
+ --cs-accent-ink: #2D220E;
244
+ --cs-accent-glow: rgba(80, 57, 1, 0.48);
245
+ --cs-accent-grad-a: #503901;
246
+ --cs-accent-grad-b: #2EDBF7;
247
+ --cs-color-text-accent: #1F1400;
248
+ --cs-color-link: #1F1400;
164
249
  }
165
250
 
166
- /* ---- Dark theme inside an element scope: the element takes the CTA role
167
- * (exactly as Ochre does in core dark). Thổ resolves to today's values. ---- */
251
+ /* ---- Dark theme CTA remaps inside element scopes ---- */
168
252
  [data-theme="dark"] [data-cs-element], [data-cs-element][data-theme="dark"] {
169
253
  --cs-component-button-primary-bg: var(--cs-accent-strong);
170
254
  --cs-component-button-primary-fg: var(--cs-accent-on);
@@ -173,128 +257,131 @@
173
257
  --cs-color-link-hover: var(--cs-color-text-primary);
174
258
  }
175
259
 
176
- /* ---- Aurora washes (class-based: relative url() must live in a normal
177
- * declaration so it resolves against THIS stylesheet, not the page). Overlay
178
- * usage: <div class="cs-aurora-wash" style="position:absolute;inset:0;opacity:0.55"></div> ---- */
260
+ /* ---- Aurora washes ---- */
179
261
  .cs-aurora-wash { background-image: url("../assets/aurora-gold.jpg"); background-size: cover; background-position: center; }
180
262
  [data-cs-element="hoa"] .cs-aurora-wash { background-image: url("../assets/aurora-hoa.png"); }
181
263
  [data-cs-element="thuy"] .cs-aurora-wash { background-image: url("../assets/aurora-thuy.png"); }
182
264
  [data-cs-element="moc"] .cs-aurora-wash { background-image: url("../assets/aurora-moc.png"); }
183
265
  [data-cs-element="kim"] .cs-aurora-wash { background-image: url("../assets/aurora-kim.png"); }
184
266
 
185
-
186
- /* ---- APCA-derived DARK elemental packs (v4.0.0, owner-approved Jul 2026) ----
187
- * Generated by the algorithm in _audit/apca-dark-preview.html (SAPC-4g, oklch lightness-solve):
188
- * bright ≥ Lc 75 on dark panel · accent ≥ 60 · button ink ≥ 75 on strong (mid-tones re-solved) ·
189
- * ink ≥ 75 on dark-native tint. The preview page doubles as the regression gate (currentFail must be 0).
190
- * Note (v5.0.0 contrast triage): accent-ink has zero foreground consumers in the codebase — every real
191
- * consumer is a `background:var(--cs-accent-ink);color:#fff` banner/CTA-strip, which this override broke
192
- * (ink flips light here, for a theoretical ink-on-tint text role). Fixed by repointing every banner consumer
193
- * to `--cs-accent-strong` instead (already APCA-solved as a dark, white-text-safe fill) rather than touching
194
- * this gate-checked pack. Themeable filled CTAs follow the same rule: `background:var(--cs-accent-strong);
195
- * color:var(--cs-accent-on)` — never bright+on in dark (cream-on-bright fails WCAG). ---- */
267
+ /* ---- APCA-derived DARK elemental packs (generated; hue-locked to light) ---- */
268
+ [data-theme="dark"][data-cs-element="tho"][data-cs-variant="sand"] {
269
+ --cs-accent: #F8E9C0;
270
+ --cs-accent-bright: #F6EBCC;
271
+ --cs-accent-strong: #665A37;
272
+ --cs-accent-on: #f5ead9;
273
+ --cs-accent-tint: #332701;
274
+ --cs-accent-ink: #F6EBCC;
275
+ }
196
276
  [data-theme="dark"][data-cs-element="tho"] {
277
+ --cs-accent: #F4BA17;
197
278
  --cs-accent-bright: #FEC42C;
198
- --cs-accent-strong: #795507;
279
+ --cs-accent-strong: #73560B;
199
280
  --cs-accent-on: #f5ead9;
200
- --cs-accent-tint: #2F2203;
201
- --cs-accent-ink: #FEC849;
281
+ --cs-accent-tint: #352602;
282
+ --cs-accent-ink: #FECD5E;
202
283
  }
203
284
  [data-theme="dark"][data-cs-element="tho"][data-cs-variant="clay"] {
204
- --cs-accent: #F3A372;
205
- --cs-accent-bright: #F4C5A3;
206
- --cs-accent-strong: #864927;
285
+ --cs-accent: #CDB07E;
286
+ --cs-accent-bright: #E4CDA8;
287
+ --cs-accent-strong: #1F1300;
207
288
  --cs-accent-on: #f5ead9;
208
- --cs-accent-tint: #371C0B;
209
- --cs-accent-ink: #F7C8A6;
289
+ --cs-accent-tint: #372502;
290
+ --cs-accent-ink: #E7D0AB;
210
291
  }
211
- [data-theme="dark"][data-cs-element="tho"][data-cs-variant="sand"] {
212
- --cs-accent-strong: #725615;
292
+ [data-theme="dark"][data-cs-element="hoa"][data-cs-variant="plasma"] {
293
+ --cs-accent: #FFE1D8;
294
+ --cs-accent-bright: #FCE6DF;
295
+ --cs-accent-strong: #6F5750;
213
296
  --cs-accent-on: #f5ead9;
214
- --cs-accent-tint: #2F2203;
215
- --cs-accent-ink: #EFDCB2;
297
+ --cs-accent-tint: #38231C;
298
+ --cs-accent-ink: #FCE6DF;
216
299
  }
217
300
  [data-theme="dark"][data-cs-element="hoa"] {
218
- --cs-accent: #FB9E7A;
219
- --cs-accent-bright: #FEC099;
220
- --cs-accent-strong: #9F3405;
301
+ --cs-accent: #FCAF91;
302
+ --cs-accent-bright: #FED3C3;
303
+ --cs-accent-strong: #8A4A30;
221
304
  --cs-accent-on: #f5ead9;
222
- --cs-accent-tint: #381B10;
223
- --cs-accent-ink: #FEC5A1;
305
+ --cs-accent-tint: #411E0F;
306
+ --cs-accent-ink: #FED3C3;
224
307
  }
225
308
  [data-theme="dark"][data-cs-element="hoa"][data-cs-variant="lava"] {
226
- --cs-accent: #FE9982;
227
- --cs-accent-bright: #FFBF9E;
309
+ --cs-accent: #E8A683;
310
+ --cs-accent-bright: #F8C4AA;
311
+ --cs-accent-strong: #280D00;
228
312
  --cs-accent-on: #f5ead9;
229
- --cs-accent-tint: #391A13;
230
- --cs-accent-ink: #FFC4A5;
313
+ --cs-accent-tint: #401F0B;
314
+ --cs-accent-ink: #FBC7AD;
231
315
  }
232
- [data-theme="dark"][data-cs-element="hoa"][data-cs-variant="plasma"] {
233
- --cs-accent: #FD97A3;
234
- --cs-accent-bright: #FDBECA;
235
- --cs-accent-strong: #A91A43;
316
+ [data-theme="dark"][data-cs-element="thuy"][data-cs-variant="mist"] {
317
+ --cs-accent: #C0F5FC;
318
+ --cs-accent-bright: #CDF4F9;
319
+ --cs-accent-strong: #316167;
236
320
  --cs-accent-on: #f5ead9;
237
- --cs-accent-tint: #38191D;
238
- --cs-accent-ink: #FDC3CE;
321
+ --cs-accent-tint: #022F34;
322
+ --cs-accent-ink: #CDF4F9;
239
323
  }
240
324
  [data-theme="dark"][data-cs-element="thuy"] {
241
- --cs-accent: #7FC0CE;
242
- --cs-accent-bright: #ACD7E1;
325
+ --cs-accent: #2EDBF7;
326
+ --cs-accent-bright: #99EEFF;
327
+ --cs-accent-strong: #046270;
243
328
  --cs-accent-on: #f5ead9;
244
- --cs-accent-tint: #042930;
245
- --cs-accent-ink: #AFDAE4;
329
+ --cs-accent-tint: #032F36;
330
+ --cs-accent-ink: #99EEFF;
246
331
  }
247
332
  [data-theme="dark"][data-cs-element="thuy"][data-cs-variant="ocean"] {
248
- --cs-accent: #87B9DD;
249
- --cs-accent-bright: #B2D6EA;
333
+ --cs-accent: #82BCCD;
334
+ --cs-accent-bright: #ABD6E3;
335
+ --cs-accent-strong: #011A21;
250
336
  --cs-accent-on: #f5ead9;
251
- --cs-accent-tint: #08273A;
252
- --cs-accent-ink: #B2D6EA;
337
+ --cs-accent-tint: #002F3A;
338
+ --cs-accent-ink: #AED9E6;
253
339
  }
254
- [data-theme="dark"][data-cs-element="thuy"][data-cs-variant="mist"] {
255
- --cs-accent-strong: #3F5F65;
340
+ [data-theme="dark"][data-cs-element="moc"][data-cs-variant="bamboo"] {
341
+ --cs-accent: #E1F1C8;
342
+ --cs-accent-bright: #E5F1D2;
343
+ --cs-accent-strong: #54603E;
256
344
  --cs-accent-on: #f5ead9;
257
- --cs-accent-tint: #0F282C;
258
- --cs-accent-ink: #C4DADD;
345
+ --cs-accent-tint: #232D0B;
346
+ --cs-accent-ink: #E5F1D2;
259
347
  }
260
348
  [data-theme="dark"][data-cs-element="moc"] {
261
- --cs-accent: #9BBE78;
262
- --cs-accent-bright: #BFD88D;
263
- --cs-accent-strong: #44622D;
349
+ --cs-accent: #A3D768;
350
+ --cs-accent-bright: #C5ED9C;
351
+ --cs-accent-strong: #416501;
264
352
  --cs-accent-on: #f5ead9;
265
- --cs-accent-tint: #1C290D;
266
- --cs-accent-ink: #C2DB90;
353
+ --cs-accent-tint: #1F2E0B;
354
+ --cs-accent-ink: #C5ED9C;
267
355
  }
268
- [data-theme="dark"][data-cs-element="moc"][data-cs-variant="bamboo"] {
269
- --cs-accent-strong: #4C6421;
356
+ [data-theme="dark"][data-cs-element="moc"][data-cs-variant="forest"] {
357
+ --cs-accent: #8EC27D;
358
+ --cs-accent-bright: #B0D8A3;
359
+ --cs-accent-strong: #061D00;
270
360
  --cs-accent-on: #f5ead9;
271
- --cs-accent-tint: #1F280A;
272
- --cs-accent-ink: #C7D99E;
361
+ --cs-accent-tint: #193011;
362
+ --cs-accent-ink: #B6DFA9;
273
363
  }
274
- [data-theme="dark"][data-cs-element="moc"][data-cs-variant="forest"] {
275
- --cs-accent: #9EBE8D;
276
- --cs-accent-bright: #BDD8A4;
364
+ [data-theme="dark"][data-cs-element="kim"][data-cs-variant="titanium"] {
365
+ --cs-accent: #FEE5C7;
366
+ --cs-accent-bright: #FBE8D2;
367
+ --cs-accent-strong: #6B573E;
277
368
  --cs-accent-on: #f5ead9;
278
- --cs-accent-tint: #19290F;
279
- --cs-accent-ink: #C0DBA7;
369
+ --cs-accent-tint: #37250B;
370
+ --cs-accent-ink: #FBE8D2;
280
371
  }
281
372
  [data-theme="dark"][data-cs-element="kim"] {
282
- --cs-accent-strong: #675A4A;
373
+ --cs-accent: #F3B958;
374
+ --cs-accent-bright: #FDD89F;
375
+ --cs-accent-strong: #795303;
283
376
  --cs-accent-on: #f5ead9;
284
- --cs-accent-tint: #2D220F;
285
- --cs-accent-ink: #DBCFB9;
377
+ --cs-accent-tint: #382503;
378
+ --cs-accent-ink: #FDD89F;
286
379
  }
287
380
  [data-theme="dark"][data-cs-element="kim"][data-cs-variant="steel"] {
288
- --cs-accent: #B2B6B6;
289
- --cs-accent-bright: #CCD0D0;
290
- --cs-accent-strong: #555B5D;
291
- --cs-accent-on: #f5ead9;
292
- --cs-accent-tint: #222525;
293
- --cs-accent-ink: #CFD3D3;
294
- }
295
- [data-theme="dark"][data-cs-element="kim"][data-cs-variant="titanium"] {
296
- --cs-accent: #BFB3A5;
381
+ --cs-accent: #CCB17E;
382
+ --cs-accent-bright: #DFCBA5;
383
+ --cs-accent-strong: #1F1400;
297
384
  --cs-accent-on: #f5ead9;
298
- --cs-accent-tint: #2B2217;
299
- --cs-accent-ink: #D9CFC0;
385
+ --cs-accent-tint: #362602;
386
+ --cs-accent-ink: #E6D1AB;
300
387
  }
package/tokens/fonts.css CHANGED
@@ -1,7 +1,8 @@
1
1
  /* CyberSkill — self-hosted webfonts.
2
- * Be Vietnam Pro (UI/display, 300-800 + italics) and JetBrains Mono (code/data,
3
- * 400/500/700) are self-hosted from fonts/ as subset-split woff2 (latin,
4
- * latin-ext, vietnamese). Vietnamese subset coverage is a brand anchor.
2
+ * Be Vietnam Pro (UI, 300-800 + italics), JetBrains Mono (code/data,
3
+ * 400/500/700), and Space Grotesk (display/headline, variable 300-700) are
4
+ * self-hosted from fonts/ as subset-split woff2 (latin, latin-ext,
5
+ * vietnamese). Vietnamese subset coverage is a brand anchor.
5
6
  * Files fetched from Google Fonts and committed locally; no CDN dependency. */
6
7
 
7
8
  /* Be Vietnam Pro */
@@ -49,3 +50,11 @@
49
50
  @font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/jetbrainsmono-700-vietnamese.woff2") format("woff2");unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
50
51
  @font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/jetbrainsmono-700-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
51
52
  @font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/jetbrainsmono-700-latin.woff2") format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
53
+
54
+ /* Space Grotesk — display / headline face (--cs-font-family-display).
55
+ * One variable file per subset covers the whole 300-700 axis; the family has no
56
+ * 800, so --cs-heading-weight-strong (800) under .cs-display-face clamps to 700
57
+ * within Space Grotesk (see guidelines/type-families.html). */
58
+ @font-face{font-family:'Space Grotesk';font-style:normal;font-weight:300 700;font-display:swap;src:url("../fonts/spacegrotesk-var-vietnamese.woff2") format("woff2");unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
59
+ @font-face{font-family:'Space Grotesk';font-style:normal;font-weight:300 700;font-display:swap;src:url("../fonts/spacegrotesk-var-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
60
+ @font-face{font-family:'Space Grotesk';font-style:normal;font-weight:300 700;font-display:swap;src:url("../fonts/spacegrotesk-var-latin.woff2") format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}