@beehexa/design-rules 0.0.0-stage → 2611.3.3

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 +36 -4
@@ -0,0 +1,49 @@
1
+ ---
2
+ title: Interaction states
3
+ description: How controls look when hovered, focused, pressed, selected or disabled.
4
+ order: 10
5
+ ---
6
+ import TokenTable from '../../../components/TokenTable.astro';
7
+
8
+ Every interactive element needs all of these states. Each state has its own colour token, so every component shows it the same way and it works in light and dark without extra code.
9
+
10
+ ## The rules
11
+
12
+ 1. Every state uses its own token. Find the token of the element at rest, then add the state: `color.background.neutral` at rest becomes `color.background.neutral.hover` on hover and `color.background.neutral.pressed` when pressed.
13
+ 2. Never draw a state with opacity, a transparent overlay, `filter: brightness()` or a mixed colour. The result changes with whatever is under the element, and its contrast can't be checked.
14
+ 3. Never invent a hover or pressed colour. If the token you need doesn't exist, ask for it to be added to the Color page first.
15
+ 4. Keyboard focus is always visible, on every element that can take focus. Hover is never the only way to show something.
16
+
17
+ ## Each state
18
+
19
+ | State | When | Background | Text and icon | Border |
20
+ | --- | --- | --- | --- | --- |
21
+ | Rest | Nothing is happening. | The token for the element, such as `color.background.neutral` or `color.background.danger.bold` | The paired text token (see Color, Pairing) | `color.border` or `color.border.bold` |
22
+ | Hover | A pointer is over the element. | The same token plus `.hover`: one step up the scale | Unchanged | Unchanged |
23
+ | Pressed | The element is being clicked or tapped. | The same token plus `.pressed`: two steps up | Unchanged | Unchanged |
24
+
25
+ The primary button is the one exception. It rests on graphite 12, the last step, so it has no step above: on hover it moves one step back (graphite 11) and when pressed two steps back (graphite 10). Its tokens already do this.
26
+ | Focus | The element has keyboard focus (`:focus-visible`). | Unchanged | Unchanged | Add a ring: `outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: var(--bh-state-focus-offset);` |
27
+ | Selected | The element is chosen, like a table row, a tab or a menu item. | `color.background.selected`, and `color.background.selected.hover` on hover | Unchanged, and a second cue: a check, the yellow indicator bar (`color.border.selected`) or bold text in a menu | Unchanged |
28
+ | Disabled | The element cannot be used now. | `color.background.disabled` | `color.text.disabled`, `color.icon.disabled` | `color.border.disabled` |
29
+
30
+ ## Rows, menu items and ghost buttons
31
+
32
+ Elements with no fill at rest use `color.background.neutral.subtle`, which is transparent. On hover they take `color.background.neutral.subtle.hover`; when pressed, `color.background.neutral.subtle.pressed`.
33
+
34
+ ## Disabled
35
+
36
+ - Use the three disabled colour tokens above. Don't lower the opacity.
37
+ - Remove the pointer and keyboard interaction (`disabled` on native controls, `aria-disabled="true"` plus blocked events on others) and show `cursor: not-allowed`.
38
+ - WCAG doesn't require contrast for disabled controls, so the disabled colours are light on purpose.
39
+ - Prefer telling people why something can't be used, for example in helper text, over a silent disabled control.
40
+
41
+ ## Dark theme
42
+
43
+ The same tokens work in dark. In dark, fills get lighter on hover and when pressed instead of darker, and the primary button moves back from graphite 12 the same way; the tokens already do this, so the code doesn’t change.
44
+
45
+ ## Tokens
46
+
47
+ The colours are on the [Color](/foundations/styles/color/) page. The focus ring width, `border.width.focused`, is on the [Border](/foundations/styles/border/) page. This group holds the gap between a control and its ring.
48
+
49
+ <TokenTable prefix="state" />
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: App frame
3
+ description: The header, side navigation and page header that repeat on every page, their sizes, and the spacing that lines them up.
4
+ order: 1
5
+ ---
6
+ import LayoutDemo from '../../../../components/LayoutDemo.astro';
7
+
8
+ **The header, the side navigation and the page header repeat on every page, in the same place and at the same size.**
9
+
10
+ ## Header
11
+
12
+ **48 px high, across the full width. It holds what belongs to the whole product.**
13
+
14
+ | Part | Value |
15
+ |---|---|
16
+ | Height | 48 px: a 32 px control with 8 px above and below. The 1 px line under the header is not counted |
17
+ | Holds | Menu button (below 1024 px), logo, global search, workspace switcher, notifications, account |
18
+ | Does not hold | The breadcrumb and page actions. They change with the page, so they go in the page header |
19
+
20
+ Use the package token `layout.header.height` (`--bh-layout-header-height`) for this dimension.
21
+ The sidebar widths below are `layout.sidebar.expanded` and `layout.sidebar.collapsed`.
22
+ Convert source units at numeric framework API boundaries instead of copying their values.
23
+
24
+ ## Side navigation
25
+
26
+ **280 px open, a 64 px rail when collapsed, a drawer below 1024 px. Every Beehexa product uses the same widths.**
27
+
28
+ | Window | Side navigation |
29
+ |---|---|
30
+ | Below 1024 px | Hidden. The menu button in the header opens it as a drawer over the page. |
31
+ | 1024 px and up | Open at 280 px. People can collapse it to the 64 px rail, and the choice is remembered. |
32
+
33
+ - **280 px** fits a label of about 31 characters at 14 px, long Vietnamese labels included.
34
+ - **The same width in every product**, so the page starts in the same place when people move between products.
35
+ - **No resizing.** One width keeps products alike. A resizable panel would also need a way to resize it without dragging (WCAG 2.5.7).
36
+ - **The rail** shows icons only. Each label appears in a tooltip.
37
+
38
+ ### Long labels
39
+
40
+ <LayoutDemo kind="navlabels" />
41
+
42
+ 1. Write a shorter label first.
43
+ 2. If it still does not fit, cut it with an ellipsis and show the full label in a tooltip, only when it is cut.
44
+ 3. Never widen the side navigation for one label. A product whose labels are long everywhere may set one width between 240 and 320 px for the whole product, and writes it down.
45
+
46
+ ## Page header
47
+
48
+ **The top of every page: breadcrumb, title, status and page actions.**
49
+
50
+ <LayoutDemo kind="pageheader" />
51
+
52
+ | Row | Holds | When |
53
+ |---|---|---|
54
+ | Breadcrumb | The pages above this one | Below the top level |
55
+ | Title row | The page title (`heading.large`) and a status on the left; page actions on the right, the main action last | Always |
56
+ | Description | One line about the page | Optional |
57
+ | Tabs or filters | Views of the same page | Optional |
58
+
59
+ - **The page header spans the whole content area at every page width.** Only the content below it follows [Full, Wide or Narrow](/foundations/styles/layout/page-widths/), so the title and the page actions stay in the same place on every page.
60
+ - The breadcrumb belongs to the page, not to the header: it changes on every page, and the header stays the same.
61
+ - Context for the whole product, such as the workspace, goes in the header.
62
+
63
+ ## Side panel
64
+
65
+ A panel beside the main content, such as details of a selected row, takes grid columns: 4 of 12 from 1024 px and 3 of 12 from 1440 px. Below 1024 px it opens as a drawer over the page. See the spans on [Grid](/foundations/styles/layout/grid/#spans).
66
+
67
+ ## Spacing of the frame
68
+
69
+ **Everything in the frame lines up on two edges: 20 px from the window on the left, and the page margin.**
70
+
71
+ | Between | Space |
72
+ |---|---|
73
+ | The window edge and the logo; the window edge and the side navigation icons | 20 px, `space.250` |
74
+ | The side navigation items and its edges | 8 px, `space.100` |
75
+ | One side navigation item and the next (each 32 px high) | 4 px, `space.050` |
76
+ | The content and the side navigation, the header or the window edge | The page margin: 16, 24 or 32 px ([Grid](/foundations/styles/layout/grid/)) |
77
+ | The breadcrumb and the title | 8 px, `space.100` |
78
+ | The title and the description | 4 px, `space.050` |
79
+ | The page header and the content | 24 px, `space.300` |
80
+
81
+ A 20 px edge for the logo comes from the side navigation: 8 px of inset plus the 12 px side padding of a 32 px control. The logo then sits right above the icons.
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: Breakpoints
3
+ description: The four window widths where Beehexa layouts change, what changes at each, and the order to design in.
4
+ order: 4
5
+ ---
6
+ import LayoutDemo from '../../../../components/LayoutDemo.astro';
7
+ import TokenTable from '../../../../components/TokenTable.astro';
8
+
9
+ **The layout changes at three window widths: 768, 1024 and 1440 px. Every screen must also work at 320 px.**
10
+
11
+ <LayoutDemo kind="breakpoints" />
12
+
13
+ ## What changes
14
+
15
+ | Breakpoint | From | Windows | What changes |
16
+ |---|---|---|---|
17
+ | `xs` | 0 | Phones and small windows | One fluid layout: 4 columns, gutter and page margin 16 px, content in one column. Side navigation in a drawer. |
18
+ | `md` | 768 px | Tablets, narrow windows | 8 columns. Gutter and page margin 24 px. Side navigation still in a drawer. |
19
+ | `lg` | 1024 px | Laptops, including 1280 and 1366 px screens | 12 columns. Side navigation open at 280 px, or collapsed to the 64 px rail. A side panel next to the main one. |
20
+ | `xl` | 1440 px | Desktops, including 1536 and 1920 px screens | Page margin 32 px. Four cards a row. |
21
+
22
+ - **Below 768 px is one layout.** Its columns stretch with the window, from 320 to 767 px. A card or a table inside it can still change with the width of its own container, using container queries.
23
+ - **320 px is not a breakpoint.** It is the narrowest window every screen must work in, which is also a 1280 px window zoomed to 400% (WCAG 1.4.10).
24
+
25
+ ## Design order
26
+
27
+ **Design for desktop first, then fit the screen to smaller windows. Write the CSS from the smallest window up.**
28
+
29
+ Beehexa products are used mostly on desktop, so their main screens start at the width people use most.
30
+
31
+ 1. Design at 1440 px, and check it at 1280 px.
32
+ 2. Fit it to 1024 px, then to 768 px.
33
+ 3. Fit it to 360 px, and check it at 320 px.
34
+
35
+ In code, the base styles are for the smallest window, and each breakpoint adds to them with `min-width`. Fewer rules have to be undone that way.
36
+
37
+ ## Check every screen at
38
+
39
+ | Window | Why |
40
+ |---|---|
41
+ | 1440 and 1280 px | The desktops and laptops people use most |
42
+ | 1024 px | Just above the point where the side navigation becomes a drawer |
43
+ | 768 px | Tablets, and the switch to 8 columns |
44
+ | About 844 × 390 px | A phone held sideways: wide enough for the tablet layout, but short |
45
+ | 360 and 320 px | Phones, and the narrowest window allowed |
46
+ | 400% zoom | People who enlarge the page |
47
+
48
+ ## Tokens
49
+
50
+ <TokenTable prefix="breakpoint" />
51
+
52
+ ## Usage
53
+
54
+ - Write media queries with `min-width`: `@media (min-width: 768px)`.
55
+ - CSS custom properties cannot be used in media queries. Use the pixel values of these tokens.
56
+ - Change the layout at breakpoints, never the spacing tokens or text sizes inside a component.
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: Grid
3
+ description: A fluid grid of 4, 8 or 12 columns in the main content area, with gutters and page margins from the spacing tokens.
4
+ order: 3
5
+ ---
6
+ import LayoutDemo from '../../../../components/LayoutDemo.astro';
7
+
8
+ **Lay out the main content area on 4 columns on phones, 8 on tablets and 12 from 1024 px.**
9
+
10
+ <LayoutDemo kind="grid" />
11
+
12
+ ## Columns, gutters and margins
13
+
14
+ | Window | Columns | Gutter | Page margin |
15
+ |---|---|---|---|
16
+ | Below 768 px | 4 | 16 px | 16 px |
17
+ | 768 to 1023 px | 8 | 24 px | 24 px |
18
+ | 1024 to 1439 px | 12 | 24 px | 24 px |
19
+ | 1440 px and up | 12 | 24 px | 32 px |
20
+
21
+ The values are spacing tokens: 16 px is `space.200`, 24 px is `space.300` and 32 px is `space.400`. The ranges start at the `md`, `lg` and `xl` breakpoints.
22
+
23
+ - **12 columns** divide into halves, thirds, quarters and sixths.
24
+ - **4 columns on phones** give two halves or four quarters. **8 on tablets** keep the same halves and quarters with more room.
25
+ - **Gutters** are 16 px on phones and 24 px from 768 px, where there is room to separate cards more clearly.
26
+ - **Page margins** start at 16 px and grow to 32 px on wide screens, so content does not touch the edge of a large window.
27
+ - **Every value is a spacing token and a multiple of 8 px**, like the text line heights, so cards, text and controls line up.
28
+
29
+ Use the same gutter between rows, so cards are as far apart down as across.
30
+
31
+ ## Fluid columns
32
+
33
+ **Columns stretch with the window. Gutters and margins stay fixed within each range.**
34
+
35
+ A wider window gives wider columns, not more empty space. At the next breakpoint the gutter, the margin or the number of columns changes.
36
+
37
+ ## Where the grid sits
38
+
39
+ **The grid spans the main content area only.**
40
+
41
+ - The header and the side navigation are not on the grid. The grid starts where the side navigation ends, so its columns always divide the content area.
42
+ - The side navigation keeps a fixed width instead of taking columns. As columns, it would grow and shrink with the window, and collapsing it to the rail would break the column count.
43
+ - Breakpoints still read the window width. Opening or collapsing the side navigation does not change the breakpoint.
44
+ - Content inside a panel or a card can follow the width of its container instead, with container queries.
45
+ - On a wide or narrow page, the grid fills the capped width. See [Page widths](/foundations/styles/layout/page-widths/).
46
+
47
+ ## Spans
48
+
49
+ A span is the number of columns an item covers.
50
+
51
+ | Layout | Below 768 px (of 4) | 768 px (of 8) | 1024 px (of 12) | 1440 px (of 12) |
52
+ |---|---|---|---|---|
53
+ | Cards, 1 to 4 a row | 4 | 4 | 4 | 3 |
54
+ | Main panel and side panel | 4 | 8 | 8 + 4 | 9 + 3 |
55
+ | Summary tiles | 2 | 2 | 3 | 2 |
56
+
57
+ In CSS, the grid is a few lines:
58
+
59
+ ```css
60
+ .page-grid {
61
+ display: grid;
62
+ grid-template-columns: repeat(4, minmax(0, 1fr));
63
+ gap: var(--bh-space-200);
64
+ padding-inline: var(--bh-space-200);
65
+ }
66
+ @media (min-width: 768px) {
67
+ .page-grid {
68
+ grid-template-columns: repeat(8, minmax(0, 1fr));
69
+ gap: var(--bh-space-300);
70
+ padding-inline: var(--bh-space-300);
71
+ }
72
+ }
73
+ @media (min-width: 1024px) {
74
+ .page-grid { grid-template-columns: repeat(12, minmax(0, 1fr)); }
75
+ }
76
+ @media (min-width: 1440px) {
77
+ .page-grid { padding-inline: var(--bh-space-400); }
78
+ }
79
+ ```
80
+
81
+ ## What goes on the grid
82
+
83
+ - Page regions align to columns: cards, panels, form columns, tiles.
84
+ - Controls inside a region do not. Inside a card, use spacing tokens.
85
+ - A data table fills its region. Do not split table columns along the grid.
86
+
87
+ See [Breakpoints](/foundations/styles/layout/breakpoints/) for when the grid changes.
@@ -0,0 +1,24 @@
1
+ ---
2
+ title: Layout
3
+ description: The frame every Beehexa app shares (header, side navigation, page header and content) and the pages that set its sizes.
4
+ order: 4
5
+ sidebarLabel: Overview
6
+ ---
7
+ import LayoutDemo from '../../../../components/LayoutDemo.astro';
8
+
9
+ **Every Beehexa app uses one frame: a header across the top, side navigation on the left, and the page beside it.**
10
+
11
+ People move between screens all day. When the menu, the search and the page actions stay in the same place, they find them without looking.
12
+
13
+ <LayoutDemo kind="anatomy" />
14
+
15
+ ## Where each part is set
16
+
17
+ | Part | What it sets | Page |
18
+ |---|---|---|
19
+ | Header, side navigation, page header | The parts that repeat on every page, their sizes and the spacing between them | [App frame](/foundations/styles/layout/app-frame/) |
20
+ | Content width | Full, wide or narrow, by what the page holds | [Page widths](/foundations/styles/layout/page-widths/) |
21
+ | Columns | Columns, gutters and page margins inside the content area | [Grid](/foundations/styles/layout/grid/) |
22
+ | Window widths | Where the layout changes, and the order to design in | [Breakpoints](/foundations/styles/layout/breakpoints/) |
23
+ | Control heights | 24, 32 and 40 px, and density | [Size and density](/foundations/styles/size-and-density/) |
24
+ | Space between things | The spacing steps | [Spacing](/foundations/styles/spacing/) |
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: Data-inspection overlays
3
+ description: Token-backed sizing and responsive behavior for structured data-inspection drawers and panels.
4
+ order: 5
5
+ ---
6
+
7
+ ## Choose by task, not by existing component width
8
+
9
+ Use a data-inspection overlay when people need record details, structured evidence or related
10
+ configuration while retaining the page context. A short confirmation dialog is not a data-inspection
11
+ overlay and does not inherit this width contract. Prefer the component's standard content sizing
12
+ for short confirmation/action prompts; do not enlarge it just because a data panel uses a wide role.
13
+
14
+ ## Width roles
15
+
16
+ | Role | Token | When |
17
+ | --- | --- | --- |
18
+ | Default inspection | `layout.overlay.default` | From `breakpoint.lg`: `max(50vw, 900px)` |
19
+ | Wide inspection | `layout.overlay.wide` | Explicit content-heavy variant from `breakpoint.lg`: `70vw` |
20
+ | Mobile inspection | `layout.overlay.mobile` | Below `breakpoint.lg`: `100vw` |
21
+
22
+ The wide variant is chosen per content/task; it is not a global override for every drawer.
23
+ At the responsive boundary, switch to the mobile role rather than letting the desktop minimum
24
+ force outer-page overflow. Keep the title, close/back control, primary action, error/recovery
25
+ feedback and important content reachable. Long tables/code may scroll inside their own region;
26
+ ordinary text and form labels reflow. Width alone does not prove usable height, keyboard behavior,
27
+ focus containment/return, accessible naming or sticky-action visibility.
28
+
29
+ Structured desktop descriptions may use `layout.description.minimum` as their nominal minimum
30
+ column width. When the available inline budget is smaller, stack label/value content; the minimum
31
+ must not force horizontal document overflow. This is a description layout role, not a general field,
32
+ modal or page-width token.
33
+
34
+ ## Apply through package exports
35
+
36
+ Use `--bh-layout-overlay-*` CSS variables in styles, or resolved `tokens.light['layout.overlay.default']`
37
+ when an overlay API expects a CSS length string. Numeric app-frame/page APIs convert source
38
+ `rem` dimensions at their framework boundary. Do not copy these values into a consumer token file.
39
+ The explicit pixel CSS package variant preserves nominal sizes during root-unit migration, not
40
+ an exception from font scaling or responsive behavior.
41
+
42
+ Header/sidebar and page-cap roles are also source tokens: `layout.header.height`,
43
+ `layout.sidebar.expanded`, `layout.sidebar.collapsed`, `layout.page.narrow`, `layout.page.wide`
44
+ and `layout.page.margin.*`. Their detailed semantics remain in [App frame](/foundations/styles/layout/app-frame/)
45
+ and [Page widths](/foundations/styles/layout/page-widths/). Do not use a page cap as a viewport breakpoint.
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Page widths
3
+ description: Full, wide or narrow content, picked by what the page holds, and the length of a line of text.
4
+ order: 2
5
+ ---
6
+ import LayoutDemo from '../../../../components/LayoutDemo.astro';
7
+
8
+ **Pick one of three widths for each page, by what the page holds.**
9
+
10
+ <LayoutDemo kind="widths" />
11
+
12
+ | Width | Maximum | For |
13
+ |---|---|---|
14
+ | Full | None | Tables, lists, logs, builders and canvases |
15
+ | Wide | 1280 px | Dashboards, detail pages, settings overviews, standard pages |
16
+ | Narrow | 768 px | Forms, settings forms, wizard steps, help and documentation pages |
17
+
18
+ Wide and Narrow use package tokens `layout.page.wide` and `layout.page.narrow`.
19
+ The responsive margins use `layout.page.margin.small`, `.medium` and `.large`.
20
+ Full has no maximum-width cap; do not replace it with an arbitrarily large numeric token.
21
+
22
+ - **Full.** Tables and logs show more columns and rows when they use the whole window.
23
+ - **Wide.** Cards and panels stay at a size people can scan on a large monitor.
24
+ - **Narrow.** A form in one column is quick to fill in, and the eye does not travel far from label to field.
25
+ - The maximum is the width of the content. The page margins are outside it.
26
+ - The width applies to the content only. The [page header](/foundations/styles/layout/app-frame/#page-header) above it always spans the whole content area, so the title and the page actions do not move from page to page.
27
+
28
+ ## Alignment
29
+
30
+ **Centre wide or narrow content in the area beside the side navigation. The page header stays across the full area.**
31
+
32
+ When the side navigation opens or closes, the page moves to the new centre.
33
+
34
+ ## Running text
35
+
36
+ **Text runs the full width of its column. To keep lines short enough to read, put long text on a Narrow page.**
37
+
38
+ A Narrow column of 768 px holds about 100 characters a line of 16 px text. A help or documentation page is a Narrow page; a table of contents beside it is not part of the 768 px.
@@ -0,0 +1,65 @@
1
+ ---
2
+ title: Downloads and terms
3
+ description: Every logo file, which one to use where, colour codes, the typeface licence and the terms for using the Beehexa trademark.
4
+ order: 5
5
+ audience: designers, developers, partners, press
6
+ owner: Brand
7
+ updated: 2026-10-24
8
+ ---
9
+ import LogoHero from '../../../../components/logos/LogoHero.astro';
10
+
11
+ ## The package
12
+
13
+ <LogoHero />
14
+
15
+ | Folder | Contents |
16
+ |---|---|
17
+ | `lockups/` | The beehexa and HexaSync lockups in four colour versions each, SVG, with the clear space in the artboard |
18
+ | `icon/` | The icon in yellow, white and graphite, SVG, with clear space |
19
+ | `favicon-web/` | favicon.svg, favicon.ico and PNG favicons at 16, 32 and 48 px, apple-touch-icon, web app icons 192 and 512 px, maskable icon, avatar 800 px, site.webmanifest |
20
+ | `license/` | The SIL Open Font License for Inter |
21
+ | `README.md` | The rules in short |
22
+
23
+ ## Which file to use
24
+
25
+ | You need | Use |
26
+ |---|---|
27
+ | The logo on a website or in an app | A PNG exported at 3× from `lockups/beehexa-horizontal-1-light.svg` (light backgrounds) or `-2-dark.svg` (dark), shown at 1×. See [sharp on screen](/foundations/styles/logos/using-the-logo/#sharp-on-screen). |
28
+ | The logo in a document, a slide or print | `lockups/beehexa-horizontal-1-light.svg` on light backgrounds, `-2-dark.svg` on dark |
29
+ | The logo on a photo or a strong colour | `-3-white.svg` |
30
+ | One-colour print, engraving, stamps | `-4-graphite.svg` |
31
+ | A favicon | `favicon-web/favicon.svg` and `favicon.ico` |
32
+ | An app icon or a social avatar | `favicon-web/apple-touch-icon.png`, `icon-192.png`, `icon-512.png`, `icon-maskable-512.png`, `avatar-800.png` |
33
+ | The icon in your own layout | `icon/beehexa-icon-*.svg` |
34
+ | A PNG or PDF | Export it from the SVG at the size you need. Never enlarge a small PNG. |
35
+
36
+ ## Colour codes
37
+
38
+ | Colour | HEX | RGB | Print |
39
+ |---|---|---|---|
40
+ | Yellow | #FCB017 | 252 176 23 | Not set yet |
41
+ | Graphite | #2B2A28 | 43 42 40 | Not set yet |
42
+ | White | #FFFFFF | 255 255 255 | Paper |
43
+
44
+ CMYK and Pantone values come after a print proof. The 2025 brand guide lists PMS 1235 C for the yellow; check it on paper before using it, because this yellow often prints dull in CMYK on uncoated stock.
45
+
46
+ ## Typeface
47
+
48
+ The wordmark is set in Inter Display and converted to outlines, so you don't need the font to use the logo. Inter is licensed under the SIL Open Font License 1.1, which allows its use in a logo. The licence is in the package.
49
+
50
+ ## Trademark
51
+
52
+ The Beehexa logo is registered as a trademark in Viet Nam, no. 4-0358730-000, in classes 9, 35 and 42. Registration of the logo as shown on this site is being confirmed with our industrial property representative.
53
+
54
+ ## Terms of use
55
+
56
+ > Draft, pending legal review. Questions: [hello@beehexa.com](mailto:hello@beehexa.com?subject=Logo%20use).
57
+
58
+ You may use the Beehexa and HexaSync logos to refer to Beehexa, to show that your product integrates with HexaSync, or in news and reviews about us, as long as you:
59
+
60
+ - use the files from the package without changing them, following [Using the logo](/foundations/styles/logos/using-the-logo/);
61
+ - don't suggest that Beehexa sponsors, endorses or partners with you unless we have agreed to it in writing;
62
+ - don't use the logo, the icon or a look-alike in your own product names, logos, domain names, app icons or social accounts;
63
+ - don't make our logo the most prominent element of your material.
64
+
65
+ We may ask you to change or stop any use of the logos.
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: Logos
3
+ description: The Beehexa logo and every product logo, with the rules and files to use them on web, print and inside our products.
4
+ order: 12
5
+ sidebarLabel: Overview
6
+ audience: web, print, product UI
7
+ owner: Brand
8
+ updated: 2026-10-23
9
+ ---
10
+ import LogoHero from '../../../../components/logos/LogoHero.astro';
11
+ import LogoAnatomy from '../../../../components/logos/LogoAnatomy.astro';
12
+ import LogoConstruction from '../../../../components/logos/LogoConstruction.astro';
13
+ import LogoMeanings from '../../../../components/logos/LogoMeanings.astro';
14
+
15
+ ## Download
16
+
17
+ <LogoHero />
18
+
19
+ ## Anatomy
20
+
21
+ The lockup is the icon and the wordmark, side by side. Everything is measured in one unit: the side of the hexagon, which is also the x-height of the wordmark.
22
+
23
+ <LogoAnatomy />
24
+
25
+ There are two forms only: this horizontal lockup and the [icon on its own](/foundations/styles/logos/using-the-logo/#the-icon-on-its-own). There is no stacked version.
26
+
27
+ ## Construction
28
+
29
+ The icon is drawn on a grid of equilateral triangles, so anyone can redraw it exactly: a regular hexagon with a pointy top, three layers and 30° edges.
30
+
31
+ <LogoConstruction />
32
+
33
+ ## One icon, three meanings
34
+
35
+ > As a bee builds its hive, Beehexa joins system after system into one solid block, then lifts the business up.
36
+
37
+ The three meanings sit inside each other: the yellow shows what Beehexa builds, the white shows what it brings.
38
+
39
+ <LogoMeanings />
40
+
41
+ ## Rules at a glance
42
+
43
+ | Rule | Value | Details |
44
+ |---|---|---|
45
+ | Forms | Horizontal lockup; icon on its own | [Anatomy](#anatomy) |
46
+ | Colour versions | 4 versions, 3 colours: yellow #FCB017, graphite #2B2A28, white | [Colour versions](/foundations/styles/logos/using-the-logo/#colour-versions) |
47
+ | Clear space | 1 x-height (one hexagon side) on every side | [Clear space](/foundations/styles/logos/using-the-logo/#clear-space) |
48
+ | Minimum size | Lockup 100 px or 25 mm wide; icon 16 px or 6 mm tall | [Minimum size](/foundations/styles/logos/using-the-logo/#minimum-size) |
49
+ | Icon on light backgrounds | Graphite, or yellow on a graphite tile | [The icon on its own](/foundations/styles/logos/using-the-logo/#the-icon-on-its-own) |
50
+ | Spelling | The logo reads “beehexa”, lowercase. Product logos keep the product's spelling: “HexaSync”. In running text, write Beehexa. | [Product logos](/foundations/styles/logos/product-logos/) |
51
+
52
+ ## What changed from the 2018 logo
53
+
54
+ | | 2018 logo | Refreshed logo |
55
+ |---|---|---|
56
+ | Typeface | Ubuntu, another company's typeface, without Vietnamese letters | Inter Display, Beehexa's typeface, outlined |
57
+ | Wordmark colour | Yellow | Graphite on light backgrounds, white on dark |
58
+ | Icon | No grid; stroke thinner than the gaps (0.8 : 1) | 28-band grid; stroke and gap equal (1 : 1), stroke 11% thicker |
59
+ | Icon to text spacing | No rule | 10 bands, measured from the icon |
60
+ | Clear space | One chevron layer, about 0.22 × the icon height | 1 x-height |
61
+ | Minimum size | 120 px or 30 mm | 100 px or 25 mm |
62
+ | Colour versions | All yellow | 4 versions |
63
+
64
+ The 2018 logo stays on existing material until the refreshed logo launches. Don't use it in new work.
@@ -0,0 +1,96 @@
1
+ ---
2
+ title: Placement and containers
3
+ description: Where the logo sits on websites, in documents, email, print, on photos and next to partners; how the icon sits in app icons, avatars and favicons; and the mistakes to avoid.
4
+ order: 2
5
+ audience: web, product UI, documents
6
+ owner: Brand
7
+ updated: 2026-10-23
8
+ ---
9
+ import LogoInUse from '../../../../components/logos/LogoInUse.astro';
10
+ import LogoContainer from '../../../../components/logos/LogoContainer.astro';
11
+ import LogoMistakes from '../../../../components/logos/LogoMistakes.astro';
12
+
13
+ ## On a website
14
+
15
+ - Put the lockup at the left of the header and link it to the home page.
16
+ - Size: an icon of 24–32 px in a header 56–64 px tall. This site uses a 24 px icon in a 56 px header.
17
+ - Keep the [clear space](/foundations/styles/logos/using-the-logo/#clear-space) and follow the [sharp on screen](/foundations/styles/logos/using-the-logo/#sharp-on-screen) rules.
18
+ - Inside HexaSync, show the HexaSync logo instead. See [Product logos](/foundations/styles/logos/product-logos/).
19
+
20
+ <LogoInUse only={['header', 'app']} />
21
+
22
+ ## In documents and slides
23
+
24
+ - Place the lockup at the top left of the first page or the cover slide, with its clear space.
25
+ - At least 25 mm wide in print.
26
+ - Choose the colour version from the background: version 1 on paper and light slides, version 2 on dark slides.
27
+
28
+ <LogoInUse only={['document', 'slide']} />
29
+
30
+ ## In email
31
+
32
+ - Put the lockup under the sender's name, as a PNG exported at 2× and at least 100 px wide. Many email clients don't show SVG.
33
+ - Use alt text “Beehexa”, so the signature still reads when images are blocked.
34
+
35
+ <LogoInUse only={['email']} />
36
+
37
+ ## In print
38
+
39
+ - Business cards: the lockup centred on the front, version 2 on graphite; name and details on the back, on white.
40
+ - Keep the lockup at least 25 mm wide and the clear space free of folds, trims and holes.
41
+
42
+ <LogoInUse only={['card']} />
43
+
44
+ ## On photos and brand colour
45
+
46
+ - On a photo, use version 3 (white) on a calm area, usually a corner, with its clear space. Never put a box behind the logo to rescue a busy picture: choose another crop.
47
+ - On brand yellow, use version 4 (graphite).
48
+
49
+ <LogoInUse only={['photo', 'yellow']} />
50
+
51
+ ## Next to a partner logo
52
+
53
+ When Beehexa appears with a partner, such as on an integration page, use the horizontal lockup. Give both logos the same visual weight, keep each one's clear space, and separate them with a thin vertical line.
54
+
55
+ <LogoInUse only={['partner']} />
56
+
57
+ ## The icon in a tile: the 3-side rule
58
+
59
+ App icons and avatars put the icon inside a tile, and platforms crop that tile to a rounded square or a circle. The tile's edge is the boundary, so the icon uses its own rule, measured in hexagon sides:
60
+
61
+ - The tile is 3 sides wide.
62
+ - The icon is 2 sides tall, two thirds of the tile, centred.
63
+ - That leaves half a side above and below.
64
+
65
+ <LogoContainer />
66
+
67
+ | File | Tile | Icon height | Background |
68
+ |---|---|---|---|
69
+ | apple-touch-icon.png | 180 px | 120 px | Graphite #2B2A28 |
70
+ | icon-192.png, icon-512.png | 192 and 512 px | 128 and 341 px | Graphite #2B2A28 |
71
+ | icon-maskable-512.png | 512 px | 341 px, inside the 80% safe circle | Graphite #2B2A28 |
72
+ | avatar-800.png | 800 px | 533 px | Graphite #2B2A28 |
73
+
74
+ The icon is yellow on a graphite tile: it keeps the brand colour and reaches 7.76 : 1.
75
+
76
+ ## Favicons
77
+
78
+ The favicon is the icon alone, in yellow, on a transparent background, filling its square.
79
+
80
+ | File | Sizes | Notes |
81
+ |---|---|---|
82
+ | favicon.svg | Any | Used by current browsers. Smooth edges, drawn from the master icon. |
83
+ | favicon.ico | 16, 32 and 48 px | For older browsers and tools. Each size is drawn large and reduced, which keeps the edges smooth. |
84
+
85
+ ```html
86
+ <link rel="icon" href="/favicon.ico" sizes="48x48">
87
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
88
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png">
89
+ <link rel="manifest" href="/site.webmanifest">
90
+ ```
91
+
92
+ <LogoInUse only={['tab', 'avatar']} />
93
+
94
+ ## Common mistakes
95
+
96
+ <LogoMistakes />