chordia-ui 3.2.3 → 3.2.5

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 (52) hide show
  1. package/dist/IntegrationCard.cjs.js +2 -0
  2. package/dist/IntegrationCard.cjs.js.map +1 -0
  3. package/dist/IntegrationCard.es.js +188 -0
  4. package/dist/IntegrationCard.es.js.map +1 -0
  5. package/dist/SideDrawer.cjs.js +2 -0
  6. package/dist/SideDrawer.cjs.js.map +1 -0
  7. package/dist/SideDrawer.es.js +486 -0
  8. package/dist/SideDrawer.es.js.map +1 -0
  9. package/dist/UploadInteraction.cjs.js +2 -0
  10. package/dist/UploadInteraction.cjs.js.map +1 -0
  11. package/dist/UploadInteraction.es.js +379 -0
  12. package/dist/UploadInteraction.es.js.map +1 -0
  13. package/dist/components/common.cjs.js +1 -1
  14. package/dist/components/common.es.js +13 -11
  15. package/dist/components/layout.cjs.js +2 -2
  16. package/dist/components/layout.cjs.js.map +1 -1
  17. package/dist/components/layout.es.js +202 -411
  18. package/dist/components/layout.es.js.map +1 -1
  19. package/dist/components/navigation.cjs.js +1 -1
  20. package/dist/components/navigation.cjs.js.map +1 -1
  21. package/dist/components/navigation.es.js +212 -203
  22. package/dist/components/navigation.es.js.map +1 -1
  23. package/dist/components/onboarding.cjs.js +2 -0
  24. package/dist/components/onboarding.cjs.js.map +1 -0
  25. package/dist/components/onboarding.es.js +712 -0
  26. package/dist/components/onboarding.es.js.map +1 -0
  27. package/dist/index.cjs.js +1 -1
  28. package/dist/index.cjs2.js +1 -1
  29. package/dist/index.cjs2.js.map +1 -1
  30. package/dist/index.es.js +74 -64
  31. package/dist/index.es.js.map +1 -1
  32. package/dist/index.es2.js +2 -2
  33. package/dist/index.es2.js.map +1 -1
  34. package/dist/pages/interactionDetails.cjs.js +1 -1
  35. package/dist/pages/interactionDetails.cjs.js.map +1 -1
  36. package/dist/pages/interactionDetails.es.js +16 -15
  37. package/dist/pages/interactionDetails.es.js.map +1 -1
  38. package/package.json +5 -1
  39. package/src/components/common/SideDrawer.jsx +321 -0
  40. package/src/components/common/index.js +1 -0
  41. package/src/components/index.js +4 -1
  42. package/src/components/layout/IntegrationCard.jsx +151 -141
  43. package/src/components/login/LoginPage.jsx +2 -2
  44. package/src/components/navigation/Sidebar.jsx +59 -39
  45. package/src/components/onboarding/AddTeammates.jsx +278 -0
  46. package/src/components/onboarding/GettingStarted.jsx +4 -0
  47. package/src/components/onboarding/UploadInteraction.jsx +3 -3
  48. package/src/components/onboarding/index.js +5 -0
  49. package/dist/AutoSearch.cjs.js +0 -2
  50. package/dist/AutoSearch.cjs.js.map +0 -1
  51. package/dist/AutoSearch.es.js +0 -190
  52. package/dist/AutoSearch.es.js.map +0 -1
@@ -1,42 +1,54 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import { CheckCircle2, Circle, Settings } from "lucide-react";
4
+ import { CheckCircle2, Settings2, CloudOff, CloudDownload } from "lucide-react";
5
5
 
6
6
  /**
7
7
  * IntegrationCard Component
8
8
  * Displays an integration provider card with status, logo, and configuration options
9
+ *
10
+ * Props:
11
+ * - providerName string Provider display name
12
+ * - description string Short description / subtitle
13
+ * - status string "available" | "connected" | "coming-soon"
14
+ * - logoUrl string Optional logo image URL
15
+ * - icon ReactNode Optional custom icon/logo element
16
+ * - onConnect function Connect/Disconnect callback
17
+ * - onConfigure function Configure (settings) callback — shown for connected
9
18
  */
10
19
  export default function IntegrationCard({
11
20
  providerName,
12
21
  description,
13
22
  status = "available",
14
- railColor,
15
23
  logoUrl,
16
24
  icon,
25
+ onConnect,
17
26
  onConfigure,
18
27
  }) {
28
+ const isConnected = status === "connected";
29
+ const isComingSoon = status === "coming-soon";
30
+
19
31
  const statusConfig = {
20
32
  connected: {
21
33
  label: "Connected",
22
- color: "#6B7C93",
23
- bgColor: "rgba(107, 124, 147, 0.08)",
24
- borderColor: "rgba(107, 124, 147, 0.20)",
25
- icon: <CheckCircle2 size={14} strokeWidth={2.5} />,
34
+ color: "var(--Grey-Strong, #808183)",
35
+ icon: <CheckCircle2 size={16} strokeWidth={2} />,
36
+ actionLabel: "Disconnect",
37
+ actionFilled: false,
26
38
  },
27
39
  available: {
28
40
  label: "Available",
29
- color: "#1E2125",
30
- bgColor: "rgba(30, 33, 37, 0.04)",
31
- borderColor: "rgba(30, 33, 37, 0.12)",
32
- icon: <Circle size={14} strokeWidth={2} />,
41
+ color: "var(--Grey-Strong, #808183)",
42
+ icon: <CloudDownload size={16} strokeWidth={2} />,
43
+ actionLabel: "Connect",
44
+ actionFilled: true,
33
45
  },
34
46
  "coming-soon": {
35
47
  label: "Coming Soon",
36
- color: "rgba(30, 33, 37, 0.42)",
37
- bgColor: "transparent",
38
- borderColor: "rgba(30, 33, 37, 0.12)",
39
- icon: <Circle size={14} strokeWidth={2} style={{ opacity: 0.4 }} />,
48
+ color: "var(--Grey-Muted, #B2AEA8)",
49
+ icon: <CloudOff size={16} strokeWidth={2} />,
50
+ actionLabel: "Connect",
51
+ actionFilled: false,
40
52
  },
41
53
  };
42
54
 
@@ -45,165 +57,163 @@ export default function IntegrationCard({
45
57
  return (
46
58
  <div
47
59
  style={{
48
- background: "#FFFFFF",
49
- border: `1px solid ${railColor}20`,
50
- borderRadius: "8px",
51
- position: "relative",
52
60
  display: "flex",
61
+ width: "317px",
62
+ height: "160px",
63
+ padding: "16px",
53
64
  flexDirection: "column",
54
- transition: "all 0.15s ease",
55
- cursor: status === "coming-soon" ? "default" : "pointer",
56
- opacity: status === "coming-soon" ? 0.6 : 1,
57
- overflow: "hidden",
58
- height: "100%",
65
+ alignItems: "flex-start",
66
+ gap: "10px",
67
+ borderRadius: "4px",
68
+ border: "1px solid #D9D9D9",
69
+ background: "var(--Base-White, #FFF)",
59
70
  }}
60
- className="hover:shadow-sm"
61
71
  >
62
- {/* Rail */}
63
- <div
64
- style={{
65
- position: "absolute",
66
- left: 0,
67
- top: 0,
68
- bottom: 0,
69
- width: "4px",
70
- background: railColor,
71
- opacity: status === "coming-soon" ? 0.4 : 1,
72
- }}
73
- />
72
+ {/* Top: Name + Description */}
73
+ <div style={{ flex: 1, width: "100%" }}>
74
+ {/* Provider Name / Logo */}
75
+ <div style={{ marginBottom: "4px" }}>
76
+ {logoUrl ? (
77
+ <img
78
+ src={logoUrl}
79
+ alt={providerName}
80
+ style={{ height: "24px", objectFit: "contain" }}
81
+ />
82
+ ) : icon ? (
83
+ <div style={{ display: "flex", alignItems: "center" }}>{icon}</div>
84
+ ) : (
85
+ <h3
86
+ style={{
87
+ fontSize: "16px",
88
+ fontWeight: 700,
89
+ color: "var(--Base-Strong, #1E2125)",
90
+ margin: 0,
91
+ lineHeight: 1.3,
92
+ }}
93
+ >
94
+ {providerName}
95
+ </h3>
96
+ )}
97
+ </div>
98
+ {/* Description */}
99
+ <p
100
+ style={{
101
+ fontSize: "13px",
102
+ lineHeight: 1.4,
103
+ color: "var(--Grey-Strong, #808183)",
104
+ margin: 0,
105
+ }}
106
+ >
107
+ {description}
108
+ </p>
109
+ </div>
74
110
 
75
- {/* Content wrapper with padding */}
111
+ {/* Bottom: Status + Actions */}
76
112
  <div
77
113
  style={{
78
- padding: "20px",
79
- paddingLeft: "24px",
80
114
  display: "flex",
81
- flexDirection: "column",
82
- gap: "16px",
83
- height: "100%",
115
+ alignItems: "center",
116
+ justifyContent: "space-between",
117
+ width: "100%",
118
+ gap: "8px",
84
119
  }}
85
120
  >
86
- {/* Header: Logo + Status */}
121
+ {/* Status label */}
87
122
  <div
88
123
  style={{
89
124
  display: "flex",
90
- alignItems: "flex-start",
91
- justifyContent: "space-between",
92
- gap: "12px",
125
+ alignItems: "center",
126
+ gap: "6px",
127
+ fontSize: "13px",
128
+ fontWeight: 400,
129
+ color: config.color,
93
130
  }}
94
131
  >
95
- {/* Logo/Icon */}
96
- <div
97
- style={{
98
- width: "48px",
99
- height: "48px",
100
- borderRadius: "6px",
101
- background: `${railColor}08`,
102
- border: `1px solid ${railColor}18`,
103
- display: "flex",
104
- alignItems: "center",
105
- justifyContent: "center",
106
- flexShrink: 0,
107
- }}
108
- >
109
- {logoUrl ? (
110
- <img
111
- src={logoUrl}
112
- alt={providerName}
113
- style={{ width: "32px", height: "32px", objectFit: "contain" }}
114
- />
115
- ) : (
116
- <div
117
- style={{
118
- color: railColor,
119
- fontSize: "20px",
120
- fontWeight: 650,
121
- opacity: 0.8,
122
- }}
123
- >
124
- {icon || (providerName ? providerName.charAt(0) : "")}
125
- </div>
126
- )}
127
- </div>
128
-
129
- {/* Status Badge */}
130
- <div
131
- style={{
132
- display: "inline-flex",
133
- alignItems: "center",
134
- gap: "6px",
135
- padding: "4px 10px",
136
- borderRadius: "4px",
137
- background: config.bgColor,
138
- border: `1px solid ${config.borderColor}`,
139
- fontSize: "11px",
140
- fontWeight: 600,
141
- letterSpacing: "0.01em",
142
- color: config.color,
143
- flexShrink: 0,
144
- }}
145
- >
146
- {config.icon}
147
- {config.label}
148
- </div>
132
+ {config.icon}
133
+ {config.label}
149
134
  </div>
150
135
 
151
- {/* Content */}
152
- <div style={{ flex: 1, minHeight: 0 }}>
153
- <h3
154
- style={{
155
- fontSize: "15px",
156
- fontWeight: 650,
157
- color: "rgba(30, 33, 37, 0.92)",
158
- marginBottom: "6px",
159
- letterSpacing: "-0.01em",
160
- }}
161
- >
162
- {providerName}
163
- </h3>
164
- <p
165
- style={{
166
- fontSize: "13px",
167
- lineHeight: 1.5,
168
- color: "rgba(30, 33, 37, 0.65)",
169
- }}
170
- >
171
- {description}
172
- </p>
173
- </div>
136
+ {/* Action area */}
137
+ <div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
138
+ {/* Settings icon for connected */}
139
+ {isConnected && onConfigure && (
140
+ <button
141
+ onClick={(e) => {
142
+ e.stopPropagation();
143
+ onConfigure();
144
+ }}
145
+ style={{
146
+ display: "flex",
147
+ alignItems: "center",
148
+ justifyContent: "center",
149
+ width: "32px",
150
+ height: "32px",
151
+ border: "none",
152
+ background: "transparent",
153
+ color: "var(--Grey-Strong, #808183)",
154
+ cursor: "pointer",
155
+ borderRadius: "4px",
156
+ transition: "background 0.15s ease",
157
+ }}
158
+ onMouseEnter={(e) => {
159
+ e.currentTarget.style.background = "rgba(0,0,0,0.04)";
160
+ }}
161
+ onMouseLeave={(e) => {
162
+ e.currentTarget.style.background = "transparent";
163
+ }}
164
+ >
165
+ <Settings2 size={20} strokeWidth={2} />
166
+ </button>
167
+ )}
174
168
 
175
- {/* Action Button - aligned to bottom */}
176
- {status !== "coming-soon" && (
169
+ {/* Connect / Disconnect button */}
177
170
  <button
178
171
  onClick={(e) => {
179
172
  e.stopPropagation();
180
- onConfigure?.();
173
+ onConnect?.();
181
174
  }}
175
+ disabled={isComingSoon}
182
176
  style={{
183
177
  display: "flex",
184
- alignItems: "center",
178
+ height: "28px",
179
+ padding: "10px",
185
180
  justifyContent: "center",
186
- gap: "8px",
187
- padding: "8px 14px",
188
- border: "1px solid rgba(30, 33, 37, 0.15)",
189
- borderRadius: "5px",
190
- background: status === "connected" ? "transparent" : "rgba(30, 33, 37, 0.03)",
181
+ alignItems: "center",
182
+ gap: "10px",
183
+ borderRadius: "10px",
184
+ border: config.actionFilled
185
+ ? "1px solid transparent"
186
+ : "1px solid #D9D9D9",
187
+ background: isComingSoon
188
+ ? "var(--Grey-Muted, #B2AEA8)"
189
+ : config.actionFilled
190
+ ? "var(--Base-Strong, #1E2125)"
191
+ : "var(--Base-White, #FFF)",
192
+ color: config.actionFilled || isComingSoon
193
+ ? "#FFF"
194
+ : "var(--Base-Strong, #1E2125)",
191
195
  fontSize: "13px",
192
196
  fontWeight: 600,
193
- color: "rgba(30, 33, 37, 0.92)",
194
- cursor: "pointer",
197
+ cursor: isComingSoon ? "default" : "pointer",
198
+ opacity: isComingSoon ? 0.6 : 1,
195
199
  transition: "all 0.15s ease",
196
- width: "100%",
197
- marginTop: "auto",
200
+ lineHeight: 1.4,
201
+ }}
202
+ onMouseEnter={(e) => {
203
+ if (!isComingSoon && !config.actionFilled) {
204
+ e.currentTarget.style.background = "rgba(0,0,0,0.04)";
205
+ }
206
+ }}
207
+ onMouseLeave={(e) => {
208
+ if (!isComingSoon && !config.actionFilled) {
209
+ e.currentTarget.style.background = "var(--Base-White, #FFF)";
210
+ }
198
211
  }}
199
- className="hover:bg-[rgba(30,33,37,0.06)] hover:border-[rgba(30,33,37,0.20)]"
200
212
  >
201
- <Settings size={14} strokeWidth={2.5} />
202
- {status === "connected" ? "Configure" : "Connect"}
213
+ {config.actionLabel}
203
214
  </button>
204
- )}
215
+ </div>
205
216
  </div>
206
217
  </div>
207
218
  );
208
219
  }
209
-
@@ -101,7 +101,7 @@ function NavRow({ text, linkText, onClick }) {
101
101
 
102
102
  function TermsFooter({ onTerms, onPrivacyPolicy, paddingTop }) {
103
103
  return (
104
- <div style={{ display: 'flex', justifyContent: 'center', width: '100%', ...(paddingTop ? { marginTop: 'auto', paddingTop } : {}) }}>
104
+ <div style={{ display: 'flex', justifyContent: 'center', width: '100%', position: 'absolute', bottom: 40, left: 0, right: 0 }}>
105
105
  <span style={{ fontSize: 15, fontWeight: 400, lineHeight: '22px', color: 'var(--color-text)', fontFamily: FF, textAlign: 'center', whiteSpace: 'nowrap' }}>
106
106
  By continuing, you agree to our{' '}
107
107
  <a href="https://pages.chordia.ai/terms-of-use/" target="_blank" rel="noopener noreferrer"
@@ -462,7 +462,7 @@ export default function LoginPage({
462
462
  </div>
463
463
 
464
464
  {/* Dots */}
465
- <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 8, height: 4, marginTop: 16, alignSelf: 'flex-start', marginLeft: 22 }}>
465
+ <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 8, height: 4, position: 'absolute', bottom: 40, left: 48 }}>
466
466
  {Array.from({ length: SLIDE_COUNT }).map((_, i) => (
467
467
  <button key={i} onClick={() => setActiveSlide(i)}
468
468
  style={{
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React, { useState } from "react";
4
4
  import {
5
- Home, FolderClosed, Users, Settings, ChevronDown, ChevronRight,
5
+ Home, FolderClosed, Users, Settings, ChevronDown,
6
6
  LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,
7
7
  FileText, Headphones, Shield, Sliders, Workflow, SquareDot,
8
8
  PanelLeftClose, PanelLeft,
@@ -73,7 +73,7 @@ export default function Sidebar({
73
73
  onToggleCollapse,
74
74
  header,
75
75
  footer,
76
- width = 240,
76
+ width = 244,
77
77
  collapsedWidth = 56,
78
78
  }) {
79
79
  const [internalCollapsed, setInternalCollapsed] = useState(false);
@@ -106,8 +106,10 @@ export default function Sidebar({
106
106
  height: "100%",
107
107
  display: "flex",
108
108
  flexDirection: "column",
109
- background: "var(--paper-elevated)",
110
- borderRight: "1px solid var(--border)",
109
+ alignItems: "flex-start",
110
+ padding: collapsed ? "0" : "0 0 24px 24px",
111
+ gap: 24,
112
+ background: "var(--Background-Inverse, #0B0B0B)",
111
113
  fontFamily: "var(--font-sans)",
112
114
  transition: "width 0.2s ease, min-width 0.2s ease",
113
115
  overflow: "hidden",
@@ -116,7 +118,7 @@ export default function Sidebar({
116
118
  >
117
119
  {/* Header slot */}
118
120
  {header && !collapsed && (
119
- <div style={{ padding: "16px 16px 8px", flexShrink: 0 }}>
121
+ <div style={{ padding: "16px 16px 8px", flexShrink: 0, width: "100%" }}>
120
122
  {header}
121
123
  </div>
122
124
  )}
@@ -126,8 +128,9 @@ export default function Sidebar({
126
128
  style={{
127
129
  display: "flex",
128
130
  justifyContent: collapsed ? "center" : "flex-end",
129
- padding: collapsed ? "12px 0" : "8px 12px",
131
+ padding: collapsed ? "12px 0" : "8px 0 0",
130
132
  flexShrink: 0,
133
+ width: "100%",
131
134
  }}
132
135
  >
133
136
  <button
@@ -142,17 +145,17 @@ export default function Sidebar({
142
145
  borderRadius: "var(--radius-sm)",
143
146
  border: "none",
144
147
  background: "transparent",
145
- color: "var(--text-faint)",
148
+ color: "rgba(255, 255, 255, 0.5)",
146
149
  cursor: "pointer",
147
150
  transition: "background 0.15s ease, color 0.15s ease",
148
151
  }}
149
152
  onMouseEnter={(e) => {
150
- e.currentTarget.style.background = "var(--hover-warm)";
151
- e.currentTarget.style.color = "var(--text-muted)";
153
+ e.currentTarget.style.background = "rgba(255, 255, 255, 0.08)";
154
+ e.currentTarget.style.color = "rgba(255, 255, 255, 0.8)";
152
155
  }}
153
156
  onMouseLeave={(e) => {
154
157
  e.currentTarget.style.background = "transparent";
155
- e.currentTarget.style.color = "var(--text-faint)";
158
+ e.currentTarget.style.color = "rgba(255, 255, 255, 0.5)";
156
159
  }}
157
160
  >
158
161
  {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}
@@ -165,7 +168,8 @@ export default function Sidebar({
165
168
  flex: 1,
166
169
  overflowY: "auto",
167
170
  overflowX: "hidden",
168
- padding: collapsed ? "0 8px" : "0 10px",
171
+ padding: collapsed ? "0 8px" : "0",
172
+ width: "100%",
169
173
  }}
170
174
  >
171
175
  {menuItems.map((item, idx) => (
@@ -178,7 +182,7 @@ export default function Sidebar({
178
182
  fontWeight: 650,
179
183
  letterSpacing: "0.08em",
180
184
  textTransform: "uppercase",
181
- color: "var(--text-faint)",
185
+ color: "rgba(255, 255, 255, 0.35)",
182
186
  padding: "16px 8px 6px",
183
187
  lineHeight: 1,
184
188
  }}
@@ -213,8 +217,9 @@ export default function Sidebar({
213
217
  <div
214
218
  style={{
215
219
  padding: "12px 16px",
216
- borderTop: "1px solid var(--border-subtle)",
220
+ borderTop: "1px solid rgba(255, 255, 255, 0.08)",
217
221
  flexShrink: 0,
222
+ width: "100%",
218
223
  }}
219
224
  >
220
225
  {footer}
@@ -235,30 +240,35 @@ function SidebarItem({ item, active, onNavigate, collapsed }) {
235
240
  style={{
236
241
  display: "flex",
237
242
  alignItems: "center",
238
- gap: collapsed ? 0 : 10,
243
+ gap: collapsed ? 0 : 12,
239
244
  justifyContent: collapsed ? "center" : "flex-start",
240
245
  width: "100%",
241
- padding: collapsed ? "10px 0" : "8px 10px",
242
- borderRadius: "var(--radius-sm)",
243
- border: "none",
244
- background: active ? "var(--hover-warm)" : "transparent",
245
- color: active ? "var(--text-ink)" : "var(--text-base)",
246
+ padding: collapsed ? "10px 0" : "12px 24px 12px 12px",
247
+ borderRadius: active ? "4px 0 0 4px" : "4px",
248
+ borderRight: active ? "2px solid #00A66E" : "2px solid transparent",
249
+ borderTop: "none",
250
+ borderBottom: "none",
251
+ borderLeft: "none",
252
+ background: active ? "var(--Background-MonoPressed, #323232)" : "transparent",
253
+ color: active ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
246
254
  fontWeight: active ? 550 : 400,
247
255
  fontSize: "var(--text-sm)",
248
256
  fontFamily: "var(--font-sans)",
249
257
  cursor: "pointer",
250
258
  textAlign: "left",
251
- transition: "background 0.15s ease, color 0.1s ease",
259
+ transition: "background 0.15s ease, color 0.1s ease, border-color 0.15s ease",
252
260
  marginBottom: 2,
253
261
  }}
254
262
  onMouseEnter={(e) => {
255
263
  if (!active) {
256
- e.currentTarget.style.background = "var(--hover-warm-subtle)";
264
+ e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
265
+ e.currentTarget.style.color = "#00A66E";
257
266
  }
258
267
  }}
259
268
  onMouseLeave={(e) => {
260
269
  if (!active) {
261
270
  e.currentTarget.style.background = "transparent";
271
+ e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
262
272
  }
263
273
  }}
264
274
  >
@@ -266,10 +276,10 @@ function SidebarItem({ item, active, onNavigate, collapsed }) {
266
276
  <span style={{ flexShrink: 0, display: "flex" }}>{item.icon}</span>
267
277
  ) : (
268
278
  <Icon
269
- size={16}
279
+ size={18}
270
280
  style={{
271
281
  flexShrink: 0,
272
- color: active ? "var(--text-strong)" : "var(--text-muted)",
282
+ color: "inherit",
273
283
  }}
274
284
  />
275
285
  )}
@@ -304,24 +314,30 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
304
314
  justifyContent: "center",
305
315
  width: "100%",
306
316
  padding: "10px 0",
307
- borderRadius: "var(--radius-sm)",
317
+ borderRadius: "4px",
308
318
  border: "none",
309
- background: hasActiveChild ? "var(--hover-warm)" : "transparent",
310
- color: hasActiveChild ? "var(--text-ink)" : "var(--text-base)",
319
+ background: hasActiveChild ? "var(--Background-MonoPressed, #323232)" : "transparent",
320
+ color: hasActiveChild ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
311
321
  cursor: "pointer",
312
322
  marginBottom: 2,
313
323
  transition: "background 0.15s ease",
314
324
  }}
315
325
  onMouseEnter={(e) => {
316
- if (!hasActiveChild) e.currentTarget.style.background = "var(--hover-warm-subtle)";
326
+ if (!hasActiveChild) {
327
+ e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
328
+ e.currentTarget.style.color = "#00A66E";
329
+ }
317
330
  }}
318
331
  onMouseLeave={(e) => {
319
- if (!hasActiveChild) e.currentTarget.style.background = "transparent";
332
+ if (!hasActiveChild) {
333
+ e.currentTarget.style.background = "transparent";
334
+ e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
335
+ }
320
336
  }}
321
337
  >
322
338
  <Icon
323
- size={16}
324
- style={{ color: hasActiveChild ? "var(--text-strong)" : "var(--text-muted)" }}
339
+ size={18}
340
+ style={{ color: "inherit" }}
325
341
  />
326
342
  </button>
327
343
  );
@@ -335,32 +351,35 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
335
351
  style={{
336
352
  display: "flex",
337
353
  alignItems: "center",
338
- gap: 10,
354
+ gap: 12,
339
355
  width: "100%",
340
- padding: "8px 10px",
341
- borderRadius: "var(--radius-sm)",
356
+ padding: "12px 24px 12px 12px",
357
+ borderRadius: "4px",
342
358
  border: "none",
343
359
  background: "transparent",
344
- color: hasActiveChild ? "var(--text-ink)" : "var(--text-base)",
360
+ color: hasActiveChild ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
345
361
  fontWeight: hasActiveChild ? 550 : 400,
346
362
  fontSize: "var(--text-sm)",
347
363
  fontFamily: "var(--font-sans)",
348
364
  cursor: "pointer",
349
365
  textAlign: "left",
350
- transition: "background 0.15s ease",
366
+ transition: "background 0.15s ease, color 0.15s ease",
351
367
  }}
352
368
  onMouseEnter={(e) => {
353
- e.currentTarget.style.background = "var(--hover-warm-subtle)";
369
+ e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
370
+ e.currentTarget.style.color = "#00A66E";
354
371
  }}
355
372
  onMouseLeave={(e) => {
356
373
  e.currentTarget.style.background = "transparent";
374
+ if (!hasActiveChild) e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
375
+ else e.currentTarget.style.color = "#00A66E";
357
376
  }}
358
377
  >
359
378
  <Icon
360
- size={16}
379
+ size={18}
361
380
  style={{
362
381
  flexShrink: 0,
363
- color: hasActiveChild ? "var(--text-strong)" : "var(--text-muted)",
382
+ color: "inherit",
364
383
  }}
365
384
  />
366
385
  <span
@@ -377,7 +396,8 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
377
396
  size={14}
378
397
  style={{
379
398
  flexShrink: 0,
380
- color: "var(--text-faint)",
399
+ color: "inherit",
400
+ opacity: 0.7,
381
401
  transform: expanded ? "rotate(0deg)" : "rotate(-90deg)",
382
402
  transition: "transform 0.2s ease",
383
403
  }}