@genispace/geniapp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/dist/CrossAppRecordPicker-BXchXcK5.js +624 -0
  4. package/dist/CrossAppRecordPicker-BXchXcK5.js.map +1 -0
  5. package/dist/Page-wHZrMN17.js +24 -0
  6. package/dist/Page-wHZrMN17.js.map +1 -0
  7. package/dist/ai/adopt/AiSuggestionPanel.d.ts +30 -0
  8. package/dist/ai/adopt/BusinessGuidancePanel.d.ts +31 -0
  9. package/dist/ai/adopt/DetailPageAiLayout.d.ts +7 -0
  10. package/dist/ai/adopt/adoptPresets.d.ts +11 -0
  11. package/dist/ai/adopt/guidanceContent.d.ts +27 -0
  12. package/dist/ai/adopt/parseAiSummary.d.ts +7 -0
  13. package/dist/ai/components/AgentJobProgress.d.ts +124 -0
  14. package/dist/ai/components/AsyncCombobox.d.ts +44 -0
  15. package/dist/ai/components/BulkActionBar.d.ts +44 -0
  16. package/dist/ai/components/EntityRef.d.ts +39 -0
  17. package/dist/ai/components/JobProgress.d.ts +64 -0
  18. package/dist/ai/components/ServerDataTable.d.ts +89 -0
  19. package/dist/ai/components/Timeline.d.ts +35 -0
  20. package/dist/ai/components/useInfiniteRows.d.ts +25 -0
  21. package/dist/ai/errors/userFacingError.d.ts +14 -0
  22. package/dist/ai/errors/userFacingError.js +48 -0
  23. package/dist/ai/errors/userFacingError.js.map +1 -0
  24. package/dist/ai/index.d.ts +34 -0
  25. package/dist/ai/integrations/partner/createPartnerRecordPickerHook.d.ts +15 -0
  26. package/dist/ai/integrations/partner/partnerRecordPicker.d.ts +20 -0
  27. package/dist/ai/layout/ModalWithAiLayout.d.ts +11 -0
  28. package/dist/ai/layout/aiUi.d.ts +16 -0
  29. package/dist/ai/layout/layoutConstants.d.ts +19 -0
  30. package/dist/ai/layout/modalSizeForAi.d.ts +5 -0
  31. package/dist/ai/locales/sharedAiCopy.d.ts +6 -0
  32. package/dist/ai/managed-data/DatasourceReadonlyTable.d.ts +11 -0
  33. package/dist/ai/managed-data/createTableClient.d.ts +7 -0
  34. package/dist/ai/managed-data/emitManagedEvent.d.ts +18 -0
  35. package/dist/ai/managed-data/executeManagedDatasource.d.ts +21 -0
  36. package/dist/ai/managed-data/queryManagedDatasource.d.ts +28 -0
  37. package/dist/ai/providers/AppUiProviders.d.ts +6 -0
  38. package/dist/ai/types/app-ai.types.d.ts +29 -0
  39. package/dist/ai/types/index.d.ts +1 -0
  40. package/dist/ai.d.ts +1 -0
  41. package/dist/ai.js +1817 -0
  42. package/dist/ai.js.map +1 -0
  43. package/dist/case-workspace/domain.d.ts +41 -0
  44. package/dist/case-workspace/domain.js +24 -0
  45. package/dist/case-workspace/domain.js.map +1 -0
  46. package/dist/case-workspace/index.d.ts +91 -0
  47. package/dist/case-workspace.d.ts +1 -0
  48. package/dist/case-workspace.js +392 -0
  49. package/dist/case-workspace.js.map +1 -0
  50. package/dist/cn-B6yFEsav.js +9 -0
  51. package/dist/cn-B6yFEsav.js.map +1 -0
  52. package/dist/components/ui/calendar.css +7 -0
  53. package/dist/cookieSettings-D_v3KS02.js +97 -0
  54. package/dist/cookieSettings-D_v3KS02.js.map +1 -0
  55. package/dist/dashboard/index.d.ts +16 -0
  56. package/dist/dashboard/src/ChartFrame.d.ts +18 -0
  57. package/dist/dashboard/src/ChartTooltip.d.ts +38 -0
  58. package/dist/dashboard/src/FilterBar.d.ts +23 -0
  59. package/dist/dashboard/src/KpiStatCard.d.ts +29 -0
  60. package/dist/dashboard/src/StatGrid.d.ts +15 -0
  61. package/dist/dashboard/src/TimeRangePicker.d.ts +14 -0
  62. package/dist/dashboard/src/chart.d.ts +10 -0
  63. package/dist/dashboard/src/format.d.ts +16 -0
  64. package/dist/dashboard/src/links.d.ts +2 -0
  65. package/dist/dashboard/src/useDashboardRange.d.ts +27 -0
  66. package/dist/dashboard.d.ts +1 -0
  67. package/dist/dashboard.js +361 -0
  68. package/dist/dashboard.js.map +1 -0
  69. package/dist/fonts.css +15 -0
  70. package/dist/hooks/access/AppAccessGate.d.ts +20 -0
  71. package/dist/hooks/access/AppAccessNotice.d.ts +8 -0
  72. package/dist/hooks/access/useAppAccess.d.ts +26 -0
  73. package/dist/hooks/config/businessLocale.d.ts +12 -0
  74. package/dist/hooks/config/currencies.d.ts +9 -0
  75. package/dist/hooks/index.d.ts +17 -0
  76. package/dist/hooks/picker/CrossAppRecordPicker.d.ts +37 -0
  77. package/dist/hooks/picker/managedAppPicker.d.ts +21 -0
  78. package/dist/hooks/picker/partnerPayload.d.ts +6 -0
  79. package/dist/hooks/routing/draftEntityId.d.ts +5 -0
  80. package/dist/hooks/routing/useRefetchOnRouteMatch.d.ts +6 -0
  81. package/dist/hooks/shell/resolveApiRoot.d.ts +13 -0
  82. package/dist/hooks/shell/shell.d.ts +4 -0
  83. package/dist/hooks/shell/useGenispacePlatformClient.d.ts +7 -0
  84. package/dist/hooks.d.ts +1 -0
  85. package/dist/hooks.js +42 -0
  86. package/dist/hooks.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.js +77 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/kit.d.ts +50 -0
  91. package/dist/kit.js +2067 -0
  92. package/dist/kit.js.map +1 -0
  93. package/dist/page.d.ts +1 -0
  94. package/dist/page.js +5 -0
  95. package/dist/page.js.map +1 -0
  96. package/dist/shell-DIHnXIUb.js +6 -0
  97. package/dist/shell-DIHnXIUb.js.map +1 -0
  98. package/dist/shell.d.ts +30 -0
  99. package/dist/shell.js +104 -0
  100. package/dist/shell.js.map +1 -0
  101. package/dist/storage/assetPreview.d.ts +12 -0
  102. package/dist/storage/components/AssetThumbnail.d.ts +15 -0
  103. package/dist/storage/components/CopyStorageLinkButton.d.ts +13 -0
  104. package/dist/storage/components/StorageImage.d.ts +9 -0
  105. package/dist/storage/components/StoragePreviewContent.d.ts +22 -0
  106. package/dist/storage/components/StorageVideo.d.ts +9 -0
  107. package/dist/storage/copyTextToClipboard.d.ts +5 -0
  108. package/dist/storage/hooks/useAuthenticatedStorageBlobs.d.ts +3 -0
  109. package/dist/storage/hooks/useImageThumbnailBlobs.d.ts +4 -0
  110. package/dist/storage/hooks/useShareableStorageLink.d.ts +7 -0
  111. package/dist/storage/index.d.ts +12 -0
  112. package/dist/storage/openUrlInNewTab.d.ts +6 -0
  113. package/dist/storage/platformStorage.d.ts +43 -0
  114. package/dist/storage.d.ts +1 -0
  115. package/dist/storage.js +605 -0
  116. package/dist/storage.js.map +1 -0
  117. package/dist/style.css +1 -0
  118. package/dist/styles/base.css +616 -0
  119. package/dist/styles/reduced-motion.css +14 -0
  120. package/dist/styles/tailwind-preset.js +269 -0
  121. package/dist/task-workspace/domain.d.ts +35 -0
  122. package/dist/task-workspace/domain.js +45 -0
  123. package/dist/task-workspace/domain.js.map +1 -0
  124. package/dist/task-workspace/experience.d.ts +50 -0
  125. package/dist/task-workspace/index.d.ts +172 -0
  126. package/dist/task-workspace.d.ts +1 -0
  127. package/dist/task-workspace.js +626 -0
  128. package/dist/task-workspace.js.map +1 -0
  129. package/dist/ui/components/features/app/AppCheckboxInput.d.ts +9 -0
  130. package/dist/ui/components/features/app/AppConfirmDialog.d.ts +12 -0
  131. package/dist/ui/components/features/app/AppDashboardSkeleton.d.ts +9 -0
  132. package/dist/ui/components/features/app/AppDatePicker.d.ts +69 -0
  133. package/dist/ui/components/features/app/AppModal.d.ts +27 -0
  134. package/dist/ui/components/features/app/AppPageStates.d.ts +17 -0
  135. package/dist/ui/components/features/app/AppSelectInput.d.ts +10 -0
  136. package/dist/ui/components/features/app/AppTemporalInput.d.ts +19 -0
  137. package/dist/ui/components/features/app/Page.d.ts +14 -0
  138. package/dist/ui/components/features/app/QueryErrorAlert.d.ts +7 -0
  139. package/dist/ui/components/features/app/Sidebar.d.ts +47 -0
  140. package/dist/ui/components/features/app/index.d.ts +17 -0
  141. package/dist/ui/components/features/user/UserAvatar.d.ts +17 -0
  142. package/dist/ui/components/features/user/UserDisplay.d.ts +10 -0
  143. package/dist/ui/components/features/user/UserSelect.d.ts +14 -0
  144. package/dist/ui/components/features/user/useUserDirectory.d.ts +13 -0
  145. package/dist/ui/components/features/user/userDirectoryTypes.d.ts +18 -0
  146. package/dist/ui/components/patterns/form-section.d.ts +11 -0
  147. package/dist/ui/components/primitives/feedback/index.d.ts +2 -0
  148. package/dist/ui/components/primitives/feedback/toaster.d.ts +1 -0
  149. package/dist/ui/components/primitives/feedback/use-toast.d.ts +46 -0
  150. package/dist/ui/components/primitives/page-skeleton/ChartAreaSkeleton.d.ts +13 -0
  151. package/dist/ui/components/primitives/page-skeleton/ChartEmptyState.d.ts +14 -0
  152. package/dist/ui/components/primitives/page-skeleton/ComponentSkeletonShell.d.ts +16 -0
  153. package/dist/ui/components/primitives/page-skeleton/ConfigEditorSkeleton.d.ts +5 -0
  154. package/dist/ui/components/primitives/page-skeleton/DetailTabsSkeleton.d.ts +6 -0
  155. package/dist/ui/components/primitives/page-skeleton/EmptyStateBadge.d.ts +13 -0
  156. package/dist/ui/components/primitives/page-skeleton/FormCardSkeleton.d.ts +7 -0
  157. package/dist/ui/components/primitives/page-skeleton/FormFieldSkeleton.d.ts +6 -0
  158. package/dist/ui/components/primitives/page-skeleton/FormPageSkeleton.d.ts +6 -0
  159. package/dist/ui/components/primitives/page-skeleton/GridCardsSkeleton.d.ts +6 -0
  160. package/dist/ui/components/primitives/page-skeleton/ListSkeleton.d.ts +26 -0
  161. package/dist/ui/components/primitives/page-skeleton/PageHeaderSkeleton.d.ts +6 -0
  162. package/dist/ui/components/primitives/page-skeleton/SplitPaneSkeleton.d.ts +4 -0
  163. package/dist/ui/components/primitives/page-skeleton/StatsRowSkeleton.d.ts +5 -0
  164. package/dist/ui/components/primitives/page-skeleton/TableEmptyState.d.ts +27 -0
  165. package/dist/ui/components/primitives/page-skeleton/TablePageSkeleton.d.ts +8 -0
  166. package/dist/ui/components/primitives/page-skeleton/TabsBarSkeleton.d.ts +6 -0
  167. package/dist/ui/components/primitives/page-skeleton/index.d.ts +24 -0
  168. package/dist/ui/components/primitives/page-skeleton/skeletonMetrics.d.ts +9 -0
  169. package/dist/ui/components/primitives/page-skeleton/useVisibleCenter.d.ts +34 -0
  170. package/dist/ui/components/ui/accordion.d.ts +7 -0
  171. package/dist/ui/components/ui/ai-draft-banner.d.ts +21 -0
  172. package/dist/ui/components/ui/alert-dialog.d.ts +48 -0
  173. package/dist/ui/components/ui/alert.d.ts +8 -0
  174. package/dist/ui/components/ui/avatar.d.ts +6 -0
  175. package/dist/ui/components/ui/badge.d.ts +9 -0
  176. package/dist/ui/components/ui/breadcrumb.d.ts +19 -0
  177. package/dist/ui/components/ui/button.d.ts +11 -0
  178. package/dist/ui/components/ui/calendar.d.ts +8 -0
  179. package/dist/ui/components/ui/card.d.ts +8 -0
  180. package/dist/ui/components/ui/chart.d.ts +16 -0
  181. package/dist/ui/components/ui/checkbox.d.ts +4 -0
  182. package/dist/ui/components/ui/collapsible.d.ts +5 -0
  183. package/dist/ui/components/ui/column-config.d.ts +42 -0
  184. package/dist/ui/components/ui/date-picker.d.ts +9 -0
  185. package/dist/ui/components/ui/date-range-filter.d.ts +32 -0
  186. package/dist/ui/components/ui/date-range-picker.d.ts +11 -0
  187. package/dist/ui/components/ui/dialog-input.d.ts +17 -0
  188. package/dist/ui/components/ui/dialog-safe-select.d.ts +13 -0
  189. package/dist/ui/components/ui/dialog.d.ts +25 -0
  190. package/dist/ui/components/ui/dropdown-menu.d.ts +27 -0
  191. package/dist/ui/components/ui/feature-guide.d.ts +43 -0
  192. package/dist/ui/components/ui/form.d.ts +25 -0
  193. package/dist/ui/components/ui/help-tip.d.ts +29 -0
  194. package/dist/ui/components/ui/hint-notice.d.ts +22 -0
  195. package/dist/ui/components/ui/index.d.ts +6 -0
  196. package/dist/ui/components/ui/input.d.ts +3 -0
  197. package/dist/ui/components/ui/label.d.ts +5 -0
  198. package/dist/ui/components/ui/modal-container.d.ts +56 -0
  199. package/dist/ui/components/ui/modal-templates.d.ts +46 -0
  200. package/dist/ui/components/ui/multi-select.d.ts +20 -0
  201. package/dist/ui/components/ui/pagination.d.ts +28 -0
  202. package/dist/ui/components/ui/popover.d.ts +7 -0
  203. package/dist/ui/components/ui/progress.d.ts +7 -0
  204. package/dist/ui/components/ui/radio-button-group.d.ts +18 -0
  205. package/dist/ui/components/ui/radio-group.d.ts +5 -0
  206. package/dist/ui/components/ui/scroll-area.d.ts +5 -0
  207. package/dist/ui/components/ui/select.d.ts +16 -0
  208. package/dist/ui/components/ui/separator.d.ts +7 -0
  209. package/dist/ui/components/ui/sheet.d.ts +25 -0
  210. package/dist/ui/components/ui/sidebar-rail.d.ts +9 -0
  211. package/dist/ui/components/ui/skeleton.d.ts +2 -0
  212. package/dist/ui/components/ui/slider.d.ts +13 -0
  213. package/dist/ui/components/ui/switch.d.ts +4 -0
  214. package/dist/ui/components/ui/table.d.ts +10 -0
  215. package/dist/ui/components/ui/tabs.d.ts +10 -0
  216. package/dist/ui/components/ui/textarea.d.ts +3 -0
  217. package/dist/ui/components/ui/toast.d.ts +21 -0
  218. package/dist/ui/components/ui/toggle-group.d.ts +12 -0
  219. package/dist/ui/components/ui/toggle.d.ts +12 -0
  220. package/dist/ui/components/ui/tooltip.d.ts +7 -0
  221. package/dist/ui/components/ui/typography.d.ts +15 -0
  222. package/dist/ui/components/ui/underline-tabs.d.ts +13 -0
  223. package/dist/ui/components/ui/view-mode-toggle.d.ts +9 -0
  224. package/dist/ui/hooks/useIsMobile.d.ts +16 -0
  225. package/dist/ui/styles/design-tokens.d.ts +189 -0
  226. package/dist/ui/styles/z-index-layers.d.ts +46 -0
  227. package/dist/ui.d.ts +2 -0
  228. package/dist/ui.js +35 -0
  229. package/dist/ui.js.map +1 -0
  230. package/dist/useUserDirectory-CqkyCQoR.js +2377 -0
  231. package/dist/useUserDirectory-CqkyCQoR.js.map +1 -0
  232. package/dist/utils/cookieSettings.d.ts +12 -0
  233. package/dist/utils/data/countryCodes.d.ts +26 -0
  234. package/dist/utils/index.d.ts +18 -0
  235. package/dist/utils/utils/appPath.d.ts +5 -0
  236. package/dist/utils/utils/chunkLoadRecovery.d.ts +7 -0
  237. package/dist/utils/utils/cn.d.ts +3 -0
  238. package/dist/utils/utils/crossApp.d.ts +71 -0
  239. package/dist/utils/utils/debounce.d.ts +1 -0
  240. package/dist/utils/utils/formatUserLabel.d.ts +8 -0
  241. package/dist/utils/utils/formatting.d.ts +18 -0
  242. package/dist/utils/utils/logoutNotification.d.ts +28 -0
  243. package/dist/utils/utils/operatorLocale.d.ts +32 -0
  244. package/dist/utils/utils/routeLocalePrefetch.d.ts +5 -0
  245. package/dist/utils/utils/shellIframeUrl.d.ts +20 -0
  246. package/dist/utils/utils/spaceSettings.d.ts +20 -0
  247. package/dist/utils/utils/sso.d.ts +42 -0
  248. package/dist/utils/utils/throttle.d.ts +1 -0
  249. package/dist/utils/utils/timezones.d.ts +14 -0
  250. package/dist/utils/utils/toDateInputValue.d.ts +5 -0
  251. package/dist/utils/utils/watermark.d.ts +1 -0
  252. package/dist/utils.d.ts +1 -0
  253. package/dist/utils.js +1334 -0
  254. package/dist/utils.js.map +1 -0
  255. package/dist/vite.d.ts +22 -0
  256. package/dist/vite.js +74 -0
  257. package/dist/vite.js.map +1 -0
  258. package/package.json +191 -0
@@ -0,0 +1,616 @@
1
+ /**
2
+ * GeniSpace Base Styles
3
+ *
4
+ * Single shared stylesheet imported by every sub-application.
5
+ * Contains: CSS variables, base resets, component classes, utility classes,
6
+ * glassmorphism styles, keyframes, and theme-transition setup.
7
+ */
8
+
9
+ /* Font system */
10
+ @import '../fonts.css';
11
+ @import './reduced-motion.css';
12
+ @import '../components/ui/calendar.css';
13
+
14
+ /* Tailwind layers */
15
+ @tailwind base;
16
+ @tailwind components;
17
+ @tailwind utilities;
18
+
19
+ /* =========================================================================
20
+ BASE LAYER – CSS Variables & Resets
21
+ ========================================================================= */
22
+
23
+ @layer base {
24
+ :root {
25
+ font-size: 14px;
26
+
27
+ /* Core semantic colors (light mode) */
28
+ --background: 0 0% 100%;
29
+ --foreground: 0 0% 9%; /* #171717 */
30
+ --card: 0 0% 100%;
31
+ --card-foreground: 0 0% 9%;
32
+ --popover: 0 0% 100%;
33
+ --popover-foreground: 0 0% 9%;
34
+ --primary: 217 91% 60%; /* #3B82F6 (blue-500) */
35
+ --primary-foreground: 0 0% 100%;
36
+ --secondary: 0 0% 96.1%; /* #F5F5F5 */
37
+ --secondary-foreground: 0 0% 14.9%; /* #262626 */
38
+ --muted: 210 40% 96.1%;
39
+ --muted-foreground: 0 0% 25.1%; /* #404040 (ink-medium) */
40
+ --accent: 210 40% 96.1%;
41
+ --accent-foreground: 222.2 47.4% 11.2%;
42
+ --destructive: 0 84.2% 60.2%; /* #ef4444 */
43
+ --destructive-foreground: 0 0% 100%;
44
+ --border: 214.3 31.8% 91.4%;
45
+ --input: 214.3 31.8% 91.4%;
46
+ --ring: 217 91% 60%;
47
+ --radius: 0.5rem;
48
+
49
+ /* Status semantic colors (light mode) — consumed via the Tailwind preset
50
+ as `text-status-warning`, `bg-status-warning/10`, `border-status-info/40`, etc. */
51
+ --status-warning: 38 92% 50%; /* #f59e0b (amber-500) */
52
+ --status-warning-foreground: 26 83% 14%; /* amber-950 – dark text on amber fill */
53
+ --status-success: 161 94% 30%; /* #059669 (emerald-600) */
54
+ --status-success-foreground: 0 0% 100%;
55
+ --status-info: 200 98% 39%; /* #0284c7 (sky-600) */
56
+ --status-info-foreground: 0 0% 100%;
57
+ --status-error: 0 84.2% 60.2%; /* mirrors --destructive */
58
+ --status-error-foreground: 0 0% 100%;
59
+
60
+ /* Font size scale (14px root) */
61
+ --font-size-xs: 0.75rem;
62
+ --font-size-sm: 0.875rem;
63
+ --font-size-base: 1rem;
64
+ --font-size-lg: 1.125rem;
65
+ --font-size-xl: 1.25rem;
66
+ --font-size-2xl: 1.5rem;
67
+ --font-size-3xl: 1.75rem;
68
+ --font-size-4xl: 2rem;
69
+
70
+ /* Line height */
71
+ --line-height-tight: 1.1;
72
+ --line-height-normal: 1.3;
73
+ --line-height-relaxed: 1.5;
74
+
75
+ /* Sidebar */
76
+ --sidebar-background: 0 0% 98%;
77
+ --sidebar-foreground: 0 0% 9%;
78
+ --sidebar-primary: 0 0% 9%;
79
+ --sidebar-primary-foreground: 0 0% 98%;
80
+ --sidebar-accent: 0 0% 96.1%;
81
+ --sidebar-accent-foreground: 0 0% 9%;
82
+ --sidebar-border: 0 0% 89.8%;
83
+ --sidebar-ring: 0 0% 9%;
84
+ }
85
+
86
+ .dark {
87
+ --background: 0 0% 3.9%;
88
+ --foreground: 0 0% 98%;
89
+ --card: 0 0% 3.9%;
90
+ --card-foreground: 0 0% 98%;
91
+ --popover: 0 0% 3.9%;
92
+ --popover-foreground: 0 0% 98%;
93
+ --primary: 0 0% 98%;
94
+ --primary-foreground: 0 0% 9%;
95
+ --secondary: 0 0% 14.9%;
96
+ --secondary-foreground: 0 0% 98%;
97
+ --muted: 0 0% 14.9%;
98
+ --muted-foreground: 0 0% 63.9%;
99
+ --accent: 0 0% 14.9%;
100
+ --accent-foreground: 0 0% 98%;
101
+ --destructive: 0 84.2% 60.2%;
102
+ --destructive-foreground: 0 0% 100%;
103
+ --border: 0 0% 14.9%;
104
+ --input: 0 0% 14.9%;
105
+ --ring: 0 0% 83.1%;
106
+
107
+ /* Status semantic colors (dark mode) — brighter hues for dark surfaces */
108
+ --status-warning: 43 96% 56%; /* #fbbf24 (amber-400) */
109
+ --status-warning-foreground: 26 83% 14%;
110
+ --status-success: 158 64% 52%; /* #34d399 (emerald-400) */
111
+ --status-success-foreground: 165 91% 9%; /* emerald-950 */
112
+ --status-info: 198 93% 60%; /* #38bdf8 (sky-400) */
113
+ --status-info-foreground: 204 80% 16%; /* sky-950 */
114
+ --status-error: 0 84.2% 60.2%;
115
+ --status-error-foreground: 0 0% 100%;
116
+
117
+ --sidebar-background: 0 0% 9%;
118
+ --sidebar-foreground: 0 0% 98%;
119
+ --sidebar-primary: 0 0% 98%;
120
+ --sidebar-primary-foreground: 0 0% 9%;
121
+ --sidebar-accent: 0 0% 14.9%;
122
+ --sidebar-accent-foreground: 0 0% 98%;
123
+ --sidebar-border: 0 0% 14.9%;
124
+ --sidebar-ring: 0 0% 83.1%;
125
+ }
126
+
127
+ * {
128
+ @apply border-border;
129
+ }
130
+
131
+ body {
132
+ @apply bg-background text-foreground antialiased;
133
+ font-size: 14px;
134
+ }
135
+
136
+ h1, h2, h3, h4, h5, h6 {
137
+ @apply font-semibold tracking-tight;
138
+ }
139
+
140
+ /* Date-input browser reset */
141
+ input[type="date"] {
142
+ -webkit-appearance: none;
143
+ appearance: none;
144
+ /* Keep the full-size calendar indicator inside its own input. Without a
145
+ positioning context, Chromium can stretch the pseudo-element across a
146
+ surrounding drawer and intercept clicks on unrelated controls. */
147
+ position: relative;
148
+ }
149
+
150
+ input[type="date"]::-webkit-calendar-picker-indicator {
151
+ background: transparent;
152
+ bottom: 0;
153
+ color: transparent;
154
+ cursor: pointer;
155
+ height: auto;
156
+ left: 0;
157
+ position: absolute;
158
+ right: 0;
159
+ top: 0;
160
+ width: auto;
161
+ }
162
+ }
163
+
164
+ /* =========================================================================
165
+ COMPONENTS LAYER
166
+ ========================================================================= */
167
+
168
+ @layer components {
169
+
170
+ /* ---- Glassmorphism ---- */
171
+
172
+ .glass-card {
173
+ @apply backdrop-blur-lg bg-white/70 dark:bg-neutral-900/70
174
+ border border-white/20 dark:border-white/10
175
+ shadow-lg dark:shadow-xl dark:shadow-black/30
176
+ rounded-2xl transition-all duration-300;
177
+ }
178
+
179
+ .glass-card-strong {
180
+ @apply backdrop-blur-xl bg-white/80 dark:bg-neutral-900/80
181
+ border border-white/30 dark:border-white/20
182
+ shadow-xl dark:shadow-xl dark:shadow-black/40
183
+ rounded-2xl transition-all duration-300;
184
+ }
185
+
186
+ .glass-card-light {
187
+ @apply backdrop-blur-md bg-white/60 dark:bg-neutral-900/60
188
+ border border-white/10 dark:border-white/5
189
+ shadow-md dark:shadow-lg dark:shadow-black/20
190
+ rounded-xl transition-all duration-300;
191
+ }
192
+
193
+ .glass-nav {
194
+ @apply backdrop-blur-2xl bg-white/80 dark:bg-neutral-950/80
195
+ border-b border-white/20 dark:border-white/10
196
+ shadow-sm dark:shadow-md dark:shadow-black/20;
197
+ }
198
+
199
+ .glass-button-primary {
200
+ @apply backdrop-blur-lg bg-gradient-to-br from-brand-primary/90 to-brand-primary-light/90
201
+ hover:from-brand-primary/95 hover:to-brand-primary-light/95
202
+ text-white border border-white/20
203
+ shadow-md hover:shadow-lg
204
+ dark:from-neutral-50/90 dark:to-neutral-100/90
205
+ dark:hover:from-neutral-50/95 dark:hover:to-neutral-100/95
206
+ transition-all duration-300 rounded-xl px-5 py-2 font-medium;
207
+ }
208
+
209
+ .glass-button-secondary {
210
+ @apply backdrop-blur-lg bg-white/60 dark:bg-neutral-800/60
211
+ hover:bg-white/80 dark:hover:bg-neutral-700/80
212
+ border border-white/30 dark:border-white/20
213
+ text-neutral-900 dark:text-neutral-100
214
+ shadow-sm hover:shadow-md
215
+ transition-all duration-300 rounded-xl px-5 py-2 font-medium;
216
+ }
217
+
218
+ .glass-input {
219
+ @apply backdrop-blur-lg bg-white/50 dark:bg-neutral-900/50
220
+ border border-white/30 dark:border-white/20
221
+ focus:border-brand-primary/50 dark:focus:border-neutral-50/50
222
+ focus:ring-1 focus:ring-brand-primary/20 dark:focus:ring-neutral-50/20
223
+ text-neutral-900 dark:text-neutral-100
224
+ placeholder:text-neutral-500 dark:placeholder:text-neutral-400
225
+ shadow-sm focus:shadow-md
226
+ transition-all duration-300 rounded-xl px-3 py-2;
227
+ }
228
+
229
+ .glass-badge {
230
+ @apply backdrop-blur-md bg-white/40 dark:bg-neutral-800/40
231
+ border border-white/30 dark:border-white/20
232
+ text-neutral-900 dark:text-neutral-100
233
+ rounded-full px-2.5 py-0.5 text-xs font-medium;
234
+ }
235
+
236
+ .glass-hover {
237
+ @apply hover:backdrop-blur-xl hover:bg-white/80 dark:hover:bg-neutral-900/80
238
+ hover:border-white/40 dark:hover:border-white/30
239
+ hover:shadow-lg hover:scale-[1.01]
240
+ transition-all duration-300;
241
+ }
242
+
243
+ .frosted-glass {
244
+ @apply backdrop-blur-2xl bg-gradient-to-br from-white/60 via-white/40 to-white/60
245
+ dark:from-neutral-900/60 dark:via-neutral-900/40 dark:to-neutral-900/60
246
+ border border-white/30 dark:border-white/10
247
+ shadow-xl dark:shadow-black/30
248
+ rounded-3xl;
249
+ }
250
+
251
+ .glass-border-shine {
252
+ @apply relative overflow-hidden;
253
+ }
254
+
255
+ .glass-border-shine::before {
256
+ content: '';
257
+ @apply absolute inset-0 rounded-[inherit] p-[1px]
258
+ bg-gradient-to-br from-white/40 via-transparent to-white/40
259
+ dark:from-white/20 dark:via-transparent dark:to-white/20
260
+ -z-10;
261
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
262
+ -webkit-mask-composite: xor;
263
+ mask-composite: exclude;
264
+ }
265
+
266
+ /* ---- Button system ---- */
267
+
268
+ .btn {
269
+ @apply inline-flex items-center justify-center whitespace-nowrap rounded-xl
270
+ h-9 px-4 py-2 text-sm font-medium
271
+ transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring
272
+ disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed
273
+ focus-visible:ring-offset-2 dark:focus-visible:ring-offset-neutral-950;
274
+ }
275
+
276
+ .btn-primary {
277
+ @apply bg-blue-500 dark:bg-neutral-50 text-white dark:text-neutral-950
278
+ shadow-sm hover:shadow-md hover:bg-blue-600 dark:hover:bg-white
279
+ active:bg-blue-700 dark:active:bg-neutral-100 transition-all duration-300;
280
+ }
281
+
282
+ .btn-secondary {
283
+ @apply bg-neutral-100 dark:bg-neutral-800 text-neutral-800 dark:text-neutral-50
284
+ shadow-sm hover:shadow-md hover:bg-neutral-200 dark:hover:bg-neutral-700
285
+ active:bg-neutral-300 dark:active:bg-neutral-900
286
+ hover:text-neutral-900 dark:hover:text-neutral-50
287
+ active:text-neutral-950 dark:active:text-neutral-50 transition-all duration-300;
288
+ }
289
+
290
+ .btn-outline {
291
+ @apply border border-neutral-300 dark:border-neutral-700
292
+ text-neutral-700 dark:text-neutral-300
293
+ hover:bg-neutral-100 dark:hover:bg-neutral-800
294
+ active:bg-neutral-200 dark:active:bg-neutral-700
295
+ transition-all duration-300;
296
+ }
297
+
298
+ .btn-ghost {
299
+ @apply text-neutral-700 dark:text-neutral-300
300
+ hover:bg-neutral-100 dark:hover:bg-neutral-800
301
+ active:bg-neutral-200 dark:active:bg-neutral-700
302
+ transition-all duration-300;
303
+ }
304
+
305
+ .btn-subtle {
306
+ @apply bg-transparent text-neutral-600 dark:text-neutral-400
307
+ hover:bg-neutral-50 dark:hover:bg-neutral-800/50
308
+ active:bg-neutral-100 dark:active:bg-neutral-700/50
309
+ transition-all duration-300;
310
+ }
311
+
312
+ .btn-destructive {
313
+ @apply bg-red-600 dark:bg-red-700 text-white
314
+ shadow-sm hover:shadow-md hover:bg-red-700 dark:hover:bg-red-600
315
+ active:bg-red-800 dark:active:bg-red-800
316
+ transition-all duration-300;
317
+ }
318
+
319
+ .btn-danger {
320
+ @apply bg-red-600 dark:bg-red-700 text-white
321
+ shadow-sm hover:shadow-md hover:bg-red-700 dark:hover:bg-red-600
322
+ active:bg-red-800 dark:active:bg-red-800
323
+ transition-all duration-300;
324
+ }
325
+
326
+ .btn-link {
327
+ @apply text-blue-600 dark:text-blue-400 underline-offset-4 hover:underline
328
+ transition-all duration-300;
329
+ }
330
+
331
+ /* Button sizes */
332
+ .btn-sm { @apply h-8 rounded-lg px-3 text-xs; }
333
+ .btn-lg { @apply h-10 rounded-xl px-8; }
334
+ .btn-icon { @apply h-9 w-9 p-0; }
335
+ /* 小尺寸图标按钮,用于 sidebar 折叠等需要紧凑样式的场景 */
336
+ .btn-icon-sm { @apply h-6 w-6 p-0; }
337
+
338
+ /* ---- Card ---- */
339
+
340
+ .card {
341
+ @apply p-6 rounded-lg border border-neutral-200 dark:border-neutral-800
342
+ bg-white dark:bg-neutral-900 shadow-sm dark:shadow-neutral-900/30;
343
+ }
344
+
345
+ /* ---- Input ---- */
346
+ /* 与 .btn 统一为 h-9 (36px),保证与同排按钮、.btn-icon 等高对齐 */
347
+ .input {
348
+ @apply flex h-9 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm
349
+ placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2
350
+ focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50
351
+ dark:bg-neutral-900 dark:border-neutral-800 dark:focus-visible:ring-neutral-700;
352
+ }
353
+
354
+ /* ---- Toolbar row: 输入框 + 按钮同一行时使用 flex items-center gap-2,input/btn 已统一 h-9 ---- */
355
+
356
+ /* ---- 视图切换 (Grid/List) ---- */
357
+ /* 无外框,与工具栏其他按钮视觉统一 */
358
+ .view-toggle {
359
+ @apply flex items-center gap-0.5;
360
+ }
361
+
362
+ .view-toggle-active {
363
+ @apply bg-neutral-100 dark:bg-neutral-800 text-blue-600 dark:text-blue-400;
364
+ }
365
+
366
+ /* ---- Layout ---- */
367
+
368
+ .section {
369
+ @apply py-16 md:py-24 relative;
370
+ }
371
+
372
+ .container {
373
+ @apply mx-auto max-w-7xl px-4 sm:px-6 lg:px-8;
374
+ }
375
+
376
+ /* ---- Typography helpers ---- */
377
+
378
+ .title {
379
+ @apply text-4xl font-bold tracking-tight sm:text-5xl
380
+ bg-clip-text text-transparent bg-gradient-to-br from-neutral-900 to-neutral-600
381
+ dark:from-white dark:to-neutral-400;
382
+ }
383
+
384
+ .subtitle {
385
+ @apply text-xl text-neutral-600 dark:text-neutral-400;
386
+ }
387
+
388
+ .highlight {
389
+ @apply font-bold;
390
+ background: linear-gradient(104deg, #2563eb 0%, #7c3aed 100%);
391
+ -webkit-background-clip: text;
392
+ background-clip: text;
393
+ -webkit-text-fill-color: transparent;
394
+ }
395
+
396
+ /* ---- Status semantic colors ----
397
+ Token-driven via the Tailwind preset (`status.*` colors + --status-* CSS vars above).
398
+ Usage: `text-status-warning`, `border-status-info/40`, `bg-status-success/10` (tint),
399
+ `bg-status-warning` (solid fill, pair with `text-status-warning-foreground`).
400
+ The legacy tint classes previously defined here are superseded by the tokens. */
401
+
402
+ /* @deprecated Legacy filled variants — prefer `bg-status-*` + `text-status-*-foreground`. */
403
+ .bg-status-error-filled { background-color: hsl(var(--status-error)); }
404
+ .bg-status-info-filled { background-color: hsl(var(--status-info)); }
405
+ .bg-status-success-filled { background-color: hsl(var(--status-success)); }
406
+
407
+ /* ---- Select arrow override (Admin / forms) ---- */
408
+
409
+ select.input,
410
+ select.rounded-md {
411
+ appearance: none;
412
+ -webkit-appearance: none;
413
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
414
+ background-position: right 0.75rem center;
415
+ background-repeat: no-repeat;
416
+ background-size: 1.5em 1.5em;
417
+ padding-right: 2.5rem;
418
+ }
419
+
420
+ .dark select.input,
421
+ .dark select.rounded-md {
422
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%239ca3af' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
423
+ }
424
+
425
+ /* ---- Modal dialog form contrast ---- */
426
+
427
+ [role="dialog"] input:not([type="checkbox"]):not([type="radio"]),
428
+ [data-radix-dialog-content] input:not([type="checkbox"]):not([type="radio"]),
429
+ [role="dialog"] textarea,
430
+ [data-radix-dialog-content] textarea,
431
+ [role="dialog"] select,
432
+ [data-radix-dialog-content] select {
433
+ @apply dark:bg-neutral-900 dark:border-neutral-600;
434
+ }
435
+
436
+ [role="dialog"] [data-radix-select-trigger],
437
+ [data-radix-dialog-content] [data-radix-select-trigger] {
438
+ @apply dark:bg-neutral-900 dark:border-neutral-600;
439
+ }
440
+ }
441
+
442
+ /* =========================================================================
443
+ UTILITIES LAYER
444
+ ========================================================================= */
445
+
446
+ @layer utilities {
447
+ .animation-delay-2000 {
448
+ animation-delay: 2s;
449
+ }
450
+ .animation-delay-4000 {
451
+ animation-delay: 4s;
452
+ }
453
+
454
+ /* Custom scrollbar */
455
+ .custom-scrollbar {
456
+ scrollbar-width: thin;
457
+ scrollbar-color: rgba(156, 163, 175, 0.3) transparent;
458
+ }
459
+
460
+ .custom-scrollbar::-webkit-scrollbar {
461
+ width: 6px;
462
+ height: 6px;
463
+ }
464
+
465
+ .custom-scrollbar::-webkit-scrollbar-track {
466
+ background: transparent;
467
+ }
468
+
469
+ .custom-scrollbar::-webkit-scrollbar-thumb {
470
+ background-color: rgba(156, 163, 175, 0.5);
471
+ border-radius: 3px;
472
+ }
473
+
474
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
475
+ background-color: rgba(156, 163, 175, 0.7);
476
+ }
477
+
478
+ .dark .custom-scrollbar {
479
+ scrollbar-color: rgba(115, 115, 115, 0.3) transparent;
480
+ }
481
+
482
+ .dark .custom-scrollbar::-webkit-scrollbar-thumb {
483
+ background-color: rgba(75, 85, 99, 0.5);
484
+ }
485
+
486
+ .dark .custom-scrollbar::-webkit-scrollbar-thumb:hover {
487
+ background-color: rgba(75, 85, 99, 0.7);
488
+ }
489
+
490
+ .dark .custom-scrollbar::-webkit-scrollbar-corner {
491
+ background-color: rgba(75, 85, 99, 0.5);
492
+ }
493
+
494
+ /* Audio player */
495
+ audio::-webkit-media-controls-panel {
496
+ background-color: hsl(var(--background));
497
+ border-radius: 0.5rem;
498
+ }
499
+
500
+ audio::-webkit-media-controls-current-time-display,
501
+ audio::-webkit-media-controls-time-remaining-display {
502
+ color: hsl(var(--muted-foreground));
503
+ text-shadow: none;
504
+ }
505
+
506
+ audio::-webkit-media-controls-play-button,
507
+ audio::-webkit-media-controls-mute-button {
508
+ filter: brightness(0.7);
509
+ }
510
+
511
+ audio::-webkit-media-controls-timeline {
512
+ border-radius: 0.25rem;
513
+ }
514
+
515
+ .dark audio::-webkit-media-controls-panel {
516
+ background-color: hsl(var(--muted) / 0.8);
517
+ border: 1px solid hsl(var(--border) / 0.3);
518
+ }
519
+
520
+ .dark audio::-webkit-media-controls-current-time-display,
521
+ .dark audio::-webkit-media-controls-time-remaining-display {
522
+ color: hsl(var(--muted-foreground) / 0.9);
523
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
524
+ }
525
+
526
+ .dark audio::-webkit-media-controls-play-button,
527
+ .dark audio::-webkit-media-controls-mute-button {
528
+ filter: brightness(1.2) contrast(1.1);
529
+ }
530
+
531
+ .dark audio::-webkit-media-controls-timeline {
532
+ filter: brightness(0.9);
533
+ }
534
+
535
+ audio { color-scheme: light; }
536
+ .dark audio { color-scheme: dark; }
537
+
538
+ /* Markdown code wrapping */
539
+ .markdown-content pre {
540
+ white-space: pre-wrap !important;
541
+ word-break: break-word !important;
542
+ word-wrap: break-word !important;
543
+ overflow-wrap: break-word !important;
544
+ overflow-x: visible !important;
545
+ }
546
+
547
+ .markdown-content pre code {
548
+ white-space: pre-wrap !important;
549
+ word-break: break-word !important;
550
+ word-wrap: break-word !important;
551
+ overflow-wrap: break-word !important;
552
+ }
553
+ }
554
+
555
+ /* =========================================================================
556
+ KEYFRAMES (outside layers – always included)
557
+ ========================================================================= */
558
+
559
+ @keyframes blob {
560
+ 0% { transform: translate(0px, 0px) scale(1); }
561
+ 33% { transform: translate(30px, -50px) scale(1.1); }
562
+ 66% { transform: translate(-20px, 20px) scale(0.9); }
563
+ 100% { transform: translate(0px, 0px) scale(1); }
564
+ }
565
+
566
+ .animate-blob {
567
+ animation: blob 7s infinite;
568
+ }
569
+
570
+ @keyframes fadeIn {
571
+ from { opacity: 0; }
572
+ to { opacity: 1; }
573
+ }
574
+
575
+ @keyframes scaleUp {
576
+ from { opacity: 0; transform: scale(0.95); }
577
+ to { opacity: 1; transform: scale(1); }
578
+ }
579
+
580
+ .animate-fade-in {
581
+ animation: fadeIn 0.3s ease-out;
582
+ }
583
+
584
+ .animate-scale-up {
585
+ animation: scaleUp 0.3s ease-out;
586
+ }
587
+
588
+ /* Theme-switch transition */
589
+ * {
590
+ @apply transition-colors duration-300;
591
+ }
592
+
593
+ .bg-grid-white {
594
+ background-image: linear-gradient(to right, rgba(255, 255, 255, 0.1) 1px, transparent 1px),
595
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.1) 1px, transparent 1px);
596
+ }
597
+
598
+ /* Date picker helper */
599
+ .date-picker {
600
+ @apply pr-10;
601
+ }
602
+
603
+ .date-picker::-webkit-calendar-picker-indicator {
604
+ @apply opacity-0 w-full h-full absolute left-0 cursor-pointer;
605
+ }
606
+
607
+ /* Recharts tooltip cursor */
608
+ .chart-container .recharts-tooltip-cursor {
609
+ fill: hsl(var(--muted));
610
+ opacity: 0.5;
611
+ }
612
+
613
+ .dark .chart-container .recharts-tooltip-cursor {
614
+ fill: hsl(var(--muted));
615
+ opacity: 0.5;
616
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * prefers-reduced-motion 无障碍支持
3
+ * 符合 GeniSpace Design Guideline - WCAG 2.1
4
+ * 尊重用户减少动画偏好设置
5
+ */
6
+ @media (prefers-reduced-motion: reduce) {
7
+ *,
8
+ *::before,
9
+ *::after {
10
+ animation-duration: 0.01ms !important;
11
+ animation-iteration-count: 1 !important;
12
+ transition-duration: 0.01ms !important;
13
+ }
14
+ }