@importcsv/react 0.2.0 → 0.2.3

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 (352) hide show
  1. package/README.md +100 -427
  2. package/build/bundled/bundled-styles.d.ts +1 -0
  3. package/build/bundled/components/CSVImporter/index.d.ts +5 -0
  4. package/build/{importer → bundled/importer}/components/Box/types/index.d.ts +1 -2
  5. package/build/{importer → bundled/importer}/components/Checkbox/types/index.d.ts +1 -1
  6. package/build/{importer → bundled/importer}/components/Input/types/index.d.ts +1 -1
  7. package/build/bundled/importer/components/Root/index.d.ts +10 -0
  8. package/build/bundled/importer/components/StepLayout/index.d.ts +18 -0
  9. package/build/{importer → bundled/importer}/components/Table/index.d.ts +2 -2
  10. package/build/bundled/importer/components/Tooltip/types/index.d.ts +11 -0
  11. package/build/bundled/importer/components/UploaderWrapper/NativeDropzone.d.ts +11 -0
  12. package/build/bundled/importer/components/VirtualTable/index.d.ts +17 -0
  13. package/build/bundled/importer/components/ui/alert.d.ts +10 -0
  14. package/build/{importer → bundled/importer}/components/ui/button.d.ts +4 -4
  15. package/build/bundled/importer/components/ui/card.d.ts +19 -0
  16. package/build/bundled/importer/components/ui/checkbox.d.ts +7 -0
  17. package/build/bundled/importer/components/ui/dialog.d.ts +38 -0
  18. package/build/bundled/importer/components/ui/flex.d.ts +23 -0
  19. package/build/bundled/importer/components/ui/input.d.ts +6 -0
  20. package/build/bundled/importer/components/ui/select.d.ts +13 -0
  21. package/build/bundled/importer/components/ui/switch.d.ts +7 -0
  22. package/build/bundled/importer/components/ui/toast.d.ts +22 -0
  23. package/build/bundled/importer/components/ui/tooltip.d.ts +20 -0
  24. package/build/{importer → bundled/importer}/components/ui/use-toast.d.ts +5 -3
  25. package/build/{importer → bundled/importer}/features/uploader/types/index.d.ts +1 -1
  26. package/build/bundled/importer/features/validation/components/TransformPanel.d.ts +18 -0
  27. package/build/{importer → bundled/importer}/hooks/useEventListener.d.ts +1 -1
  28. package/build/{importer → bundled/importer}/hooks/useIsomorphicLayoutEffect.d.ts +1 -1
  29. package/build/bundled/importer/providers/Theme.d.ts +10 -0
  30. package/build/bundled/importer/providers/index.d.ts +5 -0
  31. package/build/bundled/importer/providers/types/index.d.ts +10 -0
  32. package/build/bundled/importer/theme/index.d.ts +8 -0
  33. package/build/bundled/importer/theme/presets.d.ts +314 -0
  34. package/build/bundled/importer/theme/runtime.d.ts +62 -0
  35. package/build/bundled/importer/theme/styles.d.ts +120 -0
  36. package/build/bundled/importer/utils/errorAnalysis.d.ts +25 -0
  37. package/build/bundled/importer/utils/getStringLengthOfChildren.d.ts +2 -0
  38. package/build/bundled/importer/utils/themeUtils.d.ts +21 -0
  39. package/build/{index.d.ts → bundled/index.d.ts} +1 -1
  40. package/build/bundled/index.esm.js +8367 -0
  41. package/build/bundled/index.esm.js.map +1 -0
  42. package/build/bundled/index.js +112 -0
  43. package/build/bundled/index.js.map +1 -0
  44. package/build/bundled/index.umd.js +112 -0
  45. package/build/bundled/index.umd.js.map +1 -0
  46. package/build/bundled/js.d.ts +12 -0
  47. package/build/{types → bundled/types}/index.d.ts +27 -0
  48. package/build/bundled/types/theme.d.ts +153 -0
  49. package/build/bundled/validation/transformationStages.d.ts +26 -0
  50. package/build/bundled/validation/transformer.d.ts +17 -0
  51. package/build/preact/bundled-styles.d.ts +1 -0
  52. package/build/preact/components/CSVImporter/index.d.ts +5 -0
  53. package/build/preact/i18n/de.d.ts +32 -0
  54. package/build/preact/i18n/es.d.ts +32 -0
  55. package/build/preact/i18n/fr.d.ts +32 -0
  56. package/build/preact/i18n/i18n.d.ts +6 -0
  57. package/build/preact/i18n/it.d.ts +32 -0
  58. package/build/preact/i18n/useTranslation.d.ts +9 -0
  59. package/build/preact/importer/components/Box/index.d.ts +2 -0
  60. package/build/preact/importer/components/Box/types/index.d.ts +5 -0
  61. package/build/preact/importer/components/Checkbox/index.d.ts +2 -0
  62. package/build/preact/importer/components/Checkbox/types/index.d.ts +4 -0
  63. package/build/preact/importer/components/Errors/index.d.ts +4 -0
  64. package/build/preact/importer/components/Input/index.d.ts +2 -0
  65. package/build/preact/importer/components/Input/types/index.d.ts +18 -0
  66. package/build/preact/importer/components/Root/index.d.ts +10 -0
  67. package/build/preact/importer/components/StepLayout/index.d.ts +18 -0
  68. package/build/preact/importer/components/Stepper/hooks/useStepper.d.ts +2 -0
  69. package/build/preact/importer/components/Stepper/index.d.ts +2 -0
  70. package/build/preact/importer/components/Stepper/types/index.d.ts +14 -0
  71. package/build/preact/importer/components/Table/index.d.ts +9 -0
  72. package/build/preact/importer/components/ToggleFilter/index.d.ts +3 -0
  73. package/build/preact/importer/components/ToggleFilter/types/index.d.ts +11 -0
  74. package/build/preact/importer/components/Tooltip/index.d.ts +2 -0
  75. package/build/preact/importer/components/Tooltip/types/index.d.ts +11 -0
  76. package/build/preact/importer/components/UploaderWrapper/NativeDropzone.d.ts +11 -0
  77. package/build/preact/importer/components/UploaderWrapper/UploaderWrapper.d.ts +2 -0
  78. package/build/preact/importer/components/UploaderWrapper/types/index.d.ts +2 -0
  79. package/build/preact/importer/components/VirtualTable/index.d.ts +17 -0
  80. package/build/preact/importer/components/ui/alert.d.ts +10 -0
  81. package/build/preact/importer/components/ui/button.d.ts +12 -0
  82. package/build/preact/importer/components/ui/card.d.ts +19 -0
  83. package/build/preact/importer/components/ui/checkbox.d.ts +7 -0
  84. package/build/preact/importer/components/ui/dialog.d.ts +38 -0
  85. package/build/preact/importer/components/ui/flex.d.ts +23 -0
  86. package/build/preact/importer/components/ui/input.d.ts +6 -0
  87. package/build/preact/importer/components/ui/select.d.ts +13 -0
  88. package/build/preact/importer/components/ui/switch.d.ts +7 -0
  89. package/build/preact/importer/components/ui/toast.d.ts +22 -0
  90. package/build/preact/importer/components/ui/toaster.d.ts +1 -0
  91. package/build/preact/importer/components/ui/tooltip.d.ts +20 -0
  92. package/build/preact/importer/components/ui/use-toast.d.ts +46 -0
  93. package/build/preact/importer/features/complete/index.d.ts +2 -0
  94. package/build/preact/importer/features/complete/types/index.d.ts +5 -0
  95. package/build/preact/importer/features/configure-import/index.d.ts +13 -0
  96. package/build/preact/importer/features/configure-import/types/index.d.ts +13 -0
  97. package/build/preact/importer/features/main/hooks/useMutableLocalStorage.d.ts +1 -0
  98. package/build/preact/importer/features/main/hooks/useStepNavigation.d.ts +17 -0
  99. package/build/preact/importer/features/main/index.d.ts +2 -0
  100. package/build/preact/importer/features/main/types/index.d.ts +16 -0
  101. package/build/preact/importer/features/map-columns/components/DropDownFields.d.ts +21 -0
  102. package/build/preact/importer/features/map-columns/hooks/useMapColumnsTable.d.ts +16 -0
  103. package/build/preact/importer/features/map-columns/index.d.ts +2 -0
  104. package/build/preact/importer/features/map-columns/types/index.d.ts +16 -0
  105. package/build/preact/importer/features/row-selection/index.d.ts +2 -0
  106. package/build/preact/importer/features/row-selection/types/index.d.ts +8 -0
  107. package/build/preact/importer/features/uploader/hooks/useTemplateTable.d.ts +10 -0
  108. package/build/preact/importer/features/uploader/index.d.ts +2 -0
  109. package/build/preact/importer/features/uploader/types/index.d.ts +9 -0
  110. package/build/preact/importer/features/validation/Validation.d.ts +2 -0
  111. package/build/preact/importer/features/validation/components/TransformModal.d.ts +18 -0
  112. package/build/preact/importer/features/validation/components/TransformPanel.d.ts +18 -0
  113. package/build/preact/importer/features/validation/index.d.ts +1 -0
  114. package/build/preact/importer/features/validation/types.d.ts +32 -0
  115. package/build/preact/importer/hooks/useClickOutside.d.ts +1 -0
  116. package/build/preact/importer/hooks/useCustomStyles.d.ts +1 -0
  117. package/build/preact/importer/hooks/useEventListener.d.ts +4 -0
  118. package/build/preact/importer/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
  119. package/build/preact/importer/hooks/useRect.d.ts +12 -0
  120. package/build/preact/importer/hooks/useWindowSize.d.ts +1 -0
  121. package/build/preact/importer/providers/Theme.d.ts +10 -0
  122. package/build/preact/importer/providers/index.d.ts +5 -0
  123. package/build/preact/importer/providers/types/index.d.ts +10 -0
  124. package/build/preact/importer/services/api.d.ts +1 -0
  125. package/build/preact/importer/services/mapping.d.ts +31 -0
  126. package/build/preact/importer/services/transformation.d.ts +70 -0
  127. package/build/preact/importer/settings/theme/colors.d.ts +4 -0
  128. package/build/preact/importer/settings/theme/index.d.ts +2 -0
  129. package/build/preact/importer/settings/theme/sizes.d.ts +7 -0
  130. package/build/preact/importer/stores/theme.d.ts +17 -0
  131. package/build/preact/importer/theme/index.d.ts +8 -0
  132. package/build/preact/importer/theme/presets.d.ts +314 -0
  133. package/build/preact/importer/theme/runtime.d.ts +62 -0
  134. package/build/preact/importer/theme/styles.d.ts +120 -0
  135. package/build/preact/importer/types/index.d.ts +9 -0
  136. package/build/preact/importer/utils/colorUtils.d.ts +48 -0
  137. package/build/preact/importer/utils/errorAnalysis.d.ts +25 -0
  138. package/build/preact/importer/utils/getStringLengthOfChildren.d.ts +2 -0
  139. package/build/preact/importer/utils/stringSimilarity.d.ts +1 -0
  140. package/build/preact/importer/utils/template.d.ts +2 -0
  141. package/build/preact/importer/utils/themeUtils.d.ts +21 -0
  142. package/build/preact/importer/utils/utils.d.ts +19 -0
  143. package/build/preact/index.d.ts +4 -0
  144. package/build/preact/index.esm.js +7548 -0
  145. package/build/preact/index.esm.js.map +1 -0
  146. package/build/preact/index.js +112 -0
  147. package/build/preact/index.js.map +1 -0
  148. package/build/preact/js.d.ts +12 -0
  149. package/build/preact/settings/defaults.d.ts +3 -0
  150. package/build/preact/styles.d.ts +1 -0
  151. package/build/preact/types/index.d.ts +132 -0
  152. package/build/preact/types/theme.d.ts +153 -0
  153. package/build/preact/utils/cn.d.ts +6 -0
  154. package/build/preact/validation/transformationStages.d.ts +26 -0
  155. package/build/preact/validation/transformer.d.ts +17 -0
  156. package/build/preact/validation/validator.d.ts +23 -0
  157. package/build/react/bundled-styles.d.ts +1 -0
  158. package/build/react/components/CSVImporter/index.d.ts +5 -0
  159. package/build/react/i18n/de.d.ts +32 -0
  160. package/build/react/i18n/es.d.ts +32 -0
  161. package/build/react/i18n/fr.d.ts +32 -0
  162. package/build/react/i18n/i18n.d.ts +6 -0
  163. package/build/react/i18n/it.d.ts +32 -0
  164. package/build/react/i18n/useTranslation.d.ts +9 -0
  165. package/build/react/importer/components/Box/index.d.ts +2 -0
  166. package/build/react/importer/components/Box/types/index.d.ts +5 -0
  167. package/build/react/importer/components/Checkbox/index.d.ts +2 -0
  168. package/build/react/importer/components/Checkbox/types/index.d.ts +4 -0
  169. package/build/react/importer/components/Errors/index.d.ts +4 -0
  170. package/build/react/importer/components/Input/index.d.ts +2 -0
  171. package/build/react/importer/components/Input/types/index.d.ts +18 -0
  172. package/build/react/importer/components/Root/index.d.ts +10 -0
  173. package/build/react/importer/components/StepLayout/index.d.ts +18 -0
  174. package/build/react/importer/components/Stepper/hooks/useStepper.d.ts +2 -0
  175. package/build/react/importer/components/Stepper/index.d.ts +2 -0
  176. package/build/react/importer/components/Stepper/types/index.d.ts +14 -0
  177. package/build/react/importer/components/Table/index.d.ts +9 -0
  178. package/build/react/importer/components/ToggleFilter/index.d.ts +3 -0
  179. package/build/react/importer/components/ToggleFilter/types/index.d.ts +11 -0
  180. package/build/react/importer/components/Tooltip/index.d.ts +2 -0
  181. package/build/react/importer/components/Tooltip/types/index.d.ts +11 -0
  182. package/build/react/importer/components/UploaderWrapper/NativeDropzone.d.ts +11 -0
  183. package/build/react/importer/components/UploaderWrapper/UploaderWrapper.d.ts +2 -0
  184. package/build/react/importer/components/UploaderWrapper/types/index.d.ts +2 -0
  185. package/build/react/importer/components/VirtualTable/index.d.ts +17 -0
  186. package/build/react/importer/components/ui/alert.d.ts +10 -0
  187. package/build/react/importer/components/ui/button.d.ts +12 -0
  188. package/build/react/importer/components/ui/card.d.ts +19 -0
  189. package/build/react/importer/components/ui/checkbox.d.ts +7 -0
  190. package/build/react/importer/components/ui/dialog.d.ts +38 -0
  191. package/build/react/importer/components/ui/flex.d.ts +23 -0
  192. package/build/react/importer/components/ui/input.d.ts +6 -0
  193. package/build/react/importer/components/ui/select.d.ts +13 -0
  194. package/build/react/importer/components/ui/switch.d.ts +7 -0
  195. package/build/react/importer/components/ui/toast.d.ts +22 -0
  196. package/build/react/importer/components/ui/toaster.d.ts +1 -0
  197. package/build/react/importer/components/ui/tooltip.d.ts +20 -0
  198. package/build/react/importer/components/ui/use-toast.d.ts +46 -0
  199. package/build/react/importer/features/complete/index.d.ts +2 -0
  200. package/build/react/importer/features/complete/types/index.d.ts +5 -0
  201. package/build/react/importer/features/configure-import/index.d.ts +13 -0
  202. package/build/react/importer/features/configure-import/types/index.d.ts +13 -0
  203. package/build/react/importer/features/main/hooks/useMutableLocalStorage.d.ts +1 -0
  204. package/build/react/importer/features/main/hooks/useStepNavigation.d.ts +17 -0
  205. package/build/react/importer/features/main/index.d.ts +2 -0
  206. package/build/react/importer/features/main/types/index.d.ts +16 -0
  207. package/build/react/importer/features/map-columns/components/DropDownFields.d.ts +21 -0
  208. package/build/react/importer/features/map-columns/hooks/useMapColumnsTable.d.ts +16 -0
  209. package/build/react/importer/features/map-columns/index.d.ts +2 -0
  210. package/build/react/importer/features/map-columns/types/index.d.ts +16 -0
  211. package/build/react/importer/features/row-selection/index.d.ts +2 -0
  212. package/build/react/importer/features/row-selection/types/index.d.ts +8 -0
  213. package/build/react/importer/features/uploader/hooks/useTemplateTable.d.ts +10 -0
  214. package/build/react/importer/features/uploader/index.d.ts +2 -0
  215. package/build/react/importer/features/uploader/types/index.d.ts +9 -0
  216. package/build/react/importer/features/validation/Validation.d.ts +2 -0
  217. package/build/react/importer/features/validation/components/TransformModal.d.ts +18 -0
  218. package/build/react/importer/features/validation/components/TransformPanel.d.ts +18 -0
  219. package/build/react/importer/features/validation/index.d.ts +1 -0
  220. package/build/react/importer/features/validation/types.d.ts +32 -0
  221. package/build/react/importer/hooks/useClickOutside.d.ts +1 -0
  222. package/build/react/importer/hooks/useCustomStyles.d.ts +1 -0
  223. package/build/react/importer/hooks/useEventListener.d.ts +4 -0
  224. package/build/react/importer/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
  225. package/build/react/importer/hooks/useRect.d.ts +12 -0
  226. package/build/react/importer/hooks/useWindowSize.d.ts +1 -0
  227. package/build/react/importer/providers/Theme.d.ts +10 -0
  228. package/build/react/importer/providers/index.d.ts +5 -0
  229. package/build/react/importer/providers/types/index.d.ts +10 -0
  230. package/build/react/importer/services/api.d.ts +1 -0
  231. package/build/react/importer/services/mapping.d.ts +31 -0
  232. package/build/react/importer/services/transformation.d.ts +70 -0
  233. package/build/react/importer/settings/theme/colors.d.ts +4 -0
  234. package/build/react/importer/settings/theme/index.d.ts +2 -0
  235. package/build/react/importer/settings/theme/sizes.d.ts +7 -0
  236. package/build/react/importer/stores/theme.d.ts +17 -0
  237. package/build/react/importer/theme/index.d.ts +8 -0
  238. package/build/react/importer/theme/presets.d.ts +314 -0
  239. package/build/react/importer/theme/runtime.d.ts +62 -0
  240. package/build/react/importer/theme/styles.d.ts +120 -0
  241. package/build/react/importer/types/index.d.ts +9 -0
  242. package/build/react/importer/utils/colorUtils.d.ts +48 -0
  243. package/build/react/importer/utils/errorAnalysis.d.ts +25 -0
  244. package/build/react/importer/utils/getStringLengthOfChildren.d.ts +2 -0
  245. package/build/react/importer/utils/stringSimilarity.d.ts +1 -0
  246. package/build/react/importer/utils/template.d.ts +2 -0
  247. package/build/react/importer/utils/themeUtils.d.ts +21 -0
  248. package/build/react/importer/utils/utils.d.ts +19 -0
  249. package/build/react/index.d.ts +4 -0
  250. package/build/react/index.esm.js +7351 -0
  251. package/build/react/index.esm.js.map +1 -0
  252. package/build/react/index.js +112 -0
  253. package/build/react/index.js.map +1 -0
  254. package/build/react/js.d.ts +12 -0
  255. package/build/react/settings/defaults.d.ts +3 -0
  256. package/build/react/styles.d.ts +1 -0
  257. package/build/react/types/index.d.ts +132 -0
  258. package/build/react/types/theme.d.ts +153 -0
  259. package/build/react/utils/cn.d.ts +6 -0
  260. package/build/react/validation/transformationStages.d.ts +26 -0
  261. package/build/react/validation/transformer.d.ts +17 -0
  262. package/build/react/validation/validator.d.ts +23 -0
  263. package/package.json +63 -31
  264. package/build/bundle.css +0 -1
  265. package/build/bundled-styles.d.ts +0 -1
  266. package/build/components/CSVImporter/index.d.ts +0 -32
  267. package/build/importer/components/IframeWrapper/index.d.ts +0 -25
  268. package/build/importer/components/ImporterLayout.d.ts +0 -15
  269. package/build/importer/components/Table/types/index.d.ts +0 -42
  270. package/build/importer/components/Tooltip/types/index.d.ts +0 -11
  271. package/build/importer/components/ui/alert.d.ts +0 -8
  272. package/build/importer/components/ui/card.d.ts +0 -8
  273. package/build/importer/components/ui/checkbox.d.ts +0 -4
  274. package/build/importer/components/ui/dialog.d.ts +0 -19
  275. package/build/importer/components/ui/flex.d.ts +0 -14
  276. package/build/importer/components/ui/input.d.ts +0 -5
  277. package/build/importer/components/ui/select.d.ts +0 -13
  278. package/build/importer/components/ui/switch.d.ts +0 -4
  279. package/build/importer/components/ui/toast.d.ts +0 -15
  280. package/build/importer/components/ui/tooltip.d.ts +0 -13
  281. package/build/importer/hooks/useDemoData.d.ts +0 -16
  282. package/build/importer/hooks/useImporterSchema.d.ts +0 -21
  283. package/build/importer/providers/Theme.d.ts +0 -5
  284. package/build/importer/providers/index.d.ts +0 -5
  285. package/build/importer/providers/types/index.d.ts +0 -4
  286. package/build/importer/services/dataProcessor.d.ts +0 -38
  287. package/build/importer/utils/getStringLengthOfChildren.d.ts +0 -2
  288. package/build/index.esm.js +0 -14394
  289. package/build/index.esm.js.map +0 -1
  290. package/build/index.js +0 -327
  291. package/build/index.js.map +0 -1
  292. package/build/js.d.ts +0 -39
  293. package/build/validation/transformer.d.ts +0 -33
  294. /package/build/{i18n → bundled/i18n}/de.d.ts +0 -0
  295. /package/build/{i18n → bundled/i18n}/es.d.ts +0 -0
  296. /package/build/{i18n → bundled/i18n}/fr.d.ts +0 -0
  297. /package/build/{i18n → bundled/i18n}/i18n.d.ts +0 -0
  298. /package/build/{i18n → bundled/i18n}/it.d.ts +0 -0
  299. /package/build/{i18n → bundled/i18n}/useTranslation.d.ts +0 -0
  300. /package/build/{importer → bundled/importer}/components/Box/index.d.ts +0 -0
  301. /package/build/{importer → bundled/importer}/components/Checkbox/index.d.ts +0 -0
  302. /package/build/{importer → bundled/importer}/components/Errors/index.d.ts +0 -0
  303. /package/build/{importer → bundled/importer}/components/Input/index.d.ts +0 -0
  304. /package/build/{importer → bundled/importer}/components/Stepper/hooks/useStepper.d.ts +0 -0
  305. /package/build/{importer → bundled/importer}/components/Stepper/index.d.ts +0 -0
  306. /package/build/{importer → bundled/importer}/components/Stepper/types/index.d.ts +0 -0
  307. /package/build/{importer → bundled/importer}/components/ToggleFilter/index.d.ts +0 -0
  308. /package/build/{importer → bundled/importer}/components/ToggleFilter/types/index.d.ts +0 -0
  309. /package/build/{importer → bundled/importer}/components/Tooltip/index.d.ts +0 -0
  310. /package/build/{importer → bundled/importer}/components/UploaderWrapper/UploaderWrapper.d.ts +0 -0
  311. /package/build/{importer → bundled/importer}/components/UploaderWrapper/types/index.d.ts +0 -0
  312. /package/build/{importer → bundled/importer}/components/ui/toaster.d.ts +0 -0
  313. /package/build/{importer → bundled/importer}/features/complete/index.d.ts +0 -0
  314. /package/build/{importer → bundled/importer}/features/complete/types/index.d.ts +0 -0
  315. /package/build/{importer → bundled/importer}/features/configure-import/index.d.ts +0 -0
  316. /package/build/{importer → bundled/importer}/features/configure-import/types/index.d.ts +0 -0
  317. /package/build/{importer → bundled/importer}/features/main/hooks/useMutableLocalStorage.d.ts +0 -0
  318. /package/build/{importer → bundled/importer}/features/main/hooks/useStepNavigation.d.ts +0 -0
  319. /package/build/{importer → bundled/importer}/features/main/index.d.ts +0 -0
  320. /package/build/{importer → bundled/importer}/features/main/types/index.d.ts +0 -0
  321. /package/build/{importer → bundled/importer}/features/map-columns/components/DropDownFields.d.ts +0 -0
  322. /package/build/{importer → bundled/importer}/features/map-columns/hooks/useMapColumnsTable.d.ts +0 -0
  323. /package/build/{importer → bundled/importer}/features/map-columns/index.d.ts +0 -0
  324. /package/build/{importer → bundled/importer}/features/map-columns/types/index.d.ts +0 -0
  325. /package/build/{importer → bundled/importer}/features/row-selection/index.d.ts +0 -0
  326. /package/build/{importer → bundled/importer}/features/row-selection/types/index.d.ts +0 -0
  327. /package/build/{importer → bundled/importer}/features/uploader/hooks/useTemplateTable.d.ts +0 -0
  328. /package/build/{importer → bundled/importer}/features/uploader/index.d.ts +0 -0
  329. /package/build/{importer → bundled/importer}/features/validation/Validation.d.ts +0 -0
  330. /package/build/{importer → bundled/importer}/features/validation/components/TransformModal.d.ts +0 -0
  331. /package/build/{importer → bundled/importer}/features/validation/index.d.ts +0 -0
  332. /package/build/{importer → bundled/importer}/features/validation/types.d.ts +0 -0
  333. /package/build/{importer → bundled/importer}/hooks/useClickOutside.d.ts +0 -0
  334. /package/build/{importer → bundled/importer}/hooks/useCustomStyles.d.ts +0 -0
  335. /package/build/{importer → bundled/importer}/hooks/useRect.d.ts +0 -0
  336. /package/build/{importer → bundled/importer}/hooks/useWindowSize.d.ts +0 -0
  337. /package/build/{importer → bundled/importer}/services/api.d.ts +0 -0
  338. /package/build/{importer → bundled/importer}/services/mapping.d.ts +0 -0
  339. /package/build/{importer → bundled/importer}/services/transformation.d.ts +0 -0
  340. /package/build/{importer → bundled/importer}/settings/theme/colors.d.ts +0 -0
  341. /package/build/{importer → bundled/importer}/settings/theme/index.d.ts +0 -0
  342. /package/build/{importer → bundled/importer}/settings/theme/sizes.d.ts +0 -0
  343. /package/build/{importer → bundled/importer}/stores/theme.d.ts +0 -0
  344. /package/build/{importer → bundled/importer}/types/index.d.ts +0 -0
  345. /package/build/{importer → bundled/importer}/utils/colorUtils.d.ts +0 -0
  346. /package/build/{importer → bundled/importer}/utils/stringSimilarity.d.ts +0 -0
  347. /package/build/{importer → bundled/importer}/utils/template.d.ts +0 -0
  348. /package/build/{importer → bundled/importer}/utils/utils.d.ts +0 -0
  349. /package/build/{settings → bundled/settings}/defaults.d.ts +0 -0
  350. /package/build/{styles.d.ts → bundled/styles.d.ts} +0 -0
  351. /package/build/{utils → bundled/utils}/cn.d.ts +0 -0
  352. /package/build/{validation → bundled/validation}/validator.d.ts +0 -0
@@ -0,0 +1,12 @@
1
+ import { CSVImporterProps } from './types';
2
+ type CreateImporterProps = CSVImporterProps & {
3
+ domElement?: Element;
4
+ };
5
+ export declare function createCSVImporter(props: CreateImporterProps): {
6
+ instance: (import('../react').FunctionalComponent<import('../react').PropsWithoutRef<CSVImporterProps> & {
7
+ ref?: import('../react').Ref<unknown> | undefined;
8
+ }> & HTMLDialogElement) | null;
9
+ showModal: () => void;
10
+ closeModal: () => void;
11
+ };
12
+ export {};
@@ -0,0 +1,3 @@
1
+ import { CSVImporterProps } from '../types';
2
+ declare const defaults: CSVImporterProps;
3
+ export default defaults;
@@ -0,0 +1 @@
1
+ export declare const importcsvStyles: string;
@@ -0,0 +1,132 @@
1
+ import { ThemeConfig } from './theme';
2
+ export interface Column {
3
+ id: string;
4
+ label: string;
5
+ type?: 'string' | 'number' | 'email' | 'date' | 'phone' | 'select';
6
+ validators?: Validator[];
7
+ transformations?: Transformer[];
8
+ options?: string[];
9
+ description?: string;
10
+ placeholder?: string;
11
+ }
12
+ export type Validator = {
13
+ type: 'required';
14
+ message?: string;
15
+ } | {
16
+ type: 'unique';
17
+ message?: string;
18
+ } | {
19
+ type: 'regex';
20
+ pattern: string;
21
+ message?: string;
22
+ } | {
23
+ type: 'min';
24
+ value: number;
25
+ message?: string;
26
+ } | {
27
+ type: 'max';
28
+ value: number;
29
+ message?: string;
30
+ } | {
31
+ type: 'min_length';
32
+ value: number;
33
+ message?: string;
34
+ } | {
35
+ type: 'max_length';
36
+ value: number;
37
+ message?: string;
38
+ };
39
+ export type TransformationStage = 'pre' | 'post';
40
+ export type Transformer = {
41
+ type: 'trim';
42
+ stage?: TransformationStage;
43
+ } | {
44
+ type: 'uppercase';
45
+ stage?: TransformationStage;
46
+ } | {
47
+ type: 'lowercase';
48
+ stage?: TransformationStage;
49
+ } | {
50
+ type: 'capitalize';
51
+ stage?: TransformationStage;
52
+ } | {
53
+ type: 'remove_special_chars';
54
+ stage?: TransformationStage;
55
+ } | {
56
+ type: 'normalize_phone';
57
+ stage?: TransformationStage;
58
+ } | {
59
+ type: 'normalize_date';
60
+ format?: string;
61
+ stage?: TransformationStage;
62
+ } | {
63
+ type: 'default';
64
+ value: string;
65
+ stage?: TransformationStage;
66
+ } | {
67
+ type: 'replace';
68
+ find: string;
69
+ replace: string;
70
+ stage?: TransformationStage;
71
+ } | {
72
+ type: 'custom';
73
+ fn: (value: any) => any;
74
+ stage?: TransformationStage;
75
+ };
76
+ export interface ColumnMapping {
77
+ id: string;
78
+ label?: string;
79
+ include: boolean;
80
+ selected?: boolean;
81
+ }
82
+ export interface ColumnMappingDictionary {
83
+ [uploadColumnIndex: number]: ColumnMapping;
84
+ }
85
+ type ModalParams = {
86
+ isModal?: boolean;
87
+ modalIsOpen?: boolean;
88
+ modalOnCloseTriggered?: () => void;
89
+ modalCloseOnOutsideClick?: boolean;
90
+ };
91
+ type CustomTranslationResource = {
92
+ [language: string]: {
93
+ [key: string]: string;
94
+ };
95
+ };
96
+ export type CSVImporterProps = {
97
+ columns?: Column[];
98
+ importerKey?: string;
99
+ onComplete?: (data: any) => void;
100
+ backendUrl?: string;
101
+ user?: Record<string, any>;
102
+ metadata?: Record<string, any>;
103
+ theme?: ThemeConfig | 'default' | 'minimal' | 'modern' | 'compact' | 'dark';
104
+ darkMode?: boolean;
105
+ primaryColor?: string;
106
+ className?: string;
107
+ customStyles?: Record<string, string> | string;
108
+ classNames?: {
109
+ root?: string;
110
+ modal?: string;
111
+ header?: string;
112
+ stepper?: string;
113
+ content?: string;
114
+ footer?: string;
115
+ button?: string;
116
+ input?: string;
117
+ table?: string;
118
+ dropzone?: string;
119
+ };
120
+ showDownloadTemplateButton?: boolean;
121
+ skipHeaderRowSelection?: boolean;
122
+ waitOnComplete?: boolean;
123
+ invalidRowHandling?: 'include' | 'exclude' | 'block';
124
+ includeUnmatchedColumns?: boolean;
125
+ language?: string;
126
+ customTranslations?: CustomTranslationResource;
127
+ demoData?: {
128
+ fileName: string;
129
+ csvContent: string;
130
+ };
131
+ } & ModalParams;
132
+ export {};
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Theme configuration types for CSV Importer
3
+ */
4
+ export interface ThemeConfig {
5
+ colors?: {
6
+ primary?: string;
7
+ primaryHover?: string;
8
+ primaryForeground?: string;
9
+ secondary?: string;
10
+ secondaryHover?: string;
11
+ secondaryForeground?: string;
12
+ background?: string;
13
+ foreground?: string;
14
+ card?: string;
15
+ cardForeground?: string;
16
+ border?: string;
17
+ input?: string;
18
+ ring?: string;
19
+ muted?: string;
20
+ mutedForeground?: string;
21
+ accent?: string;
22
+ accentForeground?: string;
23
+ destructive?: string;
24
+ destructiveForeground?: string;
25
+ success?: string;
26
+ successForeground?: string;
27
+ warning?: string;
28
+ warningForeground?: string;
29
+ info?: string;
30
+ infoForeground?: string;
31
+ };
32
+ typography?: {
33
+ fontFamily?: string;
34
+ fontFamilyMono?: string;
35
+ fontSize?: {
36
+ xs?: string;
37
+ sm?: string;
38
+ base?: string;
39
+ lg?: string;
40
+ xl?: string;
41
+ '2xl'?: string;
42
+ '3xl'?: string;
43
+ };
44
+ fontWeight?: {
45
+ light?: number;
46
+ normal?: number;
47
+ medium?: number;
48
+ semibold?: number;
49
+ bold?: number;
50
+ };
51
+ lineHeight?: {
52
+ tight?: string;
53
+ normal?: string;
54
+ relaxed?: string;
55
+ };
56
+ };
57
+ spacing?: {
58
+ xs?: string;
59
+ sm?: string;
60
+ md?: string;
61
+ lg?: string;
62
+ xl?: string;
63
+ '2xl'?: string;
64
+ '3xl'?: string;
65
+ };
66
+ borders?: {
67
+ radius?: {
68
+ none?: string;
69
+ sm?: string;
70
+ md?: string;
71
+ lg?: string;
72
+ xl?: string;
73
+ full?: string;
74
+ };
75
+ width?: {
76
+ none?: string;
77
+ thin?: string;
78
+ medium?: string;
79
+ thick?: string;
80
+ };
81
+ };
82
+ components?: {
83
+ button?: {
84
+ padding?: string;
85
+ fontSize?: string;
86
+ fontWeight?: string;
87
+ borderRadius?: string;
88
+ height?: string;
89
+ minWidth?: string;
90
+ };
91
+ input?: {
92
+ padding?: string;
93
+ fontSize?: string;
94
+ borderRadius?: string;
95
+ borderWidth?: string;
96
+ height?: string;
97
+ background?: string;
98
+ };
99
+ modal?: {
100
+ width?: string;
101
+ maxWidth?: string;
102
+ maxHeight?: string;
103
+ padding?: string;
104
+ borderRadius?: string;
105
+ backdropOpacity?: string;
106
+ };
107
+ table?: {
108
+ headerBackground?: string;
109
+ headerForeground?: string;
110
+ rowHoverBackground?: string;
111
+ borderColor?: string;
112
+ cellPadding?: string;
113
+ };
114
+ stepper?: {
115
+ activeColor?: string;
116
+ inactiveColor?: string;
117
+ completedColor?: string;
118
+ lineColor?: string;
119
+ dotSize?: string;
120
+ };
121
+ dropzone?: {
122
+ borderStyle?: string;
123
+ borderColor?: string;
124
+ borderColorHover?: string;
125
+ backgroundColor?: string;
126
+ backgroundColorHover?: string;
127
+ padding?: string;
128
+ borderRadius?: string;
129
+ };
130
+ };
131
+ shadows?: {
132
+ sm?: string;
133
+ md?: string;
134
+ lg?: string;
135
+ xl?: string;
136
+ };
137
+ animations?: {
138
+ duration?: {
139
+ fast?: string;
140
+ normal?: string;
141
+ slow?: string;
142
+ };
143
+ easing?: string;
144
+ };
145
+ }
146
+ export declare const defaultTheme: ThemeConfig;
147
+ export declare const presetThemes: {
148
+ default: ThemeConfig;
149
+ minimal: ThemeConfig;
150
+ modern: ThemeConfig;
151
+ compact: ThemeConfig;
152
+ dark: ThemeConfig;
153
+ };
@@ -0,0 +1,6 @@
1
+ import { ClassValue } from 'clsx';
2
+ /**
3
+ * Utility function to merge Tailwind CSS classes with proper precedence
4
+ * Combines clsx for conditional classes and tailwind-merge for deduplication
5
+ */
6
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Transformation stage definitions for smart auto-detection
3
+ *
4
+ * Pre-validation transformations clean and normalize data before validation rules are applied.
5
+ * Post-validation transformations enrich and format data after validation passes.
6
+ */
7
+ /**
8
+ * Transformations that should run BEFORE validation
9
+ * These typically clean or normalize input to prepare it for validation
10
+ */
11
+ export declare const PRE_VALIDATION_TRANSFORMS: readonly ["trim", "uppercase", "lowercase", "remove_special_chars", "normalize_phone", "normalize_date"];
12
+ /**
13
+ * Transformations that should run AFTER validation
14
+ * These typically format, enrich, or provide defaults for valid data
15
+ */
16
+ export declare const POST_VALIDATION_TRANSFORMS: readonly ["default", "capitalize", "replace", "custom"];
17
+ export type PreValidationTransform = typeof PRE_VALIDATION_TRANSFORMS[number];
18
+ export type PostValidationTransform = typeof POST_VALIDATION_TRANSFORMS[number];
19
+ /**
20
+ * Check if a transformation type should run before validation
21
+ */
22
+ export declare function isPreValidationTransform(type: string): boolean;
23
+ /**
24
+ * Check if a transformation type should run after validation
25
+ */
26
+ export declare function isPostValidationTransform(type: string): boolean;
@@ -0,0 +1,17 @@
1
+ import { Transformer } from '../types';
2
+ /**
3
+ * Apply transformations to a value
4
+ * @param value The value to transform
5
+ * @param transformations Array of transformations to apply
6
+ * @returns Transformed value
7
+ */
8
+ export declare function applyTransformations(value: any, transformations?: Transformer[]): any;
9
+ /**
10
+ * Categorize transformations into pre-validation and post-validation stages
11
+ * @param transformations Array of transformations to categorize
12
+ * @returns Object with pre and post transformation arrays
13
+ */
14
+ export declare function categorizeTransformations(transformations?: Transformer[]): {
15
+ pre: Transformer[];
16
+ post: Transformer[];
17
+ };
@@ -0,0 +1,23 @@
1
+ import { Column } from '../types';
2
+ /**
3
+ * Validates a single value against a column's validators
4
+ * @param value The value to validate
5
+ * @param column The column definition with validators
6
+ * @returns Error message if validation fails, null if valid
7
+ */
8
+ export declare function validateColumn(value: any, column: Column): string | null;
9
+ /**
10
+ * Validates uniqueness across all rows for a column
11
+ * @param rows All data rows
12
+ * @param columnIndex The column index to check
13
+ * @param column The column definition
14
+ * @returns Array of row indices that have duplicate values
15
+ */
16
+ export declare function validateUniqueness(rows: any[][], columnIndex: number, column: Column): number[];
17
+ /**
18
+ * Batch validation for all rows
19
+ * @param rows Data rows to validate
20
+ * @param columns Column definitions
21
+ * @returns Validation results with errors per cell
22
+ */
23
+ export declare function validateBatch(rows: any[][], columns: Column[]): Map<string, string>;
package/package.json CHANGED
@@ -1,9 +1,33 @@
1
1
  {
2
2
  "name": "@importcsv/react",
3
- "version": "0.2.0",
3
+ "version": "0.2.3",
4
4
  "description": "Open-source CSV and XLS/XLSX file importer for React and JavaScript",
5
- "main": "build/index.js",
6
- "module": "build/index.esm.js",
5
+ "main": "build/react/index.js",
6
+ "module": "build/react/index.esm.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./build/react/types/index.d.ts",
10
+ "import": "./build/react/index.esm.js",
11
+ "require": "./build/react/index.js"
12
+ },
13
+ "./react": {
14
+ "types": "./build/react/types/index.d.ts",
15
+ "import": "./build/react/index.esm.js",
16
+ "require": "./build/react/index.js"
17
+ },
18
+ "./preact": {
19
+ "types": "./build/preact/types/index.d.ts",
20
+ "import": "./build/preact/index.esm.js",
21
+ "require": "./build/preact/index.js"
22
+ },
23
+ "./bundled": {
24
+ "types": "./build/bundled/types/index.d.ts",
25
+ "import": "./build/bundled/index.esm.js",
26
+ "require": "./build/bundled/index.js",
27
+ "script": "./build/bundled/index.umd.js"
28
+ },
29
+ "./styles.css": "./build/style.css"
30
+ },
7
31
  "files": [
8
32
  "build"
9
33
  ],
@@ -28,21 +52,37 @@
28
52
  "homepage": "https://github.com/abhishekray07/importcsv#readme",
29
53
  "types": "build/index.d.ts",
30
54
  "scripts": {
31
- "build:js": "rollup --config rollup.config-js.js && cp package-js.json build/package.json",
32
- "build:react": "vite build",
33
- "build:react:dev": "vite build --mode development",
34
- "build:react:prod": "vite build --mode production",
35
- "publish:local:js": "yarn build:js && cd build && yalc publish",
36
- "publish:local:react": "yarn build:react:dev && yalc publish",
37
- "publish:local:react:prod": "yarn build:react:prod && yalc publish",
38
- "publish:js": "yarn build:js && cd build && npm publish",
39
- "publish:react": "NPM_PACKAGE_BUILD=true yarn build:react:prod && yarn publish --access public",
40
- "build:watch": "vite build --watch --mode development",
41
- "dev:examples": "cd examples && npm install && npm run dev"
55
+ "build:react": "vite build --mode react",
56
+ "build:preact": "vite build --mode preact",
57
+ "build:bundled": "vite build --mode bundled",
58
+ "build": "npm-run-all --parallel build:react build:preact build:bundled",
59
+ "build:legacy": "vite build --mode production",
60
+ "dev": "vite --mode preact",
61
+ "dev:examples": "cd examples && npm install && npm run dev",
62
+ "watch:react": "vite build --watch --mode react",
63
+ "watch:preact": "vite build --watch --mode preact",
64
+ "watch:bundled": "vite build --watch --mode bundled",
65
+ "publish:react": "npm version patch && npm run build:react && npm publish",
66
+ "publish:react:minor": "npm version minor && npm run build:react && npm publish",
67
+ "publish:react:major": "npm version major && npm run build:react && npm publish",
68
+ "yalc:publish": "npm run build:react && yalc publish --push",
69
+ "yalc:watch": "npm run watch:react & yalc publish --push --changed"
42
70
  },
43
71
  "peerDependencies": {
44
- "react": ">=18.0.0",
45
- "react-dom": ">=18.0.0"
72
+ "preact": "^10.0.0",
73
+ "react": "^16.8.0 || ^17 || ^18 || ^19",
74
+ "react-dom": "^16.8.0 || ^17 || ^18 || ^19"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "react": {
78
+ "optional": true
79
+ },
80
+ "react-dom": {
81
+ "optional": true
82
+ },
83
+ "preact": {
84
+ "optional": true
85
+ }
46
86
  },
47
87
  "optionalDependencies": {
48
88
  "xlsx": "^0.18.5"
@@ -51,6 +91,8 @@
51
91
  "@babel/preset-env": "^7.22.4",
52
92
  "@babel/preset-react": "^7.22.3",
53
93
  "@babel/preset-typescript": "^7.21.5",
94
+ "@preact/compat": "^18.3.1",
95
+ "@preact/preset-vite": "^2.10.2",
54
96
  "@trivago/prettier-plugin-sort-imports": "^4.1.1",
55
97
  "@types/babel__core": "^7.20.1",
56
98
  "@types/jest": "^24.9.1",
@@ -69,11 +111,11 @@
69
111
  "eslint-plugin-react": "^7.32.2",
70
112
  "identity-obj-proxy": "^3.0.0",
71
113
  "jest": "^26.6.3",
114
+ "npm-run-all": "^4.1.5",
72
115
  "postcss-import": "^16.1.1",
116
+ "postcss-prefix-selector": "^2.1.1",
73
117
  "prettier": "^2.8.6",
74
118
  "prop-types": "^15.8.1",
75
- "react": "18.2.0",
76
- "react-dom": "18.2.0",
77
119
  "style-loader": "^3.3.3",
78
120
  "tailwindcss": "^3.4.0",
79
121
  "ts-jest": "^26.5.6",
@@ -81,28 +123,18 @@
81
123
  "typescript-plugin-css-modules": "^3.4.0",
82
124
  "use-sync-external-store": "^1.2.0",
83
125
  "vite": "^7.1.3",
126
+ "vite-plugin-css-injected-by-js": "^3.5.2",
84
127
  "vite-plugin-dts": "^4.5.4"
85
128
  },
86
129
  "dependencies": {
87
- "@radix-ui/react-alert-dialog": "^1.1.14",
88
- "@radix-ui/react-checkbox": "^1.2.3",
89
- "@radix-ui/react-dialog": "^1.1.11",
90
- "@radix-ui/react-label": "^2.1.4",
91
- "@radix-ui/react-progress": "^1.1.4",
92
- "@radix-ui/react-select": "^2.2.2",
93
- "@radix-ui/react-separator": "^1.1.7",
94
- "@radix-ui/react-slot": "^1.2.0",
95
- "@radix-ui/react-switch": "^1.2.5",
96
- "@radix-ui/react-toast": "^1.2.11",
97
- "@radix-ui/react-tooltip": "^1.2.4",
130
+ "@tanstack/react-virtual": "^3.13.12",
98
131
  "autoprefixer": "^10.4.21",
99
132
  "class-variance-authority": "^0.7.1",
100
133
  "clsx": "^2.1.1",
101
134
  "lucide-react": "^0.507.0",
102
135
  "papaparse": "^5.4.1",
103
136
  "postcss": "^8.5.3",
104
- "react-dropzone": "^14.2.3",
105
- "react-frame-component": "^5.2.7",
137
+ "preact": "^10.0.0",
106
138
  "react-hotkeys-hook": "^5.1.0",
107
139
  "tailwind-merge": "^3.2.0",
108
140
  "zustand": "^4.4.7"
package/build/bundle.css DELETED
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.csv-importer{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 221.2 83.2% 53.3%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 221.2 83.2% 53.3%;--radius: .5rem;--color-primary: #2563eb;--color-primary-foreground: #ffffff;--color-secondary: #f3f4f6;--color-secondary-foreground: #111827;--color-border: #e5e7eb;--color-background: #ffffff;--color-text: #111827;--color-error: #ef4444;--color-error-foreground: #ffffff;--color-muted: #f3f4f6;--color-muted-foreground: #6b7280;--color-accent: #f3f4f6;--color-accent-foreground: #111827}.csv-importer[data-theme=dark]{--background: 222.2 84% 4.9%;--foreground: 210 40% 98%;--card: 222.2 84% 4.9%;--card-foreground: 210 40% 98%;--popover: 222.2 84% 4.9%;--popover-foreground: 210 40% 98%;--primary: 217.2 91.2% 59.8%;--primary-foreground: 222.2 47.4% 11.2%;--secondary: 217.2 32.6% 17.5%;--secondary-foreground: 210 40% 98%;--muted: 217.2 32.6% 17.5%;--muted-foreground: 215 20.2% 65.1%;--accent: 217.2 32.6% 17.5%;--accent-foreground: 210 40% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 210 40% 98%;--border: 217.2 32.6% 17.5%;--input: 217.2 32.6% 17.5%;--ring: 224.3 76.3% 48%}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.\!relative{position:relative!important}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.top-auto{top:auto}.isolate{isolation:isolate}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-8{margin-top:2rem;margin-bottom:2rem}.-ml-1{margin-left:-.25rem}.-ml-px{margin-left:-1px}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.box-border{box-sizing:border-box}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.inline-table{display:inline-table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.\!grid{display:grid!important}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-0{height:0px}.h-1{height:.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[36px\]{height:36px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-\[120px\]{max-height:120px}.max-h-\[300px\]{max-height:300px}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-\[180px\]{min-height:180px}.min-h-\[240px\]{min-height:240px}.min-h-\[400px\]{min-height:400px}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[30\%\]{width:30%}.w-\[35\%\]{width:35%}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.min-w-\[36px\]{min-width:36px}.min-w-\[600px\]{min-width:600px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.max-w-\[1000px\]{max-width:1000px}.max-w-\[250px\]{max-width:250px}.max-w-\[300px\]{max-width:300px}.max-w-\[440px\]{max-width:440px}.max-w-\[560px\]{max-width:560px}.max-w-\[660px\]{max-width:660px}.max-w-\[800px\]{max-width:800px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-l-md{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-blue-100{--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-50{--tw-border-opacity: 1;border-color:rgb(239 246 255 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-blue-600{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.border-blue-700{--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.border-blue-800{--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.border-blue-900{--tw-border-opacity: 1;border-color:rgb(30 58 138 / var(--tw-border-opacity, 1))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-400{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.border-gray-50{--tw-border-opacity: 1;border-color:rgb(249 250 251 / var(--tw-border-opacity, 1))}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-gray-900{--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity, 1))}.border-green-100{--tw-border-opacity: 1;border-color:rgb(220 252 231 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity, 1))}.border-green-50{--tw-border-opacity: 1;border-color:rgb(240 253 244 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-green-700{--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.border-green-800{--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.border-green-900{--tw-border-opacity: 1;border-color:rgb(20 83 45 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-muted{border-color:hsl(var(--muted))}.border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-primary{border-color:hsl(var(--primary))}.border-red-100{--tw-border-opacity: 1;border-color:rgb(254 226 226 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-red-50{--tw-border-opacity: 1;border-color:rgb(254 242 242 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-600{--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.border-red-700{--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.bg-background{background-color:hsl(var(--background))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-200{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity, 1))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-700{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.bg-blue-800{--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.bg-blue-900{--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-200{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.bg-green-300{--tw-bg-opacity: 1;background-color:rgb(134 239 172 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-green-700{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.bg-green-800{--tw-bg-opacity: 1;background-color:rgb(22 101 52 / var(--tw-bg-opacity, 1))}.bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-200{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.bg-red-300{--tw-bg-opacity: 1;background-color:rgb(252 165 165 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-700{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.stroke-2{stroke-width:2}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pl-10{padding-left:2.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.font-sans{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal: ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.slashed-zero{--tw-slashed-zero: slashed-zero;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.lining-nums{--tw-numeric-figure: lining-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.oldstyle-nums{--tw-numeric-figure: oldstyle-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.proportional-nums{--tw-numeric-spacing: proportional-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.diagonal-fractions{--tw-numeric-fraction: diagonal-fractions;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.stacked-fractions{--tw-numeric-fraction: stacked-fractions;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-50{--tw-text-opacity: 1;color:rgb(239 246 255 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-50{--tw-text-opacity: 1;color:rgb(249 250 251 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-50{--tw-text-opacity: 1;color:rgb(240 253 244 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-100{--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-50{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.overline{text-decoration-line:overline}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-blue-500{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.\!transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.animate-in{animation-duration:.3s;animation-fill-mode:both;animation-timing-function:cubic-bezier(.4,0,.2,1)}.fade-in-0{animation-name:fadeIn}.zoom-in-95{animation-name:zoomIn}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.\[a-zA-Z0-9\:\\\\-\\\\\._\$\]{a-z-a--z0-9:\\-\\. $}.\[vite\:css\]{vite:css}.\[vite\:html\]{vite:html}.\[vite\:react-babel\]{vite:react-babel}.app-container{max-width:1200px;margin:0 auto;padding:20px}@media (max-width: 768px){.app-container{padding:15px}}@media (max-width: 480px){.app-container{padding:10px}}.app-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;padding-bottom:15px;border-bottom:1px solid #e0e0e0}@media (max-width: 768px){.app-header{flex-direction:column;align-items:flex-start;gap:10px}}.app-header h1{margin:0;color:#333}@media (max-width: 480px){.app-header h1{font-size:1.5rem}}.user-info{display:flex;align-items:center;gap:15px}@media (max-width: 480px){.user-info{gap:10px;flex-wrap:wrap}}.app-main{background-color:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 4px #0000001a}@media (max-width: 768px){.app-main{padding:15px}}@media (max-width: 480px){.app-main{padding:10px;border-radius:6px}}.schema-selector{display:flex;align-items:center;gap:15px;margin-bottom:20px}@media (max-width: 768px){.schema-selector{flex-direction:column;align-items:flex-start;gap:10px}}.loading{text-align:center;padding:20px;color:#666}.error-message{background-color:#ffebee;color:#c62828;padding:10px 15px;border-radius:4px;margin-bottom:20px}@media (max-width: 480px){.error-message{padding:8px 12px;font-size:14px}}.import-job-status{margin-top:20px;padding:15px;background-color:#e8f5e9;border-radius:4px}@media (max-width: 480px){.import-job-status{padding:10px}}.login-container{max-width:400px;margin:100px auto;padding:30px;background-color:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a}@media (max-width: 768px){.login-container{max-width:85%;margin:60px auto;padding:20px}}@media (max-width: 480px){.login-container{max-width:95%;margin:30px auto;padding:15px}}.login-container h2{margin-top:0;margin-bottom:20px;text-align:center;color:#333}@media (max-width: 480px){.login-container h2{font-size:1.5rem;margin-bottom:15px}}.form-group{margin-bottom:15px}.form-group label{display:block;margin-bottom:5px;font-weight:500}.form-group input{width:100%;padding:8px 12px;border-radius:4px;border:1px solid #ccc;box-sizing:border-box}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);inset:0}.before\:-z-10:before{content:var(--tw-content);z-index:-10}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:bg-green-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.before\:content-\[\'\'\]:before{--tw-content: "";content:var(--tw-content)}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-600:hover{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:bg-blue-100:focus{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus\:text-blue-900:focus{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-blue-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-gray-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-red-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-50:disabled{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[state\=checked\]\:bg-blue-50[data-state=checked]{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=checked\]\:font-medium[data-state=checked]{font-weight:500}.data-\[state\=checked\]\:text-blue-900[data-state=checked]{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-40[data-disabled]{opacity:.4}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=open\]\:animate-in[data-state=open]{animation-duration:.3s;animation-fill-mode:both;animation-timing-function:cubic-bezier(.4,0,.2,1)}.data-\[state\=open\]\:fade-in-0[data-state=open]{animation-name:fadeIn}.data-\[state\=open\]\:zoom-in-95[data-state=open]{animation-name:zoomIn}.dark\:border-destructive:is([data-theme=dark] *){border-color:hsl(var(--destructive))}.dark\:border-gray-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:bg-gray-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:text-gray-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}@media (max-width: 480px){.max-\[480px\]\:p-4{padding:1rem}}@media (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:block{display:block}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>\*\]\:min-w-\[190px\]>*{min-width:190px}.\[\&\>\*\]\:flex-1>*{flex:1 1 0%}.\[\&\>div\:nth-child\(even\)\]\:bg-gray-50>div:nth-child(2n){--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.CSVImporter{border:none;background-color:transparent;padding:0 1rem;border-radius:1.2rem;color:inherit;cursor:pointer;font-weight:500;font-size:14px;display:inline-flex;gap:.5rem;align-items:center;transition:filter .2s ease-out}.CSVImporter svg{display:block}.CSVImporter svg path{stroke:currentColor!important}.CSVImporter:hover,.CSVImporter:active{filter:brightness(1.2)}.CSVImporter-dialog::backdrop{background-color:#000000d9}.CSVImporter-dialog{border-radius:1rem;width:80vw;max-height:80vh;min-width:800px;border:none;position:fixed;inset:0;padding:0;margin:auto}.CSVImporter-div{border:none;display:block;width:100%;height:auto;max-height:80vh;overflow-y:auto}@media (max-width: 768px){.CSVImporter-dialog{width:95vw;min-width:unset;max-width:100%}}