@uh-design-system/component-library 0.5.2 → 0.6.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 (243) hide show
  1. package/dist/cjs/{utils-3412cbed.js → attributes-BMbXzbwU.js} +2 -28
  2. package/dist/cjs/component-library.cjs.js +7 -7
  3. package/dist/cjs/controlUtils-ofqiQxRF.js +42 -0
  4. package/dist/cjs/ds-accordion.cjs.entry.js +79 -0
  5. package/dist/cjs/ds-button.cjs.entry.js +107 -0
  6. package/dist/cjs/ds-card.cjs.entry.js +58 -0
  7. package/dist/cjs/ds-checkbox-group.cjs.entry.js +109 -49
  8. package/dist/cjs/ds-checkbox.cjs.entry.js +88 -79
  9. package/dist/cjs/ds-icon.cjs.entry.js +943 -0
  10. package/dist/cjs/ds-input-validity.cjs.entry.js +14 -15
  11. package/dist/cjs/ds-link-with-arrow.cjs.entry.js +21 -20
  12. package/dist/cjs/ds-link.cjs.entry.js +34 -31
  13. package/dist/cjs/ds-radio-button-group.cjs.entry.js +153 -0
  14. package/dist/cjs/ds-radio-button.cjs.entry.js +151 -0
  15. package/dist/cjs/ds-spinner.cjs.entry.js +62 -0
  16. package/dist/cjs/ds-text-input.cjs.entry.js +90 -77
  17. package/dist/cjs/ds-visually-hidden.cjs.entry.js +3 -6
  18. package/dist/cjs/index-Bp6Dd2i1.js +94 -0
  19. package/dist/cjs/{store-9bd20f3c.js → index-DwLFyR5p.js} +6 -2
  20. package/dist/cjs/{index-bf84b124.js → index-Mjp9Y-Sw.js} +701 -55
  21. package/dist/cjs/index.cjs.js +3 -5
  22. package/dist/cjs/{linkUtils-695da37c.js → linkUtils-onlbgKdI.js} +4 -2
  23. package/dist/cjs/loader.cjs.js +3 -5
  24. package/dist/cjs/utils-BjZTECpy.js +29 -0
  25. package/dist/collection/accessibility/stories/naming.stories.js +3 -3
  26. package/dist/collection/collection-manifest.json +78 -3
  27. package/dist/collection/components/01-base-components/ds-accordion/ds-accordion.css +18 -17
  28. package/dist/collection/components/01-base-components/ds-accordion/ds-accordion.js +91 -50
  29. package/dist/collection/components/01-base-components/ds-accordion/stories/ds-accordion.examples.stories.js +6 -6
  30. package/dist/collection/components/01-base-components/ds-accordion/stories/ds-accordion.features.stories.js +14 -14
  31. package/dist/collection/components/01-base-components/ds-accordion/stories/ds-accordion.stories.js +24 -66
  32. package/dist/collection/components/01-base-components/ds-button/ds-button.css +124 -145
  33. package/dist/collection/components/01-base-components/ds-button/ds-button.js +150 -65
  34. package/dist/collection/components/01-base-components/ds-button/stories/ds-button.examples.stories.js +121 -23
  35. package/dist/collection/components/01-base-components/ds-button/stories/ds-button.features.stories.js +49 -42
  36. package/dist/collection/components/01-base-components/ds-button/stories/ds-button.stories.js +16 -72
  37. package/dist/collection/components/01-base-components/ds-card/ds-card.css +127 -0
  38. package/dist/collection/components/01-base-components/ds-card/ds-card.js +303 -0
  39. package/dist/collection/components/01-base-components/ds-card/stories/ds-card.examples.stories.js +92 -0
  40. package/dist/collection/components/01-base-components/ds-card/stories/ds-card.features.stories.js +66 -0
  41. package/dist/collection/components/01-base-components/ds-card/stories/ds-card.stories.js +71 -0
  42. package/dist/collection/components/01-base-components/ds-checkbox/ds-checkbox.css +46 -46
  43. package/dist/collection/components/01-base-components/ds-checkbox/ds-checkbox.js +120 -111
  44. package/dist/collection/components/01-base-components/ds-checkbox/stories/ds-checkbox.features.stories.js +20 -20
  45. package/dist/collection/components/01-base-components/ds-checkbox/stories/ds-checkbox.stories.js +12 -25
  46. package/dist/collection/components/01-base-components/ds-checkbox-group/ds-checkbox-group.css +2 -3
  47. package/dist/collection/components/01-base-components/ds-checkbox-group/ds-checkbox-group.js +214 -63
  48. package/dist/collection/components/01-base-components/ds-checkbox-group/stories/ds-checkbox-group.features.stories.js +215 -50
  49. package/dist/collection/components/01-base-components/ds-checkbox-group/stories/ds-checkbox-group.stories.js +30 -28
  50. package/dist/collection/components/01-base-components/ds-icon/ds-icon.js +36 -31
  51. package/dist/collection/components/01-base-components/ds-icon/stories/ds-icon.stories.js +10 -37
  52. package/dist/collection/components/01-base-components/ds-input-validity/ds-input-validity.css +2 -2
  53. package/dist/collection/components/01-base-components/ds-input-validity/ds-input-validity.js +60 -30
  54. package/dist/collection/components/01-base-components/ds-input-validity/stories/ds-input-validity.features.stories.js +4 -4
  55. package/dist/collection/components/01-base-components/ds-input-validity/stories/ds-input-validity.stories.js +4 -9
  56. package/dist/collection/components/01-base-components/ds-link/ds-link.css +24 -14
  57. package/dist/collection/components/01-base-components/ds-link/ds-link.js +74 -75
  58. package/dist/collection/components/01-base-components/ds-link/stories/ds-link.examples.stories.js +27 -27
  59. package/dist/collection/components/01-base-components/ds-link/stories/ds-link.features.stories.js +38 -21
  60. package/dist/collection/components/01-base-components/ds-link/stories/ds-link.stories.js +8 -67
  61. package/dist/collection/components/01-base-components/ds-link-with-arrow/ds-link-with-arrow.css +10 -12
  62. package/dist/collection/components/01-base-components/ds-link-with-arrow/ds-link-with-arrow.js +30 -52
  63. package/dist/collection/components/01-base-components/ds-link-with-arrow/stories/ds-link-with-arrow.examples.stories.js +4 -4
  64. package/dist/collection/components/01-base-components/ds-link-with-arrow/stories/ds-link-with-arrow.features.stories.js +6 -6
  65. package/dist/collection/components/01-base-components/ds-link-with-arrow/stories/ds-link-with-arrow.stories.js +4 -28
  66. package/dist/collection/components/01-base-components/ds-radio-button/ds-radio-button.css +115 -0
  67. package/dist/collection/components/01-base-components/ds-radio-button/ds-radio-button.js +449 -0
  68. package/dist/collection/components/01-base-components/ds-radio-button/stories/ds-radio-button.features.stories.js +72 -0
  69. package/dist/collection/components/01-base-components/ds-radio-button/stories/ds-radio-button.stories.js +22 -0
  70. package/dist/collection/components/01-base-components/ds-radio-button-group/ds-radio-button-group.css +30 -0
  71. package/dist/collection/components/01-base-components/ds-radio-button-group/ds-radio-button-group.js +360 -0
  72. package/dist/collection/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.examples.stories.js +42 -0
  73. package/dist/collection/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.features.stories.js +71 -0
  74. package/dist/collection/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.stories.js +60 -0
  75. package/dist/collection/components/01-base-components/ds-spinner/ds-spinner.css +279 -0
  76. package/dist/collection/components/01-base-components/ds-spinner/ds-spinner.js +221 -0
  77. package/dist/collection/components/01-base-components/ds-spinner/stories/ds-spinner.examples.stories.js +120 -0
  78. package/dist/collection/components/01-base-components/ds-spinner/stories/ds-spinner.features.stories.js +107 -0
  79. package/dist/collection/components/01-base-components/ds-spinner/stories/ds-spinner.stories.js +14 -0
  80. package/dist/collection/components/01-base-components/ds-text-input/ds-text-input.css +85 -118
  81. package/dist/collection/components/01-base-components/ds-text-input/ds-text-input.js +230 -155
  82. package/dist/collection/components/01-base-components/ds-text-input/stories/ds-text-input.examples.stories.js +26 -21
  83. package/dist/collection/components/01-base-components/ds-text-input/stories/ds-text-input.features.stories.js +40 -40
  84. package/dist/collection/components/01-base-components/ds-text-input/stories/ds-text-input.stories.js +30 -56
  85. package/dist/collection/components/01-base-components/ds-visually-hidden/ds-visually-hidden.js +1 -1
  86. package/dist/collection/store.js +7 -1
  87. package/dist/collection/utils/attributes/attributes.js +2 -2
  88. package/dist/collection/utils/button/buttonUtils.js +14 -0
  89. package/dist/collection/utils/colours/colourTypes.js +3 -3
  90. package/dist/collection/utils/colours/colourUtils.js +5 -3
  91. package/dist/collection/utils/controls/controlUtils.js +35 -1
  92. package/dist/collection/utils/link/linkUtils.js +3 -2
  93. package/dist/collection/utils/spinner/spinnerUtils.js +20 -0
  94. package/dist/collection/utils/tests/testUtils.js +1 -0
  95. package/dist/collection/utils/typography/typographyUtils.js +3 -3
  96. package/dist/collection/utils/utils.js +10 -9
  97. package/dist/component-library/{utils-cfc536bc.js → attributes-BD_lNRxn.js} +1 -1
  98. package/dist/component-library/component-library.css +1 -1
  99. package/dist/component-library/component-library.esm.js +1 -1
  100. package/dist/component-library/controlUtils-CNER0MvM.js +1 -0
  101. package/dist/component-library/ds-accordion.entry.js +1 -0
  102. package/dist/component-library/ds-button.entry.js +1 -0
  103. package/dist/component-library/ds-card.entry.js +1 -0
  104. package/dist/component-library/ds-checkbox-group.entry.js +1 -1
  105. package/dist/component-library/ds-checkbox.entry.js +1 -1
  106. package/dist/component-library/ds-icon.entry.js +1 -0
  107. package/dist/component-library/ds-input-validity.entry.js +1 -1
  108. package/dist/component-library/ds-link-with-arrow.entry.js +1 -1
  109. package/dist/component-library/ds-link.entry.js +1 -1
  110. package/dist/component-library/ds-radio-button-group.entry.js +1 -0
  111. package/dist/component-library/ds-radio-button.entry.js +1 -0
  112. package/dist/component-library/ds-spinner.entry.js +1 -0
  113. package/dist/component-library/ds-text-input.entry.js +1 -1
  114. package/dist/component-library/ds-visually-hidden.entry.js +1 -1
  115. package/dist/component-library/index-BfTCfPZ1.js +6 -0
  116. package/dist/component-library/index-Cm7V4EAn.js +2 -0
  117. package/dist/component-library/index-DuYjhvTn.js +1 -0
  118. package/dist/component-library/index.esm.js +1 -1
  119. package/dist/component-library/linkUtils-02nCfO0F.js +1 -0
  120. package/dist/component-library/utils-CqaqnfY4.js +1 -0
  121. package/dist/components/attributes.js +3 -3
  122. package/dist/components/controlUtils.js +35 -2
  123. package/dist/components/ds-accordion.js +58 -42
  124. package/dist/components/ds-button2.js +78 -39
  125. package/dist/components/ds-card.d.ts +11 -0
  126. package/dist/components/ds-card.js +91 -0
  127. package/dist/components/ds-checkbox-group.js +116 -56
  128. package/dist/components/ds-checkbox2.js +93 -80
  129. package/dist/components/ds-icon2.js +292 -292
  130. package/dist/components/ds-input-validity2.js +17 -14
  131. package/dist/components/ds-link-with-arrow.js +22 -22
  132. package/dist/components/ds-link.js +43 -40
  133. package/dist/components/ds-radio-button-group.d.ts +11 -0
  134. package/dist/components/ds-radio-button-group.js +185 -0
  135. package/dist/components/ds-radio-button.d.ts +11 -0
  136. package/dist/components/ds-radio-button.js +198 -0
  137. package/dist/components/ds-spinner.d.ts +11 -0
  138. package/dist/components/ds-spinner.js +6 -0
  139. package/dist/components/ds-spinner2.js +89 -0
  140. package/dist/components/ds-text-input.js +126 -104
  141. package/dist/components/ds-visually-hidden2.js +2 -3
  142. package/dist/components/index.js +208 -2
  143. package/dist/components/index2.js +713 -39
  144. package/dist/components/index3.js +69 -57
  145. package/dist/components/linkUtils.js +4 -2
  146. package/dist/docs.d.ts +443 -0
  147. package/dist/docs.json +4790 -0
  148. package/dist/esm/{utils-cfc536bc.js → attributes-BD_lNRxn.js} +3 -26
  149. package/dist/esm/component-library.js +6 -5
  150. package/dist/esm/controlUtils-CNER0MvM.js +37 -0
  151. package/dist/esm/ds-accordion.entry.js +77 -0
  152. package/dist/esm/ds-button.entry.js +105 -0
  153. package/dist/esm/ds-card.entry.js +56 -0
  154. package/dist/esm/ds-checkbox-group.entry.js +108 -46
  155. package/dist/esm/ds-checkbox.entry.js +78 -67
  156. package/dist/esm/ds-icon.entry.js +941 -0
  157. package/dist/esm/ds-input-validity.entry.js +14 -13
  158. package/dist/esm/ds-link-with-arrow.entry.js +21 -18
  159. package/dist/esm/ds-link.entry.js +34 -29
  160. package/dist/esm/ds-radio-button-group.entry.js +151 -0
  161. package/dist/esm/ds-radio-button.entry.js +149 -0
  162. package/dist/esm/ds-spinner.entry.js +60 -0
  163. package/dist/esm/ds-text-input.entry.js +88 -73
  164. package/dist/esm/ds-visually-hidden.entry.js +3 -4
  165. package/dist/esm/index-BfTCfPZ1.js +92 -0
  166. package/dist/esm/{index-434995e1.js → index-Cm7V4EAn.js} +699 -34
  167. package/dist/{components/store.js → esm/index-DuYjhvTn.js} +6 -3
  168. package/dist/esm/index.js +2 -2
  169. package/dist/esm/{linkUtils-3d1b28cf.js → linkUtils-02nCfO0F.js} +4 -2
  170. package/dist/esm/loader.js +4 -4
  171. package/dist/esm/utils-CqaqnfY4.js +25 -0
  172. package/dist/hydrate/index.d.ts +271 -0
  173. package/dist/hydrate/index.js +22280 -0
  174. package/dist/hydrate/index.mjs +22272 -0
  175. package/dist/hydrate/package.json +12 -0
  176. package/dist/styles/helpers.css +15 -0
  177. package/dist/styles/helpers.css.map +1 -0
  178. package/dist/styles/mixins/_breakpoints.scss +13 -0
  179. package/dist/styles/mixins/_focus.scss +26 -0
  180. package/dist/styles/mixins/_wrapper.scss +5 -0
  181. package/dist/styles/mixins/imports-default/_imports.scss +2 -0
  182. package/dist/styles/mixins/tokens/_breakpoints.scss +13 -0
  183. package/dist/styles/mixins/tokens/_semantic-colours.scss +75 -0
  184. package/dist/styles/mixins.scss +12 -0
  185. package/dist/styles/variables.css +176 -0
  186. package/dist/styles/variables.css.map +1 -0
  187. package/dist/types/components/01-base-components/ds-accordion/ds-accordion.d.ts +11 -8
  188. package/dist/types/components/01-base-components/ds-button/ds-button.d.ts +16 -11
  189. package/dist/types/components/01-base-components/ds-button/stories/ds-button.examples.stories.d.ts +1 -0
  190. package/dist/types/components/01-base-components/ds-button/stories/ds-button.features.stories.d.ts +1 -0
  191. package/dist/types/components/01-base-components/ds-card/ds-card.d.ts +20 -0
  192. package/dist/types/components/01-base-components/ds-card/stories/ds-card.examples.stories.d.ts +8 -0
  193. package/dist/types/components/01-base-components/ds-card/stories/ds-card.features.stories.d.ts +8 -0
  194. package/dist/types/components/01-base-components/ds-card/stories/ds-card.stories.d.ts +7 -0
  195. package/dist/types/components/01-base-components/ds-checkbox/ds-checkbox.d.ts +21 -22
  196. package/dist/types/components/01-base-components/ds-checkbox-group/ds-checkbox-group.d.ts +21 -11
  197. package/dist/types/components/01-base-components/ds-checkbox-group/stories/ds-checkbox-group.features.stories.d.ts +3 -0
  198. package/dist/types/components/01-base-components/ds-icon/ds-icon.d.ts +7 -5
  199. package/dist/types/components/01-base-components/ds-input-validity/ds-input-validity.d.ts +5 -6
  200. package/dist/types/components/01-base-components/ds-link/ds-link.d.ts +13 -14
  201. package/dist/types/components/01-base-components/ds-link/stories/ds-link.features.stories.d.ts +2 -0
  202. package/dist/types/components/01-base-components/ds-link-with-arrow/ds-link-with-arrow.d.ts +5 -7
  203. package/dist/types/components/01-base-components/ds-radio-button/ds-radio-button.d.ts +44 -0
  204. package/dist/types/components/01-base-components/ds-radio-button/stories/ds-radio-button.features.stories.d.ts +15 -0
  205. package/dist/types/components/01-base-components/ds-radio-button/stories/ds-radio-button.stories.d.ts +7 -0
  206. package/dist/types/components/01-base-components/ds-radio-button-group/ds-radio-button-group.d.ts +34 -0
  207. package/dist/types/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.examples.stories.d.ts +6 -0
  208. package/dist/types/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.features.stories.d.ts +11 -0
  209. package/dist/types/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.stories.d.ts +7 -0
  210. package/dist/types/components/01-base-components/ds-spinner/ds-spinner.d.ts +17 -0
  211. package/dist/types/components/01-base-components/ds-spinner/stories/ds-spinner.examples.stories.d.ts +7 -0
  212. package/dist/types/components/01-base-components/ds-spinner/stories/ds-spinner.features.stories.d.ts +7 -0
  213. package/dist/types/components/01-base-components/ds-spinner/stories/ds-spinner.stories.d.ts +7 -0
  214. package/dist/types/components/01-base-components/ds-text-input/ds-text-input.d.ts +37 -32
  215. package/dist/types/components.d.ts +1287 -228
  216. package/dist/types/stencil-public-runtime.d.ts +22 -0
  217. package/dist/types/store.d.ts +6 -1
  218. package/dist/types/utils/attributes/attributes.d.ts +1 -1
  219. package/dist/types/utils/button/buttonUtils.d.ts +1 -0
  220. package/dist/types/utils/colours/colourTypes.d.ts +3 -3
  221. package/dist/types/utils/controls/controlUtils.d.ts +2 -0
  222. package/dist/types/utils/link/linkUtils.d.ts +1 -1
  223. package/dist/types/utils/spinner/spinnerUtils.d.ts +1 -0
  224. package/dist/types/utils/tests/testUtils.d.ts +1 -0
  225. package/dist/types/utils/utils.d.ts +2 -1
  226. package/package.json +40 -36
  227. package/dist/cjs/controlUtils-041de0fd.js +0 -7
  228. package/dist/cjs/ds-accordion_3.cjs.entry.js +0 -1095
  229. package/dist/cjs/index-5b0b9d4c.js +0 -82
  230. package/dist/component-library/controlUtils-9ca4087b.js +0 -1
  231. package/dist/component-library/ds-accordion_3.entry.js +0 -1
  232. package/dist/component-library/index-434995e1.js +0 -2
  233. package/dist/component-library/index-72ac5051.js +0 -6
  234. package/dist/component-library/linkUtils-3d1b28cf.js +0 -1
  235. package/dist/component-library/store-b8d17c10.js +0 -1
  236. package/dist/esm/controlUtils-9ca4087b.js +0 -4
  237. package/dist/esm/ds-accordion_3.entry.js +0 -1089
  238. package/dist/esm/index-72ac5051.js +0 -80
  239. package/dist/esm/store-b8d17c10.js +0 -204
  240. package/dist/loader/package.json +0 -11
  241. /package/dist/cjs/{app-globals-3a1e7e63.js → app-globals-V2Kpy_OQ.js} +0 -0
  242. /package/dist/component-library/{app-globals-0f993ce5.js → app-globals-DQuL1Twl.js} +0 -0
  243. /package/dist/esm/{app-globals-0f993ce5.js → app-globals-DQuL1Twl.js} +0 -0
@@ -16,33 +16,38 @@ export const CustomWidth = {
16
16
  }
17
17
  </style>
18
18
  <div class="ds-sb-custom-width">
19
- <ds-text-input label='Smaller input' style='width: 150px'></ds-text-input>
20
- <ds-text-input label='Full width input' style='width: 100%'></ds-text-input>
21
- <!You can set any custom styles to the input element>
19
+ <ds-text-input ds-label='Smaller input' style='width: 150px'></ds-text-input>
20
+ <ds-text-input ds-label='Full width input' style='width: 100%'></ds-text-input>
21
+ <!-- You can set any custom styles to the input element -->
22
22
  </div>
23
23
  `,
24
24
  };
25
25
  export const UsingSlots = {
26
+ parameters: {
27
+ a11y: {
28
+ disable: true
29
+ }
30
+ },
26
31
  render: () => html `
27
- <ds-text-input aria-label='Slotted label'>
28
- <label ds-id='label' slot='label'><b>Slotted label</b></label>
29
- <p slot='help-text'>Lorem ipsum</p>
30
- <ds-icon name='archive' slot='prefix'></ds-icon>
32
+ <ds-text-input ds-id='input' aria-label='Slotted label'>
33
+ <label for='input' id='label' slot='label'><b>Slotted label</b></label>
34
+ <p slot='assistiveText'>Lorem ipsum</p>
35
+ <ds-icon ds-name='archive' slot='prefix'></ds-icon>
31
36
  <small slot='suffix'>Suffix</small>
32
- <div slot='input-validity'>Validity slot</div>
37
+ <div slot='validity'>Validity slot</div>
33
38
  </ds-text-input>
34
39
  `,
35
40
  };
36
41
  const formValidationDOM = html `
37
42
  <form class="ds-sb-form-validation">
38
- <ds-text-input type="number" label="Minimum value" id="min" name="min" min="5" required></ds-text-input>
39
- <ds-text-input type="number" label="Maximum value" id="max" name="max" min="100" required></ds-text-input>
40
- <ds-text-input type="email" label="Email" id="email" name="email" required></ds-text-input>
41
- <ds-text-input type="tel" label="Telephone" id="tel" name="tel" required></ds-text-input>
42
- <ds-text-input type="password" label="Password" id="password" name="password" required action-button-aria-label="password toggle"></ds-text-input>
43
- <ds-text-input type="url" label="Url" id="url" name="url" required></ds-text-input>
43
+ <ds-text-input ds-type="number" ds-label="Minimum value" ds-id="min" ds-name="min" ds-min="5" ds-required></ds-text-input>
44
+ <ds-text-input ds-type="number" ds-label="Maximum value" ds-id="max" ds-name="max" ds-min="100" ds-required></ds-text-input>
45
+ <ds-text-input ds-type="email" ds-label="Email" ds-id="email" ds-name="email" ds-required></ds-text-input>
46
+ <ds-text-input ds-type="tel" ds-label="Telephone" ds-id="tel" ds-name="tel" ds-required></ds-text-input>
47
+ <ds-text-input ds-type="password" ds-label="Password" ds-id="password" ds-name="password" ds-required ds-action-button-aria-label="password toggle"></ds-text-input>
48
+ <ds-text-input ds-type="url" ds-label="Url" ds-id="url" ds-name="url" ds-required></ds-text-input>
44
49
  <div class="button-group ds-sb-form-validation__buttons">
45
- <ds-button type="submit" value="Submit"></ds-button>
50
+ <ds-button ds-type="submit" ds-value="Submit"></ds-button>
46
51
  </div>
47
52
  </form>
48
53
  `;
@@ -71,10 +76,10 @@ export const FormValidation = {
71
76
  const clientSideValidationDOM = html `
72
77
  <div class="ds-sb-client-side-validation">
73
78
  <div id="example-error-container">
74
- <ds-text-input id="example-error" label="Error message" assistive-text='Type "error" and move to next input to display a validation message.'></ds-text-input>
79
+ <ds-text-input id="example-error" ds-id="example-error-textinput" ds-label="Error message" ds-assistive-text='Type "error" and move to next input to display a validation message.'></ds-text-input>
75
80
  </div>
76
81
  <div id="example-success-container">
77
- <ds-text-input id="example-success" label="Success message" assistive-text='Type "success" and move to next input to display a validation message.'></ds-text-input>
82
+ <ds-text-input id="example-success" ds-id="example-success-textinput" ds-label="Success message" ds-assistive-text='Type "success" and move to next input to display a validation message.'></ds-text-input>
78
83
  </div>
79
84
  </div>
80
85
  `;
@@ -108,9 +113,9 @@ export const ClientSideValidation = {
108
113
  const target = e.target;
109
114
  switch (target.value) {
110
115
  case 'error':
111
- return errorElem.errorText = 'Error message';
116
+ return errorElem.dsErrorText = 'Error message';
112
117
  default:
113
- errorElem.errorText = "";
118
+ errorElem.dsErrorText = "";
114
119
  return;
115
120
  }
116
121
  });
@@ -118,9 +123,9 @@ export const ClientSideValidation = {
118
123
  const target = e.target;
119
124
  switch (target.value) {
120
125
  case 'success':
121
- return successElem.successText = 'Success message';
126
+ return successElem.dsSuccessText = 'Success message';
122
127
  default:
123
- successElem.successText = "";
128
+ successElem.dsSuccessText = "";
124
129
  return;
125
130
  }
126
131
  });
@@ -8,68 +8,68 @@ const meta = {
8
8
  export default meta;
9
9
  export const WithPlaceholder = {};
10
10
  WithPlaceholder.args = {
11
- label: 'Label',
12
- placeholder: 'Placeholder',
11
+ dsLabel: 'Label',
12
+ dsPlaceholder: 'Placeholder',
13
13
  };
14
14
  export const WithAssistiveText = {};
15
15
  WithAssistiveText.args = {
16
- label: 'Label',
17
- assistiveText: 'Assistive text',
16
+ dsLabel: 'Label',
17
+ dsAssistiveText: 'Assistive text',
18
18
  };
19
19
  export const Disabled = {};
20
20
  Disabled.args = {
21
- label: 'Label',
22
- disabled: true,
21
+ dsLabel: 'Label',
22
+ dsDisabled: true,
23
23
  };
24
24
  export const ReadOnly = {};
25
25
  ReadOnly.args = {
26
- label: 'Label',
27
- value: 'Input text',
28
- readonly: true,
26
+ dsLabel: 'Label',
27
+ dsValue: 'Input text',
28
+ dsReadonly: true,
29
29
  };
30
30
  export const Required = {};
31
31
  Required.args = {
32
- label: 'Label',
33
- required: true,
32
+ dsLabel: 'Label',
33
+ dsRequired: true,
34
34
  };
35
35
  export const Optional = {};
36
36
  Optional.args = {
37
- label: 'Label',
38
- optional: true,
37
+ dsLabel: 'Label',
38
+ dsOptional: true,
39
39
  };
40
40
  export const OptionalWithCustomText = {
41
- render: () => html `<ds-text-input label="Optional" optional optional-text="vapaavalintainen"></ds-text-input>`
41
+ render: () => html `<ds-text-input ds-label="Optional" ds-optional ds-optional-text="vapaavalintainen"></ds-text-input>`
42
42
  };
43
43
  export const MaxLength = {};
44
44
  MaxLength.args = {
45
- label: 'Label',
46
- maxlength: 5,
47
- assistiveText: 'Max length of 5'
45
+ dsLabel: 'Label',
46
+ dsMaxlength: 5,
47
+ dsAssistiveText: 'Max length of 5'
48
48
  };
49
49
  export const Valid = {};
50
50
  Valid.args = {
51
- label: 'Label',
52
- valid: true,
53
- successText: 'Success text',
51
+ dsLabel: 'Label',
52
+ dsValid: true,
53
+ dsSuccessText: 'Success text',
54
54
  };
55
55
  export const Invalid = {};
56
56
  Invalid.args = {
57
- label: 'Label',
58
- invalid: true,
59
- errorText: 'Error text',
57
+ dsLabel: 'Label',
58
+ dsInvalid: true,
59
+ dsErrorText: 'Error text',
60
60
  };
61
61
  export const WithIcon = {
62
62
  args: {
63
- label: 'User',
64
- icon: 'account_circle_fill',
65
- type: 'email',
63
+ dsLabel: 'User',
64
+ dsIcon: 'account_circle_fill',
65
+ dsType: 'email',
66
66
  },
67
67
  };
68
68
  export const PasswordInput = {
69
69
  args: {
70
- label: 'Label',
71
- type: 'password',
72
- actionButtonAriaLabel: 'Action button',
70
+ dsLabel: 'Label',
71
+ dsType: 'password',
72
+ dsActionButtonAriaLabel: 'Action button',
73
73
  },
74
74
  play: async ({ canvasElement, step }) => {
75
75
  const dsElem = await getDsElem(canvasElement, 'ds-text-input');
@@ -97,9 +97,9 @@ export const PasswordInput = {
97
97
  };
98
98
  export const SearchInput = {
99
99
  args: {
100
- label: 'Label',
101
- type: 'search',
102
- actionButtonAriaLabel: 'Action button',
100
+ dsLabel: 'Label',
101
+ dsType: 'search',
102
+ dsActionButtonAriaLabel: 'Action button',
103
103
  },
104
104
  play: async ({ canvasElement, step }) => {
105
105
  const dsElem = await getDsElem(canvasElement, 'ds-text-input');
@@ -124,17 +124,17 @@ export const SearchInput = {
124
124
  };
125
125
  export const PrefixText = {
126
126
  args: {
127
- label: 'Phone number',
128
- prefixText: '+358',
129
- type: 'tel',
130
- hiddenAssistiveText: 'Without the country code',
127
+ dsLabel: 'Phone number',
128
+ dsPrefixText: '+358',
129
+ dsType: 'tel',
130
+ dsHiddenAssistiveText: 'Without the country code',
131
131
  },
132
132
  };
133
133
  export const SuffixText = {
134
134
  args: {
135
- label: 'Timeout',
136
- suffixText: 'minutes',
137
- type: 'number',
138
- hiddenAssistiveText: 'Enter the number of minutes',
135
+ dsLabel: 'Timeout',
136
+ dsSuffixText: 'minutes',
137
+ dsType: 'number',
138
+ dsHiddenAssistiveText: 'Enter the number of minutes',
139
139
  },
140
140
  };
@@ -1,72 +1,46 @@
1
1
  import { icons } from "../../../00-foundations/icons/iconList";
2
- import { textInputTypes } from "../utils";
3
2
  const meta = {
4
3
  title: 'Base Components/TextInput',
5
4
  component: 'ds-text-input',
5
+ argTypes: {
6
+ dsIcon: {
7
+ control: 'select',
8
+ options: icons.map(icon => icon.name),
9
+ },
10
+ },
6
11
  };
7
12
  export default meta;
8
13
  export const Default = {
9
14
  args: {
10
- label: "Label"
15
+ dsLabel: "Label"
11
16
  }
12
17
  };
13
18
  Default.args = {
14
- label: 'Label',
19
+ dsLabel: 'Label',
15
20
  };
16
21
  export const Playground = {
17
- argTypes: {
18
- label: { control: 'text' },
19
- placeholder: { control: 'text' },
20
- identifier: { control: 'text' },
21
- name: { control: 'text' },
22
- disabled: { control: 'boolean' },
23
- required: { control: 'boolean' },
24
- readonly: { control: 'boolean' },
25
- value: { control: 'text' },
26
- min: { control: 'number' },
27
- max: { control: 'number' },
28
- maxlength: { control: 'number' },
29
- pattern: { control: 'text' },
30
- assistiveText: { control: 'text' },
31
- prefixText: { control: 'text' },
32
- suffixText: { control: 'text' },
33
- errorText: { control: 'text' },
34
- successText: { control: 'text' },
35
- icon: {
36
- control: 'select',
37
- options: icons.map(icon => icon.name),
38
- },
39
- type: {
40
- control: 'select',
41
- options: textInputTypes,
42
- },
43
- ariaLabel: { name: 'aria-label', control: 'text' },
44
- ariaLabelledby: { name: 'aria-labelledby', control: 'text' },
45
- ariaDescribedby: { name: 'aria-describedby', control: 'text' },
46
- autocomplete: { control: 'text' },
47
- },
48
22
  args: {
49
- label: 'Label',
50
- placeholder: '',
51
- identifier: 'input',
52
- name: '',
53
- disabled: false,
54
- required: false,
55
- readonly: false,
56
- value: '',
57
- min: -1,
58
- max: -1,
59
- maxlength: -1,
60
- assistiveText: '',
61
- prefixText: '',
62
- suffixText: '',
63
- errorText: '',
64
- successText: '',
65
- icon: '',
66
- type: 'text',
67
- autocomplete: '',
68
- ariaLabel: '',
69
- ariaLabelledby: '',
70
- ariaDescribedby: '',
23
+ dsLabel: 'Label',
24
+ dsPlaceholder: '',
25
+ dsIdentifier: 'input',
26
+ dsName: '',
27
+ dsDisabled: false,
28
+ dsRequired: false,
29
+ dsReadonly: false,
30
+ dsValue: '',
31
+ dsMin: -1,
32
+ dsMax: -1,
33
+ dsMaxlength: -1,
34
+ dsAssistiveText: '',
35
+ dsPrefixText: '',
36
+ dsSuffixText: '',
37
+ dsErrorText: '',
38
+ dsSuccessText: '',
39
+ dsIcon: '',
40
+ dsType: 'text',
41
+ dsAutocomplete: '',
42
+ dsAriaLabel: '',
43
+ dsAriaLabelledby: '',
44
+ dsAriaDescribedby: '',
71
45
  }
72
46
  };
@@ -1,7 +1,7 @@
1
1
  import { h } from "@stencil/core";
2
2
  export class DsVisuallyHidden {
3
3
  render() {
4
- return (h("div", { key: 'f488f0f134c76c308763d47c57360e54ae299a06', class: "ds-visually-hidden" }, h("slot", { key: '20d5cdef8c333e5421c670e2558b511b1f235e7f' })));
4
+ return (h("div", { key: 'faa791957259a5ef05d2417a7b316e4cdabd8291', class: "ds-visually-hidden" }, h("slot", { key: 'd7c192f15bf2d74700205ad29f3bb78d0f9cce80' })));
5
5
  }
6
6
  static get is() { return "ds-visually-hidden"; }
7
7
  static get encapsulation() { return "shadow"; }
@@ -2,12 +2,18 @@ import { createStore } from "@stencil/store";
2
2
  ;
3
3
  const initialState = {
4
4
  validation: 'client',
5
+ language: 'en',
5
6
  };
6
7
  const { state, set } = createStore({
7
8
  ...initialState,
8
9
  });
9
10
  export const isValidation = (validation) => state.validation === validation;
10
- export const configure = ({ validation }) => {
11
+ export const getLanguage = () => state.language;
12
+ export const setLanguage = (language) => {
13
+ set('language', language);
14
+ };
15
+ export const configure = ({ validation, language }) => {
11
16
  set('validation', validation || initialState.validation);
17
+ set('language', language || initialState.language);
12
18
  };
13
19
  export default state;
@@ -73,8 +73,8 @@ export const inheritAriaAttributes = (el, ignoreList) => {
73
73
  }
74
74
  return inheritSpecifiedAttributes(el, attributesToInherit);
75
75
  };
76
- export const inheritAttributes = (component, elem) => {
77
- const attributesToIgnore = new Set(['class', 'style', ...ariaAttributes]);
76
+ export const inheritAttributes = (component, elem, attrsToIgnore = []) => {
77
+ const attributesToIgnore = new Set(['class', 'style', ...ariaAttributes, ...attrsToIgnore]);
78
78
  const propsToIgnore = new Set(Object.keys(component));
79
79
  const attributes = {};
80
80
  for (const attr of elem.attributes) {
@@ -0,0 +1,14 @@
1
+ export function handleButtonLoading(buttonElement, originalValue, loadValue, loadingDuration = 3000) {
2
+ if (buttonElement.getAttribute('is-loading') === 'true')
3
+ return;
4
+ const originalIsLoading = buttonElement.getAttribute('is-loading') || 'false';
5
+ const originalAriaDisabled = buttonElement.getAttribute('aria-disabled') || 'false';
6
+ buttonElement.setAttribute('value', loadValue);
7
+ buttonElement.setAttribute('is-loading', 'true');
8
+ buttonElement.setAttribute('aria-disabled', 'true');
9
+ setTimeout(() => {
10
+ buttonElement.setAttribute('value', originalValue);
11
+ buttonElement.setAttribute('is-loading', originalIsLoading);
12
+ buttonElement.setAttribute('aria-disabled', originalAriaDisabled);
13
+ }, loadingDuration);
14
+ }
@@ -12,7 +12,7 @@ export const opaque = {
12
12
  '--ds-overlay-white': 'Opaque overlays|white',
13
13
  };
14
14
  export const semantic = {
15
- '--ds-textColor': 'Semantic colours|text',
16
- '--ds-bgColor': 'Semantic colours|background',
17
- '--ds-borderColor': 'Semantic colours|border',
15
+ '$dsTextColor': 'Semantic colours|text',
16
+ '$dsBgColor': 'Semantic colours|background',
17
+ '$dsBorderColor': 'Semantic colours|border',
18
18
  };
@@ -22,17 +22,18 @@ const getStyles = (colourType) => {
22
22
  }
23
23
  };
24
24
  export const getColourVariables = (colourType) => {
25
- const cssVariables = Array.from(getStyles(colourType).matchAll(/--[\w-]+:\s*[^;]+;/g)).map(match => match[0]);
25
+ const variablePattern = colourType === 'semantic' ? /\$[\w-]+:\s*[^;]+;/g : /--[\w-]+:\s*[^;]+;/g;
26
+ const cssVariables = Array.from(getStyles(colourType).matchAll(variablePattern)).map(match => match[0]);
26
27
  const categories = getCategories(colourType);
27
28
  return cssVariables
28
29
  .map(variable => {
29
30
  const [name, value] = variable.split(':').map(part => part.trim().replace(';', ''));
30
- const cleanName = name.replace(/^--/, '');
31
+ const cleanName = name.replace(/^(\$|--)/, '');
31
32
  const categoryKey = Object.keys(categories).find(key => name.startsWith(key));
32
33
  if (categoryKey) {
33
34
  return { name: cleanName, variable, value, category: categories[categoryKey] };
34
35
  }
35
- return null;
36
+ return { name: cleanName, variable, value, category: 'Other' };
36
37
  })
37
38
  .filter(variable => variable !== null);
38
39
  };
@@ -42,6 +43,7 @@ const createColourBox = (name, hex) => {
42
43
  const colourSwatch = document.createElement('div');
43
44
  colourSwatch.className = 'colour-swatch';
44
45
  colourSwatch.style.backgroundColor = hex;
46
+ colourSwatch.setAttribute('title', `${name}: ${hex}`);
45
47
  const colourInfo = document.createElement('div');
46
48
  colourInfo.className = 'colour-info';
47
49
  colourInfo.innerHTML = `${name} <br /> <code>${hex}</code>`;
@@ -1,2 +1,36 @@
1
- export const getOptionalText = (text, optionalText) => [text, Boolean(optionalText) ? optionalText : '(optional)'].join(' ');
1
+ import { getLanguage } from "../../store";
2
+ export const getOptionalText = (text, optionalText) => {
3
+ let defaultText = '(optional)';
4
+ switch (getLanguage()) {
5
+ case 'fi':
6
+ defaultText = '(valinnainen)';
7
+ break;
8
+ case 'sv':
9
+ defaultText = '(valfritt)';
10
+ break;
11
+ default:
12
+ break;
13
+ }
14
+ return [text, optionalText || defaultText].join(' ');
15
+ };
2
16
  export const getRequiredText = (text) => [text, '*'].join(' ');
17
+ export const atLeastOneOption = () => {
18
+ switch (getLanguage()) {
19
+ case 'fi':
20
+ return 'Valitse vähintään yksi vaihtoehto.';
21
+ case 'sv':
22
+ return 'Vänligen välj minst ett alternativ.';
23
+ default:
24
+ return 'Please select at least one option.';
25
+ }
26
+ };
27
+ export const allOptions = () => {
28
+ switch (getLanguage()) {
29
+ case 'fi':
30
+ return 'Valitse kaikki vaihtoehdot.';
31
+ case 'sv':
32
+ return 'Vänligen välj alla alternativ.';
33
+ default:
34
+ return 'Please select all options.';
35
+ }
36
+ };
@@ -1,6 +1,7 @@
1
+ import { getLanguage } from "../../store";
1
2
  export const opensInNewTab = (target) => target === '_blank';
2
- export const visuallyHiddenAssistiveText = (lang) => {
3
- switch (lang) {
3
+ export const visuallyHiddenAssistiveText = () => {
4
+ switch (getLanguage()) {
4
5
  case 'fi':
5
6
  return 'Avautuu uuteen välilehteen';
6
7
  case 'sv':
@@ -0,0 +1,20 @@
1
+ export function toggleSpinnerLoad(buttonElement, spinnerElement, results, buttonOriginalValue, loadValue, loadingDuration = 3000) {
2
+ if (buttonElement.getAttribute('is-loading') === 'true')
3
+ return;
4
+ console.log(buttonElement, spinnerElement, results);
5
+ const originalIsLoading = buttonElement.getAttribute('is-loading') || 'false';
6
+ const originalAriaDisabled = buttonElement.getAttribute('aria-disabled') || 'false';
7
+ buttonElement.setAttribute('value', loadValue);
8
+ buttonElement.setAttribute('is-loading', 'true');
9
+ buttonElement.setAttribute('aria-disabled', 'true');
10
+ results.classList.add('ds-sb-hidden');
11
+ spinnerElement.classList.remove('ds-sb-hidden');
12
+ setTimeout(() => {
13
+ buttonElement.setAttribute('value', buttonOriginalValue);
14
+ buttonElement.setAttribute('is-loading', originalIsLoading);
15
+ buttonElement.setAttribute('aria-disabled', originalAriaDisabled);
16
+ results.innerHTML = 'Sended';
17
+ results.classList.remove('ds-sb-hidden');
18
+ spinnerElement.classList.add('ds-sb-hidden');
19
+ }, loadingDuration);
20
+ }
@@ -29,3 +29,4 @@ export const addMockEventListener = (container, selector, eventName) => {
29
29
  elem.addEventListener(eventName, mockFunction);
30
30
  return mockFunction;
31
31
  };
32
+ export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
@@ -85,11 +85,11 @@ export const createCategorySection = (category, fonts, renderedCategories) => {
85
85
  };
86
86
  export const getCSSClasses = (prefix) => {
87
87
  const stylesheets = Array.from(document.styleSheets);
88
- let classNames = [];
89
- for (let sheet of stylesheets) {
88
+ const classNames = [];
89
+ for (const sheet of stylesheets) {
90
90
  try {
91
91
  const rules = Array.from(sheet.cssRules);
92
- for (let rule of rules) {
92
+ for (const rule of rules) {
93
93
  if (rule.selectorText) {
94
94
  const selector = rule.selectorText;
95
95
  if (selector.startsWith(`.${prefix}`)) {
@@ -36,6 +36,16 @@ export const generateLoremIpsum = ({ paragraphs = 1, wordsPerParagraph = 50, sta
36
36
  export const formatAs = (value, suffix) => value.endsWith(suffix) ? value : `${value}${suffix}`;
37
37
  export const formatAsRem = (value) => formatAs(value, 'rem');
38
38
  export const formatAsPx = (value) => formatAs(value, 'px');
39
+ export const slugifyText = (text) => {
40
+ return text
41
+ .toString()
42
+ .toLowerCase()
43
+ .replace(/\s+/g, '-')
44
+ .replace(/[^\w-]+/g, '')
45
+ .replace(/--+/g, '-')
46
+ .replace(/^-+/, '')
47
+ .replace(/-+$/, '');
48
+ };
39
49
  export const remToPx = (remString) => {
40
50
  const rootFontSize = 16;
41
51
  const rem = parseFloat(remString);
@@ -56,12 +66,3 @@ export function* idGenerator(id) {
56
66
  yield `${id}-${currentId++}`;
57
67
  }
58
68
  }
59
- export const getAriaLabel = (text, ariaLabel) => {
60
- if (!ariaLabel) {
61
- return undefined;
62
- }
63
- if (ariaLabel.startsWith(text)) {
64
- return ariaLabel;
65
- }
66
- return [text, ariaLabel].join(' ');
67
- };
@@ -1 +1 @@
1
- const a=(a,r=[])=>{const i={};return r.forEach((r=>{a.hasAttribute(r)&&(null!==a.getAttribute(r)&&(i[r]=a.getAttribute(r)),a.removeAttribute(r))})),i},r=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],i=(i,e)=>{let t=[...r];return e&&e.length>0&&(t=t.filter((a=>!e.includes(a)))),a(i,t)},e=(a,i)=>{const e=new Set(["class","style",...r]),t=new Set(Object.keys(a)),l={};for(const a of i.attributes)t.has(a.name.replace(/-./g,(a=>a[1].toUpperCase())))||e.has(a.name)||(l[a.name]=a.value);return l},t=a=>{const r=parseFloat(a);return(i=""+16*r).endsWith("px")?i:`${i}px`;var i};function*l(a){let r=1;for(;;)yield`${a}-${r++}`}const o=(a,r)=>{if(r)return r.startsWith(a)?r:[a,r].join(" ")};export{a,e as b,l as c,o as g,i,t as r}
1
+ const a=(a,r=[])=>{const i={};return r.forEach((r=>{a.hasAttribute(r)&&(null!==a.getAttribute(r)&&(i[r]=a.getAttribute(r)),a.removeAttribute(r))})),i},r=["role","aria-activedescendant","aria-atomic","aria-autocomplete","aria-braillelabel","aria-brailleroledescription","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colindextext","aria-colspan","aria-controls","aria-current","aria-describedby","aria-description","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowindextext","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext"],i=(i,e)=>{let l=[...r];return e&&e.length>0&&(l=l.filter((a=>!e.includes(a)))),a(i,l)},e=(a,i,e=[])=>{const l=new Set(["class","style",...r,...e]),t=new Set(Object.keys(a)),o={};for(const a of i.attributes)t.has(a.name.replace(/-./g,(a=>a[1].toUpperCase())))||l.has(a.name)||(o[a.name]=a.value);return o};export{a,i as b,e as i}
@@ -1 +1 @@
1
- html{box-sizing:border-box}html *,html *::before,html *::after{box-sizing:inherit}:root{--ds-borderWidth-none:0px;--ds-borderWidth-hairline:1px;--ds-borderWidth-thin:2px;--ds-borderWidth-thick:4px;--ds-borderWidth-xThick:8px;--ds-borderRadius-none:0px}:root{--ds-breakpoint-xSmall:20rem;--ds-breakpoint-small:30rem;--ds-breakpoint-medium:60rem;--ds-breakpoint-large:75rem;--ds-breakpoint-xLarge:90rem}:root{--ds-overlay-black-00:rgb(0 0 0 / 0);--ds-overlay-black-05:rgb(0 0 0 / 0.05);--ds-overlay-black-10:rgb(0 0 0 / 0.1);--ds-overlay-black-15:rgb(0 0 0 / 0.15);--ds-overlay-black-30:rgb(0 0 0 / 0.3);--ds-overlay-black-40:rgb(0 0 0 / 0.4);--ds-overlay-black-50:rgb(0 0 0 / 0.5);--ds-overlay-black-70:rgb(0 0 0 / 0.7);--ds-overlay-black-80:rgb(0 0 0 / 0.8);--ds-overlay-white-00:rgb(255 255 255 / 0);--ds-overlay-white-05:rgb(255 255 255 / 0.05);--ds-overlay-white-10:rgb(255 255 255 / 0.1);--ds-overlay-white-15:rgb(255 255 255 / 0.15);--ds-overlay-white-30:rgb(255 255 255 / 0.3);--ds-overlay-white-40:rgb(255 255 255 / 0.4);--ds-overlay-white-50:rgb(255 255 255 / 0.5);--ds-overlay-white-70:rgb(255 255 255 / 0.7);--ds-overlay-white-80:rgb(255 255 255 / 0.8);--ds-palette-black:#000000;--ds-palette-white:#ffffff;--ds-palette-black-03:#f7f7f7;--ds-palette-black-05:#f2f2f2;--ds-palette-black-10:#e6e6e6;--ds-palette-black-20:#cccccc;--ds-palette-black-30:#b3b3b3;--ds-palette-black-40:#999999;--ds-palette-black-50:#808080;--ds-palette-black-60:#666666;--ds-palette-black-70:#4d4d4d;--ds-palette-black-80:#333333;--ds-palette-black-90:#1a1a1a;--ds-palette-black-95:#0c0c0c;--ds-palette-blue-05:#e5f8ff;--ds-palette-blue-10:#c2eeff;--ds-palette-blue-20:#8adeff;--ds-palette-blue-30:#5cd1ff;--ds-palette-blue-40:#1abeff;--ds-palette-blue-50:#009ad6;--ds-palette-blue-60:#0084b8;--ds-palette-blue-70:#005b80;--ds-palette-blue-80:#053c52;--ds-palette-blue-90:#032330;--ds-palette-green-05:#dffbe1;--ds-palette-green-10:#bef4c1;--ds-palette-green-20:#85e08a;--ds-palette-green-30:#66cc6b;--ds-palette-green-40:#43b149;--ds-palette-green-50:#279b2d;--ds-palette-green-60:#257e29;--ds-palette-green-70:#216325;--ds-palette-green-80:#183f19;--ds-palette-green-90:#0f2410;--ds-palette-mainBlue-05:#e5f5ff;--ds-palette-mainBlue-10:#cdebff;--ds-palette-mainBlue-20:#99d7ff;--ds-palette-mainBlue-30:#70c7ff;--ds-palette-mainBlue-40:#3db3ff;--ds-palette-mainBlue-50:#009bff;--ds-palette-mainBlue-60:#007fd1;--ds-palette-mainBlue-70:#005a94;--ds-palette-mainBlue-80:#003152;--ds-palette-mainBlue-90:#001929;--ds-palette-red-05:#ffeceb;--ds-palette-red-10:#ffd8d6;--ds-palette-red-20:#fdb7b4;--ds-palette-red-30:#f87c77;--ds-palette-red-40:#f0514c;--ds-palette-red-50:#d71f19;--ds-palette-red-60:#bd2828;--ds-palette-red-70:#8b2623;--ds-palette-red-80:#602220;--ds-palette-red-90:#321c1b;--ds-palette-yellow-05:#fff1db;--ds-palette-yellow-10:#ffe7c2;--ds-palette-yellow-20:#ffd799;--ds-palette-yellow-30:#fbc05f;--ds-palette-yellow-40:#eea22b;--ds-palette-yellow-50:#ce8103;--ds-palette-yellow-60:#b26d00;--ds-palette-yellow-70:#7a4b00;--ds-palette-yellow-80:#4e3104;--ds-palette-yellow-90:#282115}:root{--ds-textColor-default:var(--ds-palette-black-95);--ds-textColor-primary:var(--ds-palette-mainBlue-70);--ds-textColor-secondary:var(--ds-palette-black-70);--ds-textColor-white:var(--ds-palette-white);--ds-textColor-danger:var(--ds-palette-red-80);--ds-textColor-success:var(--ds-palette-green-80);--ds-textColor-disabled-onLight:var(--ds-palette-black-40);--ds-textColor-disabled-onDark:var(--ds-overlay-white-40);--ds-textColor-link:var(--ds-palette-mainBlue-70);--ds-textColor-link-hover:var(--ds-palette-mainBlue-80);--ds-textColor-link-active:var(--ds-palette-mainBlue-90);--ds-textColor-link-visited:#551a8b;--ds-textColor-link--standalone:var(--ds-palette-black-70);--ds-textColor-link--standalone-hover:var(--ds-palette-black-80);--ds-textColor-link--standalone-active:var(--ds-palette-black-95);--ds-textColor-link--standalone-focus:var(--ds-palette-black-70);--ds-bgColor-primary:var(--ds-palette-mainBlue-70);--ds-bgColor-primary-hover:var(--ds-palette-mainBlue-80);--ds-bgColor-primary-active:var(--ds-palette-mainBlue-90);--ds-bgColor-secondary:var(--ds-palette-white);--ds-bgColor-secondary-hover:var(--ds-palette-mainBlue-05);--ds-bgColor-secondary-active:var(--ds-palette-mainBlue-10);--ds-bgColor-white:var(--ds-palette-white);--ds-bgColor-white-hover:var(--ds-palette-black-10);--ds-bgColor-white-active:var(--ds-palette-black-20);--ds-bgColor-black:var(--ds-palette-black-95);--ds-bgColor-black-hover:var(--ds-palette-black-80);--ds-bgColor-black-active:var(--ds-palette-white-70);--ds-bgColor-danger:var(--ds-palette-red-05);--ds-bgColor-danger-hover:var(--ds-palette-red-10);--ds-bgColor-danger-active:var(--ds-palette-red-20);--ds-bgColor-success:var(--ds-palette-green-05);--ds-bgColor-success-hover:var(--ds-palette-green-10);--ds-bgColor-success-active:var(--ds-palette-green-20);--ds-bgColor-transparent-onLight:var(--ds-overlay-black-00);--ds-bgColor-transparent-onLight-hover:var(--ds-overlay-black-10);--ds-bgColor-transparent-onLight-active:var(--ds-overlay-black-15);--ds-bgColor-transparent-onDark:var(--ds-overlay-white-00);--ds-bgColor-transparent-onDark-hover:var(--ds-overlay-white-30);--ds-bgColor-transparent-onDark-active:var(--ds-overlay-white-40);--ds-bgColor-disabled-onLight:var(--ds-overlay-black-10);--ds-bgColor-disabled-onDark:var(--ds-overlay-white-10);--ds-borderColor-default:var(--ds-palette-black-50);--ds-borderColor-primary:var(--ds-palette-mainBlue-70);--ds-borderColor-black:var(--ds-palette-black-95);--ds-borderColor-white:var(--ds-palette-white);--ds-borderColor-danger:var(--ds-palette-red-50);--ds-borderColor-success:var(--ds-palette-green-50);--ds-borderColor-transparent:var(--ds-overlay-black-00);--ds-borderColor-disabled-onLight:var(--ds-overlay-black-15);--ds-borderColor-disabled-onDark:var(--ds-overlay-white-15);--ds-borderColor-light:var(--ds-palette-black-20)}:root{--ds-spacing-4xSmall:0.125rem;--ds-spacing-3xSmall:0.25rem;--ds-spacing-2xSmall:0.5rem;--ds-spacing-xSmall:0.75rem;--ds-spacing-small:1rem;--ds-spacing-medium:1.5rem;--ds-spacing-large:2rem;--ds-spacing-xLarge:2.5rem;--ds-spacing-2xLarge:3rem;--ds-spacing-3xLarge:3.5rem;--ds-spacing-4xLarge:4rem;--ds-spacing-5xLarge:4.5rem;--ds-spacing-layout-2xSmall:1rem;--ds-spacing-layout-xSmall:1.5rem;--ds-spacing-layout-small:2rem;--ds-spacing-layout-medium:3rem;--ds-spacing-layout-large:4rem;--ds-spacing-layout-xLarge:6rem;--ds-spacing-layout-2xLarge:8rem}html{font-size:100%}body{font-size:1rem}.ds-font--heading{font-family:var(--ds-fontFamily-heading)}.ds-font--body{font-family:var(--ds-fontFamily-body)}.ds-font--regular{font-weight:var(--ds-fontWeight-regular)}.ds-font--semibold{font-weight:var(--ds-fontWeight-semibold)}.ds-font--semibold-plus{font-weight:var(--ds-fontWeight-semiboldPlus)}.ds-font--bold{font-weight:var(--ds-fontWeight-bold)}.ds-tracking--xtight{letter-spacing:var(--ds-letterSpacing-xTight)}.ds-tracking--tight{letter-spacing:var(--ds-letterSpacing-tight)}.ds-tracking--normal{letter-spacing:var(--ds-letterSpacing-normal)}.ds-tracking--wide{letter-spacing:var(--ds-letterSpacing-wide)}.ds-tracking--xwide{letter-spacing:var(--ds-letterSpacing-xWide)}.ds-leading--small{line-height:var(--ds-lineHeight-small)}.ds-leading--medium{line-height:var(--ds-lineHeight-medium)}.ds-leading--large{line-height:var(--ds-lineHeight-large)}.ds-leading--xlarge{line-height:var(--ds-lineHeight-xLarge)}.ds-width--normal{font-stretch:var(--ds-fontWidth-normal)}.ds-width--condense{font-stretch:var(--ds-fontWidth-condense)}.ds-number--proportional{font-variant-numeric:var(--ds-number-style)}.ds-paragraph--16{margin-bottom:var(--ds-fontSize-16)}.ds-paragraph--20{margin-bottom:var(--ds-fontSize-20)}.ds-list--spacing{gap:4px}.ds-text-color--default{color:var(--ds-textColor-default)}.ds-text--2xl-regular{font-size:var(--ds-fontSize-22);font-weight:var(--ds-fontWeight-regular)}.ds-text--xl-regular{font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-regular)}.ds-text--lg-regular{font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-regular)}.ds-text--md-regular{font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-regular)}.ds-text--sm-regular{font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-regular)}.ds-text--xs-regular{font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-regular)}.ds-text--2xl-semibold{font-size:var(--ds-fontSize-22);font-weight:var(--ds-fontWeight-semibold)}.ds-text--xl-semibold{font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-semibold)}.ds-text--lg-semibold{font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-semibold)}.ds-text--md-semibold{font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-semibold)}.ds-text--sm-semibold{font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-semibold)}.ds-text--xs-semibold{font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-semibold)}.ds-text--2xl-bold{font-size:var(--ds-fontSize-22);font-weight:var(--ds-fontWeight-bold)}.ds-text--xl-bold{font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-bold)}.ds-text--lg-bold{font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-bold)}.ds-text--md-bold{font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-bold)}.ds-text--sm-bold{font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-bold)}.ds-text--xs-bold{font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-bold)}.ds-heading--2xLarge{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-40);font-weight:var(--ds-fontWeight-bold);letter-spacing:-1.2px;font-stretch:var(--ds-fontWidth-normal);line-height:48px;text-transform:uppercase}@media (min-width: 30rem){.ds-heading--2xLarge{font-size:var(--ds-fontSize-56);letter-spacing:var(--ds-letterSpacing-tight);line-height:64px;font-stretch:var(--ds-fontWidth-condense)}}.ds-heading--xLarge{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-32);font-weight:var(--ds-fontWeight-bold);letter-spacing:var(--ds-letterSpacing-tight);line-height:36px;font-stretch:var(--ds-fontWidth-normal)}@media (min-width: 30rem){.ds-heading--xLarge{font-size:var(--ds-fontSize-48);line-height:52px;font-stretch:var(--ds-fontWidth-condense)}}.ds-heading--large{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-24);font-weight:var(--ds-fontWeight-bold);letter-spacing:var(--ds-letterSpacing-normal);line-height:28px}@media (min-width: 30rem){.ds-heading--large{font-size:var(--ds-fontSize-32);font-weight:var(--ds-fontWeight-semiboldPlus);letter-spacing:var(--ds-letterSpacing-tight);line-height:36px}}.ds-heading--medium{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-semiboldPlus);letter-spacing:var(--ds-letterSpacing-normal);line-height:28px}@media (min-width: 30rem){.ds-heading--medium{font-size:var(--ds-fontSize-24);line-height:24px}}.ds-heading--small{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-semibold);letter-spacing:var(--ds-letterSpacing-normal);line-height:20px}@media (min-width: 30rem){.ds-heading--small{font-size:var(--ds-fontSize-20);line-height:24px}}.ds-heading--xSmall{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-bold);letter-spacing:var(--ds-letterSpacing-normal);line-height:18px;text-transform:uppercase}@media (min-width: 30rem){.ds-heading--xSmall{font-size:var(--ds-fontSize-18);line-height:20px}}.ds-bodyText--2xLarge{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--2xLarge{font-size:var(--ds-fontSize-22)}}.ds-bodyText--xLarge{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--xLarge{font-size:var(--ds-fontSize-20)}}.ds-bodyText--large{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--large{font-size:var(--ds-fontSize-18)}}.ds-bodyText--medium{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--medium{font-size:var(--ds-fontSize-16)}}.ds-bodyText--small{color:var(--ds-textColor-default);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--small{font-size:var(--ds-fontSize-14)}}:root{--ds-fontFamily-heading:"Open Sans", sans-serif;--ds-fontFamily-body:"Open Sans", sans-serif;--ds-fontSize-12:12px;--ds-fontSize-14:14px;--ds-fontSize-16:16px;--ds-fontSize-18:18px;--ds-fontSize-20:20px;--ds-fontSize-22:22px;--ds-fontSize-24:24px;--ds-fontSize-26:26px;--ds-fontSize-30:30px;--ds-fontSize-32:32px;--ds-fontSize-36:36px;--ds-fontSize-40:40px;--ds-fontSize-48:48px;--ds-fontSize-56:56px;--ds-fontSize-64:64px;--ds-fontWeight-regular:400;--ds-fontWeight-semibold:600;--ds-fontWeight-semiboldPlus:650;--ds-fontWeight-bold:700;--ds-letterSpacing-xTight:-2;--ds-letterSpacing-tight:-1.4;--ds-letterSpacing-normal:-0.4;--ds-letterSpacing-wide:0;--ds-letterSpacing-xWide:0.4;--ds-lineHeight-small:1;--ds-lineHeight-medium:1.2;--ds-lineHeight-large:1.5;--ds-lineHeight-xLarge:1.75;--ds-fontWidth-normal:100;--ds-fontWidth-condense:90;--ds-number-style:proportional-figures;}@supports (font-variation-settings: normal){:root{--ds-fontFamily-heading:"Open Sans Variable", sans-serif;--ds-fontFamily-body:"Open Sans Variable", sans-serif}}.button-group{display:flex;flex-wrap:wrap;gap:var(--ds-spacing-xSmall)}
1
+ html{box-sizing:border-box}html *,html *::before,html *::after{box-sizing:inherit}:root{--ds-borderWidth-none:0px;--ds-borderWidth-hairline:1px;--ds-borderWidth-thin:2px;--ds-borderWidth-thick:4px;--ds-borderWidth-xThick:8px;--ds-borderRadius-none:0px}:root{--ds-breakpoint-xSmall:20rem;--ds-breakpoint-small:30rem;--ds-breakpoint-medium:60rem;--ds-breakpoint-large:75rem;--ds-breakpoint-xLarge:90rem}:root{--ds-overlay-black-00:rgb(0 0 0 / 0%);--ds-overlay-black-05:rgb(0 0 0 / 5%);--ds-overlay-black-10:rgb(0 0 0 / 10%);--ds-overlay-black-15:rgb(0 0 0 / 15%);--ds-overlay-black-30:rgb(0 0 0 / 30%);--ds-overlay-black-40:rgb(0 0 0 / 40%);--ds-overlay-black-50:rgb(0 0 0 / 50%);--ds-overlay-black-70:rgb(0 0 0 / 70%);--ds-overlay-black-80:rgb(0 0 0 / 80%);--ds-overlay-white-00:rgb(255 255 255 / 0%);--ds-overlay-white-05:rgb(255 255 255 / 5%);--ds-overlay-white-10:rgb(255 255 255 / 10%);--ds-overlay-white-15:rgb(255 255 255 / 15%);--ds-overlay-white-30:rgb(255 255 255 / 30%);--ds-overlay-white-40:rgb(255 255 255 / 40%);--ds-overlay-white-50:rgb(255 255 255 / 50%);--ds-overlay-white-70:rgb(255 255 255 / 70%);--ds-overlay-white-80:rgb(255 255 255 / 80%);--ds-palette-black:#000;--ds-palette-white:#fff;--ds-palette-black-03:#f7f7f7;--ds-palette-black-05:#f2f2f2;--ds-palette-black-10:#e6e6e6;--ds-palette-black-20:#ccc;--ds-palette-black-30:#b3b3b3;--ds-palette-black-40:#999;--ds-palette-black-50:#808080;--ds-palette-black-60:#666;--ds-palette-black-70:#4d4d4d;--ds-palette-black-80:#333;--ds-palette-black-90:#1a1a1a;--ds-palette-black-95:#0c0c0c;--ds-palette-blue-05:#e5f8ff;--ds-palette-blue-10:#c2eeff;--ds-palette-blue-20:#8adeff;--ds-palette-blue-30:#5cd1ff;--ds-palette-blue-40:#1abeff;--ds-palette-blue-50:#009ad6;--ds-palette-blue-60:#0084b8;--ds-palette-blue-70:#005b80;--ds-palette-blue-80:#053c52;--ds-palette-blue-90:#032330;--ds-palette-green-05:#dffbe1;--ds-palette-green-10:#bef4c1;--ds-palette-green-20:#85e08a;--ds-palette-green-30:#66cc6b;--ds-palette-green-40:#43b149;--ds-palette-green-50:#279b2d;--ds-palette-green-60:#257e29;--ds-palette-green-70:#216325;--ds-palette-green-80:#183f19;--ds-palette-green-90:#0f2410;--ds-palette-mainBlue-05:#e5f5ff;--ds-palette-mainBlue-10:#cdebff;--ds-palette-mainBlue-20:#99d7ff;--ds-palette-mainBlue-30:#70c7ff;--ds-palette-mainBlue-40:#3db3ff;--ds-palette-mainBlue-50:#009bff;--ds-palette-mainBlue-60:#007fd1;--ds-palette-mainBlue-70:#005a94;--ds-palette-mainBlue-80:#003152;--ds-palette-mainBlue-90:#001929;--ds-palette-red-05:#ffeceb;--ds-palette-red-10:#ffd8d6;--ds-palette-red-20:#fdb7b4;--ds-palette-red-30:#f87c77;--ds-palette-red-40:#f0514c;--ds-palette-red-50:#d71f19;--ds-palette-red-60:#bd2828;--ds-palette-red-70:#8b2623;--ds-palette-red-80:#602220;--ds-palette-red-90:#321c1b;--ds-palette-yellow-05:#fff1db;--ds-palette-yellow-10:#ffe7c2;--ds-palette-yellow-20:#ffd799;--ds-palette-yellow-30:#fbc05f;--ds-palette-yellow-40:#eea22b;--ds-palette-yellow-50:#ce8103;--ds-palette-yellow-60:#b26d00;--ds-palette-yellow-70:#7a4b00;--ds-palette-yellow-80:#4e3104;--ds-palette-yellow-90:#282115}:root{--ds-spacing-4xSmall:0.125rem;--ds-spacing-3xSmall:0.25rem;--ds-spacing-2xSmall:0.5rem;--ds-spacing-xSmall:0.75rem;--ds-spacing-small:1rem;--ds-spacing-medium:1.5rem;--ds-spacing-large:2rem;--ds-spacing-xLarge:2.5rem;--ds-spacing-2xLarge:3rem;--ds-spacing-3xLarge:3.5rem;--ds-spacing-4xLarge:4rem;--ds-spacing-5xLarge:4.5rem;--ds-spacing-layout-2xSmall:1rem;--ds-spacing-layout-xSmall:1.5rem;--ds-spacing-layout-small:2rem;--ds-spacing-layout-medium:3rem;--ds-spacing-layout-large:4rem;--ds-spacing-layout-xLarge:6rem;--ds-spacing-layout-2xLarge:8rem}html{font-size:100%}body{font-size:1rem}.ds-font{}.ds-font--heading{font-family:var(--ds-fontFamily-heading)}.ds-font--body{font-family:var(--ds-fontFamily-body)}.ds-font--regular{font-weight:var(--ds-fontWeight-regular)}.ds-font--semibold{font-weight:var(--ds-fontWeight-semibold)}.ds-font--semibold-plus{font-weight:var(--ds-fontWeight-semiboldPlus)}.ds-font--bold{font-weight:var(--ds-fontWeight-bold)}.ds-tracking--xtight{letter-spacing:var(--ds-letterSpacing-xTight)}.ds-tracking--tight{letter-spacing:var(--ds-letterSpacing-tight)}.ds-tracking--normal{letter-spacing:var(--ds-letterSpacing-normal)}.ds-tracking--wide{letter-spacing:var(--ds-letterSpacing-wide)}.ds-tracking--xwide{letter-spacing:var(--ds-letterSpacing-xWide)}.ds-leading--small{line-height:var(--ds-lineHeight-small)}.ds-leading--medium{line-height:var(--ds-lineHeight-medium)}.ds-leading--large{line-height:var(--ds-lineHeight-large)}.ds-leading--xlarge{line-height:var(--ds-lineHeight-xLarge)}.ds-width--normal{font-stretch:var(--ds-fontWidth-normal)}.ds-width--condense{font-stretch:var(--ds-fontWidth-condense)}.ds-number--proportional{font-variant-numeric:var(--ds-number-style)}.ds-paragraph--16{margin-bottom:var(--ds-fontSize-16)}.ds-paragraph--20{margin-bottom:var(--ds-fontSize-20)}.ds-list--spacing{gap:4px}.ds-text-color--default{color:var(--ds-palette-black-95)}.ds-text{}.ds-text--2xl-regular{font-size:var(--ds-fontSize-22);font-weight:var(--ds-fontWeight-regular)}.ds-text--xl-regular{font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-regular)}.ds-text--lg-regular{font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-regular)}.ds-text--md-regular{font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-regular)}.ds-text--sm-regular{font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-regular)}.ds-text--xs-regular{font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-regular)}.ds-text--2xl-semibold{font-size:var(--ds-fontSize-22);font-weight:var(--ds-fontWeight-semibold)}.ds-text--xl-semibold{font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-semibold)}.ds-text--lg-semibold{font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-semibold)}.ds-text--md-semibold{font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-semibold)}.ds-text--sm-semibold{font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-semibold)}.ds-text--xs-semibold{font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-semibold)}.ds-text--2xl-bold{font-size:var(--ds-fontSize-22);font-weight:var(--ds-fontWeight-bold)}.ds-text--xl-bold{font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-bold)}.ds-text--lg-bold{font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-bold)}.ds-text--md-bold{font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-bold)}.ds-text--sm-bold{font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-bold)}.ds-text--xs-bold{font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-bold)}.ds-heading--2xLarge{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-40);font-weight:var(--ds-fontWeight-bold);letter-spacing:-1.2px;font-stretch:var(--ds-fontWidth-normal);line-height:48px;text-transform:uppercase}@media (min-width: 30rem){.ds-heading--2xLarge{font-size:var(--ds-fontSize-56);letter-spacing:var(--ds-letterSpacing-tight);line-height:64px;font-stretch:var(--ds-fontWidth-condense)}}.ds-heading--xLarge{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-32);font-weight:var(--ds-fontWeight-bold);letter-spacing:var(--ds-letterSpacing-tight);line-height:36px;font-stretch:var(--ds-fontWidth-normal)}@media (min-width: 30rem){.ds-heading--xLarge{font-size:var(--ds-fontSize-48);line-height:52px;font-stretch:var(--ds-fontWidth-condense)}}.ds-heading--large{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-24);font-weight:var(--ds-fontWeight-bold);letter-spacing:var(--ds-letterSpacing-normal);line-height:28px}@media (min-width: 30rem){.ds-heading--large{font-size:var(--ds-fontSize-32);font-weight:var(--ds-fontWeight-semiboldPlus);letter-spacing:var(--ds-letterSpacing-tight);line-height:36px}}.ds-heading--medium{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-semiboldPlus);letter-spacing:var(--ds-letterSpacing-normal);line-height:28px}@media (min-width: 30rem){.ds-heading--medium{font-size:var(--ds-fontSize-24);line-height:24px}}.ds-heading--small{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-semibold);letter-spacing:var(--ds-letterSpacing-normal);line-height:20px}@media (min-width: 30rem){.ds-heading--small{font-size:var(--ds-fontSize-20);line-height:24px}}.ds-heading--xSmall{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-heading);font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-bold);letter-spacing:var(--ds-letterSpacing-normal);line-height:18px;text-transform:uppercase}@media (min-width: 30rem){.ds-heading--xSmall{font-size:var(--ds-fontSize-18);line-height:20px}}.ds-bodyText--2xLarge{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-20);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--2xLarge{font-size:var(--ds-fontSize-22)}}.ds-bodyText--xLarge{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-18);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--xLarge{font-size:var(--ds-fontSize-20)}}.ds-bodyText--large{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-16);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--large{font-size:var(--ds-fontSize-18)}}.ds-bodyText--medium{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-14);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--medium{font-size:var(--ds-fontSize-16)}}.ds-bodyText--small{color:var(--ds-palette-black-95);font-family:var(--ds-fontFamily-body);font-size:var(--ds-fontSize-12);font-weight:var(--ds-fontWeight-regular);letter-spacing:var(--ds-letterSpacing-wide);line-height:var(--ds-lineHeight-large)}@media (min-width: 30rem){.ds-bodyText--small{font-size:var(--ds-fontSize-14)}}:root{--ds-fontFamily-heading:"Open Sans", sans-serif;--ds-fontFamily-body:"Open Sans", sans-serif;--ds-fontSize-12:12px;--ds-fontSize-14:14px;--ds-fontSize-16:16px;--ds-fontSize-18:18px;--ds-fontSize-20:20px;--ds-fontSize-22:22px;--ds-fontSize-24:24px;--ds-fontSize-26:26px;--ds-fontSize-30:30px;--ds-fontSize-32:32px;--ds-fontSize-36:36px;--ds-fontSize-40:40px;--ds-fontSize-48:48px;--ds-fontSize-56:56px;--ds-fontSize-64:64px;--ds-fontWeight-regular:400;--ds-fontWeight-semibold:600;--ds-fontWeight-semiboldPlus:650;--ds-fontWeight-bold:700;--ds-letterSpacing-xTight:-2;--ds-letterSpacing-tight:-1.4;--ds-letterSpacing-normal:-0.4;--ds-letterSpacing-wide:0;--ds-letterSpacing-xWide:0.4;--ds-lineHeight-small:1;--ds-lineHeight-medium:1.2;--ds-lineHeight-large:1.5;--ds-lineHeight-xLarge:1.75;--ds-fontWidth-normal:100;--ds-fontWidth-condense:90;--ds-number-style:proportional-figures;}@supports (font-variation-settings: normal){:root{--ds-fontFamily-heading:"Open Sans Variable", sans-serif;--ds-fontFamily-body:"Open Sans Variable", sans-serif}}