@fromsko/chat-ui 0.0.0-stage → 0.1.6

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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +100 -2
  3. package/lib/adapters/event-bus.d.ts +80 -0
  4. package/lib/adapters/event-bus.js +73 -0
  5. package/lib/adapters/index.d.ts +3 -0
  6. package/lib/adapters/index.js +3 -0
  7. package/lib/adapters/labels.d.ts +6 -0
  8. package/lib/adapters/labels.js +17 -0
  9. package/lib/adapters/stream-bridge.d.ts +9 -0
  10. package/lib/adapters/stream-bridge.js +7 -0
  11. package/lib/blocks/cards/AskCard.d.ts +8 -0
  12. package/lib/blocks/cards/AskCard.js +97 -0
  13. package/lib/blocks/cards/CompactionCard.d.ts +5 -0
  14. package/lib/blocks/cards/CompactionCard.js +5 -0
  15. package/lib/blocks/cards/ContextUsage.d.ts +14 -0
  16. package/lib/blocks/cards/ContextUsage.js +136 -0
  17. package/lib/blocks/cards/DisplayCard.d.ts +7 -0
  18. package/lib/blocks/cards/DisplayCard.js +27 -0
  19. package/lib/blocks/cards/MemoryPill.d.ts +5 -0
  20. package/lib/blocks/cards/MemoryPill.js +5 -0
  21. package/lib/blocks/cards/OutputCard.d.ts +5 -0
  22. package/lib/blocks/cards/OutputCard.js +13 -0
  23. package/lib/blocks/cards/PermissionCard.d.ts +21 -0
  24. package/lib/blocks/cards/PermissionCard.js +26 -0
  25. package/lib/blocks/cards/SpringCheck.d.ts +9 -0
  26. package/lib/blocks/cards/SpringCheck.js +17 -0
  27. package/lib/blocks/cards/TodoCard.d.ts +19 -0
  28. package/lib/blocks/cards/TodoCard.js +28 -0
  29. package/lib/blocks/cards/index.d.ts +10 -0
  30. package/lib/blocks/cards/index.js +10 -0
  31. package/lib/blocks/composer/Composer.d.ts +66 -0
  32. package/lib/blocks/composer/Composer.js +73 -0
  33. package/lib/blocks/composer/ComposerAttachments.d.ts +17 -0
  34. package/lib/blocks/composer/ComposerAttachments.js +10 -0
  35. package/lib/blocks/composer/ComposerGrip.d.ts +1 -0
  36. package/lib/blocks/composer/ComposerGrip.js +39 -0
  37. package/lib/blocks/composer/ComposerInput.d.ts +18 -0
  38. package/lib/blocks/composer/ComposerInput.js +60 -0
  39. package/lib/blocks/composer/ComposerMenus.d.ts +10 -0
  40. package/lib/blocks/composer/ComposerMenus.js +78 -0
  41. package/lib/blocks/composer/ComposerToolbar.d.ts +27 -0
  42. package/lib/blocks/composer/ComposerToolbar.js +16 -0
  43. package/lib/blocks/composer/MentionPicker.d.ts +13 -0
  44. package/lib/blocks/composer/MentionPicker.js +71 -0
  45. package/lib/blocks/composer/PromptPop.d.ts +7 -0
  46. package/lib/blocks/composer/PromptPop.js +40 -0
  47. package/lib/blocks/composer/QueuedPrompts.d.ts +14 -0
  48. package/lib/blocks/composer/QueuedPrompts.js +21 -0
  49. package/lib/blocks/composer/SlingButton.d.ts +10 -0
  50. package/lib/blocks/composer/SlingButton.js +112 -0
  51. package/lib/blocks/composer/index.d.ts +7 -0
  52. package/lib/blocks/composer/index.js +1 -0
  53. package/lib/blocks/conversation/ChatEmptyScene.d.ts +4 -0
  54. package/lib/blocks/conversation/ChatEmptyScene.js +21 -0
  55. package/lib/blocks/conversation/ChatHeader.d.ts +13 -0
  56. package/lib/blocks/conversation/ChatHeader.js +20 -0
  57. package/lib/blocks/conversation/ChatPane.d.ts +90 -0
  58. package/lib/blocks/conversation/ChatPane.js +60 -0
  59. package/lib/blocks/conversation/Conversation.d.ts +11 -0
  60. package/lib/blocks/conversation/Conversation.js +41 -0
  61. package/lib/blocks/conversation/LineSidebar.d.ts +14 -0
  62. package/lib/blocks/conversation/LineSidebar.js +42 -0
  63. package/lib/blocks/conversation/index.d.ts +5 -0
  64. package/lib/blocks/conversation/index.js +5 -0
  65. package/lib/blocks/index.d.ts +9 -0
  66. package/lib/blocks/index.js +9 -0
  67. package/lib/blocks/message/DayDivider.d.ts +10 -0
  68. package/lib/blocks/message/DayDivider.js +29 -0
  69. package/lib/blocks/message/DiffView.d.ts +5 -0
  70. package/lib/blocks/message/DiffView.js +18 -0
  71. package/lib/blocks/message/MermaidDiagram.d.ts +4 -0
  72. package/lib/blocks/message/MermaidDiagram.js +43 -0
  73. package/lib/blocks/message/Message.d.ts +17 -0
  74. package/lib/blocks/message/Message.js +45 -0
  75. package/lib/blocks/message/MessageActionBar.d.ts +18 -0
  76. package/lib/blocks/message/MessageActionBar.js +15 -0
  77. package/lib/blocks/message/MessageArtifacts.d.ts +13 -0
  78. package/lib/blocks/message/MessageArtifacts.js +9 -0
  79. package/lib/blocks/message/MessageAttachments.d.ts +5 -0
  80. package/lib/blocks/message/MessageAttachments.js +28 -0
  81. package/lib/blocks/message/MessageBubble.d.ts +11 -0
  82. package/lib/blocks/message/MessageBubble.js +31 -0
  83. package/lib/blocks/message/MessageRow.d.ts +20 -0
  84. package/lib/blocks/message/MessageRow.js +49 -0
  85. package/lib/blocks/message/MessageStream.d.ts +23 -0
  86. package/lib/blocks/message/MessageStream.js +80 -0
  87. package/lib/blocks/message/MessageTrace.d.ts +16 -0
  88. package/lib/blocks/message/MessageTrace.js +39 -0
  89. package/lib/blocks/message/PartView.d.ts +10 -0
  90. package/lib/blocks/message/PartView.js +29 -0
  91. package/lib/blocks/message/code-text.d.ts +15 -0
  92. package/lib/blocks/message/code-text.js +17 -0
  93. package/lib/blocks/message/index.d.ts +12 -0
  94. package/lib/blocks/message/index.js +12 -0
  95. package/lib/blocks/reasoning/Reasoning.d.ts +7 -0
  96. package/lib/blocks/reasoning/Reasoning.js +26 -0
  97. package/lib/blocks/reasoning/ReasoningBlock.d.ts +6 -0
  98. package/lib/blocks/reasoning/ReasoningBlock.js +5 -0
  99. package/lib/blocks/reasoning/index.d.ts +2 -0
  100. package/lib/blocks/reasoning/index.js +2 -0
  101. package/lib/blocks/selection/SelectionActions.d.ts +12 -0
  102. package/lib/blocks/selection/SelectionActions.js +29 -0
  103. package/lib/blocks/selection/SelectionBar.d.ts +10 -0
  104. package/lib/blocks/selection/SelectionBar.js +6 -0
  105. package/lib/blocks/selection/index.d.ts +2 -0
  106. package/lib/blocks/selection/index.js +2 -0
  107. package/lib/blocks/settings/DisplaySettingsPanel.d.ts +5 -0
  108. package/lib/blocks/settings/DisplaySettingsPanel.js +33 -0
  109. package/lib/blocks/settings/SquishSwitch.d.ts +8 -0
  110. package/lib/blocks/settings/SquishSwitch.js +21 -0
  111. package/lib/blocks/settings/index.d.ts +2 -0
  112. package/lib/blocks/settings/index.js +2 -0
  113. package/lib/blocks/status/LatticeLoader.d.ts +12 -0
  114. package/lib/blocks/status/LatticeLoader.js +22 -0
  115. package/lib/blocks/status/TypingIndicator.d.ts +5 -0
  116. package/lib/blocks/status/TypingIndicator.js +5 -0
  117. package/lib/blocks/status/index.d.ts +2 -0
  118. package/lib/blocks/status/index.js +2 -0
  119. package/lib/blocks/tool/SandboxCard.d.ts +5 -0
  120. package/lib/blocks/tool/SandboxCard.js +10 -0
  121. package/lib/blocks/tool/ToolCard.d.ts +10 -0
  122. package/lib/blocks/tool/ToolCard.js +32 -0
  123. package/lib/blocks/tool/ToolGroup.d.ts +6 -0
  124. package/lib/blocks/tool/ToolGroup.js +23 -0
  125. package/lib/blocks/tool/exec-envelope.d.ts +7 -0
  126. package/lib/blocks/tool/exec-envelope.js +43 -0
  127. package/lib/blocks/tool/index.d.ts +4 -0
  128. package/lib/blocks/tool/index.js +4 -0
  129. package/lib/domain/ask.d.ts +14 -0
  130. package/lib/domain/ask.js +50 -0
  131. package/lib/domain/attachments.d.ts +16 -0
  132. package/lib/domain/attachments.js +126 -0
  133. package/lib/domain/attribution.d.ts +4 -0
  134. package/lib/domain/attribution.js +11 -0
  135. package/lib/domain/composer-palette.d.ts +15 -0
  136. package/lib/domain/composer-palette.js +131 -0
  137. package/lib/domain/index.d.ts +12 -0
  138. package/lib/domain/index.js +12 -0
  139. package/lib/domain/mention.d.ts +17 -0
  140. package/lib/domain/mention.js +95 -0
  141. package/lib/domain/message-blocks.d.ts +29 -0
  142. package/lib/domain/message-blocks.js +63 -0
  143. package/lib/domain/message-menu.d.ts +4 -0
  144. package/lib/domain/message-menu.js +46 -0
  145. package/lib/domain/queue.d.ts +23 -0
  146. package/lib/domain/queue.js +52 -0
  147. package/lib/domain/reducer.d.ts +137 -0
  148. package/lib/domain/reducer.js +442 -0
  149. package/lib/domain/selection-actions.d.ts +13 -0
  150. package/lib/domain/selection-actions.js +56 -0
  151. package/lib/domain/selection-gates.d.ts +6 -0
  152. package/lib/domain/selection-gates.js +36 -0
  153. package/lib/domain/slash-commands.d.ts +16 -0
  154. package/lib/domain/slash-commands.js +142 -0
  155. package/lib/hooks/index.d.ts +8 -0
  156. package/lib/hooks/index.js +8 -0
  157. package/lib/hooks/useComposerPalette.d.ts +35 -0
  158. package/lib/hooks/useComposerPalette.js +120 -0
  159. package/lib/hooks/useComposerSubmit.d.ts +31 -0
  160. package/lib/hooks/useComposerSubmit.js +135 -0
  161. package/lib/hooks/useInputHistory.d.ts +14 -0
  162. package/lib/hooks/useInputHistory.js +52 -0
  163. package/lib/hooks/usePendingAsk.d.ts +11 -0
  164. package/lib/hooks/usePendingAsk.js +33 -0
  165. package/lib/hooks/usePendingPermissions.d.ts +10 -0
  166. package/lib/hooks/usePendingPermissions.js +26 -0
  167. package/lib/hooks/useQueuedPrompts.d.ts +12 -0
  168. package/lib/hooks/useQueuedPrompts.js +91 -0
  169. package/lib/hooks/useSelectionPop.d.ts +13 -0
  170. package/lib/hooks/useSelectionPop.js +130 -0
  171. package/lib/hooks/useStreamBridge.d.ts +1 -0
  172. package/lib/hooks/useStreamBridge.js +23 -0
  173. package/lib/index.d.ts +10 -0
  174. package/lib/index.js +10 -0
  175. package/lib/primitives/Badge.d.ts +7 -0
  176. package/lib/primitives/Badge.js +13 -0
  177. package/lib/primitives/Button.d.ts +9 -0
  178. package/lib/primitives/Button.js +21 -0
  179. package/lib/primitives/Collapsible.d.ts +12 -0
  180. package/lib/primitives/Collapsible.js +14 -0
  181. package/lib/primitives/Dialog.d.ts +10 -0
  182. package/lib/primitives/Dialog.js +19 -0
  183. package/lib/primitives/DropdownMenu.d.ts +28 -0
  184. package/lib/primitives/DropdownMenu.js +37 -0
  185. package/lib/primitives/Empty.d.ts +8 -0
  186. package/lib/primitives/Empty.js +6 -0
  187. package/lib/primitives/Input.d.ts +3 -0
  188. package/lib/primitives/Input.js +6 -0
  189. package/lib/primitives/Kbd.d.ts +2 -0
  190. package/lib/primitives/Kbd.js +5 -0
  191. package/lib/primitives/Popover.d.ts +15 -0
  192. package/lib/primitives/Popover.js +32 -0
  193. package/lib/primitives/ScrollArea.d.ts +5 -0
  194. package/lib/primitives/ScrollArea.js +5 -0
  195. package/lib/primitives/Separator.d.ts +5 -0
  196. package/lib/primitives/Separator.js +5 -0
  197. package/lib/primitives/Spinner.d.ts +5 -0
  198. package/lib/primitives/Spinner.js +5 -0
  199. package/lib/primitives/Textarea.d.ts +3 -0
  200. package/lib/primitives/Textarea.js +6 -0
  201. package/lib/primitives/Tooltip.d.ts +8 -0
  202. package/lib/primitives/Tooltip.js +7 -0
  203. package/lib/primitives/index.d.ts +14 -0
  204. package/lib/primitives/index.js +14 -0
  205. package/lib/reactbits/Motion.d.ts +24 -0
  206. package/lib/reactbits/Motion.js +52 -0
  207. package/lib/reactbits/index.d.ts +1 -0
  208. package/lib/reactbits/index.js +1 -0
  209. package/lib/stores/chat-store.d.ts +33 -0
  210. package/lib/stores/chat-store.js +93 -0
  211. package/lib/stores/display-store.d.ts +15 -0
  212. package/lib/stores/display-store.js +116 -0
  213. package/lib/stores/index.d.ts +3 -0
  214. package/lib/stores/index.js +3 -0
  215. package/lib/stores/theme-store.d.ts +8 -0
  216. package/lib/stores/theme-store.js +29 -0
  217. package/lib/tokens/index.d.ts +21 -0
  218. package/lib/tokens/index.js +66 -0
  219. package/lib/types/agent.d.ts +62 -0
  220. package/lib/types/agent.js +1 -0
  221. package/lib/types/callbacks.d.ts +55 -0
  222. package/lib/types/callbacks.js +1 -0
  223. package/lib/types/composer.d.ts +116 -0
  224. package/lib/types/composer.js +1 -0
  225. package/lib/types/conversation.d.ts +54 -0
  226. package/lib/types/conversation.js +1 -0
  227. package/lib/types/display.d.ts +25 -0
  228. package/lib/types/display.js +40 -0
  229. package/lib/types/index.d.ts +8 -0
  230. package/lib/types/index.js +8 -0
  231. package/lib/types/message.d.ts +100 -0
  232. package/lib/types/message.js +1 -0
  233. package/lib/types/selection.d.ts +60 -0
  234. package/lib/types/selection.js +1 -0
  235. package/lib/types/theme.d.ts +100 -0
  236. package/lib/types/theme.js +1 -0
  237. package/lib/utils/clipboard.d.ts +4 -0
  238. package/lib/utils/clipboard.js +41 -0
  239. package/lib/utils/cn.d.ts +2 -0
  240. package/lib/utils/cn.js +14 -0
  241. package/lib/utils/index.d.ts +3 -0
  242. package/lib/utils/index.js +3 -0
  243. package/lib/utils/storage.d.ts +11 -0
  244. package/lib/utils/storage.js +48 -0
  245. package/package.json +93 -4
  246. package/src/styles/blocks.css +2439 -0
  247. package/src/styles/index.css +3 -0
  248. package/src/tokens/theme.css +464 -0
@@ -0,0 +1,3 @@
1
+
2
+ @import "../tokens/theme.css";
3
+ @import "./blocks.css";
@@ -0,0 +1,464 @@
1
+
2
+ @import "tailwindcss" source(none);
3
+ @source "../../src/**/*.{ts,tsx}";
4
+
5
+ @custom-variant dark (&:is(.dark *));
6
+
7
+ @theme inline {
8
+ --font-sans: var(--font-ui);
9
+ --font-mono: var(--font-code);
10
+
11
+
12
+ --text-micro: var(--text-micro);
13
+ --text-micro--line-height: var(--text-micro--line-height);
14
+ --text-meta: var(--text-meta);
15
+ --text-meta--line-height: var(--text-meta--line-height);
16
+ --text-body: var(--text-body);
17
+ --text-body--line-height: var(--text-body--line-height);
18
+ --text-label: var(--text-label);
19
+ --text-label--line-height: var(--text-label--line-height);
20
+ --text-title: var(--text-title);
21
+ --text-title--line-height: var(--text-title--line-height);
22
+ --text-heading: var(--text-heading);
23
+ --text-heading--line-height: var(--text-heading--line-height);
24
+
25
+
26
+ --text-xs: var(--text-meta);
27
+ --text-xs--line-height: var(--text-meta--line-height);
28
+ --text-sm: var(--text-title);
29
+ --text-sm--line-height: var(--text-title--line-height);
30
+ --text-base: var(--text-heading);
31
+ --text-base--line-height: var(--text-heading--line-height);
32
+ --text-lg: var(--text-heading);
33
+ --text-lg--line-height: var(--text-heading--line-height);
34
+
35
+
36
+ --color-slate-950: var(--surface-950);
37
+ --color-slate-900: var(--surface-900);
38
+ --color-slate-800: var(--surface-800);
39
+ --color-slate-700: var(--surface-700);
40
+ --color-slate-600: var(--surface-600);
41
+ --color-slate-500: var(--surface-500);
42
+ --color-slate-100: var(--text-100);
43
+ --color-slate-200: var(--text-200);
44
+ --color-slate-300: var(--text-300);
45
+ --color-slate-400: var(--text-400);
46
+
47
+
48
+ --color-background: var(--app-bg);
49
+ --color-foreground: var(--text-200);
50
+ --color-card: var(--surface-900);
51
+ --color-card-foreground: var(--text-200);
52
+ --color-popover: var(--surface-overlay);
53
+ --color-popover-foreground: var(--text-200);
54
+ --color-primary: var(--primary);
55
+ --color-primary-foreground: var(--primary-foreground);
56
+ --color-secondary: var(--surface-800);
57
+ --color-secondary-foreground: var(--text-200);
58
+ --color-muted: var(--surface-800);
59
+ --color-muted-foreground: var(--text-400);
60
+ --color-accent: var(--surface-700);
61
+ --color-accent-foreground: var(--text-100);
62
+ --color-destructive: var(--accent-danger);
63
+ --color-destructive-foreground: #ffffff;
64
+ --color-success: var(--accent-success);
65
+ --color-success-foreground: #ffffff;
66
+ --color-warning: var(--accent-warning);
67
+ --color-warning-foreground: #ffffff;
68
+ --color-border: var(--border-700);
69
+ --color-input: var(--border-700);
70
+ --color-ring: var(--accent-primary-border);
71
+
72
+ --radius-sm: calc(var(--radius) - 4px);
73
+ --radius-md: calc(var(--radius) - 2px);
74
+ --radius-lg: var(--radius);
75
+
76
+
77
+ --z-index-under-canvas: var(--z-under-canvas);
78
+ --z-index-canvas-overlay: var(--z-canvas-overlay);
79
+ --z-index-sticky: var(--z-sticky);
80
+ --z-index-panel: var(--z-panel);
81
+ --z-index-tooltip: var(--z-tooltip);
82
+ --z-index-modal: var(--z-modal);
83
+ --z-index-top: var(--z-top);
84
+
85
+ --animate-shimmer: shimmer 1.5s ease-in-out infinite;
86
+
87
+ @keyframes shimmer {
88
+ from {
89
+ background-position: 200% 0;
90
+ }
91
+ to {
92
+ background-position: -200% 0;
93
+ }
94
+ }
95
+ }
96
+
97
+ @theme {
98
+ --shadow-md: var(--elev-shadow-md);
99
+ --shadow-lg: var(--elev-shadow-lg);
100
+ }
101
+
102
+
103
+ :root {
104
+ --radius: 0.625rem;
105
+ --radius-sm: calc(var(--radius) - 4px);
106
+ --radius-md: calc(var(--radius) - 2px);
107
+ --radius-lg: var(--radius);
108
+ --radius-xl: 1.25rem;
109
+ --radius-pill: 9999px;
110
+ --shadow-strong: rgb(0 0 0 / 0.45);
111
+
112
+ --font-ui:
113
+ Inter, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system,
114
+ "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei", "Noto Sans SC",
115
+ sans-serif;
116
+ --font-code:
117
+ "JetBrains Mono", "Cascadia Mono", "Cascadia Code", Consolas, ui-monospace,
118
+ monospace;
119
+
120
+
121
+ --control-xs: 22px;
122
+ --control-sm: 28px;
123
+ --control-md: 32px;
124
+ --control-lg: 40px;
125
+
126
+ --border: var(--border-700);
127
+ --card: var(--surface-900);
128
+
129
+
130
+ --press-scale: 0.97;
131
+ --press-scale-sm: 0.985;
132
+ --transition-press: 110ms cubic-bezier(0.2, 0, 0, 1);
133
+ --transition-feedback: 180ms ease-out;
134
+
135
+
136
+ --z-under-canvas: 0;
137
+ --z-sticky: 1;
138
+ --z-canvas-overlay: 10;
139
+ --z-panel: 20;
140
+ --z-tooltip: 40;
141
+ --z-modal: 50;
142
+ --z-top: 60;
143
+
144
+ --app-bg: #0a0a0b;
145
+ --primary: #f5f5f4;
146
+ --primary-foreground: #1c1917;
147
+
148
+ --surface-950: #0a0a0b;
149
+ --surface-900: #101012;
150
+ --surface-800: #18181b;
151
+ --surface-700: #212124;
152
+ --surface-600: #2b2b30;
153
+ --surface-500: #3a3a41;
154
+ --surface-overlay: var(--surface-800);
155
+ --surface-sheet: var(--app-bg);
156
+
157
+ --elev-shadow-md:
158
+ 0 8px 24px -8px rgb(0 0 0 / 0.6), 0 2px 6px -2px rgb(0 0 0 / 0.45);
159
+ --elev-shadow-lg:
160
+ 0 18px 40px -12px rgb(0 0 0 / 0.7), 0 4px 12px -4px rgb(0 0 0 / 0.5);
161
+
162
+ --text-100: #fafafa;
163
+ --text-200: #ededf0;
164
+ --text-300: #d4d4d8;
165
+ --text-400: #a1a1aa;
166
+ --text-500: #a1a1aa;
167
+ --text-600: #71717a;
168
+ --text-700: #52525b;
169
+
170
+ --text-micro: 11px;
171
+ --text-micro--line-height: 16px;
172
+ --text-meta: 12px;
173
+ --text-meta--line-height: 18px;
174
+ --text-body: 13px;
175
+ --text-body--line-height: 20px;
176
+ --text-label: 13px;
177
+ --text-label--line-height: 20px;
178
+ --text-title: 14px;
179
+ --text-title--line-height: 22px;
180
+ --font-emphasis: 600;
181
+ --font-medium: 500;
182
+ --text-heading: 16px;
183
+ --text-heading--line-height: 24px;
184
+
185
+ --border-800: #1d1d21;
186
+ --border-700: #27272b;
187
+ --border-600: #323237;
188
+ --border-500: #42424a;
189
+
190
+ --border-control: #646470;
191
+ --border-rule: #2a2a30;
192
+
193
+ --accent-primary: #f59e0b;
194
+ --accent-primary-hover: #d97706;
195
+ --accent-primary-light: rgba(245, 158, 11, 0.14);
196
+ --accent-primary-border: rgba(245, 158, 11, 0.4);
197
+
198
+ --focus-ring: #f59e0b;
199
+ --accent-success: #22c55e;
200
+ --accent-warning: #eab308;
201
+ --accent-danger: #ef4444;
202
+
203
+
204
+ --diff-add-bg: rgba(34, 197, 94, 0.12);
205
+ --diff-add-fg: #4ade80;
206
+ --diff-del-bg: rgba(239, 68, 68, 0.12);
207
+ --diff-del-fg: #f87171;
208
+ }
209
+
210
+
211
+ :root[data-theme="light"] {
212
+ --app-bg: #f7f5ef;
213
+ --primary: #292524;
214
+ --primary-foreground: #fafaf9;
215
+
216
+
217
+ --surface-950: #fbf9f4;
218
+ --surface-900: #f4f1ea;
219
+ --surface-800: #ece8df;
220
+ --surface-700: #e2ddd1;
221
+ --surface-600: #d2cbb9;
222
+ --surface-500: #bcb39e;
223
+
224
+ --surface-overlay: #f9f7f1;
225
+ --surface-sheet: var(--app-bg);
226
+
227
+ --elev-shadow-md:
228
+ 0 8px 24px -8px rgb(28 25 23 / 0.18), 0 2px 6px -2px rgb(28 25 23 / 0.12);
229
+ --elev-shadow-lg:
230
+ 0 18px 40px -12px rgb(28 25 23 / 0.24), 0 4px 12px -4px rgb(28 25 23 / 0.16);
231
+
232
+ --text-100: #1c1917;
233
+ --text-200: #292524;
234
+ --text-300: #44403c;
235
+ --text-400: #6b655f;
236
+ --text-500: #6b655f;
237
+ --text-600: #98928b;
238
+ --text-700: #c2b8a6;
239
+
240
+ --border-800: #e4dfd2;
241
+ --border-700: #d5cdbb;
242
+ --border-600: #c1b69f;
243
+ --border-500: #a89a80;
244
+
245
+ --border-control: #95856d;
246
+ --border-rule: #e8e3d6;
247
+
248
+ --accent-primary: #d97706;
249
+ --accent-primary-hover: #b45309;
250
+ --accent-primary-light: rgba(217, 119, 6, 0.12);
251
+ --accent-primary-border: rgba(217, 119, 6, 0.55);
252
+
253
+ --focus-ring: #92400e;
254
+ --shadow-strong: rgb(28 25 23 / 0.18);
255
+ --accent-success: #16a34a;
256
+ --accent-warning: #ca8a04;
257
+ --accent-danger: #dc2626;
258
+
259
+ --diff-add-bg: rgba(22, 163, 74, 0.1);
260
+ --diff-add-fg: #15803d;
261
+ --diff-del-bg: rgba(220, 38, 38, 0.1);
262
+ --diff-del-fg: #b91c1c;
263
+ }
264
+
265
+
266
+ :root[data-theme="glass"] {
267
+ --app-bg: #14100c;
268
+ --glass-gradient: radial-gradient(
269
+ circle at top,
270
+ rgba(245, 158, 11, 0.1),
271
+ rgba(18, 13, 9, 0.98)
272
+ );
273
+
274
+ --primary: #f5f0e8;
275
+ --primary-foreground: #1c1917;
276
+
277
+ --surface-950: rgba(24, 19, 14, 0.92);
278
+ --surface-900: rgba(33, 27, 20, 0.94);
279
+ --surface-800: rgba(48, 39, 29, 0.92);
280
+ --surface-700: rgba(66, 54, 41, 0.92);
281
+ --surface-600: rgba(88, 73, 57, 0.92);
282
+ --surface-500: rgba(118, 100, 79, 0.92);
283
+ --surface-overlay: var(--surface-800);
284
+ --surface-sheet: var(--app-bg);
285
+
286
+ --elev-shadow-md:
287
+ 0 8px 24px -8px rgb(0 0 0 / 0.55), 0 2px 6px -2px rgb(0 0 0 / 0.4);
288
+ --elev-shadow-lg:
289
+ 0 18px 40px -12px rgb(0 0 0 / 0.65), 0 4px 12px -4px rgb(0 0 0 / 0.45);
290
+
291
+ --text-100: #faf5ee;
292
+ --text-200: #efe7da;
293
+ --text-300: #ded2bf;
294
+ --text-400: #c3b39c;
295
+ --text-500: #c3b39c;
296
+ --text-600: #a08e75;
297
+ --text-700: #7f6f5b;
298
+
299
+ --border-800: rgba(224, 185, 130, 0.14);
300
+ --border-700: rgba(224, 185, 130, 0.22);
301
+ --border-600: rgba(224, 185, 130, 0.32);
302
+ --border-500: rgba(224, 185, 130, 0.44);
303
+ --border-control: rgba(224, 185, 130, 0.66);
304
+ --border-rule: rgba(224, 185, 130, 0.12);
305
+
306
+ --accent-primary: #f5b04c;
307
+ --accent-primary-hover: #e09a33;
308
+ --accent-primary-light: rgba(245, 176, 76, 0.14);
309
+ --accent-primary-border: rgba(245, 176, 76, 0.4);
310
+ --focus-ring: #f5b04c;
311
+ --shadow-strong: rgb(0 0 0 / 0.5);
312
+ --accent-success: #34d399;
313
+ --accent-warning: #fbbf24;
314
+ --accent-danger: #f87171;
315
+
316
+ --diff-add-bg: rgba(52, 211, 153, 0.12);
317
+ --diff-add-fg: #6ee7b7;
318
+ --diff-del-bg: rgba(248, 113, 113, 0.12);
319
+ --diff-del-fg: #fca5a5;
320
+ }
321
+
322
+ @layer base {
323
+ * {
324
+ @apply border-border;
325
+ }
326
+
327
+ :focus-visible {
328
+ outline: 2px solid var(--focus-ring);
329
+ outline-offset: 1px;
330
+ }
331
+ body {
332
+ @apply bg-background text-foreground;
333
+ margin: 0;
334
+ font-family: var(--font-ui);
335
+ }
336
+ b,
337
+ strong {
338
+ font-weight: var(--font-emphasis);
339
+ }
340
+ html {
341
+ @apply bg-background;
342
+ -webkit-font-smoothing: antialiased;
343
+ -moz-osx-font-smoothing: grayscale;
344
+ text-rendering: optimizeLegibility;
345
+ font-synthesis: none;
346
+ }
347
+ html[data-theme="glass"] {
348
+ background: var(--glass-gradient), var(--app-bg);
349
+ }
350
+
351
+
352
+ *::-webkit-scrollbar {
353
+ width: 8px;
354
+ height: 8px;
355
+ }
356
+ *::-webkit-scrollbar-track,
357
+ *::-webkit-scrollbar-corner {
358
+ background: transparent;
359
+ }
360
+ *::-webkit-scrollbar-thumb {
361
+ background-color: var(--surface-700);
362
+ border-radius: 999px;
363
+ }
364
+ *::-webkit-scrollbar-thumb:hover {
365
+ background-color: var(--surface-600);
366
+ }
367
+ @supports not selector(::-webkit-scrollbar) {
368
+ * {
369
+ scrollbar-width: thin;
370
+ scrollbar-color: var(--surface-700) transparent;
371
+ }
372
+ }
373
+ }
374
+
375
+
376
+ [data-slot="dialog-content"] {
377
+ background-color: var(--surface-overlay);
378
+ }
379
+
380
+
381
+ @utility press {
382
+ transition: transform var(--transition-press);
383
+ &:active {
384
+ transform: scale(var(--press-scale));
385
+ }
386
+ }
387
+ @utility press-sm {
388
+ transition: transform var(--transition-press);
389
+ &:active {
390
+ transform: scale(var(--press-scale-sm));
391
+ }
392
+ }
393
+ @media (prefers-reduced-motion: reduce) {
394
+ .press:active,
395
+ .press-sm:active {
396
+ transform: none;
397
+ }
398
+ }
399
+
400
+
401
+ .thin_scroll {
402
+ scrollbar-width: thin;
403
+ scrollbar-color: var(--border) transparent;
404
+ }
405
+ .thin_scroll::-webkit-scrollbar {
406
+ width: 6px;
407
+ height: 6px;
408
+ }
409
+ .thin_scroll::-webkit-scrollbar-thumb {
410
+ background-color: var(--border);
411
+ border-radius: 9999px;
412
+ }
413
+
414
+
415
+ @keyframes shimmer-slide {
416
+ 0% {
417
+ background-position: 200% 0;
418
+ }
419
+ 100% {
420
+ background-position: -200% 0;
421
+ }
422
+ }
423
+ .shimmer {
424
+ background: linear-gradient(
425
+ 90deg,
426
+ transparent 0%,
427
+ color-mix(in srgb, var(--text-100) 12%, transparent) 50%,
428
+ transparent 100%
429
+ );
430
+ background-size: 200% 100%;
431
+ animation: shimmer-slide 2.4s ease-in-out infinite;
432
+ }
433
+
434
+
435
+ .t-strong {
436
+ color: color-mix(in srgb, var(--text-100) 95%, transparent);
437
+ }
438
+ .t-default {
439
+ color: color-mix(in srgb, var(--text-100) 80%, transparent);
440
+ }
441
+ .t-muted {
442
+ color: color-mix(in srgb, var(--text-100) 55%, transparent);
443
+ }
444
+ .t-subtle {
445
+ color: color-mix(in srgb, var(--text-100) 40%, transparent);
446
+ }
447
+
448
+
449
+ @media (prefers-reduced-motion: reduce) {
450
+ .shimmer,
451
+ .gradient-text-animated {
452
+ animation: none !important;
453
+ }
454
+ }
455
+
456
+
457
+ [data-theme="glass"] {
458
+ --radius-md: 10px;
459
+ --radius-lg: 14px;
460
+ }
461
+ [data-theme="light"] {
462
+ --radius-md: 6px;
463
+ --radius-lg: 10px;
464
+ }