@shohojdhara/atomix 0.1.30 → 0.2.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 (469) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/LICENSE +0 -0
  3. package/README.md +151 -39
  4. package/dist/atomix.css +13529 -0
  5. package/dist/atomix.min.css +15 -0
  6. package/dist/index.d.ts +6112 -1757
  7. package/dist/index.esm.js +16852 -8364
  8. package/dist/index.esm.js.map +1 -1
  9. package/dist/index.js +16892 -8369
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.min.js +1 -1
  12. package/dist/index.min.js.map +1 -1
  13. package/dist/themes/boomdevs.css +13241 -0
  14. package/dist/themes/boomdevs.min.css +353 -0
  15. package/dist/themes/esrar.css +15374 -0
  16. package/dist/themes/esrar.min.css +189 -0
  17. package/dist/themes/mashroom.css +28079 -0
  18. package/dist/themes/mashroom.min.css +403 -0
  19. package/dist/themes/shaj-default.css +14203 -0
  20. package/dist/themes/shaj-default.min.css +500 -0
  21. package/dist/themes/yabai.css +13711 -0
  22. package/dist/themes/yabai.min.css +189 -0
  23. package/package.json +126 -99
  24. package/src/components/Accordion/Accordion.stories.tsx +271 -0
  25. package/src/components/Accordion/Accordion.tsx +131 -0
  26. package/src/components/Accordion/index.ts +3 -0
  27. package/src/components/AtomixLogo/AtomixLogo.tsx +36 -0
  28. package/src/components/AtomixLogo/index.ts +3 -0
  29. package/src/components/AtomixLogo.tsx +40 -0
  30. package/src/components/Avatar/Avatar.stories.tsx +257 -0
  31. package/src/components/Avatar/Avatar.tsx +68 -0
  32. package/src/components/Avatar/AvatarGroup.tsx +73 -0
  33. package/src/components/Avatar/index.ts +3 -0
  34. package/src/components/Badge/Badge.stories.tsx +371 -0
  35. package/src/components/Badge/Badge.tsx +39 -0
  36. package/src/components/Badge/index.ts +3 -0
  37. package/src/components/Block/Block.stories.tsx +408 -0
  38. package/src/components/Block/Block.tsx +137 -0
  39. package/src/components/Block/index.ts +1 -0
  40. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +106 -0
  41. package/src/components/Breadcrumb/Breadcrumb.tsx +112 -0
  42. package/src/components/Breadcrumb/index.ts +3 -0
  43. package/src/components/Button/Button.stories.tsx +312 -0
  44. package/src/components/Button/Button.tsx +69 -0
  45. package/src/components/Button/index.ts +3 -0
  46. package/src/components/Callout/Callout.stories.tsx +588 -0
  47. package/src/components/Callout/Callout.tsx +78 -0
  48. package/src/components/Callout/index.ts +1 -0
  49. package/src/components/Card/Card.stories.tsx +105 -0
  50. package/src/components/Card/Card.tsx +69 -0
  51. package/src/components/Card/ElevationCard.tsx +47 -0
  52. package/src/components/Card/index.ts +15 -0
  53. package/src/components/Chart/AdvancedChart.tsx +624 -0
  54. package/src/components/Chart/AnimatedChart.tsx +206 -0
  55. package/src/components/Chart/AreaChart.tsx +27 -0
  56. package/src/components/Chart/BarChart.tsx +148 -0
  57. package/src/components/Chart/BubbleChart.tsx +411 -0
  58. package/src/components/Chart/CandlestickChart.tsx +765 -0
  59. package/src/components/Chart/Chart.stories.tsx +527 -0
  60. package/src/components/Chart/Chart.tsx +218 -0
  61. package/src/components/Chart/ChartRenderer.tsx +322 -0
  62. package/src/components/Chart/ChartToolbar.tsx +436 -0
  63. package/src/components/Chart/ChartTooltip.tsx +101 -0
  64. package/src/components/Chart/DonutChart.tsx +370 -0
  65. package/src/components/Chart/FunnelChart.tsx +393 -0
  66. package/src/components/Chart/GaugeChart.tsx +550 -0
  67. package/src/components/Chart/HeatmapChart.tsx +614 -0
  68. package/src/components/Chart/LineChart.tsx +172 -0
  69. package/src/components/Chart/LineChartNew.tsx +167 -0
  70. package/src/components/Chart/MultiAxisChart.tsx +498 -0
  71. package/src/components/Chart/PieChart.tsx +103 -0
  72. package/src/components/Chart/RadarChart.tsx +332 -0
  73. package/src/components/Chart/RealTimeChart.tsx +436 -0
  74. package/src/components/Chart/ScatterChart.tsx +152 -0
  75. package/src/components/Chart/TreemapChart.tsx +574 -0
  76. package/src/components/Chart/WaterfallChart.tsx +450 -0
  77. package/src/components/Chart/index.ts +119 -0
  78. package/src/components/Chart/types.ts +338 -0
  79. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +44 -0
  80. package/src/components/ColorModeToggle/ColorModeToggle.tsx +85 -0
  81. package/src/components/ColorModeToggle/index.ts +2 -0
  82. package/src/components/Countdown/Countdown.stories.tsx +46 -0
  83. package/src/components/Countdown/Countdown.tsx +90 -0
  84. package/src/components/Countdown/index.ts +2 -0
  85. package/src/components/DataTable/DataTable.stories.tsx +248 -0
  86. package/src/components/DataTable/DataTable.tsx +213 -0
  87. package/src/components/DataTable/index.ts +3 -0
  88. package/src/components/DatePicker/DatePicker.stories.tsx +364 -0
  89. package/src/components/DatePicker/DatePicker.tsx +504 -0
  90. package/src/components/DatePicker/index.ts +4 -0
  91. package/src/components/DatePicker/readme.md +106 -0
  92. package/src/components/DatePicker/types.ts +167 -0
  93. package/src/components/DatePicker/utils.ts +185 -0
  94. package/src/components/Dropdown/Dropdown.stories.tsx +358 -0
  95. package/src/components/Dropdown/Dropdown.tsx +352 -0
  96. package/src/components/Dropdown/index.ts +14 -0
  97. package/src/components/Dropdown/readme.md +151 -0
  98. package/src/components/EdgePanel/EdgePanel.stories.tsx +266 -0
  99. package/src/components/EdgePanel/EdgePanel.tsx +73 -0
  100. package/src/components/EdgePanel/index.ts +1 -0
  101. package/src/components/Form/Checkbox.stories.tsx +76 -0
  102. package/src/components/Form/Checkbox.tsx +69 -0
  103. package/src/components/Form/Form.stories.tsx +497 -0
  104. package/src/components/Form/Form.tsx +46 -0
  105. package/src/components/Form/FormGroup.stories.tsx +162 -0
  106. package/src/components/Form/FormGroup.tsx +53 -0
  107. package/src/components/Form/Input.stories.tsx +106 -0
  108. package/src/components/Form/Input.tsx +87 -0
  109. package/src/components/Form/Radio.stories.tsx +94 -0
  110. package/src/components/Form/Radio.tsx +65 -0
  111. package/src/components/Form/Select.stories.tsx +151 -0
  112. package/src/components/Form/Select.tsx +191 -0
  113. package/src/components/Form/Textarea.stories.tsx +123 -0
  114. package/src/components/Form/Textarea.tsx +78 -0
  115. package/src/components/Form/index.ts +7 -0
  116. package/src/components/Hero/Hero.stories.tsx +295 -0
  117. package/src/components/Hero/Hero.tsx +175 -0
  118. package/src/components/Hero/index.ts +6 -0
  119. package/src/components/Icon/Icon.tsx +87 -0
  120. package/src/components/Icon/index.ts +2 -0
  121. package/src/components/List/List.stories.tsx +122 -0
  122. package/src/components/List/List.tsx +35 -0
  123. package/src/components/List/ListGroup.tsx +35 -0
  124. package/src/components/List/index.ts +2 -0
  125. package/src/components/Messages/Messages.stories.tsx +160 -0
  126. package/src/components/Messages/Messages.tsx +172 -0
  127. package/src/components/Messages/index.ts +3 -0
  128. package/src/components/Modal/Modal.stories.tsx +284 -0
  129. package/src/components/Modal/Modal.tsx +198 -0
  130. package/src/components/Modal/README.md +169 -0
  131. package/src/components/Modal/index.ts +1 -0
  132. package/src/components/Navigation/Menu/MegaMenu.tsx +109 -0
  133. package/src/components/Navigation/Menu/Menu.stories.tsx +339 -0
  134. package/src/components/Navigation/Menu/Menu.tsx +111 -0
  135. package/src/components/Navigation/Nav/Nav.stories.tsx +456 -0
  136. package/src/components/Navigation/Nav/Nav.tsx +51 -0
  137. package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
  138. package/src/components/Navigation/Nav/NavItem.tsx +168 -0
  139. package/src/components/Navigation/Navbar/Navbar.stories.tsx +569 -0
  140. package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
  141. package/src/components/Navigation/README.md +314 -0
  142. package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
  143. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +609 -0
  144. package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
  145. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +103 -0
  146. package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
  147. package/src/components/Navigation/index.ts +23 -0
  148. package/src/components/Pagination/Pagination.stories.tsx +188 -0
  149. package/src/components/Pagination/Pagination.tsx +162 -0
  150. package/src/components/Pagination/index.ts +1 -0
  151. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +397 -0
  152. package/src/components/PhotoViewer/PhotoViewer.tsx +246 -0
  153. package/src/components/PhotoViewer/PhotoViewerHeader.tsx +184 -0
  154. package/src/components/PhotoViewer/PhotoViewerImage.tsx +173 -0
  155. package/src/components/PhotoViewer/PhotoViewerInfo.tsx +91 -0
  156. package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +85 -0
  157. package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +63 -0
  158. package/src/components/PhotoViewer/README.md +358 -0
  159. package/src/components/PhotoViewer/examples/ImageGallery.tsx +187 -0
  160. package/src/components/PhotoViewer/examples/SimpleGallery.tsx +73 -0
  161. package/src/components/PhotoViewer/examples/index.ts +2 -0
  162. package/src/components/PhotoViewer/index.ts +14 -0
  163. package/src/components/Popover/Popover.stories.tsx +143 -0
  164. package/src/components/Popover/Popover.tsx +137 -0
  165. package/src/components/Popover/index.ts +5 -0
  166. package/src/components/Popover/readme.md +120 -0
  167. package/src/components/ProductReview/ProductReview.stories.tsx +88 -0
  168. package/src/components/ProductReview/ProductReview.tsx +169 -0
  169. package/src/components/ProductReview/index.ts +3 -0
  170. package/src/components/Progress/Progress.stories.tsx +75 -0
  171. package/src/components/Progress/Progress.tsx +45 -0
  172. package/src/components/Progress/index.ts +1 -0
  173. package/src/components/Rating/Rating.stories.tsx +109 -0
  174. package/src/components/Rating/Rating.tsx +286 -0
  175. package/src/components/Rating/index.ts +6 -0
  176. package/src/components/River/River.stories.tsx +230 -0
  177. package/src/components/River/River.tsx +134 -0
  178. package/src/components/River/index.ts +2 -0
  179. package/src/components/SectionIntro/SectionIntro.stories.tsx +143 -0
  180. package/src/components/SectionIntro/SectionIntro.tsx +184 -0
  181. package/src/components/SectionIntro/index.ts +3 -0
  182. package/src/components/Slider/Slider.stories.tsx +241 -0
  183. package/src/components/Slider/Slider.tsx +225 -0
  184. package/src/components/Slider/index.ts +24 -0
  185. package/src/components/Spinner/Spinner.stories.tsx +65 -0
  186. package/src/components/Spinner/Spinner.tsx +36 -0
  187. package/src/components/Spinner/index.ts +2 -0
  188. package/src/components/Steps/Steps.stories.tsx +158 -0
  189. package/src/components/Steps/Steps.tsx +115 -0
  190. package/src/components/Steps/index.ts +3 -0
  191. package/src/components/Tab/Tab.stories.tsx +129 -0
  192. package/src/components/Tab/Tab.tsx +111 -0
  193. package/src/components/Tab/index.ts +2 -0
  194. package/src/components/Testimonial/Testimonial.stories.tsx +180 -0
  195. package/src/components/Testimonial/Testimonial.tsx +138 -0
  196. package/src/components/Testimonial/index.ts +3 -0
  197. package/src/components/Todo/Todo.stories.tsx +103 -0
  198. package/src/components/Todo/Todo.tsx +158 -0
  199. package/src/components/Todo/index.ts +1 -0
  200. package/src/components/Toggle/Toggle.stories.tsx +49 -0
  201. package/src/components/Toggle/Toggle.tsx +84 -0
  202. package/src/components/Toggle/index.ts +2 -0
  203. package/src/components/Tooltip/Tooltip.stories.tsx +115 -0
  204. package/src/components/Tooltip/Tooltip.tsx +150 -0
  205. package/src/components/Tooltip/index.ts +3 -0
  206. package/src/components/Upload/Upload.stories.tsx +220 -0
  207. package/src/components/Upload/Upload.tsx +354 -0
  208. package/src/components/Upload/index.ts +3 -0
  209. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +484 -0
  210. package/src/components/VideoPlayer/VideoPlayer.tsx +574 -0
  211. package/src/components/VideoPlayer/index.ts +7 -0
  212. package/src/components/index.ts +111 -0
  213. package/src/layouts/Grid/Container.tsx +58 -0
  214. package/src/layouts/Grid/Grid.stories.tsx +861 -0
  215. package/src/layouts/Grid/Grid.tsx +68 -0
  216. package/src/layouts/Grid/GridCol.tsx +161 -0
  217. package/src/layouts/Grid/README.md +108 -0
  218. package/src/layouts/Grid/Row.tsx +70 -0
  219. package/src/layouts/Grid/index.ts +8 -0
  220. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +387 -0
  221. package/src/layouts/MasonryGrid/MasonryGrid.tsx +408 -0
  222. package/src/layouts/MasonryGrid/MasonryGridItem.tsx +44 -0
  223. package/src/layouts/MasonryGrid/README.md +117 -0
  224. package/src/layouts/MasonryGrid/index.ts +4 -0
  225. package/src/layouts/index.ts +7 -0
  226. package/src/lib/README.md +89 -0
  227. package/src/lib/composables/index.ts +63 -0
  228. package/src/lib/composables/useAccordion.ts +129 -0
  229. package/src/lib/composables/useAmbientMode.ts +90 -0
  230. package/src/lib/composables/useBadge.ts +42 -0
  231. package/src/lib/composables/useBarChart.ts +365 -0
  232. package/src/lib/composables/useBlock.ts +56 -0
  233. package/src/lib/composables/useBreadcrumb.ts +81 -0
  234. package/src/lib/composables/useButton.ts +59 -0
  235. package/src/lib/composables/useCallout.ts +55 -0
  236. package/src/lib/composables/useCard.ts +155 -0
  237. package/src/lib/composables/useChart.ts +1082 -0
  238. package/src/lib/composables/useChartAnalytics.ts +505 -0
  239. package/src/lib/composables/useChartData.ts +38 -0
  240. package/src/lib/composables/useChartExport.ts +392 -0
  241. package/src/lib/composables/useChartInteraction.ts +34 -0
  242. package/src/lib/composables/useChartInteractions.ts +123 -0
  243. package/src/lib/composables/useChartPerformance.ts +323 -0
  244. package/src/lib/composables/useChartScale.ts +48 -0
  245. package/src/lib/composables/useChartToolbar.ts +532 -0
  246. package/src/lib/composables/useCheckbox.ts +70 -0
  247. package/src/lib/composables/useDataTable.ts +208 -0
  248. package/src/lib/composables/useDatePicker.ts +564 -0
  249. package/src/lib/composables/useDropdown.ts +272 -0
  250. package/src/lib/composables/useEdgePanel.ts +261 -0
  251. package/src/lib/composables/useForm.ts +62 -0
  252. package/src/lib/composables/useFormGroup.ts +51 -0
  253. package/src/lib/composables/useHero.ts +250 -0
  254. package/src/lib/composables/useInput.ts +58 -0
  255. package/src/lib/composables/useLineChart.ts +319 -0
  256. package/src/lib/composables/useMessages.ts +77 -0
  257. package/src/lib/composables/useModal.ts +110 -0
  258. package/src/lib/composables/useNavbar.ts +288 -0
  259. package/src/lib/composables/usePagination.ts +101 -0
  260. package/src/lib/composables/usePhotoViewer.ts +937 -0
  261. package/src/lib/composables/usePieChart.ts +362 -0
  262. package/src/lib/composables/usePopover.ts +354 -0
  263. package/src/lib/composables/useProgress.ts +74 -0
  264. package/src/lib/composables/useRadio.ts +47 -0
  265. package/src/lib/composables/useRating.ts +174 -0
  266. package/src/lib/composables/useRiver.ts +205 -0
  267. package/src/lib/composables/useSelect.ts +52 -0
  268. package/src/lib/composables/useSideMenu.ts +197 -0
  269. package/src/lib/composables/useSlider.ts +339 -0
  270. package/src/lib/composables/useSpinner.ts +42 -0
  271. package/src/lib/composables/useTextarea.ts +55 -0
  272. package/src/lib/composables/useTodo.ts +141 -0
  273. package/src/lib/composables/useVideoPlayer.ts +398 -0
  274. package/src/lib/constants/components.ts +1433 -0
  275. package/src/lib/constants/index.ts +4 -0
  276. package/src/lib/index.ts +11 -0
  277. package/src/lib/types/components.ts +4750 -0
  278. package/src/lib/types/index.ts +2 -0
  279. package/src/lib/utils/dom.ts +41 -0
  280. package/src/lib/utils/icons.ts +74 -0
  281. package/src/lib/utils/index.ts +55 -0
  282. package/src/lib/utils/useForkRef.test.tsx +64 -0
  283. package/src/lib/utils/useForkRef.ts +36 -0
  284. package/src/lib/utils.test.ts +14 -0
  285. package/src/styles/01-settings/_index.scss +2 -0
  286. package/src/styles/01-settings/_settings.accordion.scss +7 -5
  287. package/src/styles/01-settings/_settings.animations.scss +0 -0
  288. package/src/styles/01-settings/_settings.avatar-group.scss +6 -3
  289. package/src/styles/01-settings/_settings.avatar.scss +2 -2
  290. package/src/styles/01-settings/_settings.badge.scss +15 -9
  291. package/src/styles/01-settings/_settings.block.scss +11 -0
  292. package/src/styles/01-settings/_settings.border-radius.scss +12 -9
  293. package/src/styles/01-settings/_settings.border.scss +4 -1
  294. package/src/styles/01-settings/_settings.box-shadow.scss +1 -1
  295. package/src/styles/01-settings/_settings.breadcrumb.scss +9 -8
  296. package/src/styles/01-settings/_settings.breakpoints.scss +0 -0
  297. package/src/styles/01-settings/_settings.btn-group.scss +4 -1
  298. package/src/styles/01-settings/_settings.button.scss +19 -21
  299. package/src/styles/01-settings/_settings.callout.scss +42 -24
  300. package/src/styles/01-settings/_settings.card.scss +12 -10
  301. package/src/styles/01-settings/_settings.chart.scss +199 -0
  302. package/src/styles/01-settings/_settings.checkbox-group.scss +0 -0
  303. package/src/styles/01-settings/_settings.checkbox.scss +0 -0
  304. package/src/styles/01-settings/_settings.color-mode.scss +0 -0
  305. package/src/styles/01-settings/_settings.colors.scss +20 -0
  306. package/src/styles/01-settings/_settings.config.scss +1 -1
  307. package/src/styles/01-settings/_settings.countdown.scss +0 -0
  308. package/src/styles/01-settings/_settings.data-table.scss +0 -0
  309. package/src/styles/01-settings/_settings.datepicker.scss +0 -0
  310. package/src/styles/01-settings/_settings.dropdown.scss +0 -0
  311. package/src/styles/01-settings/_settings.edge-panel.scss +0 -0
  312. package/src/styles/01-settings/_settings.fonts.scss +1 -1
  313. package/src/styles/01-settings/_settings.form-group.scss +0 -0
  314. package/src/styles/01-settings/_settings.form.scss +0 -0
  315. package/src/styles/01-settings/_settings.grid.scss +3 -3
  316. package/src/styles/01-settings/_settings.hero.scss +1 -1
  317. package/src/styles/01-settings/_settings.input.scss +1 -1
  318. package/src/styles/01-settings/_settings.link.scss +0 -0
  319. package/src/styles/01-settings/_settings.list-group.scss +0 -0
  320. package/src/styles/01-settings/_settings.list.scss +0 -0
  321. package/src/styles/01-settings/_settings.maps.scss +43 -8
  322. package/src/styles/01-settings/_settings.masonry-grid.scss +0 -0
  323. package/src/styles/01-settings/_settings.menu.scss +0 -0
  324. package/src/styles/01-settings/_settings.messages.scss +0 -0
  325. package/src/styles/01-settings/_settings.modal.scss +1 -1
  326. package/src/styles/01-settings/_settings.nav.scss +0 -0
  327. package/src/styles/01-settings/_settings.navbar.scss +0 -0
  328. package/src/styles/01-settings/_settings.pagination.scss +0 -0
  329. package/src/styles/01-settings/_settings.photoviewer.scss +89 -23
  330. package/src/styles/01-settings/_settings.popover.scss +0 -0
  331. package/src/styles/01-settings/_settings.position.scss +0 -0
  332. package/src/styles/01-settings/_settings.progress.scss +0 -0
  333. package/src/styles/01-settings/_settings.rating.scss +0 -0
  334. package/src/styles/01-settings/_settings.river.scss +0 -0
  335. package/src/styles/01-settings/_settings.sectionintro.scss +0 -0
  336. package/src/styles/01-settings/_settings.select.scss +0 -0
  337. package/src/styles/01-settings/_settings.side-menu.scss +0 -0
  338. package/src/styles/01-settings/_settings.skeleton.scss +0 -0
  339. package/src/styles/01-settings/_settings.slider.scss +59 -0
  340. package/src/styles/01-settings/_settings.spacing.scss +11 -3
  341. package/src/styles/01-settings/_settings.spinner.scss +0 -0
  342. package/src/styles/01-settings/_settings.steps.scss +1 -1
  343. package/src/styles/01-settings/_settings.tabs.scss +4 -4
  344. package/src/styles/01-settings/_settings.testimonials.scss +0 -0
  345. package/src/styles/01-settings/_settings.todo.scss +0 -0
  346. package/src/styles/01-settings/_settings.toggle.scss +1 -1
  347. package/src/styles/01-settings/_settings.tooltip.scss +0 -0
  348. package/src/styles/01-settings/_settings.typography.scss +2 -0
  349. package/src/styles/01-settings/_settings.upload.scss +0 -0
  350. package/src/styles/01-settings/_settings.video-player.scss +64 -0
  351. package/src/styles/01-settings/_settings.z-layers.scss +0 -0
  352. package/src/styles/02-tools/_index.scss +1 -0
  353. package/src/styles/02-tools/_tools.animations.scss +82 -0
  354. package/src/styles/02-tools/_tools.border-radius.scss +0 -0
  355. package/src/styles/02-tools/_tools.breakpoints.scss +0 -0
  356. package/src/styles/02-tools/_tools.button.scss +5 -0
  357. package/src/styles/02-tools/_tools.clearfix.scss +0 -0
  358. package/src/styles/02-tools/_tools.color-functions.scss +0 -0
  359. package/src/styles/02-tools/_tools.color-mode.scss +1 -1
  360. package/src/styles/02-tools/_tools.component.scss +479 -0
  361. package/src/styles/02-tools/_tools.event.scss +0 -0
  362. package/src/styles/02-tools/_tools.grid.scss +0 -0
  363. package/src/styles/02-tools/_tools.hidden-visually.scss +0 -0
  364. package/src/styles/02-tools/_tools.hidden.scss +0 -0
  365. package/src/styles/02-tools/_tools.map-loop.scss +0 -0
  366. package/src/styles/02-tools/_tools.media-queries.scss +0 -0
  367. package/src/styles/02-tools/_tools.object-fit.scss +0 -0
  368. package/src/styles/02-tools/_tools.placeholder.scss +0 -0
  369. package/src/styles/02-tools/_tools.rem.scss +5 -1
  370. package/src/styles/02-tools/_tools.size.scss +0 -0
  371. package/src/styles/02-tools/_tools.spacing.scss +0 -0
  372. package/src/styles/02-tools/_tools.to-rgb.scss +0 -0
  373. package/src/styles/02-tools/_tools.transition.scss +0 -0
  374. package/src/styles/02-tools/_tools.utilities.scss +0 -0
  375. package/src/styles/02-tools/_tools.utility-api.scss +23 -2
  376. package/src/styles/03-generic/_generic.fonts.scss +0 -0
  377. package/src/styles/03-generic/_generic.reset.scss +0 -0
  378. package/src/styles/03-generic/_generic.root.scss +5 -1
  379. package/src/styles/03-generic/_generic.selection.scss +0 -0
  380. package/src/styles/03-generic/_index.scss +0 -0
  381. package/src/styles/04-elements/_elements.all.scss +0 -0
  382. package/src/styles/04-elements/_elements.body.scss +0 -0
  383. package/src/styles/04-elements/_elements.heading.scss +0 -0
  384. package/src/styles/04-elements/_elements.html.scss +0 -0
  385. package/src/styles/04-elements/_elements.links.scss +0 -0
  386. package/src/styles/04-elements/_index.scss +0 -0
  387. package/src/styles/05-objects/_index.scss +1 -0
  388. package/src/styles/05-objects/_objects.block.scss +122 -0
  389. package/src/styles/05-objects/_objects.container.scss +14 -10
  390. package/src/styles/05-objects/_objects.grid.scss +0 -0
  391. package/src/styles/05-objects/_objects.masonry-grid.scss +0 -0
  392. package/src/styles/06-components/_components.accordion.scss +3 -1
  393. package/src/styles/06-components/_components.avatar-group.scss +0 -0
  394. package/src/styles/06-components/_components.avatar.scss +0 -0
  395. package/src/styles/06-components/_components.badge.scss +9 -9
  396. package/src/styles/06-components/_components.breadcrumb.scss +0 -0
  397. package/src/styles/06-components/_components.btn-group.scss +0 -0
  398. package/src/styles/06-components/_components.button.scss +0 -0
  399. package/src/styles/06-components/_components.callout.scss +2 -1
  400. package/src/styles/06-components/_components.card.scss +0 -1
  401. package/src/styles/06-components/_components.chart.scss +2102 -0
  402. package/src/styles/06-components/_components.checkbox-group.scss +0 -0
  403. package/src/styles/06-components/_components.checkbox.scss +0 -0
  404. package/src/styles/06-components/_components.color-mode-toggle.scss +0 -0
  405. package/src/styles/06-components/_components.countdown.scss +0 -0
  406. package/src/styles/06-components/_components.data-table.scss +0 -0
  407. package/src/styles/06-components/_components.datepicker.scss +0 -0
  408. package/src/styles/06-components/_components.dropdown.scss +0 -0
  409. package/src/styles/06-components/_components.edge-panel.scss +0 -0
  410. package/src/styles/06-components/_components.form-group.scss +0 -0
  411. package/src/styles/06-components/_components.form.scss +0 -0
  412. package/src/styles/06-components/_components.hero.scss +1 -0
  413. package/src/styles/06-components/_components.icon.scss +2 -2
  414. package/src/styles/06-components/_components.image-gallery.scss +0 -0
  415. package/src/styles/06-components/_components.input.scss +0 -0
  416. package/src/styles/06-components/_components.list-group.scss +0 -0
  417. package/src/styles/06-components/_components.list.scss +0 -0
  418. package/src/styles/06-components/_components.menu.scss +0 -0
  419. package/src/styles/06-components/_components.messages.scss +0 -0
  420. package/src/styles/06-components/_components.modal.scss +3 -0
  421. package/src/styles/06-components/_components.nav.scss +0 -0
  422. package/src/styles/06-components/_components.navbar.scss +0 -0
  423. package/src/styles/06-components/_components.pagination.scss +0 -0
  424. package/src/styles/06-components/_components.photoviewer.scss +603 -545
  425. package/src/styles/06-components/_components.popover.scss +0 -0
  426. package/src/styles/06-components/_components.product-review.scss +0 -0
  427. package/src/styles/06-components/_components.progress.scss +0 -0
  428. package/src/styles/06-components/_components.rating.scss +0 -0
  429. package/src/styles/06-components/_components.river.scss +0 -0
  430. package/src/styles/06-components/_components.sectionintro.scss +0 -0
  431. package/src/styles/06-components/_components.select.scss +0 -0
  432. package/src/styles/06-components/_components.side-menu.scss +0 -0
  433. package/src/styles/06-components/_components.skeleton.scss +0 -0
  434. package/src/styles/06-components/_components.slider.scss +273 -0
  435. package/src/styles/06-components/_components.spinner.scss +0 -0
  436. package/src/styles/06-components/_components.steps.scss +1 -0
  437. package/src/styles/06-components/_components.tabs.scss +0 -0
  438. package/src/styles/06-components/_components.testimonials.scss +0 -0
  439. package/src/styles/06-components/_components.todo.scss +0 -0
  440. package/src/styles/06-components/_components.toggle.scss +0 -0
  441. package/src/styles/06-components/_components.tooltip.scss +4 -9
  442. package/src/styles/06-components/_components.upload.scss +0 -0
  443. package/src/styles/06-components/_components.video-player.scss +623 -0
  444. package/src/styles/06-components/_index.scss +3 -0
  445. package/src/styles/06-components/old.chart.styles.scss +2819 -0
  446. package/src/styles/99-utilities/_index.scss +0 -0
  447. package/src/styles/99-utilities/_utilities.background.scss +0 -0
  448. package/src/styles/99-utilities/_utilities.border.scss +0 -0
  449. package/src/styles/99-utilities/_utilities.clearfix.scss +0 -0
  450. package/src/styles/99-utilities/_utilities.display.scss +0 -0
  451. package/src/styles/99-utilities/_utilities.flex.scss +0 -0
  452. package/src/styles/99-utilities/_utilities.link.scss +0 -0
  453. package/src/styles/99-utilities/_utilities.object-fit.scss +0 -0
  454. package/src/styles/99-utilities/_utilities.opacity.scss +0 -0
  455. package/src/styles/99-utilities/_utilities.overflow.scss +0 -0
  456. package/src/styles/99-utilities/_utilities.position.scss +0 -0
  457. package/src/styles/99-utilities/_utilities.scss +2 -1
  458. package/src/styles/99-utilities/_utilities.shadow.scss +0 -0
  459. package/src/styles/99-utilities/_utilities.sizes.scss +0 -0
  460. package/src/styles/99-utilities/_utilities.spacing.scss +0 -0
  461. package/src/styles/99-utilities/_utilities.text.scss +5 -0
  462. package/src/styles/99-utilities/_utilities.visibility.scss +0 -0
  463. package/src/styles/99-utilities/_utilities.visually-hidden.scss +0 -0
  464. package/src/styles/99-utilities/_utilities.z-index.scss +0 -0
  465. package/src/styles/css-modules.d.ts +0 -0
  466. package/src/styles/index.scss +0 -0
  467. package/dist/index.css +0 -15
  468. package/dist/index.esm.css +0 -15
  469. package/dist/index.min.css +0 -15
@@ -0,0 +1,2819 @@
1
+ // Component: Chart
2
+ // =============================================================================
3
+
4
+ @use '../01-settings/settings.colors' as *;
5
+ @use '../01-settings/settings.spacing' as *;
6
+ @use '../01-settings/settings.typography' as *;
7
+ @use '../01-settings/settings.border-radius' as *;
8
+ @use '../01-settings/settings.box-shadow' as *;
9
+ @use '../02-tools/tools.component' as component;
10
+
11
+ @use 'sass:map';
12
+ @use 'sass:math';
13
+
14
+ // Chart Variables
15
+ // =============================================================================
16
+ $chart-border-width: 1px;
17
+ $chart-backdrop-blur: 8px;
18
+ $chart-header-backdrop-blur: 12px;
19
+ $chart-tooltip-backdrop-blur: 16px;
20
+ $chart-transition-duration: 0.3s;
21
+ $chart-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
22
+ $chart-hover-transform: translateY(-1px);
23
+ $chart-active-transform: translateY(0);
24
+ $chart-focus-ring-width: 3px;
25
+ $chart-glassmorphism-opacity: 0.6;
26
+ $chart-pattern-opacity: 0.03;
27
+ $chart-pattern-size: 20px;
28
+ $chart-loading-spinner-size: map.get($spacing-sizes, 8);
29
+ $chart-error-icon-size: map.get($spacing-sizes, 12);
30
+ $chart-empty-icon-size: map.get($spacing-sizes, 16);
31
+ $chart-legend-color-size: map.get($spacing-sizes, 3);
32
+ $chart-action-button-size: map.get($spacing-sizes, 8);
33
+ $chart-touch-target-size: map.get($spacing-sizes, 10);
34
+
35
+ // Chart Color Palette
36
+ $chart-colors: (
37
+ primary: var(--atomix-primary-6),
38
+ secondary: var(--atomix-secondary),
39
+ success: var(--atomix-success),
40
+ warning: var(--atomix-warning),
41
+ error: var(--atomix-error),
42
+ info: var(--atomix-info),
43
+ accent: var(--atomix-accent),
44
+ neutral: var(--atomix-neutral),
45
+ );
46
+
47
+ // Chart Gradients
48
+ $chart-gradients-bg: (
49
+ primary: linear-gradient(
50
+ 135deg,
51
+ rgba(var(--atomix-primary-rgb), 0.1),
52
+ rgba(var(--atomix-primary-rgb), 0.2)
53
+ ),
54
+ secondary: linear-gradient(
55
+ 135deg,
56
+ rgba(var(--atomix-secondary-rgb), 0.1),
57
+ rgba(var(--atomix-secondary-rgb), 0.2)
58
+ ),
59
+ success: linear-gradient(
60
+ 135deg,
61
+ rgba(var(--atomix-success-rgb), 0.1),
62
+ rgba(var(--atomix-success-rgb), 0.2)
63
+ ),
64
+ warning: linear-gradient(
65
+ 135deg,
66
+ rgba(var(--atomix-warning-rgb), 0.1),
67
+ rgba(var(--atomix-warning-rgb), 0.2)
68
+ ),
69
+ error: linear-gradient(
70
+ 135deg,
71
+ rgba(var(--atomix-error-rgb), 0.1),
72
+ rgba(var(--atomix-error-rgb), 0.2)
73
+ ),
74
+ info: linear-gradient(
75
+ 135deg,
76
+ rgba(var(--atomix-info-rgb), 0.1),
77
+ rgba(var(--atomix-info-rgb), 0.2)
78
+ ),
79
+ );
80
+
81
+ $chart-gradients: (
82
+ primary: linear-gradient(135deg, var(--atomix-primary), var(--atomix-primary-bg-subtle)),
83
+ secondary: linear-gradient(135deg, var(--atomix-secondary), var(--atomix-secondary-bg-subtle)),
84
+ success: linear-gradient(135deg, var(--atomix-success), var(--atomix-success-bg-subtle)),
85
+ warning: linear-gradient(135deg, var(--atomix-warning), var(--atomix-warning-bg-subtle)),
86
+ error: linear-gradient(135deg, var(--atomix-error), var(--atomix-error-bg-subtle)),
87
+ info: linear-gradient(135deg, var(--atomix-info), var(--atomix-info-bg-subtle)),
88
+ );
89
+
90
+ // Chart Mixins gradient-background
91
+ // =============================================================================
92
+
93
+ @mixin chart-glassmorphism {
94
+ backdrop-filter: blur($chart-backdrop-blur);
95
+ -webkit-backdrop-filter: blur($chart-backdrop-blur);
96
+ background: rgba(255, 255, 255, 0.05);
97
+ border: $chart-border-width solid rgba(255, 255, 255, 0.1);
98
+ }
99
+
100
+ @mixin chart-gradient-background($color: 'primary') {
101
+ background: map.get($chart-gradients-bg, $color);
102
+ }
103
+
104
+ @mixin chart-gradient-border($color: 'primary') {
105
+ position: relative;
106
+
107
+ &::before {
108
+ content: '';
109
+ position: absolute;
110
+ top: 0;
111
+ left: 0;
112
+ right: 0;
113
+ height: 1px;
114
+ background: linear-gradient(90deg, transparent, map.get($chart-colors, $color), transparent);
115
+ opacity: $chart-glassmorphism-opacity;
116
+ }
117
+ }
118
+
119
+ @mixin chart-hover-elevation {
120
+ transition:
121
+ box-shadow $chart-transition-duration $chart-transition-timing,
122
+ transform $chart-transition-duration $chart-transition-timing,
123
+ border-color $chart-transition-duration $chart-transition-timing;
124
+
125
+ &:hover {
126
+ box-shadow: $box-shadow-lg;
127
+ transform: $chart-hover-transform;
128
+ border-color: var(--atomix-primary-border-subtle);
129
+ }
130
+ }
131
+
132
+ @mixin chart-focus-ring {
133
+ &:focus-visible {
134
+ @include component.focus-ring;
135
+ box-shadow:
136
+ $box-shadow-md,
137
+ 0 0 0 $chart-focus-ring-width var(--atomix-primary-border-subtle);
138
+ }
139
+ }
140
+
141
+ @mixin chart-loading-shimmer {
142
+ position: relative;
143
+ overflow: hidden;
144
+
145
+ &::after {
146
+ content: '';
147
+ position: absolute;
148
+ top: 0;
149
+ left: -100%;
150
+ width: 100%;
151
+ height: 100%;
152
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
153
+ animation: chart-shimmer 2s infinite;
154
+ }
155
+ }
156
+
157
+ @mixin chart-data-animation($type: 'fade') {
158
+ @if $type == 'fade' {
159
+ animation: chart-fade-in 0.6s ease-out;
160
+ } @else if $type == 'scale' {
161
+ animation: chart-scale-in 0.5s ease-out;
162
+ } @else if $type == 'slide' {
163
+ animation: chart-slide-in 0.7s ease-out;
164
+ }
165
+ }
166
+
167
+ // Block: Base chart component
168
+ // =============================================================================
169
+ .c-chart {
170
+ // @include component.component-base;
171
+ @include chart-hover-elevation;
172
+ // @include chart-focus-ring;
173
+ @include chart-gradient-border;
174
+ @include chart-gradient-background;
175
+
176
+ display: flex;
177
+ flex-direction: column;
178
+ border: $chart-border-width solid var(--atomix-brand-border-subtle);
179
+ border-radius: $border-radius-lg;
180
+ overflow: hidden;
181
+ box-shadow: $box-shadow-sm;
182
+ backdrop-filter: blur($chart-backdrop-blur);
183
+ position: relative;
184
+ isolation: isolate;
185
+
186
+ // Default sizing with fluid height
187
+ min-height: map.get($spacing-sizes, 52); // 208px
188
+ width: 100%;
189
+ max-width: 100%;
190
+
191
+ // Enhanced modern styling
192
+ &::after {
193
+ content: '';
194
+ position: absolute;
195
+ inset: 0;
196
+ background: linear-gradient(
197
+ 135deg,
198
+ rgba(var(--atomix-primary-rgb), 0.1) 0%,
199
+ transparent 50%,
200
+ rgba(var(--atomix-secondary-rgb), 0.05) 100%
201
+ );
202
+ pointer-events: none;
203
+ z-index: 1;
204
+ }
205
+
206
+ // CSS Custom Properties for dynamic theming
207
+ --chart-primary-color: #{map.get($chart-colors, primary)};
208
+ --chart-secondary-color: #{map.get($chart-colors, secondary)};
209
+ --chart-border-radius: #{$border-radius-lg};
210
+ --chart-padding: #{map.get($spacing-sizes, 4)};
211
+ --chart-gap: #{map.get($spacing-sizes, 2)};
212
+ }
213
+
214
+ // Size Modifiers
215
+ // =============================================================================
216
+ .c-chart--xs {
217
+ min-height: map.get($spacing-sizes, 28); // 112px
218
+ font-size: $font-size-xs;
219
+ --chart-padding: #{map.get($spacing-sizes, 2)};
220
+
221
+ .c-chart__header {
222
+ padding: map.get($spacing-sizes, 2);
223
+ }
224
+
225
+ .c-chart__content {
226
+ padding: map.get($spacing-sizes, 2);
227
+ }
228
+
229
+ .c-chart__title {
230
+ font-size: $font-size-sm;
231
+ }
232
+
233
+ .c-chart__action {
234
+ width: map.get($spacing-sizes, 6);
235
+ height: map.get($spacing-sizes, 6);
236
+ }
237
+ }
238
+
239
+ .c-chart--sm {
240
+ min-height: map.get($spacing-sizes, 36); // 144px
241
+ font-size: $font-size-sm;
242
+ --chart-padding: #{map.get($spacing-sizes, 3)};
243
+
244
+ .c-chart__header {
245
+ padding: map.get($spacing-sizes, 3);
246
+ }
247
+
248
+ .c-chart__content {
249
+ padding: map.get($spacing-sizes, 3);
250
+ }
251
+
252
+ .c-chart__title {
253
+ font-size: $font-size-md;
254
+ }
255
+
256
+ .c-chart__action {
257
+ width: map.get($spacing-sizes, 7);
258
+ height: map.get($spacing-sizes, 7);
259
+ }
260
+ }
261
+
262
+ .c-chart--md {
263
+ min-height: map.get($spacing-sizes, 52); // 208px
264
+ font-size: $font-size-base;
265
+ --chart-padding: #{map.get($spacing-sizes, 4)};
266
+
267
+ .c-chart__header {
268
+ padding: map.get($spacing-sizes, 4);
269
+ }
270
+
271
+ .c-chart__content {
272
+ padding: map.get($spacing-sizes, 4);
273
+ }
274
+
275
+ .c-chart__title {
276
+ font-size: $font-size-lg;
277
+ }
278
+ }
279
+
280
+ .c-chart--lg {
281
+ min-height: map.get($spacing-sizes, 72); // 288px
282
+ font-size: $font-size-md;
283
+ --chart-padding: #{map.get($spacing-sizes, 6)};
284
+
285
+ .c-chart__header {
286
+ padding: map.get($spacing-sizes, 6);
287
+ }
288
+
289
+ .c-chart__content {
290
+ padding: map.get($spacing-sizes, 6);
291
+ }
292
+
293
+ .c-chart__title {
294
+ font-size: $font-size-lg;
295
+ }
296
+
297
+ .c-chart__action {
298
+ width: map.get($spacing-sizes, 9);
299
+ height: map.get($spacing-sizes, 9);
300
+ }
301
+ }
302
+
303
+ .c-chart--xl {
304
+ min-height: map.get($spacing-sizes, 80); // 320px
305
+ font-size: $font-size-lg;
306
+ --chart-padding: #{map.get($spacing-sizes, 8)};
307
+
308
+ .c-chart__header {
309
+ padding: map.get($spacing-sizes, 8);
310
+ }
311
+
312
+ .c-chart__content {
313
+ padding: map.get($spacing-sizes, 8);
314
+ }
315
+
316
+ .c-chart__title {
317
+ font-size: $font-size-lg;
318
+ }
319
+
320
+ .c-chart__action {
321
+ width: map.get($spacing-sizes, 10);
322
+ height: map.get($spacing-sizes, 10);
323
+ }
324
+ }
325
+
326
+ .c-chart--2xl {
327
+ min-height: map.get($spacing-sizes, 96); // 384px
328
+ font-size: $font-size-lg;
329
+ --chart-padding: #{map.get($spacing-sizes, 10)};
330
+
331
+ .c-chart__header {
332
+ padding: map.get($spacing-sizes, 10);
333
+ }
334
+
335
+ .c-chart__content {
336
+ padding: map.get($spacing-sizes, 10);
337
+ }
338
+
339
+ .c-chart__title {
340
+ font-size: $font-size-lg;
341
+ }
342
+ }
343
+
344
+ .c-chart--full {
345
+ height: 100vh;
346
+ min-height: auto;
347
+ border-radius: 0;
348
+ }
349
+
350
+ .c-chart--auto {
351
+ height: auto;
352
+ min-height: map.get($spacing-sizes, 32);
353
+ }
354
+
355
+ // Color Modifiers
356
+ // =============================================================================
357
+ .c-chart--primary {
358
+ @include chart-gradient-border('primary');
359
+
360
+ --chart-primary-color: #{map.get($chart-colors, primary)};
361
+
362
+ .c-chart__title {
363
+ color: var(--atomix-primary-text-emphasis);
364
+ background: map.get($chart-gradients, primary);
365
+ background-clip: text;
366
+ -webkit-background-clip: text;
367
+ -webkit-text-fill-color: transparent;
368
+
369
+ @supports not (background-clip: text) {
370
+ color: var(--atomix-primary-text-emphasis);
371
+ background: none;
372
+ -webkit-text-fill-color: initial;
373
+ }
374
+ }
375
+
376
+ &:hover {
377
+ border-color: var(--atomix-primary-border-subtle);
378
+ }
379
+ }
380
+
381
+ .c-chart--secondary {
382
+ @include chart-gradient-border('secondary');
383
+ @include chart-gradient-background('secondary');
384
+
385
+ --chart-primary-color: #{map.get($chart-colors, secondary)};
386
+
387
+ .c-chart__title {
388
+ color: var(--atomix-secondary-text-emphasis);
389
+ background: map.get($chart-gradients, secondary);
390
+ background-clip: text;
391
+ -webkit-background-clip: text;
392
+ -webkit-text-fill-color: transparent;
393
+ }
394
+
395
+ &:hover {
396
+ border-color: var(--atomix-secondary-border-subtle);
397
+ }
398
+ }
399
+
400
+ .c-chart--success {
401
+ @include chart-gradient-border('success');
402
+ @include chart-gradient-background('success');
403
+ --chart-primary-color: #{map.get($chart-colors, success)};
404
+
405
+ .c-chart__title {
406
+ color: var(--atomix-success-text-emphasis);
407
+ background: map.get($chart-gradients, success);
408
+ background-clip: text;
409
+ -webkit-background-clip: text;
410
+ -webkit-text-fill-color: transparent;
411
+
412
+ @supports not (background-clip: text) {
413
+ color: var(--atomix-success-text-emphasis);
414
+ background: none;
415
+ -webkit-text-fill-color: initial;
416
+ }
417
+ }
418
+
419
+ &:hover {
420
+ border-color: var(--atomix-success-border-subtle);
421
+ }
422
+ }
423
+
424
+ .c-chart--error {
425
+ @include chart-gradient-border('error');
426
+ @include chart-gradient-background('error');
427
+ --chart-primary-color: #{map.get($chart-colors, error)};
428
+
429
+ .c-chart__title {
430
+ color: var(--atomix-error-text-emphasis);
431
+ background: map.get($chart-gradients, error);
432
+ background-clip: text;
433
+ -webkit-background-clip: text;
434
+ -webkit-text-fill-color: transparent;
435
+
436
+ @supports not (background-clip: text) {
437
+ color: var(--atomix-error-text-emphasis);
438
+ background: none;
439
+ -webkit-text-fill-color: initial;
440
+ }
441
+ }
442
+
443
+ &:hover {
444
+ border-color: var(--atomix-error-border-subtle);
445
+ }
446
+ }
447
+
448
+ .c-chart--warning {
449
+ @include chart-gradient-border('warning');
450
+ @include chart-gradient-background('warning');
451
+ --chart-primary-color: #{map.get($chart-colors, warning)};
452
+
453
+ .c-chart__title {
454
+ color: var(--atomix-warning-text-emphasis);
455
+ background: map.get($chart-gradients, warning);
456
+ background-clip: text;
457
+ -webkit-background-clip: text;
458
+ -webkit-text-fill-color: transparent;
459
+
460
+ @supports not (background-clip: text) {
461
+ color: var(--atomix-warning-text-emphasis);
462
+ background: none;
463
+ -webkit-text-fill-color: initial;
464
+ }
465
+ }
466
+
467
+ &:hover {
468
+ border-color: var(--atomix-warning-border-subtle);
469
+ }
470
+ }
471
+
472
+ .c-chart--info {
473
+ @include chart-gradient-border('info');
474
+ @include chart-gradient-background('info');
475
+ --chart-primary-color: #{map.get($chart-colors, info)};
476
+
477
+ .c-chart__title {
478
+ color: var(--atomix-info-text-emphasis);
479
+ background: map.get($chart-gradients, info);
480
+ background-clip: text;
481
+ -webkit-background-clip: text;
482
+ -webkit-text-fill-color: transparent;
483
+
484
+ @supports not (background-clip: text) {
485
+ color: var(--atomix-info-text-emphasis);
486
+ background: none;
487
+ -webkit-text-fill-color: initial;
488
+ }
489
+ }
490
+
491
+ &:hover {
492
+ border-color: var(--atomix-info-border-subtle);
493
+ }
494
+ }
495
+
496
+ .c-chart--accent {
497
+ @include chart-gradient-border('accent');
498
+ @include chart-gradient-background('accent');
499
+ --chart-primary-color: #{map.get($chart-colors, accent)};
500
+
501
+ border-color: var(--atomix-accent-border-subtle);
502
+
503
+ .c-chart__title {
504
+ color: var(--atomix-accent-text-emphasis);
505
+ }
506
+
507
+ &:hover {
508
+ border-color: var(--atomix-accent-border-subtle);
509
+ }
510
+ }
511
+
512
+ .c-chart--neutral {
513
+ @include chart-gradient-border('neutral');
514
+ @include chart-gradient-background('neutral');
515
+ --chart-primary-color: #{map.get($chart-colors, neutral)};
516
+
517
+ border-color: var(--atomix-neutral-border-subtle);
518
+
519
+ .c-chart__title {
520
+ color: var(--atomix-neutral-text-emphasis);
521
+ }
522
+
523
+ &:hover {
524
+ border-color: var(--atomix-neutral-border-subtle);
525
+ }
526
+ }
527
+
528
+ // State Modifiers
529
+ // =============================================================================
530
+ .c-chart--loading {
531
+ @include component.component-loading;
532
+
533
+ .c-chart__content {
534
+ @include chart-loading-shimmer;
535
+ }
536
+
537
+ .c-chart__canvas {
538
+ opacity: 0.3;
539
+ filter: blur(1px);
540
+ }
541
+ }
542
+
543
+ .c-chart--interactive {
544
+ cursor: pointer;
545
+ user-select: none;
546
+
547
+ &:hover {
548
+ transform: translateY(-2px);
549
+ box-shadow: $box-shadow-xl;
550
+ }
551
+
552
+ &:active {
553
+ transform: $chart-active-transform;
554
+ box-shadow: $box-shadow-md;
555
+ transition-duration: 0.1s;
556
+ }
557
+
558
+ &:focus-visible {
559
+ transform: translateY(-1px);
560
+ }
561
+ }
562
+
563
+ .c-chart--disabled {
564
+ @include component.component-disabled;
565
+
566
+ .c-chart__content {
567
+ filter: grayscale(80%) opacity(0.6);
568
+ }
569
+
570
+ .c-chart__canvas {
571
+ pointer-events: none;
572
+ }
573
+
574
+ &:hover {
575
+ transform: none;
576
+ box-shadow: $box-shadow-sm;
577
+ }
578
+ }
579
+
580
+ .c-chart--fullscreen {
581
+ position: fixed;
582
+ top: 0;
583
+ left: 0;
584
+ width: 100vw;
585
+ height: 100vh;
586
+ z-index: 9999;
587
+ border-radius: 0;
588
+ box-shadow: none;
589
+ background: var(--atomix-primary-bg-default);
590
+
591
+ @include component.component-animation('scale');
592
+
593
+ .c-chart__header {
594
+ border-bottom: 2px solid var(--atomix-primary-border-subtle);
595
+ }
596
+ }
597
+
598
+ .c-chart--minimized {
599
+ min-height: map.get($spacing-sizes, 20); // 80px
600
+ max-height: map.get($spacing-sizes, 24); // 96px
601
+ overflow: hidden;
602
+
603
+ .c-chart__header {
604
+ padding: map.get($spacing-sizes, 2);
605
+ }
606
+
607
+ .c-chart__content {
608
+ display: none;
609
+ }
610
+
611
+ .c-chart__legend {
612
+ display: none;
613
+ }
614
+
615
+ .c-chart__title {
616
+ font-size: $font-size-sm;
617
+ margin-bottom: 0;
618
+ }
619
+
620
+ .c-chart__subtitle {
621
+ display: none;
622
+ }
623
+ }
624
+
625
+ .c-chart--elevated {
626
+ box-shadow: $box-shadow-lg;
627
+ transform: translateY(-2px);
628
+
629
+ &:hover {
630
+ box-shadow: $box-shadow-xl;
631
+ transform: translateY(-4px);
632
+ }
633
+ }
634
+
635
+ .c-chart--flat {
636
+ box-shadow: none;
637
+ border: 2px solid var(--atomix-primary-border-subtle);
638
+
639
+ &:hover {
640
+ box-shadow: $box-shadow-sm;
641
+ transform: none;
642
+ }
643
+ }
644
+
645
+ .c-chart--bordered {
646
+ border: 2px solid var(--atomix-primary-border-subtle);
647
+ }
648
+
649
+ .c-chart--rounded {
650
+ border-radius: $border-radius-xl;
651
+ }
652
+
653
+ .c-chart--square {
654
+ border-radius: 0;
655
+ }
656
+
657
+ // Elements
658
+ // =============================================================================
659
+ .c-chart__header {
660
+ padding: var(--chart-padding);
661
+ border-bottom: $chart-border-width solid var(--atomix-brand-bg-subtle);
662
+ backdrop-filter: blur($chart-header-backdrop-blur);
663
+ position: relative;
664
+ display: flex;
665
+ align-items: flex-start;
666
+ justify-content: space-between;
667
+ gap: var(--chart-gap);
668
+ z-index: 2;
669
+
670
+ &::after {
671
+ content: '';
672
+ position: absolute;
673
+ bottom: 0;
674
+ left: var(--chart-padding);
675
+ right: var(--chart-padding);
676
+ height: 1px;
677
+ background: linear-gradient(90deg, transparent, var(--atomix-brand-border-subtle), transparent);
678
+ }
679
+ }
680
+
681
+ .c-chart__header-content {
682
+ flex: 1;
683
+ min-width: 0; // Prevent flex item from overflowing
684
+ }
685
+
686
+ .c-chart__title {
687
+ margin: 0 0 map.get($spacing-sizes, 2) 0;
688
+ font-size: $font-size-lg;
689
+ font-weight: $font-weight-semibold;
690
+ color: var(--atomix-primary-text-emphasis);
691
+ letter-spacing: -0.02em;
692
+ line-height: 1.3;
693
+ word-wrap: break-word;
694
+ hyphens: auto;
695
+
696
+ background: linear-gradient(
697
+ 135deg,
698
+ var(--atomix-primary-text-emphasis),
699
+ var(--atomix-secondary-text-emphasis)
700
+ );
701
+ background-clip: text;
702
+ -webkit-background-clip: text;
703
+ -webkit-text-fill-color: transparent;
704
+
705
+ // Responsive font scaling
706
+ @container (max-width: 400px) {
707
+ font-size: $font-size-md;
708
+ }
709
+ }
710
+
711
+ .c-chart__subtitle {
712
+ margin: 0;
713
+ color: var(--atomix-secondary-text-emphasis);
714
+ opacity: 0.8;
715
+ line-height: 1.4;
716
+ word-wrap: break-word;
717
+
718
+ @container (max-width: 400px) {
719
+ font-size: $font-size-xs;
720
+ }
721
+ }
722
+
723
+ .c-chart__toolbar {
724
+ display: flex;
725
+ align-items: center;
726
+ gap: var(--chart-gap);
727
+ flex-shrink: 0;
728
+ margin-left: auto;
729
+ }
730
+
731
+ .c-chart__action {
732
+ display: inline-flex;
733
+ align-items: center;
734
+ justify-content: center;
735
+ width: $chart-action-button-size;
736
+ height: $chart-action-button-size;
737
+ border-radius: $border-radius-sm;
738
+ border: $chart-border-width solid var(--atomix-primary-border-subtle);
739
+ background-color: transparent;
740
+ color: var(--atomix-secondary-text-emphasis);
741
+ cursor: pointer;
742
+ transition: all $chart-transition-duration $chart-transition-timing;
743
+ position: relative;
744
+ overflow: hidden;
745
+
746
+ // Enhanced button styling
747
+ &::before {
748
+ content: '';
749
+ position: absolute;
750
+ inset: 0;
751
+ background: var(--atomix-primary-bg-subtle);
752
+ opacity: 0;
753
+ transition: opacity $chart-transition-duration $chart-transition-timing;
754
+ }
755
+
756
+ svg {
757
+ position: relative;
758
+ z-index: 1;
759
+ transition: transform $chart-transition-duration $chart-transition-timing;
760
+ }
761
+
762
+ &:hover {
763
+ background-color: var(--atomix-primary-bg-subtle);
764
+ color: var(--atomix-primary-text-emphasis);
765
+ border-color: var(--atomix-primary-border-subtle);
766
+ transform: translateY(-1px);
767
+
768
+ &::before {
769
+ opacity: 1;
770
+ }
771
+
772
+ svg {
773
+ transform: scale(1.1);
774
+ }
775
+ }
776
+
777
+ &:focus-visible {
778
+ @include component.focus-ring;
779
+ }
780
+
781
+ &:active {
782
+ transform: translateY(1px);
783
+
784
+ svg {
785
+ transform: scale(0.95);
786
+ }
787
+ }
788
+
789
+ &:disabled {
790
+ opacity: 0.5;
791
+ cursor: not-allowed;
792
+ pointer-events: none;
793
+ }
794
+ }
795
+
796
+ .c-chart__export-group {
797
+ position: relative;
798
+ display: inline-flex;
799
+ }
800
+
801
+ .c-chart__export-dropdown {
802
+ position: absolute;
803
+ top: 100%;
804
+ right: 0;
805
+ margin-top: map.get($spacing-sizes, 1);
806
+ background: var(--atomix-primary-bg-default);
807
+ border: $chart-border-width solid var(--atomix-primary-border-subtle);
808
+ border-radius: $border-radius-md;
809
+ box-shadow: $box-shadow-lg;
810
+ backdrop-filter: blur($chart-tooltip-backdrop-blur);
811
+ z-index: 1000;
812
+ min-width: map.get($spacing-sizes, 32);
813
+ opacity: 0;
814
+ visibility: hidden;
815
+ transform: translateY(-8px);
816
+ transition: all $chart-transition-duration $chart-transition-timing;
817
+
818
+ .c-chart__export-group:hover & {
819
+ opacity: 1;
820
+ visibility: visible;
821
+ transform: translateY(0);
822
+ }
823
+ }
824
+
825
+ .c-chart__export-option {
826
+ display: block;
827
+ width: 100%;
828
+ padding: map.get($spacing-sizes, 2) map.get($spacing-sizes, 3);
829
+ border: none;
830
+ background: transparent;
831
+ color: var(--atomix-primary-text-emphasis);
832
+ font-size: $font-size-sm;
833
+ text-align: left;
834
+ cursor: pointer;
835
+ transition: background-color $chart-transition-duration $chart-transition-timing;
836
+
837
+ &:hover {
838
+ background-color: var(--atomix-primary-bg-subtle);
839
+ }
840
+
841
+ &:first-child {
842
+ border-radius: $border-radius-md $border-radius-md 0 0;
843
+ }
844
+
845
+ &:last-child {
846
+ border-radius: 0 0 $border-radius-md $border-radius-md;
847
+ }
848
+
849
+ &:only-child {
850
+ border-radius: $border-radius-md;
851
+ }
852
+ }
853
+
854
+ .c-chart__content {
855
+ flex: 1;
856
+ position: relative;
857
+ padding: var(--chart-padding);
858
+ display: flex;
859
+ align-items: center;
860
+ justify-content: center;
861
+ min-height: map.get($spacing-sizes, 32); // 128px
862
+ container-type: inline-size;
863
+
864
+ // Enhanced background pattern
865
+ &::before {
866
+ content: '';
867
+ position: absolute;
868
+ top: 0;
869
+ left: 0;
870
+ right: 0;
871
+ bottom: 0;
872
+ background-image: radial-gradient(
873
+ circle at 1px 1px,
874
+ var(--atomix-primary-border-subtle) 1px,
875
+ transparent 0
876
+ );
877
+ background-size: $chart-pattern-size $chart-pattern-size;
878
+ opacity: $chart-pattern-opacity;
879
+ pointer-events: none;
880
+ z-index: 0;
881
+ }
882
+
883
+ // Subtle gradient overlay
884
+ &::after {
885
+ content: '';
886
+ position: absolute;
887
+ inset: 0;
888
+ background: linear-gradient(
889
+ 135deg,
890
+ rgba(255, 255, 255, 0.02) 0%,
891
+ transparent 50%,
892
+ rgba(0, 0, 0, 0.02) 100%
893
+ );
894
+ pointer-events: none;
895
+ z-index: 1;
896
+ }
897
+ }
898
+
899
+ .c-chart__canvas {
900
+ width: 100%;
901
+ height: 100%;
902
+ position: relative;
903
+ overflow: hidden;
904
+ border-radius: $border-radius-sm;
905
+ z-index: 2;
906
+
907
+ // Smooth rendering for SVG elements
908
+ svg {
909
+ width: 100%;
910
+ height: 100%;
911
+ shape-rendering: geometricPrecision;
912
+ text-rendering: optimizeLegibility;
913
+ image-rendering: -webkit-optimize-contrast;
914
+ image-rendering: crisp-edges;
915
+ }
916
+
917
+ // Enhanced canvas styling
918
+ canvas {
919
+ width: 100%;
920
+ height: 100%;
921
+ image-rendering: -webkit-optimize-contrast;
922
+ image-rendering: crisp-edges;
923
+ }
924
+ }
925
+
926
+ .c-chart__legend {
927
+ display: flex;
928
+ flex-wrap: wrap;
929
+ gap: map.get($spacing-sizes, 3);
930
+ padding: var(--chart-padding);
931
+ border-bottom: $chart-border-width solid var(--atomix-brand-border-subtle);
932
+ z-index: 2;
933
+
934
+ @include chart-glassmorphism();
935
+ @include chart-gradient-border();
936
+
937
+ &::after {
938
+ content: '';
939
+ position: absolute;
940
+ bottom: 0;
941
+ left: var(--chart-padding);
942
+ right: var(--chart-padding);
943
+ height: 1px;
944
+ background: linear-gradient(90deg, transparent, var(--atomix-brand-border-subtle), transparent);
945
+ }
946
+ }
947
+
948
+ .c-chart__legend-item {
949
+ display: flex;
950
+ align-items: center;
951
+ gap: map.get($spacing-sizes, 2);
952
+ cursor: pointer;
953
+ padding: map.get($spacing-sizes, 2) map.get($spacing-sizes, 3);
954
+ border-radius: $border-radius-md;
955
+ border: $chart-border-width solid transparent;
956
+ background-color: transparent;
957
+ transition: all $chart-transition-duration $chart-transition-timing;
958
+ user-select: none;
959
+ position: relative;
960
+ overflow: hidden;
961
+
962
+ // Enhanced interaction states
963
+ &::before {
964
+ content: '';
965
+ position: absolute;
966
+ inset: 0;
967
+ background: var(--atomix-secondary-bg-subtle);
968
+ opacity: 0;
969
+ transition: opacity $chart-transition-duration $chart-transition-timing;
970
+ }
971
+
972
+ &:hover {
973
+ background-color: var(--atomix-secondary-bg-subtle);
974
+ border-color: var(--atomix-primary-border-subtle);
975
+ transform: translateY(-1px);
976
+ box-shadow: $box-shadow-sm;
977
+
978
+ &::before {
979
+ opacity: 1;
980
+ }
981
+ }
982
+
983
+ &:focus-visible {
984
+ @include component.focus-ring;
985
+ }
986
+
987
+ &:active {
988
+ transform: translateY(0);
989
+ }
990
+
991
+ // Enhanced visibility states
992
+ &[data-visible='false'] {
993
+ opacity: 0.4;
994
+ filter: grayscale(60%);
995
+
996
+ .c-chart__legend-label {
997
+ text-decoration: line-through;
998
+ }
999
+
1000
+ .c-chart__legend-color {
1001
+ opacity: 0.3;
1002
+ filter: grayscale(100%);
1003
+ }
1004
+ }
1005
+
1006
+ &[data-highlighted='true'] {
1007
+ background-color: var(--atomix-primary-bg-subtle);
1008
+ border-color: var(--atomix-primary-border-subtle);
1009
+ box-shadow: $box-shadow-md;
1010
+ transform: translateY(-2px);
1011
+
1012
+ .c-chart__legend-color {
1013
+ box-shadow: 0 0 0 2px var(--atomix-primary-border-subtle);
1014
+ transform: scale(1.1);
1015
+ }
1016
+ }
1017
+
1018
+ &[data-selected='true'] {
1019
+ background-color: var(--chart-primary-color);
1020
+ color: white;
1021
+ border-color: var(--chart-primary-color);
1022
+
1023
+ .c-chart__legend-label {
1024
+ color: white;
1025
+ }
1026
+ }
1027
+ }
1028
+
1029
+ .c-chart__legend-color {
1030
+ width: $chart-legend-color-size;
1031
+ height: $chart-legend-color-size;
1032
+ border-radius: $border-radius-sm;
1033
+ border: $chart-border-width solid var(--atomix-primary-border-subtle);
1034
+ flex-shrink: 0;
1035
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1036
+ transition: all $chart-transition-duration $chart-transition-timing;
1037
+ position: relative;
1038
+
1039
+ // Enhanced glow effect
1040
+ &::after {
1041
+ content: '';
1042
+ position: absolute;
1043
+ top: -1px;
1044
+ left: -1px;
1045
+ right: -1px;
1046
+ bottom: -1px;
1047
+ border-radius: inherit;
1048
+ background: inherit;
1049
+ filter: blur(2px);
1050
+ opacity: 0.3;
1051
+ z-index: -1;
1052
+ }
1053
+
1054
+ // Pattern support for accessibility
1055
+ &[data-pattern='dots']::before {
1056
+ content: '';
1057
+ position: absolute;
1058
+ inset: 1px;
1059
+ background-image: radial-gradient(circle at 2px 2px, currentColor 1px, transparent 1px);
1060
+ background-size: 4px 4px;
1061
+ border-radius: inherit;
1062
+ }
1063
+
1064
+ &[data-pattern='stripes']::before {
1065
+ content: '';
1066
+ position: absolute;
1067
+ inset: 1px;
1068
+ background-image: repeating-linear-gradient(
1069
+ 45deg,
1070
+ currentColor 0px,
1071
+ currentColor 1px,
1072
+ transparent 1px,
1073
+ transparent 3px
1074
+ );
1075
+ border-radius: inherit;
1076
+ }
1077
+ }
1078
+
1079
+ .c-chart__legend-label {
1080
+ color: var(--atomix-primary-text-emphasis);
1081
+ font-weight: $font-weight-medium;
1082
+ letter-spacing: -0.01em;
1083
+ transition: color $chart-transition-duration $chart-transition-timing;
1084
+ position: relative;
1085
+ z-index: 1;
1086
+ }
1087
+
1088
+ .c-chart__tooltip {
1089
+ position: absolute;
1090
+ @include chart-glassmorphism();
1091
+ @include chart-gradient-border();
1092
+ border-radius: $border-radius-lg;
1093
+ padding: map.get($spacing-sizes, 3) map.get($spacing-sizes, 4);
1094
+ box-shadow: $box-shadow-xl;
1095
+ font-size: $font-size-sm;
1096
+ color: var(--atomix-primary-text-emphasis);
1097
+ pointer-events: none;
1098
+ z-index: 1070;
1099
+ max-width: map.get($spacing-sizes, 64);
1100
+ min-width: map.get($spacing-sizes, 32);
1101
+ transition: all $chart-transition-duration $chart-transition-timing;
1102
+
1103
+ // Enhanced visibility with smooth animation
1104
+ &[data-visible='true'] {
1105
+ opacity: 1;
1106
+ transform: translateY(0) scale(1);
1107
+ }
1108
+
1109
+ // Enhanced arrow pointer
1110
+ &::before {
1111
+ content: '';
1112
+ position: absolute;
1113
+ top: -6px;
1114
+ left: 50%;
1115
+ transform: translateX(-50%);
1116
+ width: 0;
1117
+ height: 0;
1118
+ border-left: 6px solid transparent;
1119
+ border-right: 6px solid transparent;
1120
+ border-bottom: 6px solid var(--atomix-primary-border-subtle);
1121
+ }
1122
+
1123
+ &::after {
1124
+ content: '';
1125
+ position: absolute;
1126
+ top: -5px;
1127
+ left: 50%;
1128
+ transform: translateX(-50%);
1129
+ width: 0;
1130
+ height: 0;
1131
+ border-left: 5px solid transparent;
1132
+ border-right: 5px solid transparent;
1133
+ border-bottom: 5px solid var(--atomix-primary-bg-subtle);
1134
+ }
1135
+
1136
+ // Position variants
1137
+ &[data-position='top'] {
1138
+ transform: translateY(-8px) scale(0.95);
1139
+
1140
+ &::before {
1141
+ top: auto;
1142
+ bottom: -6px;
1143
+ border-bottom: none;
1144
+ border-top: 6px solid var(--atomix-primary-border-subtle);
1145
+ }
1146
+
1147
+ &::after {
1148
+ top: auto;
1149
+ bottom: -5px;
1150
+ border-bottom: none;
1151
+ border-top: 5px solid var(--atomix-primary-bg-subtle);
1152
+ }
1153
+ }
1154
+
1155
+ &[data-position='left'] {
1156
+ transform: translateX(-8px) scale(0.95);
1157
+
1158
+ &::before {
1159
+ top: 50%;
1160
+ left: auto;
1161
+ right: -6px;
1162
+ transform: translateY(-50%);
1163
+ border-bottom: 6px solid transparent;
1164
+ border-top: 6px solid transparent;
1165
+ border-left: 6px solid var(--atomix-primary-border-subtle);
1166
+ border-right: none;
1167
+ }
1168
+
1169
+ &::after {
1170
+ top: 50%;
1171
+ left: auto;
1172
+ right: -5px;
1173
+ transform: translateY(-50%);
1174
+ border-bottom: 5px solid transparent;
1175
+ border-top: 5px solid transparent;
1176
+ border-left: 5px solid var(--atomix-primary-bg-subtle);
1177
+ border-right: none;
1178
+ }
1179
+ }
1180
+
1181
+ &[data-position='right'] {
1182
+ transform: translateX(8px) scale(0.95);
1183
+
1184
+ &::before {
1185
+ top: 50%;
1186
+ left: -6px;
1187
+ right: auto;
1188
+ transform: translateY(-50%);
1189
+ border-bottom: 6px solid transparent;
1190
+ border-top: 6px solid transparent;
1191
+ border-right: 6px solid var(--atomix-primary-border-subtle);
1192
+ border-left: none;
1193
+ }
1194
+
1195
+ &::after {
1196
+ top: 50%;
1197
+ left: -5px;
1198
+ right: auto;
1199
+ transform: translateY(-50%);
1200
+ border-bottom: 5px solid transparent;
1201
+ border-top: 5px solid transparent;
1202
+ border-right: 5px solid var(--atomix-primary-bg-subtle);
1203
+ border-left: none;
1204
+ }
1205
+ }
1206
+ }
1207
+
1208
+ .c-chart__tooltip-title {
1209
+ font-weight: $font-weight-semibold;
1210
+ margin-bottom: map.get($spacing-sizes, 1);
1211
+ color: var(--atomix-primary-text-emphasis);
1212
+ font-size: $font-size-sm;
1213
+ border-bottom: 1px solid var(--atomix-brand-border-subtle);
1214
+ padding-bottom: map.get($spacing-sizes, 1);
1215
+ }
1216
+
1217
+ .c-chart__tooltip-content {
1218
+ display: flex;
1219
+ flex-direction: column;
1220
+ gap: map.get($spacing-sizes, 1);
1221
+ }
1222
+
1223
+ .c-chart__tooltip-item {
1224
+ display: flex;
1225
+ align-items: center;
1226
+ justify-content: space-between;
1227
+ gap: map.get($spacing-sizes, 2);
1228
+
1229
+ &:not(:last-child) {
1230
+ padding-bottom: map.get($spacing-sizes, 1);
1231
+ border-bottom: 1px solid var(--atomix-brand-border-subtle);
1232
+ }
1233
+ }
1234
+
1235
+ .c-chart__tooltip-label {
1236
+ font-size: $font-size-xs;
1237
+ color: var(--atomix-secondary-text-emphasis);
1238
+ opacity: 0.8;
1239
+ display: flex;
1240
+ align-items: center;
1241
+ gap: map.get($spacing-sizes, 1);
1242
+
1243
+ &::before {
1244
+ content: '';
1245
+ width: 8px;
1246
+ height: 8px;
1247
+ border-radius: 50%;
1248
+ background-color: currentColor;
1249
+ flex-shrink: 0;
1250
+ }
1251
+ }
1252
+
1253
+ .c-chart__tooltip-value {
1254
+ font-weight: $font-weight-medium;
1255
+ color: var(--atomix-primary-text-emphasis);
1256
+ font-size: $font-size-sm;
1257
+ font-variant-numeric: tabular-nums;
1258
+ }
1259
+
1260
+ .c-chart__axis {
1261
+ position: relative;
1262
+ z-index: 55;
1263
+ &.c-chart__axis--x {
1264
+ text-anchor: middle;
1265
+ dominant-baseline: hanging;
1266
+ }
1267
+
1268
+ &.c-chart__axis--y {
1269
+ text-anchor: end;
1270
+ dominant-baseline: middle;
1271
+ }
1272
+ }
1273
+
1274
+ .c-chart__axis-line {
1275
+ stroke: var(--atomix-primary-border-subtle);
1276
+ stroke-width: 1;
1277
+ opacity: 0.6;
1278
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1279
+
1280
+ &:hover {
1281
+ opacity: 0.8;
1282
+ }
1283
+ }
1284
+
1285
+ .c-chart__axis-tick-line {
1286
+ stroke: var(--atomix-primary-border-subtle);
1287
+ stroke-width: 1;
1288
+ opacity: 0.4;
1289
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1290
+
1291
+ &:hover {
1292
+ opacity: 0.6;
1293
+ }
1294
+ }
1295
+
1296
+ .c-chart__axis-label {
1297
+ font-size: $font-size-xs;
1298
+ font-weight: $font-weight-medium;
1299
+ fill: var(--atomix-secondary-text-emphasis);
1300
+ text-anchor: middle;
1301
+ }
1302
+
1303
+ .c-chart__grid {
1304
+ stroke: var(--atomix-primary-border-subtle);
1305
+ stroke-width: 0.5;
1306
+ stroke-dasharray: 2, 4;
1307
+ opacity: 0.2;
1308
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1309
+
1310
+ &.c-chart__grid--major {
1311
+ stroke-width: 1;
1312
+ stroke-dasharray: none;
1313
+ opacity: 0.4;
1314
+ }
1315
+
1316
+ &.c-chart__grid--minor {
1317
+ opacity: 0.1;
1318
+ }
1319
+
1320
+ &.c-chart__grid--zero {
1321
+ stroke-width: 1.5;
1322
+ stroke-dasharray: none;
1323
+ opacity: 0.6;
1324
+ stroke: var(--atomix-primary-border-subtle);
1325
+ }
1326
+
1327
+ // Interactive grid
1328
+ &:hover {
1329
+ opacity: 0.6;
1330
+ }
1331
+ }
1332
+
1333
+ .c-chart__data-point {
1334
+ cursor: pointer;
1335
+ transition: all $chart-transition-duration $chart-transition-timing !important;
1336
+ transform-origin: center center;
1337
+
1338
+ &:hover {
1339
+ opacity: 0.8;
1340
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
1341
+ }
1342
+
1343
+ &:focus-visible {
1344
+ outline: 2px solid var(--atomix-primary-border-subtle);
1345
+ outline-offset: 2px;
1346
+ }
1347
+
1348
+ &:active {
1349
+ transform: scale(1.05);
1350
+ }
1351
+
1352
+ // Enhanced interaction states
1353
+ &[data-highlighted='true'] {
1354
+ transform: scale(1.2);
1355
+ filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.3));
1356
+ z-index: 10;
1357
+ }
1358
+
1359
+ &[data-selected='true'] {
1360
+ stroke: var(--atomix-primary-border-subtle);
1361
+ stroke-width: 2;
1362
+ filter: drop-shadow(0 0 0 2px var(--atomix-primary-border-subtle));
1363
+ }
1364
+
1365
+ &[data-animated='true'] {
1366
+ @include chart-data-animation('scale');
1367
+ }
1368
+ }
1369
+
1370
+ .c-chart__loading {
1371
+ @include chart-data-animation('fade');
1372
+
1373
+ display: flex;
1374
+ flex-direction: column;
1375
+ align-items: center;
1376
+ justify-content: center;
1377
+ gap: map.get($spacing-sizes, 4);
1378
+ color: var(--atomix-secondary-text-emphasis);
1379
+ font-size: $font-size-sm;
1380
+ min-height: map.get($spacing-sizes, 32);
1381
+ }
1382
+
1383
+ .c-chart__loading-spinner {
1384
+ width: $chart-loading-spinner-size;
1385
+ height: $chart-loading-spinner-size;
1386
+ border: 3px solid var(--atomix-primary-border-subtle);
1387
+ border-top: 3px solid var(--atomix-primary-text-emphasis);
1388
+ border-radius: 50%;
1389
+ animation: chart-spin 1.2s $chart-transition-timing infinite;
1390
+ position: relative;
1391
+
1392
+ // Enhanced loading spinner with gradient
1393
+ &::after {
1394
+ content: '';
1395
+ position: absolute;
1396
+ top: -3px;
1397
+ left: -3px;
1398
+ right: -3px;
1399
+ bottom: -3px;
1400
+ border-radius: 50%;
1401
+ background: conic-gradient(
1402
+ from 0deg,
1403
+ transparent,
1404
+ var(--atomix-primary-border-subtle),
1405
+ transparent
1406
+ );
1407
+ mask: radial-gradient(circle, transparent 65%, black 66%);
1408
+ animation: chart-spin 0.8s linear infinite reverse;
1409
+ }
1410
+ }
1411
+
1412
+ .c-chart__loading-text {
1413
+ font-weight: $font-weight-medium;
1414
+ opacity: 0.8;
1415
+ animation: chart-pulse 2s ease-in-out infinite;
1416
+ }
1417
+
1418
+ .c-chart__error {
1419
+ @include chart-data-animation('fade');
1420
+
1421
+ display: flex;
1422
+ flex-direction: column;
1423
+ align-items: center;
1424
+ justify-content: center;
1425
+ gap: map.get($spacing-sizes, 3);
1426
+ color: var(--atomix-error-text-emphasis);
1427
+ font-size: $font-size-sm;
1428
+ text-align: center;
1429
+ padding: map.get($spacing-sizes, 8);
1430
+ min-height: map.get($spacing-sizes, 32);
1431
+ background-color: var(--atomix-error-bg-subtle);
1432
+ border-radius: $border-radius-md;
1433
+ border: $chart-border-width solid var(--atomix-error-border-subtle);
1434
+ }
1435
+
1436
+ .c-chart__error-icon {
1437
+ width: $chart-error-icon-size;
1438
+ height: $chart-error-icon-size;
1439
+ border-radius: 50%;
1440
+ background-color: var(--atomix-error-bg-emphasis);
1441
+ display: flex;
1442
+ align-items: center;
1443
+ justify-content: center;
1444
+ color: var(--atomix-error-text-emphasis);
1445
+ font-size: map.get($spacing-sizes, 6);
1446
+ animation: chart-pulse 2s ease-in-out infinite;
1447
+ }
1448
+
1449
+ .c-chart__error-content {
1450
+ display: flex;
1451
+ flex-direction: column;
1452
+ gap: map.get($spacing-sizes, 2);
1453
+ }
1454
+
1455
+ .c-chart__error-message {
1456
+ font-weight: $font-weight-medium;
1457
+ margin-bottom: map.get($spacing-sizes, 2);
1458
+ }
1459
+
1460
+ .c-chart__error-details {
1461
+ font-size: $font-size-xs;
1462
+ opacity: 0.8;
1463
+ line-height: 1.4;
1464
+ }
1465
+
1466
+ .c-chart__empty {
1467
+ @include chart-data-animation('fade');
1468
+
1469
+ display: flex;
1470
+ flex-direction: column;
1471
+ align-items: center;
1472
+ justify-content: center;
1473
+ gap: map.get($spacing-sizes, 4);
1474
+ color: var(--atomix-secondary-text-emphasis);
1475
+ font-size: $font-size-sm;
1476
+ text-align: center;
1477
+ padding: map.get($spacing-sizes, 8);
1478
+ min-height: map.get($spacing-sizes, 32);
1479
+ opacity: 0.6;
1480
+ }
1481
+
1482
+ .c-chart__empty-icon {
1483
+ width: $chart-empty-icon-size;
1484
+ height: $chart-empty-icon-size;
1485
+ opacity: 0.4;
1486
+ font-size: map.get($spacing-sizes, 8);
1487
+ display: flex;
1488
+ align-items: center;
1489
+ justify-content: center;
1490
+ }
1491
+
1492
+ .c-chart__empty-message {
1493
+ font-weight: $font-weight-medium;
1494
+ }
1495
+
1496
+ .c-chart__empty-details {
1497
+ font-size: $font-size-xs;
1498
+ opacity: 0.8;
1499
+ line-height: 1.4;
1500
+ }
1501
+
1502
+ // Chart Type Specific Styles
1503
+ // =============================================================================
1504
+
1505
+ // Line Chart
1506
+ .c-chart--line {
1507
+ .c-chart__canvas {
1508
+ svg {
1509
+ width: 100%;
1510
+ height: 100%;
1511
+ overflow: visible;
1512
+ }
1513
+
1514
+ .line-path {
1515
+ fill: none;
1516
+ stroke-width: 2.5;
1517
+ stroke-linecap: round;
1518
+ stroke-linejoin: round;
1519
+ transition: all $chart-transition-duration $chart-transition-timing;
1520
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));
1521
+
1522
+ &:hover {
1523
+ stroke-width: 3.5;
1524
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
1525
+ }
1526
+
1527
+ // Animated path drawing
1528
+ stroke-dasharray: 1000;
1529
+ stroke-dashoffset: 1000;
1530
+ animation: chart-draw-line 2s ease-out forwards;
1531
+
1532
+ // Gradient stroke support
1533
+ &[data-gradient='true'] {
1534
+ stroke: url(#lineGradient);
1535
+ }
1536
+ }
1537
+
1538
+ .area-path {
1539
+ opacity: 0.15;
1540
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1541
+
1542
+ &:hover {
1543
+ opacity: 0.25;
1544
+ }
1545
+
1546
+ // Gradient fill support
1547
+ &[data-gradient='true'] {
1548
+ fill: url(#areaGradient);
1549
+ }
1550
+ }
1551
+
1552
+ .data-point {
1553
+ r: 4;
1554
+ transition: all $chart-transition-duration $chart-transition-timing;
1555
+ cursor: pointer;
1556
+
1557
+ &:hover {
1558
+ r: 6;
1559
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
1560
+ }
1561
+
1562
+ &[data-highlighted='true'] {
1563
+ r: 8;
1564
+ stroke-width: 3;
1565
+ }
1566
+ }
1567
+
1568
+ // Line chart specific patterns
1569
+ .trend-line {
1570
+ stroke-dasharray: 5, 5;
1571
+ opacity: 0.7;
1572
+ animation: chart-dash-flow 2s linear infinite;
1573
+ }
1574
+ }
1575
+ }
1576
+
1577
+ // Area Chart
1578
+ .c-chart--area {
1579
+ .c-chart__canvas {
1580
+ .area-path {
1581
+ opacity: 0.3;
1582
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1583
+
1584
+ // Enhanced gradient fill animation
1585
+ animation: chart-area-fade 1.5s ease-out;
1586
+
1587
+ &:hover {
1588
+ opacity: 0.45;
1589
+ }
1590
+
1591
+ // Multiple area support
1592
+ &[data-stacked='true'] {
1593
+ mix-blend-mode: multiply;
1594
+ }
1595
+ }
1596
+
1597
+ .line-path {
1598
+ stroke-width: 2;
1599
+ opacity: 0.9;
1600
+ transition: all $chart-transition-duration $chart-transition-timing;
1601
+
1602
+ &:hover {
1603
+ stroke-width: 3;
1604
+ opacity: 1;
1605
+ }
1606
+ }
1607
+ }
1608
+ }
1609
+
1610
+ // Bar Chart
1611
+ .c-chart--bar {
1612
+ .c-chart__canvas {
1613
+ .bar {
1614
+ transition: all $chart-transition-duration $chart-transition-timing;
1615
+ cursor: pointer;
1616
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));
1617
+
1618
+ // Enhanced animated height growth
1619
+ animation: chart-bar-grow 0.8s ease-out;
1620
+ transform-origin: bottom center;
1621
+
1622
+ &:hover {
1623
+ opacity: 0.85;
1624
+ transform: scaleY(1.05);
1625
+ filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));
1626
+ }
1627
+
1628
+ &:focus-visible {
1629
+ outline: 2px solid var(--atomix-primary-border-subtle);
1630
+ outline-offset: 2px;
1631
+ }
1632
+
1633
+ // Gradient bar support
1634
+ &[data-gradient='true'] {
1635
+ fill: url(#barGradient);
1636
+ }
1637
+
1638
+ // Pattern support for accessibility
1639
+ &[data-pattern='stripes'] {
1640
+ fill: url(#stripesPattern);
1641
+ }
1642
+
1643
+ &[data-pattern='dots'] {
1644
+ fill: url(#dotsPattern);
1645
+ }
1646
+ }
1647
+
1648
+ .bar-value-label {
1649
+ font-size: $font-size-xs;
1650
+ font-weight: $font-weight-medium;
1651
+ fill: var(--atomix-primary-text-emphasis);
1652
+ text-anchor: middle;
1653
+ opacity: 0;
1654
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1655
+ font-variant-numeric: tabular-nums;
1656
+
1657
+ .bar:hover + & {
1658
+ opacity: 1;
1659
+ }
1660
+ }
1661
+
1662
+ // Grouped bars
1663
+ .bar-group {
1664
+ .bar {
1665
+ animation-delay: calc(var(--bar-index) * 0.1s);
1666
+ }
1667
+ }
1668
+ }
1669
+ }
1670
+
1671
+ // Horizontal Bar Chart
1672
+ .c-chart--horizontal-bar {
1673
+ .c-chart__canvas {
1674
+ .bar {
1675
+ transition: all $chart-transition-duration $chart-transition-timing;
1676
+ cursor: pointer;
1677
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));
1678
+
1679
+ // Enhanced animated width growth
1680
+ animation: chart-bar-grow-horizontal 0.8s ease-out;
1681
+ transform-origin: left center;
1682
+
1683
+ &:hover {
1684
+ opacity: 0.85;
1685
+ transform: scaleX(1.05);
1686
+ filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));
1687
+ }
1688
+ }
1689
+ }
1690
+ }
1691
+
1692
+ // Pie Chart
1693
+ .c-chart--pie {
1694
+ .c-chart__canvas {
1695
+ .pie-slice {
1696
+ transition: all 0.4s $chart-transition-timing;
1697
+ stroke: var(--atomix-primary-bg-subtle);
1698
+ stroke-width: 2;
1699
+ cursor: pointer;
1700
+ transform-origin: center;
1701
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
1702
+
1703
+ // Enhanced animated arc drawing
1704
+ animation: chart-pie-draw 1.5s ease-out;
1705
+
1706
+ &:hover {
1707
+ opacity: 0.9;
1708
+ transform: scale(1.05);
1709
+ stroke-width: 3;
1710
+ filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.2));
1711
+ }
1712
+
1713
+ &:focus-visible {
1714
+ outline: 2px solid var(--atomix-primary-border-subtle);
1715
+ outline-offset: 4px;
1716
+ }
1717
+
1718
+ // Exploded slice support
1719
+ &[data-exploded='true'] {
1720
+ transform: scale(1.1) translate(var(--explode-x, 0), var(--explode-y, 0));
1721
+ }
1722
+ }
1723
+
1724
+ .pie-label {
1725
+ font-size: $font-size-xs;
1726
+ font-weight: $font-weight-semibold;
1727
+ fill: var(--atomix-primary-text-emphasis);
1728
+ text-anchor: middle;
1729
+ pointer-events: none;
1730
+ transition: all $chart-transition-duration $chart-transition-timing;
1731
+ font-variant-numeric: tabular-nums;
1732
+
1733
+ // Enhanced label positioning
1734
+ &[data-position='outside'] {
1735
+ font-size: $font-size-sm;
1736
+ }
1737
+ }
1738
+
1739
+ // Pie chart specific enhancements
1740
+ .pie-connector-line {
1741
+ stroke: var(--atomix-secondary-text-emphasis);
1742
+ stroke-width: 1;
1743
+ opacity: 0.6;
1744
+ }
1745
+ }
1746
+ }
1747
+
1748
+ // Donut Chart
1749
+ .c-chart--donut,
1750
+ .c-chart--doughnut {
1751
+ .c-chart__canvas {
1752
+ .donut-slice {
1753
+ transition: all 0.4s $chart-transition-timing;
1754
+ stroke: var(--atomix-primary-bg-subtle);
1755
+ stroke-width: 2;
1756
+ cursor: pointer;
1757
+ transform-origin: center;
1758
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
1759
+
1760
+ // Enhanced animated arc drawing
1761
+ animation: chart-donut-draw 1.5s ease-out;
1762
+
1763
+ &:hover {
1764
+ opacity: 0.9;
1765
+ transform: scale(1.05);
1766
+ stroke-width: 3;
1767
+ filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.2));
1768
+ }
1769
+ }
1770
+
1771
+ .donut-center {
1772
+ fill: var(--atomix-primary-bg-subtle);
1773
+ transition: fill $chart-transition-duration $chart-transition-timing;
1774
+ }
1775
+
1776
+ .donut-center-label {
1777
+ font-size: $font-size-lg;
1778
+ font-weight: $font-weight-bold;
1779
+ fill: var(--atomix-primary-text-emphasis);
1780
+ text-anchor: middle;
1781
+ dominant-baseline: central;
1782
+ font-variant-numeric: tabular-nums;
1783
+ }
1784
+
1785
+ .donut-center-sublabel {
1786
+ font-size: $font-size-sm;
1787
+ font-weight: $font-weight-medium;
1788
+ fill: var(--atomix-secondary-text-emphasis);
1789
+ text-anchor: middle;
1790
+ dominant-baseline: central;
1791
+ }
1792
+
1793
+ // Progress donut support
1794
+ .progress-track {
1795
+ fill: none;
1796
+ stroke: var(--atomix-primary-border-subtle);
1797
+ stroke-width: 8;
1798
+ opacity: 0.2;
1799
+ }
1800
+
1801
+ .progress-fill {
1802
+ fill: none;
1803
+ stroke: var(--chart-primary-color);
1804
+ stroke-width: 8;
1805
+ stroke-linecap: round;
1806
+ transition: stroke-dasharray 1s ease-out;
1807
+ }
1808
+ }
1809
+ }
1810
+
1811
+ // Scatter Plot
1812
+ .c-chart--scatter {
1813
+ .c-chart__canvas {
1814
+ .scatter-point {
1815
+ r: 4;
1816
+ transition: all $chart-transition-duration $chart-transition-timing;
1817
+ cursor: pointer;
1818
+ filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));
1819
+
1820
+ &:hover {
1821
+ r: 6;
1822
+ filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.3));
1823
+ }
1824
+
1825
+ &:focus-visible {
1826
+ outline: 2px solid var(--atomix-primary-border-subtle);
1827
+ outline-offset: 2px;
1828
+ }
1829
+
1830
+ // Size-based scaling
1831
+ &[data-size='small'] {
1832
+ r: 2;
1833
+ }
1834
+ &[data-size='medium'] {
1835
+ r: 4;
1836
+ }
1837
+ &[data-size='large'] {
1838
+ r: 6;
1839
+ }
1840
+ &[data-size='xlarge'] {
1841
+ r: 8;
1842
+ }
1843
+
1844
+ // Cluster highlighting
1845
+ &[data-cluster] {
1846
+ stroke-width: 2;
1847
+ stroke: var(--atomix-primary-border-subtle);
1848
+ }
1849
+ }
1850
+
1851
+ // Trend lines
1852
+ .trend-line {
1853
+ stroke: var(--atomix-secondary-text-emphasis);
1854
+ stroke-width: 2;
1855
+ stroke-dasharray: 5, 5;
1856
+ opacity: 0.6;
1857
+ fill: none;
1858
+ }
1859
+
1860
+ // Confidence intervals
1861
+ .confidence-area {
1862
+ fill: var(--chart-primary-color);
1863
+ opacity: 0.1;
1864
+ }
1865
+ }
1866
+ }
1867
+
1868
+ // Radar Chart
1869
+ .c-chart--radar {
1870
+ .c-chart__canvas {
1871
+ .radar-path {
1872
+ fill: none;
1873
+ stroke-width: 2;
1874
+ stroke-linejoin: round;
1875
+ opacity: 0.8;
1876
+ transition: all $chart-transition-duration $chart-transition-timing;
1877
+
1878
+ &:hover {
1879
+ stroke-width: 3;
1880
+ opacity: 1;
1881
+ }
1882
+ }
1883
+
1884
+ .radar-area {
1885
+ opacity: 0.1;
1886
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1887
+
1888
+ &:hover {
1889
+ opacity: 0.2;
1890
+ }
1891
+ }
1892
+
1893
+ .radar-point {
1894
+ r: 3;
1895
+ transition: all $chart-transition-duration $chart-transition-timing;
1896
+
1897
+ &:hover {
1898
+ r: 5;
1899
+ }
1900
+ }
1901
+
1902
+ // Radar grid
1903
+ .radar-grid-line {
1904
+ stroke: var(--atomix-primary-border-subtle);
1905
+ stroke-width: 1;
1906
+ opacity: 0.3;
1907
+ }
1908
+
1909
+ .radar-axis-line {
1910
+ stroke: var(--atomix-primary-border-subtle);
1911
+ stroke-width: 1;
1912
+ opacity: 0.5;
1913
+ }
1914
+
1915
+ .radar-axis-label {
1916
+ font-size: $font-size-xs;
1917
+ font-weight: $font-weight-medium;
1918
+ fill: var(--atomix-secondary-text-emphasis);
1919
+ text-anchor: middle;
1920
+ }
1921
+ }
1922
+ }
1923
+
1924
+ // Bubble Chart
1925
+ .c-chart--bubble {
1926
+ .c-chart__canvas {
1927
+ .bubble {
1928
+ transition: all 0.4s $chart-transition-timing;
1929
+ cursor: pointer;
1930
+ opacity: 0.8;
1931
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
1932
+
1933
+ &:hover {
1934
+ opacity: 1;
1935
+ transform: scale(1.1);
1936
+ filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));
1937
+ }
1938
+
1939
+ // Size animation
1940
+ animation: chart-bubble-grow 1s ease-out;
1941
+
1942
+ // Bubble with gradient
1943
+ &[data-gradient='true'] {
1944
+ fill: url(#bubbleGradient);
1945
+ }
1946
+ }
1947
+
1948
+ // Bubble size legend
1949
+ .size-legend {
1950
+ .legend-bubble {
1951
+ opacity: 0.6;
1952
+ stroke: var(--atomix-primary-border-subtle);
1953
+ stroke-width: 1;
1954
+ }
1955
+ }
1956
+ }
1957
+ }
1958
+
1959
+ // Candlestick Chart
1960
+ .c-chart--candlestick {
1961
+ .c-chart__canvas {
1962
+ .candlestick {
1963
+ transition: all $chart-transition-duration $chart-transition-timing;
1964
+ cursor: pointer;
1965
+
1966
+ &:hover {
1967
+ opacity: 0.8;
1968
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
1969
+ }
1970
+
1971
+ // Bullish candle
1972
+ &.bullish {
1973
+ fill: var(--atomix-success-6);
1974
+ stroke: var(--atomix-success-7);
1975
+ }
1976
+
1977
+ // Bearish candle
1978
+ &.bearish {
1979
+ fill: var(--atomix-error-6);
1980
+ stroke: var(--atomix-error-7);
1981
+ }
1982
+
1983
+ // Doji candle
1984
+ &.doji {
1985
+ fill: var(--atomix-neutral-6);
1986
+ stroke: var(--atomix-neutral-7);
1987
+ }
1988
+ }
1989
+
1990
+ .wick {
1991
+ stroke-width: 1;
1992
+ opacity: 0.8;
1993
+ }
1994
+
1995
+ // Volume bars
1996
+ .volume-bar {
1997
+ opacity: 0.3;
1998
+ transition: opacity $chart-transition-duration $chart-transition-timing;
1999
+
2000
+ &:hover {
2001
+ opacity: 0.6;
2002
+ }
2003
+ }
2004
+ }
2005
+ }
2006
+
2007
+ // Heatmap Chart
2008
+ .c-chart--heatmap {
2009
+ .c-chart__canvas {
2010
+ .heatmap-cell {
2011
+ transition: all $chart-transition-duration $chart-transition-timing;
2012
+ cursor: pointer;
2013
+ stroke: var(--atomix-primary-bg-subtle);
2014
+ stroke-width: 1;
2015
+
2016
+ &:hover {
2017
+ stroke-width: 2;
2018
+ stroke: var(--atomix-primary-border-subtle);
2019
+ filter: brightness(1.1);
2020
+ }
2021
+
2022
+ // Intensity levels
2023
+ &[data-intensity='low'] {
2024
+ opacity: 0.3;
2025
+ }
2026
+ &[data-intensity='medium'] {
2027
+ opacity: 0.6;
2028
+ }
2029
+ &[data-intensity='high'] {
2030
+ opacity: 0.9;
2031
+ }
2032
+ }
2033
+
2034
+ .heatmap-label {
2035
+ font-size: $font-size-xs;
2036
+ font-weight: $font-weight-medium;
2037
+ fill: var(--atomix-primary-text-emphasis);
2038
+ text-anchor: middle;
2039
+ dominant-baseline: central;
2040
+ pointer-events: none;
2041
+ }
2042
+ }
2043
+ }
2044
+
2045
+ // Animations
2046
+ // =============================================================================
2047
+ @keyframes chart-spin {
2048
+ 0% {
2049
+ transform: rotate(0deg);
2050
+ }
2051
+ 100% {
2052
+ transform: rotate(360deg);
2053
+ }
2054
+ }
2055
+
2056
+ @keyframes chart-shimmer {
2057
+ 0% {
2058
+ left: -100%;
2059
+ }
2060
+ 100% {
2061
+ left: 100%;
2062
+ }
2063
+ }
2064
+
2065
+ @keyframes chart-pulse {
2066
+ 0%,
2067
+ 100% {
2068
+ opacity: 0.8;
2069
+ }
2070
+ 50% {
2071
+ opacity: 1;
2072
+ }
2073
+ }
2074
+
2075
+ @keyframes chart-draw-line {
2076
+ 0% {
2077
+ stroke-dashoffset: 1000;
2078
+ }
2079
+ 100% {
2080
+ stroke-dashoffset: 0;
2081
+ }
2082
+ }
2083
+
2084
+ @keyframes chart-area-fade {
2085
+ 0% {
2086
+ opacity: 0;
2087
+ }
2088
+ 100% {
2089
+ opacity: 0.3;
2090
+ }
2091
+ }
2092
+
2093
+ @keyframes chart-bar-grow {
2094
+ 0% {
2095
+ transform: scaleY(0);
2096
+ }
2097
+ 100% {
2098
+ transform: scaleY(1);
2099
+ }
2100
+ }
2101
+
2102
+ @keyframes chart-bar-grow-horizontal {
2103
+ 0% {
2104
+ transform: scaleX(0);
2105
+ }
2106
+ 100% {
2107
+ transform: scaleX(1);
2108
+ }
2109
+ }
2110
+
2111
+ @keyframes chart-pie-draw {
2112
+ 0% {
2113
+ stroke-dasharray: 0 628;
2114
+ }
2115
+ 100% {
2116
+ stroke-dasharray: 628 628;
2117
+ }
2118
+ }
2119
+
2120
+ @keyframes chart-donut-draw {
2121
+ 0% {
2122
+ stroke-dasharray: 0 628;
2123
+ }
2124
+ 100% {
2125
+ stroke-dasharray: 628 628;
2126
+ }
2127
+ }
2128
+
2129
+ @keyframes chart-fade-in {
2130
+ 0% {
2131
+ opacity: 0;
2132
+ transform: translateY(10px);
2133
+ }
2134
+ 100% {
2135
+ opacity: 1;
2136
+ transform: translateY(0);
2137
+ }
2138
+ }
2139
+
2140
+ @keyframes chart-scale-in {
2141
+ 0% {
2142
+ opacity: 0;
2143
+ transform: scale(0.8);
2144
+ }
2145
+ 100% {
2146
+ opacity: 1;
2147
+ transform: scale(1);
2148
+ }
2149
+ }
2150
+
2151
+ @keyframes chart-slide-in {
2152
+ 0% {
2153
+ opacity: 0;
2154
+ transform: translateX(-20px);
2155
+ }
2156
+ 100% {
2157
+ opacity: 1;
2158
+ transform: translateX(0);
2159
+ }
2160
+ }
2161
+
2162
+ @keyframes chart-bubble-grow {
2163
+ 0% {
2164
+ transform: scale(0);
2165
+ }
2166
+ 100% {
2167
+ transform: scale(1);
2168
+ }
2169
+ }
2170
+
2171
+ @keyframes chart-dash-flow {
2172
+ 0% {
2173
+ stroke-dashoffset: 0;
2174
+ }
2175
+ 100% {
2176
+ stroke-dashoffset: 10;
2177
+ }
2178
+ }
2179
+
2180
+ @keyframes chart-glow {
2181
+ 0%,
2182
+ 100% {
2183
+ filter: drop-shadow(0 0 5px currentColor);
2184
+ }
2185
+ 50% {
2186
+ filter: drop-shadow(0 0 15px currentColor);
2187
+ }
2188
+ }
2189
+
2190
+ // Responsive Design
2191
+ // =============================================================================
2192
+
2193
+ // Container queries for modern responsive design
2194
+ @container (max-width: 600px) {
2195
+ .c-chart {
2196
+ --chart-padding: #{map.get($spacing-sizes, 3)};
2197
+
2198
+ .c-chart__header {
2199
+ flex-direction: column;
2200
+ align-items: flex-start;
2201
+ gap: map.get($spacing-sizes, '2');
2202
+ }
2203
+
2204
+ .c-chart__toolbar {
2205
+ width: 100%;
2206
+ justify-content: flex-end;
2207
+ }
2208
+
2209
+ .c-chart__legend {
2210
+ flex-direction: column;
2211
+ gap: map.get($spacing-sizes, '2');
2212
+ }
2213
+
2214
+ .c-chart__legend-item {
2215
+ justify-content: space-between;
2216
+ width: 100%;
2217
+ }
2218
+ }
2219
+ }
2220
+
2221
+ @container (max-width: 400px) {
2222
+ .c-chart {
2223
+ --chart-padding: #{map.get($spacing-sizes, '2')};
2224
+
2225
+ .c-chart__title {
2226
+ font-size: $font-size-md;
2227
+ margin-bottom: map.get($spacing-sizes, 1);
2228
+ }
2229
+
2230
+ .c-chart__subtitle {
2231
+ font-size: $font-size-xs;
2232
+ }
2233
+
2234
+ .c-chart__action {
2235
+ width: map.get($spacing-sizes, 6);
2236
+ height: map.get($spacing-sizes, 6);
2237
+ }
2238
+ }
2239
+ }
2240
+
2241
+ // Large screens (desktops)
2242
+ @media (min-width: 1200px) {
2243
+ .c-chart--lg {
2244
+ min-height: map.get($spacing-sizes, 90); // 360px
2245
+ }
2246
+
2247
+ .c-chart--xl {
2248
+ min-height: map.get($spacing-sizes, 90); // 360px
2249
+ }
2250
+
2251
+ .c-chart__title {
2252
+ font-size: $h4-font-size;
2253
+ }
2254
+
2255
+ .c-chart__legend {
2256
+ padding: map.get($spacing-sizes, 6);
2257
+ }
2258
+
2259
+ // Enhanced hover effects on larger screens
2260
+ .c-chart:hover {
2261
+ transform: translateY(-2px);
2262
+ }
2263
+ }
2264
+
2265
+ // Medium screens (tablets)
2266
+ @media (max-width: 1024px) {
2267
+ .c-chart {
2268
+ min-height: map.get($spacing-sizes, '44'); // 176px
2269
+ }
2270
+
2271
+ .c-chart--sm {
2272
+ min-height: map.get($spacing-sizes, '32'); // 128px
2273
+ }
2274
+
2275
+ .c-chart--lg {
2276
+ min-height: map.get($spacing-sizes, '64'); // 256px
2277
+ }
2278
+
2279
+ .c-chart--xl {
2280
+ min-height: map.get($spacing-sizes, '72'); // 288px
2281
+ }
2282
+
2283
+ .c-chart__header {
2284
+ padding: map.get($spacing-sizes, 4);
2285
+ }
2286
+
2287
+ .c-chart__content {
2288
+ padding: map.get($spacing-sizes, 4);
2289
+ }
2290
+
2291
+ .c-chart__legend {
2292
+ padding: map.get($spacing-sizes, 3);
2293
+ gap: map.get($spacing-sizes, 2);
2294
+ }
2295
+
2296
+ .c-chart__toolbar {
2297
+ gap: map.get($spacing-sizes, 1);
2298
+ }
2299
+
2300
+ .c-chart__action {
2301
+ width: map.get($spacing-sizes, 7);
2302
+ height: map.get($spacing-sizes, 7);
2303
+ }
2304
+ }
2305
+
2306
+ // Small screens (large phones)
2307
+ @media (max-width: 768px) {
2308
+ .c-chart {
2309
+ min-height: map.get($spacing-sizes, '40'); // 160px
2310
+ border-radius: $border-radius-md;
2311
+ }
2312
+
2313
+ .c-chart--sm {
2314
+ min-height: map.get($spacing-sizes, '28'); // 112px
2315
+ }
2316
+
2317
+ .c-chart--lg {
2318
+ min-height: map.get($spacing-sizes, '56'); // 224px
2319
+ }
2320
+
2321
+ .c-chart--xl {
2322
+ min-height: map.get($spacing-sizes, '64'); // 256px
2323
+ }
2324
+
2325
+ .c-chart__header {
2326
+ padding: map.get($spacing-sizes, 3);
2327
+ flex-direction: column;
2328
+ align-items: flex-start;
2329
+ gap: map.get($spacing-sizes, 2);
2330
+ }
2331
+
2332
+ .c-chart__content {
2333
+ padding: map.get($spacing-sizes, 3);
2334
+ }
2335
+
2336
+ .c-chart__legend {
2337
+ padding: map.get($spacing-sizes, 3);
2338
+ gap: map.get($spacing-sizes, 2);
2339
+ flex-direction: column;
2340
+ }
2341
+
2342
+ .c-chart__legend-item {
2343
+ padding: map.get($spacing-sizes, 2);
2344
+ justify-content: space-between;
2345
+ width: 100%;
2346
+ }
2347
+
2348
+ .c-chart__toolbar {
2349
+ width: 100%;
2350
+ justify-content: flex-end;
2351
+ }
2352
+
2353
+ .c-chart__tooltip {
2354
+ max-width: map.get($spacing-sizes, 48); // 192px
2355
+ font-size: $font-size-xs;
2356
+ }
2357
+
2358
+ // Simplified hover states on mobile
2359
+ .c-chart:hover {
2360
+ transform: none;
2361
+ }
2362
+
2363
+ .c-chart__data-point:hover {
2364
+ transform: scale(1.1);
2365
+ }
2366
+
2367
+ .pie-slice:hover,
2368
+ .donut-slice:hover {
2369
+ transform: scale(1.02);
2370
+ }
2371
+ }
2372
+
2373
+ // Extra small screens (small phones)
2374
+ @media (max-width: 480px) {
2375
+ .c-chart {
2376
+ min-height: map.get($spacing-sizes, 36); // 144px
2377
+ border-radius: $border-radius-sm;
2378
+ }
2379
+
2380
+ .c-chart--sm {
2381
+ min-height: map.get($spacing-sizes, 24); // 96px
2382
+ }
2383
+
2384
+ .c-chart--lg {
2385
+ min-height: map.get($spacing-sizes, 48); // 192px
2386
+ }
2387
+
2388
+ .c-chart--xl {
2389
+ min-height: map.get($spacing-sizes, 56); // 224px
2390
+ }
2391
+
2392
+ .c-chart__title {
2393
+ font-size: $font-size-md;
2394
+ margin-bottom: map.get($spacing-sizes, 1);
2395
+ }
2396
+
2397
+ .c-chart__subtitle {
2398
+ font-size: $font-size-xs;
2399
+ }
2400
+
2401
+ .c-chart__header {
2402
+ padding: map.get($spacing-sizes, 2);
2403
+ }
2404
+
2405
+ .c-chart__content {
2406
+ padding: map.get($spacing-sizes, 2);
2407
+ }
2408
+
2409
+ .c-chart__legend {
2410
+ padding: map.get($spacing-sizes, 2);
2411
+ gap: map.get($spacing-sizes, 1);
2412
+ }
2413
+
2414
+ .c-chart__legend-item {
2415
+ padding: map.get($spacing-sizes, 1) map.get($spacing-sizes, 2);
2416
+ font-size: $font-size-xs;
2417
+ }
2418
+
2419
+ .c-chart__legend-color {
2420
+ width: map.get($spacing-sizes, 2);
2421
+ height: map.get($spacing-sizes, 2);
2422
+ }
2423
+
2424
+ .c-chart__toolbar {
2425
+ flex-wrap: wrap;
2426
+ gap: map.get($spacing-sizes, 1);
2427
+ }
2428
+
2429
+ .c-chart__action {
2430
+ width: map.get($spacing-sizes, 6);
2431
+ height: map.get($spacing-sizes, 6);
2432
+ font-size: $font-size-xs;
2433
+ }
2434
+
2435
+ .c-chart__tooltip {
2436
+ max-width: calc(100vw - #{map.get($spacing-sizes, 8)});
2437
+ padding: map.get($spacing-sizes, 2) map.get($spacing-sizes, 3);
2438
+ }
2439
+
2440
+ .c-chart__axis {
2441
+ font-size: 10px;
2442
+ }
2443
+
2444
+ // Disable some animations on small screens for performance
2445
+ .c-chart__data-point,
2446
+ .bar,
2447
+ .pie-slice,
2448
+ .donut-slice {
2449
+ transition-duration: 0.2s;
2450
+ }
2451
+ }
2452
+
2453
+ // Ultra-wide screens
2454
+ @media (min-width: 1600px) {
2455
+ .c-chart--xl {
2456
+ min-height: map.get($spacing-sizes, 90); // 360px
2457
+ }
2458
+
2459
+ .c-chart--2xl {
2460
+ min-height: map.get($spacing-sizes, 96); // 384px
2461
+ }
2462
+
2463
+ .c-chart--full {
2464
+ min-height: 50vh;
2465
+ }
2466
+ }
2467
+
2468
+ // Print styles
2469
+ @media print {
2470
+ .c-chart {
2471
+ break-inside: avoid;
2472
+ box-shadow: none;
2473
+ border: 1px solid #000;
2474
+ background: white !important;
2475
+ backdrop-filter: none;
2476
+ }
2477
+
2478
+ .c-chart__loading,
2479
+ .c-chart__error,
2480
+ .c-chart__toolbar {
2481
+ display: none !important;
2482
+ }
2483
+
2484
+ .c-chart__title {
2485
+ color: #000 !important;
2486
+ background: none !important;
2487
+ -webkit-text-fill-color: #000 !important;
2488
+ }
2489
+
2490
+ .c-chart__canvas svg {
2491
+ filter: none !important;
2492
+ }
2493
+
2494
+ // Ensure chart elements are visible in print
2495
+ .c-chart__data-point,
2496
+ .bar,
2497
+ .pie-slice,
2498
+ .donut-slice {
2499
+ stroke: #000 !important;
2500
+ stroke-width: 1 !important;
2501
+ }
2502
+ }
2503
+
2504
+ // Accessibility Enhancements
2505
+ // =============================================================================
2506
+ .c-chart {
2507
+ &:focus-visible {
2508
+ @include component.focus-ring;
2509
+ }
2510
+
2511
+ // Screen reader support
2512
+ &[aria-hidden='true'] {
2513
+ pointer-events: none;
2514
+ opacity: 0.5;
2515
+ }
2516
+
2517
+ // Keyboard navigation support
2518
+ &[tabindex]:focus {
2519
+ outline: none;
2520
+ }
2521
+
2522
+ // Enhanced keyboard navigation
2523
+ &[data-keyboard-navigation='true'] {
2524
+ .c-chart__data-point,
2525
+ .bar,
2526
+ .pie-slice,
2527
+ .donut-slice {
2528
+ &:focus {
2529
+ outline: 2px solid var(--atomix-primary-border-subtle);
2530
+ outline-offset: 2px;
2531
+ }
2532
+ }
2533
+ }
2534
+ }
2535
+
2536
+ // High contrast mode support
2537
+ @media (prefers-contrast: high) {
2538
+ .c-chart {
2539
+ border-width: 2px;
2540
+ background-color: white;
2541
+ color: black;
2542
+ backdrop-filter: none;
2543
+ }
2544
+
2545
+ .c-chart__grid {
2546
+ stroke-width: 2;
2547
+ opacity: 0.8;
2548
+ stroke: black;
2549
+ }
2550
+
2551
+ .c-chart__axis {
2552
+ color: black;
2553
+
2554
+ .axis-line,
2555
+ .tick-line {
2556
+ stroke: black;
2557
+ opacity: 1;
2558
+ }
2559
+ }
2560
+
2561
+ .c-chart__title {
2562
+ color: black;
2563
+ background: none;
2564
+ -webkit-text-fill-color: black;
2565
+ }
2566
+
2567
+ .c-chart__legend-item {
2568
+ border-color: black;
2569
+
2570
+ &:hover {
2571
+ background-color: #f0f0f0;
2572
+ }
2573
+ }
2574
+
2575
+ .c-chart__data-point {
2576
+ stroke: black;
2577
+ stroke-width: 2;
2578
+ }
2579
+
2580
+ .line-path {
2581
+ stroke: black;
2582
+ stroke-width: 3;
2583
+ }
2584
+
2585
+ .bar {
2586
+ stroke: black;
2587
+ stroke-width: 1;
2588
+ }
2589
+
2590
+ .pie-slice,
2591
+ .donut-slice {
2592
+ stroke: black;
2593
+ stroke-width: 3;
2594
+ }
2595
+
2596
+ // Ensure patterns are visible
2597
+ .c-chart__legend-color {
2598
+ border-width: 2px;
2599
+ border-color: black;
2600
+ }
2601
+ }
2602
+
2603
+ // Reduced motion preferences
2604
+ @media (prefers-reduced-motion: reduce) {
2605
+ .c-chart {
2606
+ transition: none;
2607
+
2608
+ &:hover {
2609
+ transform: none;
2610
+ }
2611
+ }
2612
+
2613
+ .c-chart__data-point,
2614
+ .bar,
2615
+ .pie-slice,
2616
+ .donut-slice,
2617
+ .scatter-point,
2618
+ .bubble {
2619
+ transition: none;
2620
+ animation: none;
2621
+
2622
+ &:hover {
2623
+ transform: none;
2624
+ animation: none;
2625
+ }
2626
+ }
2627
+
2628
+ .line-path {
2629
+ animation: none;
2630
+ stroke-dasharray: none;
2631
+ stroke-dashoffset: 0;
2632
+ }
2633
+
2634
+ .area-path {
2635
+ animation: none;
2636
+ }
2637
+
2638
+ .c-chart__loading-spinner {
2639
+ animation: none;
2640
+
2641
+ &::after {
2642
+ animation: none;
2643
+ }
2644
+ }
2645
+
2646
+ .c-chart__loading-text {
2647
+ animation: none;
2648
+ }
2649
+
2650
+ .c-chart__tooltip {
2651
+ transition: none;
2652
+ transform: none;
2653
+ opacity: 1;
2654
+ }
2655
+
2656
+ .c-chart__legend-item {
2657
+ transition: none;
2658
+
2659
+ &:hover {
2660
+ transform: none;
2661
+ }
2662
+ }
2663
+
2664
+ // Disable all chart animations
2665
+ * {
2666
+ animation-duration: 0s !important;
2667
+ animation-delay: 0s !important;
2668
+ transition-duration: 0s !important;
2669
+ transition-delay: 0s !important;
2670
+ }
2671
+ }
2672
+
2673
+ // Focus management for interactive elements
2674
+ .c-chart__data-point,
2675
+ .bar,
2676
+ .pie-slice,
2677
+ .donut-slice,
2678
+ .scatter-point,
2679
+ .bubble {
2680
+ &:focus-visible {
2681
+ outline: 2px solid var(--atomix-primary-border-subtle);
2682
+ outline-offset: 2px;
2683
+ }
2684
+ }
2685
+
2686
+ .c-chart__legend-item {
2687
+ &:focus-visible {
2688
+ @include component.focus-ring;
2689
+ }
2690
+ }
2691
+
2692
+ .c-chart__action {
2693
+ &:focus-visible {
2694
+ @include component.focus-ring;
2695
+ }
2696
+ }
2697
+
2698
+ // Touch device optimizations
2699
+ @media (hover: none) and (pointer: coarse) {
2700
+ .c-chart__data-point,
2701
+ .bar,
2702
+ .pie-slice,
2703
+ .donut-slice {
2704
+ // Increase touch targets
2705
+ &::after {
2706
+ content: '';
2707
+ position: absolute;
2708
+ top: -#{map.get($spacing-sizes, 2)};
2709
+ left: -#{map.get($spacing-sizes, 2)};
2710
+ right: -#{map.get($spacing-sizes, 2)};
2711
+ bottom: -#{map.get($spacing-sizes, 2)};
2712
+ min-width: map.get($spacing-sizes, 8);
2713
+ min-height: map.get($spacing-sizes, 8);
2714
+ }
2715
+ }
2716
+
2717
+ .c-chart__legend-item {
2718
+ min-height: $chart-touch-target-size;
2719
+ padding: map.get($spacing-sizes, 2) map.get($spacing-sizes, 3);
2720
+ }
2721
+
2722
+ .c-chart__action {
2723
+ min-width: $chart-touch-target-size;
2724
+ min-height: $chart-touch-target-size;
2725
+ }
2726
+
2727
+ // Enhanced touch feedback
2728
+ .c-chart__data-point:active,
2729
+ .bar:active,
2730
+ .pie-slice:active,
2731
+ .donut-slice:active {
2732
+ opacity: 0.7;
2733
+ }
2734
+ }
2735
+
2736
+ // Performance optimizations
2737
+ .c-chart {
2738
+ // Enable hardware acceleration
2739
+ will-change: transform, opacity;
2740
+
2741
+ // Optimize rendering
2742
+ &.c-chart--optimized {
2743
+ .c-chart__canvas {
2744
+ transform: translateZ(0);
2745
+ backface-visibility: hidden;
2746
+ }
2747
+
2748
+ .c-chart__data-point,
2749
+ .bar,
2750
+ .pie-slice,
2751
+ .donut-slice {
2752
+ will-change: transform;
2753
+ }
2754
+ }
2755
+ }
2756
+
2757
+ // CSS Grid support for complex layouts
2758
+ .c-chart--grid {
2759
+ display: grid;
2760
+ grid-template-rows: auto 1fr auto;
2761
+ grid-template-areas:
2762
+ 'header'
2763
+ 'content'
2764
+ 'legend';
2765
+
2766
+ .c-chart__header {
2767
+ grid-area: header;
2768
+ }
2769
+
2770
+ .c-chart__content {
2771
+ grid-area: content;
2772
+ }
2773
+
2774
+ .c-chart__legend {
2775
+ grid-area: legend;
2776
+ }
2777
+
2778
+ // Side legend layout
2779
+ &.c-chart--legend-side {
2780
+ grid-template-columns: 1fr auto;
2781
+ grid-template-areas:
2782
+ 'header header'
2783
+ 'content legend';
2784
+
2785
+ .c-chart__legend {
2786
+ border-top: none;
2787
+ border-left: $chart-border-width solid var(--atomix-primary-border-subtle);
2788
+ flex-direction: column;
2789
+ max-width: map.get($spacing-sizes, 64);
2790
+ }
2791
+ }
2792
+ }
2793
+
2794
+ // Modern CSS features
2795
+ @supports (backdrop-filter: blur(10px)) {
2796
+ .c-chart {
2797
+ backdrop-filter: blur($chart-backdrop-blur);
2798
+ }
2799
+
2800
+ .c-chart__header {
2801
+ backdrop-filter: blur($chart-header-backdrop-blur);
2802
+ }
2803
+
2804
+ .c-chart__tooltip {
2805
+ backdrop-filter: blur($chart-tooltip-backdrop-blur);
2806
+ }
2807
+ }
2808
+
2809
+ @supports (container-type: inline-size) {
2810
+ .c-chart__content {
2811
+ container-type: inline-size;
2812
+ }
2813
+ }
2814
+
2815
+ @supports (color-mix(in srgb, red, blue)) {
2816
+ .c-chart {
2817
+ --chart-mixed-color: color-mix(in srgb, var(--chart-primary-color) 70%, white);
2818
+ }
2819
+ }