@repobit/dex-system-design 0.25.12 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/CHANGELOG.md +204 -0
  2. package/README.md +131 -8
  3. package/package.json +96 -13
  4. package/schemas/component-manifest.json +3294 -405
  5. package/schemas/manifest-omissions.json +173 -0
  6. package/src/blog/src/breakpoints.js +6 -6
  7. package/src/blog/src/content/blog-atoms-showcase.js +1 -1
  8. package/src/blog/src/content/blog-page-layout.js +2 -2
  9. package/src/blog/src/lib/article-toc.js +7 -7
  10. package/src/blog/src/shell/blog-shell.js +1 -1
  11. package/src/blog/src/tokens/blog.js +2 -2
  12. package/src/blog/src/tokens/core.js +34 -35
  13. package/src/blog/src/tokens/legacy.js +0 -9
  14. package/src/blog/tokens/blog.js +2 -2
  15. package/src/blog/tokens/core.js +34 -35
  16. package/src/blog/tokens/legacy.js +0 -9
  17. package/src/blog/tokens.css +36 -46
  18. package/src/components/accordion/accordion-bg.css.js +83 -59
  19. package/src/components/accordion/accordion-bg.js +29 -10
  20. package/src/components/accordion/accordion-bg.stories.js +67 -67
  21. package/src/components/accordion/accordion-keyboard.js +80 -0
  22. package/src/components/accordion/accordion.css.js +142 -80
  23. package/src/components/accordion/accordion.js +37 -10
  24. package/src/components/accordion/accordion.stories.js +7 -7
  25. package/src/components/agent-endpoints/agent-endpoints.css.js +36 -39
  26. package/src/components/agent-endpoints/agent-endpoints.js +30 -20
  27. package/src/components/agent-endpoints/agent-endpoints.stories.js +1 -1
  28. package/src/components/ai-guardian-demo.stories.js +91 -91
  29. package/src/components/alert/alert.css.js +198 -0
  30. package/src/components/alert/alert.js +103 -0
  31. package/src/components/alert/alert.stories.js +206 -0
  32. package/src/components/anchor/anchor-nav.css.js +213 -101
  33. package/src/components/anchor/anchor-nav.js +26 -40
  34. package/src/components/anchor/anchor.stories.js +22 -12
  35. package/src/components/annotation/annotation.css.js +58 -0
  36. package/src/components/annotation/annotation.js +67 -0
  37. package/src/components/annotation/annotation.stories.js +63 -0
  38. package/src/components/architecture.stories.js +285 -0
  39. package/src/components/atoms.stories.js +342 -0
  40. package/src/components/avatar/avatar.css.js +67 -0
  41. package/src/components/avatar/avatar.js +42 -0
  42. package/src/components/avatar/avatar.stories.js +95 -0
  43. package/src/components/awards/awards-flex.css.js +209 -23
  44. package/src/components/awards/awards-flex.js +66 -7
  45. package/src/components/awards/awards-flex.stories.js +1 -1
  46. package/src/components/awards/{awards-light.stories.js → awards-summary.stories.js} +54 -64
  47. package/src/components/awards/awards.css.js +116 -58
  48. package/src/components/awards/awards.js +102 -28
  49. package/src/components/awards/awards.stories.js +1 -1
  50. package/src/components/back/back.css.js +51 -22
  51. package/src/components/back/back.js +28 -7
  52. package/src/components/back/back.stories.js +9 -3
  53. package/src/components/badge/badge.css.js +158 -46
  54. package/src/components/badge/badge.js +62 -74
  55. package/src/components/badge/badge.stories.js +176 -248
  56. package/src/components/bento-grid/bento-grid.css.js +21 -16
  57. package/src/components/bento-grid/bento-grid.js +16 -4
  58. package/src/components/bento-grid/bento-grid.stories.js +19 -18
  59. package/src/components/bento-grid/bento-item.css.js +52 -28
  60. package/src/components/bento-grid/bento-item.js +2 -2
  61. package/src/components/blockquote/blockquote.css.js +47 -0
  62. package/src/components/blockquote/blockquote.js +29 -0
  63. package/src/components/blockquote/blockquote.stories.js +62 -0
  64. package/src/components/breadcrumb/breadcrumb.css.js +92 -22
  65. package/src/components/breadcrumb/breadcrumb.js +56 -11
  66. package/src/components/button/button.css.js +531 -161
  67. package/src/components/button/button.js +206 -214
  68. package/src/components/button/button.stories.js +322 -174
  69. package/src/components/caption/caption.css.js +21 -0
  70. package/src/components/caption/caption.js +31 -0
  71. package/src/components/caption/caption.stories.js +62 -0
  72. package/src/components/card-features/card-features.css.js +14 -22
  73. package/src/components/card-features/card-features.js +68 -9
  74. package/src/components/card-features/card-features.stories.js +11 -11
  75. package/src/components/cards/card.css.js +60 -81
  76. package/src/components/cards/card.js +56 -25
  77. package/src/components/cards/card.stories.js +39 -39
  78. package/src/components/carousel/carousel.css.js +93 -99
  79. package/src/components/carousel/carousel.js +32 -4
  80. package/src/components/checkbox/checkbox.css.js +111 -93
  81. package/src/components/checkbox/checkbox.js +64 -90
  82. package/src/components/checkbox/checkbox.stories.js +96 -29
  83. package/src/components/code/code.css.js +70 -0
  84. package/src/components/code/code.js +40 -0
  85. package/src/components/code/code.stories.js +73 -0
  86. package/src/components/compare/compare.css.js +179 -43
  87. package/src/components/compare/compare.js +52 -25
  88. package/src/components/compare/compare.stories.js +61 -4
  89. package/src/components/comparison-panel/comparison-panel.css.js +38 -51
  90. package/src/components/comparison-panel/comparison-panel.js +5 -4
  91. package/src/components/comparison-panel/comparison-panel.stories.js +1 -1
  92. package/src/components/compatibility-table/compatibility-table.css.js +180 -80
  93. package/src/components/compatibility-table/compatibility-table.js +37 -9
  94. package/src/components/control-alignment.stories.js +393 -0
  95. package/src/components/cta-banner/cta-banner.css.js +41 -13
  96. package/src/components/cta-banner/cta-banner.js +6 -5
  97. package/src/components/cta-banner/cta-banner.stories.js +43 -98
  98. package/src/components/display/display.css.js +25 -1
  99. package/src/components/display/display.js +46 -13
  100. package/src/components/display/display.stories.js +270 -40
  101. package/src/components/divider/divider-horizontal.js +21 -5
  102. package/src/components/divider/divider-vertical.js +15 -7
  103. package/src/components/divider/divider.css.js +2 -2
  104. package/src/components/divider/divider.stories.js +38 -34
  105. package/src/components/dropdown/dropdown.css.js +93 -126
  106. package/src/components/dropdown/dropdown.js +114 -34
  107. package/src/components/dropdown/dropdown.stories.js +56 -24
  108. package/src/components/features/features.css.js +24 -11
  109. package/src/components/features/features.js +7 -3
  110. package/src/components/features/features.stories.js +37 -37
  111. package/src/components/features-tab/features-tab.css.js +19 -8
  112. package/src/components/features-tab/features-tab.js +6 -5
  113. package/src/components/features-tab/features-tab.stories.js +23 -23
  114. package/src/components/fieldset/fieldset.css.js +30 -0
  115. package/src/components/fieldset/fieldset.js +28 -0
  116. package/src/components/fieldset/fieldset.stories.js +84 -0
  117. package/src/components/footer/footer-links-group.css.js +10 -14
  118. package/src/components/footer/footer-links-group.js +4 -3
  119. package/src/components/footer/footer-lp.css.js +59 -30
  120. package/src/components/footer/footer-lp.js +17 -12
  121. package/src/components/footer/footer-lp.stories.js +63 -75
  122. package/src/components/footer/footer-nav-menu.css.js +26 -4
  123. package/src/components/footer/footer-nav-menu.js +3 -2
  124. package/src/components/footer/footer.css.js +146 -264
  125. package/src/components/footer/footer.js +176 -106
  126. package/src/components/footer/footer.stories.js +9 -9
  127. package/src/components/footer/localeMap.js +1 -1
  128. package/src/components/grid/grid.css.js +1 -1
  129. package/src/components/grid/grid.js +49 -7
  130. package/src/components/grid/grid.stories.js +111 -0
  131. package/src/components/header/header-code.css.js +61 -51
  132. package/src/components/header/header-code.js +28 -14
  133. package/src/components/header/header-code.stories.js +5 -5
  134. package/src/components/header/header.css.js +655 -176
  135. package/src/components/header/header.js +269 -36
  136. package/src/components/header/header.stories.js +841 -18
  137. package/src/components/heading/heading.css.js +14 -17
  138. package/src/components/heading/heading.js +48 -33
  139. package/src/components/heading/heading.stories.js +27 -25
  140. package/src/components/help-text/help-text.css.js +21 -0
  141. package/src/components/help-text/help-text.js +25 -0
  142. package/src/components/help-text/help-text.stories.js +66 -0
  143. package/src/components/highlight/highlight.css.js +86 -64
  144. package/src/components/highlight/highlight.js +18 -27
  145. package/src/components/highlight/highlight.stories.js +14 -3
  146. package/src/components/icons/analysis-icon.js +6 -16
  147. package/src/components/icons/arrow-down-icon.js +6 -19
  148. package/src/components/icons/arrow-icon.js +44 -0
  149. package/src/components/icons/arrow-right-icon.js +30 -23
  150. package/src/components/icons/arrow-up-icon.js +19 -18
  151. package/src/components/icons/bd-ai-icon.js +1 -1
  152. package/src/components/icons/brand-marks.stories.js +279 -0
  153. package/src/components/icons/brand-signature-icon.js +42 -0
  154. package/src/components/icons/check-icon.js +27 -0
  155. package/src/components/icons/circle-info-icon.js +33 -0
  156. package/src/components/icons/close-icon.js +6 -18
  157. package/src/components/icons/family-icon.js +8 -20
  158. package/src/components/icons/globe-icon.js +6 -18
  159. package/src/components/icons/guide-icon.js +6 -18
  160. package/src/components/icons/icon-element.js +99 -0
  161. package/src/components/icons/icons.js +36 -0
  162. package/src/components/icons/icons.stories.js +184 -52
  163. package/src/components/icons/individual-icon.js +6 -18
  164. package/src/components/icons/laurel-icon.js +9 -19
  165. package/src/components/icons/machine-learning-icon.js +6 -17
  166. package/src/components/icons/marks.js +41 -0
  167. package/src/components/icons/minus-icon.js +7 -21
  168. package/src/components/icons/missing-icon.js +52 -0
  169. package/src/components/icons/plus-icon.js +7 -21
  170. package/src/components/icons/quote-icon.js +19 -19
  171. package/src/components/image/image.css.js +72 -25
  172. package/src/components/image/image.js +11 -6
  173. package/src/components/image/image.stories.js +2 -2
  174. package/src/components/input/custom-form.stories.js +214 -62
  175. package/src/components/input/input-clipboard.css.js +51 -144
  176. package/src/components/input/input-clipboard.js +31 -15
  177. package/src/components/input/input.css.js +8 -146
  178. package/src/components/input/input.js +93 -38
  179. package/src/components/install-options/install-options.css.js +84 -77
  180. package/src/components/install-options/install-options.js +33 -30
  181. package/src/components/install-options/install-options.stories.js +3 -3
  182. package/src/components/label/label.css.js +35 -0
  183. package/src/components/label/label.js +38 -0
  184. package/src/components/label/label.stories.js +82 -0
  185. package/src/components/light-carousel/light-carousel.css.js +111 -63
  186. package/src/components/light-carousel/light-carousel.js +85 -11
  187. package/src/components/light-carousel/light-carousel.stories.js +126 -82
  188. package/src/components/link/link.css.js +150 -99
  189. package/src/components/link/link.js +86 -11
  190. package/src/components/link/link.stories.js +124 -30
  191. package/src/components/list/list-item/list-item.css.js +74 -22
  192. package/src/components/list/list-item/list-item.js +32 -10
  193. package/src/components/list/list-item/list-item.stories.js +23 -23
  194. package/src/components/list/list.css.js +8 -2
  195. package/src/components/list/list.js +3 -2
  196. package/src/components/list/list.stories.js +222 -0
  197. package/src/components/modal/modal.css.js +114 -24
  198. package/src/components/modal/modal.js +83 -7
  199. package/src/components/modal/modal.stories.js +9 -9
  200. package/src/components/overview/overview.css.js +19 -14
  201. package/src/components/overview/overview.js +6 -5
  202. package/src/components/overview/overview.stories.js +10 -10
  203. package/src/components/page-switcher/page-switcher.css.js +97 -40
  204. package/src/components/page-switcher/page-switcher.js +28 -5
  205. package/src/components/page-switcher/page-switcher.stories.js +95 -0
  206. package/src/components/paragraph/paragraph.css.js +15 -10
  207. package/src/components/paragraph/paragraph.js +41 -44
  208. package/src/components/paragraph/paragraph.stories.js +56 -21
  209. package/src/components/picture/picture.css.js +103 -44
  210. package/src/components/picture/picture.js +100 -30
  211. package/src/components/picture/picture.stories.js +1 -1
  212. package/src/components/pricing-cards/new-pricing-card.js +3 -3
  213. package/src/components/pricing-cards/new-pricing.css.js +24 -15
  214. package/src/components/pricing-cards/pricing-card-actions.css.js +1 -1
  215. package/src/components/pricing-cards/pricing-card-actions.js +3 -4
  216. package/src/components/pricing-cards/pricing-card-container.css.js +3 -3
  217. package/src/components/pricing-cards/pricing-card-container.js +3 -2
  218. package/src/components/pricing-cards/pricing-card-header.css.js +10 -8
  219. package/src/components/pricing-cards/pricing-card-header.js +6 -7
  220. package/src/components/pricing-cards/pricing-card-pricing.css.js +16 -9
  221. package/src/components/pricing-cards/pricing-card-pricing.js +8 -6
  222. package/src/components/pricing-cards/pricing-card-show-more.css.js +11 -3
  223. package/src/components/pricing-cards/pricing-card-show-more.js +8 -3
  224. package/src/components/pricing-cards/pricing-card.css.js +244 -190
  225. package/src/components/pricing-cards/pricing-card.js +54 -70
  226. package/src/components/pricing-cards/pricing-feature-item.css.js +25 -8
  227. package/src/components/pricing-cards/pricing-feature-item.js +8 -3
  228. package/src/components/process-steps/process-steps.css.js +26 -14
  229. package/src/components/process-steps/process-steps.js +23 -6
  230. package/src/components/process-steps/process-steps.stories.js +1 -1
  231. package/src/components/progress/progress.css.js +80 -0
  232. package/src/components/progress/progress.js +42 -0
  233. package/src/components/progress/progress.stories.js +79 -0
  234. package/src/components/quick-answer/quick-answer.css.js +75 -13
  235. package/src/components/quick-answer/quick-answer.js +8 -3
  236. package/src/components/radio/radio.css.js +92 -128
  237. package/src/components/radio/radio.js +106 -127
  238. package/src/components/radio/radio.stories.js +54 -19
  239. package/src/components/review/review-grid.css.js +5 -6
  240. package/src/components/review/review-grid.js +14 -11
  241. package/src/components/review/review.css.js +11 -6
  242. package/src/components/review/review.js +3 -8
  243. package/src/components/shared/ensemble.css.js +93 -0
  244. package/src/components/shared/form-field.css.js +206 -0
  245. package/src/components/shared/prop-vocabulary.js +48 -0
  246. package/src/components/shared/token-scales.js +306 -0
  247. package/src/components/skeleton/skeleton.css.js +34 -0
  248. package/src/components/skeleton/skeleton.js +32 -0
  249. package/src/components/skeleton/skeleton.stories.js +70 -0
  250. package/src/components/spinner/spinner.css.js +62 -0
  251. package/src/components/spinner/spinner.js +38 -0
  252. package/src/components/spinner/spinner.stories.js +92 -0
  253. package/src/components/spotlight-section/spotlight-section.css.js +14 -13
  254. package/src/components/spotlight-section/spotlight-section.js +42 -39
  255. package/src/components/switch/switch.css.js +103 -0
  256. package/src/components/switch/switch.js +44 -0
  257. package/src/components/switch/switch.stories.js +86 -0
  258. package/src/components/tab-list/content-switcher.stories.js +189 -0
  259. package/src/components/tab-list/tab-list.css.js +250 -0
  260. package/src/components/tab-list/tab-list.js +184 -0
  261. package/src/components/tab-list/tab-list.stories.js +221 -0
  262. package/src/components/tabs/tabs.css.js +14 -123
  263. package/src/components/tabs/tabs.js +16 -19
  264. package/src/components/tabs/tabs.stories.js +95 -95
  265. package/src/components/tag/tag.css.js +54 -0
  266. package/src/components/tag/tag.js +32 -0
  267. package/src/components/tag/tag.stories.js +126 -0
  268. package/src/components/terminal/terminal-message.css.js +164 -60
  269. package/src/components/terminal/terminal-message.js +5 -5
  270. package/src/components/terminal/terminal-message.stories.js +70 -1
  271. package/src/components/termsOfUse/terms.css.js +25 -20
  272. package/src/components/termsOfUse/terms.js +13 -9
  273. package/src/components/termsOfUse/terms.stories.js +1 -1
  274. package/src/components/textarea/textarea.css.js +51 -0
  275. package/src/components/textarea/textarea.js +136 -0
  276. package/src/components/textarea/textarea.stories.js +191 -0
  277. package/src/components/tooltip/tooltip.css.js +75 -0
  278. package/src/components/tooltip/tooltip.js +156 -0
  279. package/src/components/tooltip/tooltip.stories.js +161 -0
  280. package/src/components/trust-panel/trust-panel.css.js +85 -33
  281. package/src/components/trust-panel/trust-panel.js +18 -10
  282. package/src/components/trust-panel/trust-panel.stories.js +1 -1
  283. package/src/components/ultimate-security-demo.stories.js +431 -0
  284. package/src/components/video/video.css.js +17 -0
  285. package/src/components/video/video.js +40 -0
  286. package/src/components/video/video.stories.js +106 -0
  287. package/src/components/video-player/video-player.css.js +67 -11
  288. package/src/components/video-player/video-player.js +35 -4
  289. package/src/components/video-player/video-player.stories.js +1 -1
  290. package/src/components/visual-alignment.stories.js +411 -0
  291. package/src/components/visually-hidden/visually-hidden.css.js +24 -0
  292. package/src/components/visually-hidden/visually-hidden.js +16 -0
  293. package/src/components/visually-hidden/visually-hidden.stories.js +56 -0
  294. package/src/stories/Button.stories.js +17 -17
  295. package/src/stories/Header.stories.js +10 -10
  296. package/src/stories/Page.js +1 -1
  297. package/src/stories/Page.stories.js +6 -6
  298. package/src/tokens/borders.stories.js +339 -0
  299. package/src/tokens/color-responsibilities.stories.js +227 -0
  300. package/src/tokens/dark-derivation.js +309 -0
  301. package/src/tokens/dark-findings.js +197 -0
  302. package/src/tokens/dark-mode.stories.js +207 -0
  303. package/src/tokens/dimension.stories.js +251 -0
  304. package/src/tokens/elevation.stories.js +143 -0
  305. package/src/tokens/focus.stories.js +276 -0
  306. package/src/tokens/fonts.css +20 -20
  307. package/src/tokens/fonts.stories.js +354 -374
  308. package/src/tokens/layout.css +25 -11
  309. package/src/tokens/motion.stories.js +231 -0
  310. package/src/tokens/shape.stories.js +272 -0
  311. package/src/tokens/spacing-rhythm.stories.js +359 -0
  312. package/src/tokens/spacing.stories.js +208 -703
  313. package/src/tokens/story-chrome.js +503 -0
  314. package/src/tokens/surfaces.stories.js +224 -0
  315. package/src/tokens/text-on-surface.stories.js +164 -0
  316. package/src/tokens/token-map.js +220 -0
  317. package/src/tokens/token-map.stories.js +257 -0
  318. package/src/tokens/token-purposes.js +266 -0
  319. package/src/tokens/tokens-grid.stories.js +388 -900
  320. package/src/tokens/tokens.css +1633 -1045
  321. package/src/tokens/tokens.js +1130 -492
  322. package/src/tokens/tokens.stories.js +137 -47
  323. package/src/tokens/type-ceiling-words.js +299 -0
  324. package/src/tokens/typography.stories.js +1003 -965
  325. package/src/tokens/vertical-rhythm.stories.js +224 -0
  326. package/src/components/awards/awards-icon.js +0 -56
  327. package/src/components/awards/awards-light.js +0 -240
  328. package/src/components/banner/banner.js +0 -60
  329. package/src/components/banner/banner.stories.js +0 -51
  330. package/src/components/button/icons.js +0 -24
  331. package/src/components/input/index.js +0 -0
  332. package/src/components/light-carousel/light-carousel-simple.css.js +0 -183
  333. package/src/components/light-carousel/light-carousel-simple.js +0 -74
  334. package/src/tokens/colors.js +0 -121
  335. package/src/tokens/typography.css.js +0 -207
  336. package/src/tokens/typography.js +0 -0
@@ -0,0 +1,111 @@
1
+ import { html } from "lit";
2
+ import "./grid.js";
3
+
4
+ export default {
5
+ title : "Layout/Grid",
6
+ component : "bd-grid",
7
+ tags : ["autodocs"],
8
+ parameters: {
9
+ layout: "padded",
10
+ docs : {
11
+ description: {
12
+ component: `
13
+ **BdGrid** is a responsive column layout. It had no story until P6B, which is why
14
+ nothing rendered it and no gate could see it.
15
+
16
+ Columns are set per breakpoint and the component steps between them on its own:
17
+ \`cols\` below 576, then \`cols-sm\`, \`cols-md\` at 768 and \`cols-lg\` at 992 — the
18
+ \`--breakpoint-*\` scale. \`gap\` and \`padding\` take space step names
19
+ (\`none\`, \`2xs\`, \`xs\`, \`sm\`, \`md\`, \`lg\`, \`xl\` …), not lengths.
20
+
21
+ Its one consumer today is the footer's link columns.
22
+ `
23
+ }
24
+ }
25
+ },
26
+ argTypes: {
27
+ cols : { control: { type: "number", min: 1, max: 6 }, description: "Columns below 576px." },
28
+ colsSm : { name: "cols-sm", control: { type: "number", min: 1, max: 6 }, description: "Columns from 576px." },
29
+ colsMd : { name: "cols-md", control: { type: "number", min: 1, max: 6 }, description: "Columns from 768px." },
30
+ colsLg : { name: "cols-lg", control: { type: "number", min: 1, max: 6 }, description: "Columns from 992px." },
31
+ gap : { control: "select", options: ["none", "2xs", "xs", "sm", "md", "lg", "xl"], description: "Space step between cells." },
32
+ padding: { control: "select", options: ["none", "xs", "sm", "md", "lg"], description: "Space step inside the grid." },
33
+ align : { control: "select", options: ["start", "center", "end", "stretch"] },
34
+ justify: { control: "select", options: ["start", "center", "end", "stretch"] }
35
+ }
36
+ };
37
+
38
+ /* A cell that shows its own box, so the columns and the gap are both visible. */
39
+ const cell = (n) => html`
40
+ <div style="
41
+ background: var(--color-surface-container);
42
+ border: var(--border-width-1) solid var(--color-border-container);
43
+ border-radius: var(--radius-2xl);
44
+ padding: var(--spacing-16);
45
+ width: 100%;
46
+ box-sizing: border-box;
47
+ font-family: var(--typography-fontFamily-sans);
48
+ color: var(--color-text-primary);
49
+ ">Item ${n}</div>`;
50
+
51
+ const cells = (n) => html`${Array.from({ length: n }, (_, i) => cell(i + 1))}`;
52
+
53
+ export const Default = {
54
+ name : "Default",
55
+ args : { cols: 1, colsSm: 2, colsMd: 3, colsLg: 3, gap: "md", align: "stretch", justify: "stretch", padding: "none" },
56
+ render: (a) => html`
57
+ <bd-grid
58
+ cols=${a.cols} cols-sm=${a.colsSm} cols-md=${a.colsMd} cols-lg=${a.colsLg}
59
+ gap=${a.gap} align=${a.align} justify=${a.justify} padding=${a.padding}
60
+ >${cells(6)}</bd-grid>`,
61
+ parameters: { docs: { description: { story: "Six cells stepping one → two → three columns as the viewport crosses 576 and 768." } } }
62
+ };
63
+
64
+ export const ResponsiveColumns = {
65
+ name : "Responsive columns",
66
+ render: () => html`
67
+ <bd-grid cols="1" cols-sm="2" cols-md="3" cols-lg="4" gap="md">${cells(8)}</bd-grid>`,
68
+ parameters: {
69
+ docs: { description: { story: "One column below 576, two from 576, three from 768, four from 992. Resize the frame — the component carries its own breakpoints, so there is no wrapper media query to look for." } }
70
+ }
71
+ };
72
+
73
+ export const SingleColumn = {
74
+ name : "Single column",
75
+ render : () => html`<bd-grid cols="1" cols-sm="1" cols-md="1" cols-lg="1" gap="sm">${cells(3)}</bd-grid>`,
76
+ parameters: { docs: { description: { story: "Pinned to one column at every width — what a narrow viewport renders, and what the footer's left column uses." } } }
77
+ };
78
+
79
+ export const GapScale = {
80
+ name : "Gap scale",
81
+ render: () => html`
82
+ <div style="display: grid; gap: var(--spacing-32)">
83
+ ${["none", "2xs", "sm", "lg", "xl"].map((g) => html`
84
+ <div>
85
+ <p style="margin: 0 0 var(--spacing-8); font-family: var(--typography-fontFamily-mono); font-size: var(--typography-fontSize-xs); color: var(--color-text-muted)">
86
+ gap="${g}"
87
+ </p>
88
+ <bd-grid cols="3" cols-sm="3" cols-md="3" cols-lg="3" gap=${g}>${cells(3)}</bd-grid>
89
+ </div>`)}
90
+ </div>`,
91
+ parameters: { docs: { description: { story: "gap takes a space step name, not a length. An unrecognised name resolves to nothing rather than to a guess." } } }
92
+ };
93
+
94
+ export const Alignment = {
95
+ name : "Alignment",
96
+ render: () => html`
97
+ <div style="display: grid; gap: var(--spacing-32)">
98
+ ${["start", "center", "stretch"].map((j) => html`
99
+ <div>
100
+ <p style="margin: 0 0 var(--spacing-8); font-family: var(--typography-fontFamily-mono); font-size: var(--typography-fontSize-xs); color: var(--color-text-muted)">
101
+ justify="${j}"
102
+ </p>
103
+ <bd-grid cols="3" cols-sm="3" cols-md="3" cols-lg="3" gap="sm" justify=${j}>
104
+ <div style="background: var(--color-surface-muted); padding: var(--spacing-8); border-radius: var(--radius-lg)">Short</div>
105
+ <div style="background: var(--color-surface-muted); padding: var(--spacing-8); border-radius: var(--radius-lg)">A wider cell</div>
106
+ <div style="background: var(--color-surface-muted); padding: var(--spacing-8); border-radius: var(--radius-lg)">Mid</div>
107
+ </bd-grid>
108
+ </div>`)}
109
+ </div>`,
110
+ parameters: { docs: { description: { story: "justify sets justify-items on the cells. stretch is the default the footer relies on." } } }
111
+ };
@@ -1,16 +1,17 @@
1
- import { css } from "lit";
1
+ import { css, unsafeCSS } from "lit";
2
+ import { below } from "../shared/token-scales.js";
2
3
 
3
4
  export default css`
4
5
  :host {
5
6
  display: block;
6
7
  font-family: var(--typography-fontFamily-sans);
7
8
  position: relative;
8
- background-color: var(--color-neutral-0, #fff);
9
+ background-color: var(--color-surface-default);
9
10
  overflow: hidden; /* clips the ::after floor grid, which extends past the edges */
10
11
  }
11
12
 
12
13
  :host([variant="tint"]) {
13
- background-image: radial-gradient(ellipse 900px 560px at 84% 8%, rgba(59, 130, 246, 0.16), transparent 65%);
14
+ background-image: radial-gradient(ellipse 900px 560px at 84% 8%, color-mix(in srgb, var(--color-surface-brand) 16%, transparent), transparent 65%);
14
15
  background-repeat: no-repeat;
15
16
  }
16
17
 
@@ -24,10 +25,10 @@ export default css`
24
25
  transform-origin: 50% 0;
25
26
  transform: perspective(620px) rotateX(64deg);
26
27
  background:
27
- linear-gradient(#006dff1a 1px, #0000 1px) 0 0 / 100% 44px,
28
- linear-gradient(90deg, #006dff1a 1px, #0000 1px) 0 0 / 44px 100%;
29
- -webkit-mask-image: linear-gradient(#0000 0%, #000 45%, #0000 100%);
30
- mask-image: linear-gradient(#0000 0%, #000 45%, #0000 100%);
28
+ linear-gradient(color-mix(in srgb, var(--color-blue-500) 10%, transparent) 1px, transparent 1px) 0 0 / 100% 44px,
29
+ linear-gradient(90deg, color-mix(in srgb, var(--color-blue-500) 10%, transparent) 1px, transparent 1px) 0 0 / 44px 100%;
30
+ -webkit-mask-image: linear-gradient(transparent 0%, var(--color-neutral-1000) 45%, transparent 100%);
31
+ mask-image: linear-gradient(transparent 0%, var(--color-neutral-1000) 45%, transparent 100%);
31
32
  pointer-events: none;
32
33
  z-index: 0;
33
34
  }
@@ -37,12 +38,10 @@ export default css`
37
38
  grid-template-columns: 1fr 1fr;
38
39
  align-items: center;
39
40
  gap: var(--spacing-48);
40
- max-width: var(--layout-ensemble-max-width, 1200px);
41
- margin: 0 auto;
42
- padding: var(--spacing-48) var(--layout-ensemble-inline-padding, var(--spacing-24));
41
+ padding-block: var(--spacing-48);
43
42
  box-sizing: border-box;
44
43
  position: relative;
45
- z-index: 1;
44
+ z-index: var(--z-base);
46
45
  }
47
46
 
48
47
  /* === ENTRANCE ANIMATION === */
@@ -59,11 +58,11 @@ export default css`
59
58
 
60
59
  .bd-headercode-left,
61
60
  .bd-headercode-right {
62
- animation: bd-headercode-fade-up 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;
61
+ animation: bd-headercode-fade-up var(--transition-duration-slower) var(--transition-easing-ease-out) both;
63
62
  }
64
63
 
65
64
  .bd-headercode-right {
66
- animation-delay: 0.12s;
65
+ animation-delay: var(--transition-duration-fast);
67
66
  }
68
67
 
69
68
  @media (prefers-reduced-motion: reduce) {
@@ -86,9 +85,11 @@ export default css`
86
85
  flex-wrap: wrap;
87
86
  align-items: center;
88
87
  gap: var(--spacing-16);
89
- color: var(--color-neutral-500);
90
- font-family: var(--typography-fontFamily-mono, monospace);
91
- font-size: var(--typography-fontSize-xs, 12px);
88
+ color: var(--color-text-subtle);
89
+ font-family: var(--typography-fontFamily-mono);
90
+ /* no role: the breadcrumb strip, in mono -- see awards-flex.css.js's
91
+ .bd-awardsflex-quote-source for the argument. */
92
+ font-size: var(--typography-fontSize-xs);
92
93
  }
93
94
 
94
95
  .bd-headercode-breadcrumb:not(:has(*)) {
@@ -96,19 +97,18 @@ export default css`
96
97
  }
97
98
 
98
99
  .bd-headercode-eyebrow {
99
- color: var(--color-blue-400);
100
- font-weight: var(--typography-fontWeight-bold);
100
+ /* blue-400 is 3.35:1 on white. The eyebrow is brand-coloured on purpose, so
101
+ it wants the brand text role rather than a lighter blue. */
102
+ color: var(--color-text-brand);
101
103
  margin: 0;
102
104
  }
103
105
 
104
106
  .bd-headercode-title {
105
107
  margin: 0;
106
- color: var(--color-neutral-1000);
107
- line-height: var(--typography-lineHeight-tight, 1.05);
108
108
  }
109
109
 
110
110
  .bd-headercode-description {
111
- color: var(--color-neutral-600);
111
+ color: var(--color-text-muted);
112
112
  max-width: 480px;
113
113
  margin: 0;
114
114
  }
@@ -124,14 +124,16 @@ export default css`
124
124
  .bd-headercode-badge {
125
125
  display: inline-flex;
126
126
  align-items: center;
127
- color: var(--color-neutral-600);
128
- font-family: var(--typography-fontFamily-mono, monospace);
129
- font-size: var(--typography-fontSize-xs, 12px);
127
+ color: var(--color-text-muted);
128
+ font-family: var(--typography-fontFamily-mono);
129
+ /* no role: the code badge, in mono and tracked -- see awards-flex.css.js's
130
+ .bd-awardsflex-quote-source for the argument. */
131
+ font-size: var(--typography-fontSize-xs);
130
132
  letter-spacing: 0.05em;
131
- padding: var(--spacing-4, 4px) var(--spacing-12, 12px);
132
- border: 1px solid var(--color-neutral-200, #e5e7eb);
133
- border-radius: var(--radius-full, 999px);
134
- background: var(--color-neutral-0, #fff);
133
+ padding: var(--spacing-4) var(--spacing-12);
134
+ border: 1px solid var(--color-border-subtle);
135
+ border-radius: var(--radius-full);
136
+ background: var(--color-surface-default);
135
137
  }
136
138
 
137
139
  .bd-headercode-badge:not(:has(*)) {
@@ -145,7 +147,7 @@ export default css`
145
147
  }
146
148
 
147
149
  .bd-headercode-meta-spec {
148
- color: var(--color-neutral-500);
150
+ color: var(--color-text-subtle);
149
151
  margin: 0;
150
152
  padding-top: var(--spacing-16);
151
153
  }
@@ -156,28 +158,30 @@ export default css`
156
158
  gap: var(--spacing-8) var(--spacing-32);
157
159
  margin-top: var(--spacing-40);
158
160
  padding-top: var(--spacing-24);
159
- border-top: 1px solid var(--color-neutral-100);
161
+ border-top: 1px solid var(--color-border-container);
160
162
  }
161
163
 
162
164
  .bd-headercode-meta-fact {
163
165
  display: flex;
164
166
  align-items: baseline;
165
- gap: var(--spacing-8, 8px);
167
+ gap: var(--spacing-8);
166
168
  white-space: nowrap;
167
169
  }
168
170
 
169
171
  .bd-headercode-meta-fact-label {
170
172
  margin: 0;
171
- color: var(--color-neutral-400);
173
+ /* subtle, not neutral-400: that is the disabled step and measured 2.5:1
174
+ on white; this is 4.67:1. */
175
+ color: var(--color-text-subtle);
172
176
  text-transform: uppercase;
173
177
  }
174
178
 
175
179
  .bd-headercode-meta-fact-value {
176
180
  margin: 0;
177
- color: var(--color-neutral-900);
181
+ color: var(--color-text-primary);
178
182
  }
179
183
 
180
- @media (max-width: 480px) {
184
+ @media ${unsafeCSS(below('sm'))} {
181
185
  .bd-headercode-meta-facts {
182
186
  grid-template-columns: repeat(2, auto);
183
187
  }
@@ -199,8 +203,10 @@ export default css`
199
203
  justify-content: flex-end;
200
204
  align-items: center;
201
205
  perspective: 1300px;
206
+ /* no token: the 3D scene's floor, sized to the terminal it tilts -- a
207
+ layout measure, not a step on any scale. */
202
208
  min-height: 400px;
203
- padding: var(--spacing-16, 16px) 0;
209
+ padding: var(--spacing-16) 0;
204
210
  margin: 0;
205
211
  position: relative;
206
212
  }
@@ -217,7 +223,7 @@ export default css`
217
223
  rotateY(var(--ry, -10deg))
218
224
  rotateX(var(--rx, 6deg))
219
225
  rotateZ(1deg);
220
- transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
226
+ transition: transform var(--transition-duration-slow) var(--transition-easing-ease-out);
221
227
  }
222
228
 
223
229
  @media (prefers-reduced-motion: reduce) {
@@ -231,7 +237,7 @@ export default css`
231
237
  width: 100%;
232
238
  box-shadow: 0 1px 2px #0003, 0 18px 48px #000a1e73;
233
239
  position: relative;
234
- z-index: 1; /* sits above the rings */
240
+ z-index: var(--z-base); /* sits above the rings */
235
241
  }
236
242
 
237
243
  @media (prefers-reduced-motion: reduce) {
@@ -241,10 +247,10 @@ export default css`
241
247
  }
242
248
 
243
249
  .bd-headercode-terminal-caption {
244
- color: var(--color-neutral-500);
250
+ color: var(--color-text-subtle);
245
251
  margin: 0;
246
252
  position: relative;
247
- z-index: 1;
253
+ z-index: var(--z-base);
248
254
  }
249
255
 
250
256
  .bd-headercode-rings {
@@ -258,20 +264,24 @@ export default css`
258
264
  .bd-headercode-ring {
259
265
  position: absolute;
260
266
  inset: 0;
261
- border-radius: 28px;
262
- border: 1.5px solid rgba(0, 109, 255, calc(0.5 - var(--d) * 0.08));
263
- background: rgba(0, 109, 255, calc(0.05 - var(--d) * 0.008));
264
- box-shadow: 0 0 26px rgba(0, 109, 255, calc(0.16 - var(--d) * 0.025));
265
- animation: bd-headercode-ring-breathe 6s ease-in-out calc(var(--d) * -1.2s) infinite;
267
+ border-radius: var(--radius-3xl);
268
+ border: var(--border-width-2) solid color-mix(in srgb, var(--color-border-brand) calc((0.5 - var(--d) * 0.08) * 100%), transparent);
269
+ background: color-mix(in srgb, var(--color-surface-brand) calc((0.05 - var(--d) * 0.008) * 100%), transparent);
270
+ box-shadow: 0 0 26px color-mix(in srgb, var(--color-blue-500) calc((0.16 - var(--d) * 0.025) * 100%), transparent);
271
+ /* no token: an ambient loop, an order of magnitude longer than any
272
+ interaction the duration scale is for. */
273
+ animation: bd-headercode-ring-breathe 6s var(--transition-easing-smooth) calc(var(--d) * -1.2s) infinite;
266
274
  transform: translate(calc(var(--d) * 10px), calc(var(--d) * 8px));
267
275
  }
268
276
 
269
277
  @keyframes bd-headercode-ring-breathe {
270
278
  0%, 100% {
279
+ /* no token: the bright end of the ambient breath; the dim end is the
280
+ package's one pulse dimness. */
271
281
  opacity: 0.85;
272
282
  }
273
283
  50% {
274
- opacity: 0.45;
284
+ opacity: var(--opacity-pulse);
275
285
  }
276
286
  }
277
287
 
@@ -284,18 +294,18 @@ export default css`
284
294
  /* === FLOATING ANNOTATION PILLS === */
285
295
  .bd-headercode-annotation {
286
296
  position: absolute;
287
- z-index: 2;
297
+ z-index: var(--z-raised);
288
298
  pointer-events: none;
289
299
  }
290
300
 
291
301
  .bd-headercode-annotation--top {
292
- top: -14px;
293
- right: 32px;
302
+ top: calc(-1 * var(--spacing-14));
303
+ right: var(--spacing-32);
294
304
  }
295
305
 
296
306
  .bd-headercode-annotation--bottom {
297
- bottom: -14px;
298
- left: 16px;
307
+ bottom: calc(-1 * var(--spacing-14));
308
+ left: var(--spacing-16);
299
309
  right: auto;
300
310
  }
301
311
 
@@ -306,7 +316,7 @@ export default css`
306
316
  .bd-headercode-annotation ::slotted(*) {
307
317
  width: auto;
308
318
  max-width: none;
309
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
319
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--color-neutral-1000) 12%, transparent);
310
320
  pointer-events: auto;
311
321
  }
312
322
 
@@ -5,11 +5,13 @@ import "../heading/heading.js";
5
5
  import "../paragraph/paragraph.js";
6
6
  import "../terminal/terminal-message.js";
7
7
  import headerCodeCSS from "./header-code.css.js";
8
+ import { ensembleCSS } from "../shared/ensemble.css.js";
8
9
 
9
10
  class HeaderCode extends LitElement {
10
11
  static properties = {
11
12
  eyebrow : { type: String },
12
13
  title : { type: String },
14
+ headingLevel : { type: Number, attribute: "heading-level" },
13
15
  description : { type: String },
14
16
  terminalCaption: { type: String, attribute: "terminal-caption" },
15
17
  variant : { type: String, reflect: true },
@@ -18,12 +20,13 @@ class HeaderCode extends LitElement {
18
20
  _hasBadge : { state: true }
19
21
  };
20
22
 
21
- static styles = [tokens, headerCodeCSS];
23
+ static styles = [tokens, ensembleCSS, headerCodeCSS];
22
24
 
23
25
  constructor() {
24
26
  super();
25
27
  this.eyebrow = "";
26
28
  this.title = "";
29
+ this.headingLevel = 2;
27
30
  this.description = "";
28
31
  this.terminalCaption = "";
29
32
  this.variant = "default";
@@ -117,16 +120,15 @@ class HeaderCode extends LitElement {
117
120
 
118
121
  if (!hasSpec && !hasFacts) return nothing;
119
122
 
120
- const monoFontFamily = "'IBM Plex Mono', ui-monospace, SFMono-Regular, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace";
121
123
 
122
124
  return html`
123
125
  <div class="bd-headercode-meta">
124
126
  ${hasSpec
125
127
  ? html`<bd-p
126
- kind="xsmall"
128
+ variant="xsmall"
127
129
  class="bd-headercode-meta-spec"
128
- font-family=${monoFontFamily}
129
- letter-spacing=".1em"
130
+ font-family="mono"
131
+ letter-spacing="widest"
130
132
  >${this.metaSpec}</bd-p>`
131
133
  : nothing}
132
134
 
@@ -137,12 +139,12 @@ class HeaderCode extends LitElement {
137
139
  (fact) => html`
138
140
  <div class="bd-headercode-meta-fact">
139
141
  <bd-p
140
- kind="xsmall"
142
+ variant="xsmall"
141
143
  class="bd-headercode-meta-fact-label"
142
- font-family=${monoFontFamily}
143
- letter-spacing=".1em"
144
+ font-family="mono"
145
+ letter-spacing="widest"
144
146
  >${fact.label}</bd-p>
145
- <bd-p kind="regular" font-weight="700" class="bd-headercode-meta-fact-value">${fact.value}</bd-p>
147
+ <bd-p kind="regular" font-weight="bold" class="bd-headercode-meta-fact-value">${fact.value}</bd-p>
146
148
  </div>
147
149
  `
148
150
  )}
@@ -153,24 +155,36 @@ class HeaderCode extends LitElement {
153
155
  `;
154
156
  }
155
157
 
158
+
159
+ /**
160
+ * Level is the document-outline question and belongs to page composition;
161
+ * the type scale is this component's and stays where it was. visual-level
162
+ * pins the look at h1 so only the semantics move. Defaults to h2, because a
163
+ * reusable section cannot know it is the page's only heading.
164
+ */
165
+ get _headingTag() {
166
+ const n = Number(this.headingLevel);
167
+ return Number.isInteger(n) && n >= 1 && n <= 6 ? `h${n}` : "h2";
168
+ }
169
+
156
170
  render() {
157
171
  return html`
158
- <div class="bd-headercode-container">
172
+ <div class="bd-ensemble bd-headercode-container">
159
173
  <div class="bd-headercode-left">
160
174
  <div class="bd-headercode-breadcrumb">
161
175
  <slot name="breadcrumb"></slot>
162
176
  </div>
163
177
 
164
178
  ${this.eyebrow
165
- ? html`<bd-p kind="normal" class="bd-headercode-eyebrow">${this.eyebrow}</bd-p>`
179
+ ? html`<bd-p variant="regular" class="bd-headercode-eyebrow">${this.eyebrow}</bd-p>`
166
180
  : nothing}
167
181
 
168
- <bd-h as="h1" class="bd-headercode-title">
182
+ <bd-h as="${this._headingTag}" visual-level="h1" class="bd-headercode-title">
169
183
  <slot name="title">${this.title}</slot>
170
184
  </bd-h>
171
185
 
172
186
  ${this.description
173
- ? html`<bd-p kind="regular" class="bd-headercode-description">${this.description}</bd-p>`
187
+ ? html`<bd-p variant="regular" class="bd-headercode-description">${this.description}</bd-p>`
174
188
  : nothing}
175
189
 
176
190
  <div class="bd-headercode-cta">
@@ -200,7 +214,7 @@ class HeaderCode extends LitElement {
200
214
  </div>
201
215
 
202
216
  ${this.terminalCaption
203
- ? html`<bd-p kind="small" class="bd-headercode-terminal-caption" font-family="'IBM Plex Mono', ui-monospace, SFMono-Regular, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"
217
+ ? html`<bd-p variant="small" class="bd-headercode-terminal-caption" font-family="mono"
204
218
  >${this.terminalCaption}</bd-p>`
205
219
  : nothing}
206
220
  </div>
@@ -33,8 +33,8 @@ dot-grid pattern, and gives the \`badge\` slot a bordered pill treatment.
33
33
  terminal-caption="// illustrative — every connection closes when the prompt ends"
34
34
  >
35
35
  <span slot="badge">EXTERNAL BETA</span>
36
- <bd-button-link slot="primary-button" label="Download for macOS" kind="primary">Download for macOS</bd-button-link>
37
- <bd-button-link slot="secondary-button" label="See how it works" kind="outline">See how it works</bd-button-link>
36
+ <bd-button-link slot="primary-button" label="Download for macOS" variant="primary">Download for macOS</bd-button-link>
37
+ <bd-button-link slot="secondary-button" label="See how it works" variant="outline">See how it works</bd-button-link>
38
38
 
39
39
  <div slot="meta">…facts row…</div>
40
40
 
@@ -100,7 +100,7 @@ const render = (args) => html`
100
100
  <bd-button-link
101
101
  slot="primary-button"
102
102
  label="Download BETA Today"
103
- kind="primary"
103
+ variant="primary"
104
104
  size="md"
105
105
  font-size="18px"
106
106
  font-weight="600"
@@ -109,7 +109,7 @@ const render = (args) => html`
109
109
  <bd-button-link
110
110
  slot="secondary-button"
111
111
  label="See how it works"
112
- kind="primary-outline"
112
+ variant="primary-outline"
113
113
  size="md"
114
114
  font-size="18px"
115
115
  font-weight="600"
@@ -227,7 +227,7 @@ export const SingleButton = {
227
227
  <bd-button-link
228
228
  slot="primary-button"
229
229
  label="Download BETA Today"
230
- kind="primary"
230
+ variant="primary"
231
231
  size="md"
232
232
  >Download BETA Today</bd-button-link>
233
233