@fpkit/acss 0.5.13 → 0.6.1

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 (280) hide show
  1. package/libs/{chunk-PQ2K3BM6.cjs → chunk-2NRIP6RB.cjs} +3 -3
  2. package/libs/chunk-33PNJ4LO.cjs +15 -0
  3. package/libs/chunk-33PNJ4LO.cjs.map +1 -0
  4. package/libs/chunk-4BZKFPEC.cjs +17 -0
  5. package/libs/chunk-4BZKFPEC.cjs.map +1 -0
  6. package/libs/{chunk-772NRB75.js → chunk-5QD3DWFI.js} +2 -2
  7. package/libs/chunk-6SAHIYCZ.js +7 -0
  8. package/libs/chunk-6SAHIYCZ.js.map +1 -0
  9. package/libs/{chunk-3MKLDCKQ.cjs → chunk-6WTC4JXH.cjs} +3 -3
  10. package/libs/chunk-75QHTLFO.js +7 -0
  11. package/libs/chunk-75QHTLFO.js.map +1 -0
  12. package/libs/{chunk-ZANSFMTD.js → chunk-7XPFW7CB.js} +3 -3
  13. package/libs/chunk-BFK62VX5.js +5 -0
  14. package/libs/chunk-BFK62VX5.js.map +1 -0
  15. package/libs/{chunk-ROZI23GS.cjs → chunk-DKTHCQ5P.cjs} +4 -4
  16. package/libs/chunk-E2AJURUW.cjs +13 -0
  17. package/libs/chunk-E2AJURUW.cjs.map +1 -0
  18. package/libs/{chunk-L75OQKEI.cjs → chunk-ENTCUJ3A.cjs} +3 -3
  19. package/libs/chunk-ENTCUJ3A.cjs.map +1 -0
  20. package/libs/chunk-F5EYMVQM.js +10 -0
  21. package/libs/chunk-F5EYMVQM.js.map +1 -0
  22. package/libs/chunk-FVROL3V5.js +9 -0
  23. package/libs/chunk-FVROL3V5.js.map +1 -0
  24. package/libs/chunk-GT77BX4L.cjs +17 -0
  25. package/libs/chunk-GT77BX4L.cjs.map +1 -0
  26. package/libs/chunk-GUJSMQ3V.cjs +16 -0
  27. package/libs/chunk-GUJSMQ3V.cjs.map +1 -0
  28. package/libs/chunk-HHLNOC5T.js +7 -0
  29. package/libs/chunk-HHLNOC5T.js.map +1 -0
  30. package/libs/chunk-HRRHPLER.js +8 -0
  31. package/libs/chunk-HRRHPLER.js.map +1 -0
  32. package/libs/chunk-IEB64SWY.js +8 -0
  33. package/libs/chunk-IEB64SWY.js.map +1 -0
  34. package/libs/{chunk-NGTJDDFO.js → chunk-IQ76HGVP.js} +2 -2
  35. package/libs/chunk-IRLFZ3OL.js +9 -0
  36. package/libs/chunk-IRLFZ3OL.js.map +1 -0
  37. package/libs/{chunk-JJ43O4Y5.js → chunk-KK47SYZI.js} +2 -2
  38. package/libs/chunk-O3JIHC5M.cjs +15 -0
  39. package/libs/chunk-O3JIHC5M.cjs.map +1 -0
  40. package/libs/chunk-O5XAJ7BY.cjs +18 -0
  41. package/libs/chunk-O5XAJ7BY.cjs.map +1 -0
  42. package/libs/chunk-OVWLQYMK.js +10 -0
  43. package/libs/chunk-OVWLQYMK.js.map +1 -0
  44. package/libs/chunk-PNWIRCG3.cjs +7 -0
  45. package/libs/chunk-PNWIRCG3.cjs.map +1 -0
  46. package/libs/{chunk-D4YLRWAO.cjs → chunk-QVW6W76L.cjs} +6 -6
  47. package/libs/chunk-T4T6GWYQ.cjs +17 -0
  48. package/libs/chunk-T4T6GWYQ.cjs.map +1 -0
  49. package/libs/chunk-TON2YGMD.cjs +9 -0
  50. package/libs/chunk-TON2YGMD.cjs.map +1 -0
  51. package/libs/chunk-UEPAWMDF.js +8 -0
  52. package/libs/chunk-UEPAWMDF.js.map +1 -0
  53. package/libs/{chunk-LT5KZ2QW.cjs → chunk-US2I5GI7.cjs} +3 -3
  54. package/libs/{chunk-B7F5FS6D.cjs → chunk-W2UIN7EV.cjs} +3 -3
  55. package/libs/{chunk-P2DC76ZZ.cjs → chunk-W5TKWBFC.cjs} +3 -3
  56. package/libs/chunk-WXBFBWYF.cjs +16 -0
  57. package/libs/chunk-WXBFBWYF.cjs.map +1 -0
  58. package/libs/{chunk-VUH3FXGJ.js → chunk-X3JCTEPD.js} +5 -5
  59. package/libs/chunk-X5LGFCWG.js +9 -0
  60. package/libs/chunk-X5LGFCWG.js.map +1 -0
  61. package/libs/{chunk-5M57K4SW.js → chunk-Y2PFDELK.js} +2 -2
  62. package/libs/{chunk-ETFLFC2S.js → chunk-ZFJ4U45S.js} +2 -2
  63. package/libs/{component-props-a8a2f97e.d.ts → component-props-67d978a2.d.ts} +4 -4
  64. package/libs/components/alert/alert.css +1 -1
  65. package/libs/components/alert/alert.css.map +1 -1
  66. package/libs/components/alert/alert.min.css +2 -2
  67. package/libs/components/breadcrumbs/breadcrumb.cjs +6 -6
  68. package/libs/components/breadcrumbs/breadcrumb.d.cts +11 -11
  69. package/libs/components/breadcrumbs/breadcrumb.d.ts +11 -11
  70. package/libs/components/breadcrumbs/breadcrumb.js +3 -3
  71. package/libs/components/button.cjs +6 -4
  72. package/libs/components/button.d.cts +97 -4
  73. package/libs/components/button.d.ts +97 -4
  74. package/libs/components/button.js +4 -2
  75. package/libs/components/card.cjs +7 -7
  76. package/libs/components/card.d.cts +14 -14
  77. package/libs/components/card.d.ts +14 -14
  78. package/libs/components/card.js +2 -2
  79. package/libs/components/dialog/dialog.cjs +9 -7
  80. package/libs/components/dialog/dialog.d.cts +3 -3
  81. package/libs/components/dialog/dialog.d.ts +3 -3
  82. package/libs/components/dialog/dialog.js +7 -5
  83. package/libs/components/form/fields.cjs +4 -4
  84. package/libs/components/form/fields.d.cts +16 -7
  85. package/libs/components/form/fields.d.ts +16 -7
  86. package/libs/components/form/fields.js +2 -2
  87. package/libs/components/form/inputs.cjs +6 -4
  88. package/libs/components/form/inputs.d.cts +50 -2
  89. package/libs/components/form/inputs.d.ts +50 -2
  90. package/libs/components/form/inputs.js +4 -2
  91. package/libs/components/form/textarea.cjs +5 -4
  92. package/libs/components/form/textarea.d.cts +32 -23
  93. package/libs/components/form/textarea.d.ts +32 -23
  94. package/libs/components/form/textarea.js +3 -2
  95. package/libs/components/heading/heading.cjs +3 -3
  96. package/libs/components/heading/heading.d.cts +2 -2
  97. package/libs/components/heading/heading.d.ts +2 -2
  98. package/libs/components/heading/heading.js +2 -2
  99. package/libs/components/icons/icon.cjs +4 -4
  100. package/libs/components/icons/icon.d.cts +38 -38
  101. package/libs/components/icons/icon.d.ts +38 -38
  102. package/libs/components/icons/icon.js +2 -2
  103. package/libs/components/link/link.cjs +4 -4
  104. package/libs/components/link/link.css +1 -1
  105. package/libs/components/link/link.css.map +1 -1
  106. package/libs/components/link/link.d.cts +3 -19
  107. package/libs/components/link/link.d.ts +3 -19
  108. package/libs/components/link/link.js +2 -2
  109. package/libs/components/link/link.min.css +2 -2
  110. package/libs/components/list/list.cjs +5 -5
  111. package/libs/components/list/list.css +1 -0
  112. package/libs/components/list/list.css.map +1 -0
  113. package/libs/components/list/list.d.cts +120 -33
  114. package/libs/components/list/list.d.ts +120 -33
  115. package/libs/components/list/list.js +2 -2
  116. package/libs/components/list/list.min.css +3 -0
  117. package/libs/components/modal.cjs +6 -4
  118. package/libs/components/modal.d.cts +8 -8
  119. package/libs/components/modal.d.ts +8 -8
  120. package/libs/components/modal.js +5 -3
  121. package/libs/components/nav/nav.cjs +7 -7
  122. package/libs/components/nav/nav.css +1 -1
  123. package/libs/components/nav/nav.css.map +1 -1
  124. package/libs/components/nav/nav.d.cts +550 -34
  125. package/libs/components/nav/nav.d.ts +550 -34
  126. package/libs/components/nav/nav.js +3 -3
  127. package/libs/components/nav/nav.min.css +2 -2
  128. package/libs/components/popover/popover.d.cts +5 -5
  129. package/libs/components/popover/popover.d.ts +5 -5
  130. package/libs/components/tables/table.cjs +5 -5
  131. package/libs/components/tables/table.d.cts +8 -8
  132. package/libs/components/tables/table.d.ts +8 -8
  133. package/libs/components/tables/table.js +2 -2
  134. package/libs/components/tag/tag.css +1 -1
  135. package/libs/components/tag/tag.css.map +1 -1
  136. package/libs/components/tag/tag.min.css +2 -2
  137. package/libs/components/text/text.cjs +5 -5
  138. package/libs/components/text/text.d.cts +5 -5
  139. package/libs/components/text/text.d.ts +5 -5
  140. package/libs/components/text/text.js +2 -2
  141. package/libs/form.types-d25ebfac.d.ts +233 -0
  142. package/libs/{heading-3648c538.d.ts → heading-7446cb46.d.ts} +8 -8
  143. package/libs/hooks.cjs +9 -4
  144. package/libs/hooks.d.cts +137 -3
  145. package/libs/hooks.d.ts +137 -3
  146. package/libs/hooks.js +4 -3
  147. package/libs/icons.cjs +3 -3
  148. package/libs/icons.d.cts +2 -2
  149. package/libs/icons.d.ts +2 -2
  150. package/libs/icons.js +2 -2
  151. package/libs/index.cjs +53 -51
  152. package/libs/index.cjs.map +1 -1
  153. package/libs/index.css +1 -1
  154. package/libs/index.css.map +1 -1
  155. package/libs/index.d.cts +338 -49
  156. package/libs/index.d.ts +338 -49
  157. package/libs/index.js +24 -22
  158. package/libs/index.js.map +1 -1
  159. package/libs/link-5192f411.d.ts +323 -0
  160. package/libs/list.types-d26de310.d.ts +245 -0
  161. package/libs/{ui-645f95b5.d.ts → ui-d01b50d4.d.ts} +16 -12
  162. package/package.json +4 -6
  163. package/src/components/alert/alert.scss +1 -4
  164. package/src/components/breadcrumbs/breadcrumb.tsx +4 -1
  165. package/src/components/buttons/README.mdx +102 -1
  166. package/src/components/buttons/button.stories.tsx +106 -0
  167. package/src/components/buttons/button.tsx +82 -52
  168. package/src/components/dialog/dialog-a11y-review.md +653 -0
  169. package/src/components/form/README.mdx +725 -43
  170. package/src/components/form/WCAG-REVIEW.md +654 -0
  171. package/src/components/form/fields.tsx +10 -1
  172. package/src/components/form/form.stories.tsx +604 -23
  173. package/src/components/form/form.tsx +204 -63
  174. package/src/components/form/form.types.ts +378 -0
  175. package/src/components/form/input.stories.tsx +71 -3
  176. package/src/components/form/inputs.tsx +159 -67
  177. package/src/components/form/select.tsx +122 -66
  178. package/src/components/form/textarea.tsx +120 -73
  179. package/src/components/fp.tsx +86 -11
  180. package/src/components/link/README.mdx +923 -0
  181. package/src/components/link/link.scss +79 -26
  182. package/src/components/link/link.stories.tsx +383 -30
  183. package/src/components/link/link.test.tsx +677 -0
  184. package/src/components/link/link.tsx +163 -57
  185. package/src/components/link/link.types.ts +261 -0
  186. package/src/components/list/README.mdx +764 -0
  187. package/src/components/list/list.scss +285 -0
  188. package/src/components/list/list.stories.tsx +514 -27
  189. package/src/components/list/list.test.tsx +554 -0
  190. package/src/components/list/list.tsx +153 -51
  191. package/src/components/list/list.types.ts +255 -0
  192. package/src/components/nav/ACCESSIBILITY.md +649 -0
  193. package/src/components/nav/README.mdx +782 -0
  194. package/src/components/nav/nav.scss +37 -4
  195. package/src/components/nav/nav.stories.tsx +44 -6
  196. package/src/components/nav/nav.tsx +302 -51
  197. package/src/components/nav/nav.types.ts +308 -0
  198. package/src/components/tag/README.mdx +426 -0
  199. package/src/components/tag/tag.scss +101 -27
  200. package/src/components/tag/tag.stories.tsx +384 -10
  201. package/src/components/tag/tag.test.tsx +210 -0
  202. package/src/components/tag/tag.tsx +106 -9
  203. package/src/components/tag/tag.types.ts +107 -0
  204. package/src/components/ui.tsx +8 -3
  205. package/src/hooks/use-disabled-state.test.tsx +536 -0
  206. package/src/hooks/use-disabled-state.ts +246 -0
  207. package/src/hooks/useDisabledState.md +393 -0
  208. package/src/hooks.ts +6 -0
  209. package/src/index.scss +2 -0
  210. package/src/index.ts +2 -1
  211. package/src/sass/_globals.scss +2 -7
  212. package/src/styles/alert/alert.css +1 -3
  213. package/src/styles/alert/alert.css.map +1 -1
  214. package/src/styles/index.css +461 -81
  215. package/src/styles/index.css.map +1 -1
  216. package/src/styles/link/link.css +45 -28
  217. package/src/styles/link/link.css.map +1 -1
  218. package/src/styles/list/list.css +214 -0
  219. package/src/styles/list/list.css.map +1 -0
  220. package/src/styles/nav/nav.css +32 -6
  221. package/src/styles/nav/nav.css.map +1 -1
  222. package/src/styles/tag/tag.css +113 -35
  223. package/src/styles/tag/tag.css.map +1 -1
  224. package/src/styles/utilities/_disabled.scss +58 -0
  225. package/src/types/shared.ts +43 -6
  226. package/src/utils/accessibility.ts +109 -0
  227. package/libs/chunk-2LTJ7HHX.cjs +0 -18
  228. package/libs/chunk-2LTJ7HHX.cjs.map +0 -1
  229. package/libs/chunk-2Y7W75TT.js +0 -9
  230. package/libs/chunk-2Y7W75TT.js.map +0 -1
  231. package/libs/chunk-5S4ORA4C.cjs +0 -15
  232. package/libs/chunk-5S4ORA4C.cjs.map +0 -1
  233. package/libs/chunk-AHDJGCG5.cjs +0 -15
  234. package/libs/chunk-AHDJGCG5.cjs.map +0 -1
  235. package/libs/chunk-BHRQBJRY.js +0 -8
  236. package/libs/chunk-BHRQBJRY.js.map +0 -1
  237. package/libs/chunk-GZ4QFPRY.js +0 -9
  238. package/libs/chunk-GZ4QFPRY.js.map +0 -1
  239. package/libs/chunk-IYUN2EW3.cjs +0 -15
  240. package/libs/chunk-IYUN2EW3.cjs.map +0 -1
  241. package/libs/chunk-J32EZPYD.cjs +0 -15
  242. package/libs/chunk-J32EZPYD.cjs.map +0 -1
  243. package/libs/chunk-KUKIVRC2.js +0 -7
  244. package/libs/chunk-KUKIVRC2.js.map +0 -1
  245. package/libs/chunk-L75OQKEI.cjs.map +0 -1
  246. package/libs/chunk-M5RRNTVX.cjs +0 -15
  247. package/libs/chunk-M5RRNTVX.cjs.map +0 -1
  248. package/libs/chunk-OK5QEIMD.cjs +0 -17
  249. package/libs/chunk-OK5QEIMD.cjs.map +0 -1
  250. package/libs/chunk-P7TTEYCD.js +0 -7
  251. package/libs/chunk-P7TTEYCD.js.map +0 -1
  252. package/libs/chunk-QLZWHAMK.js +0 -8
  253. package/libs/chunk-QLZWHAMK.js.map +0 -1
  254. package/libs/chunk-RIVUMPOG.js +0 -8
  255. package/libs/chunk-RIVUMPOG.js.map +0 -1
  256. package/libs/chunk-S7BABR7Z.cjs +0 -13
  257. package/libs/chunk-S7BABR7Z.cjs.map +0 -1
  258. package/libs/chunk-SMYRLO3E.js +0 -8
  259. package/libs/chunk-SMYRLO3E.js.map +0 -1
  260. package/libs/chunk-TYRCEX2L.js +0 -8
  261. package/libs/chunk-TYRCEX2L.js.map +0 -1
  262. package/libs/chunk-XBA562WW.js +0 -8
  263. package/libs/chunk-XBA562WW.js.map +0 -1
  264. package/libs/chunk-XTQKWY7W.cjs +0 -32
  265. package/libs/chunk-XTQKWY7W.cjs.map +0 -1
  266. package/libs/inputs-f3a216db.d.ts +0 -45
  267. /package/libs/{chunk-PQ2K3BM6.cjs.map → chunk-2NRIP6RB.cjs.map} +0 -0
  268. /package/libs/{chunk-772NRB75.js.map → chunk-5QD3DWFI.js.map} +0 -0
  269. /package/libs/{chunk-3MKLDCKQ.cjs.map → chunk-6WTC4JXH.cjs.map} +0 -0
  270. /package/libs/{chunk-ZANSFMTD.js.map → chunk-7XPFW7CB.js.map} +0 -0
  271. /package/libs/{chunk-ROZI23GS.cjs.map → chunk-DKTHCQ5P.cjs.map} +0 -0
  272. /package/libs/{chunk-NGTJDDFO.js.map → chunk-IQ76HGVP.js.map} +0 -0
  273. /package/libs/{chunk-JJ43O4Y5.js.map → chunk-KK47SYZI.js.map} +0 -0
  274. /package/libs/{chunk-D4YLRWAO.cjs.map → chunk-QVW6W76L.cjs.map} +0 -0
  275. /package/libs/{chunk-LT5KZ2QW.cjs.map → chunk-US2I5GI7.cjs.map} +0 -0
  276. /package/libs/{chunk-B7F5FS6D.cjs.map → chunk-W2UIN7EV.cjs.map} +0 -0
  277. /package/libs/{chunk-P2DC76ZZ.cjs.map → chunk-W5TKWBFC.cjs.map} +0 -0
  278. /package/libs/{chunk-VUH3FXGJ.js.map → chunk-X3JCTEPD.js.map} +0 -0
  279. /package/libs/{chunk-5M57K4SW.js.map → chunk-Y2PFDELK.js.map} +0 -0
  280. /package/libs/{chunk-ETFLFC2S.js.map → chunk-ZFJ4U45S.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/images/img.tsx","../src/components/text-to-speech/TextToSpeech.tsx","../src/components/text-to-speech/useTextToSpeech.tsx","../src/components/text-to-speech/views/TextToSpeechControls.tsx","../src/components/layout/landmarks.tsx","../src/components/badge/badge.tsx","../src/components/tag/tag.tsx","../src/components/details/details.tsx"],"names":["React","useMemo","Img","src","alt","width","height","styles","loading","placeholder","fetchpriority","decoding","srcSet","sizes","onError","onLoad","props","defaultPlaceholder","w","h","svg","fallbackPlaceholder","ui_default","e","useState","useEffect","useTextToSpeech","initialVoice","availableVoices","setAvailableVoices","currentVoice","setCurrentVoice","isSpeaking","setIsSpeaking","isPaused","setIsPaused","utterance","setUtterance","updateVoices","voices","googleVoice","voice","englishVoice","text","options","onEnd","TTSButtonComponent","children","onClick","TTSButton","TextToSpeechControls","label","onSpeak","onPause","onResume","onCancel","icon_default","TextToSpeechControls_default","TextToSpeech","initialText","showTextInput","pitch","rate","language","speak","pause","resume","cancel","getAvailableLanguages","setText","handleSpeak","handleEnd","handleChange","textarea_default","Landmarks","Header","id","headerBackground","classes","Main","Footer","Aside","Section","Article","Badge","variant","Tag","elm","role","useCallback","Details","summary","icon","ariaLabel","name","open","onPointerDown","onToggle","ref","handlePointerDown","handleToggle"],"mappings":"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","sourcesContent":["import UI from \"../ui\";\nimport React, { useMemo } from \"react\";\nimport type { ImgProps } from \"./img.types\";\n\n/**\n * Img - A semantic image component with accessibility and performance best practices.\n *\n * This component wraps the native `<img>` element with enhanced features:\n * - **Responsive images** via optional srcset/sizes\n * - **Lazy loading** by default for performance\n * - **Error handling** with configurable fallback placeholders\n * - **Type safety** with full TypeScript support\n *\n * ## Accessibility Patterns (WCAG 2.1 AA)\n *\n * ### Decorative Images\n * Images that are purely visual decoration should use an empty alt attribute.\n * These images are typically borders, patterns, or visual separators.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Decorative border image\n * <Img src=\"/decorative-border.png\" alt=\"\" />\n *\n * // ✅ GOOD: Background pattern\n * <Img src=\"/pattern.svg\" alt=\"\" loading=\"eager\" />\n * ```\n *\n * ### Semantic Images\n * Images that convey information must have descriptive alt text that explains\n * the content and purpose of the image.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Informative image with descriptive alt\n * <Img\n * src=\"/sales-chart.png\"\n * alt=\"Sales chart showing 30% revenue growth in Q4 2024\"\n * />\n *\n * // ✅ GOOD: Product photo with context\n * <Img\n * src=\"/laptop.jpg\"\n * alt=\"Silver MacBook Pro 14-inch on wooden desk\"\n * />\n * ```\n *\n * ## Performance Optimization\n *\n * ### Lazy Loading\n * By default, images use lazy loading to improve page load performance.\n * Only use `loading=\"eager\"` for above-the-fold images.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Lazy load below-the-fold image\n * <Img src=\"/photo.jpg\" alt=\"Photo\" />\n *\n * // ✅ GOOD: Eager load hero image\n * <Img\n * src=\"/hero.jpg\"\n * alt=\"Hero banner\"\n * loading=\"eager\"\n * fetchpriority=\"high\"\n * />\n * ```\n *\n * ### Responsive Images\n * Use srcset and sizes for responsive images to serve appropriate image sizes\n * based on viewport width, improving performance and bandwidth usage.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Responsive image with multiple sizes\n * <Img\n * src=\"/photo.jpg\"\n * srcSet=\"/photo-320w.jpg 320w, /photo-640w.jpg 640w, /photo-1024w.jpg 1024w\"\n * sizes=\"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 800px\"\n * alt=\"Responsive image adapts to viewport\"\n * />\n * ```\n *\n * ## Error Handling\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Custom placeholder on error\n * <Img\n * src=\"/photo.jpg\"\n * placeholder=\"/fallback.png\"\n * alt=\"User profile photo\"\n * />\n *\n * // ✅ GOOD: Custom error handler\n * <Img\n * src=\"/photo.jpg\"\n * onError={(e) => {\n * console.error('Image failed to load')\n * logToAnalytics('image_error', { src: e.currentTarget.src })\n * }}\n * alt=\"Photo\"\n * />\n * ```\n *\n * @param {ImgProps} props - Component props extending native img attributes\n * @returns {React.ReactElement} Image element with enhanced functionality\n *\n * @see {@link ImgProps} for complete prop documentation\n * @see https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html\n */\nexport const Img = ({\n src = \"//\",\n alt,\n width = 480,\n height,\n styles,\n loading = \"lazy\",\n placeholder,\n fetchpriority = \"low\",\n decoding = \"auto\",\n srcSet,\n sizes,\n onError,\n onLoad,\n ...props\n}: ImgProps) => {\n /**\n * Generates a performant, responsive SVG gradient placeholder.\n * Uses data URI to avoid network requests and memoizes based on dimensions.\n * The SVG uses viewBox for perfect scaling at any size.\n *\n * Features:\n * - Zero network requests (works offline)\n * - ~900 bytes vs. 5-10KB external image\n * - Responsive with viewBox\n * - Attractive gradient (indigo → purple → pink)\n * - Dimension text for debugging\n */\n const defaultPlaceholder = useMemo(() => {\n const w = typeof width === \"number\" ? width : 480;\n const h = typeof height === \"number\" ? height : Math.round(w * 0.75);\n\n // Responsive SVG with attractive gradient and dimension text\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${w} ${h}\">\n <defs>\n <linearGradient id=\"grad-${w}-${h}\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" style=\"stop-color:#6366f1;stop-opacity:1\" />\n <stop offset=\"50%\" style=\"stop-color:#8b5cf6;stop-opacity:1\" />\n <stop offset=\"100%\" style=\"stop-color:#ec4899;stop-opacity:1\" />\n </linearGradient>\n </defs>\n <rect width=\"${w}\" height=\"${h}\" fill=\"url(#grad-${w}-${h})\"/>\n <circle cx=\"${w * 0.15}\" cy=\"${h * 0.2}\" r=\"${Math.min(w, h) * 0.08}\" fill=\"rgba(255,255,255,0.2)\"/>\n <path d=\"M0,${h * 0.75} Q${w * 0.25},${h * 0.65} ${w * 0.5},${h * 0.75} T${w},${h * 0.75} L${w},${h} L0,${h} Z\" fill=\"rgba(0,0,0,0.15)\"/>\n <text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"system-ui,-apple-system,sans-serif\" font-size=\"${Math.max(16, Math.min(w, h) * 0.05)}\" font-weight=\"500\" fill=\"rgba(255,255,255,0.9)\">${w}×${h}</text>\n </svg>`;\n\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n }, [width, height]);\n\n const fallbackPlaceholder = placeholder ?? defaultPlaceholder;\n\n /**\n * Handles image load errors.\n * Calls custom error handler if provided, then applies fallback placeholder.\n * The custom handler can prevent the default fallback by calling e.preventDefault().\n */\n const handleImgError = (\n e: React.SyntheticEvent<HTMLImageElement, Event>\n ): void => {\n // Call custom error handler first (for logging, analytics, etc.)\n if (onError) {\n onError(e);\n }\n\n // Apply fallback unless preventDefault() was called\n if (!e.defaultPrevented) {\n // Avoid infinite error loop by checking if already showing placeholder\n if (e.currentTarget.src !== fallbackPlaceholder) {\n e.currentTarget.src = fallbackPlaceholder;\n }\n }\n };\n\n /**\n * Handles successful image load.\n * Calls custom load handler if provided.\n */\n const handleImgLoad = (\n e: React.SyntheticEvent<HTMLImageElement, Event>\n ): void => {\n onLoad?.(e);\n };\n\n return (\n <UI\n as=\"img\"\n src={src}\n alt={alt}\n width={width}\n height={height || \"auto\"}\n loading={loading}\n style={styles}\n srcSet={srcSet}\n sizes={sizes}\n onError={handleImgError}\n onLoad={handleImgLoad}\n decoding={decoding}\n {...props}\n {...(fetchpriority && { fetchpriority })}\n />\n );\n};\n\nexport default Img;\nImg.displayName = \"Img\";\n","import React, { useState, ChangeEvent, useEffect } from 'react'\nimport { useTextToSpeech } from './useTextToSpeech'\nimport Textarea from '#components/form/textarea.jsx'\nimport TextToSpeechControls from './views/TextToSpeechControls'\n\n/**\n * Props for the TextToSpeechComponent.\n * @interface TextToSpeechComponentProps\n */\ninterface TextToSpeechComponentProps {\n /** Initial text to be spoken. Defaults to an empty string. */\n initialText?: string\n /** Whether to show the text input field. Defaults to true. */\n showTextInput?: boolean\n /** The voice to be used for speech synthesis. */\n voice?: SpeechSynthesisVoice | undefined\n /** The pitch of the voice. Defaults to 1. */\n pitch?: number\n /** The rate of speech. Defaults to 1. */\n rate?: number\n /** The language to be used for speech synthesis. */\n language?: string\n /** Player label */\n label?: string | React.ReactNode\n /** Callback function to be called when speech ends. */\n onEnd?: () => void\n}\n\n/**\n * A component that converts text to speech using the Web Speech API.\n * @param {TextToSpeechComponentProps} props - The props for the component.\n * @returns {JSX.Element} The rendered TextToSpeechComponent.\n */\nexport const TextToSpeech: React.FC<TextToSpeechComponentProps> = ({\n initialText = '',\n showTextInput = false,\n voice,\n pitch = 1,\n rate = 1,\n language,\n label,\n onEnd,\n}) => {\n const {\n speak,\n pause,\n resume,\n cancel,\n isSpeaking,\n isPaused,\n getAvailableLanguages,\n availableVoices,\n } = useTextToSpeech()\n const [text, setText] = useState<string>(initialText)\n console.log(getAvailableLanguages())\n\n useEffect(() => {\n setText(initialText)\n }, [initialText])\n\n const handleSpeak = (): void => {\n if (text.trim() !== '') {\n speak(text, { voice, pitch, rate }, handleEnd)\n }\n }\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>): void => {\n setText(e.target.value)\n }\n\n const handleEnd = (): void => {\n if (onEnd) {\n onEnd()\n }\n }\n\n return (\n <>\n {showTextInput && <Textarea value={text} onChange={handleChange} />}\n <TextToSpeechControls\n label={label}\n isSpeaking={isSpeaking}\n isPaused={isPaused}\n onSpeak={handleSpeak}\n onPause={pause}\n onResume={resume}\n onCancel={cancel}\n />\n </>\n )\n}\n\nexport default TextToSpeech\nTextToSpeech.displayName = 'TextToSpeechComponent'\n","import { useState, useEffect } from 'react'\n\n/**\n * Options for configuring speech synthesis.\n * @interface SpeechOptions\n */\ninterface SpeechOptions {\n /** The language for speech synthesis (e.g., 'en-US') */\n lang?: string\n\n /** The pitch of the voice (0 to 2) */\n pitch?: number\n /** The speed of the voice (0.1 to 10) */\n rate?: number\n\n /** The voice to use for speech synthesis */\n voice?: SpeechSynthesisVoice\n}\n/**\n * Custom hook to handle text-to-speech functionality.\n *\n * @param {SpeechSynthesisVoice} [initialVoice] - The initial voice to use for speech synthesis.\n * @returns {Object} An object containing methods to control speech synthesis and state variables.\n */\nexport const useTextToSpeech = (initialVoice?: SpeechSynthesisVoice) => {\n const [availableVoices, setAvailableVoices] = useState<\n SpeechSynthesisVoice[]\n >([])\n const [currentVoice, setCurrentVoice] = useState<\n SpeechSynthesisVoice | undefined\n >(initialVoice)\n\n const [isSpeaking, setIsSpeaking] = useState<boolean>(false)\n const [isPaused, setIsPaused] = useState<boolean>(false)\n const [utterance, setUtterance] = useState<SpeechSynthesisUtterance | null>(\n null,\n )\n\n useEffect(() => {\n const updateVoices = () => {\n const voices = window.speechSynthesis.getVoices()\n setAvailableVoices(voices)\n\n // Set default voice to Google US English if available\n const googleVoice = voices.find(\n (voice) => voice.name === 'Google US English',\n )\n if (googleVoice) {\n setCurrentVoice(googleVoice)\n } else {\n // Fallback to the first English voice if Google voice is not available\n const englishVoice = voices.find((voice) =>\n voice.lang.startsWith('en-'),\n )\n if (englishVoice) {\n setCurrentVoice(englishVoice)\n }\n }\n }\n\n updateVoices()\n window.speechSynthesis.onvoiceschanged = updateVoices\n\n return () => {\n window.speechSynthesis.onvoiceschanged = null\n }\n }, [])\n\n /**\n * Gets the list of available languages for speech synthesis.\n * @returns {string[]} An array of available language codes.\n */\n const getAvailableLanguages = () => {\n return [...new Set(availableVoices.map((voice) => voice.lang))]\n }\n\n /**\n * Initiates speech synthesis for the given text.\n *\n * @param {string} text - The text to be spoken.\n * @param {SpeechOptions} [options={}] - Options for speech synthesis.\n * @param {Function} [onEnd] - Callback function to be called when speech ends.\n */\n const speak = (\n text: string,\n options: SpeechOptions = {},\n onEnd?: () => void,\n ) => {\n const utterance = new SpeechSynthesisUtterance(text)\n\n utterance.lang = options.lang ?? 'en-US'\n utterance.pitch = options.pitch ?? 1\n utterance.rate = options.rate ?? 1\n utterance.voice = currentVoice ?? options.voice ?? null\n\n utterance.onend = () => {\n setIsSpeaking(false)\n setIsPaused(false)\n if (onEnd) {\n onEnd()\n }\n }\n\n if ('speechSynthesis' in window) {\n window.speechSynthesis.speak(utterance)\n setUtterance(utterance)\n setIsSpeaking(true)\n setIsPaused(false)\n } else {\n console.error('Speech synthesis not supported')\n // Handle the error appropriately\n }\n }\n\n /**\n * Changes the current voice used for speech synthesis.\n * @param {SpeechSynthesisVoice} voice - The new voice to use.\n */\n const changeVoice = (voice: SpeechSynthesisVoice) => {\n setCurrentVoice(voice)\n }\n\n /**\n * Pauses the ongoing speech synthesis.\n */\n const pause = () => {\n if (isSpeaking && !isPaused) {\n window.speechSynthesis.pause()\n setIsPaused(true)\n }\n }\n\n /**\n * Resumes the paused speech synthesis.\n */\n const resume = () => {\n if (isSpeaking && isPaused) {\n window.speechSynthesis.resume()\n setIsPaused(false)\n }\n }\n\n /**\n * Cancels the ongoing speech synthesis.\n */\n const cancel = () => {\n if (isSpeaking) {\n window.speechSynthesis.cancel()\n setIsSpeaking(false)\n setIsPaused(false)\n }\n }\n\n return {\n /** Initiates speech synthesis for the given text */\n speak,\n /** Pauses the ongoing speech synthesis */\n pause,\n /** Resumes the paused speech synthesis */\n resume,\n /** Cancels the ongoing speech synthesis */\n cancel,\n /** Indicates whether speech synthesis is currently active */\n isSpeaking,\n /** Indicates whether speech synthesis is currently paused */\n isPaused,\n /** Array of available voices for speech synthesis */\n availableVoices,\n /** Changes the current voice used for speech synthesis */\n changeVoice,\n /** The currently selected voice for speech synthesis */\n currentVoice,\n /** Gets the list of available languages for speech synthesis */\n getAvailableLanguages,\n }\n}\n","import React from 'react'\nimport Icon from '#components/icons/icon'\nimport UI from '#components/ui'\nimport { FC } from 'react'\n\n/**\n * Props for the TextToSpeechControls component.\n * @interface TextToSpeechControlsProps\n */\ninterface TextToSpeechControlsProps {\n /** Optional label for the controls */\n label?: string | React.ReactNode\n /** Indicates if the text-to-speech is currently speaking */\n isSpeaking: boolean\n /** Indicates if the text-to-speech is paused */\n isPaused: boolean\n /** Function to start speaking */\n onSpeak: () => void\n /** Function to pause speaking */\n onPause: () => void\n /** Function to resume speaking */\n onResume: () => void\n /** Function to cancel speaking */\n onCancel: () => void\n}\n\n/**\n * TTSButtonComponent props\n * @interface TTSButtonComponentProps\n */\ninterface TTSButtonComponentProps {\n /** The content of the button */\n children: React.ReactNode\n /** Function to call when the button is clicked */\n onClick: () => void\n}\n\n/**\n * TTSButtonComponent is a reusable button component for text-to-speech controls.\n * @param {TTSButtonComponentProps} props - The component props\n * @returns {React.ReactElement} The rendered button\n */\nexport const TTSButtonComponent: React.FC<TTSButtonComponentProps> = ({\n children,\n onClick,\n}) => {\n return (\n <UI\n as=\"button\"\n type=\"button\"\n className=\"tts-border\"\n data-btn=\"sm text pill\"\n onClick={onClick}\n >\n {children}\n </UI>\n )\n}\n\nexport const TTSButton = React.memo(TTSButtonComponent)\n\n/**\n * TextToSpeechControlsComponent interface extends FC<TextToSpeechControlsProps>\n * and includes a TTSButton property.\n * @interface TextToSpeechControlsComponent\n * @extends {FC<TextToSpeechControlsProps>}\n */\ninterface TextToSpeechControlsComponent extends FC<TextToSpeechControlsProps> {\n /** The TTSButton component used within TextToSpeechControls */\n TTSButton: typeof TTSButton\n}\n\n/**\n * TextToSpeechControls component provides a user interface for controlling text-to-speech functionality.\n * @param {TextToSpeechControlsProps} props - The component props\n * @returns {React.ReactElement} The rendered TextToSpeechControls component\n */\nconst TextToSpeechControls: TextToSpeechControlsComponent = ({\n label,\n isSpeaking,\n isPaused,\n onSpeak,\n onPause,\n onResume,\n onCancel,\n}) => {\n const iconSize = 16\n\n return (\n <UI as=\"div\" data-tts>\n {label && <p>{label}</p>}\n {!isSpeaking && (\n <TTSButton aria-label=\"Speak\" onClick={onSpeak}>\n <Icon.PlaySolid size={iconSize} />\n </TTSButton>\n )}\n {isSpeaking && !isPaused && (\n <TTSButton aria-label=\"Pause\" onClick={onPause}>\n <Icon.PauseSolid size={iconSize} />\n </TTSButton>\n )}\n {isPaused && (\n <TTSButton aria-label=\"Resume\" onClick={onResume}>\n <Icon.ResumeSolid size={iconSize} />\n </TTSButton>\n )}\n <TTSButton aria-label=\"Stop\" onClick={onCancel}>\n <Icon.StopSolid size={iconSize} />\n </TTSButton>\n </UI>\n )\n}\n\nTextToSpeechControls.displayName = 'TextToSpeechControls'\nTextToSpeechControls.TTSButton = TTSButton\n\nexport default TextToSpeechControls\n","import UI from '../ui'\nimport React, { ReactNode } from 'react'\n\ntype ComponentProps = React.ComponentProps<typeof UI>\n\n/**\n * Renders children elements without any wrapping component.\n * Can be used as a placeholder when no semantic landmark is needed.\n */\nexport const Landmarks = (children?: React.FC) => <>{children}</>\n\ntype HeaderProps = {\n headerBackground?: ReactNode\n} & ComponentProps\n/**\n * Header component.\n *\n * Renders a header landmark with a section child.\n *\n * @param children - The content to render inside the header.\n * @param styles - Optional styles object.\n * @param props - Other props.\n */\nexport const Header = ({\n id,\n children,\n headerBackground,\n styles,\n classes,\n ...props\n}: HeaderProps) => {\n return (\n <UI as=\"header\" id={id} styles={styles} className={classes} {...props}>\n {headerBackground}\n <UI as=\"section\">{children}</UI>\n </UI>\n )\n}\n\n/**\n * Main component.\n *\n * Renders a main landmark.\n *\n * @param children - The content to render inside the main element.\n * @param styles - Optional styles object.\n * @param props - Other props.\n */\nexport const Main = ({\n id,\n children,\n styles,\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"main\" id={id} styles={styles} {...props} className={classes}>\n {children}\n </UI>\n )\n}\n\n/**\n * Footer component that renders a footer element with a section element inside.\n * @param {ReactNode} children - Child elements to render inside the section element.\n * @param styles - CSS styles to apply to the footer element.\n * @param props - Additional props to pass to the footer element.\n * @returns A React component that renders a footer element with a section element inside.\n */\nexport const Footer = ({\n id,\n classes,\n children,\n styles = {},\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"footer\" id={id} className={classes} styles={styles} {...props}>\n <UI as=\"section\">{children || 'Copyright © 2022'}</UI>\n </UI>\n )\n}\n\nexport const Aside = ({\n id,\n children,\n styles = {},\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"aside\" id={id} styles={styles} className={classes} {...props}>\n <UI as=\"section\">{children}</UI>\n </UI>\n )\n}\n\n/**\n * Section component that renders a section element.\n *\n * @param children - Child elements to render inside the section.\n * @param styles - CSS styles to apply to the section.\n * @param props - Other props.\n */\nexport const Section = ({\n id,\n children,\n styles,\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"section\" id={id} styles={styles} className={classes} {...props}>\n {children}\n </UI>\n )\n}\n\n/**\n * Article component renders an HTML <article> element.\n *\n * @param children - Child elements to render inside the article.\n * @param styles - CSS styles to apply to the article.\n * @param props - Additional props to pass to the article element.\n */\nexport const Article = ({\n id,\n children,\n\n styles,\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"article\" id={id} styles={styles} className={classes} {...props}>\n {children}\n </UI>\n )\n}\n\nexport default Landmarks\n\nLandmarks.displayName = 'Landmarks'\nLandmarks.Header = Header\nLandmarks.Main = Main\nLandmarks.Footer = Footer\nLandmarks.Aside = Aside\nLandmarks.Section = Section\nLandmarks.Article = Article\n","import UI from '#components/ui'\nimport React from 'react'\n\n/**\n * Props for the Badge component\n *\n * @property {React.ReactNode} children - Content to display inside the badge (typically numbers or short text)\n * @property {string} [id] - Optional HTML id attribute for the badge element\n * @property {React.CSSProperties} [styles] - Inline styles to apply to the badge\n * @property {string} [classes] - CSS class names to apply to the badge\n * @property {'rounded'} [variant] - Visual variant of the badge. Use 'rounded' for circular badges (fixed size with ellipsis for overflow)\n * @property {string} [aria-label] - Accessible label for screen readers. Required for icon-only or number-only badges\n * @property {'status' | 'note'} [role] - ARIA role for the badge. Defaults to 'status' for dynamic content\n */\nexport type BadgeProps = {\n /**\n * Content to display inside the badge (typically numbers or short text)\n */\n children?: React.ReactNode\n /**\n * Visual variant of the badge\n * - 'rounded': Circular badge style\n */\n variant?: 'rounded'\n} & React.ComponentProps<typeof UI>\n\n/**\n * Badge - A small label component for displaying status, counts, or notifications\n *\n * The Badge component is used to display supplementary information alongside other content,\n * such as notification counts, status indicators, or labels. It renders as a semantic `<sup>`\n * element with a nested `<span>` required for the component's styling architecture.\n *\n * ## Styling Architecture\n *\n * The Badge uses a nested structure (`<sup><span>content</span></sup>`) which is required\n * for the SCSS styling system. The outer `<sup>` element provides positioning context,\n * while the inner `<span>` receives the visual styling (background, padding, border-radius).\n *\n * ## Rounded Variant Behavior\n *\n * The `rounded` variant creates a perfect circular badge with fixed dimensions (1.5625rem).\n * Content that exceeds the available space will be truncated with an ellipsis (...).\n * **Best practice**: Format large numbers yourself (e.g., pass \"99+\" instead of \"999\").\n *\n * ## Accessibility Considerations\n *\n * - **Semantic HTML**: Uses `<sup>` (superscript) element for proper positioning context\n * - **ARIA Role**: Defaults to `role=\"status\"` for dynamic badges (e.g., unread counts)\n * - **Accessible Names**: For icon-only or number-only badges, provide an `aria-label`\n * to give context (e.g., \"3 unread messages\" instead of just \"3\")\n * - **Live Regions**: The `role=\"status\"` makes badges announce updates to screen readers\n *\n * @param {BadgeProps} props - Component props\n * @returns {React.ReactElement} A Badge component\n *\n * @example\n * // Basic badge with notification count\n * <p>\n * Messages\n * <Badge aria-label=\"3 unread messages\">3</Badge>\n * </p>\n *\n * @example\n * // Rounded badge variant (perfect circle)\n * <p>\n * Notifications\n * <Badge variant=\"rounded\" aria-label=\"99 or more notifications\">99+</Badge>\n * </p>\n *\n * @example\n * // Status badge with custom styling\n * <p>\n * Active Users\n * <Badge styles={{ backgroundColor: 'green', color: 'white' }}>21</Badge>\n * </p>\n *\n * @example\n * // ✅ GOOD: Accessible badge with descriptive label and formatted content\n * <Badge variant=\"rounded\" aria-label=\"12 items in cart\">12</Badge>\n *\n * @example\n * // ✅ GOOD: Large numbers formatted by developer\n * <Badge variant=\"rounded\" aria-label=\"More than 99 notifications\">99+</Badge>\n *\n * @example\n * // ❌ BAD: Number-only badge without context for screen readers\n * <Badge>12</Badge>\n */\nexport const Badge = ({ id, styles, classes, children, variant, ...props }: BadgeProps) => {\n // Build data-badge attribute for variant styling\n const dataBadge = variant ? variant : undefined\n\n return (\n <UI\n as=\"sup\"\n id={id}\n styles={styles}\n className={classes}\n data-badge={dataBadge}\n role=\"status\"\n {...props}\n >\n <UI as=\"span\">{children}</UI>\n </UI>\n )\n}\n\nBadge.displayName = 'Badge'\nexport default Badge\n","import React from 'react'\nimport UI from '#components/ui'\n\nexport type TagProps = {\n /** HTML element to display the badge as span or p */\n elm?: 'span' | 'p'\n /** Aria role for the component - conditional */\n role: 'note' | 'status'\n} & React.ComponentProps<typeof UI>\n\nexport const Tag = ({\n elm = 'span',\n role = 'note',\n children,\n styles,\n ...props\n}: TagProps) => {\n return (\n <UI as={elm} role={role} styles={styles} {...props}>\n {children}\n </UI>\n )\n}\nexport default Tag\nTag.displayName = 'Tag'\n","import UI from \"#components/ui\";\nimport React, { useCallback } from \"react\";\nimport type { DetailsProps } from \"./details.types\";\n\n/**\n * Details - A progressive disclosure component using native HTML `<details>` element.\n *\n * This component wraps the native `<details>` and `<summary>` elements to provide\n * an accessible, semantic way to show and hide content. It supports accordion behavior\n * through the `name` attribute and includes proper keyboard navigation out of the box.\n *\n * ## Key Features:\n * - **Semantic HTML**: Uses native `<details>` for built-in accessibility\n * - **Keyboard Support**: Space/Enter to toggle, fully accessible by default\n * - **Accordion Mode**: Group multiple details with `name` for exclusive expansion\n * - **Customizable**: Supports icons, custom styles, and event handlers\n *\n * ## Accessibility:\n * - ✅ WCAG 2.1 AA compliant using semantic HTML\n * - ✅ Native keyboard support (Space, Enter)\n * - ✅ Screen reader compatible (announced as \"disclosure\" or \"expandable\")\n * - ✅ Focus indicators automatically applied via CSS\n * - ✅ `aria-expanded` managed automatically by browser\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Details summary=\"Click to expand\">\n * <p>Hidden content here</p>\n * </Details>\n * ```\n *\n * @example\n * ```tsx\n * // With icon and custom styling\n * <Details\n * summary=\"Shipping Information\"\n * icon={<ChevronDownIcon />}\n * classes=\"custom-details\"\n * onToggle={(e) => console.log('Open:', e.currentTarget.open)}\n * >\n * <p>Ships within 2-3 business days</p>\n * </Details>\n * ```\n *\n * @example\n * ```tsx\n * // Accordion mode - only one open at a time\n * <Details name=\"faq\" summary=\"Question 1\">Answer 1</Details>\n * <Details name=\"faq\" summary=\"Question 2\">Answer 2</Details>\n * <Details name=\"faq\" summary=\"Question 3\">Answer 3</Details>\n * ```\n */\nexport const Details = React.forwardRef<HTMLDetailsElement, DetailsProps>(\n (\n {\n summary,\n icon,\n styles,\n classes,\n ariaLabel,\n name,\n open,\n onPointerDown,\n onToggle,\n children,\n ...props\n },\n ref\n ) => {\n // Memoize callbacks to prevent unnecessary re-renders of child components\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n onPointerDown?.(e as React.PointerEvent<HTMLDetailsElement>);\n },\n [onPointerDown]\n );\n\n const handleToggle = useCallback(\n (e: React.SyntheticEvent<HTMLDetailsElement>) => {\n onToggle?.(e);\n },\n [onToggle]\n );\n\n return (\n <UI\n as=\"details\"\n styles={styles}\n classes={classes}\n onToggle={handleToggle}\n ref={ref}\n open={open}\n aria-label={ariaLabel}\n name={name}\n {...props}\n >\n <UI as=\"summary\" onPointerDown={handlePointerDown}>\n {icon}\n {summary}\n </UI>\n <UI as=\"section\">{children}</UI>\n </UI>\n );\n }\n);\n\nDetails.displayName = \"Details\";\n\nexport default Details;\n"]}
1
+ {"version":3,"sources":["../src/components/images/img.tsx","../src/components/text-to-speech/TextToSpeech.tsx","../src/components/text-to-speech/useTextToSpeech.tsx","../src/components/text-to-speech/views/TextToSpeechControls.tsx","../src/components/layout/landmarks.tsx","../src/components/badge/badge.tsx","../src/components/tag/tag.tsx","../src/components/details/details.tsx"],"names":["React","useMemo","Img","src","alt","width","height","styles","loading","placeholder","fetchpriority","decoding","srcSet","sizes","onError","onLoad","props","defaultPlaceholder","w","h","svg","fallbackPlaceholder","ui_default","e","useState","useEffect","useTextToSpeech","initialVoice","availableVoices","setAvailableVoices","currentVoice","setCurrentVoice","isSpeaking","setIsSpeaking","isPaused","setIsPaused","utterance","setUtterance","updateVoices","voices","googleVoice","voice","englishVoice","text","options","onEnd","TTSButtonComponent","children","onClick","TTSButton","TextToSpeechControls","label","onSpeak","onPause","onResume","onCancel","icon_default","TextToSpeechControls_default","TextToSpeech","initialText","showTextInput","pitch","rate","language","speak","pause","resume","cancel","getAvailableLanguages","setText","handleSpeak","handleEnd","handleChange","textarea_default","Landmarks","Header","id","headerBackground","classes","Main","Footer","Aside","Section","Article","Badge","variant","Tag","elm","role","useCallback","Details","summary","icon","ariaLabel","name","open","onPointerDown","onToggle","ref","handlePointerDown","handleToggle"],"mappings":"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","sourcesContent":["import UI from \"../ui\";\nimport React, { useMemo } from \"react\";\nimport type { ImgProps } from \"./img.types\";\n\n/**\n * Img - A semantic image component with accessibility and performance best practices.\n *\n * This component wraps the native `<img>` element with enhanced features:\n * - **Responsive images** via optional srcset/sizes\n * - **Lazy loading** by default for performance\n * - **Error handling** with configurable fallback placeholders\n * - **Type safety** with full TypeScript support\n *\n * ## Accessibility Patterns (WCAG 2.1 AA)\n *\n * ### Decorative Images\n * Images that are purely visual decoration should use an empty alt attribute.\n * These images are typically borders, patterns, or visual separators.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Decorative border image\n * <Img src=\"/decorative-border.png\" alt=\"\" />\n *\n * // ✅ GOOD: Background pattern\n * <Img src=\"/pattern.svg\" alt=\"\" loading=\"eager\" />\n * ```\n *\n * ### Semantic Images\n * Images that convey information must have descriptive alt text that explains\n * the content and purpose of the image.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Informative image with descriptive alt\n * <Img\n * src=\"/sales-chart.png\"\n * alt=\"Sales chart showing 30% revenue growth in Q4 2024\"\n * />\n *\n * // ✅ GOOD: Product photo with context\n * <Img\n * src=\"/laptop.jpg\"\n * alt=\"Silver MacBook Pro 14-inch on wooden desk\"\n * />\n * ```\n *\n * ## Performance Optimization\n *\n * ### Lazy Loading\n * By default, images use lazy loading to improve page load performance.\n * Only use `loading=\"eager\"` for above-the-fold images.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Lazy load below-the-fold image\n * <Img src=\"/photo.jpg\" alt=\"Photo\" />\n *\n * // ✅ GOOD: Eager load hero image\n * <Img\n * src=\"/hero.jpg\"\n * alt=\"Hero banner\"\n * loading=\"eager\"\n * fetchpriority=\"high\"\n * />\n * ```\n *\n * ### Responsive Images\n * Use srcset and sizes for responsive images to serve appropriate image sizes\n * based on viewport width, improving performance and bandwidth usage.\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Responsive image with multiple sizes\n * <Img\n * src=\"/photo.jpg\"\n * srcSet=\"/photo-320w.jpg 320w, /photo-640w.jpg 640w, /photo-1024w.jpg 1024w\"\n * sizes=\"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 800px\"\n * alt=\"Responsive image adapts to viewport\"\n * />\n * ```\n *\n * ## Error Handling\n *\n * @example\n * ```tsx\n * // ✅ GOOD: Custom placeholder on error\n * <Img\n * src=\"/photo.jpg\"\n * placeholder=\"/fallback.png\"\n * alt=\"User profile photo\"\n * />\n *\n * // ✅ GOOD: Custom error handler\n * <Img\n * src=\"/photo.jpg\"\n * onError={(e) => {\n * console.error('Image failed to load')\n * logToAnalytics('image_error', { src: e.currentTarget.src })\n * }}\n * alt=\"Photo\"\n * />\n * ```\n *\n * @param {ImgProps} props - Component props extending native img attributes\n * @returns {React.ReactElement} Image element with enhanced functionality\n *\n * @see {@link ImgProps} for complete prop documentation\n * @see https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html\n */\nexport const Img = ({\n src = \"//\",\n alt,\n width = 480,\n height,\n styles,\n loading = \"lazy\",\n placeholder,\n fetchpriority = \"low\",\n decoding = \"auto\",\n srcSet,\n sizes,\n onError,\n onLoad,\n ...props\n}: ImgProps) => {\n /**\n * Generates a performant, responsive SVG gradient placeholder.\n * Uses data URI to avoid network requests and memoizes based on dimensions.\n * The SVG uses viewBox for perfect scaling at any size.\n *\n * Features:\n * - Zero network requests (works offline)\n * - ~900 bytes vs. 5-10KB external image\n * - Responsive with viewBox\n * - Attractive gradient (indigo → purple → pink)\n * - Dimension text for debugging\n */\n const defaultPlaceholder = useMemo(() => {\n const w = typeof width === \"number\" ? width : 480;\n const h = typeof height === \"number\" ? height : Math.round(w * 0.75);\n\n // Responsive SVG with attractive gradient and dimension text\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${w} ${h}\">\n <defs>\n <linearGradient id=\"grad-${w}-${h}\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" style=\"stop-color:#6366f1;stop-opacity:1\" />\n <stop offset=\"50%\" style=\"stop-color:#8b5cf6;stop-opacity:1\" />\n <stop offset=\"100%\" style=\"stop-color:#ec4899;stop-opacity:1\" />\n </linearGradient>\n </defs>\n <rect width=\"${w}\" height=\"${h}\" fill=\"url(#grad-${w}-${h})\"/>\n <circle cx=\"${w * 0.15}\" cy=\"${h * 0.2}\" r=\"${Math.min(w, h) * 0.08}\" fill=\"rgba(255,255,255,0.2)\"/>\n <path d=\"M0,${h * 0.75} Q${w * 0.25},${h * 0.65} ${w * 0.5},${h * 0.75} T${w},${h * 0.75} L${w},${h} L0,${h} Z\" fill=\"rgba(0,0,0,0.15)\"/>\n <text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"system-ui,-apple-system,sans-serif\" font-size=\"${Math.max(16, Math.min(w, h) * 0.05)}\" font-weight=\"500\" fill=\"rgba(255,255,255,0.9)\">${w}×${h}</text>\n </svg>`;\n\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n }, [width, height]);\n\n const fallbackPlaceholder = placeholder ?? defaultPlaceholder;\n\n /**\n * Handles image load errors.\n * Calls custom error handler if provided, then applies fallback placeholder.\n * The custom handler can prevent the default fallback by calling e.preventDefault().\n */\n const handleImgError = (\n e: React.SyntheticEvent<HTMLImageElement, Event>\n ): void => {\n // Call custom error handler first (for logging, analytics, etc.)\n if (onError) {\n onError(e);\n }\n\n // Apply fallback unless preventDefault() was called\n if (!e.defaultPrevented) {\n // Avoid infinite error loop by checking if already showing placeholder\n if (e.currentTarget.src !== fallbackPlaceholder) {\n e.currentTarget.src = fallbackPlaceholder;\n }\n }\n };\n\n /**\n * Handles successful image load.\n * Calls custom load handler if provided.\n */\n const handleImgLoad = (\n e: React.SyntheticEvent<HTMLImageElement, Event>\n ): void => {\n onLoad?.(e);\n };\n\n return (\n <UI\n as=\"img\"\n src={src}\n alt={alt}\n width={width}\n height={height || \"auto\"}\n loading={loading}\n style={styles}\n srcSet={srcSet}\n sizes={sizes}\n onError={handleImgError}\n onLoad={handleImgLoad}\n decoding={decoding}\n {...props}\n {...(fetchpriority && { fetchpriority })}\n />\n );\n};\n\nexport default Img;\nImg.displayName = \"Img\";\n","import React, { useState, ChangeEvent, useEffect } from 'react'\nimport { useTextToSpeech } from './useTextToSpeech'\nimport Textarea from '#components/form/textarea.jsx'\nimport TextToSpeechControls from './views/TextToSpeechControls'\n\n/**\n * Props for the TextToSpeechComponent.\n * @interface TextToSpeechComponentProps\n */\ninterface TextToSpeechComponentProps {\n /** Initial text to be spoken. Defaults to an empty string. */\n initialText?: string\n /** Whether to show the text input field. Defaults to true. */\n showTextInput?: boolean\n /** The voice to be used for speech synthesis. */\n voice?: SpeechSynthesisVoice | undefined\n /** The pitch of the voice. Defaults to 1. */\n pitch?: number\n /** The rate of speech. Defaults to 1. */\n rate?: number\n /** The language to be used for speech synthesis. */\n language?: string\n /** Player label */\n label?: string | React.ReactNode\n /** Callback function to be called when speech ends. */\n onEnd?: () => void\n}\n\n/**\n * A component that converts text to speech using the Web Speech API.\n * @param {TextToSpeechComponentProps} props - The props for the component.\n * @returns {JSX.Element} The rendered TextToSpeechComponent.\n */\nexport const TextToSpeech: React.FC<TextToSpeechComponentProps> = ({\n initialText = '',\n showTextInput = false,\n voice,\n pitch = 1,\n rate = 1,\n language,\n label,\n onEnd,\n}) => {\n const {\n speak,\n pause,\n resume,\n cancel,\n isSpeaking,\n isPaused,\n getAvailableLanguages,\n availableVoices,\n } = useTextToSpeech()\n const [text, setText] = useState<string>(initialText)\n console.log(getAvailableLanguages())\n\n useEffect(() => {\n setText(initialText)\n }, [initialText])\n\n const handleSpeak = (): void => {\n if (text.trim() !== '') {\n speak(text, { voice, pitch, rate }, handleEnd)\n }\n }\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>): void => {\n setText(e.target.value)\n }\n\n const handleEnd = (): void => {\n if (onEnd) {\n onEnd()\n }\n }\n\n return (\n <>\n {showTextInput && <Textarea value={text} onChange={handleChange} />}\n <TextToSpeechControls\n label={label}\n isSpeaking={isSpeaking}\n isPaused={isPaused}\n onSpeak={handleSpeak}\n onPause={pause}\n onResume={resume}\n onCancel={cancel}\n />\n </>\n )\n}\n\nexport default TextToSpeech\nTextToSpeech.displayName = 'TextToSpeechComponent'\n","import { useState, useEffect } from 'react'\n\n/**\n * Options for configuring speech synthesis.\n * @interface SpeechOptions\n */\ninterface SpeechOptions {\n /** The language for speech synthesis (e.g., 'en-US') */\n lang?: string\n\n /** The pitch of the voice (0 to 2) */\n pitch?: number\n /** The speed of the voice (0.1 to 10) */\n rate?: number\n\n /** The voice to use for speech synthesis */\n voice?: SpeechSynthesisVoice\n}\n/**\n * Custom hook to handle text-to-speech functionality.\n *\n * @param {SpeechSynthesisVoice} [initialVoice] - The initial voice to use for speech synthesis.\n * @returns {Object} An object containing methods to control speech synthesis and state variables.\n */\nexport const useTextToSpeech = (initialVoice?: SpeechSynthesisVoice) => {\n const [availableVoices, setAvailableVoices] = useState<\n SpeechSynthesisVoice[]\n >([])\n const [currentVoice, setCurrentVoice] = useState<\n SpeechSynthesisVoice | undefined\n >(initialVoice)\n\n const [isSpeaking, setIsSpeaking] = useState<boolean>(false)\n const [isPaused, setIsPaused] = useState<boolean>(false)\n const [utterance, setUtterance] = useState<SpeechSynthesisUtterance | null>(\n null,\n )\n\n useEffect(() => {\n const updateVoices = () => {\n const voices = window.speechSynthesis.getVoices()\n setAvailableVoices(voices)\n\n // Set default voice to Google US English if available\n const googleVoice = voices.find(\n (voice) => voice.name === 'Google US English',\n )\n if (googleVoice) {\n setCurrentVoice(googleVoice)\n } else {\n // Fallback to the first English voice if Google voice is not available\n const englishVoice = voices.find((voice) =>\n voice.lang.startsWith('en-'),\n )\n if (englishVoice) {\n setCurrentVoice(englishVoice)\n }\n }\n }\n\n updateVoices()\n window.speechSynthesis.onvoiceschanged = updateVoices\n\n return () => {\n window.speechSynthesis.onvoiceschanged = null\n }\n }, [])\n\n /**\n * Gets the list of available languages for speech synthesis.\n * @returns {string[]} An array of available language codes.\n */\n const getAvailableLanguages = () => {\n return [...new Set(availableVoices.map((voice) => voice.lang))]\n }\n\n /**\n * Initiates speech synthesis for the given text.\n *\n * @param {string} text - The text to be spoken.\n * @param {SpeechOptions} [options={}] - Options for speech synthesis.\n * @param {Function} [onEnd] - Callback function to be called when speech ends.\n */\n const speak = (\n text: string,\n options: SpeechOptions = {},\n onEnd?: () => void,\n ) => {\n const utterance = new SpeechSynthesisUtterance(text)\n\n utterance.lang = options.lang ?? 'en-US'\n utterance.pitch = options.pitch ?? 1\n utterance.rate = options.rate ?? 1\n utterance.voice = currentVoice ?? options.voice ?? null\n\n utterance.onend = () => {\n setIsSpeaking(false)\n setIsPaused(false)\n if (onEnd) {\n onEnd()\n }\n }\n\n if ('speechSynthesis' in window) {\n window.speechSynthesis.speak(utterance)\n setUtterance(utterance)\n setIsSpeaking(true)\n setIsPaused(false)\n } else {\n console.error('Speech synthesis not supported')\n // Handle the error appropriately\n }\n }\n\n /**\n * Changes the current voice used for speech synthesis.\n * @param {SpeechSynthesisVoice} voice - The new voice to use.\n */\n const changeVoice = (voice: SpeechSynthesisVoice) => {\n setCurrentVoice(voice)\n }\n\n /**\n * Pauses the ongoing speech synthesis.\n */\n const pause = () => {\n if (isSpeaking && !isPaused) {\n window.speechSynthesis.pause()\n setIsPaused(true)\n }\n }\n\n /**\n * Resumes the paused speech synthesis.\n */\n const resume = () => {\n if (isSpeaking && isPaused) {\n window.speechSynthesis.resume()\n setIsPaused(false)\n }\n }\n\n /**\n * Cancels the ongoing speech synthesis.\n */\n const cancel = () => {\n if (isSpeaking) {\n window.speechSynthesis.cancel()\n setIsSpeaking(false)\n setIsPaused(false)\n }\n }\n\n return {\n /** Initiates speech synthesis for the given text */\n speak,\n /** Pauses the ongoing speech synthesis */\n pause,\n /** Resumes the paused speech synthesis */\n resume,\n /** Cancels the ongoing speech synthesis */\n cancel,\n /** Indicates whether speech synthesis is currently active */\n isSpeaking,\n /** Indicates whether speech synthesis is currently paused */\n isPaused,\n /** Array of available voices for speech synthesis */\n availableVoices,\n /** Changes the current voice used for speech synthesis */\n changeVoice,\n /** The currently selected voice for speech synthesis */\n currentVoice,\n /** Gets the list of available languages for speech synthesis */\n getAvailableLanguages,\n }\n}\n","import React from 'react'\nimport Icon from '#components/icons/icon'\nimport UI from '#components/ui'\nimport { FC } from 'react'\n\n/**\n * Props for the TextToSpeechControls component.\n * @interface TextToSpeechControlsProps\n */\ninterface TextToSpeechControlsProps {\n /** Optional label for the controls */\n label?: string | React.ReactNode\n /** Indicates if the text-to-speech is currently speaking */\n isSpeaking: boolean\n /** Indicates if the text-to-speech is paused */\n isPaused: boolean\n /** Function to start speaking */\n onSpeak: () => void\n /** Function to pause speaking */\n onPause: () => void\n /** Function to resume speaking */\n onResume: () => void\n /** Function to cancel speaking */\n onCancel: () => void\n}\n\n/**\n * TTSButtonComponent props\n * @interface TTSButtonComponentProps\n */\ninterface TTSButtonComponentProps {\n /** The content of the button */\n children: React.ReactNode\n /** Function to call when the button is clicked */\n onClick: () => void\n}\n\n/**\n * TTSButtonComponent is a reusable button component for text-to-speech controls.\n * @param {TTSButtonComponentProps} props - The component props\n * @returns {React.ReactElement} The rendered button\n */\nexport const TTSButtonComponent: React.FC<TTSButtonComponentProps> = ({\n children,\n onClick,\n}) => {\n return (\n <UI\n as=\"button\"\n type=\"button\"\n className=\"tts-border\"\n data-btn=\"sm text pill\"\n onClick={onClick}\n >\n {children}\n </UI>\n )\n}\n\nexport const TTSButton = React.memo(TTSButtonComponent)\n\n/**\n * TextToSpeechControlsComponent interface extends FC<TextToSpeechControlsProps>\n * and includes a TTSButton property.\n * @interface TextToSpeechControlsComponent\n * @extends {FC<TextToSpeechControlsProps>}\n */\ninterface TextToSpeechControlsComponent extends FC<TextToSpeechControlsProps> {\n /** The TTSButton component used within TextToSpeechControls */\n TTSButton: typeof TTSButton\n}\n\n/**\n * TextToSpeechControls component provides a user interface for controlling text-to-speech functionality.\n * @param {TextToSpeechControlsProps} props - The component props\n * @returns {React.ReactElement} The rendered TextToSpeechControls component\n */\nconst TextToSpeechControls: TextToSpeechControlsComponent = ({\n label,\n isSpeaking,\n isPaused,\n onSpeak,\n onPause,\n onResume,\n onCancel,\n}) => {\n const iconSize = 16\n\n return (\n <UI as=\"div\" data-tts>\n {label && <p>{label}</p>}\n {!isSpeaking && (\n <TTSButton aria-label=\"Speak\" onClick={onSpeak}>\n <Icon.PlaySolid size={iconSize} />\n </TTSButton>\n )}\n {isSpeaking && !isPaused && (\n <TTSButton aria-label=\"Pause\" onClick={onPause}>\n <Icon.PauseSolid size={iconSize} />\n </TTSButton>\n )}\n {isPaused && (\n <TTSButton aria-label=\"Resume\" onClick={onResume}>\n <Icon.ResumeSolid size={iconSize} />\n </TTSButton>\n )}\n <TTSButton aria-label=\"Stop\" onClick={onCancel}>\n <Icon.StopSolid size={iconSize} />\n </TTSButton>\n </UI>\n )\n}\n\nTextToSpeechControls.displayName = 'TextToSpeechControls'\nTextToSpeechControls.TTSButton = TTSButton\n\nexport default TextToSpeechControls\n","import UI from '../ui'\nimport React, { ReactNode } from 'react'\n\ntype ComponentProps = React.ComponentProps<typeof UI>\n\n/**\n * Renders children elements without any wrapping component.\n * Can be used as a placeholder when no semantic landmark is needed.\n */\nexport const Landmarks = (children?: React.FC) => <>{children}</>\n\ntype HeaderProps = {\n headerBackground?: ReactNode\n} & ComponentProps\n/**\n * Header component.\n *\n * Renders a header landmark with a section child.\n *\n * @param children - The content to render inside the header.\n * @param styles - Optional styles object.\n * @param props - Other props.\n */\nexport const Header = ({\n id,\n children,\n headerBackground,\n styles,\n classes,\n ...props\n}: HeaderProps) => {\n return (\n <UI as=\"header\" id={id} styles={styles} className={classes} {...props}>\n {headerBackground}\n <UI as=\"section\">{children}</UI>\n </UI>\n )\n}\n\n/**\n * Main component.\n *\n * Renders a main landmark.\n *\n * @param children - The content to render inside the main element.\n * @param styles - Optional styles object.\n * @param props - Other props.\n */\nexport const Main = ({\n id,\n children,\n styles,\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"main\" id={id} styles={styles} {...props} className={classes}>\n {children}\n </UI>\n )\n}\n\n/**\n * Footer component that renders a footer element with a section element inside.\n * @param {ReactNode} children - Child elements to render inside the section element.\n * @param styles - CSS styles to apply to the footer element.\n * @param props - Additional props to pass to the footer element.\n * @returns A React component that renders a footer element with a section element inside.\n */\nexport const Footer = ({\n id,\n classes,\n children,\n styles = {},\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"footer\" id={id} className={classes} styles={styles} {...props}>\n <UI as=\"section\">{children || 'Copyright © 2022'}</UI>\n </UI>\n )\n}\n\nexport const Aside = ({\n id,\n children,\n styles = {},\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"aside\" id={id} styles={styles} className={classes} {...props}>\n <UI as=\"section\">{children}</UI>\n </UI>\n )\n}\n\n/**\n * Section component that renders a section element.\n *\n * @param children - Child elements to render inside the section.\n * @param styles - CSS styles to apply to the section.\n * @param props - Other props.\n */\nexport const Section = ({\n id,\n children,\n styles,\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"section\" id={id} styles={styles} className={classes} {...props}>\n {children}\n </UI>\n )\n}\n\n/**\n * Article component renders an HTML <article> element.\n *\n * @param children - Child elements to render inside the article.\n * @param styles - CSS styles to apply to the article.\n * @param props - Additional props to pass to the article element.\n */\nexport const Article = ({\n id,\n children,\n\n styles,\n classes,\n ...props\n}: ComponentProps) => {\n return (\n <UI as=\"article\" id={id} styles={styles} className={classes} {...props}>\n {children}\n </UI>\n )\n}\n\nexport default Landmarks\n\nLandmarks.displayName = 'Landmarks'\nLandmarks.Header = Header\nLandmarks.Main = Main\nLandmarks.Footer = Footer\nLandmarks.Aside = Aside\nLandmarks.Section = Section\nLandmarks.Article = Article\n","import UI from '#components/ui'\nimport React from 'react'\n\n/**\n * Props for the Badge component\n *\n * @property {React.ReactNode} children - Content to display inside the badge (typically numbers or short text)\n * @property {string} [id] - Optional HTML id attribute for the badge element\n * @property {React.CSSProperties} [styles] - Inline styles to apply to the badge\n * @property {string} [classes] - CSS class names to apply to the badge\n * @property {'rounded'} [variant] - Visual variant of the badge. Use 'rounded' for circular badges (fixed size with ellipsis for overflow)\n * @property {string} [aria-label] - Accessible label for screen readers. Required for icon-only or number-only badges\n * @property {'status' | 'note'} [role] - ARIA role for the badge. Defaults to 'status' for dynamic content\n */\nexport type BadgeProps = {\n /**\n * Content to display inside the badge (typically numbers or short text)\n */\n children?: React.ReactNode\n /**\n * Visual variant of the badge\n * - 'rounded': Circular badge style\n */\n variant?: 'rounded'\n} & React.ComponentProps<typeof UI>\n\n/**\n * Badge - A small label component for displaying status, counts, or notifications\n *\n * The Badge component is used to display supplementary information alongside other content,\n * such as notification counts, status indicators, or labels. It renders as a semantic `<sup>`\n * element with a nested `<span>` required for the component's styling architecture.\n *\n * ## Styling Architecture\n *\n * The Badge uses a nested structure (`<sup><span>content</span></sup>`) which is required\n * for the SCSS styling system. The outer `<sup>` element provides positioning context,\n * while the inner `<span>` receives the visual styling (background, padding, border-radius).\n *\n * ## Rounded Variant Behavior\n *\n * The `rounded` variant creates a perfect circular badge with fixed dimensions (1.5625rem).\n * Content that exceeds the available space will be truncated with an ellipsis (...).\n * **Best practice**: Format large numbers yourself (e.g., pass \"99+\" instead of \"999\").\n *\n * ## Accessibility Considerations\n *\n * - **Semantic HTML**: Uses `<sup>` (superscript) element for proper positioning context\n * - **ARIA Role**: Defaults to `role=\"status\"` for dynamic badges (e.g., unread counts)\n * - **Accessible Names**: For icon-only or number-only badges, provide an `aria-label`\n * to give context (e.g., \"3 unread messages\" instead of just \"3\")\n * - **Live Regions**: The `role=\"status\"` makes badges announce updates to screen readers\n *\n * @param {BadgeProps} props - Component props\n * @returns {React.ReactElement} A Badge component\n *\n * @example\n * // Basic badge with notification count\n * <p>\n * Messages\n * <Badge aria-label=\"3 unread messages\">3</Badge>\n * </p>\n *\n * @example\n * // Rounded badge variant (perfect circle)\n * <p>\n * Notifications\n * <Badge variant=\"rounded\" aria-label=\"99 or more notifications\">99+</Badge>\n * </p>\n *\n * @example\n * // Status badge with custom styling\n * <p>\n * Active Users\n * <Badge styles={{ backgroundColor: 'green', color: 'white' }}>21</Badge>\n * </p>\n *\n * @example\n * // ✅ GOOD: Accessible badge with descriptive label and formatted content\n * <Badge variant=\"rounded\" aria-label=\"12 items in cart\">12</Badge>\n *\n * @example\n * // ✅ GOOD: Large numbers formatted by developer\n * <Badge variant=\"rounded\" aria-label=\"More than 99 notifications\">99+</Badge>\n *\n * @example\n * // ❌ BAD: Number-only badge without context for screen readers\n * <Badge>12</Badge>\n */\nexport const Badge = ({ id, styles, classes, children, variant, ...props }: BadgeProps) => {\n // Build data-badge attribute for variant styling\n const dataBadge = variant ? variant : undefined\n\n return (\n <UI\n as=\"sup\"\n id={id}\n styles={styles}\n className={classes}\n data-badge={dataBadge}\n role=\"status\"\n {...props}\n >\n <UI as=\"span\">{children}</UI>\n </UI>\n )\n}\n\nBadge.displayName = 'Badge'\nexport default Badge\n","import React from 'react'\nimport UI from '#components/ui'\nimport type { TagProps, TagVariant } from './tag.types'\n\n/**\n * Tag - A small inline label component for displaying status, versions, or environment indicators\n *\n * The Tag component is used to highlight supplementary information such as release stages\n * (alpha, beta, stable), environment indicators (production), or version labels. It renders\n * as either a `<span>` (inline) or `<p>` (block) element with semantic ARIA roles.\n *\n * ## Design Philosophy\n *\n * Tags serve as visual and semantic indicators that:\n * - Communicate the state or stage of features, releases, or environments\n * - Provide quick visual scanning through color-coded variants\n * - Maintain accessibility through proper ARIA roles and labels\n *\n * ## Styling Architecture\n *\n * The Tag component uses CSS custom properties (CSS variables) for theming and styling,\n * allowing for easy customization through the `data-tag` attribute. Each variant\n * (alpha, beta, stable, production) applies predefined color schemes defined in SCSS.\n *\n * ## Accessibility Considerations (WCAG 2.1 AA Compliance)\n *\n * - **Semantic Roles**: Uses `role=\"note\"` for static tags or `role=\"status\"` for dynamic content\n * - `role=\"note\"`: Read once by screen readers, suitable for static labels (default)\n * - `role=\"status\"`: Announces updates to screen readers, use for changing status indicators\n * - **Color Independence**: Don't rely solely on color to convey meaning - include text labels\n * - **Text Alternatives**: For icon-only tags, provide `aria-label` for screen reader context\n * - **Contrast Ratios**: All variants meet WCAG AA contrast requirements (4.5:1 for normal text)\n * - **Live Regions**: When using `role=\"status\"`, tag becomes a live region for accessibility\n *\n * ## When to Use Each Role\n *\n * **Use `role=\"note\"` (default) when:**\n * - Displaying static version numbers (e.g., \"v2.1.0\")\n * - Showing fixed environment indicators (e.g., \"Beta Feature\")\n * - Labeling unchanging content categories\n *\n * **Use `role=\"status\"` when:**\n * - Indicating real-time status that may change (e.g., \"Processing\" → \"Complete\")\n * - Displaying live build/deployment states\n * - Showing dynamic feature flags that toggle\n *\n * @param {TagProps} props - Component props\n * @returns {React.ReactElement} A Tag component\n *\n * @example\n * // Basic tag with beta variant (default inline span)\n * <Tag variant=\"beta\">Beta</Tag>\n *\n * @example\n * // Production environment indicator as block element\n * <Tag elm=\"p\" variant=\"production\">Production Environment</Tag>\n *\n * @example\n * // Dynamic status tag with live updates\n * <Tag role=\"status\" variant=\"stable\">\n * {isDeployed ? 'Deployed' : 'Deploying...'}\n * </Tag>\n *\n * @example\n * // Tag with custom styling and accessibility label\n * <Tag\n * variant=\"alpha\"\n * aria-label=\"Alpha version - may contain bugs\"\n * styles={{ fontSize: '0.75rem' }}\n * >\n * Alpha\n * </Tag>\n *\n * @example\n * // ✅ GOOD: Clear text content with variant for visual enhancement\n * <Tag variant=\"stable\">v2.0 Stable</Tag>\n *\n * @example\n * // ✅ GOOD: Dynamic status with proper role\n * <Tag role=\"status\" variant=\"production\">{deploymentStatus}</Tag>\n *\n * @example\n * // ✅ GOOD: Accessible tag with descriptive label\n * <Tag variant=\"beta\" aria-label=\"Beta feature - feedback welcome\">\n * Beta\n * </Tag>\n *\n * @example\n * // ❌ BAD: Relying only on color without text\n * <Tag variant=\"production\" aria-label=\"Production\" />\n *\n * @example\n * // ❌ BAD: Using status role for static content\n * <Tag role=\"status\" variant=\"stable\">v1.0</Tag>\n */\nexport const Tag = ({\n elm = 'span',\n role = 'note',\n variant,\n children,\n styles,\n ...props\n}: TagProps) => {\n // Map variant to data-tag attribute for SCSS styling\n const dataTag = variant ? variant : undefined\n\n return (\n <UI\n as={elm}\n role={role}\n data-tag={dataTag}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nTag.displayName = 'Tag'\nexport default Tag\nexport type { TagProps, TagVariant }\n","import UI from \"#components/ui\";\nimport React, { useCallback } from \"react\";\nimport type { DetailsProps } from \"./details.types\";\n\n/**\n * Details - A progressive disclosure component using native HTML `<details>` element.\n *\n * This component wraps the native `<details>` and `<summary>` elements to provide\n * an accessible, semantic way to show and hide content. It supports accordion behavior\n * through the `name` attribute and includes proper keyboard navigation out of the box.\n *\n * ## Key Features:\n * - **Semantic HTML**: Uses native `<details>` for built-in accessibility\n * - **Keyboard Support**: Space/Enter to toggle, fully accessible by default\n * - **Accordion Mode**: Group multiple details with `name` for exclusive expansion\n * - **Customizable**: Supports icons, custom styles, and event handlers\n *\n * ## Accessibility:\n * - ✅ WCAG 2.1 AA compliant using semantic HTML\n * - ✅ Native keyboard support (Space, Enter)\n * - ✅ Screen reader compatible (announced as \"disclosure\" or \"expandable\")\n * - ✅ Focus indicators automatically applied via CSS\n * - ✅ `aria-expanded` managed automatically by browser\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Details summary=\"Click to expand\">\n * <p>Hidden content here</p>\n * </Details>\n * ```\n *\n * @example\n * ```tsx\n * // With icon and custom styling\n * <Details\n * summary=\"Shipping Information\"\n * icon={<ChevronDownIcon />}\n * classes=\"custom-details\"\n * onToggle={(e) => console.log('Open:', e.currentTarget.open)}\n * >\n * <p>Ships within 2-3 business days</p>\n * </Details>\n * ```\n *\n * @example\n * ```tsx\n * // Accordion mode - only one open at a time\n * <Details name=\"faq\" summary=\"Question 1\">Answer 1</Details>\n * <Details name=\"faq\" summary=\"Question 2\">Answer 2</Details>\n * <Details name=\"faq\" summary=\"Question 3\">Answer 3</Details>\n * ```\n */\nexport const Details = React.forwardRef<HTMLDetailsElement, DetailsProps>(\n (\n {\n summary,\n icon,\n styles,\n classes,\n ariaLabel,\n name,\n open,\n onPointerDown,\n onToggle,\n children,\n ...props\n },\n ref\n ) => {\n // Memoize callbacks to prevent unnecessary re-renders of child components\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n onPointerDown?.(e as React.PointerEvent<HTMLDetailsElement>);\n },\n [onPointerDown]\n );\n\n const handleToggle = useCallback(\n (e: React.SyntheticEvent<HTMLDetailsElement>) => {\n onToggle?.(e);\n },\n [onToggle]\n );\n\n return (\n <UI\n as=\"details\"\n styles={styles}\n classes={classes}\n onToggle={handleToggle}\n ref={ref}\n open={open}\n aria-label={ariaLabel}\n name={name}\n {...props}\n >\n <UI as=\"summary\" onPointerDown={handlePointerDown}>\n {icon}\n {summary}\n </UI>\n <UI as=\"section\">{children}</UI>\n </UI>\n );\n }\n);\n\nDetails.displayName = \"Details\";\n\nexport default Details;\n"]}
package/libs/index.css CHANGED
@@ -1 +1 @@
1
- *,*::before,*::after{box-sizing:border-box}::selection{text-shadow:none;color:#fff;background-color:blue}html,body{height:100%;font-size:100%}html:focus-within{scroll-behavior:smooth}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5}a:not([class]){text-decoration-skip-ink:auto}a,button{cursor:pointer}img,picture,video,canvas{display:block;max-width:100%;aspect-ratio:auto}img,video,iframe{max-inline-size:100%;block-size:auto}img{max-width:100%;height:auto;vertical-align:middle;font-style:italic;background-repeat:no-repeat;background-size:cover;shape-margin:.75rem}svg{display:inline-block}input,textarea,select{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;font-variant:inherit;line-height:inherit;background-color:inherit}:where(button){font-family:inherit}@media(prefers-reduced-motion: reduce){html:focus-within{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important}}#root,#__next{isolation:isolate}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}*:focus{outline:none;outline-style:auto}b{font-weight:normal}table{border-collapse:collapse}svg{max-width:inline-size;pointer-events:none}svg[role=img]{display:inline-flex;align-items:center;width:auto}:root{--weight: 600;--fs: clamp(0.96rem, 1vw + 0.5rem, 1.6rem);--p: 1rem;--px: var(--p);--py: var(--p);--m: 0.75rem;--mx: var(--m);--my: var(--m);--weight: 600;--radius: 0.5rem;--placeholder-color: gray;--placeholder-style: italic;--placeholder-fs: smaller;--transition: all 0.25s linear;--tran-all: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);--fs-0: clamp(.9rem, 4vw - 1rem, 1.12rem);--fs-1: clamp(0.65rem, 1.3vw + 0.25rem, 0.75rem);--fs-2: clamp(0.7rem, 2vw - 0.5rem, 0.875rem);--fs-3: clamp(0.85rem, 2vw - 0.25rem, 0.925rem);--fs-4: clamp(0.9rem, 2vw - 0.25rem, 1.313rem);--fs-5: clamp(0.94rem, 2vw - 0.25rem, 1.463rem);--fs-6: clamp(1rem, 2vw + 0.75rem, 2rem);--fs-7: clamp(1.1rem, 4vw - 0.25rem, 2.375rem);--fs-8: clamp(1.2rem, 4vw + 0.25rem, 3rem);--fs-9: clamp(1.2rem, 4vw + 0.5rem, 4rem);--fs-10: clamp(1.2rem, 5vw + 0.5rem, 4.5rem);--fs-11: clamp(1.2rem, 5vw + 0.75rem, 5.063rem);--fs-12: clamp(1.5rem, 5vw + 0.9rem, 6.375rem);--fs-xs: var(--fs-1);--fs-sm: var(--fs-3);--fs-base: var(--fs-0);--fs-md: var(--fs-5);--fs-lg: var(--fs-7);--fs-xl: var(--fs-9);--fs-xxl: var(--fs-11);--fs-xxxl: var(--fs-12);--display: var(--fs-12);--display-md: var(--fs-11);--display-sm: var(--fs-10);--h1: var(--fs-11);--h2: var(--fs-9);--h3: var(--fs-8);--h4: var(--fs-7);--h5: var(--fs-6);--h6: var(--fs-5);--spc-0: 0;--spc-1: 0.25rem;--spc-2: 0.5rem;--spc-3: 0.75rem;--spc-4: 1rem;--spc-5: 1.5;--spc-6: 2rem;--spc-7: 2.5rem;--spc-8: 3rem;--spc-9: 3.5rem;--spc-10: 4rem;--spc-11: 4.5rem;--spc-12: 5rem;--spc-13: 6rem;--spc-14: 7rem;--spc-15: 8rem;--spc-16: 9rem;--spc-17: 10rem;--spc-18: 11rem;--spc-19: 12rem;--spc-20: 13rem;--spc: var(--spc-4);--spc-xs: var(--spc-1);--spc-sm: var(--spc-3);--spc-base: var(--spc-5);--spc-md: var(--spc-7);--spc-lg: var(--spc-9);--spc-xl: var(--spc-11);--spc-xxl: var(--spc-13);--vw-xs: 5vw;--vw-sm: 10vw;--vw-md: 20vw;--vw-lg: 50vw;--vw-xl: 80vw;--vw-xxl: 95vw;--vh-xs: 5vh;--vh-sm: 10vh;--vh-md: 20vh;--vh-lg: 50vh;--vh-xl: 80vh;--vh-xxl: 95vh}:root{--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--TRUE: initial;--FALSE: ;--fs-weight: 500;--min-w: 20rem;--border-radius: 0.25rem;--padding: 1.5rem}html{font-family:var(--font-family);font-size:100%}body{display:var(--body-dsp, flex);min-height:100%;flex-direction:var(--body-direction, column);min-width:20.3125rem;font-size:var(--fs-0)}body main{flex-grow:1}body>a[href^="#"]{position:absolute;top:-4rem;left:0;width:100%;display:block;justify-content:flex-start;padding:1rem;z-index:100;transition:top .3s;border-radius:0;background-color:#f5f5f5}body>a[href^="#"]:focus{top:0}*+div,*+ul,*+section{margin-block-start:1rem}*+div:empty,*+ul:empty,*+section:empty{display:none}main,header,footer,section{font-size:var(--fs-0)}main>section,main>div,header>section,header>div,footer>section,footer>div,section>section,section>div{margin-inline:auto;width:var(--content-w, 80%)}main>div,header>div,footer>div,section>div{text-align:center}section:not(nav){margin-inline:var(--sect-y, auto);padding-block:var(--sect-x, --spc-4)}p{max-width:75ch;max-width:75ch;font-size:var(--fs-0);line-height:1.6}p+p{margin-block-start:1rem}ul,ol{display:var(--li-display, flex);flex-direction:var(--li-direction, column);gap:var(--li-gap, 0.2rem);flex-wrap:var(--li-wrap, nowrap);padding-inline-start:var(--li-ps, var(--spc-3))}ul[role=list],ul[data-list~=unstyled],ol[role=list],ol[data-list~=unstyled]{list-style:var(--li-style, none);margin-block-end:var(--li-my, 0);margin-block-start:var(--li-mx, 0)}ul[data-list~=inline],ol[data-list~=inline]{--li-direction: row;--li-gap: 1rem;--li-wrap: wrap;--li-px: 0;--li-pi: 0}sup{vertical-align:super;font-size:smaller}blockquote{padding:1rem;border-left:5px #d3d3d3 solid}strong{font-weight:var(--fs-weight)}h1,h2,h3,h4,h5,h6{font-weight:var(--fs-weight);margin-block-start:0;margin-block-end:1rem;line-height:1.2}hr{--hr-h: 0.0625rem;--hr-color: lightgray;--hr-my: 1.5rem;--hr-style: dotted;border:none;border-bottom:var(--hr-h) var(--hr-style) var(--hr-color);margin-block:var(--hr-my)}h1[data-ui~=display],h1:has(span:first-of-type)>span,h2[data-ui~=display],h2:has(span:first-of-type)>span,h3[data-ui~=display],h3:has(span:first-of-type)>span,h4[data-ui~=display],h4:has(span:first-of-type)>span,h5[data-ui~=display],h5:has(span:first-of-type)>span,h6[data-ui~=display],h6:has(span:first-of-type)>span{--weight: 600;--title-1: var(--h1);--title-2: var(--h2);--title-3: var(--h3);--title-4: var(--h4);--title-5: var(--h5);--title-6: var(--h6)}button{--btn-xs: 0.6875rem;--btn-sm: 0.8125rem;--btn-md: 0.9375rem;--btn-lg: 1.125rem;--btn-pill: 100rem;--btn-fs: var(--btn-md);--btn-height: calc(var(--btn-fs) * 2.25);--btn-bg: lightgray;--btn-width: max-content;font-size:var(--btn-fs);font-weight:var(--btn-fw, 500);height:var(--btn-height);place-items:var(--btn-place, center);padding-inline:var(--btn-px, calc(var(--btn-fs) * 1.5));padding-block:var(--btn-py, calc(var(--btn-fs) * 0.5));border:var(--btn-bdr, none);border-radius:var(--btn-rds, 0.375rem);text-decoration:var(--btn-deco, none);color:var(--btn-cl, currentColor);display:var(--btn-dsp, inline-flex);gap:var(--btn-gap, 0.2rem);white-space:var(--btn-wspc, inherit);margin:var(--btn-spc, 0);transition:var(--btn-transition, var(--tran-all, all 0.3s cubic-bezier(0.4, 0, 0.2, 1)));background-color:var(--btn-bg, var(--btn));outline:none;width:var(--btn-width);display:inline-flex;align-items:center;line-height:0cap}button[type]{background-color:var(--btn-bg, var(--neutral-300));--btn-bdr: solid var(--btn-sg)}button[type=submit],button[style*=submit]{--btn-bg: var(--primary-500, royal-blue);--btn-color: white}button[disabled],button[aria-disabled=true]{cursor:var(--btn-cursor, not-allowed)}button[disabled]:is(:hover,:focus),button[aria-disabled=true]:is(:hover,:focus){transform:none}button:is(:hover,:focus){filter:var(--btn-hover-filter, brightness(0.85));transform:var(--btn-hover-transform, scale(1.03));outline:var(--btn-hover-outline, thin);outline-offset:var(--line-offset, 1px)}button:is(:hover,:focus)[aria-disabled=true]{transform:none;opacity:var(--btn-opacity, 0.5);filter:none}button[type=reset]{--btn-bg: transparent;--btn-color: gray;--btn-bdr: gray thin solid}button[type=submit]{--btn-bg: var(--primary-700, blue);--btn-cl: #fff;--btn-color: rgb(231, 231, 231);--btn-border: none}button[data-fp-btn~=pill],button[data-btn~=pill],button[data-style~=pill]{border-radius:var(--btn-pill, 100rem)}button[data-btn~=xs],button .btn-xs{--btn-fs: var(--btn-xs);text-transform:uppercase}button[data-btn~=sm],button .btn-sm{--btn-fs: var(--btn-sm)}button[data-btn~=md],button .btn-md{--btn-fs: var(--btn-md)}button[data-btn~=lg],button .btn-lg{--btn-fs: var(--btn-lg)}button[data-btn~=icon],button .btn-icon{padding:unset;height:unset;--btn-bg: transparent;min-width:1.5rem;min-height:1.5rem;text-align:center;display:inline-flex;align-items:center;justify-content:center}button[data-btn~=text],button .btn-text{--btn-bg: transparent;--btn-cl: currentColor;--btn-bdr: none;--btn-height: unset;--btn-width: unset;--btn-py: 0.75rem;--btn-px: 0.75rem}button[data-btn~=text]:is(:hover,:focus),button .btn-text:is(:hover,:focus){background-color:color-mix(in srgb, var(--btn-cl) 10%, transparent);outline:.025rem solid var(--btn-cl);outline-offset:0;filter:none}p[role=note],[role=note],small>span,[data-tag]{--beta: var(--warning-500, orange);--stable: var(--success-500, green);--production: rgb(44, 71, 151);--tag-px: 0.7rem;--tag-py: 0.2rem;--tag-fs: 0.8rem;--tag-radius: 99rem;--tag-bg: lightgray;--tag-fw: 500;--tag-color: currentColor;--tag-display: inline-block;display:var(--tag-display);padding-inline:var(--tag-px);padding-block:var(--tag-py);font-size:var(--tag-fs);color:var(--tag-color);background-color:var(--tag-bg);border-radius:var(--tag-radius)}p[role=note][data-tag~=beta],[role=note][data-tag~=beta],small>span[data-tag~=beta],[data-tag][data-tag~=beta]{background-color:var(--beta)}p[role=note][data-tag~=stable],[role=note][data-tag~=stable],small>span[data-tag~=stable],[data-tag][data-tag~=stable]{--tag-cl: white;--tag-bg: var(--stable)}p[role=note][data-tag~=production],[role=note][data-tag~=production],small>span[data-tag~=production],[data-tag][data-tag~=production]{--tag-color: white;--tag-bg: var(--production)}p[role=note][data-tag~=beta],[role=note][data-tag~=beta],small>span[data-tag~=beta],[data-tag][data-tag~=beta]{--tag-color: currentColor;--tag-bg: var(--beta)}p[role=note][data-tag~=alpha],[role=note][data-tag~=alpha],small>span[data-tag~=alpha],[data-tag][data-tag~=alpha]{--tag-color: currentColor;--tag-bg: var(--beta)}p[role=note][data-tag~=beta],[role=note][data-tag~=beta],small>span[data-tag~=beta],[data-tag][data-tag~=beta]{--tag-color: currentColor;--tag-bg: var(--beta)}p[role=note]{--tag-display: block;--border-radius: 0.5rem}img[alt]{--img-max-width: 100%;--img-height: auto;--img-object-fit: cover;--img-object-position: center;--img-aspect-ratio: auto 2/3;--img-display: inline-block;max-width:var(--img-max-width);max-inline-size:var(--img-max-width);block-size:var(--img-height);display:var(--img-display);vertical-align:middle;object-fit:var(--img-object-fit);object-position:var(--img-object-position);aspect-ratio:var(--img-aspect-ratio);font-style:italic;background-size:cover;background-repeat:no-repeat;shape-margin:var(--spc-3)}figure:has(img[alt]){--fig-display: flex;--fig-p: 0.5rem;--fig-bg: rgba(245, 245, 245, 0.683);--fig-w: fit-content;display:var(--fig-display);position:relative;padding:var(--fig-p);background-color:var(--fig-bg);max-width:var(--fig-w)}figure:has(img[alt])>figcaption{position:absolute;bottom:var(--fig-bottom, var(--fig-p));left:var(--fig-left, var(--fig-p));right:var(--fig-right, var(--fig-p));padding:var(--caption-p, var(--spc-3));background-color:var(--fig-bg)}:root{--card-p: 2rem;--card-bg: #fff;--card-radius: calc(var(--card-p) / 4);--card-position: relative;--card-display: flex;--card-direction: column;--card-gap: 1rem}[data-card],[data-component~=card]{display:var(--card-display);flex-direction:var(--card-direction);gap:var(--card-gap);border-radius:var(--card-radius);background-color:var(--card-bg);text-align:var(--card-align, left)}[data-card] h3,[data-card] h2,[data-component~=card] h3,[data-component~=card] h2{margin-block-end:0;padding-block-end:0}[data-card]+div,[data-component~=card]+div{margin-block-start:0}[data-card]>article,[data-component~=card]>article{display:flex;flex-direction:column;flex:2}[data-card]>*:not(img),[data-component~=card]>*:not(img){padding-inline:var(--card-p)}[data-card]>*:last-child:not(img),[data-component~=card]>*:last-child:not(img){padding-block-end:var(--card-p)}[data-card]>*:first-child:not(img),[data-component~=card]>*:first-child:not(img){padding-block-start:calc(var(--card-p) - .5rem)}[data-card=interactive]{cursor:pointer;transition:box-shadow .2s ease,transform .2s ease}[data-card=interactive]:hover{transform:translateY(-2px);box-shadow:0 .25rem .75rem rgba(0,0,0,.15)}[data-card=interactive]:focus-visible{outline:.125rem solid var(--focus-color, #0066CC);outline-offset:.125rem}[data-card=interactive]:focus:not(:focus-visible){outline:none}progress{all:revert;--progress-w: 100%;--progress-h: 1rem;--progress-bg: #cccccc;--progress-color: rgb(71, 71, 245);--progress-accent-color: var(--progress-color)}progress[value]{width:var(--progress-w);height:var(--progress-h);background-color:var(--progress-bg);accent-color:var(--progress-accent-color)}progress[value]::-webkit-progress-value{background-color:var(--progress-accent-color);accent-color:var(--progress-accent-color)}progress[value]::-moz-progress-bar{background-color:var(--progress-accent-color);accent-color:var(--progress-accent-color)}progress[value]::-webkit-progress-bar{background-color:var(--progress-background-color);accent-color:var(--progress-accent-color)}progress[aria-busy]{width:var(--progress-w);height:var(--progress-h);accent-color:var(--progress-accent-color)}progress[aria-busy]::-webkit-progress-value{accent-color:var(--progress-accent-color)}progress[aria-busy]::-moz-progress-bar{accent-color:var(--progress-accent-color)}progress[aria-busy]::-webkit-progress-bar{accent-color:var(--progress-accent-color)}details{--details-border: 0.0625rem solid #dfdfdf;--details-direction: column;--details-display: flex;--details-gap: 0rem;--details-h: max-content;--details-justify: flex-start;--details-px: 1.5rem;--details-py: 1rem;--details-radius: 0;--details-w: 100%;--max-h-closed: 6.25rem;--max-h-open: 50rem;--summary-align: center;--summary-cursor: pointer;--summary-display: flex;--summary-gap: 0.5rem;--summary-justify: flex-start;--summary-transitions: all 0.75s ease-in-out;interpolate-size:allow-keywords;display:var(--details-display);flex-direction:var(--details-direction);justify-content:var(--details-justify);gap:var(--details-gap);width:var(--details-w);border:var(--details-border);border-left:none;border-right:none;transition:var(--summary-transitions);max-height:var(--max-h-closed);overflow:clip}@starting-style{details{transition:var(--summary-transitions);color:red}}details+details{border-radius:0;border-top:none}details:first-of-type{border-radius:var(--details-radius) var(--details-radius) 0 0}details:last-of-type{border-radius:0 0 var(--details-radius) var(--details-radius)}details:only-of-type{border-radius:var(--details-radius)}details::marker{content:none}details summary{display:var(--summary-display);justify-content:var(--summary-justify);align-items:var(--summary-align);padding-inline:var(--summary-px, var(--details-px));padding-block:var(--summary-py, var(--details-py));gap:var(--summary-gap);list-style:none;border-top-left-radius:var(--details-radius);border-top-right-radius:var(--details-radius);transition:var(--summary-transitions)}details summary::-webkit-details-marker{display:none}details summary:focus-within{outline:none;border-bottom:solid 2px currentColor;background-color:#f5f5f5}details summary:hover{cursor:var(--summary-cursor)}details summary>section{width:var(--details-w)}details .list-styles summary{border-left:none;border-right:none}details>section{padding-inline:var(--details-px);padding-block:var(--details-py);margin-block-start:0;border:1px rgba(0,0,0,0) solid}details[open]{max-height:max-content;transition:var(--summary-transitions)}details[open]>summary{border-bottom:var(--details-border)}details[open]>section{max-height:var(--max-h-open)}@starting-style{details[open]>section{max-height:0}}@supports(transition-behavior: allow-discrete){@starting-style{details{max-height:0;transition:var(--summary-transitions)}}}a[href]{--link-decoration: none;--link-color: #085ab7;--link-bg: transparent;--link-px: 0;--link-py: 0;--link-transition: all 0.75s ease-in-out;--link-fs: 1rem;--link-radius: 0.25rem;--link-skip-ink: auto;--link-decoration-offset: 1.5px;--link-decoration-thickness: 3px;--link-decoration: color: var(--link-color) var(--link-decoration-offset) var(--link-decoration-thickness) var(--link-skip-ink);--link-decoration-thickness: 3px;--link-decoration: color: var(--link-color) var(--link-decoration-offset) var(--link-decoration-thickness) var(--link-skip-ink);color:var(--link-color);font-size:var(--link-fs);text-decoration:var(--link-decoration);text-underline-offset:var(--link-decoration-offset);text-decoration-skip-ink:var(--link-skip-ink);background-color:var(--link-bg);border-radius:var(--link-radius);background-color:var(--link-bg);border-radius:var(--link-radius);font-weight:var(--link-weight)}a[href]>i,a[href]>b{font-weight:var(--link-weight);font-style:normal}a[href]:hover{--link-decoration: underline}a[href]:focus{outline:none;--link-decoration: underline}a[href]:visited,a[href]:active{--link-color: currentColor}a[href]:has(>b),a[href][data-link~=btn],a[href]:has(>i){--link-button-color: var(--link-color);--link-bg: transparent;--link-decoration: none;--link-border: 2px currentColor solid;--link-fs: 0.9rem;background-color:var(--link-bg);font-style:normal;font-size:var(--link-fs);color:var(--link-button-color);padding-inline:var(--link-fs);padding-block:calc(var(--link-fs) - .4rem);border-radius:var(--link-radius, 99rem);display:inline-flex;outline:var(--link-border);--scale-transition: transform 0.25s ease;--scale: scale(1);--scale-to: scale(1.05);transform:var(--scale);transition:var(--scale-transition)}a[href]:has(>b):focus,a[href][data-link~=btn]:focus,a[href]:has(>i):focus{outline:var(--link-border);--link-decoration: none}a[href]:has(>b):hover,a[href][data-link~=btn]:hover,a[href]:has(>i):hover{--link-decoration: none}a[href]:has(>b):hover,a[href][data-link~=btn]:hover,a[href]:has(>i):hover{transform:var(--scale-to)}a[href][data-link~=pill],a[href]:has(>i){--link-radius: 99rem;--link-decoration: none;font-style:normal}a[href][data-link~=pill]:hover,a[href][data-link~=pill]:focus,a[href]:has(>i):hover,a[href]:has(>i):focus{--link-decoration: none}header>section{width:auto}header,[data-hero],[data-grid~=overlay]{--overlay-grid-area: overlay;--overlay-placement: center;--overlay-display: grid;--overlay-padding: 2rem;--overlay-w: 100%;--overlay-h: 40vh;--overlay-max-h: 500px;--overlay-color: currentColor;--overlay-content-w: 80%;--overlay-gap: 2rem;--overlay-bg: whitesmoke;--overlay-px: auto;--overlay-py: auto;--overlay-mx: auto;--overlay-my: auto;grid-template-areas:"overlay";display:var(--overlay-display);place-items:var(--overlay-placement);align-items:var(--overlay-placement);min-height:var(--overlay-h);width:var(--overlay-w);color:var(--overlay-color);background-color:var(--overlay-bg);min-width:20rem}header>*,[data-hero]>*,[data-grid~=overlay]>*{grid-area:overlay}header>img,[data-hero]>img,[data-grid~=overlay]>img{width:var(--overlay-w);background-size:contain}header>div,header>section,[data-hero]>div,[data-hero]>section,[data-grid~=overlay]>div,[data-grid~=overlay]>section{--overlay-display: flex;max-width:var(--overlay-content-w);padding-inline:var(--spc-4);margin-inline:var(--overlay-mx);gap:var(--overlay-gap);text-align:center}header>div p,header>section p,[data-hero]>div p,[data-hero]>section p,[data-grid~=overlay]>div p,[data-grid~=overlay]>section p{width:auto;max-width:60ch;font-size:var(--fs-8);line-height:1.4}header>div>h1,header>div>h2,header>section>h1,header>section>h2,[data-hero]>div>h1,[data-hero]>div>h2,[data-hero]>section>h1,[data-hero]>section>h2,[data-grid~=overlay]>div>h1,[data-grid~=overlay]>div>h2,[data-grid~=overlay]>section>h1,[data-grid~=overlay]>section>h2{line-height:var(--header-lh, 1.1);font-weight:500}header>div>h1,header>section>h1,[data-hero]>div>h1,[data-hero]>section>h1,[data-grid~=overlay]>div>h1,[data-grid~=overlay]>section>h1{font-size:var(--fs-12)}header>div>h2,header>section>h2,[data-hero]>div>h2,[data-hero]>section>h2,[data-grid~=overlay]>div>h2,[data-grid~=overlay]>section>h2{font-size:var(--fs-11)}header>div>h3,header>section>h3,[data-hero]>div>h3,[data-hero]>section>h3,[data-grid~=overlay]>div>h3,[data-grid~=overlay]>section>h3{font-size:var(--fs-10)}main,footer{--content-w: min(100%, 1480px);--content-mx: auto;--content-px: 1rem;--content-gap: 2rem;padding-block:var(--overlay-padding)}main>section,footer>section{width:var(--content-w);margin-inline:var(--content-mx);padding-inline:var(--spc-6)}main{flex:1;font-size:var(--fs-3)}main>section[aria-label],main>section{width:var(--content-w);margin-inline:var(--content-mx)}main>section[aria-label]:has(>article,>aside),main>section:has(>article,>aside){display:flex;flex-wrap:wrap;flex:1;gap:var(--content-gap)}main>section[aria-label]:has(>article,>aside)>article,main>section:has(>article,>aside)>article{flex-basis:0;flex-grow:999;min-inline-size:50%}main>section[aria-label]:has(>article,>aside)>aside,main>section:has(>article,>aside)>aside{flex-basis:20rem;flex-grow:1}footer>div{display:flex;align-items:center;justify-content:center;min-height:5rem;text-align:center}:root{--dialog-min-w: max(20rem, 80%);--dialog-gap: 0.625rem;--dialog-border-color: lightgray;--dialog-border-width: thin;--dialog-border-style: solid;--dialog-border-radius: var(--border-radius);--dialog-padding: 1.5rem;--dialog-padding-inline: 1rem;--dialog-close-color: gray;--dialog-button-bg: transparent;--dialog-button-border: transparent thin solid;--dialog-button-hover-bg: whitesmoke;--dialog-display: flex;--dialog-flex-direction: column;--dialog-focus-color: #0066cc;--dialog-focus-width: 0.125rem;--dialog-focus-offset: 0.125rem;--dialog-focus-outline: var(--dialog-focus-width) solid var(--dialog-focus-color)}@media(prefers-contrast: high){:root{--dialog-border-color: currentColor;--dialog-border-width: 0.125rem;--dialog-close-color: currentColor;--dialog-button-border: currentColor 0.125rem solid;--dialog-focus-width: 0.1875rem}}dialog{width:var(--dialog-min-w);min-width:var(--min-w);gap:var(--dialog-gap);border:var(--dialog-border-color) var(--dialog-border-width) solid;border-radius:var(--dialog-border-radius);padding:var(--dialog-padding);padding-block-start:var(--dialog-padding)}dialog:focus-visible{outline:var(--dialog-focus-outline);outline-offset:var(--dialog-focus-offset)}dialog[open]{display:var(--dialog-display);flex-direction:var(--dialog-flex-direction);gap:var(--dialog-gap)}dialog section{width:100%;display:flex;justify-content:start;gap:var(--dialog-gap);flex-direction:var(--dialog-flex-direction);margin-block-start:0;--sect-y: 0}.dialog-header{display:flex;justify-content:space-between;align-items:center;width:100%;min-width:100%}.dialog-header h3{margin-block-start:0;margin-block-end:0}.dialog-header .dialog-close{margin-block-end:0}.dialog-header button[type=button]{background-color:var(--dialog-button-bg);border:var(--dialog-button-border);cursor:pointer}.dialog-header button[type=button]:hover{border-color:var(--dialog-close-color);background-color:var(--dialog-button-hover-bg)}.dialog-header button[type=button]:focus-visible{outline:var(--dialog-focus-outline);outline-offset:var(--dialog-focus-offset);border-color:var(--dialog-focus-color);background-color:var(--dialog-button-hover-bg)}.dialog-header button[type=button]:focus:not(:focus-visible){outline:none}.alert-dialog-actions,.dialog-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:var(--dialog-footer-justify, flex-end);gap:var(--dialog-gap);width:100%}.alert-dialog-actions button:focus-visible,.dialog-footer button:focus-visible{outline:var(--dialog-focus-outline);outline-offset:var(--dialog-focus-offset)}.alert-dialog-actions button:focus:not(:focus-visible),.dialog-footer button:focus:not(:focus-visible){outline:none}:root{--gap: 1.75rem}:where([data-grid]){--gap: 1.5rem;--grid-column-min-width: 20.3125rem;--grid-gap: var(--gap);--grid-padding: 10px;--grid-justify-content: center;--grid-align-content: center;display:grid;grid-template-columns:repeat(auto-fit, minmax(var(--grid-column-min-width), 1fr));gap:var(--grid-gap);padding:var(--grid-padding);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content)}:where([data-flex]){display:flex;flex-wrap:wrap;margin-block-end:3rem;margin-inline:auto;justify-content:center;gap:var(--gap)}:where([data-flex])>*:has(div,aside,article){flex-basis:calc(var(--col-w, 100%) - var(--card-gap));min-width:var(--col-min-w, 18.75rem)}:where([data-flex~=start]){justify-content:start}:where([data-flex~=end]){justify-content:end}:where([data-flex~=cols-2]){--col-w: 50%}:where([data-flex~=cols-3]){--col-w: 33%}:where([data-flex~=cols-4]){--col-w: 25%}:where([data-flex~=cols-5]){--col-w: 20%}:where([data-flex~=cols-6]){--col-w: 16%}:where([data-flex~=cols-7]){--col-w: 14%}:where([data-flex~=cols-8]){--col-w: 12%}:where([data-flex~=cols-9]){--col-w: 11%}:where([data-flex~=cols-10]){--col-w: 10%}:where([data-flex~=cols-11]){--col-w: 9%}:where([data-flex~=cols-12]){--col-w: 8%}:where([data-flex-grid]){display:grid;grid-template-columns:repeat(auto-fit, minmax(var(--grid-column-min-width, 20.3125rem), 1fr));gap:var(--gap);margin-block-end:3rem;margin-inline:auto;justify-content:center;align-content:start}sup:has(>span){--badge-bg: lightgray;--badge-color: currentColor;--badge-radius: 0.5rem;--badge-padding: 0.3rem;--badge-v-align: 0.5rem;--badge-fs: var(--fs-1);background-color:var(--badge-bg);color:var(--badge-color);padding:var(--badge-padding);border-radius:var(--badge-radius);vertical-align:var(--badge-v-align);font-size:var(--badge-fs)}sup:has(>span) span{color:inherit}sup:has(>span)[data-badge~=rounded]{--badge-radius: 50%;--badge-padding: 0;--badge-size: 1.5625rem;width:var(--badge-size);height:var(--badge-size);display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:.6875rem;font-weight:700;overflow:hidden;box-sizing:border-box}sup:has(>span)[data-badge~=rounded] span{max-width:100%;overflow:hidden;text-overflow:clip;white-space:nowrap;padding:0 .125rem}body>nav,[aria-label~=navbar],.navbar{padding-inline:var(--nav-px, 1rem);min-height:var(--nav-h, fit-content)}@media(max-width: 580px){body>nav,[aria-label~=navbar],.navbar{flex-direction:column;height:fit-content;min-height:fit-content;padding-block:unset;gap:.5rem}}body>nav ul>li,[aria-label~=navbar] ul>li,.navbar ul>li{display:flex;align-items:center;list-style:none;margin:0;padding:0;min-height:100%;padding-inline:var(--nav-px, 0.75rem)}body>nav ul>li:hover,[aria-label~=navbar] ul>li:hover,.navbar ul>li:hover{background-color:var(--nav-hov-bg, whitesmoke)}body>nav ul>li:hover:where(img),[aria-label~=navbar] ul>li:hover:where(img),.navbar ul>li:hover:where(img){background-color:rgba(0,0,0,0)}nav{display:var(--nav-dsp, flex);flex-direction:var(--nav-direction, row);width:var(--nav-w, auto);place-items:var(--nav-align, center);justify-content:var(--nav-justify, space-between);margin-inline:var(--nav-mx, 0);background-color:var(--nav-bg, initial)}nav>section,nav>ul{--nav-dsp: flex;flex-direction:var(--nav-direction, row);display:var(--nav-dsp, flex);gap:var(--nav-gap, 0);font-size:var(--nav-fs, 0.9rem);align-items:var(--nav-align, center);padding-inline:var(--nav-px, 1rem);padding-block:var(--nav-py, 0);height:100%}nav>section[data-list~=block],nav>ul[data-list~=block]{--nav-direction: column}nav>section>div{--py: 0}nav ul>li{display:flex;align-items:center;list-style:none;margin:0;padding:0;min-height:100%;padding-inline:var(--nav-px, 1rem)}nav img[alt]{--px: 0 var(--s1);--w: var(--brand-w, 3.6rem)}nav[data-variant]{background-color:var(--nav-bg);color:var(--nav-cl);font-size:var(--nav-fs, 0.9rem)}nav>div{margin-block-start:0}:root{--input-border-color: gray;--input-appearance: none;--input-bg: inherit;--input-border: none;--input-outline: thin solid var(--input-border-color);--input-px: 0.6rem;--input-py: 0.4rem;--input-radius: --var(--radius);--input-fs: var(--fs);--input-w: clamp(200px, 100%, 500px);--placeholder-color: gray;--placeholder-style: italic;--placeholder-fs: smaller;--form-direction: column;--select-arrow: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><polyline points='6,9 10,13 14,9' stroke='%23000000' stroke-width='1.5' fill='none' /></svg>")}form{display:flex;flex-direction:var(--form-direction);gap:1rem}form>div{display:flex;gap:1rem;flex-direction:var(--form-direction)}form label{display:block}input[type]:not([type=checkbox],[type=radio]),textarea,select{-webkit-appearance:var(--input-appearance);-moz-appearance:var(--input-appearance);appearance:var(--input-appearance);width:var(--input-w);border:var(--input-border);outline:var(--input-outline);padding-inline:var(--input-px);padding-block:var(--input-py);border-radius:var(--input-radius);background-color:var(--input-bg, #fff)}input[type]:not([type=checkbox],[type=radio])::placeholder,textarea::placeholder,select::placeholder{color:var(--placeholder-color);font-style:var(--placeholder-style);font-size:var(--placeholder-fs);text-transform:capitalize}input[type]:not([type=checkbox],[type=radio]):focus-visible,input[type]:not([type=checkbox],[type=radio]):focus,textarea:focus-visible,textarea:focus,select:focus-visible,select:focus{outline-width:medium}input[type]:not([type=checkbox],[type=radio])[aria-required=true]::placeholder,textarea[aria-required=true]::placeholder,select[aria-required=true]::placeholder{color:var(--color-required, var(--placeholder-color));font-weight:600}input[type]:not([type=checkbox],[type=radio])[aria-required=true]::placeholder::after,textarea[aria-required=true]::placeholder::after,select[aria-required=true]::placeholder::after{content:"* "}input[type]:not([type=checkbox],[type=radio])[aria-disabled=true],textarea[aria-disabled=true],select[aria-disabled=true]{--input-border-color: lightgray;cursor:not-allowed;text-transform:capitalize;text-decoration:line-through}select{border:var(--input-outline);outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--select-arrow) no-repeat;background-position:right .5rem top 50%;padding-inline-end:0}nav:not(body>nav),nav[data-breadcrumb]{--breadcrumb-px: unset;--breadcrumb-dsp: flex;--breadcrumb-gap: 0.5rem;--breadcrumb-color: currentColor;--breadcrumb-current-color: rgb(46, 46, 46);--breadcrumb-fs: var(--fs-3);margin-inline:unset;padding-inline:unset}nav:not(body>nav) ol,nav[data-breadcrumb] ol{padding-inline:var(--breadcrumb-px);display:var(--breadcrumb-dsp);gap:var(--breadcrumb-gap)}nav:not(body>nav) ol li,nav[data-breadcrumb] ol li{padding-inline:unset;width:var(--breadcrumb-w, fit-content);text-transform:capitalize;display:flex;color:var(--breadcrumb-color);gap:.5rem;font-size:var(--breadcrumb-fs)}nav:not(body>nav) ol li span[aria-hidden=true],nav[data-breadcrumb] ol li span[aria-hidden=true]{opacity:.6}nav:not(body>nav) ol li a[href],nav[data-breadcrumb] ol li a[href]{font-size:var(--breadcrumb-fs)}nav:not(body>nav) ol li a[href][aria-current],nav[data-breadcrumb] ol li a[href][aria-current]{color:var(--breadcrumb-current-color);text-decoration:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}[role=alert]{--alert-success-bg: #e6f4ea;--alert-success-border: #34a853;--alert-success-text: #1e4620;--alert-error-bg: #fdeded;--alert-error-border: #d32f2f;--alert-error-text: #5f2120;--alert-warning-bg: #fff4e5;--alert-warning-border: #ff9800;--alert-warning-text: #663c00;--alert-info-bg: #e5f6fd;--alert-info-border: #0288d1;--alert-info-text: #084154;--alert-transition-duration: 0.3s;--alert-border: thin solid currentColor;background-color:var(--alert-bg, whitesmoke);border:var(--alert-border, currentColor);color:var(--alert-color, currentColor);padding:var(--alert-padding, var(--spc-4));margin-block-end:var(--alert-margin-block-end);font-size:var(--fs-0);line-height:1.6;display:flex;flex-direction:row;border-radius:var(--alert-border-radius, var(--border-radius));gap:var(--alert-gap, var(--spc-4));transition:opacity var(--alert-transition-duration) ease,transform var(--alert-transition-duration) ease;opacity:1;transform:translateY(0)}[role=alert]:not([data-visible=true]){opacity:0;transform:translateY(-0.5rem)}@media(prefers-reduced-motion: reduce){[role=alert]{transition-duration:.01ms}}[role=alert]:focus{outline:2px solid currentColor;outline-offset:2px}[role=alert]:focus:not(:focus-visible){outline:none}[role=alert] .alert-icon{margin-block-start:0;align-items:center}[role=alert] .alert-message{flex:2;margin-block-start:0}[role=alert] .alert-message .alert-title{margin-block-end:var(--spc-1, 0.25rem);margin-block-start:0;font-weight:var(--alert-title-weight, 600);font-size:var(--alert-title-size, inherit);line-height:1.4}[role=alert] .alert-message h2.alert-title,[role=alert] .alert-message h3.alert-title,[role=alert] .alert-message h4.alert-title,[role=alert] .alert-message h5.alert-title,[role=alert] .alert-message h6.alert-title{margin:0;margin-block-end:var(--spc-1, 0.25rem);font-size:inherit;font-weight:var(--alert-title-weight, 600)}[role=alert][data-alert~=info]{--alert-bg: var(--alert-info-bg);--alert-color: var(--alert-info-text);border-color:var(--alert-info-border)}[role=alert][data-alert~=warning]{--alert-bg: var(--alert-warning-bg);--alert-color: var(--alert-warning-text);border-color:var(--alert-warning-border)}[role=alert][data-alert~=error]{--alert-bg: var(--alert-error-bg);--alert-color: var(--alert-error-text);border-color:var(--alert-error-border)}[role=alert][data-alert~=success]{--alert-bg: var(--alert-success-bg);--alert-color: var(--alert-success-text);border-color:var(--alert-success-border)}[role=alert] button[data-btn~=icon]{--btn-bg: transparent}[role=alert] *+div{margin-block-start:var(--spc-1)}[role=alert][data-variant=filled]{border:none}[role=alert][data-variant=filled][data-alert~=info]{--alert-bg: var(--alert-info-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=warning]{--alert-bg: var(--alert-warning-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=error]{--alert-bg: var(--alert-error-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=success]{--alert-bg: var(--alert-success-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=default]{--alert-bg: #757575;--alert-color: white}[role=alert][data-variant=soft]{border:none}[role=alert] p{font-size:.875rem}[data-tts]{--tts-gap: 0.5rem;--tts-bg: #fff;--tts-border-width: 0.125rem;--tts-border-style: solid;--tts-border-color: currentColor;--tts-radius: 99rem;--tts-padding: 0.5rem;--tts-min-width: 20.3125rem;--tts-align-items: center;--tts-justify-content: center;display:flex;gap:var(--tts-gap);align-items:var(--tts-align-items);justify-content:var(--tts-justify-content);background-color:var(--tts-bg);border:none;outline:var(--tts-border-width) var(--tts-border-style) var(--tts-border-color);border-radius:var(--tts-radius);padding:var(--tts-padding);min-width:var(--tts-min-width)}[data-tts] button[data-btn~=tts-btn],[data-tts] .tts-border{outline:none}[data-tts] button[data-btn~=tts-btn]:hover,[data-tts] .tts-border:hover{outline:var(--tts-border-width) var(--tts-border-style)}:root{--shadow: 0 0 0.525rem 0 rgba(0, 0, 0, 0.1);--shadow-xs: 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.05);--shadow-sm: 0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.1), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.06);--shadow-md: 0 0.25rem 0.375rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem rgba(0, 0, 0, 0.06);--shadow-lg: 0 0.625rem 0.9375rem rgba(0, 0, 0, 0.1), 0 0.25rem 0.375rem rgba(0, 0, 0, 0.08);--shadow-xl: 0 1.25rem 1.5625rem rgba(0, 0, 0, 0.1), 0 0.625rem 0.625rem rgba(0, 0, 0, 0.08)}.shadow-none{box-shadow:none}.shadow{box-shadow:var(--shadow)}.shadow-xs{box-shadow:var(--shadow-xs)}.shadow-sm{box-shadow:var(--shadow-sm)}.shadow-md{box-shadow:var(--shadow-md)}.shadow-lg{box-shadow:var(--shadow-lg)}.shadow-xl{box-shadow:var(--shadow-xl)}:root{--transparent: transparent}.transparent{background-color:var(--transparent)}.transparent-border{border-color:var(--transparent)}.transparent-color{color:var(--transparent)}/*# sourceMappingURL=index.css.map */
1
+ *,*::before,*::after{box-sizing:border-box}::selection{text-shadow:none;color:#fff;background-color:blue}html,body{height:100%;font-size:100%}html:focus-within{scroll-behavior:smooth}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}body{min-height:100vh;text-rendering:optimizeSpeed;line-height:1.5}a:not([class]){text-decoration-skip-ink:auto}a,button{cursor:pointer}img,picture,video,canvas{display:block;max-width:100%;aspect-ratio:auto}img,video,iframe{max-inline-size:100%;block-size:auto}img{max-width:100%;height:auto;vertical-align:middle;font-style:italic;background-repeat:no-repeat;background-size:cover;shape-margin:.75rem}svg{display:inline-block}input,textarea,select{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;font-variant:inherit;line-height:inherit;background-color:inherit}:where(button){font-family:inherit}@media(prefers-reduced-motion: reduce){html:focus-within{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important}}#root,#__next{isolation:isolate}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}*:focus{outline:none;outline-style:auto}b{font-weight:normal}table{border-collapse:collapse}svg{max-width:inline-size;pointer-events:none}svg[role=img]{display:inline-flex;align-items:center;width:auto}:root{--weight: 600;--fs: clamp(0.96rem, 1vw + 0.5rem, 1.6rem);--p: 1rem;--px: var(--p);--py: var(--p);--m: 0.75rem;--mx: var(--m);--my: var(--m);--weight: 600;--radius: 0.5rem;--placeholder-color: gray;--placeholder-style: italic;--placeholder-fs: smaller;--transition: all 0.25s linear;--tran-all: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);--fs-0: clamp(.9rem, 4vw - 1rem, 1.12rem);--fs-1: clamp(0.65rem, 1.3vw + 0.25rem, 0.75rem);--fs-2: clamp(0.7rem, 2vw - 0.5rem, 0.875rem);--fs-3: clamp(0.85rem, 2vw - 0.25rem, 0.925rem);--fs-4: clamp(0.9rem, 2vw - 0.25rem, 1.313rem);--fs-5: clamp(0.94rem, 2vw - 0.25rem, 1.463rem);--fs-6: clamp(1rem, 2vw + 0.75rem, 2rem);--fs-7: clamp(1.1rem, 4vw - 0.25rem, 2.375rem);--fs-8: clamp(1.2rem, 4vw + 0.25rem, 3rem);--fs-9: clamp(1.2rem, 4vw + 0.5rem, 4rem);--fs-10: clamp(1.2rem, 5vw + 0.5rem, 4.5rem);--fs-11: clamp(1.2rem, 5vw + 0.75rem, 5.063rem);--fs-12: clamp(1.5rem, 5vw + 0.9rem, 6.375rem);--fs-xs: var(--fs-1);--fs-sm: var(--fs-3);--fs-base: var(--fs-0);--fs-md: var(--fs-5);--fs-lg: var(--fs-7);--fs-xl: var(--fs-9);--fs-xxl: var(--fs-11);--fs-xxxl: var(--fs-12);--display: var(--fs-12);--display-md: var(--fs-11);--display-sm: var(--fs-10);--h1: var(--fs-11);--h2: var(--fs-9);--h3: var(--fs-8);--h4: var(--fs-7);--h5: var(--fs-6);--h6: var(--fs-5);--spc-0: 0;--spc-1: 0.25rem;--spc-2: 0.5rem;--spc-3: 0.75rem;--spc-4: 1rem;--spc-5: 1.5;--spc-6: 2rem;--spc-7: 2.5rem;--spc-8: 3rem;--spc-9: 3.5rem;--spc-10: 4rem;--spc-11: 4.5rem;--spc-12: 5rem;--spc-13: 6rem;--spc-14: 7rem;--spc-15: 8rem;--spc-16: 9rem;--spc-17: 10rem;--spc-18: 11rem;--spc-19: 12rem;--spc-20: 13rem;--spc: var(--spc-4);--spc-xs: var(--spc-1);--spc-sm: var(--spc-3);--spc-base: var(--spc-5);--spc-md: var(--spc-7);--spc-lg: var(--spc-9);--spc-xl: var(--spc-11);--spc-xxl: var(--spc-13);--vw-xs: 5vw;--vw-sm: 10vw;--vw-md: 20vw;--vw-lg: 50vw;--vw-xl: 80vw;--vw-xxl: 95vw;--vh-xs: 5vh;--vh-sm: 10vh;--vh-md: 20vh;--vh-lg: 50vh;--vh-xl: 80vh;--vh-xxl: 95vh}:root{--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--TRUE: initial;--FALSE: ;--fs-weight: 500;--min-w: 20rem;--border-radius: 0.25rem;--padding: 1.5rem}html{font-family:var(--font-family);font-size:100%}body{display:var(--body-dsp, flex);min-height:100%;flex-direction:var(--body-direction, column);min-width:20.3125rem;font-size:var(--fs-0)}body main{flex-grow:1}body>a[href^="#"]{position:absolute;top:-4rem;left:0;width:100%;display:block;justify-content:flex-start;padding:1rem;z-index:100;transition:top .3s;border-radius:0;background-color:#f5f5f5}body>a[href^="#"]:focus{top:0}div:empty{display:none}main,header,footer,section{font-size:var(--fs-0)}main>section,main>div,header>section,header>div,footer>section,footer>div,section>section,section>div{margin-inline:auto;width:var(--content-w, 80%)}main>div,header>div,footer>div,section>div{text-align:center}section:not(nav){margin-inline:var(--sect-y, auto);padding-block:var(--sect-x, --spc-4)}p{max-width:75ch;max-width:75ch;font-size:var(--fs-0);line-height:1.6}p+p{margin-block-start:1rem}ul,ol{display:var(--li-display, flex);flex-direction:var(--li-direction, column);gap:var(--li-gap, 0.2rem);flex-wrap:var(--li-wrap, nowrap);padding-inline-start:var(--li-ps, var(--spc-3))}ul[role=list],ul[data-list~=unstyled],ol[role=list],ol[data-list~=unstyled]{list-style:var(--li-style, none);margin-block-end:var(--li-my, 0);margin-block-start:var(--li-mx, 0)}ul[data-list~=inline],ol[data-list~=inline]{--li-direction: row;--li-gap: 1rem;--li-wrap: wrap;--li-px: 0;--li-pi: 0}sup{vertical-align:super;font-size:smaller}blockquote{padding:1rem;border-left:5px #d3d3d3 solid}strong{font-weight:var(--fs-weight)}h1,h2,h3,h4,h5,h6{font-weight:var(--fs-weight);margin-block-start:0;margin-block-end:1rem;line-height:1.2}hr{--hr-h: 0.0625rem;--hr-color: lightgray;--hr-my: 1.5rem;--hr-style: dotted;border:none;border-bottom:var(--hr-h) var(--hr-style) var(--hr-color);margin-block:var(--hr-my)}h1[data-ui~=display],h1:has(span:first-of-type)>span,h2[data-ui~=display],h2:has(span:first-of-type)>span,h3[data-ui~=display],h3:has(span:first-of-type)>span,h4[data-ui~=display],h4:has(span:first-of-type)>span,h5[data-ui~=display],h5:has(span:first-of-type)>span,h6[data-ui~=display],h6:has(span:first-of-type)>span{--weight: 600;--title-1: var(--h1);--title-2: var(--h2);--title-3: var(--h3);--title-4: var(--h4);--title-5: var(--h5);--title-6: var(--h6)}.is-disabled,[aria-disabled=true]{--disabled-opacity: 0.6;--disabled-cursor: not-allowed;--disabled-color: hsl(0 0% 40%);opacity:var(--disabled-opacity);cursor:var(--disabled-cursor);color:var(--disabled-color)}.is-disabled:focus-visible,[aria-disabled=true]:focus-visible{outline-width:.125rem;outline-style:solid;outline-offset:.125rem;outline-color:var(--focus-color, currentColor)}button{--btn-xs: 0.6875rem;--btn-sm: 0.8125rem;--btn-md: 0.9375rem;--btn-lg: 1.125rem;--btn-pill: 100rem;--btn-fs: var(--btn-md);--btn-height: calc(var(--btn-fs) * 2.25);--btn-bg: lightgray;--btn-width: max-content;font-size:var(--btn-fs);font-weight:var(--btn-fw, 500);height:var(--btn-height);place-items:var(--btn-place, center);padding-inline:var(--btn-px, calc(var(--btn-fs) * 1.5));padding-block:var(--btn-py, calc(var(--btn-fs) * 0.5));border:var(--btn-bdr, none);border-radius:var(--btn-rds, 0.375rem);text-decoration:var(--btn-deco, none);color:var(--btn-cl, currentColor);display:var(--btn-dsp, inline-flex);gap:var(--btn-gap, 0.2rem);white-space:var(--btn-wspc, inherit);margin:var(--btn-spc, 0);transition:var(--btn-transition, var(--tran-all, all 0.3s cubic-bezier(0.4, 0, 0.2, 1)));background-color:var(--btn-bg, var(--btn));outline:none;width:var(--btn-width);display:inline-flex;align-items:center;line-height:0cap}button[type]{background-color:var(--btn-bg, var(--neutral-300));--btn-bdr: solid var(--btn-sg)}button[type=submit],button[style*=submit]{--btn-bg: var(--primary-500, royal-blue);--btn-color: white}button[disabled],button[aria-disabled=true]{cursor:var(--btn-cursor, not-allowed)}button[disabled]:is(:hover,:focus),button[aria-disabled=true]:is(:hover,:focus){transform:none}button:is(:hover,:focus){filter:var(--btn-hover-filter, brightness(0.85));transform:var(--btn-hover-transform, scale(1.03));outline:var(--btn-hover-outline, thin);outline-offset:var(--line-offset, 1px)}button:is(:hover,:focus)[aria-disabled=true]{transform:none;opacity:var(--btn-opacity, 0.5);filter:none}button[type=reset]{--btn-bg: transparent;--btn-color: gray;--btn-bdr: gray thin solid}button[type=submit]{--btn-bg: var(--primary-700, blue);--btn-cl: #fff;--btn-color: rgb(231, 231, 231);--btn-border: none}button[data-fp-btn~=pill],button[data-btn~=pill],button[data-style~=pill]{border-radius:var(--btn-pill, 100rem)}button[data-btn~=xs],button .btn-xs{--btn-fs: var(--btn-xs);text-transform:uppercase}button[data-btn~=sm],button .btn-sm{--btn-fs: var(--btn-sm)}button[data-btn~=md],button .btn-md{--btn-fs: var(--btn-md)}button[data-btn~=lg],button .btn-lg{--btn-fs: var(--btn-lg)}button[data-btn~=icon],button .btn-icon{padding:unset;height:unset;--btn-bg: transparent;min-width:1.5rem;min-height:1.5rem;text-align:center;display:inline-flex;align-items:center;justify-content:center}button[data-btn~=text],button .btn-text{--btn-bg: transparent;--btn-cl: currentColor;--btn-bdr: none;--btn-height: unset;--btn-width: unset;--btn-py: 0.75rem;--btn-px: 0.75rem}button[data-btn~=text]:is(:hover,:focus),button .btn-text:is(:hover,:focus){background-color:color-mix(in srgb, var(--btn-cl) 10%, transparent);outline:.025rem solid var(--btn-cl);outline-offset:0;filter:none}p[role=note],[role=note],small>span,[data-tag]{--beta: #fbbf24;--stable: #0f7c3e;--production: #1e3a8a;--tag-px: 0.7rem;--tag-py: 0.2rem;--tag-fs: 0.8rem;--tag-radius: 99rem;--tag-bg: lightgray;--tag-fw: 500;--tag-color: currentColor;--tag-display: inline-block;display:var(--tag-display);padding-inline:var(--tag-px);padding-block:var(--tag-py);font-size:var(--tag-fs);color:var(--tag-color);background-color:var(--tag-bg);border-radius:var(--tag-radius)}p[role=note]:focus-visible,[role=note]:focus-visible,small>span:focus-visible,[data-tag]:focus-visible{outline:2px solid currentColor;outline-offset:2px}p[role=note]:focus:not(:focus-visible),[role=note]:focus:not(:focus-visible),small>span:focus:not(:focus-visible),[data-tag]:focus:not(:focus-visible){outline:none}p[role=note][data-tag~=alpha],[role=note][data-tag~=alpha],small>span[data-tag~=alpha],[data-tag][data-tag~=alpha]{--tag-color: #000000;--tag-bg: var(--beta)}p[role=note][data-tag~=alpha]::before,[role=note][data-tag~=alpha]::before,small>span[data-tag~=alpha]::before,[data-tag][data-tag~=alpha]::before{content:"⚠";margin-inline-end:.25rem;font-weight:700;aria-hidden:true}p[role=note][data-tag~=beta],[role=note][data-tag~=beta],small>span[data-tag~=beta],[data-tag][data-tag~=beta]{--tag-color: #000000;--tag-bg: var(--beta)}p[role=note][data-tag~=beta]::before,[role=note][data-tag~=beta]::before,small>span[data-tag~=beta]::before,[data-tag][data-tag~=beta]::before{content:"⚠";margin-inline-end:.25rem;font-weight:700;aria-hidden:true}p[role=note][data-tag~=stable],[role=note][data-tag~=stable],small>span[data-tag~=stable],[data-tag][data-tag~=stable]{--tag-color: #ffffff;--tag-bg: var(--stable)}p[role=note][data-tag~=stable]::before,[role=note][data-tag~=stable]::before,small>span[data-tag~=stable]::before,[data-tag][data-tag~=stable]::before{content:"✓";margin-inline-end:.25rem;font-weight:700;aria-hidden:true}p[role=note][data-tag~=production],[role=note][data-tag~=production],small>span[data-tag~=production],[data-tag][data-tag~=production]{--tag-color: #ffffff;--tag-bg: var(--production)}p[role=note][data-tag~=production]::before,[role=note][data-tag~=production]::before,small>span[data-tag~=production]::before,[data-tag][data-tag~=production]::before{content:"●";margin-inline-end:.25rem;font-weight:700;aria-hidden:true}p[role=note]{--tag-display: block;--tag-radius: 0.5rem}img[alt]{--img-max-width: 100%;--img-height: auto;--img-object-fit: cover;--img-object-position: center;--img-aspect-ratio: auto 2/3;--img-display: inline-block;max-width:var(--img-max-width);max-inline-size:var(--img-max-width);block-size:var(--img-height);display:var(--img-display);vertical-align:middle;object-fit:var(--img-object-fit);object-position:var(--img-object-position);aspect-ratio:var(--img-aspect-ratio);font-style:italic;background-size:cover;background-repeat:no-repeat;shape-margin:var(--spc-3)}figure:has(img[alt]){--fig-display: flex;--fig-p: 0.5rem;--fig-bg: rgba(245, 245, 245, 0.683);--fig-w: fit-content;display:var(--fig-display);position:relative;padding:var(--fig-p);background-color:var(--fig-bg);max-width:var(--fig-w)}figure:has(img[alt])>figcaption{position:absolute;bottom:var(--fig-bottom, var(--fig-p));left:var(--fig-left, var(--fig-p));right:var(--fig-right, var(--fig-p));padding:var(--caption-p, var(--spc-3));background-color:var(--fig-bg)}:root{--card-p: 2rem;--card-bg: #fff;--card-radius: calc(var(--card-p) / 4);--card-position: relative;--card-display: flex;--card-direction: column;--card-gap: 1rem}[data-card],[data-component~=card]{display:var(--card-display);flex-direction:var(--card-direction);gap:var(--card-gap);border-radius:var(--card-radius);background-color:var(--card-bg);text-align:var(--card-align, left)}[data-card] h3,[data-card] h2,[data-component~=card] h3,[data-component~=card] h2{margin-block-end:0;padding-block-end:0}[data-card]+div,[data-component~=card]+div{margin-block-start:0}[data-card]>article,[data-component~=card]>article{display:flex;flex-direction:column;flex:2}[data-card]>*:not(img),[data-component~=card]>*:not(img){padding-inline:var(--card-p)}[data-card]>*:last-child:not(img),[data-component~=card]>*:last-child:not(img){padding-block-end:var(--card-p)}[data-card]>*:first-child:not(img),[data-component~=card]>*:first-child:not(img){padding-block-start:calc(var(--card-p) - .5rem)}[data-card=interactive]{cursor:pointer;transition:box-shadow .2s ease,transform .2s ease}[data-card=interactive]:hover{transform:translateY(-2px);box-shadow:0 .25rem .75rem rgba(0,0,0,.15)}[data-card=interactive]:focus-visible{outline:.125rem solid var(--focus-color, #0066CC);outline-offset:.125rem}[data-card=interactive]:focus:not(:focus-visible){outline:none}progress{all:revert;--progress-w: 100%;--progress-h: 1rem;--progress-bg: #cccccc;--progress-color: rgb(71, 71, 245);--progress-accent-color: var(--progress-color)}progress[value]{width:var(--progress-w);height:var(--progress-h);background-color:var(--progress-bg);accent-color:var(--progress-accent-color)}progress[value]::-webkit-progress-value{background-color:var(--progress-accent-color);accent-color:var(--progress-accent-color)}progress[value]::-moz-progress-bar{background-color:var(--progress-accent-color);accent-color:var(--progress-accent-color)}progress[value]::-webkit-progress-bar{background-color:var(--progress-background-color);accent-color:var(--progress-accent-color)}progress[aria-busy]{width:var(--progress-w);height:var(--progress-h);accent-color:var(--progress-accent-color)}progress[aria-busy]::-webkit-progress-value{accent-color:var(--progress-accent-color)}progress[aria-busy]::-moz-progress-bar{accent-color:var(--progress-accent-color)}progress[aria-busy]::-webkit-progress-bar{accent-color:var(--progress-accent-color)}details{--details-border: 0.0625rem solid #dfdfdf;--details-direction: column;--details-display: flex;--details-gap: 0rem;--details-h: max-content;--details-justify: flex-start;--details-px: 1.5rem;--details-py: 1rem;--details-radius: 0;--details-w: 100%;--max-h-closed: 6.25rem;--max-h-open: 50rem;--summary-align: center;--summary-cursor: pointer;--summary-display: flex;--summary-gap: 0.5rem;--summary-justify: flex-start;--summary-transitions: all 0.75s ease-in-out;interpolate-size:allow-keywords;display:var(--details-display);flex-direction:var(--details-direction);justify-content:var(--details-justify);gap:var(--details-gap);width:var(--details-w);border:var(--details-border);border-left:none;border-right:none;transition:var(--summary-transitions);max-height:var(--max-h-closed);overflow:clip}@starting-style{details{transition:var(--summary-transitions);color:red}}details+details{border-radius:0;border-top:none}details:first-of-type{border-radius:var(--details-radius) var(--details-radius) 0 0}details:last-of-type{border-radius:0 0 var(--details-radius) var(--details-radius)}details:only-of-type{border-radius:var(--details-radius)}details::marker{content:none}details summary{display:var(--summary-display);justify-content:var(--summary-justify);align-items:var(--summary-align);padding-inline:var(--summary-px, var(--details-px));padding-block:var(--summary-py, var(--details-py));gap:var(--summary-gap);list-style:none;border-top-left-radius:var(--details-radius);border-top-right-radius:var(--details-radius);transition:var(--summary-transitions)}details summary::-webkit-details-marker{display:none}details summary:focus-within{outline:none;border-bottom:solid 2px currentColor;background-color:#f5f5f5}details summary:hover{cursor:var(--summary-cursor)}details summary>section{width:var(--details-w)}details .list-styles summary{border-left:none;border-right:none}details>section{padding-inline:var(--details-px);padding-block:var(--details-py);margin-block-start:0;border:1px rgba(0,0,0,0) solid}details[open]{max-height:max-content;transition:var(--summary-transitions)}details[open]>summary{border-bottom:var(--details-border)}details[open]>section{max-height:var(--max-h-open)}@starting-style{details[open]>section{max-height:0}}@supports(transition-behavior: allow-discrete){@starting-style{details{max-height:0;transition:var(--summary-transitions)}}}a[href]{--link-color: #085ab7;--link-weight: 400;--link-fs: 1rem;--link-decoration: none;--link-decoration-offset: 0.09375rem;--link-decoration-thickness: 0.0625rem;--link-skip-ink: auto;--link-bg: transparent;--link-radius: 0.25rem;--link-px: 0;--link-py: 0;--link-transition: all 0.75s ease-in-out;--link-focus-color: currentColor;--link-focus-width: 0.125rem;--link-focus-offset: 0.125rem;--link-focus-style: solid;color:var(--link-color);font-size:var(--link-fs);font-weight:var(--link-weight);text-decoration:var(--link-decoration);text-underline-offset:var(--link-decoration-offset);text-decoration-thickness:var(--link-decoration-thickness);text-decoration-skip-ink:var(--link-skip-ink);background-color:var(--link-bg);border-radius:var(--link-radius);transition:var(--link-transition)}a[href]>i,a[href]>b{font-weight:var(--link-weight);font-style:normal}a[href]:hover{--link-decoration: underline}a[href]:focus{outline:var(--link-focus-width) var(--link-focus-style) var(--link-focus-color);outline-offset:var(--link-focus-offset);--link-decoration: underline}a[href]:focus-visible{outline:var(--link-focus-width) var(--link-focus-style) var(--link-focus-color);outline-offset:var(--link-focus-offset)}a[href]:visited,a[href]:active{--link-color: currentColor}a[href]:has(>b),a[href][data-btn],a[href]:has(>i){--link-button-color: var(--link-color);--link-bg: transparent;--link-decoration: none;--link-border-width: 0.125rem;--link-border-color: currentColor;--link-border-style: solid;--link-fs: 0.9rem;color:var(--link-button-color);background-color:var(--link-bg);font-style:normal;font-size:var(--link-fs);padding-inline:var(--link-fs);padding-block:calc(var(--link-fs) - .4rem);border-radius:var(--link-radius, 99rem);display:inline-flex;align-items:center;justify-content:center;outline:var(--link-border-width) var(--link-border-color) var(--link-border-style);--scale-transition: transform 0.25s ease;--scale: scale(1);--scale-to: scale(1.05);transform:var(--scale);transition:var(--scale-transition)}a[href]:has(>b):focus,a[href]:has(>b):focus-visible,a[href][data-btn]:focus,a[href][data-btn]:focus-visible,a[href]:has(>i):focus,a[href]:has(>i):focus-visible{outline:var(--link-border-width) var(--link-border-color) var(--link-border-style);outline-offset:var(--link-focus-offset);--link-decoration: none}a[href]:has(>b):hover,a[href][data-btn]:hover,a[href]:has(>i):hover{--link-decoration: none}a[href]:has(>b):hover,a[href][data-btn]:hover,a[href]:has(>i):hover{transform:var(--scale-to)}a[href][data-link~=pill],a[href]:has(>i){--link-radius: 99rem;--link-decoration: none;font-style:normal}a[href][data-link~=pill]:hover,a[href][data-link~=pill]:focus,a[href][data-link~=pill]:focus-visible,a[href]:has(>i):hover,a[href]:has(>i):focus,a[href]:has(>i):focus-visible{--link-decoration: none}header,[data-hero],[data-grid~=overlay]{--overlay-grid-area: overlay;--overlay-placement: center;--overlay-display: grid;--overlay-padding: 2rem;--overlay-w: 100%;--overlay-h: 40vh;--overlay-max-h: 500px;--overlay-color: currentColor;--overlay-content-w: 80%;--overlay-gap: 2rem;--overlay-bg: whitesmoke;--overlay-px: auto;--overlay-py: auto;--overlay-mx: auto;--overlay-my: auto;grid-template-areas:"overlay";display:var(--overlay-display);place-items:var(--overlay-placement);align-items:var(--overlay-placement);min-height:var(--overlay-h);width:var(--overlay-w);color:var(--overlay-color);background-color:var(--overlay-bg);min-width:20rem}header>*,[data-hero]>*,[data-grid~=overlay]>*{grid-area:overlay}header>img,[data-hero]>img,[data-grid~=overlay]>img{width:var(--overlay-w);background-size:contain}header>div,header>section,[data-hero]>div,[data-hero]>section,[data-grid~=overlay]>div,[data-grid~=overlay]>section{--overlay-display: flex;max-width:var(--overlay-content-w);padding-inline:var(--spc-4);margin-inline:var(--overlay-mx);gap:var(--overlay-gap);text-align:center}header>div p,header>section p,[data-hero]>div p,[data-hero]>section p,[data-grid~=overlay]>div p,[data-grid~=overlay]>section p{width:auto;max-width:60ch;font-size:var(--fs-8);line-height:1.4}header>div>h1,header>div>h2,header>section>h1,header>section>h2,[data-hero]>div>h1,[data-hero]>div>h2,[data-hero]>section>h1,[data-hero]>section>h2,[data-grid~=overlay]>div>h1,[data-grid~=overlay]>div>h2,[data-grid~=overlay]>section>h1,[data-grid~=overlay]>section>h2{line-height:var(--header-lh, 1.1);font-weight:500}header>div>h1,header>section>h1,[data-hero]>div>h1,[data-hero]>section>h1,[data-grid~=overlay]>div>h1,[data-grid~=overlay]>section>h1{font-size:var(--fs-12)}header>div>h2,header>section>h2,[data-hero]>div>h2,[data-hero]>section>h2,[data-grid~=overlay]>div>h2,[data-grid~=overlay]>section>h2{font-size:var(--fs-11)}header>div>h3,header>section>h3,[data-hero]>div>h3,[data-hero]>section>h3,[data-grid~=overlay]>div>h3,[data-grid~=overlay]>section>h3{font-size:var(--fs-10)}main,footer{--content-w: min(100%, 1480px);--content-mx: auto;--content-px: 1rem;--content-gap: 2rem;padding-block:var(--overlay-padding)}main>section,footer>section{width:var(--content-w);margin-inline:var(--content-mx);padding-inline:var(--spc-6)}main{flex:1;font-size:var(--fs-3)}main>section[aria-label],main>section{width:var(--content-w);margin-inline:var(--content-mx)}main>section[aria-label]:has(>article,>aside),main>section:has(>article,>aside){display:flex;flex-wrap:wrap;flex:1;gap:var(--content-gap)}main>section[aria-label]:has(>article,>aside)>article,main>section:has(>article,>aside)>article{flex-basis:0;flex-grow:999;min-inline-size:50%}main>section[aria-label]:has(>article,>aside)>aside,main>section:has(>article,>aside)>aside{flex-basis:20rem;flex-grow:1}footer>div{display:flex;align-items:center;justify-content:center;min-height:5rem;text-align:center}:root{--dialog-min-w: max(20rem, 80%);--dialog-gap: 0.625rem;--dialog-border-color: lightgray;--dialog-border-width: thin;--dialog-border-style: solid;--dialog-border-radius: var(--border-radius);--dialog-padding: 1.5rem;--dialog-padding-inline: 1rem;--dialog-close-color: gray;--dialog-button-bg: transparent;--dialog-button-border: transparent thin solid;--dialog-button-hover-bg: whitesmoke;--dialog-display: flex;--dialog-flex-direction: column;--dialog-focus-color: #0066cc;--dialog-focus-width: 0.125rem;--dialog-focus-offset: 0.125rem;--dialog-focus-outline: var(--dialog-focus-width) solid var(--dialog-focus-color)}@media(prefers-contrast: high){:root{--dialog-border-color: currentColor;--dialog-border-width: 0.125rem;--dialog-close-color: currentColor;--dialog-button-border: currentColor 0.125rem solid;--dialog-focus-width: 0.1875rem}}dialog{width:var(--dialog-min-w);min-width:var(--min-w);gap:var(--dialog-gap);border:var(--dialog-border-color) var(--dialog-border-width) solid;border-radius:var(--dialog-border-radius);padding:var(--dialog-padding);padding-block-start:var(--dialog-padding)}dialog:focus-visible{outline:var(--dialog-focus-outline);outline-offset:var(--dialog-focus-offset)}dialog[open]{display:var(--dialog-display);flex-direction:var(--dialog-flex-direction);gap:var(--dialog-gap)}dialog section{width:100%;display:flex;justify-content:start;gap:var(--dialog-gap);flex-direction:var(--dialog-flex-direction);margin-block-start:0;--sect-y: 0}.dialog-header{display:flex;justify-content:space-between;align-items:center;width:100%;min-width:100%}.dialog-header h3{margin-block-start:0;margin-block-end:0}.dialog-header .dialog-close{margin-block-end:0}.dialog-header button[type=button]{background-color:var(--dialog-button-bg);border:var(--dialog-button-border);cursor:pointer}.dialog-header button[type=button]:hover{border-color:var(--dialog-close-color);background-color:var(--dialog-button-hover-bg)}.dialog-header button[type=button]:focus-visible{outline:var(--dialog-focus-outline);outline-offset:var(--dialog-focus-offset);border-color:var(--dialog-focus-color);background-color:var(--dialog-button-hover-bg)}.dialog-header button[type=button]:focus:not(:focus-visible){outline:none}.alert-dialog-actions,.dialog-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:var(--dialog-footer-justify, flex-end);gap:var(--dialog-gap);width:100%}.alert-dialog-actions button:focus-visible,.dialog-footer button:focus-visible{outline:var(--dialog-focus-outline);outline-offset:var(--dialog-focus-offset)}.alert-dialog-actions button:focus:not(:focus-visible),.dialog-footer button:focus:not(:focus-visible){outline:none}:root{--gap: 1.75rem}:where([data-grid]){--gap: 1.5rem;--grid-column-min-width: 20.3125rem;--grid-gap: var(--gap);--grid-padding: 10px;--grid-justify-content: center;--grid-align-content: center;display:grid;grid-template-columns:repeat(auto-fit, minmax(var(--grid-column-min-width), 1fr));gap:var(--grid-gap);padding:var(--grid-padding);justify-content:var(--grid-justify-content);align-content:var(--grid-align-content)}:where([data-flex]){display:flex;flex-wrap:wrap;margin-block-end:3rem;margin-inline:auto;justify-content:center;gap:var(--gap)}:where([data-flex])>*:has(div,aside,article){flex-basis:calc(var(--col-w, 100%) - var(--card-gap));min-width:var(--col-min-w, 18.75rem)}:where([data-flex~=start]){justify-content:start}:where([data-flex~=end]){justify-content:end}:where([data-flex~=cols-2]){--col-w: 50%}:where([data-flex~=cols-3]){--col-w: 33%}:where([data-flex~=cols-4]){--col-w: 25%}:where([data-flex~=cols-5]){--col-w: 20%}:where([data-flex~=cols-6]){--col-w: 16%}:where([data-flex~=cols-7]){--col-w: 14%}:where([data-flex~=cols-8]){--col-w: 12%}:where([data-flex~=cols-9]){--col-w: 11%}:where([data-flex~=cols-10]){--col-w: 10%}:where([data-flex~=cols-11]){--col-w: 9%}:where([data-flex~=cols-12]){--col-w: 8%}:where([data-flex-grid]){display:grid;grid-template-columns:repeat(auto-fit, minmax(var(--grid-column-min-width, 20.3125rem), 1fr));gap:var(--gap);margin-block-end:3rem;margin-inline:auto;justify-content:center;align-content:start}sup:has(>span){--badge-bg: lightgray;--badge-color: currentColor;--badge-radius: 0.5rem;--badge-padding: 0.3rem;--badge-v-align: 0.5rem;--badge-fs: var(--fs-1);background-color:var(--badge-bg);color:var(--badge-color);padding:var(--badge-padding);border-radius:var(--badge-radius);vertical-align:var(--badge-v-align);font-size:var(--badge-fs)}sup:has(>span) span{color:inherit}sup:has(>span)[data-badge~=rounded]{--badge-radius: 50%;--badge-padding: 0;--badge-size: 1.5625rem;width:var(--badge-size);height:var(--badge-size);display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:.6875rem;font-weight:700;overflow:hidden;box-sizing:border-box}sup:has(>span)[data-badge~=rounded] span{max-width:100%;overflow:hidden;text-overflow:clip;white-space:nowrap;padding:0 .125rem}body>nav,[aria-label~=navbar],.navbar{padding-inline:var(--nav-px, 1rem);min-height:var(--nav-h, fit-content)}@media(max-width: 580px){body>nav,[aria-label~=navbar],.navbar{flex-direction:column;height:fit-content;min-height:fit-content;padding-block:unset;gap:.5rem}}body>nav ul>li,[aria-label~=navbar] ul>li,.navbar ul>li{display:flex;align-items:center;list-style:none;margin:0;padding:0;min-height:100%;padding-inline:var(--nav-px, 0.75rem)}body>nav ul>li:hover,[aria-label~=navbar] ul>li:hover,.navbar ul>li:hover{background-color:var(--nav-hov-bg, #e8e8e8)}body>nav ul>li:hover:where(img),[aria-label~=navbar] ul>li:hover:where(img),.navbar ul>li:hover:where(img){background-color:rgba(0,0,0,0)}nav{--nav-focus-color: currentColor;--nav-focus-width: 0.125rem;--nav-focus-offset: 0.125rem;--nav-focus-style: solid;display:var(--nav-dsp, flex);flex-direction:var(--nav-direction, row);width:var(--nav-w, auto);place-items:var(--nav-align, center);justify-content:var(--nav-justify, space-between);margin-inline:var(--nav-mx, 0);background-color:var(--nav-bg, initial)}nav>section,nav>ul{--nav-dsp: flex;flex-direction:var(--nav-direction, row);display:var(--nav-dsp, flex);gap:var(--nav-gap, 0);font-size:var(--nav-fs, 0.9rem);align-items:var(--nav-align, center);padding-inline:var(--nav-px, 1rem);padding-block:var(--nav-py, 0);margin-block-end:var(--nav-mb, 0);height:100%}nav>section[data-list~=block],nav>ul[data-list~=block]{--nav-direction: column}nav>section>div{--py: 0}nav ul>li{display:flex;align-items:center;list-style:none;margin:0;padding:0;min-height:100%;padding-inline:var(--nav-px, 1rem)}nav img[alt]{--px: 0 var(--s1);--w: var(--brand-w, 3.6rem)}nav[data-variant]{background-color:var(--nav-bg);color:var(--nav-cl);font-size:var(--nav-fs, 0.9rem)}nav>div{margin-block-start:0}nav a:focus{outline:var(--nav-focus-width) var(--nav-focus-style) var(--nav-focus-color);outline-offset:var(--nav-focus-offset)}nav a:focus-visible{outline:var(--nav-focus-width) var(--nav-focus-style) var(--nav-focus-color);outline-offset:var(--nav-focus-offset)}nav button:focus{outline:var(--nav-focus-width) var(--nav-focus-style) var(--nav-focus-color);outline-offset:var(--nav-focus-offset)}nav button:focus-visible{outline:var(--nav-focus-width) var(--nav-focus-style) var(--nav-focus-color);outline-offset:var(--nav-focus-offset)}:root{--input-border-color: gray;--input-appearance: none;--input-bg: inherit;--input-border: none;--input-outline: thin solid var(--input-border-color);--input-px: 0.6rem;--input-py: 0.4rem;--input-radius: --var(--radius);--input-fs: var(--fs);--input-w: clamp(200px, 100%, 500px);--placeholder-color: gray;--placeholder-style: italic;--placeholder-fs: smaller;--form-direction: column;--select-arrow: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><polyline points='6,9 10,13 14,9' stroke='%23000000' stroke-width='1.5' fill='none' /></svg>")}form{display:flex;flex-direction:var(--form-direction);gap:1rem}form>div{display:flex;gap:1rem;flex-direction:var(--form-direction)}form label{display:block}input[type]:not([type=checkbox],[type=radio]),textarea,select{-webkit-appearance:var(--input-appearance);-moz-appearance:var(--input-appearance);appearance:var(--input-appearance);width:var(--input-w);border:var(--input-border);outline:var(--input-outline);padding-inline:var(--input-px);padding-block:var(--input-py);border-radius:var(--input-radius);background-color:var(--input-bg, #fff)}input[type]:not([type=checkbox],[type=radio])::placeholder,textarea::placeholder,select::placeholder{color:var(--placeholder-color);font-style:var(--placeholder-style);font-size:var(--placeholder-fs);text-transform:capitalize}input[type]:not([type=checkbox],[type=radio]):focus-visible,input[type]:not([type=checkbox],[type=radio]):focus,textarea:focus-visible,textarea:focus,select:focus-visible,select:focus{outline-width:medium}input[type]:not([type=checkbox],[type=radio])[aria-required=true]::placeholder,textarea[aria-required=true]::placeholder,select[aria-required=true]::placeholder{color:var(--color-required, var(--placeholder-color));font-weight:600}input[type]:not([type=checkbox],[type=radio])[aria-required=true]::placeholder::after,textarea[aria-required=true]::placeholder::after,select[aria-required=true]::placeholder::after{content:"* "}input[type]:not([type=checkbox],[type=radio])[aria-disabled=true],textarea[aria-disabled=true],select[aria-disabled=true]{--input-border-color: lightgray;cursor:not-allowed;text-transform:capitalize;text-decoration:line-through}select{border:var(--input-outline);outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--select-arrow) no-repeat;background-position:right .5rem top 50%;padding-inline-end:0}nav:not(body>nav),nav[data-breadcrumb]{--breadcrumb-px: unset;--breadcrumb-dsp: flex;--breadcrumb-gap: 0.5rem;--breadcrumb-color: currentColor;--breadcrumb-current-color: rgb(46, 46, 46);--breadcrumb-fs: var(--fs-3);margin-inline:unset;padding-inline:unset}nav:not(body>nav) ol,nav[data-breadcrumb] ol{padding-inline:var(--breadcrumb-px);display:var(--breadcrumb-dsp);gap:var(--breadcrumb-gap)}nav:not(body>nav) ol li,nav[data-breadcrumb] ol li{padding-inline:unset;width:var(--breadcrumb-w, fit-content);text-transform:capitalize;display:flex;color:var(--breadcrumb-color);gap:.5rem;font-size:var(--breadcrumb-fs)}nav:not(body>nav) ol li span[aria-hidden=true],nav[data-breadcrumb] ol li span[aria-hidden=true]{opacity:.6}nav:not(body>nav) ol li a[href],nav[data-breadcrumb] ol li a[href]{font-size:var(--breadcrumb-fs)}nav:not(body>nav) ol li a[href][aria-current],nav[data-breadcrumb] ol li a[href][aria-current]{color:var(--breadcrumb-current-color);text-decoration:none}ul,ol,dl{--list-margin-top: 0;--list-margin-bottom: 1rem;--list-margin-inline: 0;--list-padding-inline: 2.5rem;--list-gap: 0.5rem;--list-marker-color: currentColor;--list-marker-size: 1em;--list-marker-offset: 0.5rem;--list-font-size: 1rem;--list-line-height: 1.5;--list-font-family: inherit;--list-color: inherit;--list-item-margin-bottom: 0.5rem;--list-item-padding-inline: 0;--list-item-padding-block: 0;--dt-font-weight: 600;--dt-margin-bottom: 0.25rem;--dd-margin-inline-start: 2rem;--dd-margin-bottom: 1rem}ul,ol,dl{margin-block-start:var(--list-margin-top);margin-block-end:var(--list-margin-bottom);margin-inline:var(--list-margin-inline);padding-inline-start:var(--list-padding-inline);font-size:var(--list-font-size);line-height:var(--list-line-height);font-family:var(--list-font-family);color:var(--list-color)}ul ul,ul ol,ul dl,ol ul,ol ol,ol dl,dl ul,dl ol,dl dl{margin-block-start:var(--list-gap);margin-block-end:var(--list-gap)}ul{list-style-type:disc}ul::marker{color:var(--list-marker-color);font-size:var(--list-marker-size)}ul ul{list-style-type:circle}ul ul ul{list-style-type:square}ol{list-style-type:decimal}ol::marker{color:var(--list-marker-color);font-size:var(--list-marker-size)}ol ol{list-style-type:lower-alpha}ol ol ol{list-style-type:lower-roman}li{margin-block-end:var(--list-item-margin-bottom);padding-inline:var(--list-item-padding-inline);padding-block:var(--list-item-padding-block);padding-inline-start:var(--list-marker-offset)}li:last-child{margin-block-end:0}dl{padding-inline-start:0}dt{font-weight:var(--dt-font-weight);margin-block-end:var(--dt-margin-bottom);padding-inline:var(--list-item-padding-inline);padding-block:var(--list-item-padding-block)}dd{margin-inline-start:var(--dd-margin-inline-start);margin-block-end:var(--dd-margin-bottom);padding-inline:var(--list-item-padding-inline);padding-block:var(--list-item-padding-block)}dd:last-child{margin-block-end:0}ul[data-variant=none],ol[data-variant=none],dl[data-variant=none]{list-style-type:none;padding-inline-start:0}ul[data-variant=none] li,ol[data-variant=none] li,dl[data-variant=none] li{padding-inline-start:0}ul[data-variant=inline],ol[data-variant=inline],dl[data-variant=inline]{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--list-gap);padding-inline-start:0;list-style-type:none}ul[data-variant=inline] li,ol[data-variant=inline] li,dl[data-variant=inline] li{padding-inline-start:0;margin-block-end:0}ul[data-variant=custom],ol[data-variant=custom],dl[data-variant=custom]{list-style-type:none;padding-inline-start:0}ul[data-variant=custom] li,ol[data-variant=custom] li,dl[data-variant=custom] li{position:relative;padding-inline-start:calc(var(--list-marker-size) + var(--list-marker-offset))}ul[data-variant=custom] li::before,ol[data-variant=custom] li::before,dl[data-variant=custom] li::before{content:var(--list-marker-content, "•");color:var(--list-marker-color);font-size:var(--list-marker-size);position:absolute;left:0}ul[data-variant=compact],ol[data-variant=compact],dl[data-variant=compact]{--list-gap: 0.25rem;--list-item-margin-bottom: 0.25rem;--list-margin-bottom: 0.5rem}ul[data-variant=spaced],ol[data-variant=spaced],dl[data-variant=spaced]{--list-gap: 1rem;--list-item-margin-bottom: 1rem}li:has(a:focus-visible),li:has(button:focus-visible){outline:.0625rem solid rgba(0,0,0,0)}li:has(>a),li:has(>button){margin-block-end:0}@media print{ul,ol,dl{--list-margin-bottom: 0.5rem;--list-item-margin-bottom: 0.25rem}ul,ol{list-style-position:inside}}@media(prefers-reduced-motion: reduce){ul,ol,dl,li,dt,dd{animation:none;transition:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}[role=alert]{--alert-success-bg: #e6f4ea;--alert-success-border: #34a853;--alert-success-text: #1e4620;--alert-error-bg: #fdeded;--alert-error-border: #d32f2f;--alert-error-text: #5f2120;--alert-warning-bg: #fff4e5;--alert-warning-border: #ff9800;--alert-warning-text: #663c00;--alert-info-bg: #e5f6fd;--alert-info-border: #0288d1;--alert-info-text: #084154;--alert-transition-duration: 0.3s;--alert-border: thin solid currentColor;background-color:var(--alert-bg, whitesmoke);border:var(--alert-border, currentColor);color:var(--alert-color, currentColor);padding:var(--alert-padding, var(--spc-4));margin-block-end:var(--alert-margin-block-end);font-size:var(--fs-0);line-height:1.6;display:flex;flex-direction:row;border-radius:var(--alert-border-radius, var(--border-radius));gap:var(--alert-gap, var(--spc-4));transition:opacity var(--alert-transition-duration) ease,transform var(--alert-transition-duration) ease;opacity:1;transform:translateY(0)}[role=alert]:not([data-visible=true]){opacity:0;transform:translateY(-0.5rem)}@media(prefers-reduced-motion: reduce){[role=alert]{transition-duration:.01ms}}[role=alert]:focus{outline:2px solid currentColor;outline-offset:2px}[role=alert]:focus:not(:focus-visible){outline:none}[role=alert] .alert-icon{margin-block-start:0;align-items:center}[role=alert] .alert-message{flex:2;margin-block-start:0}[role=alert] .alert-message .alert-title{margin-block-end:var(--spc-1, 0.25rem);margin-block-start:0;font-weight:var(--alert-title-weight, 600);font-size:var(--alert-title-size, inherit);line-height:1.4}[role=alert] .alert-message h2.alert-title,[role=alert] .alert-message h3.alert-title,[role=alert] .alert-message h4.alert-title,[role=alert] .alert-message h5.alert-title,[role=alert] .alert-message h6.alert-title{margin:0;margin-block-end:var(--spc-1, 0.25rem);font-size:inherit;font-weight:var(--alert-title-weight, 600)}[role=alert][data-alert~=info]{--alert-bg: var(--alert-info-bg);--alert-color: var(--alert-info-text);border-color:var(--alert-info-border)}[role=alert][data-alert~=warning]{--alert-bg: var(--alert-warning-bg);--alert-color: var(--alert-warning-text);border-color:var(--alert-warning-border)}[role=alert][data-alert~=error]{--alert-bg: var(--alert-error-bg);--alert-color: var(--alert-error-text);border-color:var(--alert-error-border)}[role=alert][data-alert~=success]{--alert-bg: var(--alert-success-bg);--alert-color: var(--alert-success-text);border-color:var(--alert-success-border)}[role=alert] button[data-btn~=icon]{--btn-bg: transparent;align-items:flex-start}[role=alert][data-variant=filled]{border:none}[role=alert][data-variant=filled][data-alert~=info]{--alert-bg: var(--alert-info-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=warning]{--alert-bg: var(--alert-warning-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=error]{--alert-bg: var(--alert-error-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=success]{--alert-bg: var(--alert-success-border);--alert-color: white}[role=alert][data-variant=filled][data-alert~=default]{--alert-bg: #757575;--alert-color: white}[role=alert][data-variant=soft]{border:none}[role=alert] p{font-size:.875rem}[data-tts]{--tts-gap: 0.5rem;--tts-bg: #fff;--tts-border-width: 0.125rem;--tts-border-style: solid;--tts-border-color: currentColor;--tts-radius: 99rem;--tts-padding: 0.5rem;--tts-min-width: 20.3125rem;--tts-align-items: center;--tts-justify-content: center;display:flex;gap:var(--tts-gap);align-items:var(--tts-align-items);justify-content:var(--tts-justify-content);background-color:var(--tts-bg);border:none;outline:var(--tts-border-width) var(--tts-border-style) var(--tts-border-color);border-radius:var(--tts-radius);padding:var(--tts-padding);min-width:var(--tts-min-width)}[data-tts] button[data-btn~=tts-btn],[data-tts] .tts-border{outline:none}[data-tts] button[data-btn~=tts-btn]:hover,[data-tts] .tts-border:hover{outline:var(--tts-border-width) var(--tts-border-style)}:root{--shadow: 0 0 0.525rem 0 rgba(0, 0, 0, 0.1);--shadow-xs: 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.05);--shadow-sm: 0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.1), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.06);--shadow-md: 0 0.25rem 0.375rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem rgba(0, 0, 0, 0.06);--shadow-lg: 0 0.625rem 0.9375rem rgba(0, 0, 0, 0.1), 0 0.25rem 0.375rem rgba(0, 0, 0, 0.08);--shadow-xl: 0 1.25rem 1.5625rem rgba(0, 0, 0, 0.1), 0 0.625rem 0.625rem rgba(0, 0, 0, 0.08)}.shadow-none{box-shadow:none}.shadow{box-shadow:var(--shadow)}.shadow-xs{box-shadow:var(--shadow-xs)}.shadow-sm{box-shadow:var(--shadow-sm)}.shadow-md{box-shadow:var(--shadow-md)}.shadow-lg{box-shadow:var(--shadow-lg)}.shadow-xl{box-shadow:var(--shadow-xl)}:root{--transparent: transparent}.transparent{background-color:var(--transparent)}.transparent-border{border-color:var(--transparent)}.transparent-color{color:var(--transparent)}/*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../src/sass/_reset.scss","../src/sass/_properties.scss","../src/sass/_globals.scss","../src/sass/_elements.scss","../src/components/buttons/button.scss","../src/components/tag/tag.scss","../src/components/images/img.scss","../src/components/cards/card.scss","../src/components/progress/progress.scss","../src/components/details/details.scss","../src/components/link/link.scss","../src/sass/_mixins.scss","../src/components/layout/_header.scss","../src/components/layout/landmarks.scss","../src/components/dialog/dialog.scss","../src/sass/_grid.scss","../src/components/badge/badge.scss","../src/components/nav/nav.scss","../src/components/form/form.scss","../src/components/breadcrumbs/breadcrumb.scss","../src/components/alert/alert.scss","../src/components/text-to-speech/text-to-speech.scss","../src/sass/styles/_shadows.scss","../src/sass/styles/_colors.scss"],"names":[],"mappings":"AAAA,qBAGE,sBAGF,YAGE,iBAIA,WACA,sBAMF,UAEE,YACA,eAIF,kBACE,uBAIF,2CAUE,SAeF,KACE,iBACA,6BACA,gBAIF,eACE,8BAGF,SAEE,eAIF,yBAIE,cACA,eACA,kBAGF,iBAGE,qBACA,gBAGF,IACE,eACA,YACA,sBACA,kBACA,4BACA,sBACA,oBAGF,IACE,qBAIF,sBAGE,oBACA,kBACA,mBACA,oBACA,qBACA,oBACA,yBAIF,eACE,oBAIF,uCACE,kBACE,qBAGF,qBAGE,oCACA,uCACA,qCACA,iCAKJ,cAEE,kBAGF,oBAOE,yBAGF,QACE,aACA,mBAGF,EACE,mBAIF,MACE,yBAGF,IACE,sBAMA,oBAEA,cACE,oBACA,mBACA,WCpLJ,MACE,cACA,2CACA,UACA,eACA,eACA,aACA,eACA,eACA,cACA,iBACA,0BACA,4BACA,0BACA,+BACA,kDAGA,0CACA,iDACA,8CACA,gDACA,+CACA,gDACA,yCACA,+CACA,2CACA,0CACA,6CACA,gDACA,+CAEA,qBACA,qBACA,uBACA,qBACA,qBACA,qBACA,uBACA,wBAEA,wBAEA,2BACA,2BAGA,mBAEA,kBAEA,kBAEA,kBAEA,kBAEA,kBAEA,WACA,iBACA,gBACA,iBACA,cACA,aACA,cACA,gBACA,cACA,gBACA,eACA,iBACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBAGA,oBACA,uBACA,uBACA,yBACA,uBACA,uBACA,wBACA,yBAGA,aACA,cACA,cACA,cACA,cACA,eAGA,aACA,cACA,cACA,cACA,cACA,eCzGF,MACE,6LAGA,gBACA,UACA,iBACA,eACA,yBACA,kBAGF,KACE,+BACA,eAGF,KACE,8BACA,gBACA,6CACA,qBACA,sBAEA,UACE,YAGF,kBACE,kBACA,UACA,OACA,WACA,cACA,2BACA,aACA,YACA,mBACA,gBAEA,yBACA,wBACE,MAKN,qBAGE,wBACA,uCACE,aAIJ,2BAIE,sBACA,sGAEE,mBACA,4BAEF,2CACE,kBAKF,iBACE,kCACA,qCAIJ,EACE,eACA,eACA,sBACA,gBAEA,IACE,wBAIJ,MAEE,gCACA,2CACA,0BACA,iCACA,gDACA,4EAEE,iCACA,iCACA,mCAEF,4CACE,oBACA,eACA,gBACA,WACA,WAIJ,IACE,qBACA,kBAGF,WACE,aACA,8BAGF,OACE,6BAGF,kBAME,6BACA,qBACA,sBACA,gBAGF,GACE,kBACA,sBACA,gBACA,mBACA,YACA,0DACA,0BC1IA,8TAEE,cACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBCdJ,OACE,oBACA,oBACA,oBACA,mBACA,mBACA,wBACA,yCACA,oBACA,yBAEA,wBACA,+BACA,yBACA,qCACA,wDACA,uDACA,4BACA,uCACA,sCACA,kCACA,oCACA,2BACA,qCACA,yBACA,yFAIA,2CACA,aACA,uBACA,oBACA,mBACA,iBAEA,aACE,mDACA,+BAGF,0CAEE,yCACA,mBAGF,4CAEE,sCAGA,gFACE,eAOJ,yBAEE,iDACA,kDACA,uCACA,uCAGA,6CACE,eACA,gCACA,YAIJ,mBACE,sBACA,kBACA,2BAGF,oBACE,mCACA,eACA,gCACA,mBAGF,0EAGE,sCAGF,oCAEE,wBACA,yBAGF,oCAEE,wBAGF,oCAEE,wBAGF,oCAEE,wBAGF,wCAEE,cACA,aACA,sBACA,iBACA,kBACA,kBACA,oBACA,mBACA,uBAGF,wCAEE,sBACA,uBACA,gBACA,oBACA,mBACA,kBACA,kBACA,4EACE,oEACA,oCACA,iBACA,YC7IN,+CAIE,mCACA,oCACA,+BACA,iBACA,iBACA,iBACA,oBACA,oBACA,cACA,0BACA,4BAEA,2BACA,6BACA,4BACA,wBACA,uBACA,+BACA,gCAEA,+GACE,6BAGF,uHACE,gBACA,wBAGF,uIACE,mBACA,4BAGF,+GACE,0BACA,sBAGF,mHACE,0BACA,sBAEF,+GACE,0BACA,sBAGJ,aACE,qBACA,wBChDF,SAEE,sBACA,mBACA,wBACA,8BACA,6BACA,4BAGA,+BACA,qCACA,6BACA,2BACA,sBAGA,iCACA,2CACA,qCAGA,kBAGA,sBACA,4BAGA,0BAIA,qBACE,oBACA,gBACA,qCACA,qBACA,2BACA,kBACA,qBACA,+BACA,uBACA,gCACE,kBACA,uCACA,mCACA,qCACA,uCACA,+BCvDN,MACE,eACA,gBACA,uCACA,0BACA,qBACA,yBACA,iBAGF,mCAEE,4BACA,qCACA,oBACA,iCACA,gCACA,mCAEA,kFAEE,mBACA,oBAEF,2CACE,qBAEF,mDACE,aACA,sBACA,OAGF,yDACE,6BAEF,+EAEE,gCAEF,iFACE,gDAKJ,wBACE,eACA,kDAEA,8BACE,2BACA,2CAIF,sCACE,kDACA,uBAIF,kDACE,aC/DJ,SAEE,WACA,mBACA,mBACA,uBACA,mCACA,+CAKA,gBAEE,wBACA,yBACA,oCACA,0CAGA,wCAEE,8CACA,0CAIF,mCAEE,8CACA,0CAIF,sCAEE,kDACA,0CAKJ,oBAEE,wBACA,yBAEA,0CAEA,4CAGE,0CAGF,uCAGE,0CAIF,0CAGE,0CCjEN,QACE,0CACA,4BACA,wBACA,oBACA,yBACA,8BACA,qBACA,mBACA,oBACA,kBACA,wBACA,oBACA,wBACA,0BACA,wBACA,sBACA,8BACA,6CAEA,gCACA,+BACA,wCACA,uCACA,uBACA,uBACA,6BACA,iBACA,kBACA,sCACA,+BACA,cAEA,gBAjCF,QAkCI,sCACA,WAGF,gBACE,gBACA,gBAGF,sBACE,8DAGF,qBACE,8DAIF,qBACE,oCAGF,gBACE,aAGF,gBACE,+BACA,uCACA,iCACA,oDACA,mDACA,uBACA,gBACA,6CACA,8CACA,sCAEA,wCACE,aAGF,6BACE,aACA,qCACA,yBAIF,sBACE,6BAEF,wBACE,uBAKF,6BACE,iBACA,kBAIJ,gBACE,iCACA,gCACA,qBACA,+BAGF,cACE,uBACA,sCACA,sBACE,oCAEF,sBACE,6BACA,gBAFF,sBAGI,cAKN,+CACE,gBAxHJ,QAyHM,aACA,wCCxHN,QACE,wBACA,sBACA,uBACA,aACA,aACA,yCACA,gBACA,uBACA,sBACA,gCACA,iCACA,gIAEA,iCACA,gIAGA,wBACA,yBACA,uCACA,oDACA,8CACA,gCACA,iCACA,gCACA,iCACA,+BAEA,oBAEE,+BACA,kBAGF,cACE,6BAGF,cACE,aACA,6BAGF,+BAEE,2BAGF,wDAGE,uCACA,uBACA,wBACA,sCACA,kBACA,gCACA,kBACA,yBACA,+BACA,8BACA,2CACA,wCACA,oBACA,2BClEF,yCACA,kBACA,wBACA,uBACA,mCD+DE,0EACE,2BACA,wBAEF,0EACE,wBCnEJ,0EACE,0BDsEF,yCAEE,qBACA,wBACA,kBACA,0GAEE,wBAKN,eACE,WE1FF,wCAIE,6BAEA,4BAEA,wBAEA,wBACA,kBACA,kBACA,uBACA,8BACA,yBACA,oBACA,yBACA,mBACA,mBACA,mBACA,mBAEA,8BACA,+BACA,qCACA,qCACA,4BACA,uBACA,2BACA,mCACA,gBACA,8CACE,kBAEF,oDACE,uBAEA,wBAEF,oHAEE,wBACA,mCACA,4BACA,gCACA,uBACA,kBACA,gIACE,WACA,eACA,sBACA,gBAEF,4QAEE,kCACA,gBAGF,sIACE,uBAEF,sIACE,uBAEF,sIACE,uBChEN,YAEE,+BACA,mBACA,mBACA,oBACA,qCACA,4BACE,uBACA,gCACA,4BAIJ,KACE,OACA,sBACA,sCAEE,uBACA,gCACA,gFACE,aACA,eACA,OACA,uBACA,gGACE,aACA,cACA,oBAEF,4FACE,iBACA,YAON,WACE,aACA,mBACA,uBACA,gBACA,kBChDJ,MACE,gCACA,uBACA,iCACA,4BACA,6BACA,6CACA,yBACA,8BACA,2BACA,gCACA,+CACA,qCACA,uBACA,gCAGA,8BACA,+BACA,gCACA,kFAIF,+BACE,MACE,oCACA,gCACA,mCACA,oDACA,iCAIJ,OACE,0BACA,uBACA,sBACA,mEACA,0CACA,8BACA,0CAGA,qBACE,oCACA,0CAGF,aACE,8BACA,4CACA,sBAGF,eACE,WACA,aACA,sBACA,sBACA,4CACA,qBACA,YAIJ,eACE,aACA,8BACA,mBACA,WACA,eAEA,kBACE,qBACA,mBAGF,6BACE,mBAGF,mCACE,yCACA,mCACA,eAEA,yCACE,uCACA,+CAIF,iDACE,oCACA,0CACA,uCACA,+CAIF,6DACE,aAKN,qCAEE,aACA,mBACA,eACA,uDACA,sBACA,WAGA,+EACE,oCACA,0CAGF,uGACE,aC3HJ,MACE,eAGF,oBACE,cACA,oCACA,uBACA,qBACA,+BACA,6BACA,aACA,kFAIA,oBACA,4BACA,4CACA,wCAGF,oBACE,aACA,eACA,sBAEA,mBACA,uBACA,eACA,6CACE,sDACA,qCAIJ,2BACE,sBAGF,yBACE,oBAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,6BACE,aAGF,6BACE,YAGF,6BACE,YAGF,yBACE,aACA,8FAIA,eACA,sBACA,mBACA,uBACA,oBClGF,eACE,sBACA,4BACA,uBACA,wBACA,wBACA,wBACA,iCACA,yBACA,6BACA,kCACA,oCACA,0BACA,oBACE,cAEF,oCACE,oBACA,mBACA,wBACA,wBACA,yBACA,oBACA,mBACA,uBACA,cACA,mBACA,gBACA,gBACA,sBACA,yCACE,eACA,gBACA,mBACA,mBACA,kBCnCN,sCAEE,mCACA,qCAEA,yBALF,sCAMI,sBACA,mBACA,uBACA,oBACA,WAGA,wDACE,aACA,mBACA,gBACA,SACA,UACA,gBACA,sCAEA,0EACE,+CAEF,2GACE,+BAMR,IACE,6BACA,yCACA,yBACA,qCACA,kDACA,+BACA,wCAEA,mBAEE,gBACA,yCACA,6BACA,sBACA,gCACA,qCACA,mCACA,+BACA,YACA,uDACE,wBAKF,gBACE,QAKF,UACE,aACA,mBACA,gBACA,SACA,UACA,gBACA,mCAIJ,aACE,kBACA,4BAGF,kBACE,+BACA,oBACA,gCAGF,QACE,qBCvFJ,MACE,2BACA,yBACA,oBACA,qBACA,sDACA,mBACA,mBACA,gCACA,sBACA,qCACA,0BACA,4BACA,0BACA,yBACA,2MAGF,KACE,aACA,qCACA,SACA,SACE,aACA,SACA,qCAGF,WACE,cAIJ,8DAGE,2CACA,wCACA,mCACA,qBACA,2BACA,6BACA,+BACA,8BACA,kCACA,uCAEA,qGACE,+BACA,oCACA,gCACA,0BAGF,wLACE,qBAKA,iKACE,sDACA,gBACA,sLACE,aAKN,0HACE,gCACA,mBACA,0BACA,6BAIJ,OACE,4BACA,aACA,wBACA,qBACA,gBACA,yCACA,wCACA,qBCrFF,uCAEE,uBACA,uBACA,yBACA,iCACA,4CACA,6BACA,oBACA,qBACA,6CACE,oCACA,8BACA,0BACA,mDACE,qBACA,uCACA,0BACA,aACA,8BACA,UACA,+BACA,iGACE,WAEF,mEACE,+BACA,+FACE,sCACA,qBC5BV,SACE,kBACA,UACA,WACA,UACA,YACA,gBACA,sBACA,mBACA,eAGF,aAEE,4BACA,gCACA,8BAGA,0BACA,8BACA,4BAGA,4BACA,gCACA,8BAGA,yBACA,6BACA,2BAGA,kCAEA,wCAEA,6CACA,yCACA,uCACA,2CACA,+CACA,sBACA,gBACA,aACA,mBACA,+DACA,mCAGA,WACE,8FAEF,UACA,wBAEA,sCACE,UACA,8BAGF,uCAlDF,aAmDI,2BAIF,mBACE,+BACA,mBAIF,uCACE,aAGF,yBACE,qBACA,mBAGF,4BACE,OACA,qBAGA,yCACE,uCACA,qBACA,2CACA,2CACA,gBAIF,uNAKE,SACA,uCACA,kBACA,2CAIJ,+BACE,iCACA,sCACA,sCAGF,kCACE,oCACA,yCACA,yCAGF,gCACE,kCACA,uCACA,uCAGF,kCACE,oCACA,yCACA,yCAIA,oCACE,sBAIJ,mBACE,gCAIF,kCACE,YAEA,oDACE,qCACA,qBAGF,uDACE,wCACA,qBAGF,qDACE,sCACA,qBAGF,uDACE,wCACA,qBAGF,uDACE,oBACA,qBAKJ,gCACE,YAQF,eACE,kBCxLJ,WACE,kBACA,eACA,6BACA,0BACA,iCACA,oBACA,sBACA,4BACA,0BACA,8BAEA,aACA,mBACA,mCACA,2CACA,+BACA,YACA,gFAEA,gCACA,2BACA,+BACA,4DAEE,aACA,wEACE,wDC3BN,MACE,4CACA,sDACA,gGAEA,2FAEA,6FAEA,6FAIF,aACE,gBAEF,QACE,yBAEF,WACE,4BAEF,WACE,4BAEF,WACE,4BAEF,WACE,4BAEF,WACE,4BChCF,MACE,2BAGF,aACE,oCACA,oBACE,gCAEF,mBACE","file":"index.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../src/sass/_reset.scss","../src/sass/_properties.scss","../src/sass/_globals.scss","../src/sass/_elements.scss","../src/styles/utilities/_disabled.scss","../src/components/buttons/button.scss","../src/components/tag/tag.scss","../src/components/images/img.scss","../src/components/cards/card.scss","../src/components/progress/progress.scss","../src/components/details/details.scss","../src/components/link/link.scss","../src/sass/_mixins.scss","../src/components/layout/_header.scss","../src/components/layout/landmarks.scss","../src/components/dialog/dialog.scss","../src/sass/_grid.scss","../src/components/badge/badge.scss","../src/components/nav/nav.scss","../src/components/form/form.scss","../src/components/breadcrumbs/breadcrumb.scss","../src/components/list/list.scss","../src/components/alert/alert.scss","../src/components/text-to-speech/text-to-speech.scss","../src/sass/styles/_shadows.scss","../src/sass/styles/_colors.scss"],"names":[],"mappings":"CAAA,qBAGE,sBAGF,YAGE,iBAIA,WACA,sBAMF,UAEE,YACA,eAIF,kBACE,uBAIF,2CAUE,SAeF,KACE,iBACA,6BACA,gBAIF,eACE,8BAGF,SAEE,eAIF,yBAIE,cACA,eACA,kBAGF,iBAGE,qBACA,gBAGF,IACE,eACA,YACA,sBACA,kBACA,4BACA,sBACA,oBAGF,IACE,qBAIF,sBAGE,oBACA,kBACA,mBACA,oBACA,qBACA,oBACA,yBAIF,eACE,oBAIF,uCACE,kBACE,qBAGF,qBAGE,oCACA,uCACA,qCACA,iCAKJ,cAEE,kBAGF,oBAOE,yBAGF,QACE,aACA,mBAGF,EACE,mBAIF,MACE,yBAGF,IACE,sBAMA,oBAEA,cACE,oBACA,mBACA,WCpLJ,MACE,cACA,2CACA,UACA,eACA,eACA,aACA,eACA,eACA,cACA,iBACA,0BACA,4BACA,0BACA,+BACA,kDAGA,0CACA,iDACA,8CACA,gDACA,+CACA,gDACA,yCACA,+CACA,2CACA,0CACA,6CACA,gDACA,+CAEA,qBACA,qBACA,uBACA,qBACA,qBACA,qBACA,uBACA,wBAEA,wBAEA,2BACA,2BAGA,mBAEA,kBAEA,kBAEA,kBAEA,kBAEA,kBAEA,WACA,iBACA,gBACA,iBACA,cACA,aACA,cACA,gBACA,cACA,gBACA,eACA,iBACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBAGA,oBACA,uBACA,uBACA,yBACA,uBACA,uBACA,wBACA,yBAGA,aACA,cACA,cACA,cACA,cACA,eAGA,aACA,cACA,cACA,cACA,cACA,eCzGF,MACE,6LAGA,gBACA,UACA,iBACA,eACA,yBACA,kBAGF,KACE,+BACA,eAGF,KACE,8BACA,gBACA,6CACA,qBACA,sBAEA,UACE,YAGF,kBACE,kBACA,UACA,OACA,WACA,cACA,2BACA,aACA,YACA,mBACA,gBAEA,yBACA,wBACE,MAKN,UACE,aAGF,2BAIE,sBACA,sGAEE,mBACA,4BAEF,2CACE,kBAKF,iBACE,kCACA,qCAIJ,EACE,eACA,eACA,sBACA,gBAEA,IACE,wBAIJ,MAEE,gCACA,2CACA,0BACA,iCACA,gDACA,4EAEE,iCACA,iCACA,mCAEF,4CACE,oBACA,eACA,gBACA,WACA,WAIJ,IACE,qBACA,kBAGF,WACE,aACA,8BAGF,OACE,6BAGF,kBAME,6BACA,qBACA,sBACA,gBAGF,GACE,kBACA,sBACA,gBACA,mBACA,YACA,0DACA,0BCrIA,8TAEE,cACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBCMJ,kCAGE,wBACA,+BAEA,gCAGA,gCACA,8BACA,4BAkBA,8DAEE,sBACA,oBACA,uBAEA,+CCvDJ,OACE,oBACA,oBACA,oBACA,mBACA,mBACA,wBACA,yCACA,oBACA,yBAEA,wBACA,+BACA,yBACA,qCACA,wDACA,uDACA,4BACA,uCACA,sCACA,kCACA,oCACA,2BACA,qCACA,yBACA,yFAIA,2CACA,aACA,uBACA,oBACA,mBACA,iBAEA,aACE,mDACA,+BAGF,0CAEE,yCACA,mBAGF,4CAEE,sCAGA,gFACE,eAOJ,yBAEE,iDACA,kDACA,uCACA,uCAGA,6CACE,eACA,gCACA,YAIJ,mBACE,sBACA,kBACA,2BAGF,oBACE,mCACA,eACA,gCACA,mBAGF,0EAGE,sCAGF,oCAEE,wBACA,yBAGF,oCAEE,wBAGF,oCAEE,wBAGF,oCAEE,wBAGF,wCAEE,cACA,aACA,sBACA,iBACA,kBACA,kBACA,oBACA,mBACA,uBAGF,wCAEE,sBACA,uBACA,gBACA,oBACA,mBACA,kBACA,kBACA,4EACE,oEACA,oCACA,iBACA,YC5HN,+CAKE,gBACA,kBACA,sBAGA,iBACA,iBACA,iBACA,oBACA,oBACA,cACA,0BACA,4BAGA,2BACA,6BACA,4BACA,wBACA,uBACA,+BACA,gCAMA,uGACE,+BACA,mBAIF,uJACE,aAUF,mHACE,qBACA,sBAGA,mJACE,YACA,yBACA,gBACA,iBAKJ,+GACE,qBACA,sBAGA,+IACE,YACA,yBACA,gBACA,iBAKJ,uHACE,qBACA,wBAGA,uJACE,YACA,yBACA,gBACA,iBAKJ,uIACE,qBACA,4BAGA,uKACE,YACA,yBACA,gBACA,iBASN,aACE,qBACA,qBC1HF,SAEE,sBACA,mBACA,wBACA,8BACA,6BACA,4BAGA,+BACA,qCACA,6BACA,2BACA,sBAGA,iCACA,2CACA,qCAGA,kBAGA,sBACA,4BAGA,0BAIA,qBACE,oBACA,gBACA,qCACA,qBACA,2BACA,kBACA,qBACA,+BACA,uBACA,gCACE,kBACA,uCACA,mCACA,qCACA,uCACA,+BCvDN,MACE,eACA,gBACA,uCACA,0BACA,qBACA,yBACA,iBAGF,mCAEE,4BACA,qCACA,oBACA,iCACA,gCACA,mCAEA,kFAEE,mBACA,oBAEF,2CACE,qBAEF,mDACE,aACA,sBACA,OAGF,yDACE,6BAEF,+EAEE,gCAEF,iFACE,gDAKJ,wBACE,eACA,kDAEA,8BACE,2BACA,2CAIF,sCACE,kDACA,uBAIF,kDACE,aC/DJ,SAEE,WACA,mBACA,mBACA,uBACA,mCACA,+CAKA,gBAEE,wBACA,yBACA,oCACA,0CAGA,wCAEE,8CACA,0CAIF,mCAEE,8CACA,0CAIF,sCAEE,kDACA,0CAKJ,oBAEE,wBACA,yBAEA,0CAEA,4CAGE,0CAGF,uCAGE,0CAIF,0CAGE,0CCjEN,QACE,0CACA,4BACA,wBACA,oBACA,yBACA,8BACA,qBACA,mBACA,oBACA,kBACA,wBACA,oBACA,wBACA,0BACA,wBACA,sBACA,8BACA,6CAEA,gCACA,+BACA,wCACA,uCACA,uBACA,uBACA,6BACA,iBACA,kBACA,sCACA,+BACA,cAEA,gBAjCF,QAkCI,sCACA,WAGF,gBACE,gBACA,gBAGF,sBACE,8DAGF,qBACE,8DAIF,qBACE,oCAGF,gBACE,aAGF,gBACE,+BACA,uCACA,iCACA,oDACA,mDACA,uBACA,gBACA,6CACA,8CACA,sCAEA,wCACE,aAGF,6BACE,aACA,qCACA,yBAIF,sBACE,6BAEF,wBACE,uBAKF,6BACE,iBACA,kBAIJ,gBACE,iCACA,gCACA,qBACA,+BAGF,cACE,uBACA,sCACA,sBACE,oCAEF,sBACE,6BACA,gBAFF,sBAGI,cAKN,+CACE,gBAxHJ,QAyHM,aACA,wCC5GN,QAEE,sBACA,mBACA,gBAGA,wBACA,qCACA,uCACA,sBAGA,uBACA,uBAGA,aACA,aAGA,yCAGA,iCACA,6BACA,8BACA,0BAGA,wBACA,yBACA,+BACA,uCACA,oDACA,2DACA,8CACA,gCACA,iCACA,kCAGA,oBAEE,+BACA,kBAIF,cACE,6BAIF,cACE,gFAEA,wCACA,6BAIF,sBACE,gFAEA,wCAIF,+BAEE,2BAIF,kDAGE,uCACA,uBACA,wBACA,8BACA,kCACA,2BACA,kBAEA,+BACA,gCACA,kBACA,yBACA,8BACA,2CACA,wCACA,oBACA,mBACA,uBACA,mFC7GF,yCACA,kBACA,wBACA,uBACA,mCD6GE,gKAEE,mFAEA,wCACA,wBAIF,oEACE,wBCtHJ,oEACE,0BD6HF,yCAEE,qBACA,wBACA,kBAEA,+KAGE,wBE7IN,wCAIE,6BAEA,4BAEA,wBAEA,wBACA,kBACA,kBACA,uBACA,8BACA,yBACA,oBACA,yBACA,mBACA,mBACA,mBACA,mBAEA,8BACA,+BACA,qCACA,qCACA,4BACA,uBACA,2BACA,mCACA,gBACA,8CACE,kBAEF,oDACE,uBAEA,wBAEF,oHAEE,wBACA,mCACA,4BACA,gCACA,uBACA,kBACA,gIACE,WACA,eACA,sBACA,gBAEF,4QAEE,kCACA,gBAGF,sIACE,uBAEF,sIACE,uBAEF,sIACE,uBChEN,YAEE,+BACA,mBACA,mBACA,oBACA,qCACA,4BACE,uBACA,gCACA,4BAIJ,KACE,OACA,sBACA,sCAEE,uBACA,gCACA,gFACE,aACA,eACA,OACA,uBACA,gGACE,aACA,cACA,oBAEF,4FACE,iBACA,YAON,WACE,aACA,mBACA,uBACA,gBACA,kBChDJ,MACE,gCACA,uBACA,iCACA,4BACA,6BACA,6CACA,yBACA,8BACA,2BACA,gCACA,+CACA,qCACA,uBACA,gCAGA,8BACA,+BACA,gCACA,kFAIF,+BACE,MACE,oCACA,gCACA,mCACA,oDACA,iCAIJ,OACE,0BACA,uBACA,sBACA,mEACA,0CACA,8BACA,0CAGA,qBACE,oCACA,0CAGF,aACE,8BACA,4CACA,sBAGF,eACE,WACA,aACA,sBACA,sBACA,4CACA,qBACA,YAIJ,eACE,aACA,8BACA,mBACA,WACA,eAEA,kBACE,qBACA,mBAGF,6BACE,mBAGF,mCACE,yCACA,mCACA,eAEA,yCACE,uCACA,+CAIF,iDACE,oCACA,0CACA,uCACA,+CAIF,6DACE,aAKN,qCAEE,aACA,mBACA,eACA,uDACA,sBACA,WAGA,+EACE,oCACA,0CAGF,uGACE,aC3HJ,MACE,eAGF,oBACE,cACA,oCACA,uBACA,qBACA,+BACA,6BACA,aACA,kFAIA,oBACA,4BACA,4CACA,wCAGF,oBACE,aACA,eACA,sBAEA,mBACA,uBACA,eACA,6CACE,sDACA,qCAIJ,2BACE,sBAGF,yBACE,oBAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,4BACE,aAGF,6BACE,aAGF,6BACE,YAGF,6BACE,YAGF,yBACE,aACA,8FAIA,eACA,sBACA,mBACA,uBACA,oBClGF,eACE,sBACA,4BACA,uBACA,wBACA,wBACA,wBACA,iCACA,yBACA,6BACA,kCACA,oCACA,0BACA,oBACE,cAEF,oCACE,oBACA,mBACA,wBACA,wBACA,yBACA,oBACA,mBACA,uBACA,cACA,mBACA,gBACA,gBACA,sBACA,yCACE,eACA,gBACA,mBACA,mBACA,kBCnCN,sCAGE,mCACA,qCAEA,yBANF,sCAOI,sBACA,mBACA,uBACA,oBACA,WAGA,wDACE,aACA,mBACA,gBACA,SACA,UACA,gBACA,sCAEA,0EACE,4CAEF,2GACE,+BAMR,IAEE,gCACA,4BACA,6BACA,yBAEA,6BACA,yCACA,yBACA,qCACA,kDACA,+BACA,wCAEA,mBAEE,gBACA,yCACA,6BACA,sBACA,gCACA,qCACA,mCACA,+BACA,kCACA,YACA,uDACE,wBAKF,gBACE,QAKF,UACE,aACA,mBACA,gBACA,SACA,UACA,gBACA,mCAIJ,aACE,kBACA,4BAGF,kBACE,+BACA,oBACA,gCAGF,QACE,qBAIF,YACE,6EAEA,uCAGF,oBACE,6EAEA,uCAGF,iBACE,6EAEA,uCAGF,yBACE,6EAEA,uCCxHJ,MACE,2BACA,yBACA,oBACA,qBACA,sDACA,mBACA,mBACA,gCACA,sBACA,qCACA,0BACA,4BACA,0BACA,yBACA,2MAGF,KACE,aACA,qCACA,SACA,SACE,aACA,SACA,qCAGF,WACE,cAIJ,8DAGE,2CACA,wCACA,mCACA,qBACA,2BACA,6BACA,+BACA,8BACA,kCACA,uCAEA,qGACE,+BACA,oCACA,gCACA,0BAGF,wLACE,qBAKA,iKACE,sDACA,gBACA,sLACE,aAKN,0HACE,gCACA,mBACA,0BACA,6BAIJ,OACE,4BACA,aACA,wBACA,qBACA,gBACA,yCACA,wCACA,qBCrFF,uCAEE,uBACA,uBACA,yBACA,iCACA,4CACA,6BACA,oBACA,qBACA,6CACE,oCACA,8BACA,0BACA,mDACE,qBACA,uCACA,0BACA,aACA,8BACA,UACA,+BACA,iGACE,WAEF,mEACE,+BACA,+FACE,sCACA,qBChBV,SAIE,qBACA,2BACA,wBACA,8BACA,mBAGA,kCACA,wBACA,6BAGA,uBACA,wBACA,4BACA,sBAGA,kCACA,8BACA,6BAGA,sBACA,4BACA,+BACA,yBAOF,SAGE,0CACA,2CACA,wCACA,gDACA,gCACA,oCACA,oCACA,wBAGA,sDAGE,mCACA,iCAQJ,GACE,qBAGA,WACE,+BACA,kCAIF,MACE,uBAEA,SACE,uBASN,GACE,wBAGA,WACE,+BACA,kCAIF,MACE,4BAEA,SACE,4BASN,GACE,gDACA,+CACA,6CAQA,+CALA,cACE,mBAWJ,GACE,uBAIF,GACE,kCACA,yCACA,+CACA,6CAIF,GACE,kDACA,yCACA,+CACA,6CAEA,cACE,mBAYF,kEACE,qBACA,uBAEA,2EACE,uBAKJ,wEACE,aACA,mBACA,eACA,oBACA,uBACA,qBAEA,iFACE,uBACA,mBAKJ,wEACE,qBACA,uBAEA,iFACE,kBACA,+EAKA,yGACE,wCACA,+BACA,kCACA,kBACA,OAMN,2EACE,oBACA,mCACA,6BAIF,wEACE,iBACA,gCASJ,qDAGE,qCAIF,2BAGE,mBAOF,aACE,SAIE,6BACA,mCAIF,MAEE,4BAQJ,uCAEE,kBAME,eACA,iBCzRJ,SACE,kBACA,UACA,WACA,UACA,YACA,gBACA,sBACA,mBACA,eAGF,aAEE,4BACA,gCACA,8BAGA,0BACA,8BACA,4BAGA,4BACA,gCACA,8BAGA,yBACA,6BACA,2BAGA,kCAEA,wCAEA,6CACA,yCACA,uCACA,2CACA,+CACA,sBACA,gBACA,aACA,mBACA,+DACA,mCAGA,WACE,8FAEF,UACA,wBAEA,sCACE,UACA,8BAGF,uCAlDF,aAmDI,2BAIF,mBACE,+BACA,mBAIF,uCACE,aAGF,yBACE,qBACA,mBAGF,4BACE,OACA,qBAGA,yCACE,uCACA,qBACA,2CACA,2CACA,gBAIF,uNAKE,SACA,uCACA,kBACA,2CAIJ,+BACE,iCACA,sCACA,sCAGF,kCACE,oCACA,yCACA,yCAGF,gCACE,kCACA,uCACA,uCAGF,kCACE,oCACA,yCACA,yCAIA,oCACE,sBACA,uBAKJ,kCACE,YAEA,oDACE,qCACA,qBAGF,uDACE,wCACA,qBAGF,qDACE,sCACA,qBAGF,uDACE,wCACA,qBAGF,uDACE,oBACA,qBAKJ,gCACE,YAQF,eACE,kBCrLJ,WACE,kBACA,eACA,6BACA,0BACA,iCACA,oBACA,sBACA,4BACA,0BACA,8BAEA,aACA,mBACA,mCACA,2CACA,+BACA,YACA,gFAEA,gCACA,2BACA,+BACA,4DAEE,aACA,wEACE,wDC3BN,MACE,4CACA,sDACA,gGAEA,2FAEA,6FAEA,6FAIF,aACE,gBAEF,QACE,yBAEF,WACE,4BAEF,WACE,4BAEF,WACE,4BAEF,WACE,4BAEF,WACE,4BChCF,MACE,2BAGF,aACE,oCACA,oBACE,gCAEF,mBACE","file":"index.css"}