@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,760 @@
1
+ /*
2
+ * Scoped to this package, like the generated sheet beside it.
3
+ *
4
+ * `:where([data-dds-context="marketing"])` confines these rules without contributing
5
+ * specificity, so every override below still ties or beats exactly what it did before.
6
+ */
7
+
8
+ /*
9
+ * The canvas fills the band and sits under what the band holds.
10
+ *
11
+ * Absolutely placed at all four edges rather than sized by width and height, so it follows the
12
+ * band through every resize without the script having to set its CSS size — the script sets only
13
+ * the bitmap, from the box this gives it. No pointer events: the pattern is paint, and every press
14
+ * on the band belongs to the content.
15
+ *
16
+ * These are positions and a pointer rule, not design decisions, and a contract has no way to state
17
+ * an inset of zero on a part — which is why they are here rather than bound.
18
+ */
19
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__canvas {
20
+ position: absolute;
21
+ inset: 0;
22
+ display: block;
23
+ inline-size: 100%;
24
+ block-size: 100%;
25
+ pointer-events: none;
26
+ }
27
+
28
+ /*
29
+ * The content stacks above the canvas by being positioned after it. The root isolates, so this
30
+ * order is settled inside the band and nothing outside it has to know a canvas is there.
31
+ */
32
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__content {
33
+ position: relative;
34
+ }
35
+
36
+ /*
37
+ * A Background with nothing to hold is a layer: it fills the band it is placed in, behind that
38
+ * band's own content, which is how a block draws the pattern under itself without its layout
39
+ * changing. The band has to be positioned, and every block that offers the pattern is. It takes no
40
+ * pointer events — the content is on top and gets every press — and the pointer is listened for on
41
+ * the band instead, in `useHalftone`.
42
+ */
43
+ :where([data-dds-context="marketing"]) .dds-background[data-layer='true'] {
44
+ position: absolute;
45
+ inset: 0;
46
+ pointer-events: none;
47
+ }
48
+
49
+ /*
50
+ * The two hairline patterns: the rule grid, for `pattern="grid"` — the grid PageHeader paints, for
51
+ * any band — and the rings, for `pattern="rings"`.
52
+ *
53
+ * Both are repeating gradients of hairlines painted onto the root under everything it holds, with
54
+ * the band's own ground laid over them as a fade: opaque at the top, clear at the foot, so the
55
+ * lines rise from the bottom of the band the way the halftone does. A background-image rather than
56
+ * an element, because it is a texture on the ground and not content, and rather than a canvas
57
+ * because the only thing about it that moves is where the lines start — see *The idle motion*.
58
+ *
59
+ * The line takes the pattern role for the ground it is on: the inverse on the dark ground, a
60
+ * brighter white on the coral, and the brand's coral on the light — each a step above the subtle
61
+ * border, which a hairline drawn across a whole band thinned out to almost nothing. The fade is each tone's own ground, so
62
+ * the lines disappear into the band rather than into a colour the band is not.
63
+ */
64
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']) {
65
+ --dds-background-rule: var(--color-border-pattern-inverse);
66
+ --dds-background-fade: var(--color-bg-brand-strong);
67
+ /*
68
+ * How thick a rule is: border.width.hairline, which is half a CSS pixel — one device pixel on a
69
+ * screen of twice the density, and the line this grid was drawn with. A standard-density screen
70
+ * has no half pixel to draw it on, and there the rules came out faint or not at all depending on
71
+ * where each one fell: on a tall band every horizontal rule vanished. So below twice the density
72
+ * the rule is border.width.default, one pixel — the thinnest line that screen can draw.
73
+ */
74
+ --dds-background-hairline: var(--border-width-hairline);
75
+ }
76
+
77
+ @media (max-resolution: 1.99dppx) {
78
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']) {
79
+ --dds-background-hairline: var(--border-width-default);
80
+ }
81
+ }
82
+
83
+ /*
84
+ * On the light ground the lines are the brand's coral rather than a grey, as the halftone's dots
85
+ * and the aurora's pools are there: a third of color.bg.brand, about as strong as the grey it
86
+ * replaces, so the grid stays quiet but reads as the brand's. It lights up to the full coral.
87
+ */
88
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='light'] {
89
+ --dds-background-rule: color-mix(in srgb, var(--color-bg-brand) 35%, transparent);
90
+ --dds-background-fade: var(--color-bg-page);
91
+ }
92
+
93
+ /*
94
+ * On the coral ground the inverse pattern line, white at a quarter, all but vanished into the
95
+ * coral, so the lines rest at the muted inverse there and light up to full white.
96
+ */
97
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='brand'] {
98
+ --dds-background-rule: var(--color-fg-muted-inverse);
99
+ --dds-background-fade: var(--color-bg-brand);
100
+ }
101
+
102
+ /*
103
+ * The grid: two sets of rules at size.rule-grid.pitch, one across and one down.
104
+ *
105
+ * `to right` is physical: a CSS gradient has no logical direction. A grid is symmetric, so it reads
106
+ * the same in either direction, and it is centred across the band — see the positions below.
107
+ */
108
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='grid'] {
109
+ --dds-background-pitch: var(--size-rule-grid-pitch);
110
+ background-image:
111
+ linear-gradient(to bottom, var(--dds-background-fade), transparent),
112
+ linear-gradient(to right, var(--dds-background-rule) 0 var(--dds-background-hairline), transparent 0),
113
+ linear-gradient(to bottom, var(--dds-background-rule) 0 var(--dds-background-hairline), transparent 0);
114
+ /*
115
+ * Each set of rules is one rule on a tile one pitch long, repeated: a tile the size of the band
116
+ * left a seam wherever the band was not a whole number of pitches, and a rising grid carried
117
+ * that seam up through it. Across, a rule falls on the band's middle — the tile is placed half a
118
+ * pitch right of centre, and its rule is its left edge — so the grid is symmetric about the
119
+ * middle, where the rings are centred and the words sit, and never ends on a sliver at one side
120
+ * only. Down, it counts from the top less the idle shift, so the rules rise a pitch a cycle.
121
+ */
122
+ background-size:
123
+ 100% 100%,
124
+ var(--dds-background-pitch) 100%,
125
+ 100% var(--dds-background-pitch);
126
+ background-repeat: no-repeat, repeat-x, repeat-y;
127
+ background-position:
128
+ left top,
129
+ calc(50% + var(--dds-background-pitch) / 2) top,
130
+ left calc(var(--dds-background-shift, 0%) * -1);
131
+ }
132
+
133
+ /*
134
+ * The rings: circles at size.rings.pitch, centred on the middle of the band's foot, so they spread
135
+ * up and out from where the halftone's glow would rest.
136
+ *
137
+ * Each ring is a hairline at full ink — as much line as a grid rule, so the two read at the same
138
+ * strength — with half a hairline of fade either side. A curve drawn with hard stops steps along
139
+ * every pixel it crosses; the fade anti-aliases it. A ridge that only touched the ink at its peak
140
+ * came out a good deal fainter than the grid in the same colour.
141
+ */
142
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='rings'] {
143
+ --dds-background-pitch: var(--size-rings-pitch);
144
+ background-image:
145
+ linear-gradient(to bottom, var(--dds-background-fade), transparent),
146
+ var(--dds-background-rings);
147
+ }
148
+
149
+ /*
150
+ * The rings themselves, declared on the root and on its lit copy alike, so each resolves them in
151
+ * its own ink. They start at the idle shift rather than at the centre, which spreads every ring a
152
+ * pitch outward each cycle: a repeating gradient repeats over its first stop to its last, and both
153
+ * move together, so the spacing never changes.
154
+ */
155
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='rings'],
156
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='rings']::before {
157
+ --dds-background-rings: repeating-radial-gradient(
158
+ circle at 50% 100%,
159
+ transparent var(--dds-background-shift, 0%)
160
+ calc(var(--dds-background-shift, 0%) + var(--dds-background-pitch) - var(--dds-background-hairline) * 2),
161
+ var(--dds-background-rule)
162
+ calc(var(--dds-background-shift, 0%) + var(--dds-background-pitch) - var(--dds-background-hairline) * 1.5)
163
+ calc(var(--dds-background-shift, 0%) + var(--dds-background-pitch) - var(--dds-background-hairline) * 0.5),
164
+ transparent calc(var(--dds-background-shift, 0%) + var(--dds-background-pitch))
165
+ );
166
+ }
167
+
168
+ /*
169
+ * The pointer's light on the grid and the rings, on an interactive band.
170
+ *
171
+ * A second, brighter copy of the lines, drawn in a pseudo-element behind the band's content and
172
+ * shown only inside a soft circle around the pointer — size.rule-grid.spotlight on the grid,
173
+ * size.rings.spotlight on the rings — so the lines under the pointer brighten and fade back into
174
+ * the resting ones, and nothing else changes. The pointer's position arrives as two custom
175
+ * properties written once a frame by `useSpotlight`, and `data-spotlit` while it is over the band;
176
+ * the circle fades in and out on the element's opacity, which the compositor runs.
177
+ *
178
+ * `::before`, so it comes before the content in the band's painting order and the content stays on
179
+ * top of it. The lit line is a step up from the resting one on each ground: muted-inverse on the
180
+ * dark ground, full white on the coral, the full brand coral on the light one. Same hairline, same pitch, same
181
+ * position, so a lit line is the resting line brighter rather than a line beside it.
182
+ */
183
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])::before {
184
+ --dds-background-lit: var(--color-fg-muted-inverse);
185
+ /* The shift is registered as not inherited — see *The idle motion* — so the lit copy asks for it. */
186
+ --dds-background-shift: inherit;
187
+ content: '';
188
+ position: absolute;
189
+ inset: 0;
190
+ pointer-events: none;
191
+ mask-image: radial-gradient(
192
+ circle var(--dds-background-reach) at var(--dds-background-spot-x, 50%) var(--dds-background-spot-y, 50%),
193
+ #000,
194
+ transparent
195
+ );
196
+ opacity: 0;
197
+ transition-property: opacity;
198
+ transition-duration: var(--motion-duration-normal);
199
+ transition-timing-function: var(--motion-easing-enter);
200
+ }
201
+
202
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='grid']::before {
203
+ --dds-background-reach: var(--size-rule-grid-spotlight);
204
+ background-image:
205
+ linear-gradient(to right, var(--dds-background-lit) 0 var(--dds-background-hairline), transparent 0),
206
+ linear-gradient(to bottom, var(--dds-background-lit) 0 var(--dds-background-hairline), transparent 0);
207
+ background-size:
208
+ var(--dds-background-pitch) 100%,
209
+ 100% var(--dds-background-pitch);
210
+ background-repeat: repeat-x, repeat-y;
211
+ background-position:
212
+ calc(50% + var(--dds-background-pitch) / 2) top,
213
+ left calc(var(--dds-background-shift, 0%) * -1);
214
+ }
215
+
216
+ /* The rings' lit copy: the same rings, with the rule redeclared as the lit ink. */
217
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='rings']::before {
218
+ --dds-background-reach: var(--size-rings-spotlight);
219
+ --dds-background-rule: var(--dds-background-lit);
220
+ background-image: var(--dds-background-rings);
221
+ }
222
+
223
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='light']::before {
224
+ --dds-background-lit: var(--color-bg-brand);
225
+ }
226
+
227
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='brand']::before {
228
+ --dds-background-lit: var(--color-fg-on-brand);
229
+ }
230
+
231
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-spotlit='true']::before {
232
+ opacity: 1;
233
+ }
234
+
235
+ /*
236
+ * The aurora, for `pattern="aurora"`: broad soft pools of the brand's colour rising from the
237
+ * band's foot and drifting into one another — the band lit by colour rather than by points.
238
+ *
239
+ * Three ellipses fading to nothing, in two inks, painted on a pseudo-element behind the content
240
+ * and larger than the band, so it can sway either way without its edge showing. The sway is a
241
+ * transform about the middle of the foot, there and back over motion.duration.drift: a small
242
+ * slide, a small turn and a slight swell, and because the turn lifts one side as it lowers the
243
+ * other, the pools pass across each other rather than moving as one. A transform, so the
244
+ * compositor runs it and the gradients are painted once rather than every frame.
245
+ *
246
+ * The inks are the tone's: coral deepening to the brand's darkest on the dark ground; coral and
247
+ * its hover step, washed thin, on the light ground; and on the coral ground white and the brand's
248
+ * darkest, as the halftone's dots turn white there — darker inks alone were lost on the coral, and
249
+ * near-black came out as a muddy stain rather than light. The white stays at the foot, under the
250
+ * words rather than behind them, and the words are checked against the coral alone. How strongly
251
+ * it is painted is a share of the pool's own opacity, as the halftone's is — under half on the
252
+ * dark ground, where coral at seven tenths burned rather than glowed, and faintest on the light,
253
+ * where coral at strength would be a coral band.
254
+ *
255
+ * The band's top stays plain: the pools fade out under a mask before they reach the upper third.
256
+ */
257
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'] {
258
+ --dds-background-pool: var(--color-bg-brand);
259
+ --dds-background-pool-deep: var(--color-bg-brand-active);
260
+ --dds-background-strength: 0.4;
261
+ /*
262
+ * How strongly the pool under the pointer is painted, per ground. Its own number rather than a
263
+ * share of the pools': half of the light ground's faint wash was invisible, and half of the
264
+ * coral ground's white washed out the white words the pointer was over.
265
+ */
266
+ --dds-background-hover: 0.25;
267
+ }
268
+
269
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='light'] {
270
+ --dds-background-pool-deep: var(--color-bg-brand-hover);
271
+ --dds-background-strength: 0.22;
272
+ --dds-background-hover: 0.3;
273
+ }
274
+
275
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='brand'] {
276
+ --dds-background-pool: var(--color-fg-on-brand);
277
+ --dds-background-pool-deep: var(--color-bg-brand-active);
278
+ --dds-background-strength: 0.6;
279
+ /*
280
+ * The pointer's pool on the coral is blended in rather than laid over: white at a fifth on top of
281
+ * the coral read as a pale pink patch, a disc of another colour. Overlay lifts the coral under it
282
+ * to a brighter coral instead — light on the band rather than a stain on it — and takes the whole
283
+ * pool without washing out: soft light at full strength was barely there.
284
+ */
285
+ --dds-background-hover: 1;
286
+ --dds-background-glow-blend: overlay;
287
+ }
288
+
289
+ /*
290
+ * Behind the content without being before it: the root isolates, so a negative stacking order
291
+ * puts both pseudo-elements over the band's ground and under everything it holds.
292
+ */
293
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']::before,
294
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']::after {
295
+ content: '';
296
+ position: absolute;
297
+ z-index: -1;
298
+ pointer-events: none;
299
+ }
300
+
301
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']::before {
302
+ /*
303
+ * Half a band deeper than the band, as well as wider: the turn lowers one end of the layer, and
304
+ * a layer that stopped at the foot showed its own edge there as a hard diagonal. So the foot is
305
+ * two thirds of the way down the layer, and every position and reach below is measured to it.
306
+ */
307
+ inset-block: 0 -50%;
308
+ inset-inline: -25%;
309
+ background-image:
310
+ radial-gradient(ellipse 30% 53% at 32% calc(100% / 1.5), var(--dds-background-pool), transparent),
311
+ radial-gradient(ellipse 26% 43% at 66% calc(100% / 1.5), var(--dds-background-pool-deep), transparent),
312
+ radial-gradient(ellipse 18% 31% at 50% calc(100% / 1.5), var(--dds-background-pool), transparent);
313
+ mask-image: linear-gradient(to bottom, transparent 20%, #000 calc(100% / 1.5));
314
+ opacity: var(--dds-background-strength);
315
+ transform-origin: 50% calc(100% / 1.5);
316
+ animation: dds-background-aurora var(--motion-duration-drift) var(--motion-easing-shift) infinite alternate;
317
+ }
318
+
319
+ @keyframes dds-background-aurora {
320
+ from {
321
+ transform: translateX(-6%) rotate(-3deg);
322
+ }
323
+ to {
324
+ transform: translateX(6%) rotate(3deg) scale(1.08, 1.14);
325
+ }
326
+ }
327
+
328
+ /*
329
+ * The pool that trails the pointer: a disc of the pool's ink, size.aurora.spotlight in radius,
330
+ * moved under the pointer by a transform that eases after it over motion.duration.trail — the
331
+ * halftone's glow and this one keep the same distance behind the hand. Placed from the band's
332
+ * physical top left because the pointer's position is measured from there. It fades in while the
333
+ * pointer is over the band and out when it leaves, at the ground's own hover strength: at the
334
+ * pools' full strength, and twice the size, it washed over a narrow band and drowned its words.
335
+ *
336
+ * It trails the pointer only while lit. Unlit it moves at once, so the pointer arriving puts the
337
+ * pool where the pointer is before it fades in — `useSpotlight` writes the position first —
338
+ * rather than the pool sliding in from wherever it last was, or from the band's corner.
339
+ */
340
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']::after {
341
+ left: 0;
342
+ top: 0;
343
+ inline-size: calc(var(--size-aurora-spotlight) * 2);
344
+ block-size: calc(var(--size-aurora-spotlight) * 2);
345
+ /*
346
+ * Eased to nothing rather than straight to it: a straight fade stops abruptly at its rim, and the
347
+ * eye read the stop as the edge of a disc. The steps follow a smooth curve down from the centre.
348
+ */
349
+ background-image: radial-gradient(
350
+ circle closest-side,
351
+ var(--dds-background-pool),
352
+ color-mix(in srgb, var(--dds-background-pool) 62%, transparent) 30%,
353
+ color-mix(in srgb, var(--dds-background-pool) 26%, transparent) 58%,
354
+ color-mix(in srgb, var(--dds-background-pool) 7%, transparent) 82%,
355
+ transparent
356
+ );
357
+ transform: translate(
358
+ calc(var(--dds-background-spot-x, 50%) - var(--size-aurora-spotlight)),
359
+ calc(var(--dds-background-spot-y, 50%) - var(--size-aurora-spotlight))
360
+ );
361
+ /*
362
+ * And blurred by a quarter of its radius, so no step of the fade survives as a ring and the pool
363
+ * has no edge at all — the eased stops alone still left a disc the eye could trace on the coral.
364
+ * Half the radius spread it so thin it all but vanished.
365
+ */
366
+ filter: blur(calc(var(--size-aurora-spotlight) / 4));
367
+ mix-blend-mode: var(--dds-background-glow-blend, normal);
368
+ opacity: 0;
369
+ transition-property: opacity, transform;
370
+ transition-duration: var(--motion-duration-normal), var(--motion-duration-instant);
371
+ transition-timing-function: var(--motion-easing-enter);
372
+ }
373
+
374
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-spotlit='true']::after {
375
+ opacity: var(--dds-background-hover);
376
+ transition-duration: var(--motion-duration-normal), var(--motion-duration-trail);
377
+ }
378
+
379
+ /*
380
+ * The idle motion of the grid and the rings: the grid's rules rise a pitch and the rings spread a
381
+ * pitch outward, over motion.duration.drift at an even pace, and again — a pitch on, the pattern
382
+ * is where it began, so the loop has no seam. The halftone's glow and the
383
+ * aurora's pools drift in the same time, so every pattern is moving at a band's pace at rest.
384
+ *
385
+ * The shift is registered so it can be animated: an unregistered custom property only flips from
386
+ * one value to the next. It is not inherited, so the frames reach the root and the lit copy that
387
+ * asks for it, and never restyle the band's content. What moves is a background's start, which
388
+ * repaints the band whenever it changes — so it changes in two hundred even steps a cycle, about
389
+ * twenty a second, rather than at the display's rate: well under a pixel a step at this pace,
390
+ * so it still reads as smooth, and as cheap as the halftone's drift, which draws at thirty. It
391
+ * stops while the band is off screen (`data-offscreen`, written by Background), and when the band
392
+ * is asked to hold still.
393
+ */
394
+ @property --dds-background-shift {
395
+ syntax: '<length>';
396
+ inherits: false;
397
+ initial-value: 0;
398
+ }
399
+ /*
400
+ * Every use names a fallback of nothing, for an engine without `@property`: there the shift is an
401
+ * unregistered property nobody sets while the band is still, and a bare reference to it would make
402
+ * the whole background invalid — the grid and the rings would vanish exactly when motion is off.
403
+ */
404
+
405
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']) {
406
+ animation: dds-background-shift var(--motion-duration-drift) steps(200) infinite;
407
+ }
408
+
409
+ @keyframes dds-background-shift {
410
+ to {
411
+ --dds-background-shift: var(--dds-background-pitch);
412
+ }
413
+ }
414
+
415
+ /* Off screen, nobody sees it move: every pattern's idle motion waits where it is. */
416
+ :where([data-dds-context="marketing"]) .dds-background[data-offscreen='true'],
417
+ :where([data-dds-context="marketing"]) .dds-background[data-offscreen='true']::before {
418
+ animation-play-state: paused;
419
+ }
420
+
421
+ /* `animated={false}`: every pattern holds still at rest. What it does under the pointer is `interactive`. */
422
+ :where([data-dds-context="marketing"]) .dds-background[data-animated='false'],
423
+ :where([data-dds-context="marketing"]) .dds-background[data-animated='false'][data-pattern='aurora']::before {
424
+ animation: none;
425
+ }
426
+
427
+ /*
428
+ * For a reader who asked for less motion, nothing moves at rest, and the pointer's light on every
429
+ * pattern comes and goes at once rather than fading or trailing.
430
+ */
431
+ @media (prefers-reduced-motion: reduce) {
432
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']),
433
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']::before {
434
+ animation: none;
435
+ }
436
+
437
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'], [data-pattern='aurora'])::before,
438
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora']::after {
439
+ transition: none;
440
+ }
441
+ }
442
+
443
+ /*
444
+ * The mesh, for `pattern="mesh"`: the whole band lit by five pools of the brand's reds that run
445
+ * into one another like liquid — the design system's own front page, as a pattern.
446
+ *
447
+ * The layer overhangs the band by a tenth each side and is blurred by size.mesh.blur, so no pool
448
+ * keeps an edge and the layer's own edge falls outside the band. It sits behind the content by a
449
+ * negative stacking order, which the root's isolation keeps inside the band.
450
+ *
451
+ * The inks are the tone's, set here as five custom properties because each pool takes a different
452
+ * one. On the coral ground, the drawing the pattern was made for: the brand's deepest red, its
453
+ * pressed red twice, its hover, and the coral itself — no white, which washed the reds to pink. On
454
+ * the dark ground the same reds glowing on near-black, the deepest swapped for the coral so the
455
+ * glow has somewhere to start. On the light ground a blush: the coral and its pale tint, held back.
456
+ */
457
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__mesh {
458
+ --dds-background-mesh-1: var(--color-bg-brand-deep);
459
+ --dds-background-mesh-2: var(--color-bg-brand-active);
460
+ --dds-background-mesh-3: var(--color-bg-brand-hover);
461
+ --dds-background-mesh-4: var(--color-bg-brand-active);
462
+ --dds-background-mesh-5: var(--color-bg-brand);
463
+ /* The deepest pool is a shade under the words, not a ground of its own: at 0.85 it turned half
464
+ the band brown, at 0.35 it left the words on a flat red. */
465
+ --dds-background-mesh-shade: 0.55;
466
+ --dds-background-mesh-strength: 1;
467
+ inset: -10%;
468
+ z-index: -1;
469
+ filter: blur(var(--size-mesh-blur)) saturate(1.15);
470
+ }
471
+
472
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='dark'] .dds-background__mesh {
473
+ --dds-background-mesh-1: var(--color-bg-brand);
474
+ --dds-background-mesh-shade: 0.7;
475
+ --dds-background-mesh-strength: 0.6;
476
+ }
477
+
478
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='light'] .dds-background__mesh {
479
+ --dds-background-mesh-1: var(--color-bg-brand-subtle);
480
+ --dds-background-mesh-2: var(--color-bg-brand);
481
+ --dds-background-mesh-3: var(--color-bg-brand-subtle);
482
+ --dds-background-mesh-4: var(--color-bg-brand-hover);
483
+ --dds-background-mesh-5: var(--color-bg-brand-subtle);
484
+ --dds-background-mesh-shade: 1;
485
+ --dds-background-mesh-strength: 0.22;
486
+ }
487
+
488
+ /*
489
+ * A pool: an uneven round shape that drifts and stretches on two loops of its own length, and
490
+ * leans towards the pointer by its own depth — a hundredth of the pool per step — trailing it by
491
+ * its own lag, so the colours slide through one another instead of moving as one.
492
+ *
493
+ * Every length of time is a multiple of a motion token, so the mesh keeps pace with the others:
494
+ * the loops of motion.duration.drift, the lag of motion.duration.trail.
495
+ *
496
+ * The drift is a transform and the stretch a `scale` and `rotate`, all the compositor's to move;
497
+ * a changing `border-radius` repainted the whole blurred layer every frame.
498
+ */
499
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool {
500
+ --depth: 6;
501
+ --lag: 2.8;
502
+ inline-size: 60%;
503
+ aspect-ratio: 1;
504
+ border-radius: 42% 58% 63% 37% / 41% 44% 56% 59%;
505
+ opacity: var(--dds-background-mesh-strength);
506
+ animation:
507
+ dds-background-mesh-drift calc(var(--motion-duration-drift) * 2.6) ease-in-out infinite alternate,
508
+ dds-background-mesh-morph calc(var(--motion-duration-drift) * 1.1) ease-in-out infinite alternate;
509
+ translate:
510
+ calc(var(--dds-background-lean-x, 0) * var(--depth) * 1%)
511
+ calc(var(--dds-background-lean-y, 0) * var(--depth) * 1%);
512
+ transition-property: translate;
513
+ transition-duration: calc(var(--motion-duration-trail) * var(--lag));
514
+ }
515
+
516
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool:nth-child(1) {
517
+ --depth: -8;
518
+ --lag: 4.4;
519
+ inset: 45% auto auto -5%;
520
+ inline-size: 45%;
521
+ background-color: var(--dds-background-mesh-1);
522
+ opacity: calc(var(--dds-background-mesh-strength) * var(--dds-background-mesh-shade));
523
+ animation-duration: calc(var(--motion-duration-drift) * 2.6), calc(var(--motion-duration-drift) * 1.3);
524
+ }
525
+
526
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool:nth-child(2) {
527
+ --depth: 10;
528
+ --lag: 3.2;
529
+ inset: -20% -15% auto auto;
530
+ background-color: var(--dds-background-mesh-2);
531
+ animation-duration: calc(var(--motion-duration-drift) * 3.1), calc(var(--motion-duration-drift) * 0.9);
532
+ animation-delay: calc(var(--motion-duration-drift) * -0.8), calc(var(--motion-duration-drift) * -0.3);
533
+ }
534
+
535
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool:nth-child(3) {
536
+ --depth: 16;
537
+ --lag: 2;
538
+ inset: 30% 20% auto auto;
539
+ inline-size: 45%;
540
+ background-color: var(--dds-background-mesh-3);
541
+ animation-duration: calc(var(--motion-duration-drift) * 2.2), calc(var(--motion-duration-drift) * 0.7);
542
+ animation-delay: calc(var(--motion-duration-drift) * -1.4), calc(var(--motion-duration-drift) * -0.5);
543
+ }
544
+
545
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool:nth-child(4) {
546
+ --depth: -12;
547
+ --lag: 5.2;
548
+ inset: auto auto -30% 25%;
549
+ inline-size: 50%;
550
+ background-color: var(--dds-background-mesh-4);
551
+ animation-duration: calc(var(--motion-duration-drift) * 3.5), calc(var(--motion-duration-drift) * 1.2);
552
+ animation-delay: calc(var(--motion-duration-drift) * -0.4), calc(var(--motion-duration-drift) * -0.9);
553
+ }
554
+
555
+ /* The coral itself, high in the far corner: the brightest the pools go. */
556
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool:nth-child(5) {
557
+ --depth: 20;
558
+ --lag: 1.6;
559
+ inset: -5% 10% auto auto;
560
+ inline-size: 30%;
561
+ background-color: var(--dds-background-mesh-5);
562
+ animation-duration: calc(var(--motion-duration-drift) * 2.8), calc(var(--motion-duration-drift) * 0.8);
563
+ animation-delay: calc(var(--motion-duration-drift) * -1.8), calc(var(--motion-duration-drift) * -0.2);
564
+ }
565
+
566
+ @keyframes dds-background-mesh-drift {
567
+ 0% { transform: translate(0, 0) scale(1); }
568
+ 33% { transform: translate(12%, -8%) scale(1.15); }
569
+ 66% { transform: translate(-10%, 10%) scale(0.9); }
570
+ 100% { transform: translate(8%, 6%) scale(1.08); }
571
+ }
572
+
573
+ @keyframes dds-background-mesh-morph {
574
+ 0% { scale: 1 1; rotate: 0deg; }
575
+ 33% { scale: 1.25 0.8; rotate: 50deg; }
576
+ 66% { scale: 0.85 1.2; rotate: 110deg; }
577
+ 100% { scale: 1.15 0.9; rotate: 160deg; }
578
+ }
579
+
580
+ /*
581
+ * Off screen the pools wait where they are. With `animated` off they rest, and flow only while the
582
+ * pointer is over the band — the front page's own setting — stopping where they are when it leaves
583
+ * rather than jumping home.
584
+ */
585
+ :where([data-dds-context="marketing"]) .dds-background[data-offscreen='true'] .dds-background__pool,
586
+ :where([data-dds-context="marketing"]) .dds-background[data-animated='false'] .dds-background__pool {
587
+ animation-play-state: paused;
588
+ }
589
+
590
+ :where([data-dds-context="marketing"]) .dds-background[data-animated='false'][data-spotlit='true'] .dds-background__pool {
591
+ animation-play-state: running;
592
+ }
593
+
594
+ /* For a reader who asked for less motion the pools hold still and do not follow the pointer. */
595
+ @media (prefers-reduced-motion: reduce) {
596
+ :where([data-dds-context="marketing"]) .dds-background .dds-background__pool {
597
+ animation: none;
598
+ translate: none;
599
+ transition: none;
600
+ }
601
+ }
602
+
603
+ /*
604
+ * The shaded patterns — see `shader.ts` and `patterns.ts`.
605
+ *
606
+ * Each names its inks here, per tone, as six custom properties the shader reads back as the
607
+ * browser resolves them: the ground first, then the pattern's own. They are opaque — a shader
608
+ * cannot see through to the band — so a translucent role is mixed onto its ground here, where the
609
+ * stylesheet can do it, rather than in the shader. The strength is how loudly the pattern is
610
+ * painted on that ground, and the grain how much tooth it is given: least on the light ground,
611
+ * where grain reads as dirt, most on the dark, where it reads as film.
612
+ */
613
+ :where([data-dds-context="marketing"]) .dds-background {
614
+ --dds-background-gl-strength: 1;
615
+ --dds-background-gl-grain: 0.035;
616
+ --dds-background-gl-hairline: var(--border-width-default);
617
+ }
618
+
619
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='dark'] {
620
+ --dds-background-gl-grain: 0.05;
621
+ }
622
+
623
+ :where([data-dds-context="marketing"]) .dds-background[data-tone='light'] {
624
+ --dds-background-gl-grain: 0.025;
625
+ }
626
+
627
+ /*
628
+ * The aurora and the mesh take none. They are drawn at half the density and scaled up, so the grain
629
+ * was scaled up with them: at the hairline patterns' amount it read as noise laid over the light,
630
+ * and at less it showed the lattice of the pixels it was drawn on. The browser's own smoothing as it
631
+ * scales them up is what keeps their long fades from banding.
632
+ */
633
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='aurora'], [data-pattern='mesh']) {
634
+ --dds-background-gl-grain: 0;
635
+ }
636
+
637
+ /* The aurora: curtains lighter than the ground they rise from, with a deeper red folded through. */
638
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='brand'] {
639
+ /* On the coral the curtains are the brand's own deeper reds — its hover and its pressed red —
640
+ with only a touch of light at their brightest, so the band stays coral. White curtains washed
641
+ the coral to pink. */
642
+ --dds-background-gl-ink0: var(--color-bg-brand);
643
+ --dds-background-gl-ink1: var(--color-bg-brand-active);
644
+ --dds-background-gl-ink2: var(--color-bg-brand-hover);
645
+ --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 72%, var(--color-fg-on-brand));
646
+ --dds-background-gl-strength: 1;
647
+ }
648
+
649
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='dark'] {
650
+ --dds-background-gl-ink0: var(--color-bg-brand-strong);
651
+ --dds-background-gl-ink1: var(--color-bg-brand);
652
+ --dds-background-gl-ink2: var(--color-bg-brand-active);
653
+ --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 60%, var(--color-fg-on-brand-strong));
654
+ --dds-background-gl-strength: 0.85;
655
+ }
656
+
657
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='aurora'][data-tone='light'] {
658
+ --dds-background-gl-ink0: var(--color-bg-page);
659
+ --dds-background-gl-ink1: var(--color-bg-brand);
660
+ --dds-background-gl-ink2: var(--color-bg-brand-hover);
661
+ --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 50%, var(--color-bg-page));
662
+ --dds-background-gl-strength: 0.35;
663
+ }
664
+
665
+ /*
666
+ * The mesh: the front page's five pools, in the same inks as the stylesheet's version of them —
667
+ * the deepest red, the pressed red, the hover, the pressed red again, and the coral — on each
668
+ * ground. The strength is that version's too: full on the coral, a glow on the dark, a blush on
669
+ * the light. How far the deepest is held back is its `--dds-background-mesh-shade`.
670
+ */
671
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='mesh'][data-tone='brand'] {
672
+ --dds-background-gl-ink0: var(--color-bg-brand);
673
+ --dds-background-gl-ink1: var(--color-bg-brand-deep);
674
+ --dds-background-gl-ink2: var(--color-bg-brand-active);
675
+ --dds-background-gl-ink3: var(--color-bg-brand-hover);
676
+ --dds-background-gl-ink4: var(--color-bg-brand-active);
677
+ --dds-background-gl-ink5: var(--color-bg-brand);
678
+ }
679
+
680
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='mesh'][data-tone='dark'] {
681
+ --dds-background-gl-ink0: var(--color-bg-brand-strong);
682
+ --dds-background-gl-ink1: var(--color-bg-brand);
683
+ --dds-background-gl-ink2: var(--color-bg-brand-active);
684
+ --dds-background-gl-ink3: var(--color-bg-brand-hover);
685
+ --dds-background-gl-ink4: var(--color-bg-brand-active);
686
+ --dds-background-gl-ink5: var(--color-bg-brand);
687
+ /* Less than the stylesheet's 0.6: its pools are smaller than the band, and these reach every
688
+ corner of it, so at that strength the near-black ground was gone. */
689
+ --dds-background-gl-strength: 0.35;
690
+ }
691
+
692
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='mesh'][data-tone='light'] {
693
+ --dds-background-gl-ink0: var(--color-bg-page);
694
+ --dds-background-gl-ink1: var(--color-bg-brand-subtle);
695
+ --dds-background-gl-ink2: var(--color-bg-brand);
696
+ --dds-background-gl-ink3: var(--color-bg-brand-subtle);
697
+ --dds-background-gl-ink4: var(--color-bg-brand-hover);
698
+ --dds-background-gl-ink5: var(--color-bg-brand-subtle);
699
+ --dds-background-gl-strength: 0.22;
700
+ }
701
+
702
+ /* The grid and the rings: the ground, the resting rule, the lit rule, and the bloom at the foot. */
703
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='grid'] {
704
+ --dds-background-gl-pitch: var(--size-rule-grid-pitch);
705
+ }
706
+
707
+ :where([data-dds-context="marketing"]) .dds-background[data-pattern='rings'] {
708
+ --dds-background-gl-pitch: var(--size-rings-pitch);
709
+ }
710
+
711
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings']) {
712
+ --dds-background-gl-hairline: var(--dds-background-hairline);
713
+ }
714
+
715
+ /* On the coral, the brand's own reds: the bloom the lines rise out of is its pressed red, a deeper
716
+ coral rather than a whitened one, and the rules a faint lighter coral — white blooms and white
717
+ rules washed the band to pink. The lit lines and the travelling light keep most of the white,
718
+ since they are the one thing on the band meant to catch the eye. */
719
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='brand'] {
720
+ --dds-background-gl-ink0: var(--color-bg-brand);
721
+ --dds-background-gl-ink1: color-mix(in srgb, var(--color-fg-on-brand) 22%, var(--color-bg-brand));
722
+ --dds-background-gl-ink2: color-mix(in srgb, var(--color-fg-on-brand) 70%, var(--color-bg-brand));
723
+ --dds-background-gl-ink3: var(--color-bg-brand-active);
724
+ }
725
+
726
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='dark'] {
727
+ --dds-background-gl-ink0: var(--color-bg-brand-strong);
728
+ --dds-background-gl-ink1: color-mix(in srgb, var(--color-fg-on-brand-strong) 16%, var(--color-bg-brand-strong));
729
+ --dds-background-gl-ink2: var(--color-bg-brand);
730
+ --dds-background-gl-ink3: var(--color-bg-brand-deep);
731
+ }
732
+
733
+ :where([data-dds-context="marketing"]) .dds-background:is([data-pattern='grid'], [data-pattern='rings'])[data-tone='light'] {
734
+ --dds-background-gl-ink0: var(--color-bg-page);
735
+ --dds-background-gl-ink1: color-mix(in srgb, var(--color-bg-brand) 28%, var(--color-bg-page));
736
+ --dds-background-gl-ink2: var(--color-bg-brand);
737
+ --dds-background-gl-ink3: color-mix(in srgb, var(--color-bg-brand) 12%, var(--color-bg-page));
738
+ }
739
+
740
+ /*
741
+ * The shader's canvas is opaque, so until it has a frame it stays out of sight and the stylesheet's
742
+ * version shows. Once it has — `data-shaded` — the stylesheet's paint steps aside: the grid's and
743
+ * the rings' background images, every pattern's pseudo-elements, and the mesh's pools.
744
+ */
745
+ :where([data-dds-context="marketing"]) .dds-background:not([data-pattern='halftone']):not([data-shaded='true']) .dds-background__canvas {
746
+ visibility: hidden;
747
+ }
748
+
749
+ :where([data-dds-context="marketing"]) .dds-background[data-shaded='true'] {
750
+ background-image: none;
751
+ }
752
+
753
+ :where([data-dds-context="marketing"]) .dds-background[data-shaded='true']::before,
754
+ :where([data-dds-context="marketing"]) .dds-background[data-shaded='true']::after {
755
+ display: none;
756
+ }
757
+
758
+ :where([data-dds-context="marketing"]) .dds-background[data-shaded='true'] .dds-background__mesh {
759
+ display: none;
760
+ }