@marketrix.ai/widget 3.8.9 → 3.8.40

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 (215) hide show
  1. package/README.md +159 -161
  2. package/dist/src/components/MarketrixWidget.d.ts +0 -1
  3. package/dist/src/components/base/Avatar.d.ts +0 -1
  4. package/dist/src/components/base/Badge.d.ts +0 -1
  5. package/dist/src/components/base/Button.d.ts +0 -1
  6. package/dist/src/components/base/Card.d.ts +0 -1
  7. package/dist/src/components/base/Dialog.d.ts +6 -7
  8. package/dist/src/components/base/Flex.d.ts +0 -1
  9. package/dist/src/components/base/Icon.d.ts +0 -1
  10. package/dist/src/components/base/IconButton.d.ts +0 -1
  11. package/dist/src/components/base/Indicator.d.ts +0 -1
  12. package/dist/src/components/base/Menu.d.ts +4 -5
  13. package/dist/src/components/base/Pill.d.ts +0 -1
  14. package/dist/src/components/base/Spinner.d.ts +0 -1
  15. package/dist/src/components/base/Stack.d.ts +0 -1
  16. package/dist/src/components/base/Surface.d.ts +0 -1
  17. package/dist/src/components/base/Text.d.ts +0 -1
  18. package/dist/src/components/base/Textarea.d.ts +0 -1
  19. package/dist/src/components/base/Video.d.ts +0 -1
  20. package/dist/src/components/base/icons.d.ts +0 -1
  21. package/dist/src/components/base/layoutProps.d.ts +0 -1
  22. package/dist/src/components/base/tokens.d.ts +0 -1
  23. package/dist/src/components/base/useDisclosure.d.ts +0 -1
  24. package/dist/src/components/blocks/ChatInput.d.ts +0 -1
  25. package/dist/src/components/blocks/HeaderBar.d.ts +0 -1
  26. package/dist/src/components/blocks/NotificationToast.d.ts +0 -1
  27. package/dist/src/components/blocks/TabBar.d.ts +1 -2
  28. package/dist/src/components/blocks/WidgetDialog.d.ts +0 -1
  29. package/dist/src/components/blocks/WidgetFab.d.ts +0 -1
  30. package/dist/src/components/chat/MessageContent.d.ts +0 -1
  31. package/dist/src/components/chat/MessageItem.d.ts +0 -1
  32. package/dist/src/components/chat/MessageList.d.ts +1 -2
  33. package/dist/src/components/chat/ProgressLine.d.ts +0 -1
  34. package/dist/src/components/chat/SuggestedActions.d.ts +0 -1
  35. package/dist/src/components/chat/TaskStatusIcon.d.ts +0 -1
  36. package/dist/src/components/chat/ThinkingIndicator.d.ts +0 -1
  37. package/dist/src/components/chat/VideoStreamDisplay.d.ts +0 -1
  38. package/dist/src/components/navigation/MessengerShell.d.ts +0 -1
  39. package/dist/src/components/navigation/ResizeHandles.d.ts +0 -1
  40. package/dist/src/components/navigation/ShellTabBar.d.ts +0 -1
  41. package/dist/src/components/navigation/ViewTransition.d.ts +0 -1
  42. package/dist/src/components/ui/StateMessage.d.ts +0 -1
  43. package/dist/src/components/ui/WidgetSettingsLoader.d.ts +1 -2
  44. package/dist/src/components/views/ChatView.d.ts +0 -1
  45. package/dist/src/components/views/HomeView.d.ts +0 -1
  46. package/dist/src/constants/config.d.ts +0 -1
  47. package/dist/src/constants/theme.d.ts +0 -1
  48. package/dist/src/context/ChatContext.d.ts +0 -1
  49. package/dist/src/context/TaskContext.d.ts +0 -1
  50. package/dist/src/context/UIStateContext.d.ts +0 -1
  51. package/dist/src/context/WidgetProviders.d.ts +0 -1
  52. package/dist/src/context/sseReducer.d.ts +0 -1
  53. package/dist/src/design-system/component-tokens.d.ts +0 -1
  54. package/dist/src/design-system/layers.d.ts +0 -1
  55. package/dist/src/design-system/semantic-tokens.d.ts +0 -1
  56. package/dist/src/design-system/shadows.d.ts +0 -1
  57. package/dist/src/design-system/token-adapter.d.ts +0 -1
  58. package/dist/src/hooks/useDragSnap.d.ts +0 -1
  59. package/dist/src/hooks/useFocusTrap.d.ts +0 -1
  60. package/dist/src/hooks/useResize.d.ts +0 -1
  61. package/dist/src/hooks/useScreenShare.d.ts +0 -1
  62. package/dist/src/hooks/useScrollLock.d.ts +0 -1
  63. package/dist/src/hooks/useWidget.d.ts +0 -1
  64. package/dist/src/index.d.ts +0 -1
  65. package/dist/src/lib/utils.d.ts +0 -1
  66. package/dist/src/sdk/contract.d.ts +0 -371
  67. package/dist/src/sdk/contracts/activityLog.d.ts +0 -25
  68. package/dist/src/sdk/contracts/application.d.ts +54 -5
  69. package/dist/src/sdk/contracts/chat.d.ts +0 -1
  70. package/dist/src/sdk/contracts/common.d.ts +10 -14
  71. package/dist/src/sdk/contracts/entities.d.ts +12 -271
  72. package/dist/src/sdk/contracts/widget.d.ts +0 -973
  73. package/dist/src/sdk/index.d.ts +1 -372
  74. package/dist/src/services/ApiService.d.ts +1 -3
  75. package/dist/src/services/ChatService.d.ts +2 -4
  76. package/dist/src/services/ConfigManager.d.ts +0 -1
  77. package/dist/src/services/DomService.d.ts +3 -4
  78. package/dist/src/services/ScreenShareService.d.ts +0 -6
  79. package/dist/src/services/SessionManager.d.ts +0 -1
  80. package/dist/src/services/SessionRecorder.d.ts +0 -1
  81. package/dist/src/services/ShowModeService.d.ts +0 -1
  82. package/dist/src/services/StorageService.d.ts +0 -1
  83. package/dist/src/services/StreamClient.d.ts +0 -2
  84. package/dist/src/services/ToolService.d.ts +3 -4
  85. package/dist/src/services/ValidationService.d.ts +9 -12
  86. package/dist/src/services/WidgetService.d.ts +0 -2
  87. package/dist/src/test/a11y-utils.d.ts +0 -1
  88. package/dist/src/test/fixtures.d.ts +0 -1
  89. package/dist/src/test/setup.d.ts +0 -1
  90. package/dist/src/types/browserTools.d.ts +0 -7
  91. package/dist/src/types/index.d.ts +3 -10
  92. package/dist/src/utils/apiUtils.d.ts +0 -1
  93. package/dist/src/utils/bootstrap.d.ts +0 -1
  94. package/dist/src/utils/chat.d.ts +0 -11
  95. package/dist/src/utils/common.d.ts +0 -1
  96. package/dist/src/utils/dom.d.ts +0 -6
  97. package/dist/src/utils/format.d.ts +0 -1
  98. package/dist/src/utils/suggestedActions.d.ts +0 -1
  99. package/dist/src/utils/validation.d.ts +0 -5
  100. package/dist/src/utils/widgetPositioning.d.ts +0 -1
  101. package/dist/widget.mjs +65 -65
  102. package/dist/widget.mjs.map +1 -1
  103. package/package.json +12 -12
  104. package/dist/index.html +0 -1697
  105. package/dist/src/components/MarketrixWidget.d.ts.map +0 -1
  106. package/dist/src/components/base/Avatar.d.ts.map +0 -1
  107. package/dist/src/components/base/Badge.d.ts.map +0 -1
  108. package/dist/src/components/base/Button.d.ts.map +0 -1
  109. package/dist/src/components/base/Card.d.ts.map +0 -1
  110. package/dist/src/components/base/Dialog.d.ts.map +0 -1
  111. package/dist/src/components/base/Flex.d.ts.map +0 -1
  112. package/dist/src/components/base/Icon.d.ts.map +0 -1
  113. package/dist/src/components/base/IconButton.d.ts.map +0 -1
  114. package/dist/src/components/base/Indicator.d.ts.map +0 -1
  115. package/dist/src/components/base/Menu.d.ts.map +0 -1
  116. package/dist/src/components/base/Pill.d.ts.map +0 -1
  117. package/dist/src/components/base/Spinner.d.ts.map +0 -1
  118. package/dist/src/components/base/Stack.d.ts.map +0 -1
  119. package/dist/src/components/base/Surface.d.ts.map +0 -1
  120. package/dist/src/components/base/Text.d.ts.map +0 -1
  121. package/dist/src/components/base/Textarea.d.ts.map +0 -1
  122. package/dist/src/components/base/Video.d.ts.map +0 -1
  123. package/dist/src/components/base/icons.d.ts.map +0 -1
  124. package/dist/src/components/base/index.d.ts +0 -22
  125. package/dist/src/components/base/index.d.ts.map +0 -1
  126. package/dist/src/components/base/layoutProps.d.ts.map +0 -1
  127. package/dist/src/components/base/tokens.d.ts.map +0 -1
  128. package/dist/src/components/base/useDisclosure.d.ts.map +0 -1
  129. package/dist/src/components/blocks/ChatInput.d.ts.map +0 -1
  130. package/dist/src/components/blocks/HeaderBar.d.ts.map +0 -1
  131. package/dist/src/components/blocks/NotificationToast.d.ts.map +0 -1
  132. package/dist/src/components/blocks/TabBar.d.ts.map +0 -1
  133. package/dist/src/components/blocks/WidgetDialog.d.ts.map +0 -1
  134. package/dist/src/components/blocks/WidgetFab.d.ts.map +0 -1
  135. package/dist/src/components/blocks/index.d.ts +0 -7
  136. package/dist/src/components/blocks/index.d.ts.map +0 -1
  137. package/dist/src/components/chat/MessageContent.d.ts.map +0 -1
  138. package/dist/src/components/chat/MessageItem.d.ts.map +0 -1
  139. package/dist/src/components/chat/MessageList.d.ts.map +0 -1
  140. package/dist/src/components/chat/ProgressLine.d.ts.map +0 -1
  141. package/dist/src/components/chat/SuggestedActions.d.ts.map +0 -1
  142. package/dist/src/components/chat/TaskStatusIcon.d.ts.map +0 -1
  143. package/dist/src/components/chat/ThinkingIndicator.d.ts.map +0 -1
  144. package/dist/src/components/chat/VideoStreamDisplay.d.ts.map +0 -1
  145. package/dist/src/components/navigation/MessengerShell.d.ts.map +0 -1
  146. package/dist/src/components/navigation/ResizeHandles.d.ts.map +0 -1
  147. package/dist/src/components/navigation/ShellTabBar.d.ts.map +0 -1
  148. package/dist/src/components/navigation/ViewTransition.d.ts.map +0 -1
  149. package/dist/src/components/ui/StateMessage.d.ts.map +0 -1
  150. package/dist/src/components/ui/WidgetSettingsLoader.d.ts.map +0 -1
  151. package/dist/src/components/views/ChatView.d.ts.map +0 -1
  152. package/dist/src/components/views/HomeView.d.ts.map +0 -1
  153. package/dist/src/constants/config.d.ts.map +0 -1
  154. package/dist/src/constants/theme.d.ts.map +0 -1
  155. package/dist/src/context/ChatContext.d.ts.map +0 -1
  156. package/dist/src/context/TaskContext.d.ts.map +0 -1
  157. package/dist/src/context/UIStateContext.d.ts.map +0 -1
  158. package/dist/src/context/WidgetProviders.d.ts.map +0 -1
  159. package/dist/src/context/sseReducer.d.ts.map +0 -1
  160. package/dist/src/design-system/component-tokens.d.ts.map +0 -1
  161. package/dist/src/design-system/layers.d.ts.map +0 -1
  162. package/dist/src/design-system/semantic-tokens.d.ts.map +0 -1
  163. package/dist/src/design-system/shadows.d.ts.map +0 -1
  164. package/dist/src/design-system/themes/default.d.ts +0 -7
  165. package/dist/src/design-system/themes/default.d.ts.map +0 -1
  166. package/dist/src/design-system/themes/high-contrast.d.ts +0 -4
  167. package/dist/src/design-system/themes/high-contrast.d.ts.map +0 -1
  168. package/dist/src/design-system/themes/index.d.ts +0 -3
  169. package/dist/src/design-system/themes/index.d.ts.map +0 -1
  170. package/dist/src/design-system/token-adapter.d.ts.map +0 -1
  171. package/dist/src/hooks/useDragSnap.d.ts.map +0 -1
  172. package/dist/src/hooks/useFocusTrap.d.ts.map +0 -1
  173. package/dist/src/hooks/useResize.d.ts.map +0 -1
  174. package/dist/src/hooks/useScreenShare.d.ts.map +0 -1
  175. package/dist/src/hooks/useScrollLock.d.ts.map +0 -1
  176. package/dist/src/hooks/useWidget.d.ts.map +0 -1
  177. package/dist/src/index.d.ts.map +0 -1
  178. package/dist/src/lib/utils.d.ts.map +0 -1
  179. package/dist/src/sdk/contract.d.ts.map +0 -1
  180. package/dist/src/sdk/contracts/activityLog.d.ts.map +0 -1
  181. package/dist/src/sdk/contracts/agent.d.ts +0 -3243
  182. package/dist/src/sdk/contracts/agent.d.ts.map +0 -1
  183. package/dist/src/sdk/contracts/application.d.ts.map +0 -1
  184. package/dist/src/sdk/contracts/chat.d.ts.map +0 -1
  185. package/dist/src/sdk/contracts/common.d.ts.map +0 -1
  186. package/dist/src/sdk/contracts/entities.d.ts.map +0 -1
  187. package/dist/src/sdk/contracts/widget.d.ts.map +0 -1
  188. package/dist/src/sdk/index.d.ts.map +0 -1
  189. package/dist/src/services/ApiService.d.ts.map +0 -1
  190. package/dist/src/services/ChatService.d.ts.map +0 -1
  191. package/dist/src/services/ConfigManager.d.ts.map +0 -1
  192. package/dist/src/services/DomService.d.ts.map +0 -1
  193. package/dist/src/services/ScreenShareService.d.ts.map +0 -1
  194. package/dist/src/services/SessionManager.d.ts.map +0 -1
  195. package/dist/src/services/SessionRecorder.d.ts.map +0 -1
  196. package/dist/src/services/ShowModeService.d.ts.map +0 -1
  197. package/dist/src/services/StorageService.d.ts.map +0 -1
  198. package/dist/src/services/StreamClient.d.ts.map +0 -1
  199. package/dist/src/services/ToolService.d.ts.map +0 -1
  200. package/dist/src/services/ValidationService.d.ts.map +0 -1
  201. package/dist/src/services/WidgetService.d.ts.map +0 -1
  202. package/dist/src/test/a11y-utils.d.ts.map +0 -1
  203. package/dist/src/test/fixtures.d.ts.map +0 -1
  204. package/dist/src/test/setup.d.ts.map +0 -1
  205. package/dist/src/types/browserTools.d.ts.map +0 -1
  206. package/dist/src/types/index.d.ts.map +0 -1
  207. package/dist/src/utils/apiUtils.d.ts.map +0 -1
  208. package/dist/src/utils/bootstrap.d.ts.map +0 -1
  209. package/dist/src/utils/chat.d.ts.map +0 -1
  210. package/dist/src/utils/common.d.ts.map +0 -1
  211. package/dist/src/utils/dom.d.ts.map +0 -1
  212. package/dist/src/utils/format.d.ts.map +0 -1
  213. package/dist/src/utils/suggestedActions.d.ts.map +0 -1
  214. package/dist/src/utils/validation.d.ts.map +0 -1
  215. package/dist/src/utils/widgetPositioning.d.ts.map +0 -1
package/dist/index.html DELETED
@@ -1,1697 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Marketrix — In-App Support Platform</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com" />
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
- <link
10
- href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&display=swap"
11
- rel="stylesheet"
12
- />
13
- <script src="https://unpkg.com/lucide@latest/dist/umd/lucide.js"></script>
14
- <style>
15
- :root {
16
- --background: oklch(0.9911 0 0);
17
- --foreground: oklch(0.2046 0 0);
18
- --card: oklch(0.9911 0 0);
19
- --card-foreground: oklch(0.2046 0 0);
20
- --popover: oklch(0.9911 0 0);
21
- --popover-foreground: oklch(0.4386 0 0);
22
- --primary: oklch(0.8348 0.1302 160.908);
23
- --primary-foreground: oklch(0.2626 0.0147 166.4589);
24
- --secondary: oklch(0.994 0 0);
25
- --secondary-foreground: oklch(0.2046 0 0);
26
- --muted: oklch(0.9461 0 0);
27
- --muted-foreground: oklch(0.2435 0 0);
28
- --accent: oklch(0.9461 0 0);
29
- --accent-foreground: oklch(0.2435 0 0);
30
- --destructive: oklch(0.5523 0.1927 32.7272);
31
- --destructive-foreground: oklch(0.9934 0.0032 17.2118);
32
- --border: oklch(0.9037 0 0);
33
- --input: oklch(0.9731 0 0);
34
- --ring: oklch(0.8348 0.1302 160.908);
35
- --chart-1: oklch(0.8348 0.1302 160.908);
36
- --chart-2: oklch(0.6231 0.188 259.8145);
37
- --chart-3: oklch(0.6056 0.2189 292.7172);
38
- --chart-4: oklch(0.7686 0.1647 70.0804);
39
- --chart-5: oklch(0.6959 0.1491 162.4796);
40
- --sidebar: oklch(0.9911 0 0);
41
- --sidebar-foreground: oklch(0.5452 0 0);
42
- --sidebar-primary: oklch(0.8348 0.1302 160.908);
43
- --sidebar-primary-foreground: oklch(0.2626 0.0147 166.4589);
44
- --sidebar-accent: oklch(0.9461 0 0);
45
- --sidebar-accent-foreground: oklch(0.2435 0 0);
46
- --sidebar-border: oklch(0.9037 0 0);
47
- --sidebar-ring: oklch(0.8348 0.1302 160.908);
48
- --font-sans: 'Outfit', sans-serif;
49
- --font-mono: ui-monospace, monospace;
50
- --radius: 0.5rem;
51
- --shadow-2xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09);
52
- --shadow-xs: 0px 1px 3px 0px hsl(0 0% 0% / 0.09);
53
- --shadow-sm: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17);
54
- --shadow: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 1px 2px -1px hsl(0 0% 0% / 0.17);
55
- --shadow-md: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 2px 4px -1px hsl(0 0% 0% / 0.17);
56
- --shadow-lg: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 4px 6px -1px hsl(0 0% 0% / 0.17);
57
- --shadow-xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.17), 0px 8px 10px -1px hsl(0 0% 0% / 0.17);
58
- --shadow-2xl: 0px 1px 3px 0px hsl(0 0% 0% / 0.43);
59
- --tracking-normal: 0.025em;
60
- --page-grid-line: oklch(0.9196 0.0192 182.9621 / 0.8);
61
- --page-glow-left: oklch(0.9458 0.0406 173.8854 / 0.5);
62
- --page-glow-right: oklch(0.9631 0.0214 216.4158 / 0.35);
63
- }
64
-
65
- .dark {
66
- --background: oklch(0.1822 0 0);
67
- --foreground: oklch(0.9288 0.0126 255.5078);
68
- --card: oklch(0.2046 0 0);
69
- --card-foreground: oklch(0.9288 0.0126 255.5078);
70
- --popover: oklch(0.2603 0 0);
71
- --popover-foreground: oklch(0.7348 0 0);
72
- --primary: oklch(0.9036 0.1697 152.034);
73
- --primary-foreground: oklch(0.2603 0 0);
74
- --secondary: oklch(0.2603 0 0);
75
- --secondary-foreground: oklch(0.9851 0 0);
76
- --muted: oklch(0.2393 0 0);
77
- --muted-foreground: oklch(0.7122 0 0);
78
- --accent: oklch(0.3132 0 0);
79
- --accent-foreground: oklch(0.9851 0 0);
80
- --destructive: oklch(0.3123 0.0852 29.7877);
81
- --destructive-foreground: oklch(0.9368 0.0045 34.3092);
82
- --border: oklch(0.2809 0 0);
83
- --input: oklch(0.2603 0 0);
84
- --ring: oklch(0.8003 0.1821 151.711);
85
- --chart-1: oklch(0.8003 0.1821 151.711);
86
- --chart-2: oklch(0.7137 0.1434 254.624);
87
- --chart-3: oklch(0.709 0.1592 293.5412);
88
- --chart-4: oklch(0.8369 0.1644 84.4286);
89
- --chart-5: oklch(0.7845 0.1325 181.912);
90
- --sidebar: oklch(0.1822 0 0);
91
- --sidebar-foreground: oklch(0.6301 0 0);
92
- --sidebar-primary: oklch(0.4365 0.1044 156.7556);
93
- --sidebar-primary-foreground: oklch(0.9213 0.0135 167.1556);
94
- --sidebar-accent: oklch(0.3132 0 0);
95
- --sidebar-accent-foreground: oklch(0.9851 0 0);
96
- --sidebar-border: oklch(0.2809 0 0);
97
- --sidebar-ring: oklch(0.8003 0.1821 151.711);
98
- --page-grid-line: oklch(0.5902 0.0816 171.1758 / 0.16);
99
- --page-glow-left: oklch(0.3605 0.0763 171.2714 / 0.24);
100
- --page-glow-right: oklch(0.3146 0.0473 217.1454 / 0.18);
101
- }
102
-
103
- *,
104
- *::before,
105
- *::after {
106
- box-sizing: border-box;
107
- margin: 0;
108
- padding: 0;
109
- }
110
-
111
- html {
112
- scroll-behavior: smooth;
113
- }
114
-
115
- body {
116
- font-family: var(--font-sans);
117
- background-color: var(--background);
118
- background-image:
119
- radial-gradient(circle at top left, var(--page-glow-left), transparent 34%),
120
- radial-gradient(circle at top right, var(--page-glow-right), transparent 30%);
121
- background-repeat: no-repeat, no-repeat;
122
- background-size:
123
- 40rem 40rem,
124
- 34rem 34rem;
125
- background-position:
126
- top left,
127
- top right;
128
- color: var(--foreground);
129
- min-height: 100vh;
130
- line-height: 1.6;
131
- letter-spacing: var(--tracking-normal);
132
- overflow-x: hidden;
133
- transition:
134
- background 0.3s ease,
135
- color 0.2s ease;
136
- position: relative;
137
- }
138
-
139
- body::before {
140
- content: '';
141
- position: fixed;
142
- inset: 0;
143
- background-image: linear-gradient(to right, var(--page-grid-line) 1px, transparent 1px);
144
- background-size: 88px 100%;
145
- -webkit-mask-image: linear-gradient(
146
- to right,
147
- black 0%,
148
- black 10%,
149
- rgba(0, 0, 0, 0.18) 30%,
150
- rgba(0, 0, 0, 0.1) 45%,
151
- rgba(0, 0, 0, 0.1) 55%,
152
- rgba(0, 0, 0, 0.18) 70%,
153
- black 90%,
154
- black 100%
155
- );
156
- mask-image: linear-gradient(
157
- to right,
158
- black 0%,
159
- black 10%,
160
- rgba(0, 0, 0, 0.18) 30%,
161
- rgba(0, 0, 0, 0.1) 45%,
162
- rgba(0, 0, 0, 0.1) 55%,
163
- rgba(0, 0, 0, 0.18) 70%,
164
- black 90%,
165
- black 100%
166
- );
167
- pointer-events: none;
168
- z-index: 0;
169
- }
170
-
171
- h1,
172
- h2,
173
- h3,
174
- h4 {
175
- font-family: var(--font-sans);
176
- font-weight: 700;
177
- letter-spacing: -0.02em;
178
- color: var(--foreground);
179
- }
180
-
181
- /* App Container */
182
- .app-container {
183
- max-width: 1200px;
184
- margin: 0 auto;
185
- padding: 60px 40px;
186
- }
187
-
188
- /* Header */
189
- .app-header {
190
- display: flex;
191
- justify-content: space-between;
192
- align-items: center;
193
- margin-bottom: 60px;
194
- animation: fadeIn 0.5s ease-out;
195
- }
196
-
197
- @keyframes fadeIn {
198
- from {
199
- opacity: 0;
200
- transform: translateY(16px);
201
- }
202
- to {
203
- opacity: 1;
204
- transform: translateY(0);
205
- }
206
- }
207
-
208
- .logo {
209
- display: flex;
210
- align-items: center;
211
- gap: 12px;
212
- }
213
-
214
- .logo-icon {
215
- width: 40px;
216
- height: 40px;
217
- background: var(--primary);
218
- border-radius: calc(var(--radius) - 2px);
219
- display: flex;
220
- align-items: center;
221
- justify-content: center;
222
- color: var(--primary-foreground);
223
- }
224
-
225
- .logo-icon svg {
226
- width: 20px;
227
- height: 20px;
228
- }
229
-
230
- .logo-text {
231
- font-size: 1.25rem;
232
- font-weight: 700;
233
- letter-spacing: -0.02em;
234
- }
235
-
236
- .header-actions {
237
- display: flex;
238
- align-items: center;
239
- gap: 12px;
240
- }
241
-
242
- /* Theme Toggle */
243
- .theme-toggle {
244
- width: 40px;
245
- height: 40px;
246
- display: flex;
247
- align-items: center;
248
- justify-content: center;
249
- background: var(--muted);
250
- border: 1px solid var(--border);
251
- border-radius: calc(var(--radius) - 2px);
252
- cursor: pointer;
253
- transition: all 0.2s ease;
254
- color: var(--foreground);
255
- }
256
-
257
- .theme-toggle:hover {
258
- background: var(--accent);
259
- border-color: var(--ring);
260
- }
261
-
262
- .theme-toggle svg {
263
- width: 18px;
264
- height: 18px;
265
- }
266
-
267
- /* Hero */
268
- .hero {
269
- text-align: center;
270
- margin-bottom: 64px;
271
- animation: fadeIn 0.5s ease-out 0.05s both;
272
- }
273
-
274
- .hero-badge {
275
- display: inline-flex;
276
- align-items: center;
277
- gap: 8px;
278
- padding: 8px 16px;
279
- background: var(--primary);
280
- color: var(--primary-foreground);
281
- border-radius: 9999px;
282
- font-size: 13px;
283
- font-weight: 600;
284
- margin-bottom: 20px;
285
- }
286
-
287
- .hero-badge svg {
288
- width: 14px;
289
- height: 14px;
290
- }
291
-
292
- .hero h1 {
293
- font-size: clamp(2.25rem, 5vw, 3.25rem);
294
- font-weight: 800;
295
- line-height: 1.1;
296
- margin-bottom: 16px;
297
- max-width: 680px;
298
- margin-left: auto;
299
- margin-right: auto;
300
- }
301
-
302
- .hero p {
303
- font-size: 1.0625rem;
304
- color: var(--muted-foreground);
305
- max-width: 520px;
306
- margin: 0 auto;
307
- line-height: 1.7;
308
- }
309
-
310
- /* Section */
311
- .section {
312
- margin-bottom: 56px;
313
- animation: fadeIn 0.5s ease-out both;
314
- }
315
-
316
- .section:nth-child(2) {
317
- animation-delay: 0.1s;
318
- }
319
- .section:nth-child(3) {
320
- animation-delay: 0.15s;
321
- }
322
- .section:nth-child(4) {
323
- animation-delay: 0.2s;
324
- }
325
- .section:nth-child(5) {
326
- animation-delay: 0.25s;
327
- }
328
- .section:nth-child(6) {
329
- animation-delay: 0.3s;
330
- }
331
-
332
- .section-header {
333
- margin-bottom: 16px;
334
- }
335
-
336
- .section-title {
337
- font-size: 1rem;
338
- font-weight: 600;
339
- margin-bottom: 2px;
340
- }
341
-
342
- .section-subtitle {
343
- font-size: 0.8125rem;
344
- color: var(--muted-foreground);
345
- }
346
-
347
- /* Card */
348
- .card {
349
- background: var(--card);
350
- border: 1px solid var(--border);
351
- border-radius: var(--radius);
352
- box-shadow: var(--shadow-sm);
353
- transition: all 0.2s ease;
354
- }
355
-
356
- .card:hover {
357
- box-shadow: var(--shadow-md);
358
- }
359
-
360
- /* Navigation Panel */
361
- .nav-panel {
362
- display: flex;
363
- flex-wrap: wrap;
364
- gap: 8px;
365
- padding: 16px;
366
- }
367
-
368
- .nav-btn {
369
- display: inline-flex;
370
- align-items: center;
371
- gap: 8px;
372
- padding: 10px 16px;
373
- background: var(--secondary);
374
- border: 1px solid var(--border);
375
- border-radius: calc(var(--radius) - 2px);
376
- color: var(--foreground);
377
- font-family: var(--font-sans);
378
- font-size: 14px;
379
- font-weight: 500;
380
- cursor: pointer;
381
- transition: all 0.2s ease;
382
- }
383
-
384
- .nav-btn svg {
385
- width: 16px;
386
- height: 16px;
387
- }
388
-
389
- .nav-btn:hover {
390
- background: var(--accent);
391
- border-color: var(--border);
392
- }
393
-
394
- .nav-btn.primary {
395
- background: var(--primary);
396
- border-color: transparent;
397
- color: var(--primary-foreground);
398
- }
399
-
400
- .nav-btn.primary:hover {
401
- opacity: 0.9;
402
- }
403
-
404
- .nav-btn.active {
405
- background: var(--primary);
406
- color: var(--primary-foreground);
407
- border-color: transparent;
408
- }
409
-
410
- /* Metrics Grid */
411
- .metrics-grid {
412
- display: grid;
413
- grid-template-columns: repeat(4, 1fr);
414
- gap: 12px;
415
- }
416
-
417
- .metric-card {
418
- padding: 20px;
419
- cursor: pointer;
420
- }
421
-
422
- .metric-card:hover {
423
- border-color: var(--primary);
424
- }
425
-
426
- .metric-header {
427
- display: flex;
428
- align-items: center;
429
- justify-content: space-between;
430
- margin-bottom: 12px;
431
- }
432
-
433
- .metric-icon {
434
- width: 40px;
435
- height: 40px;
436
- display: flex;
437
- align-items: center;
438
- justify-content: center;
439
- background: var(--primary);
440
- border-radius: calc(var(--radius) - 2px);
441
- color: var(--primary-foreground);
442
- }
443
-
444
- .metric-icon svg {
445
- width: 20px;
446
- height: 20px;
447
- }
448
-
449
- .metric-icon.secondary {
450
- background: var(--muted);
451
- color: var(--foreground);
452
- }
453
-
454
- .metric-badge {
455
- display: inline-flex;
456
- align-items: center;
457
- gap: 4px;
458
- padding: 4px 10px;
459
- border-radius: 9999px;
460
- font-size: 12px;
461
- font-weight: 600;
462
- }
463
-
464
- .metric-badge.positive {
465
- background: oklch(0.9515 0.0533 151.4771);
466
- color: oklch(0.3932 0.108 152.5188);
467
- }
468
-
469
- .metric-badge.negative {
470
- background: oklch(0.952 0.045 27.4087);
471
- color: oklch(0.456 0.1474 27.73);
472
- }
473
-
474
- .metric-badge svg {
475
- width: 12px;
476
- height: 12px;
477
- }
478
-
479
- .metric-value {
480
- font-size: 1.75rem;
481
- font-weight: 800;
482
- margin-bottom: 2px;
483
- letter-spacing: -0.02em;
484
- }
485
-
486
- .metric-label {
487
- font-size: 0.75rem;
488
- color: var(--muted-foreground);
489
- text-transform: uppercase;
490
- letter-spacing: 0.03em;
491
- }
492
-
493
- /* Workflow */
494
- .workflow-container {
495
- padding: 20px;
496
- }
497
-
498
- .workflow-grid {
499
- display: grid;
500
- grid-template-columns: repeat(4, 1fr);
501
- gap: 8px;
502
- position: relative;
503
- }
504
-
505
- .workflow-step {
506
- padding: 20px 12px;
507
- background: var(--muted);
508
- border: 1px solid var(--border);
509
- border-radius: calc(var(--radius) - 2px);
510
- text-align: center;
511
- cursor: pointer;
512
- transition: all 0.2s ease;
513
- position: relative;
514
- }
515
-
516
- .workflow-step::after {
517
- content: '';
518
- position: absolute;
519
- right: -5px;
520
- top: 50%;
521
- transform: translateY(-50%);
522
- width: 10px;
523
- height: 10px;
524
- background: var(--card);
525
- border-right: 1px solid var(--border);
526
- border-top: 1px solid var(--border);
527
- transform: translateY(-50%) rotate(45deg);
528
- z-index: 0;
529
- }
530
-
531
- .workflow-step:last-child::after {
532
- display: none;
533
- }
534
-
535
- .workflow-step:hover {
536
- border-color: var(--ring);
537
- }
538
-
539
- .workflow-step.completed {
540
- border-color: var(--primary);
541
- background: var(--primary);
542
- }
543
-
544
- .workflow-step.completed .step-icon {
545
- background: var(--primary-foreground);
546
- color: var(--primary);
547
- }
548
-
549
- .workflow-step.completed .step-title,
550
- .workflow-step.completed .step-status {
551
- color: var(--primary-foreground);
552
- }
553
-
554
- .workflow-step.active {
555
- border-color: var(--ring);
556
- box-shadow: 0 0 0 2px var(--ring);
557
- }
558
-
559
- .workflow-step.active .step-icon {
560
- background: var(--ring);
561
- color: var(--background);
562
- animation: pulse 2s ease-in-out infinite;
563
- }
564
-
565
- @keyframes pulse {
566
- 0%,
567
- 100% {
568
- box-shadow: 0 0 0 0 oklch(0.8348 0.1302 160.908 / 0.4);
569
- }
570
- 50% {
571
- box-shadow: 0 0 0 6px oklch(0.8348 0.1302 160.908 / 0);
572
- }
573
- }
574
-
575
- .step-icon {
576
- width: 36px;
577
- height: 36px;
578
- display: flex;
579
- align-items: center;
580
- justify-content: center;
581
- background: var(--background);
582
- border-radius: 50%;
583
- margin: 0 auto 10px;
584
- transition: all 0.2s ease;
585
- }
586
-
587
- .step-icon svg {
588
- width: 16px;
589
- height: 16px;
590
- color: var(--muted-foreground);
591
- }
592
-
593
- .step-title {
594
- font-weight: 600;
595
- font-size: 0.8125rem;
596
- margin-bottom: 2px;
597
- }
598
-
599
- .step-status {
600
- font-size: 0.6875rem;
601
- color: var(--muted-foreground);
602
- text-transform: uppercase;
603
- letter-spacing: 0.02em;
604
- }
605
-
606
- /* Insights Grid */
607
- .insights-grid {
608
- display: grid;
609
- grid-template-columns: repeat(2, 1fr);
610
- gap: 12px;
611
- }
612
-
613
- .insight-card {
614
- padding: 20px;
615
- }
616
-
617
- .insight-header {
618
- display: flex;
619
- align-items: center;
620
- gap: 10px;
621
- margin-bottom: 16px;
622
- }
623
-
624
- .insight-icon {
625
- width: 32px;
626
- height: 32px;
627
- display: flex;
628
- align-items: center;
629
- justify-content: center;
630
- background: var(--primary);
631
- border-radius: calc(var(--radius) - 4px);
632
- color: var(--primary-foreground);
633
- }
634
-
635
- .insight-icon svg {
636
- width: 16px;
637
- height: 16px;
638
- }
639
-
640
- .insight-title {
641
- font-size: 0.875rem;
642
- font-weight: 600;
643
- }
644
-
645
- .segment-row {
646
- display: flex;
647
- align-items: center;
648
- padding: 10px 0;
649
- border-bottom: 1px solid var(--border);
650
- }
651
-
652
- .segment-row:last-child {
653
- border-bottom: none;
654
- }
655
-
656
- .segment-label {
657
- flex: 1;
658
- font-size: 0.8125rem;
659
- color: var(--muted-foreground);
660
- }
661
-
662
- .segment-bar {
663
- flex: 1.5;
664
- height: 6px;
665
- background: var(--muted);
666
- border-radius: 3px;
667
- overflow: hidden;
668
- margin: 0 12px;
669
- }
670
-
671
- .segment-fill {
672
- height: 100%;
673
- background: var(--primary);
674
- border-radius: 3px;
675
- }
676
-
677
- .segment-value {
678
- font-weight: 600;
679
- font-size: 0.8125rem;
680
- min-width: 36px;
681
- text-align: right;
682
- }
683
-
684
- /* Stats Row */
685
- .stats-row {
686
- display: grid;
687
- grid-template-columns: repeat(3, 1fr);
688
- gap: 8px;
689
- text-align: center;
690
- }
691
-
692
- .stat-item {
693
- padding: 12px;
694
- background: var(--muted);
695
- border-radius: calc(var(--radius) - 2px);
696
- }
697
-
698
- .stat-value {
699
- font-size: 1.375rem;
700
- font-weight: 800;
701
- color: var(--primary);
702
- margin-bottom: 2px;
703
- }
704
-
705
- .stat-label {
706
- font-size: 0.6875rem;
707
- color: var(--muted-foreground);
708
- text-transform: uppercase;
709
- letter-spacing: 0.02em;
710
- }
711
-
712
- /* Tools Grid */
713
- .tools-grid {
714
- display: grid;
715
- grid-template-columns: repeat(3, 1fr);
716
- gap: 12px;
717
- }
718
-
719
- .tool-card {
720
- padding: 24px;
721
- text-align: center;
722
- cursor: pointer;
723
- }
724
-
725
- .tool-card:hover {
726
- border-color: var(--ring);
727
- }
728
-
729
- .tool-icon {
730
- width: 48px;
731
- height: 48px;
732
- display: flex;
733
- align-items: center;
734
- justify-content: center;
735
- background: var(--muted);
736
- border-radius: var(--radius);
737
- margin: 0 auto 12px;
738
- transition: all 0.2s ease;
739
- }
740
-
741
- .tool-card:hover .tool-icon {
742
- background: var(--primary);
743
- color: var(--primary-foreground);
744
- }
745
-
746
- .tool-icon svg {
747
- width: 22px;
748
- height: 22px;
749
- color: var(--foreground);
750
- }
751
-
752
- .tool-card:hover .tool-icon svg {
753
- color: var(--primary-foreground);
754
- }
755
-
756
- .tool-title {
757
- font-weight: 600;
758
- font-size: 0.9375rem;
759
- margin-bottom: 6px;
760
- }
761
-
762
- .tool-desc {
763
- font-size: 0.75rem;
764
- color: var(--muted-foreground);
765
- margin-bottom: 14px;
766
- line-height: 1.5;
767
- }
768
-
769
- .tool-btn {
770
- display: inline-flex;
771
- align-items: center;
772
- gap: 6px;
773
- padding: 8px 14px;
774
- background: var(--foreground);
775
- color: var(--background);
776
- border: none;
777
- border-radius: calc(var(--radius) - 2px);
778
- font-family: var(--font-sans);
779
- font-size: 13px;
780
- font-weight: 600;
781
- cursor: pointer;
782
- transition: all 0.2s ease;
783
- }
784
-
785
- .tool-btn svg {
786
- width: 14px;
787
- height: 14px;
788
- }
789
-
790
- .tool-btn:hover {
791
- opacity: 0.85;
792
- }
793
-
794
- /* Test Panel */
795
- .test-panel {
796
- padding: 24px;
797
- }
798
-
799
- .test-panel p {
800
- color: var(--muted-foreground);
801
- margin-bottom: 16px;
802
- font-size: 0.875rem;
803
- }
804
-
805
- .btn-group {
806
- display: flex;
807
- flex-wrap: wrap;
808
- gap: 8px;
809
- }
810
-
811
- /* Modal */
812
- .modal-overlay {
813
- position: fixed;
814
- inset: 0;
815
- background: oklch(0 0 0 / 0.8);
816
- backdrop-filter: blur(4px);
817
- display: flex;
818
- align-items: center;
819
- justify-content: center;
820
- z-index: 1000;
821
- opacity: 0;
822
- visibility: hidden;
823
- transition: all 0.2s ease;
824
- }
825
-
826
- .modal-overlay.active {
827
- opacity: 1;
828
- visibility: visible;
829
- }
830
-
831
- .modal {
832
- background: var(--card);
833
- border: 1px solid var(--border);
834
- border-radius: var(--radius);
835
- width: 100%;
836
- max-width: 380px;
837
- box-shadow: var(--shadow-xl);
838
- transform: scale(0.96) translateY(8px);
839
- transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
840
- overflow: hidden;
841
- }
842
-
843
- .modal-overlay.active .modal {
844
- transform: scale(1) translateY(0);
845
- }
846
-
847
- .modal-header {
848
- padding: 20px;
849
- border-bottom: 1px solid var(--border);
850
- display: flex;
851
- justify-content: space-between;
852
- align-items: center;
853
- }
854
-
855
- .modal-title {
856
- font-size: 1rem;
857
- font-weight: 600;
858
- display: flex;
859
- align-items: center;
860
- gap: 8px;
861
- }
862
-
863
- .modal-title svg {
864
- width: 18px;
865
- height: 18px;
866
- color: var(--primary);
867
- }
868
-
869
- .modal-close {
870
- width: 32px;
871
- height: 32px;
872
- display: flex;
873
- align-items: center;
874
- justify-content: center;
875
- background: var(--muted);
876
- border: 1px solid var(--border);
877
- border-radius: calc(var(--radius) - 2px);
878
- color: var(--muted-foreground);
879
- cursor: pointer;
880
- transition: all 0.2s ease;
881
- }
882
-
883
- .modal-close svg {
884
- width: 16px;
885
- height: 16px;
886
- }
887
-
888
- .modal-close:hover {
889
- background: var(--destructive);
890
- border-color: var(--destructive);
891
- color: var(--destructive-foreground);
892
- }
893
-
894
- .modal-body {
895
- padding: 20px;
896
- }
897
-
898
- .form-group {
899
- margin-bottom: 16px;
900
- }
901
-
902
- .form-label {
903
- display: block;
904
- font-size: 0.8125rem;
905
- font-weight: 500;
906
- color: var(--foreground);
907
- margin-bottom: 6px;
908
- }
909
-
910
- .form-input {
911
- width: 100%;
912
- padding: 10px 12px;
913
- background: var(--input);
914
- border: 1px solid var(--border);
915
- border-radius: calc(var(--radius) - 2px);
916
- color: var(--foreground);
917
- font-family: var(--font-sans);
918
- font-size: 14px;
919
- transition: all 0.2s ease;
920
- }
921
-
922
- .form-input:focus {
923
- outline: none;
924
- border-color: var(--ring);
925
- box-shadow: 0 0 0 3px oklch(0.8348 0.1302 160.908 / 0.2);
926
- }
927
-
928
- .form-input::placeholder {
929
- color: var(--muted-foreground);
930
- }
931
-
932
- .form-hint {
933
- font-size: 0.6875rem;
934
- color: var(--muted-foreground);
935
- margin-top: 4px;
936
- }
937
-
938
- .form-options {
939
- display: flex;
940
- justify-content: space-between;
941
- align-items: center;
942
- margin-bottom: 20px;
943
- }
944
-
945
- .checkbox-label {
946
- display: flex;
947
- align-items: center;
948
- gap: 8px;
949
- cursor: pointer;
950
- font-size: 0.8125rem;
951
- color: var(--muted-foreground);
952
- }
953
-
954
- .checkbox-label input {
955
- width: 14px;
956
- height: 14px;
957
- accent-color: var(--primary);
958
- }
959
-
960
- .forgot-link {
961
- color: var(--primary);
962
- font-size: 0.8125rem;
963
- text-decoration: none;
964
- font-weight: 500;
965
- }
966
-
967
- .forgot-link:hover {
968
- text-decoration: underline;
969
- }
970
-
971
- .form-actions {
972
- display: flex;
973
- gap: 8px;
974
- }
975
-
976
- .btn {
977
- flex: 1;
978
- padding: 10px 16px;
979
- border-radius: calc(var(--radius) - 2px);
980
- font-family: var(--font-sans);
981
- font-size: 14px;
982
- font-weight: 600;
983
- cursor: pointer;
984
- transition: all 0.2s ease;
985
- }
986
-
987
- .btn-secondary {
988
- background: var(--muted);
989
- border: 1px solid var(--border);
990
- color: var(--foreground);
991
- }
992
-
993
- .btn-secondary:hover {
994
- background: var(--accent);
995
- }
996
-
997
- .btn-primary {
998
- background: var(--primary);
999
- border: none;
1000
- color: var(--primary-foreground);
1001
- }
1002
-
1003
- .btn-primary:hover {
1004
- opacity: 0.9;
1005
- }
1006
-
1007
- /* Notification */
1008
- .notification {
1009
- position: fixed;
1010
- top: 50%;
1011
- left: 50%;
1012
- transform: translate(-50%, -50%) scale(0.92);
1013
- background: var(--popover);
1014
- border: 1px solid var(--border);
1015
- border-radius: var(--radius);
1016
- padding: 16px;
1017
- width: 320px;
1018
- z-index: 2000;
1019
- opacity: 0;
1020
- visibility: hidden;
1021
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1022
- box-shadow: var(--shadow-xl);
1023
- }
1024
-
1025
- .notification.active {
1026
- opacity: 1;
1027
- visibility: visible;
1028
- transform: translate(-50%, -50%) scale(1);
1029
- }
1030
-
1031
- .notification-content {
1032
- display: flex;
1033
- align-items: flex-start;
1034
- gap: 12px;
1035
- }
1036
-
1037
- .notification-icon {
1038
- width: 40px;
1039
- height: 40px;
1040
- display: flex;
1041
- align-items: center;
1042
- justify-content: center;
1043
- border-radius: calc(var(--radius) - 2px);
1044
- flex-shrink: 0;
1045
- }
1046
-
1047
- .notification-icon svg {
1048
- width: 20px;
1049
- height: 20px;
1050
- }
1051
-
1052
- .notification-icon.success {
1053
- background: oklch(0.9515 0.0533 151.4771);
1054
- color: oklch(0.3932 0.108 152.5188);
1055
- }
1056
-
1057
- .notification-icon.info {
1058
- background: var(--primary);
1059
- color: var(--primary-foreground);
1060
- }
1061
-
1062
- .notification-icon.warning {
1063
- background: oklch(0.952 0.045 27.4087);
1064
- color: oklch(0.456 0.1474 27.73);
1065
- }
1066
-
1067
- .notification-icon.error {
1068
- background: oklch(0.958 0.0372 27.7478);
1069
- color: var(--destructive);
1070
- }
1071
-
1072
- .notification-text h4 {
1073
- font-size: 0.875rem;
1074
- font-weight: 600;
1075
- margin-bottom: 2px;
1076
- color: var(--foreground);
1077
- }
1078
-
1079
- .notification-text p {
1080
- font-size: 0.8125rem;
1081
- color: var(--popover-foreground);
1082
- line-height: 1.5;
1083
- }
1084
-
1085
- /* Demo element hover */
1086
- [data-demo-element] {
1087
- transition:
1088
- outline 0.15s ease,
1089
- box-shadow 0.2s ease;
1090
- }
1091
-
1092
- [data-demo-element]:hover {
1093
- outline: 2px solid var(--ring);
1094
- outline-offset: 2px;
1095
- }
1096
-
1097
- /* Responsive */
1098
- @media (max-width: 1024px) {
1099
- .metrics-grid {
1100
- grid-template-columns: repeat(2, 1fr);
1101
- }
1102
-
1103
- .workflow-grid {
1104
- grid-template-columns: repeat(2, 1fr);
1105
- }
1106
-
1107
- .workflow-step:nth-child(2)::after {
1108
- display: none;
1109
- }
1110
-
1111
- .workflow-step:nth-child(1)::after,
1112
- .workflow-step:nth-child(3)::after {
1113
- display: block;
1114
- }
1115
-
1116
- .insights-grid {
1117
- grid-template-columns: 1fr;
1118
- }
1119
-
1120
- .tools-grid {
1121
- grid-template-columns: repeat(2, 1fr);
1122
- }
1123
- }
1124
-
1125
- @media (max-width: 768px) {
1126
- .app-container {
1127
- padding: 40px 20px;
1128
- }
1129
-
1130
- .app-header {
1131
- margin-bottom: 40px;
1132
- }
1133
-
1134
- .hero {
1135
- margin-bottom: 40px;
1136
- }
1137
-
1138
- .hero h1 {
1139
- font-size: 1.875rem;
1140
- }
1141
-
1142
- .metrics-grid {
1143
- grid-template-columns: 1fr;
1144
- }
1145
-
1146
- .workflow-grid {
1147
- grid-template-columns: 1fr;
1148
- }
1149
-
1150
- .workflow-step::after {
1151
- display: none !important;
1152
- }
1153
-
1154
- .tools-grid {
1155
- grid-template-columns: 1fr;
1156
- }
1157
-
1158
- .stats-row {
1159
- grid-template-columns: 1fr;
1160
- }
1161
-
1162
- .form-actions {
1163
- flex-direction: column;
1164
- }
1165
- }
1166
- </style>
1167
- <script>
1168
- // Read query params and inject loader with mtx-* attributes
1169
- (function () {
1170
- var params = new URLSearchParams(window.location.search);
1171
- var script = document.createElement('script');
1172
- script.src = './loader.js';
1173
- script.setAttribute('mtx-id', params.get('mtx-id') || '');
1174
- script.setAttribute('mtx-key', params.get('mtx-key') || '');
1175
- script.setAttribute('mtx-app', params.get('mtx-app') || '1');
1176
- script.setAttribute('mtx-agent', params.get('mtx-agent') || '1');
1177
- script.setAttribute('mtx-api-host', params.get('mtx-api-host') || 'https://api.marketrix.co');
1178
- script.setAttribute('mtx-ai-host', params.get('mtx-ai-host') || 'https://agent.marketrix.co');
1179
- document.head.appendChild(script);
1180
- })();
1181
- </script>
1182
- </head>
1183
- <body>
1184
- <div class="app-container">
1185
- <!-- Header -->
1186
- <header class="app-header">
1187
- <div class="logo">
1188
- <div class="logo-icon">
1189
- <i data-lucide="layers"></i>
1190
- </div>
1191
- <span class="logo-text">Marketrix</span>
1192
- </div>
1193
- <div class="header-actions">
1194
- <button class="theme-toggle" onclick="toggleTheme()" aria-label="Toggle theme">
1195
- <i data-lucide="sun" id="theme-icon-light" style="display: none"></i>
1196
- <i data-lucide="moon" id="theme-icon-dark"></i>
1197
- </button>
1198
- </div>
1199
- </header>
1200
-
1201
- <!-- Hero -->
1202
- <section class="hero">
1203
- <div class="hero-badge">
1204
- <i data-lucide="sparkles"></i>
1205
- <span>Interactive Demo</span>
1206
- </div>
1207
- <h1>Intelligent Support, Built Into Your Product</h1>
1208
- <p>
1209
- Experience contextual AI assistance. Hover over any element to discover real-time guidance tailored to your
1210
- workflow.
1211
- </p>
1212
- </section>
1213
-
1214
- <!-- Navigation -->
1215
- <section class="section">
1216
- <div class="section-header">
1217
- <h2 class="section-title">Quick Actions</h2>
1218
- <p class="section-subtitle">Navigate your workspace efficiently</p>
1219
- </div>
1220
- <div class="card nav-panel" data-demo-area="navigation">
1221
- <button class="nav-btn primary" data-demo-element="dashboard">
1222
- <i data-lucide="layout-dashboard"></i>
1223
- Dashboard
1224
- </button>
1225
- <button class="nav-btn" data-demo-element="products">
1226
- <i data-lucide="package"></i>
1227
- Products
1228
- </button>
1229
- <button class="nav-btn" data-demo-element="settings">
1230
- <i data-lucide="settings"></i>
1231
- Settings
1232
- </button>
1233
- <button class="nav-btn" id="login-btn" onclick="showLoginModal()" data-demo-element="login">
1234
- <i data-lucide="log-in"></i>
1235
- Login
1236
- </button>
1237
- </div>
1238
- </section>
1239
-
1240
- <!-- Metrics -->
1241
- <section class="section">
1242
- <div class="section-header">
1243
- <h2 class="section-title">Performance Overview</h2>
1244
- <p class="section-subtitle">Real-time metrics at a glance</p>
1245
- </div>
1246
- <div class="metrics-grid" data-demo-area="metrics">
1247
- <div class="card metric-card" data-demo-element="revenue">
1248
- <div class="metric-header">
1249
- <div class="metric-icon">
1250
- <i data-lucide="dollar-sign"></i>
1251
- </div>
1252
- <span class="metric-badge positive">
1253
- <i data-lucide="trending-up"></i>
1254
- 12.5%
1255
- </span>
1256
- </div>
1257
- <div class="metric-value">$24,563</div>
1258
- <div class="metric-label">Monthly Revenue</div>
1259
- </div>
1260
- <div class="card metric-card" data-demo-element="orders">
1261
- <div class="metric-header">
1262
- <div class="metric-icon secondary">
1263
- <i data-lucide="shopping-cart"></i>
1264
- </div>
1265
- <span class="metric-badge positive">
1266
- <i data-lucide="trending-up"></i>
1267
- 8.3%
1268
- </span>
1269
- </div>
1270
- <div class="metric-value">342</div>
1271
- <div class="metric-label">Total Orders</div>
1272
- </div>
1273
- <div class="card metric-card" data-demo-element="customers">
1274
- <div class="metric-header">
1275
- <div class="metric-icon">
1276
- <i data-lucide="users"></i>
1277
- </div>
1278
- <span class="metric-badge positive">
1279
- <i data-lucide="trending-up"></i>
1280
- 15.2%
1281
- </span>
1282
- </div>
1283
- <div class="metric-value">1,247</div>
1284
- <div class="metric-label">Active Customers</div>
1285
- </div>
1286
- <div class="card metric-card" data-demo-element="conversion">
1287
- <div class="metric-header">
1288
- <div class="metric-icon secondary">
1289
- <i data-lucide="target"></i>
1290
- </div>
1291
- <span class="metric-badge negative">
1292
- <i data-lucide="trending-down"></i>
1293
- 2.1%
1294
- </span>
1295
- </div>
1296
- <div class="metric-value">3.8%</div>
1297
- <div class="metric-label">Conversion Rate</div>
1298
- </div>
1299
- </div>
1300
- </section>
1301
-
1302
- <!-- Product Management -->
1303
- <section class="section">
1304
- <div class="section-header">
1305
- <h2 class="section-title">Product Management</h2>
1306
- <p class="section-subtitle">Manage your inventory efficiently</p>
1307
- </div>
1308
- <div class="card nav-panel" data-demo-area="product-management">
1309
- <button class="nav-btn" data-demo-element="add-product">
1310
- <i data-lucide="plus-circle"></i>
1311
- Add Product
1312
- </button>
1313
- <button class="nav-btn" data-demo-element="bulk-import">
1314
- <i data-lucide="upload"></i>
1315
- Bulk Import
1316
- </button>
1317
- <button class="nav-btn" data-demo-element="categories">
1318
- <i data-lucide="folder-tree"></i>
1319
- Categories
1320
- </button>
1321
- <button class="nav-btn" data-demo-element="inventory">
1322
- <i data-lucide="warehouse"></i>
1323
- Inventory
1324
- </button>
1325
- </div>
1326
- </section>
1327
-
1328
- <!-- Order Workflow -->
1329
- <section class="section">
1330
- <div class="section-header">
1331
- <h2 class="section-title">Order Processing</h2>
1332
- <p class="section-subtitle">Track fulfillment across all stages</p>
1333
- </div>
1334
- <div class="card workflow-container" data-demo-area="order-processing">
1335
- <div class="workflow-grid">
1336
- <div class="workflow-step completed" data-demo-element="order-received">
1337
- <div class="step-icon">
1338
- <i data-lucide="check"></i>
1339
- </div>
1340
- <div class="step-title">Order Received</div>
1341
- <div class="step-status">Completed</div>
1342
- </div>
1343
- <div class="workflow-step active" data-demo-element="payment-processing">
1344
- <div class="step-icon">
1345
- <i data-lucide="credit-card"></i>
1346
- </div>
1347
- <div class="step-title">Payment</div>
1348
- <div class="step-status">Processing</div>
1349
- </div>
1350
- <div class="workflow-step" data-demo-element="fulfillment">
1351
- <div class="step-icon">
1352
- <i data-lucide="package-open"></i>
1353
- </div>
1354
- <div class="step-title">Fulfillment</div>
1355
- <div class="step-status">Pending</div>
1356
- </div>
1357
- <div class="workflow-step" data-demo-element="delivery">
1358
- <div class="step-icon">
1359
- <i data-lucide="truck"></i>
1360
- </div>
1361
- <div class="step-title">Delivery</div>
1362
- <div class="step-status">Pending</div>
1363
- </div>
1364
- </div>
1365
- </div>
1366
- </section>
1367
-
1368
- <!-- Insights -->
1369
- <section class="section">
1370
- <div class="section-header">
1371
- <h2 class="section-title">Customer Insights</h2>
1372
- <p class="section-subtitle">Understand your audience better</p>
1373
- </div>
1374
- <div class="insights-grid" data-demo-area="customer-insights">
1375
- <div class="card insight-card" data-demo-element="customer-segments">
1376
- <div class="insight-header">
1377
- <div class="insight-icon">
1378
- <i data-lucide="pie-chart"></i>
1379
- </div>
1380
- <h3 class="insight-title">Customer Segments</h3>
1381
- </div>
1382
- <div class="segment-row">
1383
- <span class="segment-label">VIP Customers</span>
1384
- <div class="segment-bar"><div class="segment-fill" style="width: 23%"></div></div>
1385
- <span class="segment-value">23%</span>
1386
- </div>
1387
- <div class="segment-row">
1388
- <span class="segment-label">Regular Buyers</span>
1389
- <div class="segment-bar"><div class="segment-fill" style="width: 45%"></div></div>
1390
- <span class="segment-value">45%</span>
1391
- </div>
1392
- <div class="segment-row">
1393
- <span class="segment-label">New Customers</span>
1394
- <div class="segment-bar"><div class="segment-fill" style="width: 32%"></div></div>
1395
- <span class="segment-value">32%</span>
1396
- </div>
1397
- </div>
1398
- <div class="card insight-card" data-demo-element="support-tickets">
1399
- <div class="insight-header">
1400
- <div class="insight-icon">
1401
- <i data-lucide="headphones"></i>
1402
- </div>
1403
- <h3 class="insight-title">Support Tickets</h3>
1404
- </div>
1405
- <div class="stats-row">
1406
- <div class="stat-item">
1407
- <div class="stat-value">12</div>
1408
- <div class="stat-label">Open</div>
1409
- </div>
1410
- <div class="stat-item">
1411
- <div class="stat-value">45</div>
1412
- <div class="stat-label">Resolved</div>
1413
- </div>
1414
- <div class="stat-item">
1415
- <div class="stat-value">2.3h</div>
1416
- <div class="stat-label">Avg Response</div>
1417
- </div>
1418
- </div>
1419
- </div>
1420
- </div>
1421
- </section>
1422
-
1423
- <!-- Marketing Tools -->
1424
- <section class="section">
1425
- <div class="section-header">
1426
- <h2 class="section-title">Marketing Tools</h2>
1427
- <p class="section-subtitle">Grow your business with powerful campaigns</p>
1428
- </div>
1429
- <div class="tools-grid" data-demo-area="marketing">
1430
- <div class="card tool-card" data-demo-element="email-campaigns">
1431
- <div class="tool-icon">
1432
- <i data-lucide="mail"></i>
1433
- </div>
1434
- <h3 class="tool-title">Email Campaigns</h3>
1435
- <p class="tool-desc">Send targeted emails to customer segments with smart automation</p>
1436
- <button class="tool-btn">
1437
- <i data-lucide="send"></i>
1438
- Launch
1439
- </button>
1440
- </div>
1441
- <div class="card tool-card" data-demo-element="discount-codes">
1442
- <div class="tool-icon">
1443
- <i data-lucide="ticket"></i>
1444
- </div>
1445
- <h3 class="tool-title">Discount Codes</h3>
1446
- <p class="tool-desc">Create promotional codes and special offers for customers</p>
1447
- <button class="tool-btn">
1448
- <i data-lucide="plus"></i>
1449
- Create
1450
- </button>
1451
- </div>
1452
- <div class="card tool-card" data-demo-element="social-media">
1453
- <div class="tool-icon">
1454
- <i data-lucide="share-2"></i>
1455
- </div>
1456
- <h3 class="tool-title">Social Media</h3>
1457
- <p class="tool-desc">Connect and manage your presence across social platforms</p>
1458
- <button class="tool-btn">
1459
- <i data-lucide="external-link"></i>
1460
- Connect
1461
- </button>
1462
- </div>
1463
- </div>
1464
- </section>
1465
-
1466
- <!-- Notification Test -->
1467
- <section class="section">
1468
- <div class="section-header">
1469
- <h2 class="section-title">Notification System</h2>
1470
- <p class="section-subtitle">Test the overlay notification experience</p>
1471
- </div>
1472
- <div class="card test-panel" data-demo-area="notification-test">
1473
- <p>Test different notification types with the animated overlay system:</p>
1474
- <div class="btn-group">
1475
- <button
1476
- class="nav-btn"
1477
- onclick="showNotification('Success', 'Operation completed successfully!', 'success')"
1478
- >
1479
- <i data-lucide="check-circle"></i>
1480
- Success
1481
- </button>
1482
- <button
1483
- class="nav-btn"
1484
- onclick="showNotification('Information', 'New updates are available for your account.', 'info')"
1485
- >
1486
- <i data-lucide="info"></i>
1487
- Info
1488
- </button>
1489
- <button
1490
- class="nav-btn"
1491
- onclick="showNotification('Warning', 'Please review before continuing.', 'warning')"
1492
- >
1493
- <i data-lucide="alert-triangle"></i>
1494
- Warning
1495
- </button>
1496
- <button
1497
- class="nav-btn"
1498
- onclick="showNotification('Error', 'Something went wrong. Please try again.', 'error')"
1499
- >
1500
- <i data-lucide="x-circle"></i>
1501
- Error
1502
- </button>
1503
- </div>
1504
- </div>
1505
- </section>
1506
- </div>
1507
-
1508
- <!-- Login Modal -->
1509
- <div class="modal-overlay" id="login-modal">
1510
- <div class="modal">
1511
- <div class="modal-header">
1512
- <h3 class="modal-title">
1513
- <i data-lucide="lock"></i>
1514
- Sign In
1515
- </h3>
1516
- <button class="modal-close" onclick="hideLoginModal()">
1517
- <i data-lucide="x"></i>
1518
- </button>
1519
- </div>
1520
- <div class="modal-body">
1521
- <form id="login-form" onsubmit="handleLogin(event)">
1522
- <div class="form-group">
1523
- <label class="form-label" for="login-email">Email Address</label>
1524
- <input type="email" id="login-email" class="form-input" placeholder="you@example.com" required />
1525
- <p class="form-hint">Enter your registered email address</p>
1526
- </div>
1527
- <div class="form-group">
1528
- <label class="form-label" for="login-password">Password</label>
1529
- <input type="password" id="login-password" class="form-input" placeholder="••••••••" required />
1530
- <p class="form-hint">Minimum 8 characters required</p>
1531
- </div>
1532
- <div class="form-options">
1533
- <label class="checkbox-label">
1534
- <input type="checkbox" id="remember-me" />
1535
- Remember me
1536
- </label>
1537
- <a href="#" class="forgot-link">Forgot password?</a>
1538
- </div>
1539
- <div class="form-actions">
1540
- <button type="button" class="btn btn-secondary" onclick="hideLoginModal()">Cancel</button>
1541
- <button type="submit" class="btn btn-primary">Sign In</button>
1542
- </div>
1543
- </form>
1544
- </div>
1545
- </div>
1546
- </div>
1547
-
1548
- <!-- Notification -->
1549
- <div class="notification" id="notification">
1550
- <div class="notification-content">
1551
- <div class="notification-icon" id="notification-icon">
1552
- <i data-lucide="check"></i>
1553
- </div>
1554
- <div class="notification-text">
1555
- <h4 id="notification-title">Title</h4>
1556
- <p id="notification-message">Message</p>
1557
- </div>
1558
- </div>
1559
- </div>
1560
-
1561
- <script>
1562
- // Initialize Lucide icons
1563
- lucide.createIcons();
1564
-
1565
- // Theme Management
1566
- function toggleTheme() {
1567
- const body = document.body;
1568
- const isDark = body.classList.contains('dark');
1569
-
1570
- if (isDark) {
1571
- body.classList.remove('dark');
1572
- document.getElementById('theme-icon-light').style.display = 'none';
1573
- document.getElementById('theme-icon-dark').style.display = 'block';
1574
- } else {
1575
- body.classList.add('dark');
1576
- document.getElementById('theme-icon-light').style.display = 'block';
1577
- document.getElementById('theme-icon-dark').style.display = 'none';
1578
- }
1579
-
1580
- localStorage.setItem('marketrix-theme', isDark ? 'light' : 'dark');
1581
- lucide.createIcons();
1582
- }
1583
-
1584
- function loadTheme() {
1585
- const savedTheme = localStorage.getItem('marketrix-theme') || 'dark';
1586
-
1587
- if (savedTheme === 'dark') {
1588
- document.body.classList.add('dark');
1589
- document.getElementById('theme-icon-light').style.display = 'block';
1590
- document.getElementById('theme-icon-dark').style.display = 'none';
1591
- } else {
1592
- document.body.classList.remove('dark');
1593
- document.getElementById('theme-icon-light').style.display = 'none';
1594
- document.getElementById('theme-icon-dark').style.display = 'block';
1595
- }
1596
-
1597
- lucide.createIcons();
1598
- }
1599
-
1600
- loadTheme();
1601
-
1602
- // Modal Functions
1603
- function showLoginModal() {
1604
- document.getElementById('login-modal').classList.add('active');
1605
- document.body.style.overflow = 'hidden';
1606
- }
1607
-
1608
- function hideLoginModal() {
1609
- document.getElementById('login-modal').classList.remove('active');
1610
- document.body.style.overflow = '';
1611
- }
1612
-
1613
- function handleLogin(event) {
1614
- event.preventDefault();
1615
- const email = document.getElementById('login-email').value;
1616
- hideLoginModal();
1617
-
1618
- showNotification('Welcome back!', `Signed in as ${email}`, 'success');
1619
-
1620
- const loginBtn = document.getElementById('login-btn');
1621
- loginBtn.innerHTML = '<i data-lucide="user-check"></i> ' + email.split('@')[0];
1622
- loginBtn.classList.add('active');
1623
- loginBtn.onclick = null;
1624
-
1625
- lucide.createIcons();
1626
- document.getElementById('login-form').reset();
1627
- }
1628
-
1629
- // Notification System
1630
- let notificationTimeout;
1631
-
1632
- function showNotification(title, message, type = 'info') {
1633
- const notification = document.getElementById('notification');
1634
- const iconEl = document.getElementById('notification-icon');
1635
- const titleEl = document.getElementById('notification-title');
1636
- const messageEl = document.getElementById('notification-message');
1637
-
1638
- clearTimeout(notificationTimeout);
1639
-
1640
- titleEl.textContent = title;
1641
- messageEl.textContent = message;
1642
-
1643
- iconEl.className = 'notification-icon ' + type;
1644
-
1645
- const iconMap = {
1646
- success: 'check',
1647
- info: 'info',
1648
- warning: 'alert-triangle',
1649
- error: 'x-circle',
1650
- };
1651
-
1652
- iconEl.innerHTML = `<i data-lucide="${iconMap[type] || 'info'}"></i>`;
1653
- lucide.createIcons();
1654
-
1655
- notification.classList.add('active');
1656
-
1657
- notificationTimeout = setTimeout(() => {
1658
- notification.classList.remove('active');
1659
- }, 3000);
1660
- }
1661
-
1662
- // Keyboard shortcuts
1663
- document.addEventListener('keydown', e => {
1664
- if (e.key === 'Escape') {
1665
- hideLoginModal();
1666
- document.getElementById('notification').classList.remove('active');
1667
- }
1668
- });
1669
-
1670
- document.getElementById('login-modal').addEventListener('click', e => {
1671
- if (e.target.classList.contains('modal-overlay')) {
1672
- hideLoginModal();
1673
- }
1674
- });
1675
-
1676
- // Scroll animations
1677
- const observer = new IntersectionObserver(
1678
- entries => {
1679
- entries.forEach(entry => {
1680
- if (entry.isIntersecting) {
1681
- entry.target.style.opacity = '1';
1682
- entry.target.style.transform = 'translateY(0)';
1683
- }
1684
- });
1685
- },
1686
- { threshold: 0.1, rootMargin: '0px 0px -30px 0px' },
1687
- );
1688
-
1689
- document.querySelectorAll('.section').forEach(section => {
1690
- section.style.opacity = '0';
1691
- section.style.transform = 'translateY(16px)';
1692
- section.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';
1693
- observer.observe(section);
1694
- });
1695
- </script>
1696
- </body>
1697
- </html>