@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,165 @@
1
+ /* Spacing and Layout pages: the scale, spacing redlines, page anatomy, page widths, grid and breakpoints.
2
+ Sizes come from the spacing tokens, so the illustrations show the real values. */
3
+
4
+ .sp-figure, .ly-figure { margin: 0 0 var(--bh-space-300); }
5
+ .sp-figure > figcaption, .ly-figure > figcaption { margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-small); }
6
+ .sp-figure > figcaption b, .ly-figure > figcaption b { color: var(--c-ink); }
7
+
8
+ /* Tinted space in redlines. Blue is the usual colour of measurements, and it reads in both themes. */
9
+ .sp-root, .ly-root {
10
+ --sp-mark: var(--bh-color-background-info-subtle);
11
+ --sp-mark-edge: var(--bh-color-border-info-subtle);
12
+ --sp-mark-ink: var(--bh-color-text-info);
13
+ }
14
+
15
+ /* Lists drawn as figures: no list indent. */
16
+ .prose .sp-scale, .prose .ly-legend, .prose .ly-bp { padding: 0; }
17
+
18
+ /* Scale */
19
+ .sp-scale { display: grid; margin: 0 0 var(--bh-space-300); padding: 0; border-top: var(--bh-border-width-default) solid var(--c-line); list-style: none; }
20
+ .prose .sp-scale li { display: grid; grid-template-columns: 9.5rem 3.5rem 5.5rem minmax(0, 1fr); align-items: center; gap: var(--bh-space-200); margin: 0; padding: var(--bh-space-150) 0; border-bottom: var(--bh-border-width-default) solid var(--c-line); }
21
+ .sp-name code { font: var(--bh-font-code-default); }
22
+ .sp-var { display: block; margin-top: var(--bh-space-050); color: var(--c-muted); font: var(--bh-font-body-small); overflow-wrap: anywhere; }
23
+ .sp-px { color: var(--c-ink); font: var(--bh-font-label-default); font-variant-numeric: tabular-nums; }
24
+ .sp-px small { display: block; color: var(--c-muted); font: var(--bh-font-body-small); }
25
+ .sp-bar { display: block; height: var(--bh-space-300); background: var(--bh-color-background-info-bold); border-radius: var(--bh-radius-050); }
26
+ .sp-bar.is-zero { width: var(--bh-border-width-default); background: var(--c-line); }
27
+ .sp-bar.is-hairline { border-radius: 0; }
28
+ .sp-use { color: var(--c-muted); font: var(--bh-font-body-default); }
29
+ @container prose (width < 560px) {
30
+ .prose .sp-scale li { grid-template-columns: minmax(0, 1fr) auto; gap: var(--bh-space-100) var(--bh-space-200); }
31
+ .sp-px { text-align: right; }
32
+ .sp-bar-cell, .sp-use { grid-column: 1 / -1; }
33
+ }
34
+
35
+ /* Redline card */
36
+ .sp-stage { display: grid; place-items: center; padding: var(--bh-space-300) var(--bh-space-100); border: var(--bh-border-width-default) solid var(--c-line); border-radius: var(--bh-radius-150); background: var(--c-surf); }
37
+ .sp-card { width: 100%; max-width: 26rem; padding: var(--bh-space-300); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-150); background: linear-gradient(var(--bh-color-surface), var(--bh-color-surface)) content-box, var(--sp-mark); }
38
+ .sp-stack { display: flex; flex-direction: column; }
39
+ .sp-row { display: flex; align-items: center; }
40
+ .sp-row.is-end { justify-content: flex-end; }
41
+ .sp-gap { position: relative; flex: none; background: var(--sp-mark); }
42
+ .sp-gap.is-v { width: 100%; }
43
+ .sp-gap.is-h { align-self: stretch; }
44
+ .sp-tag { position: absolute; z-index: 1; padding: 0 var(--bh-space-050); border-radius: var(--bh-radius-050); color: var(--sp-mark-ink); background: var(--bh-color-surface); box-shadow: 0 0 0 var(--bh-border-width-default) var(--sp-mark-edge); white-space: nowrap; font: var(--bh-font-label-small); font-variant-numeric: tabular-nums; }
45
+ .sp-gap.is-v > .sp-tag { top: 50%; right: calc(-1 * var(--bh-space-150)); transform: translate(50%, -50%); }
46
+ .sp-gap.is-h > .sp-tag { bottom: 100%; left: 50%; transform: translate(-50%, calc(-1 * var(--bh-space-050))); }
47
+ .sp-card-pad { position: relative; }
48
+ .sp-card-pad > .sp-tag { top: calc(-1 * var(--bh-space-300)); right: 0; transform: translateY(calc(-50% + var(--bh-space-150))); }
49
+ .sp-gap.is-h > .sp-tag.is-below { top: 100%; bottom: auto; transform: translate(-50%, 0); }
50
+ .sp-icon { flex: none; width: var(--bh-space-200); height: var(--bh-space-200); color: var(--bh-color-icon); }
51
+ .sp-title { color: var(--bh-color-text); font: var(--bh-font-heading-small); }
52
+ .sp-desc { color: var(--bh-color-text-subtle); font: var(--bh-font-body-default); }
53
+ .sp-label { color: var(--bh-color-text); font: var(--bh-font-label-default); }
54
+ .sp-input { display: flex; align-items: stretch; min-width: 0; height: var(--bh-space-400); border: var(--bh-border-width-default) solid var(--bh-color-border-bold); border-radius: var(--bh-radius-100); background: var(--bh-color-surface); }
55
+ .sp-input > span:not(.sp-gap) { align-self: center; overflow: hidden; color: var(--bh-color-text-subtle); white-space: nowrap; text-overflow: ellipsis; font: var(--bh-font-body-default); }
56
+ .sp-input .sp-gap.is-h { margin: calc(-1 * var(--bh-border-width-default)) 0; }
57
+ .sp-btn { display: inline-flex; flex: none; align-items: center; height: var(--bh-size-control-default); padding: 0 var(--bh-space-200); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-100); color: var(--bh-color-text); background: var(--bh-color-surface); font: var(--bh-font-label-default); }
58
+ .sp-btn.is-primary { border-color: var(--bh-color-background-neutral-bold); color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); }
59
+ .sp-btn.is-small { height: var(--bh-size-control-small); padding: 0 var(--bh-space-100); font: var(--bh-font-label-small); }
60
+ .sp-btn.is-large { height: var(--bh-size-control-large); padding: 0 var(--bh-space-200); }
61
+ .sp-legend { display: flex; flex-wrap: wrap; align-items: center; gap: var(--bh-space-100); }
62
+ .sp-swatch { display: inline-block; width: var(--bh-space-200); height: var(--bh-space-200); border-radius: var(--bh-radius-050); background: var(--sp-mark); box-shadow: inset 0 0 0 var(--bh-border-width-default) var(--sp-mark-edge); vertical-align: middle; }
63
+ @container prose (min-width: 560px) { .sp-stage { padding: var(--bh-space-400) var(--bh-space-200); } .sp-gap.is-v > .sp-tag { right: 0; transform: translate(calc(100% + var(--bh-space-300) + var(--bh-space-050)), -50%); } }
64
+
65
+ /* Padding and gap */
66
+ .sp-pair { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
67
+ .sp-pair > figure { margin: 0; border: var(--bh-border-width-default) solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
68
+ .sp-pair .sp-pair-stage { display: grid; place-items: center; min-height: 8rem; padding: var(--bh-space-300) var(--bh-space-200); background: var(--c-surf); }
69
+ .sp-pair figcaption { display: grid; gap: var(--bh-space-050); padding: var(--bh-space-150) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
70
+ .sp-pair figcaption b { color: var(--c-ink); font: var(--bh-font-label-default); }
71
+ .sp-padbox { padding: var(--bh-space-300); border: var(--bh-border-width-default) dashed var(--sp-mark-edge); border-radius: var(--bh-radius-100); background: linear-gradient(var(--bh-color-surface), var(--bh-color-surface)) content-box, var(--sp-mark); color: var(--bh-color-text); font: var(--bh-font-label-default); }
72
+ .sp-chip { display: inline-flex; align-items: center; height: var(--bh-space-400); padding: 0 var(--bh-space-150); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-100); color: var(--bh-color-text); background: var(--bh-color-surface); white-space: nowrap; font: var(--bh-font-label-default); }
73
+ @container prose (min-width: 640px) { .sp-pair { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
74
+
75
+ /* Do / Don't */
76
+ .sp-dd { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
77
+ .sp-dd-panel { margin: 0; border: var(--bh-border-width-default) solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
78
+ .sp-dd-panel figcaption { padding: var(--bh-space-100) var(--bh-space-200); border-bottom: 2px solid; font: var(--bh-font-label-default); }
79
+ .sp-dd-panel.is-do figcaption { border-color: var(--bh-color-border-success); color: var(--bh-color-text-success); }
80
+ .sp-dd-panel.is-dont figcaption { border-color: var(--bh-color-border-danger); color: var(--bh-color-text-danger); }
81
+ .sp-dd-stage { display: grid; place-items: center; min-height: 9rem; padding: var(--bh-space-200); background: var(--c-surf); }
82
+ .sp-dd-panel p { margin: 0; padding: var(--bh-space-150) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
83
+ .sp-mini { display: flex; flex-direction: column; width: 100%; max-width: 15rem; }
84
+ .sp-mini .sp-input { height: var(--bh-space-400); }
85
+ .sp-mini-group { color: var(--bh-color-text); font: var(--bh-font-heading-xsmall); }
86
+ .sp-badge-host { position: relative; display: inline-grid; place-items: center; width: var(--bh-space-400); height: var(--bh-space-400); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-100); background: var(--bh-color-surface); color: var(--bh-color-icon); }
87
+ .sp-badge { position: absolute; top: var(--bh-space-025); right: var(--bh-space-025); width: var(--bh-space-100); height: var(--bh-space-100); border-radius: var(--bh-radius-full); background: var(--bh-color-background-danger-bold); }
88
+ .sp-dd-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; }
89
+ @container prose (min-width: 640px) { .sp-dd { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
90
+
91
+ /* Layout: SVG diagrams drawn at real pixel sizes and scaled to fit */
92
+ .ly-pair { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 1fr); align-items: start; gap: var(--bh-space-300); margin: 0 0 var(--bh-space-300); }
93
+ .ly-pair > figure { margin: 0; }
94
+ .ly-pair figcaption { margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-small); }
95
+ .ly-pair figcaption b { color: var(--c-ink); }
96
+ .ly-svg { display: block; width: 100%; height: auto; border: var(--bh-border-width-default) solid var(--c-line); border-radius: var(--bh-radius-100); background: var(--bh-color-surface-page); }
97
+ .ly-phone .ly-svg { max-width: 15rem; }
98
+ @container prose (width < 640px) {
99
+ .ly-pair { grid-template-columns: minmax(0, 1fr); }
100
+ .ly-phone .ly-svg { margin-inline: auto; }
101
+ }
102
+ .ly-svg .f-plain { fill: var(--bh-color-surface); }
103
+ .ly-svg .f-page { fill: var(--bh-color-surface-page); }
104
+ .ly-svg .f-surface { fill: var(--bh-color-surface); stroke: var(--bh-color-border); stroke-width: 2; }
105
+ .ly-svg .f-subtle { fill: var(--bh-color-surface-subtle); }
106
+ .ly-svg .f-line { fill: var(--bh-color-border); }
107
+ .ly-svg .f-skel { fill: var(--bh-color-skeleton); }
108
+ .ly-svg .f-skel-subtle { fill: var(--bh-color-skeleton-subtle); }
109
+ .ly-svg .f-selected { fill: var(--bh-color-background-selected); }
110
+ .ly-svg .f-indicator { fill: var(--bh-color-border-selected); }
111
+ .ly-svg .f-primary { fill: var(--bh-color-background-neutral-bold); }
112
+ .ly-svg .f-field { fill: var(--bh-color-surface); stroke: var(--bh-color-border-bold); stroke-width: 2; }
113
+ .ly-svg .f-mark { fill: var(--sp-mark); }
114
+ .ly-svg .f-col { fill: var(--bh-color-background-danger-subtle); }
115
+ .ly-svg .f-block { fill: var(--bh-color-surface); fill-opacity: 0.6; stroke: var(--bh-color-border-bold); stroke-width: 2; stroke-dasharray: 8 6; }
116
+ .ly-svg .s-dim { stroke: var(--sp-mark-ink); stroke-width: 2; fill: none; }
117
+ .ly-svg .t-dim { fill: var(--sp-mark-ink); font-family: var(--bh-font-family-sans); font-weight: 600; }
118
+ .ly-svg .t-label { fill: var(--bh-color-text); font-family: var(--bh-font-family-sans); }
119
+ .ly-svg .f-inverse { fill: var(--bh-color-surface-inverse); }
120
+ .ly-svg .t-inverse { fill: var(--bh-color-text-inverse); font-family: var(--bh-font-family-sans); }
121
+ .ly-svg .t-ink { fill: var(--bh-color-text); font-family: var(--bh-font-family-sans); font-weight: 600; }
122
+ .ly-svg .c-call { fill: var(--bh-color-background-neutral-bold); }
123
+ .ly-svg .t-call { fill: var(--bh-color-text-inverse); font-family: var(--bh-font-family-sans); font-weight: 700; text-anchor: middle; dominant-baseline: central; }
124
+ .ly-svg .s-icon { stroke: var(--bh-color-icon); stroke-width: 2.5; fill: none; stroke-linecap: round; }
125
+
126
+ .ly-legend { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-100) var(--bh-space-300); margin: 0 0 var(--bh-space-300); padding: 0; list-style: none; counter-reset: ly; }
127
+ .prose .ly-legend li { display: grid; grid-template-columns: var(--bh-space-300) minmax(0, 1fr); gap: var(--bh-space-100); margin: 0; color: var(--c-muted); font: var(--bh-font-body-default); counter-increment: ly; }
128
+ .prose .ly-legend li::before { content: counter(ly); display: grid; place-items: center; width: var(--bh-space-300); height: var(--bh-space-300); border-radius: var(--bh-radius-full); color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); font: var(--bh-font-label-small); }
129
+ .ly-legend b { color: var(--c-ink); }
130
+ @container prose (min-width: 560px) { .ly-legend { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
131
+
132
+ /* Page widths: three windows of 1920 px, drawn at real size and scaled down. Strokes keep their screen width. */
133
+ .ly-widths { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
134
+ .ly-widths > figure { margin: 0; }
135
+ .ly-widths .ly-svg * { vector-effect: non-scaling-stroke; }
136
+ .ly-widths .ly-svg .f-surface, .ly-widths .ly-svg .f-field { stroke-width: 1; }
137
+ .ly-widths figcaption { display: grid; gap: var(--bh-space-025); margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-small); }
138
+ .ly-widths figcaption b { color: var(--c-ink); font: var(--bh-font-label-default); }
139
+ @container prose (min-width: 640px) { .ly-widths { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
140
+
141
+ /* Control heights */
142
+ .ly-controls { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
143
+ .ly-controls > figure { display: grid; grid-template-rows: auto 1fr; margin: 0; border: var(--bh-border-width-default) solid var(--c-line); border-radius: var(--bh-radius-150); overflow: hidden; }
144
+ .ly-controls-stage { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--bh-space-100); min-height: 6rem; padding: var(--bh-space-200); background: var(--c-surf); }
145
+ .ly-controls figcaption { display: grid; align-content: start; gap: var(--bh-space-050); padding: var(--bh-space-150) var(--bh-space-200); color: var(--c-muted); font: var(--bh-font-body-default); }
146
+ .ly-controls figcaption b { color: var(--c-ink); font: var(--bh-font-label-default); }
147
+ .ly-ruler { position: relative; display: inline-flex; align-items: center; }
148
+ .ly-ruler::before { content: ''; position: absolute; top: 0; bottom: 0; left: calc(-1 * var(--bh-space-100)); border-left: 2px solid var(--sp-mark-ink); }
149
+ .ly-field { display: inline-flex; align-items: center; min-width: 0; width: 7.5rem; padding: 0 var(--bh-space-150); border: var(--bh-border-width-default) solid var(--bh-color-border-bold); border-radius: var(--bh-radius-100); color: var(--bh-color-text-subtle); background: var(--bh-color-surface); white-space: nowrap; font: var(--bh-font-body-default); }
150
+ .ly-field.is-small { height: var(--bh-size-control-small); padding: 0 var(--bh-space-100); font: var(--bh-font-body-small); }
151
+ .ly-field.is-default { height: var(--bh-size-control-default); }
152
+ .ly-field.is-large { height: var(--bh-size-control-large); }
153
+ @container prose (min-width: 640px) { .ly-controls { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
154
+
155
+ /* Breakpoints */
156
+ .ly-bp { display: flex; margin: 0 0 var(--bh-space-100); padding: 0; list-style: none; }
157
+ .prose .ly-bp li { position: relative; display: grid; align-content: start; gap: var(--bh-space-025); min-width: 0; margin: 0; padding: var(--bh-space-100) var(--bh-space-100) var(--bh-space-150); border-left: 2px solid var(--bh-color-border-bold); background: var(--c-surf); }
158
+ .prose .ly-bp li:nth-child(even) { background: var(--bh-color-background-neutral); }
159
+ .ly-bp b { color: var(--c-ink); font: var(--bh-font-label-default); }
160
+ .ly-bp span { color: var(--c-muted); font: var(--bh-font-body-small); font-variant-numeric: tabular-nums; }
161
+ .ly-bp-scale { margin: 0 0 var(--bh-space-300); color: var(--c-muted); font: var(--bh-font-body-small); }
162
+ @container prose (width < 560px) {
163
+ .ly-bp { flex-direction: column; }
164
+ .prose .ly-bp li { flex: none !important; grid-template-columns: 3rem minmax(0, 1fr); border-left: 0; border-top: 2px solid var(--bh-color-border-bold); }
165
+ }
@@ -0,0 +1,236 @@
1
+ /* Logos pages: stages, diagrams and examples. Colour roles come from chrome.css. */
2
+
3
+ /* A stage is a fixed-height panel that centres one logo on whole pixels.
4
+ --stage-h is the panel height; the logo sets --w and --h (LogoSvg.astro). */
5
+ .logo-stage { --stage-h: 200px; position: relative; display: flex; align-items: flex-start; height: var(--stage-h); overflow: hidden; }
6
+ .px-center {
7
+ display: block; flex: none;
8
+ margin-left: max(0px, calc((100% - var(--w)) / 2));
9
+ margin-left: max(0px, round(down, (100% - var(--w)) / 2, 1px));
10
+ margin-top: calc((var(--stage-h) - var(--h)) / 2);
11
+ margin-top: round(down, (var(--stage-h) - var(--h)) / 2, 1px);
12
+ }
13
+ .bg-white { background: #ffffff; }
14
+ /* A figure wider than its panel, centred and cropped by it: the grid runs edge to edge. */
15
+ .px-center.bleed { max-width: none; margin-left: calc((100% - var(--w)) / 2); margin-left: round(down, (100% - var(--w)) / 2, 1px); }
16
+ .bg-paper { background: #f8f8f8; }
17
+ .bg-graphite { background: #2b2a28; }
18
+ .bg-blue { background: #0077d5; }
19
+ .bg-yellow { background: #fcb017; }
20
+
21
+ /* Card grid shared by colour versions, misuse and examples. */
22
+ .logo-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
23
+ /* Column widths rounded down to whole pixels, so every card, and the logo centred in it, starts on a pixel edge. */
24
+ .logo-cards { grid-template-columns: round(down, (100% - 16px) / 2, 1px) minmax(0, 1fr); }
25
+ .logo-cards[style*='--cols:3'] { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-columns: round(down, (100% - 32px) / 3, 1px) round(down, (100% - 32px) / 3, 1px) minmax(0, 1fr); }
26
+ .logo-card { overflow: hidden; border: 1px solid var(--c-line); border-radius: 12px; background: var(--c-bg); }
27
+ .logo-card > .logo-stage { border-bottom: 1px solid var(--c-line); }
28
+ .logo-card-body { padding: var(--bh-space-150) var(--bh-space-200) var(--bh-space-200); }
29
+ .prose .logo-card-body p { margin: 0; color: var(--c-muted); font: var(--bh-font-body-default); }
30
+ .prose .logo-card-body .card-title { margin: 0 0 var(--bh-space-050); color: var(--c-ink); font: var(--bh-font-heading-small); }
31
+ .card-codes { display: flex; flex-wrap: wrap; gap: var(--bh-space-075); margin: var(--bh-space-100) 0 0; }
32
+ .card-codes span { display: inline-flex; align-items: center; gap: var(--bh-space-075); padding: var(--bh-space-025) var(--bh-space-100) var(--bh-space-025) var(--bh-space-050); border: 1px solid var(--c-line); border-radius: 999px; color: var(--c-ink); font: var(--bh-font-body-small); }
33
+ .prose .card-codes code { padding: 0; background: none; font-size: inherit; }
34
+ .card-codes i { width: 12px; height: 12px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgb(0 0 0 / 15%); }
35
+
36
+ /* Do / Don't labels on misuse cards. */
37
+ .verdict { display: inline-flex; align-items: center; gap: var(--bh-space-075); margin-bottom: var(--bh-space-050); font: var(--bh-font-heading-xsmall); }
38
+ .verdict svg { flex: none; }
39
+ .verdict-do { color: var(--bh-color-text-success); }
40
+ .verdict-dont { color: var(--bh-color-text-danger); }
41
+ .logo-card.is-dont > .logo-stage { box-shadow: inset 0 -3px 0 var(--bh-color-border-danger); }
42
+ .logo-card.is-do > .logo-stage { box-shadow: inset 0 -3px 0 var(--bh-color-border-success); }
43
+
44
+ /* Diagrams drawn in SVG. They always sit on a white or paper stage, so their colours are fixed
45
+ and do not follow the page theme. */
46
+ .logo-figure { margin: 0 0 var(--bh-space-300); }
47
+ .logo-figure > .logo-stage { border: 1px solid var(--c-line); border-radius: 12px; }
48
+ .logo-figure figcaption { margin-top: var(--bh-space-100); color: var(--c-muted); font: var(--bh-font-body-small); }
49
+ .diagram { display: block; max-width: 100%; height: auto; }
50
+ .diagram .d-guide { fill: none; stroke: #2b2a28; opacity: .45; }
51
+ .diagram .d-zone { fill: #2b2a28; opacity: .045; }
52
+ .diagram .d-measure { fill: none; stroke: #2b2a28; }
53
+ .diagram .d-label { fill: #2b2a28; font-family: var(--bh-font-family-sans); font-weight: var(--bh-font-weight-medium); --bh-font-features: "cv05", "cv08", "tnum"; paint-order: stroke; stroke: #ffffff; stroke-linejoin: round; }
54
+ .diagram .d-note { fill: #5f5e5c; font-family: var(--bh-font-family-sans); font-weight: var(--bh-font-weight-medium); }
55
+ .diagram .d-grid { fill: none; stroke: #2b2a28; opacity: .13; }
56
+ .diagram .d-ink { fill: #2b2a28; }
57
+ .anatomy-stage { --stage-h: 288px; }
58
+
59
+ /* Legend under a diagram. */
60
+ .prose .diagram-legend { display: grid; grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); gap: var(--bh-space-150) var(--bh-space-300); margin: 0 0 var(--bh-space-300); padding: 0; list-style: none; }
61
+ .prose .diagram-legend li { margin: 0; padding-left: var(--bh-space-150); border-left: 2px solid var(--c-gold); color: var(--c-muted); font: var(--bh-font-body-default); }
62
+ .prose .diagram-legend b { display: block; color: var(--c-ink); }
63
+
64
+ /* Download hero. round() keeps the dark panel on a whole pixel when the column width is odd. */
65
+ .logo-hero { margin: 0 0 var(--bh-space-200); }
66
+ .logo-hero-panels { display: grid; grid-template-columns: 1fr 1fr; grid-template-columns: round(down, 50%, 1px) 1fr; overflow: hidden; border: 1px solid var(--c-line); border-radius: 12px; }
67
+ .hero-sm { display: none !important; }
68
+ .logo-hero-bar { display: flex; align-items: center; justify-content: space-between; gap: var(--bh-space-200); margin-top: var(--bh-space-150); color: var(--c-muted); font: var(--bh-font-body-small); }
69
+
70
+ @container prose (width < 640px) {
71
+ .logo-cards, .logo-cards[style*='--cols:3'] { grid-template-columns: round(down, (100% - 16px) / 2, 1px) minmax(0, 1fr); }
72
+ .prose .diagram-legend { grid-template-columns: minmax(0, 1fr); }
73
+ }
74
+ @container prose (width < 560px) {
75
+ .logo-cards, .logo-cards[style*='--cols:3'] { grid-template-columns: minmax(0, 1fr); }
76
+ }
77
+
78
+ @container prose (width < 640px) {
79
+ .logo-hero-panels { grid-template-columns: minmax(0, 1fr); }
80
+ .hero-stage { --stage-h: 120px; }
81
+ .hero-lg { display: none !important; }
82
+ .hero-sm { display: block !important; }
83
+ .logo-hero-bar { flex-direction: column; align-items: stretch; }
84
+ }
85
+ .construction-stage { --stage-h: 420px; }
86
+
87
+ /* One icon, three meanings. */
88
+ .prose .logo-meanings { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); padding: 0; list-style: none; }
89
+ .prose .logo-meanings li { overflow: hidden; margin: 0; border: 1px solid var(--c-line); border-radius: 12px; }
90
+ .meaning-stage { --stage-h: 164px; border-bottom: 1px solid var(--c-line); }
91
+ .meaning-text { padding: var(--bh-space-150) var(--bh-space-200) var(--bh-space-200); }
92
+ .prose .meaning-text p { margin: 0; color: var(--c-muted); font: var(--bh-font-body-default); }
93
+ .prose .meaning-text .meaning-title { display: flex; align-items: center; gap: var(--bh-space-100); margin-bottom: var(--bh-space-075); color: var(--c-ink); font: var(--bh-font-heading-small); }
94
+ .meaning-n { display: inline-grid; flex: none; place-items: center; width: 22px; height: 22px; border-radius: 50%; color: var(--bh-color-text); background: var(--bh-color-background-brand-subtle); font: var(--bh-font-label-small); }
95
+ .meaning-word { color: var(--c-muted); }
96
+ @container prose (min-width: 760px) { .prose .logo-meanings { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
97
+ .version-stage { --stage-h: 168px; }
98
+ .clear-stage { --stage-h: 272px; }
99
+ .minsize-stage { --stage-h: 120px; }
100
+ .minsize-item { display: flex; flex-direction: column; align-items: center; gap: var(--bh-space-100); width: var(--w); height: var(--h); }
101
+ .minsize-item svg { display: block; }
102
+ .minsize-rule { align-self: stretch; padding-bottom: var(--bh-space-025); border: 1px solid #8e8c89; border-top: 0; color: #5f5e5c; --bh-font-features: "cv05", "cv08", "tnum"; text-align: center; font: var(--bh-font-label-small); }
103
+ .minsize-caption { color: #5f5e5c; --bh-font-features: "cv05", "cv08", "tnum"; white-space: nowrap; font: var(--bh-font-label-small); }
104
+ .misuse-stage { --stage-h: 120px; }
105
+ .container-stage { --stage-h: 360px; }
106
+ .app-icons { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
107
+ .app-icons figure { display: flex; flex-direction: column; align-items: center; gap: var(--bh-space-100); margin: 0; padding: var(--bh-space-250) var(--bh-space-150) var(--bh-space-200); border: 1px solid var(--c-line); border-radius: 12px; }
108
+ .app-icon { display: block; width: 96px; height: 96px; }
109
+ .shape-rounded { border-radius: 22px; }
110
+ .shape-circle { border-radius: 50%; }
111
+ .app-icons figcaption { color: var(--c-muted); text-align: center; font: var(--bh-font-body-small); }
112
+ .app-icons figcaption b { display: block; color: var(--c-ink); }
113
+ @container prose (min-width: 640px) { .app-icons { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
114
+
115
+ /* In-use mock-ups. Fixed colours: they show real surfaces, not the page theme. Text inside a
116
+ mock-up is drawn to the scale of the mock (a business card, a browser tab), so it does not use
117
+ the text styles. */
118
+ .mock { position: relative; height: 200px; overflow: hidden; border-bottom: 1px solid var(--c-line); background: #f8f8f8; }
119
+ .mock svg { display: block; }
120
+ .mock i, .mock b { display: block; height: 8px; border-radius: 4px; background: #dfdedd; }
121
+ .mock b { background: #c4c4c2; }
122
+ .mock-site, .mock-app { background: #ffffff; }
123
+ .mock-bar { display: flex; align-items: center; justify-content: space-between; height: 56px; padding: 0 var(--bh-space-250); border-bottom: 1px solid #e8e8e7; background: #ffffff; }
124
+ .mock-bar-dark { height: 48px; border-color: #2b2a28; background: #2b2a28; }
125
+ .mock-links { display: flex; align-items: center; gap: var(--bh-space-150); }
126
+ .mock-links i { width: 40px; }
127
+ .mock-links b { width: 64px; height: 24px; border-radius: 6px; background: #2b2a28; }
128
+ .mock-bar-dark .mock-links i { background: #51504e; }
129
+ .mock-bar-dark .mock-links b.dot { width: 24px; height: 24px; border-radius: 50%; background: #fcb017; }
130
+ .mock-hero { display: grid; gap: var(--bh-space-150); padding: var(--bh-space-400) var(--bh-space-250); }
131
+ .mock-hero i { height: 14px; }
132
+ .mock-hero b { width: 96px; height: 28px; margin-top: var(--bh-space-075); border-radius: 6px; background: #2b2a28; }
133
+ .mock-body { display: grid; grid-template-columns: 120px 1fr; height: calc(100% - 48px); }
134
+ .mock-nav { display: grid; align-content: start; gap: var(--bh-space-150); padding: var(--bh-space-200); border-right: 1px solid #e8e8e7; background: #f8f8f8; }
135
+ .mock-cards { display: grid; grid-template-columns: 1fr 1fr; gap: var(--bh-space-150); padding: var(--bh-space-200); }
136
+ .mock-cards i { height: 44px; border-radius: 8px; background: #f2f2f1; }
137
+ .mock-browser { padding-top: var(--bh-space-200); background: #dee1e6; }
138
+ .mock-tabs { display: flex; gap: var(--bh-space-025); padding: 0 var(--bh-space-150); }
139
+ .mock-tab { display: flex; align-items: center; gap: var(--bh-space-100); width: 200px; height: 36px; padding: 0 var(--bh-space-150); border-radius: 10px 10px 0 0; color: #3c4043; font: var(--bh-font-body-small); }
140
+ .mock-tab.is-active { background: #ffffff; }
141
+ .mock-tab img { display: block; flex: none; }
142
+ .mock-tab i { width: 16px; height: 16px; border-radius: 4px; }
143
+ .mock-tab .ghost { width: 90px; height: 8px; border-radius: 4px; background: #c4c7cc; }
144
+ .mock-url { height: 100%; padding: var(--bh-space-100) var(--bh-space-200); background: #ffffff; }
145
+ .mock-url i { width: 70%; height: 28px; border-radius: 14px; background: #f1f3f4; }
146
+ .mock-social { display: flex; align-items: center; gap: var(--bh-space-200); padding: 0 var(--bh-space-300); background: #ffffff; }
147
+ .mock-avatar { display: block; flex: none; border-radius: 50%; }
148
+ .mock-lines { display: grid; flex: 1; gap: var(--bh-space-100); }
149
+ .mock-lines b { width: 50%; height: 12px; }
150
+ .mock-doc { display: flex; justify-content: center; padding-top: var(--bh-space-250); background: #e8e8e7; }
151
+ .mock-page { display: grid; align-content: start; gap: var(--bh-space-200); width: 200px; height: 260px; padding: var(--bh-space-200); background: #ffffff; box-shadow: 0 2px 8px rgb(0 0 0 / 10%); }
152
+ .mock-page .mock-lines { gap: var(--bh-space-100); margin-top: var(--bh-space-075); }
153
+ .mock-page .mock-lines i { height: 5px; }
154
+ .mock-page .mock-lines b { height: 8px; }
155
+ .mock-partner { display: flex; align-items: center; justify-content: center; gap: var(--bh-space-300); background: #ffffff; }
156
+ .mock-divider { width: 1px; height: 32px; background: #c4c4c2; }
157
+ .mock-partner-logo { display: grid; place-items: center; width: 120px; height: 32px; border: 1px dashed #c4c4c2; border-radius: 6px; color: #8e8c89; font: var(--bh-font-label-small); font-weight: var(--bh-font-weight-semibold); }
158
+ .pair { margin: 0 0 var(--bh-space-300); }
159
+ /* One example on its own: mock-up and text side by side, full width. */
160
+ .logo-cards.inuse.single { grid-template-columns: minmax(0, 1fr); }
161
+ .inuse.single .logo-card { display: grid; grid-template-columns: minmax(0, 1fr); }
162
+ .inuse.single .mock { border-right: 0; border-bottom: 1px solid var(--c-line); }
163
+ .inuse.single .logo-card-body { align-self: center; padding: var(--bh-space-250) var(--bh-space-300); }
164
+ @container prose (min-width: 560px) { .inuse.single .logo-card { grid-template-columns: round(down, 50%, 1px) minmax(0, 1fr); } .inuse.single .mock { border-right: 1px solid var(--c-line); border-bottom: 0; } }
165
+ @container prose (min-width: 560px) { .prose td code { white-space: nowrap; } } /* file names stay on one line where there is room */
166
+ /* Small screens: a diagram wider than the column scales down, so the stage grows to fit it. */
167
+ @container prose (width < 640px) {
168
+ .logo-stage:not(.meaning-stage):not(.bleed-stage):has(> .diagram) { height: auto; padding: var(--bh-space-200) var(--bh-space-150); }
169
+ .logo-stage:not(.meaning-stage):not(.bleed-stage) > .diagram.px-center { margin: 0 auto; }
170
+ .bleed-stage { height: auto; }
171
+ .bleed-stage > .diagram.bleed { width: 170%; max-width: none; height: auto; margin: 0 0 0 -35%; }
172
+ }
173
+
174
+ .fig { display: block; max-width: none; }
175
+
176
+ /* More in-use mock-ups. */
177
+ .mock-desk { display: flex; align-items: center; justify-content: center; gap: var(--bh-space-150); background: #e8e8e7; }
178
+ .mock-slide { display: grid; align-content: space-between; width: 264px; height: 148px; padding: var(--bh-space-150) var(--bh-space-200) var(--bh-space-200); background: #2b2a28; box-shadow: 0 2px 8px rgb(0 0 0 / 14%); }
179
+ .mock-slide .mock-lines b { width: 70%; height: 12px; background: #f8f8f8; }
180
+ .mock-slide .mock-lines i { height: 6px; background: #646361; }
181
+ .mock-email { display: grid; align-content: center; gap: var(--bh-space-150); padding: 0 var(--bh-space-300); background: #ffffff; }
182
+ .mock-email .mock-lines { gap: var(--bh-space-100); }
183
+ .mock-email .mock-lines b { height: 10px; }
184
+ .mock-rule { display: block; width: 64px; height: 1px; background: #dfdedd; }
185
+ .mock-cards-pair { gap: 0; }
186
+ .mock-bizcard { position: relative; display: grid; place-items: center; width: 170px; height: 110px; border-radius: 4px; box-shadow: 0 1px 2px rgb(0 0 0 / 12%), 0 8px 20px rgb(0 0 0 / 12%); }
187
+ .mock-bizcard.is-front { z-index: 1; margin-left: -40px; background: #2b2a28; transform: translateY(18px); }
188
+ .mock-bizcard.is-back { align-content: space-between; justify-items: start; padding: var(--bh-space-150); background: #ffffff; transform: translateY(-14px); }
189
+ .bizcard-text { display: grid; gap: 1px; color: #5f5e5c; font-size: 7px; line-height: 10px; letter-spacing: .01em; }
190
+ .bizcard-text strong { color: #2b2a28; font-size: 9px; font-weight: var(--bh-font-weight-semibold); line-height: 12px; }
191
+ .bizcard-contact { color: #8e8c89; }
192
+ .mock-photo { background: linear-gradient(180deg, #46566b 0%, #8d7a6a 58%, #c99a6b 100%); }
193
+ .mock-photo-hill { position: absolute; inset: auto -10% -38% -10%; height: 70%; border-radius: 50% 50% 0 0; background: linear-gradient(180deg, #2f3a33, #222a25); }
194
+ .mock-photo-logo { position: absolute; top: 24px; left: 24px; }
195
+ .mock-yellow { display: grid; align-content: center; justify-items: center; gap: var(--bh-space-200); background: #fcb017; }
196
+ .mock-yellow .mock-lines { justify-items: center; width: 60%; gap: var(--bh-space-100); }
197
+ .mock-yellow .mock-lines b { width: 80%; height: 10px; background: rgb(43 42 40 / 22%); }
198
+ .mock-login { display: grid; place-items: center; background: #f8f8f8; }
199
+ .mock-login-panel { display: grid; justify-items: center; gap: var(--bh-space-100); width: 200px; padding: var(--bh-space-250); border-radius: 10px; background: #ffffff; box-shadow: 0 1px 3px rgb(0 0 0 / 10%); }
200
+ .mock-login-panel > svg, .mock-login-panel > img { margin-bottom: var(--bh-space-075); }
201
+ .mock-input { display: block; width: 100%; height: 24px; border: 1px solid #dfdedd; border-radius: 6px; }
202
+ .mock-button { display: block; width: 100%; height: 26px; border-radius: 6px; background: #2b2a28; }
203
+ .mock-market { display: grid; align-content: center; gap: var(--bh-space-100); padding: 0 var(--bh-space-300); background: #f8f8f8; }
204
+ .mock-listing { display: flex; align-items: center; gap: var(--bh-space-150); padding: calc(var(--bh-space-100) - 1px) calc(var(--bh-space-150) - 1px); border: 1px solid #e8e8e7; border-radius: 10px; background: #ffffff; }
205
+ .mock-listing img { display: block; flex: none; border-radius: 9px; }
206
+ /* Mock-ups below are drawn at reduced scale, so their text sizes are fixed px, not text styles. */
207
+ .mock-listing span:not(.mock-lines) { display: grid; color: #2b2a28; font-size: 13px; line-height: 16px; }
208
+ .mock-listing small { color: #8e8c89; font-size: 11px; }
209
+ .mock-listing:not(.is-ours) { padding-block: var(--bh-space-075); }
210
+ .mock .mock-tile { flex: none; width: 28px; height: 28px; border-radius: 7px; background: #e8e8e7; }
211
+ .mock-listing .mock-lines { gap: var(--bh-space-075); }
212
+ .mock-listing .mock-lines b { width: 40%; }
213
+
214
+ /* Common mistakes, shown as they look. */
215
+ .mistake-stage { --stage-h: 168px; }
216
+ .mistake-pixels { align-items: center; justify-content: center; gap: var(--bh-space-300); }
217
+ .mistake-pixels figure { display: grid; justify-items: center; gap: var(--bh-space-100); margin: 0; }
218
+ .mistake-pixels svg { display: block; }
219
+ .mistake-pixels figcaption { color: #5f5e5c; font: var(--bh-font-body-small); }
220
+ .mistake-offset { display: block; }
221
+ .mistake-axis { position: absolute; background: repeating-linear-gradient(90deg, #8e8c89 0 3px, transparent 3px 6px); }
222
+ .mistake-axis.is-v { top: 0; bottom: 0; left: 50%; width: 1px; background: repeating-linear-gradient(180deg, #8e8c89 0 3px, transparent 3px 6px); }
223
+ .mistake-axis.is-h { top: 50%; right: 0; left: 0; height: 1px; }
224
+ .mistake-offset-logo { position: absolute; top: calc(50% - 22px); left: calc(50% - 98px); }
225
+ .mistake-browser { display: flex; flex-direction: column; align-items: stretch; background: #202124; }
226
+ .mistake-tabs { display: flex; align-items: flex-end; gap: var(--bh-space-050); padding: var(--bh-space-250) var(--bh-space-200) 0; }
227
+ .mistake-tab { display: flex; flex: none; align-items: center; gap: var(--bh-space-150); width: 210px; height: 52px; padding: 0 var(--bh-space-200); border-radius: 14px 14px 0 0; background: #35363a; }
228
+ .mistake-tab.is-idle { width: 120px; background: transparent; }
229
+ .mistake-tab i { display: block; width: 110px; height: 10px; border-radius: 5px; background: #6f7378; }
230
+ .mistake-tab.is-idle i { width: 80px; background: #4a4d51; }
231
+ .mistake-favicon { display: grid; flex: none; place-items: center; width: 32px; height: 32px; background: #ffffff; }
232
+ .mistake-toolbar { display: flex; align-items: center; height: 64px; padding: 0 var(--bh-space-200); background: #35363a; }
233
+ .mistake-toolbar i { display: block; width: 100%; height: 36px; border-radius: 18px; background: #202124; }
234
+ .mistake-crop { display: grid; place-items: center; }
235
+ .mistake-circle { display: grid; place-items: center; overflow: hidden; width: 96px; height: 96px; border-radius: 50%; background: #2b2a28; }
236
+ .prose .mistakes .logo-card-body b { color: var(--c-ink); }
@@ -0,0 +1,139 @@
1
+ /* Radius and Border pages. Every corner and line uses its token, so the figures show the real values.
2
+ Layout helpers (.sp-dd, .sp-btn, .sp-input, .sp-chip) come from layout.css. */
3
+ .sh-root { --sh-mark: var(--bh-color-background-info-subtle); --sh-mark-edge: var(--bh-color-border-info-subtle); --sh-mark-ink: var(--bh-color-text-info); }
4
+ .prose .sh-scale { padding: 0; }
5
+ .sh-scale { display: grid; margin: 0 0 var(--bh-space-300); padding: 0; border-top: var(--bh-border-width-default) solid var(--bh-color-border); list-style: none; }
6
+ .prose .sh-scale li { display: grid; grid-template-columns: 8.5rem 4rem 4.5rem minmax(0, 1fr); align-items: center; gap: var(--bh-space-200); margin: 0; padding: var(--bh-space-150) 0; border-bottom: var(--bh-border-width-default) solid var(--bh-color-border); }
7
+ .sh-name { display: grid; gap: var(--bh-space-025); min-width: 0; }
8
+ .sh-name small { overflow-wrap: anywhere; color: var(--bh-color-text-subtle); font: var(--bh-font-code-default); font-size: var(--bh-font-size-100); }
9
+ .sh-px { font: var(--bh-font-label-default); font-variant-numeric: tabular-nums; }
10
+ .sh-use { color: var(--bh-color-text-subtle); font: var(--bh-font-body-default); }
11
+ .sh-swatch { display: block; width: var(--bh-space-600); height: var(--bh-space-600); border: var(--bh-border-width-focused) solid var(--bh-color-text); background: var(--bh-color-background-neutral); }
12
+ .sh-line { display: block; width: var(--bh-space-800); height: var(--bh-space-500); border-color: var(--bh-color-text); border-style: solid; border-radius: var(--bh-radius-100); background: var(--bh-color-surface); }
13
+ .sh-accent-prev { border-width: var(--bh-border-width-default); border-color: var(--bh-color-border); background: linear-gradient(to right, var(--bh-color-border-danger) var(--bh-border-width-accent), var(--bh-color-surface) 0) padding-box; }
14
+ @container prose (max-width: 560px) { .prose .sh-scale li { grid-template-columns: 4.5rem minmax(0, 1fr); } .sh-scale .sh-px { grid-column: 2; grid-row: 1; justify-self: end; } .sh-scale .sh-name { grid-column: 2; grid-row: 1; } .sh-scale .sh-prev { grid-row: 1 / span 2; } .sh-scale .sh-use { grid-column: 2; } }
15
+
16
+ /* A figure: stage with live examples, then a caption that names what uses the value. */
17
+ .sh-fig { margin: 0 0 var(--bh-space-300); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-150); overflow: hidden; }
18
+ .sh-stage { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--bh-space-300); min-height: calc(2 * var(--bh-space-800)); padding: var(--bh-space-300); background: var(--bh-color-surface-subtle); }
19
+ .sh-fig figcaption { display: grid; gap: var(--bh-space-050); padding: var(--bh-space-150) var(--bh-space-200); color: var(--bh-color-text-subtle); font: var(--bh-font-body-default); }
20
+ .sh-fig figcaption b { color: var(--bh-color-text); font: var(--bh-font-label-default); }
21
+ .sh-col { display: grid; gap: var(--bh-space-100); justify-items: start; }
22
+ .sh-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--bh-space-100); }
23
+ .sh-label { color: var(--bh-color-text-subtle); font: var(--bh-font-label-small); }
24
+
25
+ /* Small UI parts drawn with tokens. */
26
+ .sh-check { display: inline-grid; place-items: center; width: var(--bh-space-200); height: var(--bh-space-200); border-radius: var(--bh-radius-050); color: var(--bh-color-text-inverse); background: var(--bh-color-background-neutral-bold); }
27
+ .sh-check svg { width: var(--bh-space-150); height: var(--bh-space-150); }
28
+ .sh-tag { display: inline-flex; align-items: center; height: var(--bh-size-control-small); padding: 0 var(--bh-space-100); border-radius: var(--bh-radius-050); color: var(--bh-color-text); background: var(--bh-color-background-neutral); font: var(--bh-font-label-small); }
29
+ .sh-tag.is-pill { border-radius: var(--bh-radius-full); color: var(--bh-color-text-success); background: var(--bh-color-background-success-subtle); }
30
+ .sh-badge { display: inline-grid; place-items: center; min-width: var(--bh-space-250); height: var(--bh-space-250); padding: 0 var(--bh-space-050); border-radius: var(--bh-radius-050); color: var(--bh-color-text-on-bold); background: var(--bh-color-background-danger-bold); font: var(--bh-font-label-small); }
31
+ .sh-menu { display: grid; width: 12rem; padding: var(--bh-space-050); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-100); background: var(--bh-color-surface); box-shadow: var(--bh-elevation-shadow-overlay); }
32
+ .sh-menu > span:not(.sh-pin), .sh-menu > .sh-pin > span:first-child { padding: var(--bh-space-075) var(--bh-space-100); border-radius: var(--bh-radius-050); color: var(--bh-color-text); font: var(--bh-font-body-default); }
33
+ .sh-menu > span:not(.sh-pin).is-on, .sh-menu > .sh-pin > span:first-child.is-on { background: var(--bh-color-background-neutral-subtle-hover); }
34
+ .sh-menu > span:not(.sh-pin).is-focus, .sh-menu > .sh-pin > span:first-child.is-focus { outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: calc(-1 * var(--bh-state-focus-offset)); }
35
+ .sh-tip { position: relative; 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); }
36
+ .sh-card { display: grid; gap: var(--bh-space-050); width: 15rem; padding: var(--bh-space-300); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-150); background: var(--bh-color-surface); }
37
+ .sh-card b { color: var(--bh-color-text); font: var(--bh-font-heading-small); }
38
+ .sh-card span { color: var(--bh-color-text-subtle); font: var(--bh-font-body-default); }
39
+ .sh-card.is-selected { border: var(--bh-border-width-selected) solid var(--bh-color-border-selected); padding: calc(var(--bh-space-300) - var(--bh-border-width-selected) + var(--bh-border-width-default)); }
40
+ .sh-dialog { display: grid; gap: var(--bh-space-200); width: 18rem; padding: var(--bh-space-300); border-radius: var(--bh-radius-200); background: var(--bh-color-surface); box-shadow: var(--bh-elevation-shadow-overlay); }
41
+ .sh-dialog b { font: var(--bh-font-heading-small); }
42
+ .sh-dialog p { margin: 0; color: var(--bh-color-text-subtle); font: var(--bh-font-body-default); }
43
+ .sh-dialog .sh-row { justify-content: flex-end; }
44
+ .sh-group { display: inline-flex; white-space: nowrap; gap: var(--bh-space-050); padding: var(--bh-space-050); border-radius: var(--bh-radius-150); background: var(--bh-color-background-neutral); }
45
+ .sh-group > span:not(.sh-pin), .sh-group > .sh-pin > span:first-child { display: inline-flex; align-items: center; height: var(--bh-size-control-small); padding: 0 var(--bh-space-150); border-radius: var(--bh-radius-100); color: var(--bh-color-text-subtle); font: var(--bh-font-label-default); }
46
+ .sh-group > span:not(.sh-pin).is-on, .sh-group > .sh-pin > span:first-child.is-on { color: var(--bh-color-text); background: var(--bh-color-surface); box-shadow: 0 0 0 var(--bh-border-width-default) var(--bh-color-border); }
47
+ .sh-avatar { display: inline-grid; place-items: center; width: var(--bh-space-600); height: var(--bh-space-600); border-radius: var(--bh-radius-full); color: var(--bh-color-text); background: var(--bh-color-background-neutral); font: var(--bh-font-label-default); }
48
+ .sh-switch { position: relative; width: var(--bh-space-500); height: var(--bh-size-control-small); border-radius: var(--bh-radius-full); background: var(--bh-color-background-neutral-bold); }
49
+ .sh-switch::after { content: ""; position: absolute; top: var(--bh-space-025); right: var(--bh-space-025); width: calc(var(--bh-size-control-small) - 2 * var(--bh-space-025)); height: calc(var(--bh-size-control-small) - 2 * var(--bh-space-025)); border-radius: var(--bh-radius-full); background: var(--bh-color-surface); }
50
+ .sh-frame { display: grid; width: min(100%, 26rem); border: var(--bh-border-width-default) solid var(--bh-color-border); background: var(--bh-color-surface); }
51
+ .sh-frame header { padding: var(--bh-space-100) var(--bh-space-200); border-bottom: var(--bh-border-width-default) solid var(--bh-color-border); font: var(--bh-font-label-default); }
52
+ .sh-table { display: grid; }
53
+ .sh-table > span:not(.sh-pin), .sh-table > .sh-pin > span:first-child { display: grid; grid-template-columns: 5rem minmax(0, 1fr) auto; gap: var(--bh-space-150); padding: var(--bh-space-100) var(--bh-space-200); border-bottom: var(--bh-border-width-default) solid var(--bh-color-border); color: var(--bh-color-text); font: var(--bh-font-body-default); font-variant-numeric: tabular-nums; }
54
+ .sh-table > span:not(.sh-pin):last-child, .sh-table > .sh-pin > span:first-child:last-child { border-bottom: 0; }
55
+ .sh-table > span:not(.sh-pin).is-error, .sh-table > .sh-pin > span:first-child.is-error { box-shadow: inset var(--bh-border-width-accent) 0 0 var(--bh-color-border-danger); }
56
+ .sh-table em { font-style: normal; color: var(--bh-color-text-subtle); }
57
+
58
+ /* Alerts and quotes: the accent bar is a strip clipped by the box, so it follows the corner. */
59
+ .sh-alert { position: relative; display: grid; gap: var(--bh-space-025); width: min(100%, 24rem); padding: var(--bh-space-150) var(--bh-space-200) var(--bh-space-150) calc(var(--bh-space-200) + var(--bh-border-width-accent)); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-100); background: var(--bh-color-surface); overflow: hidden; --sh-bar: var(--bh-color-border-danger); }
60
+ .sh-alert::before { content: ""; position: absolute; inset: 0 auto 0 0; width: var(--bh-border-width-accent); background: var(--sh-bar); }
61
+ .sh-alert.is-warning { --sh-bar: var(--bh-color-border-warning); }
62
+ .sh-alert.is-info { --sh-bar: var(--bh-color-border-info); }
63
+ .sh-alert b { color: var(--bh-color-text); font: var(--bh-font-label-default); }
64
+ .sh-alert span { color: var(--bh-color-text-subtle); font: var(--bh-font-body-default); }
65
+ .sh-alert.is-squared { border-radius: 0 var(--bh-radius-100) var(--bh-radius-100) 0; }
66
+ .sh-alert.is-boxed { border: var(--bh-border-width-accent) solid var(--bh-color-border-danger); padding-left: var(--bh-space-200); }
67
+ .sh-alert.is-boxed::before { display: none; }
68
+ .prose .sh-quote, .sh-quote { margin: 0; max-width: 20rem; padding: var(--bh-space-050) 0 var(--bh-space-050) var(--bh-space-200); border-left: var(--bh-border-width-accent) solid var(--bh-color-border-brand); color: var(--bh-color-text); font: var(--bh-font-body-large); }
69
+
70
+ /* Selected and focus. */
71
+ .sh-tabs { display: flex; gap: var(--bh-space-300); border-bottom: var(--bh-border-width-default) solid var(--bh-color-border); }
72
+ .sh-tabs > span:not(.sh-pin), .sh-tabs > .sh-pin > span:first-child { padding: var(--bh-space-100) 0; color: var(--bh-color-text-subtle); font: var(--bh-font-label-default); }
73
+ .sh-tabs > span:not(.sh-pin).is-on, .sh-tabs > .sh-pin > span:first-child.is-on { color: var(--bh-color-text); box-shadow: inset 0 calc(-1 * var(--sh-sel, var(--bh-border-width-selected))) 0 var(--bh-color-border-selected); }
74
+ .sh-nav { display: grid; gap: var(--bh-space-025); width: 12rem; }
75
+ .sh-nav > span:not(.sh-pin), .sh-nav > .sh-pin > span:first-child { padding: var(--bh-space-075) var(--bh-space-150); border-radius: 0 var(--bh-radius-050) var(--bh-radius-050) 0; color: var(--bh-color-text-subtle); font: var(--bh-font-label-default); }
76
+ .sh-nav > span:not(.sh-pin).is-on, .sh-nav > .sh-pin > span:first-child.is-on { color: var(--bh-color-text); background: var(--bh-color-background-selected); box-shadow: inset var(--bh-border-width-selected) 0 0 var(--bh-color-border-selected); }
77
+ .sh-ring { outline: var(--bh-border-width-focused) solid var(--bh-color-border-focus); outline-offset: var(--bh-state-focus-offset); }
78
+
79
+ /* Nesting figures. */
80
+ .sh-nest-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
81
+ .sh-nest { display: grid; gap: var(--bh-space-150); margin: 0; padding: var(--bh-space-200); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-150); }
82
+ .sh-outer { display: grid; background: var(--sh-mark); box-shadow: inset 0 0 0 var(--bh-border-width-default) var(--sh-mark-edge); }
83
+ .sh-inner { display: grid; place-items: center; min-height: var(--bh-space-600); color: var(--bh-color-text); background: var(--bh-color-surface); box-shadow: 0 0 0 var(--bh-border-width-default) var(--bh-color-border-bold); font: var(--bh-font-label-small); }
84
+ .sh-sum { font: var(--bh-font-code-default); color: var(--bh-color-text); }
85
+ .sh-nest figcaption { color: var(--bh-color-text-subtle); font: var(--bh-font-body-small); }
86
+
87
+ /* Radius examples, one card per example (as on Atlassian's radius page). */
88
+ .sh-ex-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--bh-space-200); margin: 0 0 var(--bh-space-300); }
89
+ .sh-ex { display: flex; align-items: center; justify-content: center; min-height: calc(2 * var(--bh-space-1000) + var(--bh-space-400)); padding: var(--bh-space-400) var(--bh-space-300) var(--bh-space-1000); border: var(--bh-border-width-default) solid var(--bh-color-border); border-radius: var(--bh-radius-150); background: var(--bh-color-surface); }
90
+
91
+ .sh-ex-grid.is-one { grid-template-columns: minmax(0, 1fr); }
92
+ @container prose (max-width: 560px) { .sh-ex-grid { grid-template-columns: minmax(0, 1fr); } }
93
+ :root[data-theme='dark'] .sh-anno { --sh-hex-mix: 55%; }
94
+ @media (prefers-color-scheme: dark) { :root:not([data-theme='light']) .sh-anno { --sh-hex-mix: 55%; } }
95
+
96
+ /* Pins: a translucent hexagon centred on the corner, the corner's curve traced inside it,
97
+ a line straight into the hexagon and the token name. */
98
+ .sh-pin { position: relative; display: inline-flex; max-width: 100%; }
99
+ .sh-anno { --sh-m: var(--bh-space-300); --sh-lw: var(--bh-border-width-default); position: absolute; z-index: 2; top: calc(100% - var(--sh-m) / 2); display: flex; flex-direction: column; pointer-events: none; }
100
+ /* Corner pins sit on the curve itself, at its 45° point: r × (1 − 1/√2) in from the box corner. */
101
+ .sh-anno.is-corner { --sh-k: calc(var(--sh-r, 0px) * 0.2929); left: calc(var(--sh-k) - var(--sh-m) / 2); top: calc(100% - var(--sh-k) - var(--sh-m) / 2); align-items: flex-start; }
102
+ .sh-anno.is-bottom, .sh-anno.is-top { left: 50%; align-items: center; transform: translateX(-50%); }
103
+ .sh-anno.is-top { top: auto; bottom: calc(100% - var(--sh-m) / 2); flex-direction: column-reverse; }
104
+ .sh-mark { position: relative; flex: none; width: var(--sh-m); height: var(--sh-m); overflow: hidden; background: color-mix(in srgb, var(--bh-color-border-brand) var(--sh-hex-mix, 35%), transparent); clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%); }
105
+ .sh-arc { position: absolute; bottom: calc(50% - var(--sh-k)); left: calc(50% - var(--sh-k)); width: calc(var(--sh-r) + 100%); height: calc(var(--sh-r) + 100%); border: 0 solid var(--bh-color-text-warning); border-bottom-width: var(--bh-border-width-default); border-left-width: var(--bh-border-width-default); border-bottom-left-radius: var(--sh-r); }
106
+ .sh-ln { flex: none; width: var(--sh-lw); height: var(--sh-len); background: var(--bh-color-text-subtle); }
107
+ .sh-anno.is-corner .sh-ln { margin-left: calc(var(--sh-m) / 2 - var(--sh-lw) / 2); }
108
+ .prose .sh-anno code, .sh-anno code { padding: var(--bh-space-025) var(--bh-space-075); border-radius: var(--bh-radius-050); color: var(--bh-color-text-inverse); background: var(--bh-color-surface-inverse); white-space: nowrap; font: var(--bh-font-code-default); font-size: var(--bh-font-size-100); }
109
+
110
+ .sh-menu > .sh-pin, .sh-table > .sh-pin, .sh-nav > .sh-pin { display: flex; }
111
+ .sh-table > .sh-pin > span:first-child, .sh-menu > .sh-pin > span:first-child, .sh-nav > .sh-pin > span:first-child { flex: 1; }
112
+ .sh-pin.is-wide { display: flex; width: min(100%, 24rem); }
113
+ .sh-pin.is-wide > .sh-alert { width: 100%; }
114
+
115
+ /* Border examples: the same cards, with a small dot that just touches the border and a dark line (as on Atlassian's border page). */
116
+ .sh-ex.is-b { padding: var(--bh-space-500) var(--bh-space-300) var(--bh-space-1000); }
117
+ .sh-ex.is-span { grid-column: 1 / -1; }
118
+ .sh-ex.is-left { justify-content: flex-start; padding-left: calc(2 * var(--bh-space-1000) + var(--bh-space-800)); padding-bottom: var(--bh-space-500); }
119
+ .sh-ex.is-left > .sh-frame { width: min(100%, 26rem); }
120
+ .sh-anno.is-solid { --sh-m: var(--bh-space-075); --sh-lw: var(--bh-border-width-selected); }
121
+ .sh-anno.is-solid .sh-mark { border-radius: var(--bh-radius-full); background: var(--bh-color-text); clip-path: none; }
122
+ .sh-anno.is-solid.is-bottom { top: 100%; }
123
+ .sh-anno.is-solid .sh-ln { background: var(--bh-color-text); }
124
+ .sh-anno.is-left { top: 50%; left: auto; right: calc(100% - var(--sh-m) / 2); flex-direction: row-reverse; align-items: center; transform: translateY(-50%); }
125
+ .sh-anno.is-left .sh-ln { width: var(--sh-len); height: var(--sh-lw); }
126
+ .sh-anno.is-solid.is-left { right: 100%; }
127
+ @container prose (max-width: 560px) {
128
+ .sh-ex.is-left { justify-content: center; padding: var(--bh-space-500) var(--bh-space-300) var(--bh-space-1000); }
129
+ .sh-anno.is-left, .sh-anno.is-solid.is-left { top: 100%; right: auto; left: calc(var(--bh-border-width-selected) / 2 - var(--sh-m) / 2); flex-direction: column; align-items: flex-start; transform: none; }
130
+ .sh-anno.is-left .sh-ln { width: var(--sh-lw); height: var(--sh-len-n, var(--sh-len)); margin-left: calc(var(--sh-m) / 2 - var(--sh-lw) / 2); }
131
+ }
132
+
133
+ .sh-chip { display: inline-flex; align-items: center; gap: var(--bh-space-075); height: var(--bh-size-control-default); padding: 0 var(--bh-space-150); border: var(--bh-border-width-default) solid var(--bh-color-border-bold); border-radius: var(--bh-radius-full); color: var(--bh-color-text); background: var(--bh-color-surface); font: var(--bh-font-label-default); }
134
+ .sh-chip > span { color: var(--bh-color-text-subtle); }
135
+
136
+
137
+ /* Focus pins touch the ring itself: its outer edge is 4 px outside the box (offset 2 + width 2);
138
+ inside a menu the ring ends at the item's edge. */
139
+ .sh-pin > .sh-ring ~ .sh-anno.is-solid.is-bottom { top: calc(100% + var(--bh-state-focus-offset) + var(--bh-border-width-focused)); }