@beehexa/design-rules 0.0.0-stage → 2611.3.2

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 (290) hide show
  1. package/README.md +56 -2
  2. package/dist/AGENTS.md +24 -0
  3. package/dist/catalog.json +1814 -0
  4. package/dist/docs/public/_redirects +7 -0
  5. package/dist/docs/public/apple-touch-icon.png +0 -0
  6. package/dist/docs/public/brand/logos/app/apple-touch-icon.png +0 -0
  7. package/dist/docs/public/brand/logos/app/avatar-800.png +0 -0
  8. package/dist/docs/public/brand/logos/app/icon-192.png +0 -0
  9. package/dist/docs/public/brand/logos/app/icon-512.png +0 -0
  10. package/dist/docs/public/brand/logos/app/icon-maskable-512.png +0 -0
  11. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-1-light.svg +1 -0
  12. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-2-dark.svg +1 -0
  13. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-3-white.svg +1 -0
  14. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-4-graphite.svg +1 -0
  15. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-1-light.svg +1 -0
  16. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-2-dark.svg +1 -0
  17. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-3-white.svg +1 -0
  18. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-4-graphite.svg +1 -0
  19. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-dark.svg +1 -0
  20. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-light.svg +1 -0
  21. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-dark.svg +1 -0
  22. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-light.svg +1 -0
  23. package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-dark.svg +1 -0
  24. package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-light.svg +1 -0
  25. package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-dark@3x.png +0 -0
  26. package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-light@3x.png +0 -0
  27. package/dist/docs/public/brand/logos/beehexa-logo.zip +0 -0
  28. package/dist/docs/public/brand/logos/fig/anatomy-en.png +0 -0
  29. package/dist/docs/public/brand/logos/fig/anatomy-vi.png +0 -0
  30. package/dist/docs/public/brand/logos/fig/beehexa-dark-12.png +0 -0
  31. package/dist/docs/public/brand/logos/fig/beehexa-dark-14.png +0 -0
  32. package/dist/docs/public/brand/logos/fig/beehexa-dark-28.png +0 -0
  33. package/dist/docs/public/brand/logos/fig/beehexa-dark-32.png +0 -0
  34. package/dist/docs/public/brand/logos/fig/beehexa-dark-56.png +0 -0
  35. package/dist/docs/public/brand/logos/fig/beehexa-graphite-28.png +0 -0
  36. package/dist/docs/public/brand/logos/fig/beehexa-graphite-32.png +0 -0
  37. package/dist/docs/public/brand/logos/fig/beehexa-light-14.png +0 -0
  38. package/dist/docs/public/brand/logos/fig/beehexa-light-21.png +0 -0
  39. package/dist/docs/public/brand/logos/fig/beehexa-light-22.png +0 -0
  40. package/dist/docs/public/brand/logos/fig/beehexa-light-24.png +0 -0
  41. package/dist/docs/public/brand/logos/fig/beehexa-light-28.png +0 -0
  42. package/dist/docs/public/brand/logos/fig/beehexa-light-32.png +0 -0
  43. package/dist/docs/public/brand/logos/fig/beehexa-light-36-7c3aed7c3aed.png +0 -0
  44. package/dist/docs/public/brand/logos/fig/beehexa-light-36-swap.png +0 -0
  45. package/dist/docs/public/brand/logos/fig/beehexa-light-36.png +0 -0
  46. package/dist/docs/public/brand/logos/fig/beehexa-light-56.png +0 -0
  47. package/dist/docs/public/brand/logos/fig/beehexa-white-20.png +0 -0
  48. package/dist/docs/public/brand/logos/fig/beehexa-white-32.png +0 -0
  49. package/dist/docs/public/brand/logos/fig/clearspace.png +0 -0
  50. package/dist/docs/public/brand/logos/fig/construction-en.png +0 -0
  51. package/dist/docs/public/brand/logos/fig/construction-vi.png +0 -0
  52. package/dist/docs/public/brand/logos/fig/container-en.png +0 -0
  53. package/dist/docs/public/brand/logos/fig/container-vi.png +0 -0
  54. package/dist/docs/public/brand/logos/fig/hexasync-dark-20.png +0 -0
  55. package/dist/docs/public/brand/logos/fig/hexasync-dark-28.png +0 -0
  56. package/dist/docs/public/brand/logos/fig/hexasync-dark-48.png +0 -0
  57. package/dist/docs/public/brand/logos/fig/hexasync-light-19.png +0 -0
  58. package/dist/docs/public/brand/logos/fig/hexasync-light-28.png +0 -0
  59. package/dist/docs/public/brand/logos/fig/hexasync-light-48.png +0 -0
  60. package/dist/docs/public/brand/logos/fig/icon-graphite-14.png +0 -0
  61. package/dist/docs/public/brand/logos/fig/icon-graphite-16.png +0 -0
  62. package/dist/docs/public/brand/logos/fig/icon-light-16.png +0 -0
  63. package/dist/docs/public/brand/logos/fig/icon-light-24.png +0 -0
  64. package/dist/docs/public/brand/logos/fig/icon-light-48.png +0 -0
  65. package/dist/docs/public/brand/logos/fig/icon-light-92.png +0 -0
  66. package/dist/docs/public/brand/logos/fig/meaning-bee-en.png +0 -0
  67. package/dist/docs/public/brand/logos/fig/meaning-bee-vi.png +0 -0
  68. package/dist/docs/public/brand/logos/fig/meaning-outline-en.png +0 -0
  69. package/dist/docs/public/brand/logos/fig/meaning-outline-vi.png +0 -0
  70. package/dist/docs/public/brand/logos/fig/meaning-stack-en.png +0 -0
  71. package/dist/docs/public/brand/logos/fig/meaning-stack-vi.png +0 -0
  72. package/dist/docs/public/brand/logos/fig/misuse-serif.png +0 -0
  73. package/dist/docs/public/brand/logos/icon/beehexa-icon-graphite.svg +1 -0
  74. package/dist/docs/public/brand/logos/icon/beehexa-icon-white.svg +1 -0
  75. package/dist/docs/public/brand/logos/icon/beehexa-icon-yellow.svg +1 -0
  76. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-1-light.svg +1 -0
  77. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-2-dark.svg +1 -0
  78. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-3-white.svg +1 -0
  79. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-4-graphite.svg +1 -0
  80. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-1-light.svg +1 -0
  81. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-2-dark.svg +1 -0
  82. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-3-white.svg +1 -0
  83. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-4-graphite.svg +1 -0
  84. package/dist/docs/public/brand/logos/ui/beehexa-dark.svg +1 -0
  85. package/dist/docs/public/brand/logos/ui/beehexa-design-dark.svg +1 -0
  86. package/dist/docs/public/brand/logos/ui/beehexa-design-light.svg +1 -0
  87. package/dist/docs/public/brand/logos/ui/beehexa-icon-yellow.svg +1 -0
  88. package/dist/docs/public/brand/logos/ui/beehexa-light.svg +1 -0
  89. package/dist/docs/public/brand/logos/ui/hexasync-dark.svg +1 -0
  90. package/dist/docs/public/brand/logos/ui/hexasync-light.svg +1 -0
  91. package/dist/docs/public/brand/logos/ui/png/beehexa-design-dark@3x.png +0 -0
  92. package/dist/docs/public/brand/logos/ui/png/beehexa-design-light@3x.png +0 -0
  93. package/dist/docs/public/favicon.ico +0 -0
  94. package/dist/docs/public/favicon.svg +1 -0
  95. package/dist/docs/public/fonts/LICENSE-Inter.txt +93 -0
  96. package/dist/docs/public/fonts/LICENSE-JetBrainsMono.txt +93 -0
  97. package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-italic.woff2 +0 -0
  98. package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-normal.woff2 +0 -0
  99. package/dist/docs/public/fonts/inter-latin-opsz-wght-italic.woff2 +0 -0
  100. package/dist/docs/public/fonts/inter-latin-opsz-wght-normal.woff2 +0 -0
  101. package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-italic.woff2 +0 -0
  102. package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-normal.woff2 +0 -0
  103. package/dist/docs/public/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  104. package/dist/docs/public/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  105. package/dist/docs/public/fonts/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
  106. package/dist/docs/public/icon-192.png +0 -0
  107. package/dist/docs/public/icon-512.png +0 -0
  108. package/dist/docs/public/icon-maskable-512.png +0 -0
  109. package/dist/docs/public/robots.txt +4 -0
  110. package/dist/docs/public/site.webmanifest +21 -0
  111. package/dist/docs/scripts/color-pairs.mjs +46 -0
  112. package/dist/docs/scripts/contrast-exceptions.mjs +6 -0
  113. package/dist/docs/scripts/token-utils.d.mts +26 -0
  114. package/dist/docs/scripts/token-utils.mjs +114 -0
  115. package/dist/docs/src/brand/Beehexa-brandguide-full-mar12.pdf +0 -0
  116. package/dist/docs/src/brand/color+typoDirections.pdf +0 -0
  117. package/dist/docs/src/brand/structure-proposal.md +227 -0
  118. package/dist/docs/src/components/ChildPages.astro +25 -0
  119. package/dist/docs/src/components/CodeExample.astro +18 -0
  120. package/dist/docs/src/components/ColorDemo.astro +794 -0
  121. package/dist/docs/src/components/ColorExample.astro +32 -0
  122. package/dist/docs/src/components/ColorSwatch.astro +20 -0
  123. package/dist/docs/src/components/ComponentTabs.astro +21 -0
  124. package/dist/docs/src/components/DocsFooter.astro +25 -0
  125. package/dist/docs/src/components/HelpOptions.astro +20 -0
  126. package/dist/docs/src/components/IconBrowser.astro +257 -0
  127. package/dist/docs/src/components/IconDemo.astro +185 -0
  128. package/dist/docs/src/components/InDevelopment.astro +29 -0
  129. package/dist/docs/src/components/LayoutDemo.astro +384 -0
  130. package/dist/docs/src/components/Logo.astro +25 -0
  131. package/dist/docs/src/components/PhaseTable.astro +22 -0
  132. package/dist/docs/src/components/RoleGuides.astro +48 -0
  133. package/dist/docs/src/components/ShapeDemo.astro +239 -0
  134. package/dist/docs/src/components/ShapePin.astro +22 -0
  135. package/dist/docs/src/components/Sidebar.astro +206 -0
  136. package/dist/docs/src/components/SiteHeader.astro +211 -0
  137. package/dist/docs/src/components/SpacingDemo.astro +172 -0
  138. package/dist/docs/src/components/StatusBadge.astro +22 -0
  139. package/dist/docs/src/components/SystemAreas.astro +29 -0
  140. package/dist/docs/src/components/TableOfContents.astro +47 -0
  141. package/dist/docs/src/components/TokenTable.astro +40 -0
  142. package/dist/docs/src/components/TypeDemo.astro +249 -0
  143. package/dist/docs/src/components/logos/Fig.astro +28 -0
  144. package/dist/docs/src/components/logos/LogoAnatomy.astro +101 -0
  145. package/dist/docs/src/components/logos/LogoClearSpace.astro +81 -0
  146. package/dist/docs/src/components/logos/LogoColourVersions.astro +45 -0
  147. package/dist/docs/src/components/logos/LogoConstruction.astro +84 -0
  148. package/dist/docs/src/components/logos/LogoContainer.astro +84 -0
  149. package/dist/docs/src/components/logos/LogoHero.astro +42 -0
  150. package/dist/docs/src/components/logos/LogoInUse.astro +197 -0
  151. package/dist/docs/src/components/logos/LogoMeanings.astro +75 -0
  152. package/dist/docs/src/components/logos/LogoMinSize.astro +55 -0
  153. package/dist/docs/src/components/logos/LogoMistakes.astro +109 -0
  154. package/dist/docs/src/components/logos/LogoMisuse.astro +96 -0
  155. package/dist/docs/src/components/logos/LogoPair.astro +26 -0
  156. package/dist/docs/src/components/logos/LogoSvg.astro +68 -0
  157. package/dist/docs/src/content/components/button/accessibility.mdx +18 -0
  158. package/dist/docs/src/content/components/button/changelog.mdx +6 -0
  159. package/dist/docs/src/content/components/button/code.mdx +27 -0
  160. package/dist/docs/src/content/components/button/examples.mdx +21 -0
  161. package/dist/docs/src/content/components/button/meta.json +5 -0
  162. package/dist/docs/src/content/components/button/usage.mdx +18 -0
  163. package/dist/docs/src/content/foundations/guidelines/accessibility.mdx +19 -0
  164. package/dist/docs/src/content/foundations/guidelines/content.mdx +25 -0
  165. package/dist/docs/src/content/foundations/index.mdx +9 -0
  166. package/dist/docs/src/content/foundations/styles/border.mdx +89 -0
  167. package/dist/docs/src/content/foundations/styles/color/accessibility.mdx +32 -0
  168. package/dist/docs/src/content/foundations/styles/color/dark-mode.mdx +22 -0
  169. package/dist/docs/src/content/foundations/styles/color/index.mdx +65 -0
  170. package/dist/docs/src/content/foundations/styles/color/palette.mdx +57 -0
  171. package/dist/docs/src/content/foundations/styles/color/tokens.mdx +55 -0
  172. package/dist/docs/src/content/foundations/styles/color/usage.mdx +111 -0
  173. package/dist/docs/src/content/foundations/styles/data-visualization.mdx +11 -0
  174. package/dist/docs/src/content/foundations/styles/elevation.mdx +12 -0
  175. package/dist/docs/src/content/foundations/styles/icons/accessibility.mdx +72 -0
  176. package/dist/docs/src/content/foundations/styles/icons/code.mdx +171 -0
  177. package/dist/docs/src/content/foundations/styles/icons/index.mdx +62 -0
  178. package/dist/docs/src/content/foundations/styles/icons/library.mdx +19 -0
  179. package/dist/docs/src/content/foundations/styles/icons/usage.mdx +100 -0
  180. package/dist/docs/src/content/foundations/styles/illustration.mdx +9 -0
  181. package/dist/docs/src/content/foundations/styles/interaction-states.mdx +49 -0
  182. package/dist/docs/src/content/foundations/styles/layout/app-frame.mdx +81 -0
  183. package/dist/docs/src/content/foundations/styles/layout/breakpoints.mdx +56 -0
  184. package/dist/docs/src/content/foundations/styles/layout/grid.mdx +87 -0
  185. package/dist/docs/src/content/foundations/styles/layout/index.mdx +24 -0
  186. package/dist/docs/src/content/foundations/styles/layout/overlays.mdx +45 -0
  187. package/dist/docs/src/content/foundations/styles/layout/page-widths.mdx +38 -0
  188. package/dist/docs/src/content/foundations/styles/logos/downloads-and-terms.mdx +65 -0
  189. package/dist/docs/src/content/foundations/styles/logos/index.mdx +64 -0
  190. package/dist/docs/src/content/foundations/styles/logos/placement-and-containers.mdx +96 -0
  191. package/dist/docs/src/content/foundations/styles/logos/product-logos.mdx +56 -0
  192. package/dist/docs/src/content/foundations/styles/logos/using-the-logo.mdx +70 -0
  193. package/dist/docs/src/content/foundations/styles/motion.mdx +11 -0
  194. package/dist/docs/src/content/foundations/styles/opacity.mdx +9 -0
  195. package/dist/docs/src/content/foundations/styles/radius.mdx +98 -0
  196. package/dist/docs/src/content/foundations/styles/size-and-density.mdx +41 -0
  197. package/dist/docs/src/content/foundations/styles/spacing.mdx +70 -0
  198. package/dist/docs/src/content/foundations/styles/typography/code.mdx +53 -0
  199. package/dist/docs/src/content/foundations/styles/typography/index.mdx +58 -0
  200. package/dist/docs/src/content/foundations/styles/typography/usage.mdx +144 -0
  201. package/dist/docs/src/content/foundations/styles/typography/vietnamese.mdx +46 -0
  202. package/dist/docs/src/content/foundations/styles/z-index.mdx +9 -0
  203. package/dist/docs/src/content/foundations/tokens/all-tokens.mdx +36 -0
  204. package/dist/docs/src/content/foundations/tokens/index.mdx +27 -0
  205. package/dist/docs/src/content/get-started/content.mdx +14 -0
  206. package/dist/docs/src/content/get-started/design.mdx +30 -0
  207. package/dist/docs/src/content/get-started/develop.mdx +59 -0
  208. package/dist/docs/src/content/get-started/get-help.mdx +19 -0
  209. package/dist/docs/src/content/get-started/index.mdx +50 -0
  210. package/dist/docs/src/content/news/2026-10-16-site-structure.md +15 -0
  211. package/dist/docs/src/content/news/2026-10-20-docs-site.md +13 -0
  212. package/dist/docs/src/content/release-phases/index.mdx +12 -0
  213. package/dist/docs/src/content/tools/ai-agents.mdx +49 -0
  214. package/dist/docs/src/content/tools/ant-design-vue-theme.mdx +138 -0
  215. package/dist/docs/src/content/tools/eslint.mdx +15 -0
  216. package/dist/docs/src/content/tools/index.mdx +7 -0
  217. package/dist/docs/src/content/tools/stylelint.mdx +19 -0
  218. package/dist/docs/src/content-vi/foundations/styles/border.mdx +89 -0
  219. package/dist/docs/src/content-vi/foundations/styles/color/accessibility.mdx +32 -0
  220. package/dist/docs/src/content-vi/foundations/styles/color/dark-mode.mdx +22 -0
  221. package/dist/docs/src/content-vi/foundations/styles/color/index.mdx +65 -0
  222. package/dist/docs/src/content-vi/foundations/styles/color/palette.mdx +57 -0
  223. package/dist/docs/src/content-vi/foundations/styles/color/tokens.mdx +55 -0
  224. package/dist/docs/src/content-vi/foundations/styles/color/usage.mdx +111 -0
  225. package/dist/docs/src/content-vi/foundations/styles/data-visualization.mdx +11 -0
  226. package/dist/docs/src/content-vi/foundations/styles/icons/accessibility.mdx +72 -0
  227. package/dist/docs/src/content-vi/foundations/styles/icons/code.mdx +170 -0
  228. package/dist/docs/src/content-vi/foundations/styles/icons/index.mdx +62 -0
  229. package/dist/docs/src/content-vi/foundations/styles/icons/library.mdx +19 -0
  230. package/dist/docs/src/content-vi/foundations/styles/icons/usage.mdx +100 -0
  231. package/dist/docs/src/content-vi/foundations/styles/illustration.mdx +9 -0
  232. package/dist/docs/src/content-vi/foundations/styles/interaction-states.mdx +49 -0
  233. package/dist/docs/src/content-vi/foundations/styles/layout/app-frame.mdx +77 -0
  234. package/dist/docs/src/content-vi/foundations/styles/layout/breakpoints.mdx +56 -0
  235. package/dist/docs/src/content-vi/foundations/styles/layout/grid.mdx +87 -0
  236. package/dist/docs/src/content-vi/foundations/styles/layout/index.mdx +24 -0
  237. package/dist/docs/src/content-vi/foundations/styles/layout/page-widths.mdx +34 -0
  238. package/dist/docs/src/content-vi/foundations/styles/logos/downloads-and-terms.mdx +65 -0
  239. package/dist/docs/src/content-vi/foundations/styles/logos/index.mdx +64 -0
  240. package/dist/docs/src/content-vi/foundations/styles/logos/placement-and-containers.mdx +96 -0
  241. package/dist/docs/src/content-vi/foundations/styles/logos/product-logos.mdx +56 -0
  242. package/dist/docs/src/content-vi/foundations/styles/logos/using-the-logo.mdx +70 -0
  243. package/dist/docs/src/content-vi/foundations/styles/opacity.mdx +9 -0
  244. package/dist/docs/src/content-vi/foundations/styles/radius.mdx +98 -0
  245. package/dist/docs/src/content-vi/foundations/styles/size-and-density.mdx +41 -0
  246. package/dist/docs/src/content-vi/foundations/styles/spacing.mdx +70 -0
  247. package/dist/docs/src/content-vi/foundations/styles/typography/code.mdx +53 -0
  248. package/dist/docs/src/content-vi/foundations/styles/typography/index.mdx +58 -0
  249. package/dist/docs/src/content-vi/foundations/styles/typography/usage.mdx +144 -0
  250. package/dist/docs/src/content-vi/foundations/styles/typography/vietnamese.mdx +46 -0
  251. package/dist/docs/src/content-vi/foundations/styles/z-index.mdx +9 -0
  252. package/dist/docs/src/content.config.ts +68 -0
  253. package/dist/docs/src/lib/brand.ts +57 -0
  254. package/dist/docs/src/lib/contrast.ts +34 -0
  255. package/dist/docs/src/lib/i18n.ts +152 -0
  256. package/dist/docs/src/lib/icons.ts +46 -0
  257. package/dist/docs/src/lib/logo-geometry.ts +30 -0
  258. package/dist/docs/src/lib/lucide-categories.json +1 -0
  259. package/dist/docs/src/lib/lucide-data.ts +40 -0
  260. package/dist/docs/src/lib/navigation.ts +222 -0
  261. package/dist/docs/src/lib/release-phases.ts +10 -0
  262. package/dist/docs/src/lib/routes.ts +40 -0
  263. package/dist/docs/src/lib/token-descriptions-vi.ts +40 -0
  264. package/dist/docs/src/lib/tokens.ts +67 -0
  265. package/dist/docs/src/lib/tri-grid.ts +28 -0
  266. package/dist/docs/src/styles/chrome.css +122 -0
  267. package/dist/docs/src/styles/color.css +270 -0
  268. package/dist/docs/src/styles/docs.css +323 -0
  269. package/dist/docs/src/styles/global.css +66 -0
  270. package/dist/docs/src/styles/icons.css +135 -0
  271. package/dist/docs/src/styles/layout.css +165 -0
  272. package/dist/docs/src/styles/logos.css +236 -0
  273. package/dist/docs/src/styles/shapes.css +139 -0
  274. package/dist/docs/src/styles/tokens.css +461 -0
  275. package/dist/docs/src/styles/tokens.js +425 -0
  276. package/dist/docs/src/styles/typography.css +91 -0
  277. package/dist/docs/tokens/border.json +26 -0
  278. package/dist/docs/tokens/breakpoints.json +8 -0
  279. package/dist/docs/tokens/color.json +1350 -0
  280. package/dist/docs/tokens/elevation.json +26 -0
  281. package/dist/docs/tokens/layout.json +29 -0
  282. package/dist/docs/tokens/motion.json +12 -0
  283. package/dist/docs/tokens/radius.json +44 -0
  284. package/dist/docs/tokens/size.json +13 -0
  285. package/dist/docs/tokens/spacing.json +18 -0
  286. package/dist/docs/tokens/states.json +12 -0
  287. package/dist/docs/tokens/typography.json +220 -0
  288. package/dist/index.d.ts +19 -0
  289. package/dist/index.js +1823 -0
  290. package/package.json +31 -4
@@ -0,0 +1,67 @@
1
+ import { flattenTokens, cssVarName, resolveValue } from '../../scripts/token-utils.mjs';
2
+
3
+ export interface Token {
4
+ name: string;
5
+ cssVar: string;
6
+ type: string;
7
+ value: string;
8
+ resolved: string;
9
+ /** Dark-theme value, when it differs from the light one. */
10
+ dark?: string;
11
+ darkResolved?: string;
12
+ /** Value for Vietnamese text (lang="vi"), when it differs. */
13
+ vi?: string;
14
+ viResolved?: string;
15
+ description: string;
16
+ }
17
+
18
+ const files = import.meta.glob<Record<string, unknown>>('/tokens/*.json', { eager: true, import: 'default' });
19
+
20
+ const raw = Object.values(files).flatMap((tree) => flattenTokens(tree));
21
+ const byName = new Map(raw.map((token) => [token.name, token]));
22
+
23
+ // A dark value can point at tokens that have dark values of their own (text.link → status.accent.fg).
24
+ function resolveDark(value: string, seen = new Set<string>()): string {
25
+ return value.replace(/\{([^}]+)\}/g, (_, ref) => {
26
+ if (seen.has(ref)) throw new Error(`Circular token reference: ${ref}`);
27
+ const target = byName.get(ref);
28
+ if (!target) throw new Error(`Unknown token reference: {${ref}}`);
29
+ return resolveDark(target.dark ?? target.value, new Set([...seen, ref]));
30
+ });
31
+ }
32
+
33
+ export const tokens: Token[] = raw.map((token) => {
34
+ const resolved = resolveValue(token.value, byName);
35
+ const darkResolved = resolveDark(token.dark ?? token.value);
36
+ return {
37
+ name: token.name,
38
+ cssVar: cssVarName(token.name),
39
+ type: token.type,
40
+ value: token.value,
41
+ resolved,
42
+ dark: token.dark,
43
+ darkResolved: darkResolved !== resolved ? darkResolved : undefined,
44
+ vi: token.vi,
45
+ viResolved: token.vi ? resolveValue(token.vi, byName) : undefined,
46
+ description: token.description,
47
+ };
48
+ });
49
+
50
+ /** Tokens whose name starts with `prefix`, e.g. `color` or `color.brand`. */
51
+ // Numbered steps sort by their number (space.025 before space.100), whatever order the JSON keys come in:
52
+ // JavaScript puts integer-like keys such as "100" ahead of "025". Other tokens keep their file order.
53
+ const stepOf = (name: string) => {
54
+ const last = name.split('.').pop() ?? '';
55
+ return /^\d+$/.test(last) ? Number(last) : null;
56
+ };
57
+ export function tokensByPrefix(prefix: string): Token[] {
58
+ return tokens
59
+ .filter((token) => token.name === prefix || token.name.startsWith(`${prefix}.`))
60
+ .sort((a, b) => {
61
+ const sa = stepOf(a.name);
62
+ const sb = stepOf(b.name);
63
+ const pa = a.name.slice(0, a.name.lastIndexOf('.'));
64
+ const pb = b.name.slice(0, b.name.lastIndexOf('.'));
65
+ return sa !== null && sb !== null && pa === pb ? sa - sb : 0;
66
+ });
67
+ }
@@ -0,0 +1,28 @@
1
+ // Lines of an equilateral triangle grid with vertical lines, cut to a rectangle (no clip path,
2
+ // so the figure screenshots stay reliable). The grid passes through (x0, y0); h is one band
3
+ // (the distance between vertical lines); one triangle side is h / cos 30°.
4
+ export function triGrid(x0: number, y0: number, h: number, box: { x1: number; y1: number; x2: number; y2: number }): string {
5
+ const a = h / Math.cos(Math.PI / 6);
6
+ const t = Math.tan(Math.PI / 6);
7
+ const out: string[] = [];
8
+ const eps = 1e-6;
9
+ for (let k = Math.ceil((box.x1 - x0) / h); x0 + k * h <= box.x2 + eps; k++) out.push(`M${x0 + k * h} ${box.y1}V${box.y2}`);
10
+ const cut = (slope: number, c: number) => {
11
+ // y = slope * x + c
12
+ const pts: [number, number][] = [];
13
+ for (const x of [box.x1, box.x2]) { const y = slope * x + c; if (y >= box.y1 - eps && y <= box.y2 + eps) pts.push([x, y]); }
14
+ for (const y of [box.y1, box.y2]) { const x = (y - c) / slope; if (x > box.x1 + eps && x < box.x2 - eps) pts.push([x, y]); }
15
+ if (pts.length < 2) return;
16
+ pts.sort((p, q) => p[0] - q[0]);
17
+ const [p, q] = [pts[0], pts[pts.length - 1]];
18
+ if (Math.hypot(q[0] - p[0], q[1] - p[1]) > h * 0.05) out.push(`M${p[0]} ${p[1]}L${q[0]} ${q[1]}`);
19
+ };
20
+ for (const slope of [t, -t]) {
21
+ // lines y = slope (x - x0) + y0 + n a
22
+ const c0 = y0 - slope * x0;
23
+ const cs = [box.x1, box.x2].flatMap((x) => [box.y1, box.y2].map((y) => y - slope * x - c0));
24
+ const nMin = Math.floor(Math.min(...cs) / a), nMax = Math.ceil(Math.max(...cs) / a);
25
+ for (let n = nMin; n <= nMax; n++) cut(slope, c0 + n * a);
26
+ }
27
+ return out.join('');
28
+ }
@@ -0,0 +1,122 @@
1
+ /* Site chrome: colour roles, header, search and the docs footer. */
2
+
3
+ :root {
4
+ /* Site roles, mapped to the design-system colour tokens (tokens/color.json). The tokens switch
5
+ between light and dark on their own. */
6
+ --c-bg: var(--bh-color-surface-page);
7
+ --c-ink: var(--bh-color-text);
8
+ --c-muted: var(--bh-color-text-subtle);
9
+ --c-line: var(--bh-color-border);
10
+ --c-surf: var(--bh-color-surface-subtle);
11
+ --c-gold: var(--bh-color-border-selected); /* indicators only, never text */
12
+ --c-link: var(--bh-color-link);
13
+ --c-hover: var(--bh-color-background-neutral-subtle-hover);
14
+ --c-selected: var(--bh-color-background-selected);
15
+ --c-selected-hover: var(--bh-color-background-selected-hover);
16
+ --c-code-bg: var(--bh-color-code-background);
17
+ --c-code-ink: var(--bh-color-code-text);
18
+ --c-note-line: var(--bh-color-border-brand-subtle);
19
+ --c-note-bg: var(--bh-color-background-brand-subtle);
20
+ --c-shadow: var(--bh-elevation-shadow-overlay);
21
+ /* App frame (Foundations › Layout › App frame). */
22
+ --header-h: calc(var(--bh-size-control-default) + 2 * var(--bh-space-100)); /* 48 px: a 32 px control, 8 px above and below */
23
+ /* The 1 px line under the header is not part of its 48 px; sticky parts start below both. */
24
+ --header-bottom: calc(var(--header-h) + 1px);
25
+ --sidebar-w: 17.5rem; /* 280 px */
26
+ /* Page margin: 16 px, 24 px from md (768 px), 32 px from xl (1440 px). */
27
+ --page-margin: var(--bh-space-200);
28
+ color-scheme: light;
29
+ }
30
+
31
+ :root[data-theme='dark'] {
32
+ color-scheme: dark;
33
+ }
34
+ @media (min-width: 768px) { :root { --page-margin: var(--bh-space-300); } }
35
+ @media (min-width: 1440px) { :root { --page-margin: var(--bh-space-400); } }
36
+
37
+ :root[data-theme="dark"] { background: var(--c-bg); }
38
+ body.docs { color: var(--c-ink); background: var(--c-bg); }
39
+
40
+ .site-header { position: sticky; z-index: 100; top: 0; container-type: inline-size; box-sizing: content-box; height: var(--header-h); border-bottom: 1px solid var(--c-line); background: var(--c-bg); }
41
+ /* The logo sits 20 px from the window edge, in line with the side navigation icons and labels
42
+ (8 px inset + 12 px item padding); the tools end at the page margin. */
43
+ .header-inner { position: relative; display: flex; align-items: center; gap: var(--bh-space-150); height: 100%; padding: 0 var(--page-margin) 0 var(--bh-space-250); }
44
+
45
+ /* Header logo: PNG at 3× shown at 1× (see SiteHeader.astro). The image is 28 px high: a 24 px
46
+ icon with 2 px above and below (room for the "g"), centred in the 48 px header. */
47
+ .header-brand { display: flex; flex: none; text-decoration: none; }
48
+ .header-logo-img { display: block; width: auto; height: 28px; }
49
+
50
+ /* Theme: draw the light or the dark artwork. */
51
+ .logo-dark { display: none !important; }
52
+ :root[data-theme='dark'] .logo-light { display: none !important; }
53
+ :root[data-theme='dark'] .logo-dark { display: block !important; }
54
+
55
+
56
+ /* Design system · News sit on the right, next to search, as on atlassian.design: the header
57
+ switches between the two parts of the site, the sidebar holds the design system itself. */
58
+ .header-nav { display: none; align-self: stretch; gap: var(--bh-space-300); margin-left: auto; }
59
+ .header-nav a { position: relative; display: flex; align-items: center; color: var(--c-muted); text-decoration: none; white-space: nowrap; font: var(--bh-font-label-default); }
60
+ .header-nav a:hover { color: var(--c-ink); }
61
+ .header-nav a[aria-current='page'] { color: var(--c-ink); }
62
+ .header-nav a[aria-current='page']::after { content: ''; position: absolute; inset: auto 0 -1px; height: 2px; background: var(--c-gold); }
63
+
64
+ .header-tools { display: flex; align-items: center; gap: var(--bh-space-100); margin-left: auto; }
65
+
66
+ .icon-button { display: inline-grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); color: var(--c-ink); background: var(--c-bg); cursor: pointer; list-style: none; }
67
+ .icon-button:hover { background: var(--c-hover); }
68
+ .icon-button::-webkit-details-marker { display: none; }
69
+ .theme-sun { display: none; }
70
+ :root[data-theme='dark'] .theme-sun { display: block; }
71
+ :root[data-theme='dark'] .theme-moon { display: none; }
72
+
73
+ .search { position: relative; display: none; align-items: center; width: 240px; height: 32px; border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); background: var(--c-surf); }
74
+ .search:focus-within { border-color: var(--c-muted); background: var(--c-bg); }
75
+ .search-icon { flex: none; margin-left: calc(var(--bh-space-150) - 1px); color: var(--c-muted); } /* 12 px from the outer edge, border included */
76
+ .search input { flex: 1; min-width: 0; height: 100%; padding: 0 var(--bh-space-100) 0 var(--bh-space-050); border: 0; outline: 0; color: var(--c-ink); background: transparent; font: var(--bh-font-body-default); }
77
+ .search input::placeholder { color: var(--c-muted); }
78
+ .search input::-webkit-search-cancel-button { display: none; }
79
+ .search-hint { margin-right: calc(var(--bh-space-100) - 1px); padding: 0 var(--bh-space-050); border: 1px solid var(--c-line); border-radius: var(--bh-radius-050); color: var(--c-muted); background: var(--c-bg); white-space: nowrap; font: var(--bh-font-label-small); }
80
+ .search:focus-within .search-hint { display: none; }
81
+ .search-results { position: absolute; z-index: 10; top: calc(100% + var(--bh-space-050)); right: 0; width: 360px; max-width: calc(100vw - 2 * var(--page-margin)); margin: 0; padding: var(--bh-space-100); border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); background: var(--c-bg); box-shadow: var(--c-shadow); list-style: none; }
82
+ .search-results a { display: grid; gap: var(--bh-space-050); padding: var(--bh-space-100) var(--bh-space-150); border-radius: var(--bh-radius-050); color: var(--c-ink); text-decoration: none; }
83
+ .search-results b { font: var(--bh-font-label-default); }
84
+ .search-results span { color: var(--c-muted); font: var(--bh-font-body-small); }
85
+ .search-results [aria-selected='true'] a, .search-results a:hover { background: var(--c-hover); }
86
+ .search-empty { padding: var(--bh-space-100) var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-default); }
87
+ .search-open { display: inline-grid; }
88
+
89
+ .header-menu { position: relative; display: block; }
90
+ .header-menu nav { position: absolute; top: calc(100% + var(--bh-space-050)); right: 0; display: grid; gap: var(--bh-space-050); width: 220px; padding: var(--bh-space-100); border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); background: var(--c-bg); box-shadow: var(--c-shadow); }
91
+ .header-menu nav a { display: flex; align-items: center; min-height: var(--bh-size-control-default); padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-050); color: var(--c-ink); text-decoration: none; font: var(--bh-font-label-default); }
92
+ .header-menu nav a:hover { background: var(--c-hover); }
93
+ .header-menu nav a[aria-current='page'] { background: linear-gradient(to right, var(--c-gold) var(--bh-border-width-selected), var(--c-selected) 0); }
94
+ .header-menu nav a[aria-current='page']:hover { background: var(--c-selected-hover); }
95
+
96
+ /* Footer: one 48 px line, on the same edges as the header. Muted until hover, so it never
97
+ competes with the page. */
98
+ .site-footer { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--bh-space-100) var(--bh-space-400); box-sizing: content-box; min-height: var(--header-h); padding: 0 var(--page-margin) 0 var(--bh-space-250); border-top: 1px solid var(--c-line); color: var(--c-muted); background: var(--c-bg); font: var(--bh-font-body-small); }
99
+ .site-footer nav { display: flex; flex-wrap: wrap; gap: var(--bh-space-050) var(--bh-space-250); }
100
+ .site-footer a { color: var(--c-muted); text-decoration: none; }
101
+ .site-footer a:hover { color: var(--c-ink); text-decoration: underline; text-underline-offset: 3px; }
102
+
103
+ /* Small windows first: the site menu, and search as a button that opens a field over the
104
+ header. From lg (1024 px) the header shows its links and the search field. */
105
+ body[data-search-open] .search { position: absolute; z-index: 5; inset: var(--bh-space-100) var(--page-margin); display: flex; width: auto; background: var(--c-bg); }
106
+ body[data-search-open] .search-results { left: 0; right: 0; width: auto; }
107
+ @media (min-width: 1024px) {
108
+ .header-inner { gap: var(--bh-space-300); }
109
+ .header-nav { display: flex; }
110
+ .header-tools { margin-left: 0; }
111
+ .header-menu { display: none; }
112
+ .search { display: flex; }
113
+ .search-open { display: none; }
114
+ body[data-search-open] .search { position: relative; inset: auto; width: 240px; background: var(--c-surf); }
115
+ body[data-search-open] .search-results { left: auto; width: 360px; }
116
+ }
117
+ /* Language switch: the other language's short name, links to the same page in it. */
118
+ .lang-switch { width: auto; min-width: var(--bh-size-control-default); padding: 0 var(--bh-space-100); color: var(--c-ink); text-decoration: none; font: var(--bh-font-label-small); }
119
+ /* The site menu repeats the language link; on narrow headers it is the only one, so the tools fit 360 px. */
120
+ .header-menu nav .menu-lang { margin-top: var(--bh-space-050); padding-top: var(--bh-space-050); border-top: 1px solid var(--c-line); border-radius: 0 0 var(--bh-radius-050) var(--bh-radius-050); }
121
+ .site-header .lang-switch { display: none; }
122
+ @container (min-width: 400px) { .site-header .lang-switch { display: inline-grid; } }
@@ -0,0 +1,270 @@
1
+ /* Color page: brand cards, scales, role tables, status and labels. Values come from the tokens. */
2
+
3
+ .c-num { font-variant-numeric: tabular-nums; }
4
+ .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
5
+
6
+ /* Brand */
7
+ .c-brand { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
8
+ .c-brand-card { display: grid; grid-template-rows: auto 1fr; margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
9
+ .c-brand-chip { display: flex; align-items: flex-end; height: 120px; padding: var(--bh-space-200); font: var(--bh-font-heading-small); }
10
+ .c-brand-card.is-yellow .c-brand-chip { color: var(--bh-color-text-on-brand); }
11
+ .c-brand-card.is-graphite .c-brand-chip { color: var(--bh-color-brand-white); }
12
+ .c-brand-card.is-white .c-brand-chip { color: var(--bh-color-brand-graphite); box-shadow: inset 0 -1px 0 var(--c-line); }
13
+ .c-brand-card figcaption { display: grid; align-content: start; gap: var(--bh-space-050); padding: var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
14
+ .c-brand-card figcaption code { color: var(--c-ink); }
15
+ @container prose (min-width: 640px) { .c-brand { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
16
+
17
+ /* Scales */
18
+ .c-scales { margin: 0 0 var(--bh-space-300); }
19
+ .c-scale { margin: 0 0 var(--bh-space-250); }
20
+ .c-scale figcaption { margin-bottom: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-default); }
21
+ .c-scale figcaption b { color: var(--c-ink); }
22
+ .prose .c-scale-table { width: 100%; min-width: 640px; table-layout: fixed; margin: 0; }
23
+ .prose .c-scale-table th, .prose .c-scale-table td { padding: var(--bh-space-050) var(--bh-space-025); border: 0; text-align: center; vertical-align: top; }
24
+ .prose .c-scale-table th[scope='row'] { width: 48px; text-align: left; }
25
+ .c-chip { display: block; height: 40px; margin-bottom: var(--bh-space-050); border-radius: var(--bh-radius-050); box-shadow: inset 0 0 0 1px rgb(127 127 127 / 18%); }
26
+ .c-scale-table .c-num { color: var(--c-muted); font: var(--bh-font-body-small); font-variant-numeric: tabular-nums; }
27
+ .prose .c-steps { display: flex; flex-wrap: wrap; gap: var(--bh-space-050) var(--bh-space-250); margin: 0; padding: 0; list-style: none; color: var(--c-muted); font: var(--bh-font-body-small); }
28
+ .prose .c-steps li { margin: 0; }
29
+ .prose .c-steps b { color: var(--c-ink); }
30
+
31
+ /* Role and status tables */
32
+ .c-cell { display: inline-flex; align-items: center; gap: var(--bh-space-100); white-space: nowrap; }
33
+ .c-cell > .c-num { align-self: baseline; font: var(--bh-font-code-default); }
34
+ .c-dot { flex: none; width: 16px; height: 16px; border-radius: var(--bh-radius-050); box-shadow: inset 0 0 0 1px rgb(127 127 127 / 25%); }
35
+ .c-check { display: block; color: var(--c-muted); font: var(--bh-font-body-small); font-variant-numeric: tabular-nums; }
36
+ .c-from { color: var(--c-muted); font: var(--bh-font-body-small); }
37
+ .prose .c-status td.c-num { font: var(--bh-font-body-small); font-variant-numeric: tabular-nums; }
38
+
39
+ /* Actions */
40
+ .c-actions { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
41
+ .c-action { margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
42
+ .c-action-stage { display: grid; place-items: center; height: 96px; background: var(--bh-color-surface-subtle); }
43
+ .c-action figcaption { display: grid; gap: var(--bh-space-050); padding: var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
44
+ .c-action figcaption code { color: var(--c-ink); }
45
+ .c-button { display: inline-flex; align-items: center; height: 32px; padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-100); font: var(--bh-font-label-default); }
46
+ .c-button.is-primary { color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); }
47
+ .c-button.is-danger { color: var(--bh-color-text-on-bold); background: var(--bh-color-background-danger-bold); }
48
+ @container prose (min-width: 640px) { .c-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
49
+
50
+ /* Labels */
51
+ .c-labels { display: grid; gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
52
+ .c-label-set { margin: 0; padding: var(--bh-space-250); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
53
+ .c-label-set figcaption { margin-bottom: var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-default); }
54
+ .c-label-set figcaption b { color: var(--c-ink); }
55
+ .c-label-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--bh-space-100); }
56
+ .c-label-row + .c-label-row { margin-top: var(--bh-space-150); }
57
+
58
+ /* Token reference */
59
+ .c-tokens > p { margin: 0 0 var(--bh-space-150); }
60
+ .c-var { display: block; color: var(--c-muted); font: var(--bh-font-body-small); }
61
+ .prose .c-token-ref { width: 100%; table-layout: fixed; }
62
+ .prose .c-token-ref th:nth-child(1) { width: 36%; }
63
+ .prose .c-token-ref th:nth-child(6) { width: 17%; }
64
+ .prose .c-token-ref td { vertical-align: top; }
65
+ .c-token-ref .c-cell { display: flex; white-space: normal; overflow-wrap: anywhere; }
66
+ .c-token-ref .c-cell + .c-cell { margin-top: var(--bh-space-050); }
67
+
68
+ /* Pairing */
69
+ .prose .c-pairing { width: 100%; table-layout: fixed; }
70
+ .prose .c-pairing td { vertical-align: top; }
71
+ .c-pair-token { display: inline-block; margin: 0 var(--bh-space-050) var(--bh-space-050) 0; }
72
+
73
+ /* Do / Don't */
74
+ .c-dd { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
75
+ .c-dd-panel { margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
76
+ .c-dd-panel figcaption { padding: var(--bh-space-100) var(--bh-space-200); border-bottom: 2px solid; font: var(--bh-font-label-default); }
77
+ .c-dd-panel.is-do figcaption { border-color: var(--bh-color-border-success); color: var(--bh-color-text-success); }
78
+ .c-dd-panel.is-dont figcaption { border-color: var(--bh-color-border-danger); color: var(--bh-color-text-danger); }
79
+ .c-dd-stage { display: grid; place-items: center; min-height: 96px; padding: var(--bh-space-200); background: var(--bh-color-surface-subtle); }
80
+ .c-dd-panel p { margin: 0; padding: var(--bh-space-150) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
81
+ .c-dd-row { display: inline-flex; flex-wrap: wrap; gap: var(--bh-space-100); }
82
+ .c-dd-code { font: var(--bh-font-code-default); }
83
+ .c-dd-tabs { display: flex; gap: var(--bh-space-250); border-bottom: 1px solid var(--bh-color-border); }
84
+ .c-dd-tab { padding: var(--bh-space-100) 0; color: var(--bh-color-text-subtle); font: var(--bh-font-label-default); }
85
+ .c-dd-tab.is-current { color: var(--bh-color-text); box-shadow: inset 0 -2px 0 var(--bh-color-border-selected); }
86
+ /* The Don't examples show colours used wrongly on purpose, so they read the scale directly. */
87
+ .c-dd-yellow-text { color: var(--bh-color-brand-yellow); font: var(--bh-font-label-default); text-decoration: underline; }
88
+ .c-dd-yellow-button { display: inline-flex; align-items: center; padding: var(--bh-space-100) var(--bh-space-200); border-radius: var(--bh-radius-100); color: var(--bh-color-brand-white); background: var(--bh-color-brand-yellow); font: var(--bh-font-label-default); }
89
+ .c-dd-dot { width: 12px; height: 12px; border-radius: var(--bh-radius-full); background: var(--bh-color-red-9); }
90
+ @container prose (min-width: 640px) { .c-dd { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
91
+
92
+ /* Annotated example */
93
+ .c-ex { margin: 0 0 var(--bh-space-300); }
94
+ .c-ex-card { border: 1px solid var(--bh-color-border); border-radius: var(--bh-radius-150); background: var(--bh-color-surface); overflow: hidden; }
95
+ .c-ex-head { display: flex; align-items: center; justify-content: space-between; gap: var(--bh-space-150); padding: var(--bh-space-200); border-bottom: 1px solid var(--bh-color-border); }
96
+ .c-ex-title { color: var(--bh-color-text); font: var(--bh-font-heading-small); }
97
+ .c-ex-row { display: flex; align-items: center; justify-content: space-between; gap: var(--bh-space-150); padding: var(--bh-space-150) var(--bh-space-200); border-bottom: 1px solid var(--bh-color-border); }
98
+ .c-ex-row:last-child { border-bottom: 0; }
99
+ .c-ex-row.is-selected { background: var(--bh-color-background-selected); box-shadow: inset var(--bh-border-width-selected) 0 0 var(--bh-color-border-selected); }
100
+ .c-ex-name { display: block; color: var(--bh-color-text); font: var(--bh-font-heading-xsmall); }
101
+ .c-ex-meta { color: var(--bh-color-text-subtlest); font: var(--bh-font-body-small); }
102
+ .c-ex-link { color: var(--bh-color-link); }
103
+ .c-ex-n { display: inline-grid; place-items: center; width: 18px; height: 18px; margin-left: var(--bh-space-050); border-radius: var(--bh-radius-full); color: var(--bh-color-text-inverse); background: var(--bh-color-surface-inverse); font: var(--bh-font-label-small); vertical-align: middle; }
104
+ .c-ex figcaption { margin-top: var(--bh-space-150); }
105
+ .prose .c-ex-legend { margin: 0; color: var(--c-muted); font: var(--bh-font-body-default); }
106
+
107
+ /* Extra Do / Don't stages */
108
+ .c-dd-fill { display: grid; gap: var(--bh-space-025); padding: var(--bh-space-100) var(--bh-space-150); border-radius: var(--bh-radius-100); color: var(--bh-color-text-on-bold); background: var(--bh-color-background-danger-bold); font: var(--bh-font-label-default); }
109
+ .c-dd-fill small { font: var(--bh-font-body-small); }
110
+ .c-dd-fill.is-wrong small { color: var(--bh-color-red-7); }
111
+ .c-dd-fill.is-wrong { color: var(--bh-color-red-12); }
112
+ .c-dd-yellow-label { display: inline-flex; align-items: center; height: 20px; padding: 0 var(--bh-space-075); border: 1px solid var(--bh-color-brand-yellow); border-radius: var(--bh-radius-full); color: var(--bh-color-yellow-9); font: var(--bh-font-label-small); }
113
+
114
+ /* Balance bar */
115
+ .c-balance { margin: 0 0 var(--bh-space-300); }
116
+ .c-balance-bar { display: flex; height: 40px; overflow: hidden; border: 1px solid var(--c-line); border-radius: var(--bh-radius-100); }
117
+ .c-balance figcaption { margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-default); }
118
+
119
+ /* Token name anatomy */
120
+ .c-anat { display: grid; gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); padding: var(--bh-space-250); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
121
+ .c-anat-row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--bh-space-025); }
122
+ .c-anat-part { display: grid; justify-items: center; gap: var(--bh-space-050); }
123
+ .c-anat-part code { padding: var(--bh-space-050) var(--bh-space-100); border-radius: var(--bh-radius-050); font: var(--bh-font-code-default); }
124
+ .c-anat-part small { color: var(--c-muted); font: var(--bh-font-body-small); }
125
+ .c-anat-part.is-prop code { box-shadow: inset 0 -3px 0 var(--bh-color-border-info); }
126
+ .c-anat-part.is-role code { box-shadow: inset 0 -3px 0 var(--bh-color-border-danger); }
127
+ .c-anat-part.is-emph code { box-shadow: inset 0 -3px 0 var(--bh-color-border-success); }
128
+ .c-anat-part.is-state code { box-shadow: inset 0 -3px 0 var(--bh-color-border-warning); }
129
+ .c-anat-part.is-skip code { text-decoration: line-through; color: var(--c-muted); }
130
+ .c-anat-dot { padding-top: var(--bh-space-050); font: var(--bh-font-code-default); }
131
+ .c-anat figcaption { color: var(--c-muted); font: var(--bh-font-body-default); }
132
+
133
+ /* Surfaces */
134
+ .c-surf { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
135
+ .c-surf figure { margin: 0; }
136
+ .c-surf figcaption { margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-default); }
137
+ .c-surf-page { position: relative; display: grid; grid-template-columns: 42% 1fr; gap: var(--bh-space-150); min-height: 180px; padding: var(--bh-space-300) var(--bh-space-150) var(--bh-space-150); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); background: var(--bh-color-surface-page); }
138
+ .c-surf-page > .c-tag { position: absolute; top: 6px; left: 12px; }
139
+ .c-surf-side { padding: var(--bh-space-100); border-radius: var(--bh-radius-100); background: var(--bh-color-surface-subtle); }
140
+ .c-surf-card { position: relative; display: flex; flex-wrap: wrap; align-content: flex-start; gap: var(--bh-space-050); padding: var(--bh-space-100); border: 1px solid var(--bh-color-border); border-radius: var(--bh-radius-100); background: var(--bh-color-surface); }
141
+ .c-surf-tip { position: absolute; right: 8px; bottom: 8px; padding: var(--bh-space-050) var(--bh-space-100); border-radius: var(--bh-radius-100); color: var(--bh-color-text-inverse); background: var(--bh-color-surface-inverse); font: var(--bh-font-body-small); }
142
+ .c-tag { display: inline-block; padding: 1px var(--bh-space-075); border-radius: var(--bh-radius-050); color: var(--bh-color-text-subtle); background: var(--bh-color-background-neutral); font: var(--bh-font-code-default); font-size: 12px; }
143
+ .c-tag.is-on-dark { color: var(--bh-color-text-inverse); background: var(--bh-color-surface-inverse); }
144
+ .c-surf-page.is-dimmed { display: grid; place-items: center; grid-template-columns: 1fr; padding: var(--bh-space-500) var(--bh-space-150) var(--bh-space-200); overflow: hidden; }
145
+ .c-surf-scrim { position: absolute; inset: 0; padding: var(--bh-space-075) var(--bh-space-150); background: var(--bh-color-surface-scrim); }
146
+ .c-surf-dialog { position: relative; display: grid; gap: var(--bh-space-100); max-width: 280px; padding: var(--bh-space-200); border-radius: var(--bh-radius-100); color: var(--bh-color-text-subtle); background: var(--bh-color-surface); box-shadow: var(--bh-elevation-shadow-overlay); font: var(--bh-font-body-default); }
147
+ .c-surf-dialog b { color: var(--bh-color-text); font: var(--bh-font-heading-xsmall); }
148
+ @container prose (min-width: 640px) { .c-surf { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
149
+
150
+ /* States */
151
+ .prose .c-states { width: 100%; margin: 0 0 var(--bh-space-300); }
152
+ .prose .c-states td, .prose .c-states th { text-align: center; vertical-align: middle; }
153
+ .prose .c-states th[scope='row'] { text-align: left; }
154
+ .c-focus { outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: var(--bh-state-focus-offset); }
155
+ .c-disabled { border-color: var(--bh-color-border-disabled) !important; color: var(--bh-color-text-disabled) !important; background: var(--bh-color-background-disabled) !important; }
156
+ .c-state-row { display: block; min-width: 88px; padding: var(--bh-space-100) var(--bh-space-150); border-radius: var(--bh-radius-100); color: var(--bh-color-text); text-align: left; white-space: nowrap; font: var(--bh-font-body-default); }
157
+ .c-state-row.is-selected { background: linear-gradient(to right, var(--bh-color-border-selected) var(--bh-border-width-selected), var(--bh-color-background-selected) 0); }
158
+
159
+ /* Banners */
160
+ .c-banners { display: grid; gap: var(--bh-space-100); margin: 0 0 var(--bh-space-300); }
161
+ .c-banner { display: flex; align-items: center; gap: var(--bh-space-100); padding: calc(var(--bh-space-100) - 1px) calc(var(--bh-space-150) - 1px); border: 1px solid; border-radius: var(--bh-radius-100); color: var(--bh-color-text); font: var(--bh-font-body-default); }
162
+ .c-banner-icon { display: inline-flex; }
163
+ .c-banner.is-info { border-color: var(--bh-color-border-info-subtle); background: var(--bh-color-background-info-subtle); }
164
+ .c-banner.is-info .c-banner-icon { color: var(--bh-color-icon-info); }
165
+ .c-banner.is-success { border-color: var(--bh-color-border-success-subtle); background: var(--bh-color-background-success-subtle); }
166
+ .c-banner.is-success .c-banner-icon { color: var(--bh-color-icon-success); }
167
+ .c-banner.is-warning { border-color: var(--bh-color-border-warning-subtle); background: var(--bh-color-background-warning-subtle); }
168
+ .c-banner.is-warning .c-banner-icon { color: var(--bh-color-icon-warning); }
169
+ .c-banner.is-danger { border-color: var(--bh-color-border-danger-subtle); background: var(--bh-color-background-danger-subtle); }
170
+ .c-banner.is-danger .c-banner-icon { color: var(--bh-color-icon-danger); }
171
+
172
+ /* Step jobs */
173
+ .c-steps-ill { display: grid; gap: var(--bh-space-150); margin: 0 0 var(--bh-space-300); padding: var(--bh-space-200); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
174
+ /* Twelve steps always fit the column: on narrow columns the scale name goes on its own line. */
175
+ .c-steps-row { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); align-items: end; gap: var(--bh-space-050); }
176
+ .c-steps-row > b { grid-column: 1 / -1; }
177
+ @container prose (min-width: 560px) { .c-steps-row { grid-template-columns: 4.5rem repeat(12, minmax(0, 1fr)); gap: var(--bh-space-075); } .c-steps-row > b { grid-column: auto; } }
178
+ .c-steps-row > b { align-self: center; font: var(--bh-font-label-default); }
179
+ .c-step-cell { display: grid; justify-items: center; gap: var(--bh-space-050); }
180
+ .c-step-cell small { color: var(--c-muted); font: var(--bh-font-body-small); }
181
+ .c-step-bg { width: 100%; height: 32px; border: 1px solid var(--c-line); border-radius: var(--bh-radius-050); }
182
+ .c-step-pill, .c-step-fill { display: grid; place-items: center; overflow: hidden; width: 100%; height: 32px; border-radius: var(--bh-radius-100); color: var(--bh-color-text); font: var(--bh-font-label-small); }
183
+ .c-step-fill { color: var(--bh-color-text-on-bold); }
184
+ .c-step-line { width: 100%; height: 32px; border: 2px solid; border-radius: var(--bh-radius-100); }
185
+ .c-step-text { display: grid; place-items: center; height: 32px; font: var(--bh-font-heading-small); }
186
+ .c-steps-ill figcaption { color: var(--c-muted); font: var(--bh-font-body-small); }
187
+
188
+ /* Themes */
189
+ .c-themes { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
190
+ .c-themes figure { margin: 0; }
191
+ .c-theme-stage { padding: var(--bh-space-200); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
192
+ .c-themes figcaption { margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-default); }
193
+ @container prose (min-width: 640px) { .c-themes { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
194
+
195
+ /* Contrast samples */
196
+ .c-contrast { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-150); margin: 0 0 var(--bh-space-300); }
197
+ .c-contrast figure { margin: 0; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
198
+ .c-contrast-chip { display: grid; place-items: center; height: 72px; font: var(--bh-font-label-default); }
199
+ .c-contrast-box { width: 20px; height: 20px; border: 1px solid; border-radius: var(--bh-radius-050); background: var(--bh-color-surface); }
200
+ .c-contrast figcaption { padding: var(--bh-space-100) var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-small); }
201
+ .c-contrast .is-pass b { color: var(--bh-color-text-success); }
202
+ .c-contrast .is-fail b { color: var(--bh-color-text-danger); }
203
+ @container prose (min-width: 640px) { .c-contrast { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
204
+
205
+ /* Values that differ by theme: show the one for the current theme. */
206
+ .v-dark { display: none; }
207
+ :root[data-theme='dark'] .v-light { display: none; }
208
+ :root[data-theme='dark'] .v-dark { display: inline; }
209
+
210
+ /* Palette: large swatches, one column per scale, light and dark */
211
+ .c-pal-set { display: grid; gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
212
+ .c-pal { margin: 0; padding: var(--bh-space-200); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
213
+ .c-pal figcaption { margin: 0 0 var(--bh-space-150); font: var(--bh-font-heading-xsmall); }
214
+ .c-pal-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--bh-space-100); }
215
+ .c-pal-col { display: grid; gap: var(--bh-space-025); }
216
+ .c-pal-col > b { margin-bottom: var(--bh-space-075); font: var(--bh-font-body-default); font-weight: var(--bh-font-weight-semibold); }
217
+ .c-pal-sw { display: flex; justify-content: space-between; align-items: center; gap: var(--bh-space-050); min-height: 36px; padding: 0 var(--bh-space-100); border-radius: var(--bh-radius-050); font: var(--bh-font-body-small); }
218
+ .c-pal-sw:first-of-type { border-radius: var(--bh-radius-100) var(--bh-radius-100) var(--bh-radius-050) var(--bh-radius-050); }
219
+ .c-pal-sw:last-of-type { border-radius: var(--bh-radius-050) var(--bh-radius-050) var(--bh-radius-100) var(--bh-radius-100); }
220
+ .c-pal-sw .c-num { font: var(--bh-font-label-small); font-family: var(--bh-font-family-mono); opacity: .9; }
221
+ .c-pal-sw em { margin-left: var(--bh-space-050); font-style: normal; font-weight: var(--bh-font-weight-semibold); text-transform: lowercase; }
222
+ .c-pal.is-light .c-pal-sw:is(:nth-of-type(1), :nth-of-type(2)) { box-shadow: inset 0 0 0 1px rgb(0 0 0 / 8%); }
223
+ @container prose (width < 640px) { .c-pal-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: var(--bh-space-200); } }
224
+
225
+ /* Ramps on the overview */
226
+ .c-ramps { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
227
+ .c-ramp-card { display: grid; gap: var(--bh-space-075); margin: 0; padding: var(--bh-space-300); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
228
+ .c-ramp { display: grid; grid-template-columns: repeat(12, 1fr); height: 22px; overflow: hidden; border-radius: var(--bh-radius-050); }
229
+ .c-ramp-card figcaption { margin-top: var(--bh-space-100); font: var(--bh-font-body-small); }
230
+ @container prose (min-width: 640px) { .c-ramps { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
231
+
232
+ /* Role specimens */
233
+ .c-roles { width: 100%; table-layout: fixed; }
234
+ .c-roles .c-col-token { width: 30%; }
235
+ .c-roles .c-col-mode { width: 15%; }
236
+ .c-roles .c-col-use { width: 40%; }
237
+ .c-roles td { vertical-align: top; overflow-wrap: anywhere; }
238
+ .c-roles .c-check { margin-top: var(--bh-space-050); }
239
+ @container prose (width < 560px) { .c-roles { table-layout: auto; } .c-roles .c-spec { display: inline-grid; margin: 0 var(--bh-space-100) 0 0; vertical-align: middle; } .c-roles .c-num { display: inline; } }
240
+ .c-spec { display: grid; place-items: center; width: 72px; height: 44px; margin-bottom: var(--bh-space-075); border-radius: var(--bh-radius-050); box-shadow: inset 0 0 0 1px rgb(127 127 127 / 25%); font: var(--bh-font-heading-small); }
241
+ .c-spec.is-border { box-shadow: none; }
242
+ .c-spec-fill { width: 52px; height: 28px; border-radius: var(--bh-radius-050); background: var(--fill); box-shadow: inset 0 0 0 1px var(--edge); }
243
+ .c-roles .c-num { display: block; font: var(--bh-font-code-default); }
244
+
245
+ /* Pairing cards */
246
+ .c-pairs { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
247
+ .c-pair { margin: 0; overflow: hidden; border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
248
+ .c-pair-stage { display: flex; flex-wrap: wrap; align-content: flex-start; gap: var(--bh-space-050) var(--bh-space-150); min-height: 96px; padding: var(--bh-space-200); font: var(--bh-font-body-default); }
249
+ .c-pair-text { font: var(--bh-font-code-default); }
250
+ .c-pair-marks { display: flex; flex-basis: 100%; gap: var(--bh-space-100); margin-top: var(--bh-space-050); }
251
+ .c-pair-mark { display: grid; place-items: center; width: 24px; height: 24px; border-radius: var(--bh-radius-050); }
252
+ .c-pair figcaption { padding: var(--bh-space-150) var(--bh-space-200); border-top: 1px solid var(--c-line); font: var(--bh-font-body-small); }
253
+ .c-pair figcaption b { margin-right: var(--bh-space-050); }
254
+ .c-pair figcaption .c-from { display: block; margin-top: var(--bh-space-050); }
255
+ @container prose (min-width: 640px) { .c-pairs { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
256
+
257
+ /* State key */
258
+ .c-state-key { margin: var(--bh-space-150) 0 0; padding: 0; list-style: none; color: var(--c-muted); font: var(--bh-font-body-small); }
259
+ .c-state-key li + li { margin-top: var(--bh-space-050); }
260
+ .c-state-key b { color: var(--c-ink); font-weight: var(--bh-font-weight-semibold); }
261
+
262
+ /* Emphasis */
263
+ .c-emph { margin: 0 0 var(--bh-space-300); padding: var(--bh-space-200); border: 1px solid var(--c-line); border-radius: var(--bh-radius-150); }
264
+ .c-emph-grid { display: grid; grid-template-columns: 80px repeat(3, minmax(0, 1fr)); gap: var(--bh-space-100); align-items: center; font: var(--bh-font-body-small); }
265
+ .c-emph-fill { display: flex; align-items: center; min-height: 40px; padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-100); font: var(--bh-font-body-default); overflow-wrap: anywhere; }
266
+ .c-emph-none { color: var(--c-muted); text-align: center; }
267
+ .c-emph figcaption { margin-top: var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-default); }
268
+ .c-emph-fill { box-shadow: inset 0 0 0 1px rgb(127 127 127 / 18%); }
269
+ .c-status .c-dot { width: 32px; height: 32px; border-radius: var(--bh-radius-050); }
270
+ .c-pair-warn { margin-left: var(--bh-space-025); color: var(--c-ink); font-family: var(--bh-font-family-sans); }