@deriv-com/dds-marketing 1.0.1 → 1.1.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/.llm/components/awards.md +209 -0
  2. package/.llm/components/background.md +420 -0
  3. package/.llm/components/bottomsheet.md +5 -0
  4. package/.llm/components/comparisoncards.md +257 -0
  5. package/.llm/components/comparisontable.md +231 -0
  6. package/.llm/components/ctabanner.md +22 -0
  7. package/.llm/components/ctabannerslider.md +36 -2
  8. package/.llm/components/datatable.md +273 -0
  9. package/.llm/components/downloadbanner.md +283 -0
  10. package/.llm/components/featurecards.md +41 -3
  11. package/.llm/components/featurecardscarousel.md +311 -0
  12. package/.llm/components/featuresplit.md +5 -0
  13. package/.llm/components/featurestack.md +227 -0
  14. package/.llm/components/illustrationcard.md +236 -0
  15. package/.llm/components/illustrationscene.md +229 -0
  16. package/.llm/components/imagebanner.md +278 -0
  17. package/.llm/components/landinghero.md +24 -0
  18. package/.llm/components/navbar.md +1 -1
  19. package/.llm/components/navbaritem.md +4 -0
  20. package/.llm/components/pageheader.md +22 -0
  21. package/.llm/components/paginationdots.md +6 -1
  22. package/.llm/components/producthero.md +35 -11
  23. package/.llm/components/resourcebanner.md +247 -0
  24. package/.llm/components/scenescroll.md +222 -0
  25. package/.llm/components/select.md +17 -0
  26. package/.llm/components/stats.md +219 -0
  27. package/.llm/components/steps.md +286 -0
  28. package/.llm/components/stickycards.md +251 -0
  29. package/.llm/components/tableheadercell.md +19 -0
  30. package/.llm/components/teamgrid.md +243 -0
  31. package/.llm/components/testimonialrow.md +5 -0
  32. package/.llm/components/testimonialslider.md +14 -1
  33. package/.llm/components/textarea.md +13 -0
  34. package/.llm/components/textinput.md +13 -0
  35. package/.llm/components/textscroll.md +187 -0
  36. package/.llm/components/tiers.md +227 -0
  37. package/.llm/digest/awards.md +45 -0
  38. package/.llm/digest/background.md +53 -0
  39. package/.llm/digest/bottomsheet.md +2 -0
  40. package/.llm/digest/comparisoncards.md +51 -0
  41. package/.llm/digest/comparisontable.md +53 -0
  42. package/.llm/digest/ctabanner.md +4 -0
  43. package/.llm/digest/ctabannerslider.md +7 -0
  44. package/.llm/digest/datatable.md +65 -0
  45. package/.llm/digest/downloadbanner.md +65 -0
  46. package/.llm/digest/featurecards.md +1 -1
  47. package/.llm/digest/featurecardscarousel.md +54 -0
  48. package/.llm/digest/featuresplit.md +1 -0
  49. package/.llm/digest/featurestack.md +48 -0
  50. package/.llm/digest/illustrationcard.md +46 -0
  51. package/.llm/digest/illustrationscene.md +50 -0
  52. package/.llm/digest/imagebanner.md +64 -0
  53. package/.llm/digest/landinghero.md +7 -0
  54. package/.llm/digest/navbaritem.md +1 -0
  55. package/.llm/digest/pageheader.md +4 -0
  56. package/.llm/digest/paginationdots.md +3 -1
  57. package/.llm/digest/producthero.md +4 -2
  58. package/.llm/digest/resourcebanner.md +53 -0
  59. package/.llm/digest/scenescroll.md +49 -0
  60. package/.llm/digest/select.md +5 -0
  61. package/.llm/digest/stats.md +46 -0
  62. package/.llm/digest/steps.md +55 -0
  63. package/.llm/digest/stickycards.md +52 -0
  64. package/.llm/digest/tableheadercell.md +4 -0
  65. package/.llm/digest/teamgrid.md +53 -0
  66. package/.llm/digest/testimonialrow.md +2 -0
  67. package/.llm/digest/testimonialslider.md +4 -0
  68. package/.llm/digest/textarea.md +4 -0
  69. package/.llm/digest/textinput.md +4 -0
  70. package/.llm/digest/textscroll.md +43 -0
  71. package/.llm/digest/tiers.md +50 -0
  72. package/.llm/index.md +25 -2
  73. package/.llm/tokens.md +37 -1
  74. package/AGENTS.md +20 -1
  75. package/dist/components/awards-data.d.ts +24 -0
  76. package/dist/components/awards-data.js +11 -0
  77. package/dist/components/block-image-data.d.ts +24 -0
  78. package/dist/components/block-image-data.js +9 -0
  79. package/dist/components/blocks/awards/Awards.css +134 -0
  80. package/dist/components/blocks/awards/Awards.d.ts +24 -0
  81. package/dist/components/blocks/awards/Awards.js +114 -0
  82. package/dist/components/blocks/awards/Awards.types.d.ts +31 -0
  83. package/dist/components/blocks/awards/Awards.types.js +16 -0
  84. package/dist/components/blocks/awards/awards-impl.css +222 -0
  85. package/dist/components/blocks/cards-of.d.ts +16 -0
  86. package/dist/components/blocks/cards-of.js +23 -0
  87. package/dist/components/blocks/comparison-cards/ComparisonCards.css +195 -0
  88. package/dist/components/blocks/comparison-cards/ComparisonCards.d.ts +24 -0
  89. package/dist/components/blocks/comparison-cards/ComparisonCards.js +75 -0
  90. package/dist/components/blocks/comparison-cards/ComparisonCards.types.d.ts +49 -0
  91. package/dist/components/blocks/comparison-cards/ComparisonCards.types.js +26 -0
  92. package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +262 -0
  93. package/dist/components/blocks/comparison-table/ComparisonTable.css +111 -0
  94. package/dist/components/blocks/comparison-table/ComparisonTable.d.ts +25 -0
  95. package/dist/components/blocks/comparison-table/ComparisonTable.js +100 -0
  96. package/dist/components/blocks/comparison-table/ComparisonTable.types.d.ts +36 -0
  97. package/dist/components/blocks/comparison-table/ComparisonTable.types.js +15 -0
  98. package/dist/components/blocks/comparison-table/comparison-table-impl.css +143 -0
  99. package/dist/components/blocks/cta-banner/CtaBanner.css +1 -0
  100. package/dist/components/blocks/cta-banner/CtaBanner.d.ts +1 -1
  101. package/dist/components/blocks/cta-banner/CtaBanner.js +3 -2
  102. package/dist/components/blocks/cta-banner/CtaBanner.types.d.ts +6 -0
  103. package/dist/components/blocks/cta-banner/CtaBanner.types.js +1 -1
  104. package/dist/components/blocks/cta-banner/cta-banner-impl.css +8 -0
  105. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.css +1 -0
  106. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.d.ts +1 -1
  107. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.js +10 -5
  108. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.d.ts +12 -0
  109. package/dist/components/blocks/cta-banner-slider/CtaBannerSlider.types.js +1 -1
  110. package/dist/components/blocks/cta-banner-slider/cta-banner-slider-impl.css +8 -0
  111. package/dist/components/blocks/data-table/DataTable.css +170 -0
  112. package/dist/components/blocks/data-table/DataTable.d.ts +29 -0
  113. package/dist/components/blocks/data-table/DataTable.js +84 -0
  114. package/dist/components/blocks/data-table/DataTable.types.d.ts +69 -0
  115. package/dist/components/blocks/data-table/DataTable.types.js +19 -0
  116. package/dist/components/blocks/data-table/data-table-impl.css +155 -0
  117. package/dist/components/blocks/download-banner/DownloadBanner.css +228 -0
  118. package/dist/components/blocks/download-banner/DownloadBanner.d.ts +28 -0
  119. package/dist/components/blocks/download-banner/DownloadBanner.js +75 -0
  120. package/dist/components/blocks/download-banner/DownloadBanner.types.d.ts +56 -0
  121. package/dist/components/blocks/download-banner/DownloadBanner.types.js +23 -0
  122. package/dist/components/blocks/download-banner/download-banner-impl.css +216 -0
  123. package/dist/components/blocks/faq-accordion/FaqAccordion.css +1 -0
  124. package/dist/components/blocks/faq-accordion/faq-accordion-impl.css +3 -7
  125. package/dist/components/blocks/feature-bullets/FeatureBullets.css +1 -0
  126. package/dist/components/blocks/feature-bullets/feature-bullets-impl.css +14 -1
  127. package/dist/components/blocks/feature-cards/FeatureCards.css +1 -0
  128. package/dist/components/blocks/feature-cards/FeatureCards.d.ts +2 -1
  129. package/dist/components/blocks/feature-cards/FeatureCards.js +4 -21
  130. package/dist/components/blocks/feature-cards/feature-cards-impl.css +10 -9
  131. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.css +115 -0
  132. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.d.ts +30 -0
  133. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.js +160 -0
  134. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.d.ts +52 -0
  135. package/dist/components/blocks/feature-cards-carousel/FeatureCardsCarousel.types.js +17 -0
  136. package/dist/components/blocks/feature-cards-carousel/feature-cards-carousel-impl.css +207 -0
  137. package/dist/components/blocks/feature-scroll/FeatureScroll.css +1 -0
  138. package/dist/components/blocks/feature-split/FeatureSplit.css +1 -0
  139. package/dist/components/blocks/feature-split/feature-split-impl.css +14 -1
  140. package/dist/components/blocks/feature-stack/FeatureStack.css +86 -0
  141. package/dist/components/blocks/feature-stack/FeatureStack.d.ts +19 -0
  142. package/dist/components/blocks/feature-stack/FeatureStack.js +27 -0
  143. package/dist/components/blocks/feature-stack/FeatureStack.types.d.ts +34 -0
  144. package/dist/components/blocks/feature-stack/FeatureStack.types.js +14 -0
  145. package/dist/components/blocks/feature-stack/feature-stack-impl.css +87 -0
  146. package/dist/components/blocks/image-banner/ImageBanner.css +133 -0
  147. package/dist/components/blocks/image-banner/ImageBanner.d.ts +32 -0
  148. package/dist/components/blocks/image-banner/ImageBanner.js +41 -0
  149. package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +54 -0
  150. package/dist/components/blocks/image-banner/ImageBanner.types.js +14 -0
  151. package/dist/components/blocks/image-banner/image-banner-impl.css +281 -0
  152. package/dist/components/blocks/landing-hero/LandingHero.css +1 -0
  153. package/dist/components/blocks/landing-hero/LandingHero.d.ts +1 -1
  154. package/dist/components/blocks/landing-hero/LandingHero.js +4 -3
  155. package/dist/components/blocks/landing-hero/LandingHero.types.d.ts +7 -3
  156. package/dist/components/blocks/logo-columns/LogoColumns.css +1 -0
  157. package/dist/components/blocks/logo-rows/LogoRows.css +1 -0
  158. package/dist/components/blocks/page-header/PageHeader.css +1 -0
  159. package/dist/components/blocks/page-header/PageHeader.d.ts +1 -1
  160. package/dist/components/blocks/page-header/PageHeader.js +3 -2
  161. package/dist/components/blocks/page-header/PageHeader.types.d.ts +6 -0
  162. package/dist/components/blocks/page-header/PageHeader.types.js +1 -1
  163. package/dist/components/blocks/page-header/page-header-impl.css +10 -0
  164. package/dist/components/blocks/product-hero/ProductHero.css +8 -3
  165. package/dist/components/blocks/product-hero/ProductHero.d.ts +1 -1
  166. package/dist/components/blocks/product-hero/ProductHero.js +5 -2
  167. package/dist/components/blocks/product-hero/ProductHero.types.d.ts +5 -1
  168. package/dist/components/blocks/product-hero/ProductHero.types.js +1 -0
  169. package/dist/components/blocks/product-hero/product-hero-impl.css +43 -12
  170. package/dist/components/blocks/resource-banner/ResourceBanner.css +106 -0
  171. package/dist/components/blocks/resource-banner/ResourceBanner.d.ts +32 -0
  172. package/dist/components/blocks/resource-banner/ResourceBanner.js +51 -0
  173. package/dist/components/blocks/resource-banner/ResourceBanner.types.d.ts +44 -0
  174. package/dist/components/blocks/resource-banner/ResourceBanner.types.js +14 -0
  175. package/dist/components/blocks/resource-banner/resource-banner-impl.css +69 -0
  176. package/dist/components/blocks/scene-scroll/SceneScroll.css +93 -0
  177. package/dist/components/blocks/scene-scroll/SceneScroll.d.ts +36 -0
  178. package/dist/components/blocks/scene-scroll/SceneScroll.js +54 -0
  179. package/dist/components/blocks/scene-scroll/SceneScroll.types.d.ts +32 -0
  180. package/dist/components/blocks/scene-scroll/SceneScroll.types.js +15 -0
  181. package/dist/components/blocks/scene-scroll/scene-scroll-impl.css +275 -0
  182. package/dist/components/blocks/stats/Stats.css +139 -0
  183. package/dist/components/blocks/stats/Stats.d.ts +24 -0
  184. package/dist/components/blocks/stats/Stats.js +120 -0
  185. package/dist/components/blocks/stats/Stats.types.d.ts +36 -0
  186. package/dist/components/blocks/stats/Stats.types.js +19 -0
  187. package/dist/components/blocks/stats/stats-count.d.ts +34 -0
  188. package/dist/components/blocks/stats/stats-count.js +61 -0
  189. package/dist/components/blocks/stats/stats-impl.css +284 -0
  190. package/dist/components/blocks/stats/use-wheel.d.ts +37 -0
  191. package/dist/components/blocks/stats/use-wheel.js +126 -0
  192. package/dist/components/blocks/steps/Steps.css +202 -0
  193. package/dist/components/blocks/steps/Steps.d.ts +32 -0
  194. package/dist/components/blocks/steps/Steps.js +65 -0
  195. package/dist/components/blocks/steps/Steps.types.d.ts +48 -0
  196. package/dist/components/blocks/steps/Steps.types.js +21 -0
  197. package/dist/components/blocks/steps/steps-impl.css +216 -0
  198. package/dist/components/blocks/steps/use-turn.d.ts +33 -0
  199. package/dist/components/blocks/steps/use-turn.js +75 -0
  200. package/dist/components/blocks/sticky-cards/StickyCards.css +154 -0
  201. package/dist/components/blocks/sticky-cards/StickyCards.d.ts +35 -0
  202. package/dist/components/blocks/sticky-cards/StickyCards.js +153 -0
  203. package/dist/components/blocks/sticky-cards/StickyCards.types.d.ts +43 -0
  204. package/dist/components/blocks/sticky-cards/StickyCards.types.js +18 -0
  205. package/dist/components/blocks/sticky-cards/sticky-cards-impl.css +393 -0
  206. package/dist/components/blocks/team-grid/TeamGrid.css +159 -0
  207. package/dist/components/blocks/team-grid/TeamGrid.d.ts +28 -0
  208. package/dist/components/blocks/team-grid/TeamGrid.js +74 -0
  209. package/dist/components/blocks/team-grid/TeamGrid.types.d.ts +51 -0
  210. package/dist/components/blocks/team-grid/TeamGrid.types.js +20 -0
  211. package/dist/components/blocks/team-grid/team-grid-impl.css +129 -0
  212. package/dist/components/blocks/testimonial-row/TestimonialRow.css +1 -0
  213. package/dist/components/blocks/testimonial-row/TestimonialRow.d.ts +1 -1
  214. package/dist/components/blocks/testimonial-row/TestimonialRow.js +4 -3
  215. package/dist/components/blocks/testimonial-row/TestimonialRow.types.d.ts +3 -0
  216. package/dist/components/blocks/testimonial-row/TestimonialRow.types.js +1 -1
  217. package/dist/components/blocks/testimonial-row/testimonial-row-impl.css +8 -0
  218. package/dist/components/blocks/testimonial-slider/TestimonialSlider.css +1 -0
  219. package/dist/components/blocks/testimonial-slider/TestimonialSlider.d.ts +1 -1
  220. package/dist/components/blocks/testimonial-slider/TestimonialSlider.js +2 -2
  221. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.d.ts +8 -0
  222. package/dist/components/blocks/testimonial-slider/TestimonialSlider.types.js +1 -1
  223. package/dist/components/blocks/text-scroll/TextScroll.css +53 -0
  224. package/dist/components/blocks/text-scroll/TextScroll.d.ts +5 -0
  225. package/dist/components/blocks/text-scroll/TextScroll.js +71 -0
  226. package/dist/components/blocks/text-scroll/TextScroll.types.d.ts +22 -0
  227. package/dist/components/blocks/text-scroll/TextScroll.types.js +10 -0
  228. package/dist/components/blocks/text-scroll/text-scroll-impl.css +115 -0
  229. package/dist/components/blocks/tiers/Tiers.css +233 -0
  230. package/dist/components/blocks/tiers/Tiers.d.ts +32 -0
  231. package/dist/components/blocks/tiers/Tiers.js +68 -0
  232. package/dist/components/blocks/tiers/Tiers.types.d.ts +45 -0
  233. package/dist/components/blocks/tiers/Tiers.types.js +25 -0
  234. package/dist/components/blocks/tiers/tiers-impl.css +185 -0
  235. package/dist/components/blocks/use-rotation.d.ts +12 -2
  236. package/dist/components/blocks/use-rotation.js +6 -28
  237. package/dist/components/comparison-cards-data.d.ts +59 -0
  238. package/dist/components/comparison-cards-data.js +12 -0
  239. package/dist/components/comparison-table-data.d.ts +39 -0
  240. package/dist/components/comparison-table-data.js +11 -0
  241. package/dist/components/core/accordion-item/AccordionItem.css +1 -5
  242. package/dist/components/core/background/Background.css +92 -0
  243. package/dist/components/core/background/Background.d.ts +27 -0
  244. package/dist/components/core/background/Background.js +45 -0
  245. package/dist/components/core/background/Background.types.d.ts +39 -0
  246. package/dist/components/core/background/Background.types.js +11 -0
  247. package/dist/components/core/background/background-impl.css +760 -0
  248. package/dist/components/core/background/halftone.d.ts +134 -0
  249. package/dist/components/core/background/halftone.js +722 -0
  250. package/dist/components/core/background/patterns.d.ts +66 -0
  251. package/dist/components/core/background/patterns.js +244 -0
  252. package/dist/components/core/background/shader.d.ts +44 -0
  253. package/dist/components/core/background/shader.js +307 -0
  254. package/dist/components/core/background/use-halftone.d.ts +15 -0
  255. package/dist/components/core/background/use-halftone.js +27 -0
  256. package/dist/components/core/background/use-offscreen.d.ts +10 -0
  257. package/dist/components/core/background/use-offscreen.js +30 -0
  258. package/dist/components/core/background/use-shader.d.ts +11 -0
  259. package/dist/components/core/background/use-shader.js +25 -0
  260. package/dist/components/core/background/use-spotlight.d.ts +14 -0
  261. package/dist/components/core/background/use-spotlight.js +73 -0
  262. package/dist/components/core/bottom-sheet/BottomSheet.js +2 -2
  263. package/dist/components/core/bottom-sheet/BottomSheet.types.d.ts +3 -1
  264. package/dist/components/core/breadcrumb/Breadcrumb.d.ts +1 -0
  265. package/dist/components/core/breadcrumb/Breadcrumb.js +1 -0
  266. package/dist/components/core/breadcrumb/breadcrumb-impl.css +11 -0
  267. package/dist/components/core/button/button-impl.css +14 -1
  268. package/dist/components/core/illustration-card/IllustrationCard.css +40 -0
  269. package/dist/components/core/illustration-card/IllustrationCard.d.ts +22 -0
  270. package/dist/components/core/illustration-card/IllustrationCard.js +82 -0
  271. package/dist/components/core/illustration-card/IllustrationCard.types.d.ts +23 -0
  272. package/dist/components/core/illustration-card/IllustrationCard.types.js +8 -0
  273. package/dist/components/core/illustration-card/illustration-card-impl.css +47 -0
  274. package/dist/components/core/illustration-scene/IllustrationScene.css +41 -0
  275. package/dist/components/core/illustration-scene/IllustrationScene.d.ts +14 -0
  276. package/dist/components/core/illustration-scene/IllustrationScene.js +16 -0
  277. package/dist/components/core/illustration-scene/IllustrationScene.types.d.ts +32 -0
  278. package/dist/components/core/illustration-scene/IllustrationScene.types.js +8 -0
  279. package/dist/components/core/illustration-scene/illustration-scene-impl.css +46 -0
  280. package/dist/components/core/link/Link.js +7 -3
  281. package/dist/components/core/link/link-impl.css +29 -2
  282. package/dist/components/core/navbar/Navbar.css +2 -2
  283. package/dist/components/core/navbar/Navbar.types.d.ts +1 -1
  284. package/dist/components/core/navbar-item/NavbarItem.d.ts +2 -1
  285. package/dist/components/core/navbar-item/NavbarItem.js +3 -10
  286. package/dist/components/core/navbar-item/NavbarItem.types.d.ts +4 -1
  287. package/dist/components/core/navbar-item/NavbarItem.types.js +1 -1
  288. package/dist/components/core/navbar-item/navbar-item-impl.css +10 -0
  289. package/dist/components/core/navbar-menu/navbar-menu-impl.css +9 -0
  290. package/dist/components/core/navbar-switcher/navbar-switcher-impl.css +19 -0
  291. package/dist/components/core/pagination/Pagination.js +1 -1
  292. package/dist/components/core/pagination/pagination-impl.css +9 -0
  293. package/dist/components/core/pagination-dots/PaginationDots.d.ts +1 -1
  294. package/dist/components/core/pagination-dots/PaginationDots.js +3 -3
  295. package/dist/components/core/pagination-dots/PaginationDots.types.d.ts +3 -1
  296. package/dist/components/core/segmented-control/SegmentedControl.css +4 -3
  297. package/dist/components/core/segmented-control/SegmentedControl.js +17 -3
  298. package/dist/components/core/segmented-control-item/SegmentedControlItem.css +2 -1
  299. package/dist/components/core/select/Select.js +3 -3
  300. package/dist/components/core/select/Select.types.d.ts +11 -1
  301. package/dist/components/core/select/Select.types.js +1 -1
  302. package/dist/components/core/tab-list/TabList.js +9 -1
  303. package/dist/components/core/table-header-cell/TableHeaderCell.d.ts +1 -1
  304. package/dist/components/core/table-header-cell/TableHeaderCell.js +5 -2
  305. package/dist/components/core/table-header-cell/TableHeaderCell.types.d.ts +7 -1
  306. package/dist/components/core/table-header-cell/TableHeaderCell.types.js +1 -1
  307. package/dist/components/core/text-area/TextArea.d.ts +1 -1
  308. package/dist/components/core/text-area/TextArea.js +2 -2
  309. package/dist/components/core/text-area/TextArea.types.d.ts +9 -1
  310. package/dist/components/core/text-area/TextArea.types.js +1 -1
  311. package/dist/components/core/text-input/TextInput.d.ts +1 -1
  312. package/dist/components/core/text-input/TextInput.js +2 -2
  313. package/dist/components/core/text-input/TextInput.types.d.ts +9 -1
  314. package/dist/components/core/text-input/TextInput.types.js +1 -1
  315. package/dist/components/data-table-data.d.ts +33 -0
  316. package/dist/components/data-table-data.js +12 -0
  317. package/dist/components/download-banner-data.d.ts +52 -0
  318. package/dist/components/download-banner-data.js +11 -0
  319. package/dist/components/index.d.ts +51 -0
  320. package/dist/components/index.js +38 -0
  321. package/dist/components/resource-banner-data.d.ts +34 -0
  322. package/dist/components/resource-banner-data.js +13 -0
  323. package/dist/components/scene-scroll-data.d.ts +24 -0
  324. package/dist/components/scene-scroll-data.js +9 -0
  325. package/dist/components/stats-data.d.ts +28 -0
  326. package/dist/components/stats-data.js +11 -0
  327. package/dist/components/steps-data.d.ts +38 -0
  328. package/dist/components/steps-data.js +13 -0
  329. package/dist/components/sticky-cards-data.d.ts +43 -0
  330. package/dist/components/sticky-cards-data.js +12 -0
  331. package/dist/components/team-grid-data.d.ts +38 -0
  332. package/dist/components/team-grid-data.js +11 -0
  333. package/dist/components/tiers-data.d.ts +47 -0
  334. package/dist/components/tiers-data.js +13 -0
  335. package/dist/marketing.css +101 -28
  336. package/package.json +1 -1
@@ -0,0 +1,50 @@
1
+ <!-- GENERATED from tiers.contract.json. Do not edit. -->
2
+
3
+ # Tiers
4
+
5
+ A partnership-tier section: a centred heading over an ordered row of tiers, each a medal, a name and the stage it stands for, a card stating what the tier gives, and the bar a partner clears to reach it — with an optional way on under the row. …
6
+
7
+ `import { Tiers } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A partner, affiliate or introducing-broker programme explains its tiers and what each one earns
12
+ - Rewards grow with performance in two to four steps — commission bonuses, loyalty levels, a VIP ladder — and each step has a bar to clear
13
+ - A partner landing page needs the progression shown at a glance, with a link on to the programme's full terms
14
+
15
+ ## Something else, when
16
+
17
+ - The items have no order — they are things a product includes, or reasons to choose it → **FeatureCards**
18
+ - The items are things a reader does, one after another, to get started → **Steps**
19
+ - Plans a reader chooses between, each with the same rows of terms → **ComparisonCards**
20
+
21
+ ## Never
22
+
23
+ - More than four tiers. The row holds four at full width and the track through the medals has nowhere to go past that; a longer ladder wants a table
24
+ - Plans or prices a reader picks between. A tier is reached, not bought, and a row that reads as a progression tells a reader the cheaper plan is a step on the way to the dearer one
25
+ - A tier promised without its bar. A benefit with no stated qualification on anything above the entry tier is a claim the page cannot stand behind
26
+
27
+ ## Props
28
+
29
+ - **ground** `enum` · default "page" — Which of the page's three grounds this section paints. A marketing page is white, and a band that wants to be seen as a band takes one of the other two — so this is how a page builds its rhythm: white, white, grey, white, dark. …
30
+ - `page` — The default, and the page's own white. A section that has nothing to separate itself from what is above it — most of them. The benefit cards are Card's recessed grey on it
31
+ - `subtle` — A quiet step off the page, for a band that wants to read as its own section without changing the page's voice. The reference design paints this section grey, and a page following it closely takes this. …
32
+ - `strong` — `color.bg.brand-strong`, the dark band. It stops the page rather than dividing it, so it is for a section a reader should arrive at — and one per page is usually one more than enough. …
33
+ - never: Marking importance. Every section on a page painted dark is a page with no emphasis left. And never the brand's own coral, `color.bg.brand`, which is not offered here: that ground belongs to the band that asks a reader to do something, and a tier section wearing it is a page with two calls to action, one of which does nothing
34
+ - **title** `string` · required — Always. What the tiers add up to, in the fewest words that say it — 'Growing rewards as you scale'
35
+ - never: A sentence. The line under it is for the sentence
36
+ - **description** `string` · optional — A line saying how the tiers work, when the title alone does not — 'Our tiered partnership model rewards performance.'
37
+ - never: A paragraph, or a summary of every tier. The tiers say what they give; this only says why they are a ladder
38
+ - **tiers** `data` · required — Always. The tiers, lowest first — two to four, four for a partnership programme. …
39
+ - never: Tiers in any order but lowest to highest. The track through the medals reads start to end, and a ladder drawn out of order is one a reader climbs the wrong way
40
+ - **link** `node` · optional — A way on to the programme's full terms — 'Learn more about partner tiers'. A standalone Link, under the row
41
+ - never: A button, or the sign-up itself. The section explains the ladder; asking a reader to join is the job of the band that does nothing else
42
+
43
+ ## Inside it
44
+
45
+ - 10 components are refused inside it; the list and the reasons are in the long document.
46
+ - Renders 19 parts: root, inner, header, title, description, list, tier, medal-row, line-start, medal, line-end, heading, name, stage, benefit, benefit-title, benefit-description, qualification, footer.
47
+
48
+ ---
49
+
50
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/tiers.md`.
package/.llm/index.md CHANGED
@@ -9,6 +9,8 @@ need — loading all of them dilutes the relevant one.
9
9
  Paths here are from the package root, so they resolve whether this file is read in place
10
10
  or its content handed over on its own.
11
11
 
12
+ Sections: Core (54) · Layout (5) · Blocks (30)
13
+
12
14
 
13
15
  ## Core
14
16
 
@@ -19,6 +21,7 @@ Domain-neutral building blocks.
19
21
  | Component | Use when | Not for |
20
22
  |---|---|---|
21
23
  | AccordionItem | One row inside an Accordion — every row of a set is one of these · A single disclosure with no set around it: one topic whose detail is worth offering and not worth showing. The row is whole on its own, and it keeps its own open state when nothing is injecting one | The heading goes somewhere rather than opening something → `CardButton` |
24
+ | Background | A band that has to stand apart from the page around it with more than a change of fill — the opening of a landing page, a call to action, a section that closes a long page · A dark band that would otherwise be a flat slab. The glow gives it a centre for the eye, which is where the band's heading or its action should sit · A light page that wants one moment of brand colour without a coral block: the dots carry the colour at a fraction of the area a fill would | The band only needs separating from the page around it → nothing here · The ground is a picture or a video → `AspectRatio` |
22
25
  | Badge | One of a set is the one the page wants read first — the plan most people choose, the market most people start with · Something is new or has changed, and saying so is worth a word rather than a sentence · A number the page is promoting is worth marking as a saving rather than left in the copy — a percentage off, a period free | What it says is a state the reader's account is in → nothing here · The words are the point rather than the mark → `CardBody` |
23
26
  | Breadcrumb | The page sits inside a section hierarchy, and the levels above it are places the visitor can navigate to — a product page inside a markets section, a blog post inside a category · A visitor who arrived by search, social link or campaign URL needs to learn where they landed and how the site is organised around them | The visitor is moving through the stages of a sign-up or onboarding flow rather than standing in a hierarchy → nothing here · There is exactly one place to go back to, and it is the previous page rather than a parent section → nothing here |
24
27
  | BreadcrumbItem | Rendering one level of a Breadcrumb — every level in a trail is one of these · The level needs a short name the visitor recognises as a place: the section name, not a sentence about it | The destination is somewhere the visitor goes to act rather than a level they climb back to → nothing here |
@@ -32,6 +35,8 @@ Domain-neutral building blocks.
32
35
  | DropdownMenu | A set of destinations too long for the navigation bar and too short to be a page of its own — languages, regions, the parts of a long index · The set is short enough to read at a glance, where a visitor is choosing rather than searching | The set reports a choice the visitor should find marked when they return → nothing here · The destinations belong in the page's navigation → nothing here · It is one destination rather than one of a set → nothing here · The set is long enough that a visitor would rather type than read → nothing here |
33
36
  | FooterGroup | A set of a footer's destinations belong under one word — Markets, Support, Legal · The footer has enough links that a reader scanning it needs sets rather than a list | The destinations are the ones a visitor most likely wants → `Navbar` · The group is a named set inside a navigation panel → `NavbarMenuGroup` · There is one link rather than a set → `Link` |
34
37
  | Icon | A glyph stands beside words to speed recognition — a mark on a feature card, a chevron on a row, a separator in a trail · A page is composing something a component offers a slot for, and the slot takes a mark rather than a component that draws one | The mark identifies a company or a product — a payment method, an app store, a social network → `Logo` *(not built yet)* · The artwork is a scene rather than a symbol → `Illustration` *(not built yet)* |
38
+ | IllustrationCard | Product information laid over a photograph or a piece of art — a market's price and status over a picture of a trader, a balance over a device · A standalone image of the product beside a section's words, where a screenshot would be too literal: the pane is the picture the section shows · Several such pictures across a site that have to agree in shape and surface without each page deciding | A section has content to present — features, benefits, steps, a list → `FeatureCards` · The content is something a reader acts on — a link, a form, a set of options → `Card` · There is only a photograph → `AspectRatio` |
39
+ | IllustrationScene | Product information shown over a photograph — a trade ticket, a balance, a market's status — where the photograph sets the scene and the card says what the product does · A hero or a feature section needs a picture of the product in use rather than a screenshot or a photograph alone | The card stands on its own, with no photograph behind it → `IllustrationCard` · There is only a photograph → `AspectRatio` |
35
40
  | Link | A term inside running copy has a page of its own — a market named in a paragraph, a fee mentioned in a sentence, a product referred to in passing · The page must offer a destination without pushing it: terms, a full fee schedule, a regulatory notice. A pill would give it the weight of the thing the page is actually asking for · A second destination beside the call to action, where a second pill would be two things asking to be pressed and a reader would have to choose between them before reading either | The destination is the step the page was built to produce → `Button` · Pressing it does something on this page rather than going somewhere → nothing here · The whole card or panel is the target rather than some words in it → `CardButton` |
36
41
  | MenuItem | A row in a menu of destinations — a language, a region, a page number an index skipped · A set short enough to read at a glance, where a reader is choosing rather than searching | The row reports a choice the reader should find marked when they return → nothing here · The destination belongs in the page's navigation → nothing here · It is one action rather than one of a set → nothing here |
37
42
  | NavbarItem | A section of the site, in a Navbar — the ordinary case and what this is for · A destination that leaves the site, which it marks as a change of context rather than leaving the reader to find out · The same destination inside the panel a narrow bar collapses into: a page writes its navigation once, and what changes with the width is how it is drawn | The destination opens a panel of further destinations rather than going somewhere → `NavbarMenu` · The destination is a phrase inside a sentence, or a call to action beneath a paragraph → `Link` · The item is one of a set of alternatives rather than a place → `Tab` |
@@ -78,6 +83,7 @@ Domain-neutral building blocks.
78
83
  ## Layout
79
84
 
80
85
  Arrange other components and decide no appearance of their own.
86
+
81
87
  | Component | Use when | Not for |
82
88
  |---|---|---|
83
89
  | AspectRatio | A picture whose proportions have to match the ones beside it — a row of cards, a grid of markets, a set of logos. One shape asked for once is what keeps a row from settling on whichever image is tallest · Room that must be reserved before the thing filling it arrives — art loaded late, an embed, anything fetched. The box is the right height from the first paint, so the page under it never moves · An embed that brings its own proportion and no height — a video, a map, a third-party frame. The ratio is the only way to give it one without guessing a pixel measure that is wrong at some width | The picture is the media region of a card → `CardBody` · The thing inside has a size of its own and should keep it → nothing here · The shape changes with the viewport → nothing here |
@@ -89,19 +95,36 @@ Arrange other components and decide no appearance of their own.
89
95
  ## Blocks
90
96
 
91
97
  The sections a page is built from, and the rhythm between them.
98
+
92
99
  | Component | Use when | Not for |
93
100
  |---|---|---|
101
+ | Awards | Building credibility with the industry awards a company has won — a “Why choose us”, about-us or trust page · Six awards or more, enough that the phone's row reads as running on past the band's edge and the rows from the fold read as a field | One to three awards, or a few figures that make the case → `FeatureCards` · Partners, integrations or payment methods rather than awards → `LogoRows` · Reviews from customers rather than recognition from the industry → `TestimonialRow` |
102
+ | ComparisonCards | Two or three products, accounts or plans that answer the same few questions differently — what you hold, what it costs, how far you can lose — and the difference is the point of the section · A "What you can trade" band: Spot against Futures, Options against Multipliers, each with its own rows and its own risk note | Five or more options, or rows that are the same for every option and read down a column → `ComparisonTable` · The options are features rather than alternatives — each a heading and a sentence, with nothing to compare row by row → `FeatureCards` · One option and the list of what it includes → `FeatureBullets` |
103
+ | ComparisonTable | Comparing two or three options — platforms, plans, operating systems — on the same handful of features, where the reader reads across a row as often as down a column · A product page's "Web terminal, desktop or mobile": the same few features, each option's answer in a word or a short line · Schedule-style rows, where a cell may hold a short list of lines — a market's trading sessions, the days a rate applies | Each option has more to say than a cell holds — a sentence of its own, a footnote, a way on → `ComparisonCards` · A large dataset — many instruments, many columns — that a reader searches, sorts or pages through → `DataTable` · One option and the list of what it includes → `FeatureBullets` |
94
104
  | CtaBanner | A short, high-contrast promotion with one clear action — open an account, start trading, download the app · The band that closes a page, or breaks a long one, on the action the page exists to produce | Two or three promotions to rotate between → `CtaBannerSlider` · The band that opens the page → `LandingHero` · A message that needs a picture beside it → `FeatureSplit` |
95
105
  | CtaBannerSlider | Rotating between two or three genuinely different promotions without a hero's weight — open an account, try a tool, download the app | One promotion → `CtaBanner` · The band that opens the page → `LandingHero` · A message with more than a headline, a line and a button or two → `FeatureSplit` |
106
+ | DataTable | Trading instruments and their specifications — contract size, minimum size, volume limits — on a market page · Trading conditions a reader looks up rather than reads through: spreads, leverage, margin, swaps · An MT5 or Deriv X specification page, where the set runs to dozens of rows and a reader is hunting for the one they trade | Three or four plans or accounts compared feature by feature, where every row is read rather than searched → `ComparisonTable` · A handful of rows with no need to search or page — a fee schedule of four lines → `Table` |
107
+ | DownloadBanner | Promoting an app across the stores and platforms it ships on — App Store, Google Play, AppGallery, a desktop download, the web · A trading platform's page, near its end, once the product has been explained and the next thing a reader wants is to get it | One download, or the web alone → `Button` · A promotion that has to argue for the download in a headline and a sentence → `CtaBanner` |
96
108
  | FaqAccordion | The questions a reader asks before acting — fees, limits, how long a withdrawal takes — near the end of a landing page or on a help page · Objections a page has to answer without making every reader read every answer | The answers are short enough to read all at once → `FeatureBullets` · Each item is a feature, not a question → `FeatureCards` |
97
109
  | FeatureBullets | A page has to list what a product or a plan includes, and the list is the argument · Several benefits are each one line long and are read by scanning rather than reading · A claim needs something beside it, and a picture is the only thing there is to put there | The items are two or three words and belong on one line → `Badge` · Each item needs a heading and a paragraph of its own → `Card` · The section opens the page → `ProductHero` |
98
- | FeatureCards | Three or four things a product does, each a heading and a sentence, read side by side and compared at a glance · A set of destinations — markets, platforms, tools — each a card a reader presses to go there · One feature that deserves the whole row in a card of its own — the words beside a large picture, carded on the section's ground | Each item is one line, and the list is the argument → `FeatureBullets` · One claim beside a picture, with no card around it → `FeatureSplit` · The items are read in order, one leading to the next → `FeatureScroll` |
110
+ | FeatureCards | Three or four things a product does, each a card with a heading, a line and a picture under them, read side by side and compared at a glance — the first choice for a set of three. The picture is CardBody's `src`, drawn below the words by default · A set of destinations — markets, platforms, tools — each a card a reader presses to go there · One feature that deserves the whole row in a card of its own — the words beside a large picture, carded on the section's ground | Each item is one line, and the list is the argument → `FeatureBullets` · One claim beside a picture, with no card around it → `FeatureSplit` · The items are read in order, one leading to the next → `FeatureScroll` |
111
+ | FeatureCardsCarousel | A "what you get" band of five or six authored cards, each a benefit with a line and a picture, too many for one row of a grid, where one card in focus with a peek of the next is the point. Three or four cards are FeatureCards, which shows the whole set at once · A platform or product page whose feature cards are too many for one row of a grid and too equal to be a sequence | Three or four cards — the set a grid shows in one row → `FeatureCards` · The cards are read in order, one leading to the next → `FeatureScroll` · Two or three promotions on the brand's coral, one at a time → `CtaBannerSlider` |
99
112
  | FeatureScroll | A page has three or more things of the same kind to explain, each with a picture worth a screen — the markets a broker offers, the platforms it runs, the steps of an account opening · The set is meant to be walked through rather than compared, and a reader is expected to scroll it · The set comes from somewhere — a CMS, a registry, a filtered list — rather than being written out by hand | There are three or four items a reader is meant to compare → `FeatureCards` · The set is lines rather than things — what an account includes → `FeatureBullets` · There is one point to make → `FeatureSplit` · The section opens the page → `LandingHero` |
100
- | FeatureSplit | A page needs one more point about something it has already introduced, with a picture to carry it · The point is a sentence rather than a list, and does not earn a set of cards · A section needs a way onward that is not a call to action — a link to the page that says more | The point is several things the reader gets, each one line long → `FeatureBullets` · There are three or four points and each needs its own picture → `FeatureCards` · The section opens the page → `ProductHero` |
113
+ | FeatureSplit | A page needs one more point about something it has already introduced, with a picture to carry it · The point is a sentence rather than a list, and does not earn a set of cards · A section needs a way onward that is not a call to action — a link to the page that says more | The point is several things the reader gets, each one line long → `FeatureBullets` · There are three or four points and each needs its own picture → `FeatureCards` · The section opens the page → `ProductHero` · The picture is the section's weight, wide or tall enough to stand under the words rather than beside them → `FeatureStack` |
114
+ | FeatureStack | A statement with a picture that carries it — a global reach shown on a globe, a platform shown on a device — where the picture is the section's weight and the words introduce it · Closing a page or a stretch of one on an image, with a way on for the reader who wants more | The picture belongs beside the words, the two read side by side → `FeatureSplit` · The section is a set of figures read as a set → `Stats` · The section asks the reader to do one thing, now → `CtaBanner` |
115
+ | ImageBanner | Driving a single mid-page or end-of-page action with a photograph to carry it — a community, a hub, a platform · A dark, editorial break between lighter sections | The section opens the page → `ProductHero` · The point wants the page's own light ground rather than a dark card → `FeatureSplit` · There is no photograph, only a headline and an action → `CtaBanner` · The section says what a programme or a product comes with, as a list of features → `FeatureBullets` |
101
116
  | LandingHero | A main landing page needs its opening band — the front page, or a campaign page under it · The claim has room to range to the reading edge with a subject beside it, which is what the landing tier is for · The steps between an eyebrow, a title, a description and the actions under them have to be the same on every landing page | The page is a product or a market page → `ProductHero` · The page is a company or a legal one — contact, about, terms → `PageHeader` · The band closes the page rather than opening it → `Footer` |
102
117
  | LogoColumns | Showing the partners, integrations or payment methods behind a claim — the names a reader recognises, as evidence for what the words say · Eight or more logos, enough that each column reads as running on past both edges of the wall | A handful of logos a reader should be able to count and compare → `Grid` · One picture beside the claim → `FeatureSplit` · Each logo needs to be pressed — a partner directory → `FeatureCards` |
103
118
  | LogoRows | Showing the partners, integrations or payment methods behind a claim under it, where the words lead and the logos follow · Eight or more logos, enough that each of the two rows reads as running on past both edges of the band | The logos should stand beside the claim, as a wall that is half the section → `LogoColumns` · A handful of logos a reader should be able to count and compare → `Grid` |
104
119
  | PageHeader | A company, legal or support page needs its opening band — contact, about, terms, a regulatory notice · The page is read rather than acted on, so its opening should name it and then get out of the way · The steps between an eyebrow, a title and a description have to be the same on every such page | The page is the front page, or a campaign page under it → `LandingHero` · The page is a product or a market page → `ProductHero` · The band closes the page rather than opening it → `Footer` |
105
120
  | ProductHero | A product or a market page needs its opening band — a platform, an instrument, an asset class · The thing the page is about is worth showing whole, under the claim rather than beside it · The steps between an eyebrow, a title, a description and the actions under them have to be the same on every product page | The page is the front page, or a campaign page under it → `LandingHero` · The page is a company or a legal one — contact, about, terms → `PageHeader` · The band closes the page rather than opening it → `Footer` |
121
+ | ResourceBanner | Pointing readers at related guides, policies, or reference pages at the end of an informational section — the 'here's where to read more' block · A section of a legal, help or safety page has said what it has to and the detail lives elsewhere — the full terms, a risk disclosure, a help-centre article | The block asks the reader to do something — open an account, start trading → `CtaBanner` · The resources are a set of destinations each worth a heading and a sentence → `FeatureCards` · The reader's questions have short answers that can be given on the page → `FaqAccordion` |
122
+ | SceneScroll | Two states of one thing a page wants felt rather than listed — the markets by day and by night, a trader's screen before and after, a market open around the clock · One immersive moment on a product or campaign page, between lighter sections, where two photographs carry the argument and the words are a heading and a line each · The opening band of a campaign page built around that change, at headingLevel h1 | There is one photograph, not two states of something → `ImageBanner` · Three or more things to show, each with a picture → `FeatureScroll` · The page's opening band, with an action to take → `LandingHero` · One statement on its own, revealed as the reader scrolls → `TextScroll` |
123
+ | Stats | Three to five headline numbers that prove scale or credibility — traders, markets, years, the smallest deposit — where the set is the point — read along a row from the fold, turned through one at a time on a phone · A break between two heavier sections, when the numbers alone tell the story | Each item needs a sentence of its own, or a picture → `FeatureCards` · The number is part of a claim the page is making in words → `FeatureSplit` |
124
+ | Steps | A page explains a get-started or onboarding flow — opening an account, funding it, starting to trade · A process has three to six steps that a reader follows in one order, each a short imperative and a sentence · A setup or a how-to page — a platform's install, a deposit or a withdrawal — needs its sequence shown beside one picture · The same how-it-works list, walked through on its own: with `autoplay` each step takes its turn, its rule filling as it holds, and the picture changes to that step's — a sequence shown in sequence rather than all at once | The items have no order a reader follows — they are things a product includes → `FeatureBullets` · Three or four things side by side, each with its own picture → `FeatureCards` · Each stage needs a screen and a picture of its own → `FeatureScroll` |
125
+ | StickyCards | A set of markets, products or benefits a page wants read one at a time as the reader scrolls — the reference design's "What we offer" — where each is a title and a sentence, and a picture or an animation is optional · Three steps or benefits that each need a picture of their own — Sign up, Deposit, Trade — told as a sequence the reader scrolls through rather than a row they compare | Three or four things a reader should compare side by side, at a glance → `FeatureCards` · Several things of the same kind, each with a picture worth a screen and room for more than a sentence → `FeatureScroll` · One or two items → nothing here |
126
+ | TeamGrid | A leadership team, an advisory board or a regional management list on an about page · A responsive grid of person/profile cards — photo, name, role, and an optional external profile link — with an optional line under its heading and a "View all" that shows the rest of a longer list | One person, spotlit, in their own words → `TestimonialSlider` · The items are not people — logos, features, figures → `FeatureCards` |
106
127
  | TestimonialRow | Five to ten short, rated reviews collected by a review service, where seeing several at once is the point and the overall score is worth stating · A page that has made its claims and wants customers' own ratings to back them — a homepage's "What our customers say" | Two to five quotes the page chose, from partners or customers, each a few sentences and read one at a time → `TestimonialSlider` · A single review → `FeatureSplit` |
107
128
  | TestimonialSlider | Two to five real quotes from partners or customers, each a few sentences, read one at a time · A page that has made its claims and wants someone other than the brand to back them | A single quote → `FeatureSplit` · Ratings and review counts from a review site → `TestimonialRow` |
129
+ | TextScroll | A mission or vision statement, on an About or Who we are page · One emphatic brand message between two heavier sections, where a moment of copy on its own gives the page room to breathe · A campaign or partner programme's manifesto, in one sentence or two short ones | The statement needs a heading over it, a line under it or a way onward → `FeatureSplit` · The message asks the reader to do something → `CtaBanner` |
130
+ | Tiers | A partner, affiliate or introducing-broker programme explains its tiers and what each one earns · Rewards grow with performance in two to four steps — commission bonuses, loyalty levels, a VIP ladder — and each step has a bar to clear · A partner landing page needs the progression shown at a glance, with a link on to the programme's full terms | The items have no order — they are things a product includes, or reasons to choose it → `FeatureCards` · The items are things a reader does, one after another, to get started → `Steps` · Plans a reader chooses between, each with the same rows of terms → `ComparisonCards` |
package/.llm/tokens.md CHANGED
@@ -17,6 +17,7 @@ one value at every width.
17
17
  - `--color-bg-band-subtle` — A recessed band across the page, e.g. a section of steps or features set apart from the ones around it. gray.50 in light, white at six in dark. For a fill inside a control — a secondary button, a badge — use color.bg.subtle.
18
18
  - `--color-bg-brand` — Primary action surface, e.g. sign-up button, hero CTA, promotional banner. The same coral in light and dark; pair with color.fg.on-brand for text.
19
19
  - `--color-bg-brand-active` — Pressed state for color.bg.brand. One step further along the ramp than the hover, in the same direction, so a press reads as more of what the hover began.
20
+ - `--color-bg-brand-deep` — The brand's darkest red, the same in both themes — a shade in a pattern drawn in the brand's reds, e.g. the deepest pool of Background's mesh. Not a ground for words: color.bg.brand-subtle is the tint that turns with the theme.
20
21
  - `--color-bg-brand-hover` — Hover state for color.bg.brand.
21
22
  - `--color-bg-brand-strong` — A dark surface, for a band breaking a long page or a card carrying more weight than its neighbours, e.g. a feature band, the footer. gray.950 in light and dark alike, so the band is the same wherever it is drawn. Pair with color.fg.on-brand-strong for text.
22
23
  - `--color-bg-brand-subtle` — A brand ground quiet enough to read dark ink on. The solid coral takes white at 3.39:1 and is waived for a word; this pairs with color.fg.brand well past the bar, so a mark can be brand-coloured without spending the waiver.
@@ -33,6 +34,7 @@ one value at every width.
33
34
  - `--color-bg-page` — The website's ground. A section that needs separating from it takes color.bg.subtle, color.bg.brand-strong or color.bg.brand, rather than the page carrying a tint of its own.
34
35
  - `--color-bg-readonly` — A field whose value is fixed but still worth reading. Lighter than the disabled ground and at full contrast, which is the distinction: readonly is legible and settled, disabled recedes because it is not actionable.
35
36
  - `--color-bg-selected` — The active or current item in a set of choices, e.g. selected nav item, current tab, highlighted row. Not for recessive areas — use color.bg.subtle.
37
+ - `--color-bg-store-badge` — The ground of an app store's download badge: the black the stores' own badge artwork is drawn on, the same in both themes, so a badge chip and the artwork in it read as one badge.
36
38
  - `--color-bg-strong` — Inverted neutral fill for an action that has to outrank everything around it — near-black in light and pure white in dark, the highest contrast the page can carry. Not a section ground: a band takes bg.subtle, bg.brand-strong or bg.brand. Pair with color.fg.on-strong.
37
39
  - `--color-bg-strong-on-brand` — The solid fill of a control on color.bg.brand, e.g. the primary action on the coral band. Near-black in both modes, because the band does not change — unlike color.bg.strong, which turns white in dark.
38
40
  - `--color-bg-subtle` — A recessive fill inside a control or a small area, e.g. a secondary button, a neutral badge. For a band across the page use color.bg.band-subtle; for selected items, color.bg.selected.
@@ -45,6 +47,7 @@ one value at every width.
45
47
  - `--color-bg-surface-card-raised` — A card lifting off the ground behind it, e.g. a Card or CardButton on a color.bg.subtle band. White in light, white at six in dark, so a dark card tints the band instead of sitting on it as grey. Menus and popovers take color.bg.surface-raised.
46
48
  - `--color-bg-surface-card-strong` — The dark fill of a card weightier than its neighbours, e.g. an accent-strong Card or CardButton. gray.900 in both modes, a step lighter than color.bg.brand-strong so it reads as a card, not a band.
47
49
  - `--color-bg-surface-card-strong-raised` — The strong card on a subtle band. gray.900 in light mode, the strong card's own fill, which already stands off the gray.50 band; gray.800 in dark, where the band is a near-black tint the strong card would blend into. Pair with color.fg.on-brand-strong.
50
+ - `--color-bg-surface-glass` — A pane of glass over whatever is behind it, e.g. an IllustrationCard on a band. Light glass in light mode, a faint frosted white in dark, with a blur behind it in both; ink is color.fg.default.
48
51
  - `--color-bg-surface-inverse` — The quieter of the two surfaces on a dark ground, for a panel rather than a pill. color.bg.surface-raised-inverse is the stronger lift and is right on a control the size of a navbar's; at that weight a card-sized box reads as a pale patch rather than a surface.
49
52
  - `--color-bg-surface-modal` — A surface that covers the page behind a scrim — dialogs, drawers, bottom sheets. The topmost plane there is, so it stays white in light where color.bg.surface is recessed. For one that floats without dimming what is under it use color.bg.surface-raised.
50
53
  - `--color-bg-surface-raised` — A surface that lifts off the one behind it, e.g. a dropdown, a popover, a card on a color.bg.subtle band. A card on the page itself takes color.bg.surface, which reads as recessed against it instead.
@@ -66,6 +69,8 @@ one value at every width.
66
69
  - `--color-border-focus-inverse` — The focus ring on a ground that runs against the mode. color.border.focus is near-black, which is invisible on a dark bar — and a focus ring that cannot be seen is the one affordance a keyboard reader has nothing to fall back on.
67
70
  - `--color-border-focus-on-brand-strong` — The focus ring on color.bg.brand-strong, e.g. a navigation bar's controls on a dark hero, a footer's links. White in both modes, because the band does not change. For a surface that flips with the mode use color.border.focus-inverse.
68
71
  - `--color-border-info` — Informational accent border, e.g. info banner edge, highlighted section.
72
+ - `--color-border-pattern` — The resting lines of a decorative rule grid on the page's ground. A step above color.border.subtle, which a hairline across a whole band thins to nothing; well below the default border, so the grid reads as texture.
73
+ - `--color-border-pattern-inverse` — The resting lines of a decorative rule grid on a dark or coral ground. White at a quarter in both modes, as those grounds are; a step above color.border.subtle-inverse, which a hairline grid thins to nothing.
69
74
  - `--color-border-strong` — Emphasised border for active or prominent elements, e.g. active input, selected card edge.
70
75
  - `--color-border-subtle` — A quiet separator, e.g. dividers, table rules. Alpha-based — works on any surface.
71
76
  - `--color-border-subtle-inverse` — A quiet rule on a dark ground. The counterpart to color.border.subtle, which is black at 5% and invisible on one.
@@ -122,11 +127,13 @@ one value at every width.
122
127
  - `--space-inset-sm` — Default padding inside controls, e.g. form inputs, dropdowns, sign-up fields.
123
128
  - `--space-inset-xl` **adapts** — Padding inside a card or a panel — the step most cards want, between the tight lg and the page's own gutter.
124
129
  - `--space-inset-xs` — Padding inside compact controls, e.g. buttons, nav items, form chips.
130
+ - `--space-pile-peek` — How much of each covered card shows above the next in a StickyCards pile. Each card stops this much lower than the one under it, so the covered cards read as a stack of edges.
125
131
  - `--space-section-compact` **adapts** — The air above and below a section of supporting content, or one closely related to the section before it. Where the default step would read as a break rather than a step.
126
132
  - `--space-section-default` **adapts** — The air above and below a section, and the step most take. Adjacent sections each contribute their own; nothing adds a gap between them on top of it.
127
133
 
128
134
  ## size
129
135
 
136
+ - `--size-aurora-spotlight` — How far the pool of light trailing the pointer across an aurora reaches, as a radius. Small enough to read as light the pointer carries rather than a wash over the band.
130
137
  - `--size-avatar` — A person's picture beside their words — the author of a testimonial. Forty-eight, round: large enough to recognise a face, small enough to stay a signature under the quote rather than a portrait above it.
131
138
  - `--size-backdrop-blur` — How far a see-through surface blurs what is behind it, e.g. the navigation bar over the page it scrolls across. Enough that the words behind it stop reading as words, so the bar's own stay legible.
132
139
  - `--size-band-compact` — The least height an opening band takes when it is not a screen tall — a company, legal or support page, where a full viewport would be a wall before the first sentence. Deep enough that the band reads as a band rather than a gap the title fell into.
@@ -138,12 +145,21 @@ one value at every width.
138
145
  - `--size-control-lg` — Height of a large control, for a hero or a conversion band. Twice space.control.lg, on the same reasoning as the default step.
139
146
  - `--size-control-md` — Height of a default-size control, the same measure product gives its own default. Twice space.control.md, so on a pill the corner radius and the side padding are one measure and a label starts where the curve stops.
140
147
  - `--size-control-sm` — Height of a small control — a picker in a navigation bar, a field in a filter row. Half of it is space.control.sm and a quarter is radius.control.sm, the ratio every step of this ramp holds. Desktop only: below what a finger reliably hits.
141
- - `--size-dot-current` — How wide the current mark in a row of dots stretches, against size.dot.diameter for the rest — a pill three dots long, so where the reader is reads by shape.
148
+ - `--size-data-table-search` — The widest a DataTable's search runs beside its result count, from the fold. Room for a market's name and a symbol with the magnifier and the clear button either side; on a phone it takes the row.
149
+ - `--size-dot-current` — How long the current mark in a set of dots stretches along the set, against size.dot.diameter for the rest — a pill three dots long, so where the reader is reads by shape. Wide in a row, tall in Stats' column standing on end.
142
150
  - `--size-dot-diameter` — The mark standing in for one page of a short sequence, or for a status beside a name. Eight: small enough that a row of ten reads as a row rather than as ten controls, and large enough to find at arm's length.
151
+ - `--size-download-banner-badge` — The width every store badge on a DownloadBanner takes, so badges whose artwork differs in shape line up as one set.
152
+ - `--size-download-banner-media` — The width of the app's image on a featured DownloadBanner — a phone held out beside the words rather than a slab across the card. The same width as size.grid.track-lg, for a different thing.
153
+ - `--size-download-banner-qr` — The side of the QR code on a DownloadBanner, a square. Large enough to scan from a phone held at arm's length off a desktop screen, small enough to sit beside a heading.
154
+ - `--size-feature-cards-carousel-card` — The width of a card on a FeatureCardsCarousel, from the fold, held to the column. Narrow enough that the row shows the next card's edge, which says there is more.
155
+ - `--size-feature-stack-media` — The widest the picture a FeatureStack ends on runs, centred. Wider than the words above it, so the picture is the section's weight; narrower than the page, so it stays an illustration rather than a band.
143
156
  - `--size-grid-track-lg` — For a cell holding a picture as well as words, or a pricing plan with a list under it. Three fit the page's measure and four do not, which is what makes this the floor for a grid meant to read as three across.
144
157
  - `--size-grid-track-md` — The default track floor, for a feature card: a heading and a line or two beneath it. Four of these fit the page's measure, so a grid asking for three has room to spare and drops to two on a tablet rather than at the first sign of pressure.
145
158
  - `--size-grid-track-sm` — The narrowest a grid track goes before the grid drops a column. For a cell holding a logo, an icon and a word, or one short claim — six of them clear the page's measure with the page gutter still on both sides.
159
+ - `--size-halftone-dot` — The widest a halftone dot grows, at the brightest point of the glow. Six against size.halftone.pitch's twenty, so even the largest dots stand well apart and the pattern reads as a fine screen of light rather than a field of discs.
160
+ - `--size-halftone-pitch` — How far apart a halftone background's dots sit, centre to centre. A pitch rather than a gap, as size.rule-grid.pitch is: how often a decorative mark recurs. Twenty, against a six-pixel dot: a fine screen that reads as a tone across a band.
146
161
  - `--size-heading-group-max` — How wide an eyebrow, a title and a description may run as a block. Independent or centred groups take this; one that has to sit on the grid takes eight columns instead, which is a span rather than a measure.
162
+ - `--size-image-banner-card` — The least height an ImageBanner's split and cover cards take, so the photograph has room to show beside or behind the words — the reference design's card. The same depth as size.band.compact, for a different thing: a card in the page rather than the band that opens it.
147
163
  - `--size-logo-columns-height` — How much of a LogoColumns wall shows at once, from the fold. Tall enough that a column reads as running on past both edges; half of it on a phone.
148
164
  - `--size-logo-rows-tile` — The width of a tile on a LogoRows, from the fold; three quarters of it on a phone. Wide enough for a wordmark, narrow enough that a row shows several at once.
149
165
  - `--size-measure-description` — How wide a supporting description runs. Wider than a title because it is read rather than taken in, and narrower than long-form because it sits under something.
@@ -155,8 +171,12 @@ one value at every width.
155
171
  - `--size-menu-panel-max` — The widest a section's menu panel gets. Narrower than the page's own measure on purpose: a panel is scanned across with a pointer already on it, and one as wide as the page leaves its last column a long way from the name that opened it.
156
172
  - `--size-menu-panel-min` — The shortest a section's menu panel gets, whatever it holds. A bar's sections rarely have the same number of destinations, and panels that each took their own height would change size as the reader moved along the row.
157
173
  - `--size-menu-max` — The tallest a menu's surface gets before its commands scroll. Product's measure, and counted in rows: five whole and part of a sixth at either size. Neither lands on a row boundary — a ceiling cutting clean at the last full row looks like the whole set.
174
+ - `--size-mesh-blur` — How far a mesh background blurs its pools into one another. Enough that no pool keeps an edge, so the reds read as one liquid rather than shapes.
158
175
  - `--size-review-card-min` — The shortest a TestimonialRow card gets. A floor, not a height: a one-line review keeps a card's shape, and a longer one still grows it.
176
+ - `--size-rings-pitch` — How far apart the rings on a band sit, counted out from the middle of its foot. A pitch, as size.rule-grid.pitch is; tighter than the grid's, because rings spaced that wide read as a target rather than a ripple.
177
+ - `--size-rings-spotlight` — How far the pointer's light reaches on the rings: the radius within which they brighten around the pointer and fade to the resting rings. The rule grid's reach, so the two answer the pointer alike.
159
178
  - `--size-rule-grid-pitch` — How often the rule grid repeats on a band that paints one. A pitch rather than a gap: it is how far apart a decorative line recurs, not the space between two things a reader is comparing.
179
+ - `--size-rule-grid-spotlight` — How far the pointer's light reaches on a rule grid: the radius within which the lines brighten around the pointer and fade to the resting grid. A little over a square either way: light under the pointer, not a lit band.
160
180
  - `--size-sheet-handle-height` — The thickness of that handle. At the smallest step the scale has, because a grab bar is a hint that the sheet moves rather than a part of what it holds.
161
181
  - `--size-sheet-handle-width` — The width of the grab handle at the top of a BottomSheet. Wide enough to take hold of, narrow enough to read as a grip rather than as a rule across the sheet.
162
182
  - `--size-sheet-max` — The widest a BottomSheet gets before it stops growing and centres. A sheet is a small-screen pattern, and one running the width of a desktop is a dialog that arrived from the wrong edge.
@@ -167,9 +187,13 @@ one value at every width.
167
187
  - `--size-spinner-lg` — Spinner diameter at size lg. For a section holding space for content that has not arrived — an embed, a demo, a band of live figures. Its job there is to be visible from where the reader is looking, which is the whole section rather than one control in it.
168
188
  - `--size-spinner-md` — Spinner diameter at size md. The default: large enough to be the one thing happening in a form or a card, small enough that it does not become the card's subject.
169
189
  - `--size-spinner-sm` — Spinner diameter at size sm. Sixteen, which is the size of the body copy it sits beside — an indicator in a line of text reads as part of the line rather than as something dropped into it.
190
+ - `--size-sticky-cards-compact-max` — The widest a StickyCards pile of text-first cards runs, centred under its heading — the heading group's own measure, so pile and heading share a column.
191
+ - `--size-sticky-cards-compact-min` — The shortest a text-first StickyCards card is drawn. A card a title and a sentence tall is a strip, and a pile of strips reads as a list rather than as cards laid over each other.
192
+ - `--size-sticky-cards-feature-min` — The least height a StickyCards feature card takes — a chapter of the page rather than a tile, tall enough for its picture to be the card's half.
170
193
  - `--size-switcher-panel-width` — The width of a switcher's floating panel. Stated because the panel is out of flow and would otherwise shrink to the trigger it hangs from, wrapping every choice and running the set down the page.
171
194
  - `--size-target-min` — The smallest a thing a pointer has to hit may be. Bind it as a minimum on any control whose size would otherwise come from its contents — a pressable card is as big as its words, and one holding a single short line is smaller than a fingertip.
172
195
  - `--size-testimonial-art` — The decorative pictures in a TestimonialSlider's corners, as squares. Large enough to read as pictures, small enough to leave the card the quote's.
196
+ - `--size-tiers-medal` — The medal over each tier's name in a Tiers section, as a square. Large enough to read as a medal rather than an icon beside the words, small enough that four across leave the cards under them the row.
173
197
  - `--size-tooltip-max` — The widest a tooltip gets before its text wraps. Short enough that the eye finds the start of the next line without hunting for it, which is the whole job of a measure — and a tooltip that needs more than two lines is a tooltip carrying something that belongs on the page.
174
198
 
175
199
  ## radius
@@ -244,6 +268,12 @@ one value at every width.
244
268
  - `--font-field-label-md-line-height`
245
269
  - `--font-field-label-md-size`
246
270
  - `--font-field-label-md-weight`
271
+ - `font.figure-lg` — A figure with the row to itself — the one in place on Stats' wheel on a phone. Larger than font.figure, which shares a row with the figures beside it: alone, the number is the one thing the band is showing. The same size at every width, because it is only drawn on a phone.
272
+ - `--font-figure-lg-family`
273
+ - `--font-figure-lg-letter-spacing`
274
+ - `--font-figure-lg-line-height`
275
+ - `--font-figure-lg-size`
276
+ - `--font-figure-lg-weight`
247
277
  - `font.figure` — A number read as a fact rather than as a heading. It takes a heading's size, because a figure has to hold a row on its own, and semibold rather than extrabold: the weight a title needs makes a number look like a claim.
248
278
  - `--font-figure-family`
249
279
  - `--font-figure-letter-spacing`
@@ -349,8 +379,10 @@ one value at every width.
349
379
 
350
380
  - `--motion-distance-drift` — How far decoration travels against the scroll while its section passes through the view, one way or the other. Far enough to be seen moving as the reader scrolls past, so it reads as depth.
351
381
  - `--motion-duration-dramatic` — Editorial hero entrances for visual impact, e.g. hero headline revealing, landing page title appearing. Not for scroll reveals — use motion.duration.reveal.
382
+ - `--motion-duration-drift` — One way of a slow drift that runs while something is on screen — an aurora wandering along a band's foot and back. Ten seconds, so the movement is felt rather than watched.
352
383
  - `--motion-duration-dwell` — How long a rotating message holds before the next one moves in, e.g. a CTA banner's slides. Long enough to read a headline and a line under it; the reference site's 2000 moved before a reader reached the button.
353
384
  - `--motion-duration-fast` — Direct user actions that should feel instant, e.g. hover, press, toggle.
385
+ - `--motion-duration-hold` — How long one of a turning set of figures holds in place before the next turns in — Stats' wheel on a phone. A second, where motion.duration.dwell holds a slide for five: a number and its label are read at a glance, and a wheel that stood still longer would read as stuck.
354
386
  - `--motion-duration-instant` — A change the reader has already moved past — a tooltip leaving once the pointer is elsewhere. Not a short duration but no duration: animating a dismissal keeps a thing on screen after the reason for it has gone.
355
387
  - `--motion-duration-media-hover` — How long art takes to settle inside a frame that holds still. Longer than duration.normal, which suits a card that lifts and is over; a picture that zooms is still on screen when it stops and the eye follows it the whole way.
356
388
  - `--motion-duration-normal` — UI elements entering or leaving, e.g. dropdowns, tooltips, tab switches, card hover.
@@ -360,6 +392,9 @@ one value at every width.
360
392
  - `--motion-duration-slow` — Large UI transitions, e.g. accordions expanding, page transitions, interactive demos.
361
393
  - `--motion-duration-spinner` — One full rotation of a spinner. Fast enough to read as working, slow enough that the stroke does not blur into a solid ring.
362
394
  - `--motion-duration-stagger` — The step between one part of a section arriving and the next. A gap rather than a length: five parts at this step trail the first by less than half a second, so a block still arrives as one thing rather than assembling itself while a reader waits.
395
+ - `--motion-duration-ticker` — How long a running row takes to carry one item past — Awards' row on a phone, multiplied by the number of awards for one whole loop. The reference site's pace: thirty-two seconds for eight awards, slow enough to read an award as it goes by.
396
+ - `--motion-duration-trail` — How long something takes to catch up with a pointer it trails — a background's glow following the pointer across a band. Half a second, so the light drifts after the hand rather than sticking to it: a trail is felt, a cursor is tracked.
397
+ - `--motion-duration-turn` — One turn of a wheel of figures: the one in place rising away as the next rises into it. The reference site's 700 — long enough that the eye follows the number in rather than seeing it swap.
363
398
  - `--motion-easing-enter` — UI elements arriving on screen — decelerates into place, e.g. dropdown opening, tooltip appearing.
364
399
  - `--motion-easing-exit` — UI elements leaving the screen — accelerates away, e.g. menu closing, notification dismissing.
365
400
  - `--motion-easing-media-hover` — Art moving inside a frame that holds still. Symmetric, unlike easing.standard: a hover runs forward on enter and backward on leave, so a one-way curve that settles hard reads as a snap going one way and a drift the other.
@@ -371,6 +406,7 @@ one value at every width.
371
406
  - `--motion-scale-enter` — What a component scales from when something reveals it — a tooltip appearing. Needs a transform origin on the edge nearest its anchor, or it grows out of its own middle. The counterpart to scale.hover, which is a response rather than an entrance.
372
407
  - `--motion-scale-hover` — How much a control grows under the cursor on hover. Deliberately small — a control that grows past the pointer fires its own mouse-out.
373
408
  - `--motion-scale-media-hover` — How much art grows inside a frame that holds still — an editorial card's picture under the cursor. Twice motion.scale.hover, which stays smaller because a control can outrun its own pointer and a framed picture cannot.
409
+ - `--motion-scale-pile-covered` — How far a card in a StickyCards pile draws back once the next card has slid over it, from its top edge, so the pile reads as depth. Not motion.scale.enter, which is for something arriving.
374
410
  - `--motion-translate-enter` — Where a surface waits before something reveals it: level on the inline axis, its own full height down the block one. A share of the element rather than of the page, so a sheet travels exactly its own height whatever that turns out to be.
375
411
  - `--motion-translate-hover` — How far a pressable surface rises under the cursor. A fixed distance rather than a share of the element, so a tall card and a short one lift by the same amount and a row of them stays level. Small enough that nothing it sits beside looks disturbed.
376
412
  - `--motion-translate-reveal` — How far a section waits below where it lands, before the scroll brings it up. A fixed distance rather than a share of the block, so a hero a screen tall and a split half that arrive by the same movement. Pairs with motion.easing.reveal.
package/AGENTS.md CHANGED
@@ -80,6 +80,7 @@ screen is built in is not something to reach for while building a control.
80
80
 
81
81
  - **Accordion** — Questions a reader asks near a decision
82
82
  - **AccordionItem** — One row inside an Accordion
83
+ - **Background** — A band that has to stand apart from the page around it with more than a change of fill
83
84
  - **Badge** — One of a set is the one the page wants read first
84
85
  - **BottomSheet** — A task needs the screen's full width and the reader's undivided attention
85
86
  - **Breadcrumb** — The page sits inside a section hierarchy, and the levels above it are places the visitor can navigate to
@@ -96,6 +97,8 @@ screen is built in is not something to reach for while building a control.
96
97
  - **Footer** — A marketing page needs its closing band
97
98
  - **FooterGroup** — A set of a footer's destinations belong under one word
98
99
  - **Icon** — A glyph stands beside words to speed recognition
100
+ - **IllustrationCard** — Product information laid over a photograph or a piece of art
101
+ - **IllustrationScene** — Product information shown over a photograph
99
102
  - **Link** — A term inside running copy has a page of its own
100
103
  - **MenuItem** — A row in a menu of destinations
101
104
  - **Navbar** — A marketing page needs its top-level navigation
@@ -140,20 +143,36 @@ screen is built in is not something to reach for while building a control.
140
143
 
141
144
  ### Blocks — the sections a page is built from, and the rhythm between them
142
145
 
146
+ - **Awards** — Building credibility with the industry awards a company has won
147
+ - **ComparisonCards** — Two or three products, accounts or plans that answer the same few questions differently
148
+ - **ComparisonTable** — Comparing two or three options
143
149
  - **CtaBanner** — A short, high-contrast promotion with one clear action
144
150
  - **CtaBannerSlider** — Rotating between two or three genuinely different promotions without a hero's weight
151
+ - **DataTable** — Trading instruments and their specifications
152
+ - **DownloadBanner** — Promoting an app across the stores and platforms it ships on
145
153
  - **FaqAccordion** — The questions a reader asks before acting
146
154
  - **FeatureBullets** — A page has to list what a product or a plan includes, and the list is the argument
147
- - **FeatureCards** — Three or four things a product does, each a heading and a sentence, read side by side and compared at a glance
155
+ - **FeatureCards** — Three or four things a product does, each a card with a heading, a line and a picture under them, read side by side and compared at a glance
156
+ - **FeatureCardsCarousel** — A "what you get" band of five or six authored cards, each a benefit with a line and a picture, too many for one row of a grid, where one card in focus with a peek of the next is the point
148
157
  - **FeatureScroll** — A page has three or more things of the same kind to explain, each with a picture worth a screen
149
158
  - **FeatureSplit** — A page needs one more point about something it has already introduced, with a picture to carry it
159
+ - **FeatureStack** — A statement with a picture that carries it
160
+ - **ImageBanner** — Driving a single mid-page or end-of-page action with a photograph to carry it
150
161
  - **LandingHero** — A main landing page needs its opening band
151
162
  - **LogoColumns** — Showing the partners, integrations or payment methods behind a claim
152
163
  - **LogoRows** — Showing the partners, integrations or payment methods behind a claim under it, where the words lead and the logos follow
153
164
  - **PageHeader** — A company, legal or support page needs its opening band
154
165
  - **ProductHero** — A product or a market page needs its opening band
166
+ - **ResourceBanner** — Pointing readers at related guides, policies, or reference pages at the end of an informational section
167
+ - **SceneScroll** — Two states of one thing a page wants felt rather than listed
168
+ - **Stats** — Three to five headline numbers that prove scale or credibility
169
+ - **Steps** — A page explains a get-started or onboarding flow
170
+ - **StickyCards** — A set of markets, products or benefits a page wants read one at a time as the reader scrolls
171
+ - **TeamGrid** — A leadership team, an advisory board or a regional management list on an about page
155
172
  - **TestimonialRow** — Five to ten short, rated reviews collected by a review service, where seeing several at once is the point and the overall score is worth stating
156
173
  - **TestimonialSlider** — Two to five real quotes from partners or customers, each a few sentences, read one at a time
174
+ - **TextScroll** — A mission or vision statement, on an About or Who we are page
175
+ - **Tiers** — A partner, affiliate or introducing-broker programme explains its tiers and what each one earns
157
176
 
158
177
  ## Components that need mounting
159
178
 
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The awards a Awards lists.
3
+ *
4
+ * Exported from the package for the reason `testimonial-row-data.ts` and `logo-data.ts` are: a block
5
+ * whose content is a list is one whose consumer builds a value before passing it.
6
+ *
7
+ * Records rather than a component per award, because an award is two lines of words — what it was
8
+ * for and who gave it — and nothing in it is an element a page composes. The laurels either side are
9
+ * the section's, the same for every award, and not something an award chooses.
10
+ */
11
+ /** One award in a Awards: what it was for, and who gave it when. */
12
+ export interface Award {
13
+ /**
14
+ * What the award was for, in the issuer's own words — "Best Trading Experience - Global". Ten
15
+ * words at most: it is set between two laurels, at a badge's width, and wraps to three lines past
16
+ * that.
17
+ */
18
+ title: string;
19
+ /**
20
+ * Who gave it, and the year — "UF Awards 2025". Short, under the title; the year is what tells a
21
+ * reader the claim is current.
22
+ */
23
+ issuer: string;
24
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The awards a Awards lists.
3
+ *
4
+ * Exported from the package for the reason `testimonial-row-data.ts` and `logo-data.ts` are: a block
5
+ * whose content is a list is one whose consumer builds a value before passing it.
6
+ *
7
+ * Records rather than a component per award, because an award is two lines of words — what it was
8
+ * for and who gave it — and nothing in it is an element a page composes. The laurels either side are
9
+ * the section's, the same for every award, and not something an award chooses.
10
+ */
11
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A picture a block draws itself, at the picture's own shape.
3
+ *
4
+ * Exported from the package for the reason the other data shapes are: the page builds the value
5
+ * and hands it over. A record rather than a node, because the block has to draw the `<img>` to
6
+ * size it — a picture keeps its own proportions and the block only limits how tall it grows, which
7
+ * it cannot do to an element it was handed already wrapped in something else.
8
+ */
9
+ /** One picture: where it is, what it shows, and its size, so the block can hold its shape. */
10
+ export interface BlockImage {
11
+ /** Where the picture is. Use one at least as wide as the column it fills, twice that for sharp screens. */
12
+ src: string;
13
+ /**
14
+ * What a screen reader hears for it: an empty string when the words around it already say what it
15
+ * shows, a description when it carries something they do not.
16
+ */
17
+ alt: string;
18
+ /**
19
+ * The picture's own width and height, in pixels. Optional, but give them: with them the block
20
+ * reserves the picture's shape before it loads, so nothing below it moves when it arrives.
21
+ */
22
+ width?: number;
23
+ height?: number;
24
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * A picture a block draws itself, at the picture's own shape.
3
+ *
4
+ * Exported from the package for the reason the other data shapes are: the page builds the value
5
+ * and hands it over. A record rather than a node, because the block has to draw the `<img>` to
6
+ * size it — a picture keeps its own proportions and the block only limits how tall it grows, which
7
+ * it cannot do to an element it was handed already wrapped in something else.
8
+ */
9
+ export {};
@@ -0,0 +1,134 @@
1
+ /* GENERATED from awards.contract.json. Do not edit. */
2
+
3
+ :where([data-dds-context="marketing"]) .dds-awards {
4
+ box-sizing: border-box;
5
+ container-type: inline-size;
6
+ display: flex;
7
+ inline-size: 100%;
8
+ justify-content: center;
9
+ overflow: clip;
10
+ overflow-wrap: anywhere;
11
+ }
12
+
13
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__inner {
14
+ box-sizing: border-box;
15
+ display: flex;
16
+ flex-direction: column;
17
+ inline-size: 100%;
18
+ min-inline-size: 0;
19
+ max-inline-size: var(--size-content-max);
20
+ padding-block: var(--space-section-default);
21
+ padding-inline: var(--space-inset-page);
22
+ row-gap: var(--space-heading-content);
23
+ }
24
+
25
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__header {
26
+ display: flex;
27
+ flex-direction: column;
28
+ min-inline-size: 0;
29
+ max-inline-size: var(--size-measure-heading);
30
+ }
31
+
32
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__title {
33
+ margin-block: 0;
34
+ text-wrap: balance;
35
+ font-family: var(--font-h2-family);
36
+ font-size: var(--font-h2-size);
37
+ font-weight: var(--font-h2-weight);
38
+ letter-spacing: var(--font-h2-letter-spacing);
39
+ line-height: var(--font-h2-line-height);
40
+ }
41
+
42
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__list {
43
+ display: flex;
44
+ list-style: none;
45
+ margin: 0;
46
+ min-inline-size: 0;
47
+ outline-style: solid;
48
+ padding: 0;
49
+ column-gap: var(--space-grid-gutter);
50
+ outline-width: var(--border-width-none);
51
+ row-gap: var(--space-grid-gutter);
52
+ }
53
+
54
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__award {
55
+ align-items: center;
56
+ box-sizing: border-box;
57
+ display: flex;
58
+ justify-content: center;
59
+ min-inline-size: 0;
60
+ column-gap: var(--space-gap-xs);
61
+ max-inline-size: var(--size-grid-track-md);
62
+ }
63
+
64
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__laurel {
65
+ display: block;
66
+ flex: none;
67
+ inline-size: var(--icon-size-md);
68
+ }
69
+
70
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__copy {
71
+ align-items: center;
72
+ display: flex;
73
+ flex-direction: column;
74
+ min-inline-size: 0;
75
+ text-align: center;
76
+ row-gap: var(--space-heading-title-description-compact);
77
+ }
78
+
79
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__name {
80
+ margin: 0;
81
+ text-wrap: balance;
82
+ font-family: var(--font-label-sm-family);
83
+ font-size: var(--font-label-sm-size);
84
+ font-weight: var(--font-label-sm-weight);
85
+ letter-spacing: var(--font-label-sm-letter-spacing);
86
+ line-height: var(--font-label-sm-line-height);
87
+ }
88
+
89
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__issuer {
90
+ margin: 0;
91
+ font-family: var(--font-body-sm-family);
92
+ font-size: var(--font-body-sm-size);
93
+ font-weight: var(--font-body-sm-weight);
94
+ letter-spacing: var(--font-body-sm-letter-spacing);
95
+ line-height: var(--font-body-sm-line-height);
96
+ }
97
+
98
+ :where([data-dds-context="marketing"]) .dds-awards .dds-awards__list:focus-visible {
99
+ outline-color: var(--color-border-focus);
100
+ outline-width: var(--border-width-focus);
101
+ }
102
+
103
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="page"] {
104
+ background-color: var(--color-bg-page);
105
+ color: var(--color-fg-default);
106
+ }
107
+
108
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="page"] .dds-awards__laurel {
109
+ color: var(--color-fg-muted);
110
+ }
111
+
112
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="strong"] {
113
+ background-color: var(--color-bg-brand-strong);
114
+ color: var(--color-fg-on-brand-strong);
115
+ }
116
+
117
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="strong"] .dds-awards__laurel {
118
+ color: var(--color-fg-muted-inverse);
119
+ }
120
+
121
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="subtle"] {
122
+ background-color: var(--color-bg-page);
123
+ background-image: linear-gradient(var(--color-bg-band-subtle), var(--color-bg-band-subtle));
124
+ color: var(--color-fg-default);
125
+ }
126
+
127
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="subtle"] .dds-awards__laurel {
128
+ color: var(--color-fg-muted);
129
+ }
130
+
131
+ :where([data-dds-context="marketing"]) .dds-awards[data-ground="strong"] .dds-awards__list:focus-visible {
132
+ outline-color: var(--color-border-focus-on-brand-strong);
133
+ }
134
+
@@ -0,0 +1,24 @@
1
+ import './Awards.css';
2
+ import './awards-impl.css';
3
+ import '../block-reveal.css';
4
+ import { type AwardsProps } from './Awards.types.js';
5
+ export type { AwardsProps };
6
+ /**
7
+ * A heading over the awards a company has won, each between two laurels — the reference design's
8
+ * FeatureAwards.
9
+ *
10
+ * One list, two shapes, and the stylesheet chooses between them on the section's width. From the
11
+ * fold it wraps into centred rows of five at most; on a phone it is one row across the band that
12
+ * runs on its own, the reference's marquee, holding still while the reader hovers, focuses or presses
13
+ * on it. The running row is the awards drawn twice, the second set hidden from assistive technology,
14
+ * so its loop has no seam and a screen reader counts each award once. A reader who asked for less
15
+ * motion gets the row still, to swipe.
16
+ *
17
+ * The awards are records rather than children, `Award` from `awards-data`: an award is
18
+ * two lines of words, and the laurels around them are the section's, the same for every award.
19
+ *
20
+ * It arrives the way every block does: the heading, then each award a step behind the one before,
21
+ * in reading order. `'use client'` for that, for `useId`, which names the region and the row by the
22
+ * heading, and for the measurement that gives the row its tab stop.
23
+ */
24
+ export declare function Awards({ ground, title, awards }: AwardsProps): import("react").JSX.Element | null;