@repobit/dex-system-design 0.25.11 → 0.26.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 +195 -0
  2. package/README.md +131 -8
  3. package/package.json +95 -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
@@ -1,69 +1,98 @@
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;
7
+ /* no role: the masthead's ground, and it stays a primitive on purpose.
8
+ blue-600 is this system's brand INK step -- six roles resolve to it
9
+ (--color-text-brand, --status-brand-text, --status-brand-accent,
10
+ --status-info-text, --color-action-primary-hover and
11
+ --citation-reference-color) and every one of them is ink or an action,
12
+ not a surface.
13
+ .
14
+ So a --color-surface-brand-strong at this value would not be a missing
15
+ role, it would be a trap: brand ink on a brand-strong surface measures
16
+ 1.00:1 -- identical colours, invisible text -- and the primary action
17
+ colour on it is 1.36:1, which is where a button in a footer sits. The
18
+ role that reads here is --color-text-inverse at 6.18:1, which is what
19
+ the next line uses.
20
+ .
21
+ Two consumers, both footers, against the twelve that justified
22
+ --color-surface-container. See plans/reports/phase-2-vocab-e-has-role-pass.md
23
+ question E2. */
6
24
  background-color: var(--color-blue-600);
7
- color: var(--color-neutral-0);
8
- font-family: 'IBM Plex Sans', sans-serif;
25
+ color: var(--color-text-inverse);
26
+ font-family: var(--typography-fontFamily-sans);
9
27
  font-size: var(--typography-body-small-fontSize);
10
- line-height: var(--typography-lineHeight-normal);
28
+ /* The role's own leading, not the primitive that happens to equal it.
29
+ Deleting this outright was measured to drop the footer to the font's
30
+ metric (21px -> normal), because body-small is referenced for the size
31
+ only -- nothing would have supplied the leading. */
32
+ line-height: var(--typography-body-small-lineHeight);
11
33
  }
12
- .footer-nav-main-container a:focus,
13
34
  .footer-links a:focus,
14
35
  .footer-countries-container a:focus,
15
36
  .country-toggle:focus,
16
37
  .close-countries-button:focus,
17
38
  .social-icons a:focus {
18
39
  outline: none;
19
- border: 2px solid var(--color-blue-500);
20
- box-shadow: var(--focus-outline-primary, 0 0 0 2px rgba(0, 109, 255, 0.3));
21
- border-radius: 4px;
40
+ /* The ring is --focus-outline-primary alone, as in every other component.
41
+ The 2px border that stood here was redundant and, since these elements
42
+ have no border otherwise, it shifted the layout by 2px on focus. */
43
+ box-shadow: var(--focus-outline-primary);
44
+ border-radius: var(--focus-outline-radius);
22
45
  }
23
46
 
24
47
  .country-toggle:focus,
25
48
  .close-countries-button:focus {
26
- border-color: var(--color-blue-500);
27
- box-shadow: var(--focus-outline-primary, 0 0 0 2px rgba(0, 109, 255, 0.3));
49
+ box-shadow: var(--focus-outline-primary);
28
50
  }
29
51
 
30
52
  .footer-countries-container a:focus {
31
- border-color: var(--color-blue-500);
32
- box-shadow: var(--focus-outline-primary, 0 0 0 2px rgba(0, 109, 255, 0.3));
33
- border-radius: 4px;
53
+ box-shadow: var(--focus-outline-primary);
54
+ border-radius: var(--focus-outline-radius);
34
55
  padding: 2px 6px;
35
56
  }
36
57
 
37
- .footer-nav-main-container a:focus {
38
- padding: 2px 6px;
39
- margin: -2px -6px;
40
- }
58
+ /* No navigation rules in this sheet: no .footer-nav-main, no .second-nav, no
59
+ bd-footer-nav and no bd-footer-links-group a. None of them names anything in
60
+ this shadow tree. .footer-nav-main is rendered by bd-footer-nav into its own
61
+ root -- this template only has .footer-nav-main-container, the box the slot
62
+ sits in -- and bd-footer-nav and bd-footer-links-group are slotted elements,
63
+ reachable only through ::slotted. Measured across the 22 built footer
64
+ stories, in 12 bd-footer roots and 11 bd-footer-lp roots: 0 matches for
65
+ every one of those selectors.
66
+
67
+ The focus ring they were trying to draw now lives in
68
+ footer-nav-menu.css.js, spelled ::slotted, where it renders.
69
+
70
+ The bd-footer-links-group *layout* rules further down are the same kind of
71
+ unreachable and are left alone: they are the quick-links column, not
72
+ navigation, and they belong to whichever phase takes that family. */
41
73
  .footer-secondary-nav {
42
74
  padding-top: var(--spacing-24);
43
75
  padding-bottom: var(--spacing-24);
44
76
  }
45
- bd-footer-links-group a:focus {
46
- padding: 2px 6px;
47
- margin: -2px -6px;
48
- display: inline-block;
77
+ .footer-nav-main-container {
78
+ padding-top: var(--spacing-12);
79
+ padding-bottom: var(--spacing-12);
49
80
  }
50
-
51
81
  bd-divider-vertical {
52
82
  display: inline-block;
53
83
  width: var(--form-input-default-borderWidth);
54
- height: var(--dimension-20px);
55
- background-color: var(--color-neutral-0);
84
+ height: var(--dimension-20);
85
+ background-color: var(--color-surface-default);
56
86
  }
57
87
 
58
88
  bd-divider-horizontal {
59
89
  display: block;
60
- background-color: var(--color-neutral-0);
90
+ background-color: var(--color-surface-default);
61
91
  opacity: 0.25;
62
92
  }
63
93
 
64
94
  footer {
65
95
  padding: var(--spacing-32) var(--spacing-16);
66
- max-width: 1200px;
67
96
  margin: auto;
68
97
  }
69
98
 
@@ -71,23 +100,7 @@ bd-footer-links-group a:focus {
71
100
  display: flex;
72
101
  justify-content: space-between;
73
102
  align-items: center;
74
- background-color: var(--color-blue-500);
75
- }
76
-
77
- .footer-nav-main-container {
78
- display: flex;
79
- align-items: center;
80
- justify-content: flex-start;
81
- gap: var(--spacing-16);
82
- flex-wrap: wrap;
83
- padding-top: var(--spacing-12);
84
- padding-bottom: var(--spacing-12);
85
- font-size: var(--typography-body-regular-fontSize);
86
- font-family: var(--typography-fontFamily-sans, 'IBM Plex Sans');
87
- }
88
-
89
- bd-footer-nav.second-nav {
90
- font-weight: var(--typography-fontWeight-medium);
103
+ background-color: var(--color-surface-brand);
91
104
  }
92
105
 
93
106
  .footer-links {
@@ -123,18 +136,10 @@ bd-footer-links-group a:focus {
123
136
  align-items: center;
124
137
  margin: 0;
125
138
  font-size: var(--typography-body-small-fontSize);
126
- font-family: var(--typography-fontFamily-sans, 'IBM Plex Sans');
127
- font-weight: var(--typography-fontWeight-normal);
128
- color: white;
129
- }
130
-
131
- .footer-middle-line > * {
132
- line-height: var(--typography-lineHeight-normal);
133
- }
134
-
135
- .second-nav {
136
- flex-shrink: 0;
137
- max-width: 60%;
139
+ font-family: var(--typography-fontFamily-sans);
140
+ /* No font-weight: body-small, whose size this rule asks for, is normal, and
141
+ the inherited weight is 400 -- measured inert either way. */
142
+ color: var(--color-text-inverse);
138
143
  }
139
144
 
140
145
  .footer-address {
@@ -157,16 +162,6 @@ bd-footer-links-group a:focus {
157
162
  min-width: 200px
158
163
  }
159
164
 
160
- .quick-links-section {
161
- flex: 1 1 auto;
162
- min-width: 200px;
163
- }
164
-
165
- .quick-links-title {
166
- font-weight: var(--typography-fontWeight-semibold);
167
- margin-bottom: var(--spacing-8);
168
- }
169
-
170
165
  .quick-links-columns {
171
166
  display: grid;
172
167
  gap: var(--spacing-8) var(--spacing-16);
@@ -178,16 +173,6 @@ bd-footer-links-group a:focus {
178
173
  gap: var(--spacing-4);
179
174
  }
180
175
 
181
- .footer-social-legal {
182
- display: flex;
183
- justify-content: space-between;
184
- flex-wrap: wrap;
185
- gap: var(--spacing-16);
186
- border-top: var(--form-input-default-borderWidth) solid rgba(255,255,255,0.2);
187
- padding-top: var(--spacing-16);
188
- margin-bottom: var(--spacing-16);
189
- }
190
-
191
176
  .legal-links {
192
177
  display: flex;
193
178
  flex-wrap: wrap;
@@ -196,19 +181,18 @@ bd-footer-links-group a:focus {
196
181
 
197
182
  .social-icons {
198
183
  display: flex;
199
- gap: var(--spacing-16);
200
- }
201
-
202
- .footer-bottom {
203
- display: flex;
204
- justify-content: space-between;
205
- align-items: center;
184
+ /* Wrapping rather than a breakpoint: the row is a variable number of
185
+ icons, so the width it needs depends on how many were slotted, not on
186
+ the viewport. Without this the last one hung 12px past a 320px screen. */
206
187
  flex-wrap: wrap;
207
188
  gap: var(--spacing-16);
208
- border-top: var(--form-input-default-borderWidth) solid rgba(255,255,255,0.2);
209
- padding-top: var(--spacing-16);
210
189
  }
211
190
 
191
+ /* .footer-social-legal and .footer-bottom stood here. Neither element is
192
+ rendered: measured 0 occurrences across all 11 footer stories, while
193
+ .country-toggle in the same sheet rendered in all 11. They carried the only
194
+ two rgba(255,255,255,0.2) edges in the package, and a form-control width
195
+ token doing a divider's job. */
212
196
  .locale-select {
213
197
  display: flex;
214
198
  align-items: center;
@@ -236,28 +220,20 @@ bd-footer-links-group a:focus {
236
220
  content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M4.14286 1C2.40937 1 1 2.40937 1 4.14286V19.8571C1 21.5906 2.40937 23 4.14286 23H19.8571C21.5906 23 23 21.5906 23 19.8571V4.14286C23 2.40937 21.5906 1 19.8571 1H4.14286ZM18.7326 5.125L13.6353 10.9491L19.6312 18.875H14.9366L11.2634 14.0674L7.05491 18.875H4.72232L10.1732 12.6433L4.42277 5.125H9.23527L12.5598 9.52009L16.4 5.125H18.7326ZM16.8763 17.4804L8.53304 6.44598H7.1433L15.5799 17.4804H16.8714H16.8763Z" fill="white"/></svg>');
237
221
  }
238
222
 
239
- a {
240
- color: var(--color-neutral-0);
241
- text-decoration: none;
242
- }
243
-
244
- a:hover {
245
- text-decoration: underline;
246
- }
247
223
 
248
224
  ::slotted(a[slot="social-top"]) {
249
225
  display: inline-flex;
250
226
  align-items: center;
251
227
  justify-content: center;
252
- width: var(--dimension-32px);
253
- height: var(--dimension-32px);
228
+ width: var(--dimension-32);
229
+ height: var(--dimension-32);
254
230
  }
255
231
 
256
232
  ::slotted(a[slot="social-top"] svg) {
257
233
  width: 100%;
258
234
  height: 100%;
259
- fill: white;
260
- color: white !important;
235
+ fill: var(--color-text-inverse);
236
+ color: var(--color-text-inverse) !important;
261
237
  }
262
238
 
263
239
  .footer-links-right.social-icons {
@@ -289,93 +265,46 @@ bd-footer-links-group a:focus {
289
265
  display: inline-block;
290
266
  }
291
267
 
292
- .dropdown-btn {
293
- cursor: pointer;
294
- padding: var(--spacing-8) var(--spacing-16);
295
- background: transparent;
296
- border: var(--form-input-default-borderWidth) solid #ccc;
297
- border-radius: var(--radius-sm);
298
- font-size: var(--typography-body-small-fontSize);
299
- color: white;
300
- }
301
-
302
- .dropdown-list {
303
- position: absolute;
304
- top: 100%;
305
- right: 0;
306
- background: white;
307
- border: var(--form-input-default-borderWidth) solid #ccc;
308
- border-radius: var(--radius-sm);
309
- display: none;
310
- min-width: 160px;
311
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
312
- z-index: 1000;
313
- }
314
-
315
- .dropdown-list.open {
316
- display: block;
317
- }
318
-
319
- .dropdown-list ::slotted(a) {
320
- display: block;
321
- padding: var(--spacing-8) var(--spacing-16);
322
- color: #333;
323
- text-decoration: none;
324
- }
325
-
326
- .dropdown-list ::slotted(a:hover) {
327
- background: #f2f2f2;
328
- }
329
-
330
- .countries-dropdown {
331
- position: absolute;
332
- top: 100%;
333
- left: 0;
334
- background: white;
335
- color: black;
336
- padding: var(--spacing-8);
337
- border: var(--form-input-default-borderWidth) solid #ccc;
338
- z-index: 10;
339
- }
340
-
341
268
  .country-toggle {
342
269
  background: none;
343
270
  border: var(--form-input-default-borderWidth) solid white;
344
- color: white;
271
+ color: var(--color-text-inverse);
345
272
  padding: var(--spacing-8) var(--spacing-16);
346
273
  cursor: pointer;
347
274
  border-radius: var(--form-input-large-borderRadius);
348
- font-family: 'IBM Plex Sans', sans-serif;
275
+ font-family: var(--typography-fontFamily-sans);
349
276
  font-size: var(--typography-body-small-fontSize);
350
277
  display: inline-flex;
351
278
  align-items: center;
352
279
  gap: var(--spacing-8);
353
280
  }
354
281
 
355
- .country-toggle img {
356
- width: var(--dimension-20px);
357
- height: var(--dimension-20px);
358
- object-fit: contain;
359
- }
360
-
361
- .country-toggle .arrow {
362
- margin-left: var(--spacing-4);
363
- }
364
-
365
- .arrow img {
366
- display: inline-block;
367
- width: var(--dimension-20px);
368
- height: auto;
369
- vertical-align: middle;
370
- }
282
+ /* Three rules stood here and none could match, all left behind by the same
283
+ migration. The country toggle renders <bd-globe-icon> and the arrow atoms
284
+ with size and color as props: ".country-toggle img" had no <img> to size,
285
+ and ".arrow" is not a class this component renders at all -- so both it and
286
+ ".arrow img" were orphans, the second nested inside the first's absent
287
+ element. The atoms' own props carry the sizing. */
371
288
 
372
289
  .countries-container {
373
290
  margin-top: var(--spacing-4);
374
291
  }
375
292
 
376
293
  .footer-copy {
377
- font-size: var(--typography-fontSize-sm);
378
- color: var(--color-gray-400);
294
+ /* No font-size: :host already resolves --typography-body-small-fontSize, and
295
+ this restated the identical 14px as the primitive. The colour stays --
296
+ neutral-100 is a step dimmer than the host's inverse white. */
297
+ /* no role: --color-text-muted-inverse is the role for this job -- dimmed ink
298
+ on a dark ground -- and it CANNOT be used here. Measured against the
299
+ host's blue-600: neutral-100 is 4.80:1 and passes body text; the role's
300
+ neutral-300 is 2.72:1 and fails. The role was built against
301
+ surface-inverse (neutral-900), where neutral-300 reaches 7.92:1; on a
302
+ brand ground two steps lighter it runs out of room.
303
+ .
304
+ So the value stays a primitive deliberately. Adopting the role here would
305
+ be a category-correct, job-correct, ACCESSIBILITY-BREAKING change, which
306
+ is the case worth a marker rather than a silent primitive. */
307
+ color: var(--color-neutral-100);
379
308
  }
380
309
 
381
310
  .footer-countries-container {
@@ -383,27 +312,12 @@ bd-footer-links-group a:focus {
383
312
  gap: 10rem;
384
313
  }
385
314
 
386
- bd-footer-links-group a.selected {
387
- font-weight: var(--typography-fontWeight-bold);
388
- position: relative;
389
- padding-left: var(--spacing-12);
390
- }
391
-
392
- bd-footer-links-group a.selected::before {
393
- content: '•';
394
- position: absolute;
395
- left: 0;
396
- color: white;
397
- }
398
-
399
315
  .footer-top-bleed {
400
- background: var(--color-blue-500);
316
+ background: var(--color-surface-brand);
401
317
  }
402
318
 
403
319
  .container {
404
- max-width: 1600px;
405
320
  margin: 0 auto;
406
- padding: 0 var(--spacing-16);
407
321
  }
408
322
 
409
323
  .footer-top {
@@ -413,7 +327,7 @@ bd-footer-links-group a:focus {
413
327
 
414
328
  a.impressum {
415
329
  display: none;
416
- color: white;
330
+ color: var(--color-text-inverse);
417
331
  text-decoration: none;
418
332
  }
419
333
 
@@ -422,6 +336,8 @@ bd-footer-links-group a:focus {
422
336
  }
423
337
 
424
338
  .country-selected {
339
+ /* no role: the selected country in the picker -- a state or modifier weight, not a text-content
340
+ type. See button.css.js's .button--bold for the argument. */
425
341
  font-weight: var(--typography-fontWeight-bold);
426
342
  position: relative;
427
343
  padding-left: var(--spacing-24);
@@ -430,32 +346,34 @@ bd-footer-links-group a:focus {
430
346
  .country-selected .bullet {
431
347
  position: absolute;
432
348
  left: 0;
433
- color: white;
434
- }
349
+ color: var(--color-text-inverse);
350
+ }
351
+
352
+ /* Two "slot[name=countries]::slotted(a)" rules stood here -- a base one
353
+ and a .selected one painting the chosen country on --color-surface-brand.
354
+ Neither could ever match, for two independent reasons.
355
+ .
356
+ There is no <slot name="countries"> in this shadow tree. The template
357
+ declares nine slots (logo, top-right, nav, quick-links, social-links,
358
+ secondary-nav, address, copyright, anpc) and countries is not among them,
359
+ so the selector's first compound matches nothing. The slot="countries"
360
+ attribute at footer.js:473 sits on a <bd-footer-links-group> that this
361
+ component renders INTO ITS OWN shadow root, where a slot attribute assigns
362
+ nothing.
363
+ .
364
+ And the country links are <bd-link> elements (footer.js:475), not <a>, so
365
+ ::slotted(a) would not have matched them even given a real slot.
366
+ .
367
+ The selected-country highlight this described has therefore never
368
+ rendered. Restoring it is a design question, not a CSS repair: it needs a
369
+ real slot or a rule on the light-DOM children, and somebody has to decide
370
+ which. */
435
371
 
436
- slot[name="countries"]::slotted(a) {
437
- color: black;
438
- text-decoration: none;
439
- padding: var(--spacing-4) var(--spacing-8);
440
- display: inline-block;
441
- }
442
-
443
- slot[name="countries"]::slotted(a.selected) {
444
- background-color: #007bff;
445
- color: white;
446
- border-radius: var(--radius-sm);
447
- }
448
-
449
- .footer-countries-container a.selected {
450
- font-weight: var(--typography-fontWeight-bold);
451
- color: var(--color-primary);
452
- right: 12px;
453
- }
454
372
  .footer-countries-container {
455
373
  margin-top: var(--spacing-16);
456
374
  padding: var(--spacing-24);
457
375
  border-radius: var(--radius-lg);
458
- transition: all 0.3s ease;
376
+ transition: all var(--transition-duration-slow) var(--transition-easing-ease);
459
377
  width: 90%;
460
378
  }
461
379
  .footer-countries-container {
@@ -471,31 +389,22 @@ bd-footer-links-group a:focus {
471
389
  border: none;
472
390
  cursor: pointer;
473
391
  padding: var(--spacing-6);
474
- z-index: 10;
392
+ /* Raised, not overlay: it only has to clear the country links it sits on
393
+ top of inside this panel, and nothing else in this shadow root is
394
+ positioned above them. */
395
+ z-index: var(--z-raised);
475
396
  }
476
397
 
477
- .close-countries-button img {
478
- width: var(--dimension-20px);
479
- height: var(--dimension-20px);
480
- display: block;
481
- }
482
- @media (max-width: 767px) {
398
+ /* A ".close-countries-button img" rule stood here and could never match: the
399
+ button renders <bd-close-icon size="18">, so the size is the atom's prop and
400
+ there is no <img> in this root. */
401
+ @media ${unsafeCSS(below('md'))} {
483
402
  :host {
484
403
  font-size: var(--typography-body-small-fontSize);
485
404
  }
486
405
  .footer-address{
487
406
  display: none !important;
488
407
  }
489
- .footer-nav-main-container {
490
- flex-direction: column;
491
- align-items: flex-start;
492
- gap: var(--spacing-8);
493
- }
494
-
495
- .footer-nav-main-container bd-divider-vertical {
496
- display: none !important;
497
- }
498
-
499
408
  .footer-middle-line {
500
409
  flex-direction: column;
501
410
  align-items: flex-start;
@@ -530,34 +439,17 @@ bd-footer-links-group a:focus {
530
439
  width: 100%;
531
440
  }
532
441
 
533
- .footer-nav-main-container a[slot="nav"] {
534
- color: #151719 !important;
535
- }
536
-
537
442
  bd-footer-links-group {
538
443
  margin-bottom: 10px;
539
444
  }
540
445
 
541
- .second-nav .footer-nav-main-container {
542
- flex-direction: column;
543
- align-items: flex-start;
544
- gap: var(--spacing-14);
545
- }
546
-
547
- .second-nav .footer-nav-main-container bd-divider-vertical {
548
- display: none !important;
549
- }
550
-
551
- .second-nav .footer-nav-main-container a {
552
- color: #151719 !important;
553
- padding: var(--spacing-4) 0;
554
- display: block;
555
- }
556
-
557
- .footer-links-right.social-icons a svg {
558
- fill: #151719 !important;
559
- color: #151719 !important;
560
- }
446
+ /* A ".footer-links-right.social-icons a svg" rule stood here and was dead
447
+ twice over. The "social icons" are <bd-link> TEXT links -- Facebook,
448
+ Twitter, LinkedIn and the rest, spelled as words -- so there is no svg to
449
+ paint, and the <a> those links render lives inside bd-link's shadow root
450
+ where this selector cannot follow it. The class name is the misleading
451
+ part: it says icons and renders text. Worth knowing if icons are ever
452
+ wanted there, because this rule would not have coloured them either. */
561
453
 
562
454
  .social-icons {
563
455
  gap: var(--spacing-40);
@@ -565,25 +457,6 @@ bd-footer-links-group a:focus {
565
457
  margin: auto;
566
458
  }
567
459
 
568
- .second-nav {
569
- flex-direction: column;
570
- align-items: flex-start;
571
- gap: var(--spacing-8);
572
- }
573
-
574
- .second-nav.footer-nav-main-container {
575
- display: inline-grid;
576
- }
577
-
578
- .second-nav bd-divider-vertical {
579
- display: none !important;
580
- }
581
-
582
- .second-nav a {
583
- color: #151719 !important;
584
- padding: var(--spacing-4) 0;
585
- display: block;
586
- }
587
460
 
588
461
  .footer-countries-toggle {
589
462
  display: flex;
@@ -744,4 +617,13 @@ bd-footer-links-group a:focus {
744
617
  flex-wrap: wrap;
745
618
  }
746
619
  }
747
- `;
620
+
621
+ /* A reader who asked for less motion was still getting the countries panel. Twenty-three
622
+ of the thirty animated directories in this package honour the query; this
623
+ one did not. */
624
+ @media (prefers-reduced-motion: reduce) {
625
+ .footer-countries-container {
626
+ transition: none;
627
+ }
628
+ }
629
+ `;