@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
@@ -23,12 +23,12 @@ Componentă Lit pentru afișarea de feature-uri în taburi cu coloane de accordi
23
23
  <bd-tab-panel title="Windows">
24
24
  <bd-features>
25
25
  <bd-feature-col title="Protection">
26
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
27
- <bd-p kind="small" slot="description">Descriere coloana</bd-p>
26
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
27
+ <bd-p variant="small" slot="description">Descriere coloana</bd-p>
28
28
  <bd-accordion-section no-container>
29
29
  <bd-accordion-item title="Feature 1" open>
30
- <bd-badge slot="badge" variant="bd-light-blue" size="sm" fontweight="700">NEW</bd-badge>
31
- <bd-p kind="small">Detalii</bd-p>
30
+ <bd-badge slot="badge" tone="primary" variant="fill" size="sm">NEW</bd-badge>
31
+ <bd-p variant="small">Detalii</bd-p>
32
32
  </bd-accordion-item>
33
33
  </bd-accordion-section>
34
34
  </bd-feature-col>
@@ -76,78 +76,78 @@ const windowsPanel = html`
76
76
  <bd-features>
77
77
 
78
78
  <bd-feature-col title="Protection">
79
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
80
- <bd-p kind="small" slot="description">Bitdefender's unbeatable multi-layered protection keeps your devices safe from all new and existing cyber threats.</bd-p>
79
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
80
+ <bd-p variant="small" slot="description">Bitdefender's unbeatable multi-layered protection keeps your devices safe from all new and existing cyber threats.</bd-p>
81
81
  <bd-accordion-section no-container>
82
82
  <bd-accordion-item title="Complete Real-Time Data Protection" open>
83
- <bd-badge slot="badge" variant="bd-light-blue" size="sm" fontweight="700">BLUE TAG</bd-badge>
84
- <bd-p kind="small">Absolute power in the most efficient security bundle available today. Bitdefender Ultimate Security works against all e-threats.</bd-p>
83
+ <bd-badge slot="badge" tone="primary" variant="fill" size="sm">BLUE TAG</bd-badge>
84
+ <bd-p variant="small">Absolute power in the most efficient security bundle available today. Bitdefender Ultimate Security works against all e-threats.</bd-p>
85
85
  </bd-accordion-item>
86
86
  <bd-accordion-item title="Network Threat Prevention">
87
- <bd-badge slot="badge" color="#43A047" size="sm" fontweight="700">INDUSTRY 1ST</bd-badge>
88
- <bd-p kind="small">Proactive network monitoring and threat detection.</bd-p>
87
+ <bd-badge slot="badge" tone="success" variant="fill" size="sm">INDUSTRY 1ST</bd-badge>
88
+ <bd-p variant="small">Proactive network monitoring and threat detection.</bd-p>
89
89
  </bd-accordion-item>
90
90
  <bd-accordion-item title="Advanced Threat Defense">
91
- <bd-p kind="small">Behavioral detection stops unknown threats before they execute.</bd-p>
91
+ <bd-p variant="small">Behavioral detection stops unknown threats before they execute.</bd-p>
92
92
  </bd-accordion-item>
93
93
  <bd-accordion-item title="Scam Copilot">
94
- <bd-p kind="small">AI-powered scam detection and prevention.</bd-p>
94
+ <bd-p variant="small">AI-powered scam detection and prevention.</bd-p>
95
95
  </bd-accordion-item>
96
96
  <bd-accordion-item title="E-mail Protection">
97
- <bd-p kind="small">Scans incoming and outgoing emails for threats.</bd-p>
97
+ <bd-p variant="small">Scans incoming and outgoing emails for threats.</bd-p>
98
98
  </bd-accordion-item>
99
99
  <bd-accordion-item title="Multi-Layer Ransomware Protection">
100
- <bd-p kind="small">Protects your files from unauthorized encryption.</bd-p>
100
+ <bd-p variant="small">Protects your files from unauthorized encryption.</bd-p>
101
101
  </bd-accordion-item>
102
102
  </bd-accordion-section>
103
103
  </bd-feature-col>
104
104
 
105
105
  <bd-feature-col title="Privacy">
106
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
107
- <bd-p kind="small" slot="description">Bitdefender Ultimate Security takes care of your online privacy and personal information.</bd-p>
106
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
107
+ <bd-p variant="small" slot="description">Bitdefender Ultimate Security takes care of your online privacy and personal information.</bd-p>
108
108
  <bd-accordion-section no-container>
109
109
  <bd-accordion-item title="Unlimited VPN Traffic" open>
110
- <bd-p kind="small">Encrypt your connection and stay private online across all devices.</bd-p>
110
+ <bd-p variant="small">Encrypt your connection and stay private online across all devices.</bd-p>
111
111
  </bd-accordion-item>
112
112
  <bd-accordion-item title="Password Manager">
113
- <bd-p kind="small">Store and autofill passwords securely across all devices.</bd-p>
113
+ <bd-p variant="small">Store and autofill passwords securely across all devices.</bd-p>
114
114
  </bd-accordion-item>
115
115
  <bd-accordion-item title="Anti-tracker">
116
- <bd-p kind="small">Block trackers and keep your browsing activity private.</bd-p>
116
+ <bd-p variant="small">Block trackers and keep your browsing activity private.</bd-p>
117
117
  </bd-accordion-item>
118
118
  <bd-accordion-item title="Microphone Monitor">
119
- <bd-p kind="small">Alerts you when apps try to access your microphone.</bd-p>
119
+ <bd-p variant="small">Alerts you when apps try to access your microphone.</bd-p>
120
120
  </bd-accordion-item>
121
121
  <bd-accordion-item title="Webcam Protection">
122
- <bd-p kind="small">Prevent unauthorized access to your webcam.</bd-p>
122
+ <bd-p variant="small">Prevent unauthorized access to your webcam.</bd-p>
123
123
  </bd-accordion-item>
124
124
  <bd-accordion-item title="Privacy Firewall">
125
- <bd-p kind="small">Advanced firewall protection for your network.</bd-p>
125
+ <bd-p variant="small">Advanced firewall protection for your network.</bd-p>
126
126
  </bd-accordion-item>
127
127
  </bd-accordion-section>
128
128
  </bd-feature-col>
129
129
 
130
130
  <bd-feature-col title="Identity Protection">
131
- <bd-family-icon slot="icon" size="40" color="#006DFF"></bd-family-icon>
132
- <bd-p kind="small" slot="description">Goes beyond credit monitoring to protect you against identity theft attacks you might not always recognize.</bd-p>
131
+ <bd-family-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-family-icon>
132
+ <bd-p variant="small" slot="description">Goes beyond credit monitoring to protect you against identity theft attacks you might not always recognize.</bd-p>
133
133
  <bd-accordion-section no-container>
134
134
  <bd-accordion-item title="Continuous Dark Web & Surface Monitoring" open>
135
- <bd-p kind="small">Get instant alerts if your data appears on the dark web.</bd-p>
135
+ <bd-p variant="small">Get instant alerts if your data appears on the dark web.</bd-p>
136
136
  </bd-accordion-item>
137
137
  <bd-accordion-item title="Digital Footprint Visualization">
138
- <bd-p kind="small">See and reduce your digital exposure online.</bd-p>
138
+ <bd-p variant="small">See and reduce your digital exposure online.</bd-p>
139
139
  </bd-accordion-item>
140
140
  <bd-accordion-item title="Identity Protection Score">
141
- <bd-p kind="small">Understand your identity risk at a glance.</bd-p>
141
+ <bd-p variant="small">Understand your identity risk at a glance.</bd-p>
142
142
  </bd-accordion-item>
143
143
  <bd-accordion-item title="Real Time Breach Notifications">
144
- <bd-p kind="small">Be first to know when your accounts are compromised.</bd-p>
144
+ <bd-p variant="small">Be first to know when your accounts are compromised.</bd-p>
145
145
  </bd-accordion-item>
146
146
  <bd-accordion-item title="Credit Report Monitoring">
147
- <bd-p kind="small">Track changes to your credit report in real time.</bd-p>
147
+ <bd-p variant="small">Track changes to your credit report in real time.</bd-p>
148
148
  </bd-accordion-item>
149
149
  <bd-accordion-item title="SSN Tracker">
150
- <bd-p kind="small">Monitor usage of your Social Security Number.</bd-p>
150
+ <bd-p variant="small">Monitor usage of your Social Security Number.</bd-p>
151
151
  </bd-accordion-item>
152
152
  </bd-accordion-section>
153
153
  </bd-feature-col>
@@ -161,34 +161,34 @@ const macosPanel = html`
161
161
  <bd-features>
162
162
 
163
163
  <bd-feature-col title="Protection">
164
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
165
- <bd-p kind="small" slot="description">Protection description for macOS.</bd-p>
164
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
165
+ <bd-p variant="small" slot="description">Protection description for macOS.</bd-p>
166
166
  <bd-accordion-section no-container>
167
167
  <bd-accordion-item title="Real-Time Data Protection" open>
168
- <bd-p kind="small">Content for macOS protection.</bd-p>
168
+ <bd-p variant="small">Content for macOS protection.</bd-p>
169
169
  </bd-accordion-item>
170
170
  <bd-accordion-item title="Network Threat Prevention">
171
- <bd-p kind="small">Content here</bd-p>
171
+ <bd-p variant="small">Content here</bd-p>
172
172
  </bd-accordion-item>
173
173
  </bd-accordion-section>
174
174
  </bd-feature-col>
175
175
 
176
176
  <bd-feature-col title="Privacy">
177
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
178
- <bd-p kind="small" slot="description">Privacy description for macOS.</bd-p>
177
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
178
+ <bd-p variant="small" slot="description">Privacy description for macOS.</bd-p>
179
179
  <bd-accordion-section no-container>
180
180
  <bd-accordion-item title="VPN Traffic" open>
181
- <bd-p kind="small">Content for macOS privacy.</bd-p>
181
+ <bd-p variant="small">Content for macOS privacy.</bd-p>
182
182
  </bd-accordion-item>
183
183
  </bd-accordion-section>
184
184
  </bd-feature-col>
185
185
 
186
186
  <bd-feature-col title="Identity Protection">
187
- <bd-family-icon slot="icon" size="40" color="#006DFF"></bd-family-icon>
188
- <bd-p kind="small" slot="description">macOS identity description.</bd-p>
187
+ <bd-family-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-family-icon>
188
+ <bd-p variant="small" slot="description">macOS identity description.</bd-p>
189
189
  <bd-accordion-section no-container>
190
190
  <bd-accordion-item title="Dark Web Monitoring" open>
191
- <bd-p kind="small">Content for macOS identity.</bd-p>
191
+ <bd-p variant="small">Content for macOS identity.</bd-p>
192
192
  </bd-accordion-item>
193
193
  </bd-accordion-section>
194
194
  </bd-feature-col>
@@ -202,31 +202,31 @@ const iosPanel = html`
202
202
  <bd-features>
203
203
 
204
204
  <bd-feature-col title="Protection">
205
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
206
- <bd-p kind="small" slot="description">iOS protection.</bd-p>
205
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
206
+ <bd-p variant="small" slot="description">iOS protection.</bd-p>
207
207
  <bd-accordion-section no-container>
208
208
  <bd-accordion-item title="iOS Real-Time Protection" open>
209
- <bd-p kind="small">Content here</bd-p>
209
+ <bd-p variant="small">Content here</bd-p>
210
210
  </bd-accordion-item>
211
211
  </bd-accordion-section>
212
212
  </bd-feature-col>
213
213
 
214
214
  <bd-feature-col title="Privacy">
215
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
216
- <bd-p kind="small" slot="description">iOS privacy.</bd-p>
215
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
216
+ <bd-p variant="small" slot="description">iOS privacy.</bd-p>
217
217
  <bd-accordion-section no-container>
218
218
  <bd-accordion-item title="iOS VPN" open>
219
- <bd-p kind="small">Content here</bd-p>
219
+ <bd-p variant="small">Content here</bd-p>
220
220
  </bd-accordion-item>
221
221
  </bd-accordion-section>
222
222
  </bd-feature-col>
223
223
 
224
224
  <bd-feature-col title="Identity Protection">
225
- <bd-family-icon slot="icon" size="40" color="#006DFF"></bd-family-icon>
226
- <bd-p kind="small" slot="description">iOS identity.</bd-p>
225
+ <bd-family-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-family-icon>
226
+ <bd-p variant="small" slot="description">iOS identity.</bd-p>
227
227
  <bd-accordion-section no-container>
228
228
  <bd-accordion-item title="iOS Dark Web" open>
229
- <bd-p kind="small">Content here</bd-p>
229
+ <bd-p variant="small">Content here</bd-p>
230
230
  </bd-accordion-item>
231
231
  </bd-accordion-section>
232
232
  </bd-feature-col>
@@ -240,31 +240,31 @@ const androidPanel = html`
240
240
  <bd-features>
241
241
 
242
242
  <bd-feature-col title="Protection">
243
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
244
- <bd-p kind="small" slot="description">Android protection.</bd-p>
243
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
244
+ <bd-p variant="small" slot="description">Android protection.</bd-p>
245
245
  <bd-accordion-section no-container>
246
246
  <bd-accordion-item title="Android Real-Time Protection" open>
247
- <bd-p kind="small">Content here</bd-p>
247
+ <bd-p variant="small">Content here</bd-p>
248
248
  </bd-accordion-item>
249
249
  </bd-accordion-section>
250
250
  </bd-feature-col>
251
251
 
252
252
  <bd-feature-col title="Privacy">
253
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
254
- <bd-p kind="small" slot="description">Android privacy.</bd-p>
253
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
254
+ <bd-p variant="small" slot="description">Android privacy.</bd-p>
255
255
  <bd-accordion-section no-container>
256
256
  <bd-accordion-item title="Android VPN" open>
257
- <bd-p kind="small">Content here</bd-p>
257
+ <bd-p variant="small">Content here</bd-p>
258
258
  </bd-accordion-item>
259
259
  </bd-accordion-section>
260
260
  </bd-feature-col>
261
261
 
262
262
  <bd-feature-col title="Identity Protection">
263
- <bd-family-icon slot="icon" size="40" color="#006DFF"></bd-family-icon>
264
- <bd-p kind="small" slot="description">Android identity.</bd-p>
263
+ <bd-family-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-family-icon>
264
+ <bd-p variant="small" slot="description">Android identity.</bd-p>
265
265
  <bd-accordion-section no-container>
266
266
  <bd-accordion-item title="Android Dark Web" open>
267
- <bd-p kind="small">Content here</bd-p>
267
+ <bd-p variant="small">Content here</bd-p>
268
268
  </bd-accordion-item>
269
269
  </bd-accordion-section>
270
270
  </bd-feature-col>
@@ -320,32 +320,32 @@ export const WithBadges = {
320
320
  <bd-tab-panel title="Windows">
321
321
  <bd-features>
322
322
  <bd-feature-col title="Protection">
323
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
324
- <bd-p kind="small" slot="description">Protection description.</bd-p>
323
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
324
+ <bd-p variant="small" slot="description">Protection description.</bd-p>
325
325
  <bd-accordion-section no-container>
326
326
  <bd-accordion-item title="Complete Real-Time Data Protection" open>
327
- <bd-badge slot="badge" variant="bd-light-blue" size="sm" fontweight="700">BLUE TAG</bd-badge>
328
- <bd-p kind="small">Content here</bd-p>
327
+ <bd-badge slot="badge" tone="primary" variant="fill" size="sm">BLUE TAG</bd-badge>
328
+ <bd-p variant="small">Content here</bd-p>
329
329
  </bd-accordion-item>
330
330
  <bd-accordion-item title="Network Threat Prevention">
331
- <bd-badge slot="badge" color="#43A047" size="sm" fontweight="700">INDUSTRY 1ST</bd-badge>
332
- <bd-p kind="small">Content here</bd-p>
331
+ <bd-badge slot="badge" tone="success" variant="fill" size="sm">INDUSTRY 1ST</bd-badge>
332
+ <bd-p variant="small">Content here</bd-p>
333
333
  </bd-accordion-item>
334
334
  <bd-accordion-item title="Advanced Threat Defense">
335
- <bd-p kind="small">Content here</bd-p>
335
+ <bd-p variant="small">Content here</bd-p>
336
336
  </bd-accordion-item>
337
337
  </bd-accordion-section>
338
338
  </bd-feature-col>
339
339
  <bd-feature-col title="Privacy">
340
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
341
- <bd-p kind="small" slot="description">Privacy description.</bd-p>
340
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
341
+ <bd-p variant="small" slot="description">Privacy description.</bd-p>
342
342
  <bd-accordion-section no-container>
343
343
  <bd-accordion-item title="Unlimited VPN Traffic" open>
344
- <bd-badge slot="badge" variant="bd-light-blue" size="sm" fontweight="700">NEW</bd-badge>
345
- <bd-p kind="small">Content here</bd-p>
344
+ <bd-badge slot="badge" tone="primary" variant="fill" size="sm">NEW</bd-badge>
345
+ <bd-p variant="small">Content here</bd-p>
346
346
  </bd-accordion-item>
347
347
  <bd-accordion-item title="Password Manager">
348
- <bd-p kind="small">Content here</bd-p>
348
+ <bd-p variant="small">Content here</bd-p>
349
349
  </bd-accordion-item>
350
350
  </bd-accordion-section>
351
351
  </bd-feature-col>
@@ -354,11 +354,11 @@ export const WithBadges = {
354
354
  <bd-tab-panel title="macOS">
355
355
  <bd-features>
356
356
  <bd-feature-col title="Protection">
357
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
358
- <bd-p kind="small" slot="description">macOS protection.</bd-p>
357
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
358
+ <bd-p variant="small" slot="description">macOS protection.</bd-p>
359
359
  <bd-accordion-section no-container>
360
360
  <bd-accordion-item title="Real-Time Protection" open>
361
- <bd-p kind="small">Content here</bd-p>
361
+ <bd-p variant="small">Content here</bd-p>
362
362
  </bd-accordion-item>
363
363
  </bd-accordion-section>
364
364
  </bd-feature-col>
@@ -380,26 +380,26 @@ export const TwoColumns = {
380
380
  <bd-tab-panel title="Windows">
381
381
  <bd-features>
382
382
  <bd-feature-col title="Protection">
383
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
384
- <bd-p kind="small" slot="description">Protection description.</bd-p>
383
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
384
+ <bd-p variant="small" slot="description">Protection description.</bd-p>
385
385
  <bd-accordion-section no-container>
386
386
  <bd-accordion-item title="Real-Time Protection" open>
387
- <bd-p kind="small">Content here</bd-p>
387
+ <bd-p variant="small">Content here</bd-p>
388
388
  </bd-accordion-item>
389
389
  <bd-accordion-item title="Network Threat Prevention">
390
- <bd-p kind="small">Content here</bd-p>
390
+ <bd-p variant="small">Content here</bd-p>
391
391
  </bd-accordion-item>
392
392
  </bd-accordion-section>
393
393
  </bd-feature-col>
394
394
  <bd-feature-col title="Privacy">
395
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
396
- <bd-p kind="small" slot="description">Privacy description.</bd-p>
395
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
396
+ <bd-p variant="small" slot="description">Privacy description.</bd-p>
397
397
  <bd-accordion-section no-container>
398
398
  <bd-accordion-item title="VPN Traffic" open>
399
- <bd-p kind="small">Content here</bd-p>
399
+ <bd-p variant="small">Content here</bd-p>
400
400
  </bd-accordion-item>
401
401
  <bd-accordion-item title="Password Manager">
402
- <bd-p kind="small">Content here</bd-p>
402
+ <bd-p variant="small">Content here</bd-p>
403
403
  </bd-accordion-item>
404
404
  </bd-accordion-section>
405
405
  </bd-feature-col>
@@ -408,20 +408,20 @@ export const TwoColumns = {
408
408
  <bd-tab-panel title="macOS">
409
409
  <bd-features>
410
410
  <bd-feature-col title="Protection">
411
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
412
- <bd-p kind="small" slot="description">macOS protection.</bd-p>
411
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
412
+ <bd-p variant="small" slot="description">macOS protection.</bd-p>
413
413
  <bd-accordion-section no-container>
414
414
  <bd-accordion-item title="macOS Protection" open>
415
- <bd-p kind="small">Content here</bd-p>
415
+ <bd-p variant="small">Content here</bd-p>
416
416
  </bd-accordion-item>
417
417
  </bd-accordion-section>
418
418
  </bd-feature-col>
419
419
  <bd-feature-col title="Privacy">
420
- <bd-globe-icon slot="icon" size="40" color="#006DFF"></bd-globe-icon>
421
- <bd-p kind="small" slot="description">macOS privacy.</bd-p>
420
+ <bd-globe-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-globe-icon>
421
+ <bd-p variant="small" slot="description">macOS privacy.</bd-p>
422
422
  <bd-accordion-section no-container>
423
423
  <bd-accordion-item title="macOS Privacy" open>
424
- <bd-p kind="small">Content here</bd-p>
424
+ <bd-p variant="small">Content here</bd-p>
425
425
  </bd-accordion-item>
426
426
  </bd-accordion-section>
427
427
  </bd-feature-col>
@@ -443,17 +443,17 @@ export const OneColumn = {
443
443
  <bd-tab-panel title="Windows">
444
444
  <bd-features>
445
445
  <bd-feature-col title="Protection">
446
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
447
- <bd-p kind="small" slot="description">Single column protection description.</bd-p>
446
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
447
+ <bd-p variant="small" slot="description">Single column protection description.</bd-p>
448
448
  <bd-accordion-section no-container>
449
449
  <bd-accordion-item title="Real-Time Protection" open>
450
- <bd-p kind="small">Content here</bd-p>
450
+ <bd-p variant="small">Content here</bd-p>
451
451
  </bd-accordion-item>
452
452
  <bd-accordion-item title="Network Threat Prevention">
453
- <bd-p kind="small">Content here</bd-p>
453
+ <bd-p variant="small">Content here</bd-p>
454
454
  </bd-accordion-item>
455
455
  <bd-accordion-item title="Advanced Threat Defense">
456
- <bd-p kind="small">Content here</bd-p>
456
+ <bd-p variant="small">Content here</bd-p>
457
457
  </bd-accordion-item>
458
458
  </bd-accordion-section>
459
459
  </bd-feature-col>
@@ -462,11 +462,11 @@ export const OneColumn = {
462
462
  <bd-tab-panel title="macOS">
463
463
  <bd-features>
464
464
  <bd-feature-col title="Protection">
465
- <bd-individual-icon slot="icon" size="40" color="#006DFF"></bd-individual-icon>
466
- <bd-p kind="small" slot="description">macOS single column description.</bd-p>
465
+ <bd-individual-icon slot="icon" size="40" color="var(--color-blue-500)"></bd-individual-icon>
466
+ <bd-p variant="small" slot="description">macOS single column description.</bd-p>
467
467
  <bd-accordion-section no-container>
468
468
  <bd-accordion-item title="macOS Protection" open>
469
- <bd-p kind="small">Content here</bd-p>
469
+ <bd-p variant="small">Content here</bd-p>
470
470
  </bd-accordion-item>
471
471
  </bd-accordion-section>
472
472
  </bd-feature-col>
@@ -0,0 +1,54 @@
1
+ import { css } from 'lit';
2
+
3
+ /** Styled entirely from design tokens — see npm run lint:tokens. */
4
+ export const tagCSS = css`
5
+ :host { display: inline-flex; }
6
+
7
+ span {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ gap: var(--spacing-4);
11
+ font-family: var(--typography-fontFamily-sans);
12
+ font-size: var(--typography-label-small-fontSize);
13
+ font-weight: var(--typography-label-small-fontWeight);
14
+ line-height: var(--typography-label-small-lineHeight);
15
+ letter-spacing: var(--typography-label-small-letterSpacing);
16
+ padding: var(--spacing-2) var(--spacing-8);
17
+ border-radius: var(--radius-full);
18
+ border: var(--border-width-1) solid var(--status-neutral-border);
19
+ color: var(--status-neutral-text);
20
+ background: var(--status-neutral-surface);
21
+ }
22
+
23
+ :host([tone='brand']) span {
24
+ color: var(--status-brand-text);
25
+ background: var(--status-brand-surface);
26
+ border-color: var(--status-brand-border);
27
+ }
28
+
29
+ :host([tone='success']) span {
30
+ color: var(--status-success-text);
31
+ background: var(--status-success-surface);
32
+ border-color: var(--status-success-border);
33
+ }
34
+
35
+ :host([tone='warning']) span {
36
+ color: var(--status-warning-text);
37
+ background: var(--status-warning-surface);
38
+ border-color: var(--status-warning-border);
39
+ }
40
+
41
+ :host([tone='error']) span {
42
+ color: var(--status-error-text);
43
+ background: var(--status-error-surface);
44
+ border-color: var(--status-error-border);
45
+ }
46
+
47
+ :host([tone='info']) span {
48
+ color: var(--status-info-text);
49
+ background: var(--status-info-surface);
50
+ border-color: var(--status-info-border);
51
+ }
52
+ `;
53
+
54
+ export default tagCSS;
@@ -0,0 +1,32 @@
1
+ import { LitElement, html } from 'lit';
2
+ // Installs the design tokens into document scope; see src/tokens/tokens.js
3
+ import '../../tokens/tokens.js';
4
+ import { tagCSS } from './tag.css.js';
5
+
6
+ /** The six tones bd-badge and bd-alert also use. */
7
+ const TONES = ['neutral', 'brand', 'success', 'warning', 'error', 'info'];
8
+
9
+ export class BdTag extends LitElement {
10
+ static styles = [tagCSS];
11
+
12
+ static properties = {
13
+ tone: { type: String, reflect: true }
14
+ };
15
+
16
+ constructor() {
17
+ super();
18
+ this.tone = 'neutral';
19
+ }
20
+
21
+ willUpdate(changed) {
22
+ if (changed.has('tone') && !TONES.includes(this.tone)) this.tone = 'neutral';
23
+ }
24
+
25
+ render() {
26
+ return html`
27
+ <span><slot></slot></span>
28
+ `;
29
+ }
30
+ }
31
+
32
+ customElements.define('bd-tag', BdTag);
@@ -0,0 +1,126 @@
1
+ import { html } from 'lit';
2
+ import './tag.js';
3
+ import '../badge/badge.js';
4
+
5
+ export default {
6
+ title : 'Atoms/Tag',
7
+ tags : ['autodocs'],
8
+ parameters: {
9
+ docs: {
10
+ description: {
11
+ component: `
12
+ **BdTag** is a small label for categorising or filtering — a keyword, a
13
+ category, a selected filter.
14
+
15
+ ### Usage
16
+ \`\`\`html
17
+ <bd-tag>Windows</bd-tag>
18
+ <bd-tag tone="brand">New</bd-tag>
19
+ <bd-tag tone="success">Protected</bd-tag>
20
+ <bd-tag tone="warning">Review</bd-tag>
21
+ <bd-tag tone="error">At risk</bd-tag>
22
+ \`\`\`
23
+
24
+ ### Props
25
+ | Prop | Values | Default |
26
+ |---|---|---|
27
+ | \`tone\` | \`neutral\`, \`brand\`, \`success\`, \`warning\`, \`error\` | \`neutral\` |
28
+
29
+ The text is slotted.
30
+
31
+ ### Tag or badge
32
+ They look similar and mean different things. A **tag** classifies — it is a
33
+ keyword attached to a thing. A **badge** reports state or a count on something
34
+ else, like "3 unread" or "NEW" on a menu item. If it could be removed by the
35
+ user or used as a filter, it is a tag.
36
+
37
+ ### Tag and badge share their tone colours
38
+ A tag and a \`bd-badge\` of the same tone use the **same text colour**, so the
39
+ two read as one family. They differ in two deliberate ways: a tag carries a
40
+ \`--border-width-1\` border and sits on the lighter \`-50\` tint, where a badge
41
+ has no border and takes the heavier \`-100\`. The lighter fill is what lets the
42
+ tag's border read.
43
+
44
+ **Brand is the one exception.** Its heavier tint would be blue-100, which is
45
+ info's, so a brand badge would be indistinguishable from an info badge. A brand
46
+ badge therefore sits on the lighter tint, like a brand tag, and the two differ
47
+ only by the tag's border. There is no \`--status-brand-surface-strong\`.
48
+
49
+ Both now use the same six names — \`neutral\`, \`brand\`, \`success\`,
50
+ \`warning\`, \`error\`, \`info\` — and read the same \`--status-*\` roles, so the
51
+ shared text colour is shared by construction rather than by coincidence. The
52
+ badge's earlier \`default\` and \`primary\` still resolve, to \`neutral\` and
53
+ \`brand\`.
54
+
55
+ ### Notes
56
+ Every tone pairs a text colour and a tint that clear 4.5:1, the lowest being
57
+ 5.59. \`tone\` is not the only carrier of meaning — the tag's own words are —
58
+ so it stays readable without colour perception.
59
+
60
+ The border is faint by design at the \`-200\` step, between 1.21 and 1.97
61
+ against the page. That is not a contrast failure, because a tag is static
62
+ content rather than a control and the tint and text already identify it, but
63
+ it does mean the border reads as a subtle edge rather than a strong outline.
64
+
65
+ It is not interactive. There is no removable variant and no click handling, so
66
+ for a dismissible filter chip you would need a button inside the slot, or a
67
+ component built for it.
68
+ `
69
+ }
70
+ }
71
+ },
72
+ argTypes: {
73
+ tone: {
74
+ control : { type: 'select' },
75
+ options : ['neutral', 'brand', 'success', 'warning', 'error', 'info'],
76
+ description: 'Semantic colour pairing. The wording should carry the meaning too.',
77
+ table : { type: { summary: 'string' }, defaultValue: { summary: "neutral" }, category: 'Appearance' }
78
+ }
79
+ }
80
+ };
81
+
82
+ export const Tones = () => html`
83
+ <bd-tag>Neutral</bd-tag>
84
+ <bd-tag tone="brand">Brand</bd-tag>
85
+ <bd-tag tone="success">Success</bd-tag>
86
+ <bd-tag tone="warning">Warning</bd-tag>
87
+ <bd-tag tone="error">Error</bd-tag>
88
+ `;
89
+
90
+ /**
91
+ * A tag is a single inline-flex row with no wrapping rule of its own, so a long
92
+ * keyword stays on one line and pushes the row wider rather than breaking. In a
93
+ * narrow column that is what overflows.
94
+ */
95
+ export const LongLabel = () => html`
96
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-8); max-width: 22ch">
97
+ <bd-tag>Windows</bd-tag>
98
+ <bd-tag tone="brand">Cross-platform protection</bd-tag>
99
+ <bd-tag tone="success">Up to date</bd-tag>
100
+ </div>
101
+ `;
102
+
103
+ /**
104
+ * The comparison the docs above describe, rendered rather than asserted: same
105
+ * tone, same text colour, different fill step and border. Any change to either
106
+ * component's tone colours shows up here as a difference between the rows.
107
+ */
108
+ export const AgainstBadge = () => html`
109
+ <div style="display: grid; gap: var(--spacing-12); justify-items: start">
110
+ <div style="display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-8)">
111
+ <bd-tag>Neutral</bd-tag>
112
+ <bd-tag tone="brand">Brand</bd-tag>
113
+ <bd-tag tone="success">Success</bd-tag>
114
+ <bd-tag tone="warning">Warning</bd-tag>
115
+ <bd-tag tone="error">Error</bd-tag>
116
+ </div>
117
+ <div style="display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-8)">
118
+ <bd-badge>Default</bd-badge>
119
+ <bd-badge tone="primary">Primary</bd-badge>
120
+ <bd-badge tone="success">Success</bd-badge>
121
+ <bd-badge tone="warning">Warning</bd-badge>
122
+ <bd-badge tone="error">Error</bd-badge>
123
+ <bd-badge tone="info">Info</bd-badge>
124
+ </div>
125
+ </div>
126
+ `;