@hanzo/browser-extension 1.7.6 → 1.9.33

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 (144) hide show
  1. package/LICENSE +9 -18
  2. package/dist/browser-extension/content-script.js +1642 -123
  3. package/images/icon128.png +0 -0
  4. package/images/icon16.png +0 -0
  5. package/images/icon48.png +0 -0
  6. package/manifest.json +7 -2
  7. package/package.json +28 -10
  8. package/src/answer/AnswerEngine.tsx +553 -0
  9. package/src/chat-widget.tsx +96 -0
  10. package/src/gui-primitives.tsx +116 -0
  11. package/src/icon128.png +0 -0
  12. package/src/icon16.png +0 -0
  13. package/src/icon32.png +0 -0
  14. package/src/icon48.png +0 -0
  15. package/src/manifest-firefox.json +32 -13
  16. package/src/manifest.json +35 -11
  17. package/src/newtab.css +277 -0
  18. package/src/newtab.html +13 -0
  19. package/src/package.json +1 -1
  20. package/src/popup.css +352 -110
  21. package/src/popup.html +186 -47
  22. package/src/popup.js +196 -0
  23. package/src/sidebar.css +772 -156
  24. package/src/sidebar.html +268 -85
  25. package/src/sidebar.js +885 -0
  26. package/.github/workflows/docs.yml +0 -44
  27. package/.github/workflows/release.yml +0 -55
  28. package/README.md +0 -126
  29. package/dist/browser-extension/README.md +0 -43
  30. package/dist/browser-extension/ai-worker.js +0 -30
  31. package/dist/browser-extension/background-firefox.js +0 -875
  32. package/dist/browser-extension/background.js +0 -2732
  33. package/dist/browser-extension/browser-control.js +0 -683
  34. package/dist/browser-extension/cdp-bridge-server.js +0 -444
  35. package/dist/browser-extension/chrome/ai-worker.js +0 -571
  36. package/dist/browser-extension/chrome/background.js +0 -2732
  37. package/dist/browser-extension/chrome/callback.html +0 -17
  38. package/dist/browser-extension/chrome/content-script.js +0 -1270
  39. package/dist/browser-extension/chrome/icon128.png +0 -0
  40. package/dist/browser-extension/chrome/icon16.png +0 -0
  41. package/dist/browser-extension/chrome/icon32.png +0 -0
  42. package/dist/browser-extension/chrome/icon48.png +0 -0
  43. package/dist/browser-extension/chrome/manifest.json +0 -57
  44. package/dist/browser-extension/chrome/popup.css +0 -519
  45. package/dist/browser-extension/chrome/popup.html +0 -242
  46. package/dist/browser-extension/chrome/popup.js +0 -278
  47. package/dist/browser-extension/chrome/sidebar.css +0 -1176
  48. package/dist/browser-extension/chrome/sidebar.html +0 -280
  49. package/dist/browser-extension/chrome/sidebar.js +0 -779
  50. package/dist/browser-extension/cli.js +0 -233
  51. package/dist/browser-extension/firefox/ai-worker.js +0 -571
  52. package/dist/browser-extension/firefox/background.js +0 -875
  53. package/dist/browser-extension/firefox/callback.html +0 -17
  54. package/dist/browser-extension/firefox/content-script.js +0 -1270
  55. package/dist/browser-extension/firefox/icon128.png +0 -0
  56. package/dist/browser-extension/firefox/icon16.png +0 -0
  57. package/dist/browser-extension/firefox/icon32.png +0 -0
  58. package/dist/browser-extension/firefox/icon48.png +0 -0
  59. package/dist/browser-extension/firefox/manifest.json +0 -66
  60. package/dist/browser-extension/firefox/popup.css +0 -519
  61. package/dist/browser-extension/firefox/popup.html +0 -242
  62. package/dist/browser-extension/firefox/popup.js +0 -278
  63. package/dist/browser-extension/firefox/sidebar.css +0 -1176
  64. package/dist/browser-extension/firefox/sidebar.html +0 -280
  65. package/dist/browser-extension/firefox/sidebar.js +0 -779
  66. package/dist/browser-extension/hanzo-browser-extension-firefox-1.1.0.zip +0 -0
  67. package/dist/browser-extension/icon128.png +0 -0
  68. package/dist/browser-extension/icon16.png +0 -0
  69. package/dist/browser-extension/icon32.png +0 -0
  70. package/dist/browser-extension/icon48.png +0 -0
  71. package/dist/browser-extension/manifest.json +0 -57
  72. package/dist/browser-extension/package.json +0 -41
  73. package/dist/browser-extension/popup.css +0 -468
  74. package/dist/browser-extension/popup.html +0 -191
  75. package/dist/browser-extension/popup.js +0 -278
  76. package/dist/browser-extension/safari/Info.plist +0 -21
  77. package/dist/browser-extension/safari/ai-worker.js +0 -571
  78. package/dist/browser-extension/safari/background.js +0 -2732
  79. package/dist/browser-extension/safari/callback.html +0 -17
  80. package/dist/browser-extension/safari/content-script.js +0 -1270
  81. package/dist/browser-extension/safari/icon128.png +0 -0
  82. package/dist/browser-extension/safari/icon16.png +0 -0
  83. package/dist/browser-extension/safari/icon32.png +0 -0
  84. package/dist/browser-extension/safari/icon48.png +0 -0
  85. package/dist/browser-extension/safari/popup.css +0 -519
  86. package/dist/browser-extension/safari/popup.html +0 -242
  87. package/dist/browser-extension/safari/popup.js +0 -278
  88. package/dist/browser-extension/safari/sidebar.css +0 -1176
  89. package/dist/browser-extension/safari/sidebar.html +0 -280
  90. package/dist/browser-extension/safari/sidebar.js +0 -779
  91. package/dist/browser-extension/sidebar.css +0 -718
  92. package/dist/browser-extension/sidebar.html +0 -184
  93. package/dist/browser-extension/sidebar.js +0 -779
  94. package/dist/browser-extension/webgpu-ai.js +0 -495
  95. package/dist/cdp-bridge-server.js +0 -411
  96. package/dist/hanzo-ai-chrome-1.7.2.zip +0 -0
  97. package/dist/hanzo-ai-chrome-1.7.3.zip +0 -0
  98. package/dist/hanzo-ai-firefox-1.7.2.zip +0 -0
  99. package/dist/hanzo-ai-firefox-1.7.3.zip +0 -0
  100. package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.pbxproj +0 -1047
  101. package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  102. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  103. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  104. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png +0 -0
  105. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png +0 -0
  106. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png +0 -0
  107. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png +0 -0
  108. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png +0 -0
  109. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png +0 -0
  110. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png +0 -0
  111. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png +0 -0
  112. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png +0 -0
  113. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png +0 -0
  114. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/universal-icon-1024@1x.png +0 -0
  115. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/Contents.json +0 -6
  116. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/Contents.json +0 -21
  117. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/icon128.png +0 -0
  118. package/dist/safari/Hanzo AI/Shared (App)/Resources/Base.lproj/Main.html +0 -20
  119. package/dist/safari/Hanzo AI/Shared (App)/Resources/Icon.png +0 -0
  120. package/dist/safari/Hanzo AI/Shared (App)/Resources/Script.js +0 -24
  121. package/dist/safari/Hanzo AI/Shared (App)/Resources/Style.css +0 -61
  122. package/dist/safari/Hanzo AI/Shared (App)/ViewController.swift +0 -81
  123. package/dist/safari/Hanzo AI/Shared (Extension)/SafariWebExtensionHandler.swift +0 -42
  124. package/dist/safari/Hanzo AI/iOS (App)/AppDelegate.swift +0 -24
  125. package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/LaunchScreen.storyboard +0 -36
  126. package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/Main.storyboard +0 -38
  127. package/dist/safari/Hanzo AI/iOS (App)/Info.plist +0 -27
  128. package/dist/safari/Hanzo AI/iOS (App)/SceneDelegate.swift +0 -18
  129. package/dist/safari/Hanzo AI/iOS (Extension)/Info.plist +0 -13
  130. package/dist/safari/Hanzo AI/macOS (App)/AppDelegate.swift +0 -21
  131. package/dist/safari/Hanzo AI/macOS (App)/Base.lproj/Main.storyboard +0 -124
  132. package/dist/safari/Hanzo AI/macOS (App)/Info.plist +0 -8
  133. package/dist/safari/Hanzo AI/macOS (Extension)/Info.plist +0 -13
  134. package/docs/_config.yml +0 -13
  135. package/docs/_layouts/default.html +0 -435
  136. package/docs/index.md +0 -54
  137. package/hanzo-ai-chrome-v1.7.6.zip +0 -0
  138. package/hanzo-ai-firefox-v1.7.6.zip +0 -0
  139. package/install-extension.sh +0 -75
  140. package/test/claude-integration.test.ts +0 -251
  141. package/test/server-frameworks-edge-cases.test.ts +0 -145
  142. package/test/server-frameworks.test.ts +0 -395
  143. package/test-cdp-connection.js +0 -140
  144. package/tsconfig.json +0 -19
@@ -1,718 +0,0 @@
1
- /* Hanzo AI Browser Extension Sidebar — macOS Vibrancy Theme */
2
-
3
- :root {
4
- --bg-primary: #0D0D0D;
5
- --bg-secondary: rgba(18, 18, 18, 0.85);
6
- --bg-tertiary: rgba(30, 30, 30, 0.7);
7
- --bg-hover: rgba(45, 45, 45, 0.6);
8
- --bg-glass: rgba(24, 24, 24, 0.65);
9
-
10
- --text-primary: rgba(255, 255, 255, 0.92);
11
- --text-secondary: rgba(255, 255, 255, 0.5);
12
- --text-tertiary: rgba(255, 255, 255, 0.28);
13
-
14
- --accent: rgba(255, 255, 255, 0.88);
15
- --accent-hover: rgba(255, 255, 255, 1);
16
- --accent-dim: rgba(255, 255, 255, 0.06);
17
- --accent-glow: rgba(255, 255, 255, 0.04);
18
-
19
- --success: rgba(120, 200, 130, 0.9);
20
- --warning: rgba(240, 200, 80, 0.9);
21
- --error: rgba(220, 80, 80, 0.9);
22
-
23
- --border: rgba(255, 255, 255, 0.07);
24
- --border-light: rgba(255, 255, 255, 0.04);
25
-
26
- --shimmer: linear-gradient(
27
- 105deg,
28
- transparent 40%,
29
- rgba(255, 255, 255, 0.03) 45%,
30
- rgba(255, 255, 255, 0.06) 50%,
31
- rgba(255, 255, 255, 0.03) 55%,
32
- transparent 60%
33
- );
34
- }
35
-
36
- * {
37
- margin: 0;
38
- padding: 0;
39
- box-sizing: border-box;
40
- }
41
-
42
- body {
43
- font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', sans-serif;
44
- background: var(--bg-primary);
45
- color: var(--text-primary);
46
- font-size: 13px;
47
- line-height: 1.6;
48
- overflow-x: hidden;
49
- -webkit-font-smoothing: antialiased;
50
- }
51
-
52
- .hidden { display: none !important; }
53
-
54
- .sidebar-container {
55
- width: 320px;
56
- height: 100vh;
57
- display: flex;
58
- flex-direction: column;
59
- background: var(--bg-secondary);
60
- backdrop-filter: blur(40px) saturate(1.2);
61
- -webkit-backdrop-filter: blur(40px) saturate(1.2);
62
- border-left: 1px solid var(--border);
63
- position: relative;
64
- }
65
-
66
- /* Subtle ambient glow at top */
67
- .sidebar-container::before {
68
- content: '';
69
- position: absolute;
70
- top: -80px;
71
- left: 50%;
72
- transform: translateX(-50%);
73
- width: 200px;
74
- height: 200px;
75
- background: radial-gradient(circle, rgba(255,255,255,0.03) 0%, transparent 70%);
76
- pointer-events: none;
77
- z-index: 0;
78
- }
79
-
80
- /* Header */
81
- .sidebar-header {
82
- display: flex;
83
- align-items: center;
84
- justify-content: space-between;
85
- padding: 14px 16px;
86
- border-bottom: 1px solid var(--border);
87
- background: rgba(10, 10, 10, 0.6);
88
- backdrop-filter: blur(30px);
89
- flex-shrink: 0;
90
- position: relative;
91
- z-index: 1;
92
- }
93
-
94
- .brand {
95
- display: flex;
96
- align-items: center;
97
- gap: 10px;
98
- font-weight: 500;
99
- font-size: 14px;
100
- letter-spacing: 0.02em;
101
- color: var(--text-primary);
102
- }
103
-
104
- .logo {
105
- width: 20px;
106
- height: 20px;
107
- color: var(--text-secondary);
108
- opacity: 0.8;
109
- transition: opacity 0.4s ease;
110
- }
111
-
112
- .brand:hover .logo { opacity: 1; }
113
-
114
- .header-user { display: flex; align-items: center; }
115
- .header-avatar {
116
- width: 22px;
117
- height: 22px;
118
- border-radius: 50%;
119
- background: var(--accent-dim);
120
- border: 1px solid var(--border);
121
- transition: transform 0.3s ease, box-shadow 0.3s ease;
122
- }
123
- .header-avatar:hover {
124
- transform: scale(1.1);
125
- box-shadow: 0 0 12px rgba(255,255,255,0.08);
126
- }
127
-
128
- /* Auth Gate */
129
- .auth-gate {
130
- flex: 1;
131
- display: flex;
132
- align-items: center;
133
- justify-content: center;
134
- padding: 20px;
135
- position: relative;
136
- z-index: 1;
137
- }
138
-
139
- .auth-gate-inner {
140
- text-align: center;
141
- max-width: 240px;
142
- animation: fadeIn 0.8s ease;
143
- }
144
-
145
- .auth-logo {
146
- width: 44px;
147
- height: 44px;
148
- color: var(--text-secondary);
149
- margin-bottom: 20px;
150
- opacity: 0.6;
151
- animation: breathe 4s ease-in-out infinite;
152
- }
153
-
154
- @keyframes breathe {
155
- 0%, 100% { opacity: 0.4; transform: scale(1); }
156
- 50% { opacity: 0.7; transform: scale(1.04); }
157
- }
158
-
159
- .auth-gate h2 {
160
- font-size: 17px;
161
- font-weight: 500;
162
- margin-bottom: 8px;
163
- letter-spacing: -0.01em;
164
- }
165
-
166
- .auth-subtitle {
167
- color: var(--text-tertiary);
168
- margin-bottom: 28px;
169
- font-size: 13px;
170
- }
171
-
172
- /* Tab Bar */
173
- .tab-bar {
174
- display: flex;
175
- border-bottom: 1px solid var(--border);
176
- background: rgba(10, 10, 10, 0.4);
177
- backdrop-filter: blur(20px);
178
- flex-shrink: 0;
179
- position: relative;
180
- z-index: 1;
181
- }
182
-
183
- .tab {
184
- flex: 1;
185
- padding: 10px 0;
186
- background: none;
187
- border: none;
188
- border-bottom: 1.5px solid transparent;
189
- color: var(--text-tertiary);
190
- font-size: 11px;
191
- font-weight: 500;
192
- letter-spacing: 0.03em;
193
- text-transform: uppercase;
194
- cursor: pointer;
195
- transition: all 0.3s ease;
196
- display: flex;
197
- align-items: center;
198
- justify-content: center;
199
- gap: 4px;
200
- }
201
-
202
- .tab:hover { color: var(--text-secondary); }
203
- .tab.active {
204
- color: var(--text-primary);
205
- border-bottom-color: rgba(255, 255, 255, 0.4);
206
- }
207
-
208
- /* Tab Content */
209
- .tab-content {
210
- flex: 1;
211
- display: none;
212
- flex-direction: column;
213
- overflow: hidden;
214
- position: relative;
215
- z-index: 1;
216
- }
217
-
218
- .tab-content.active {
219
- display: flex;
220
- animation: fadeIn 0.3s ease;
221
- }
222
-
223
- @keyframes fadeIn {
224
- from { opacity: 0; transform: translateY(4px); }
225
- to { opacity: 1; transform: translateY(0); }
226
- }
227
-
228
- /* Chat Messages */
229
- .chat-messages {
230
- flex: 1;
231
- overflow-y: auto;
232
- padding: 16px;
233
- display: flex;
234
- flex-direction: column;
235
- gap: 10px;
236
- }
237
-
238
- .chat-welcome {
239
- text-align: center;
240
- color: var(--text-tertiary);
241
- padding: 48px 20px;
242
- font-size: 13px;
243
- animation: fadeIn 1s ease;
244
- }
245
-
246
- .chat-msg {
247
- max-width: 88%;
248
- padding: 10px 14px;
249
- border-radius: 14px;
250
- font-size: 13px;
251
- line-height: 1.55;
252
- word-break: break-word;
253
- animation: msgIn 0.3s ease;
254
- position: relative;
255
- }
256
-
257
- @keyframes msgIn {
258
- from { opacity: 0; transform: translateY(8px) scale(0.98); }
259
- to { opacity: 1; transform: translateY(0) scale(1); }
260
- }
261
-
262
- .chat-msg.user {
263
- align-self: flex-end;
264
- background: rgba(255, 255, 255, 0.1);
265
- color: var(--text-primary);
266
- border-bottom-right-radius: 4px;
267
- backdrop-filter: blur(8px);
268
- }
269
-
270
- .chat-msg.assistant {
271
- align-self: flex-start;
272
- background: var(--bg-glass);
273
- color: var(--text-primary);
274
- border-bottom-left-radius: 4px;
275
- backdrop-filter: blur(8px);
276
- border: 1px solid var(--border-light);
277
- }
278
-
279
- /* Shimmer effect on new assistant messages */
280
- .chat-msg.assistant::after {
281
- content: '';
282
- position: absolute;
283
- inset: 0;
284
- border-radius: inherit;
285
- background: var(--shimmer);
286
- background-size: 300% 100%;
287
- animation: shimmer 2s ease forwards;
288
- pointer-events: none;
289
- opacity: 0;
290
- }
291
-
292
- @keyframes shimmer {
293
- 0% { opacity: 1; background-position: 200% center; }
294
- 100% { opacity: 0; background-position: -100% center; }
295
- }
296
-
297
- .chat-msg.error {
298
- align-self: center;
299
- background: rgba(220, 80, 80, 0.15);
300
- color: var(--error);
301
- font-size: 12px;
302
- padding: 8px 14px;
303
- border: 1px solid rgba(220, 80, 80, 0.2);
304
- }
305
-
306
- /* Markdown in assistant messages */
307
- .chat-msg code {
308
- background: rgba(255,255,255,0.06);
309
- padding: 1px 6px;
310
- border-radius: 4px;
311
- font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
312
- font-size: 12px;
313
- }
314
-
315
- .chat-msg pre {
316
- background: rgba(0, 0, 0, 0.4);
317
- padding: 12px 14px;
318
- border-radius: 8px;
319
- overflow-x: auto;
320
- margin: 8px 0;
321
- border: 1px solid var(--border-light);
322
- }
323
-
324
- .chat-msg pre code {
325
- background: none;
326
- padding: 0;
327
- font-size: 11px;
328
- line-height: 1.6;
329
- }
330
-
331
- /* Typing indicator */
332
- .typing-indicator {
333
- display: flex;
334
- gap: 5px;
335
- padding: 12px 16px;
336
- align-self: flex-start;
337
- }
338
-
339
- .typing-indicator span {
340
- width: 5px;
341
- height: 5px;
342
- border-radius: 50%;
343
- background: var(--text-tertiary);
344
- animation: typePulse 1.4s ease-in-out infinite;
345
- }
346
-
347
- .typing-indicator span:nth-child(2) { animation-delay: 0.15s; }
348
- .typing-indicator span:nth-child(3) { animation-delay: 0.3s; }
349
-
350
- @keyframes typePulse {
351
- 0%, 60%, 100% { opacity: 0.2; transform: scale(0.8); }
352
- 30% { opacity: 0.8; transform: scale(1.2); }
353
- }
354
-
355
- /* Chat Input */
356
- .chat-input-area {
357
- border-top: 1px solid var(--border);
358
- background: rgba(10, 10, 10, 0.5);
359
- backdrop-filter: blur(20px);
360
- padding: 10px 12px;
361
- flex-shrink: 0;
362
- }
363
-
364
- .model-selector {
365
- margin-bottom: 8px;
366
- }
367
-
368
- .model-selector select {
369
- width: 100%;
370
- padding: 5px 10px;
371
- background: rgba(255, 255, 255, 0.04);
372
- border: 1px solid var(--border);
373
- border-radius: 6px;
374
- color: var(--text-secondary);
375
- font-size: 11px;
376
- cursor: pointer;
377
- transition: border-color 0.3s ease;
378
- -webkit-appearance: none;
379
- }
380
-
381
- .model-selector select:focus {
382
- outline: none;
383
- border-color: rgba(255, 255, 255, 0.15);
384
- }
385
-
386
- .chat-input-row {
387
- display: flex;
388
- gap: 8px;
389
- align-items: flex-end;
390
- }
391
-
392
- .chat-input-row textarea {
393
- flex: 1;
394
- padding: 9px 12px;
395
- background: rgba(255, 255, 255, 0.04);
396
- border: 1px solid var(--border);
397
- border-radius: 10px;
398
- color: var(--text-primary);
399
- font-size: 13px;
400
- font-family: inherit;
401
- resize: none;
402
- max-height: 120px;
403
- line-height: 1.4;
404
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
405
- }
406
-
407
- .chat-input-row textarea:focus {
408
- outline: none;
409
- border-color: rgba(255, 255, 255, 0.15);
410
- box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.03);
411
- }
412
-
413
- .chat-input-row textarea::placeholder {
414
- color: var(--text-tertiary);
415
- }
416
-
417
- .send-btn {
418
- width: 34px;
419
- height: 34px;
420
- display: flex;
421
- align-items: center;
422
- justify-content: center;
423
- background: rgba(255, 255, 255, 0.1);
424
- border: 1px solid var(--border);
425
- border-radius: 10px;
426
- color: var(--text-secondary);
427
- cursor: pointer;
428
- transition: all 0.3s ease;
429
- flex-shrink: 0;
430
- }
431
-
432
- .send-btn:hover:not(:disabled) {
433
- background: rgba(255, 255, 255, 0.15);
434
- color: var(--text-primary);
435
- box-shadow: 0 0 16px rgba(255, 255, 255, 0.05);
436
- }
437
- .send-btn:disabled { opacity: 0.2; cursor: not-allowed; }
438
-
439
- /* Buttons */
440
- .primary-btn {
441
- width: 100%;
442
- padding: 11px 16px;
443
- background: rgba(255, 255, 255, 0.08);
444
- color: var(--text-primary);
445
- border: 1px solid rgba(255, 255, 255, 0.12);
446
- border-radius: 10px;
447
- font-weight: 500;
448
- font-size: 13px;
449
- letter-spacing: 0.01em;
450
- cursor: pointer;
451
- transition: all 0.3s ease;
452
- position: relative;
453
- overflow: hidden;
454
- }
455
-
456
- .primary-btn::after {
457
- content: '';
458
- position: absolute;
459
- inset: 0;
460
- background: var(--shimmer);
461
- background-size: 300% 100%;
462
- animation: btnShimmer 3s ease infinite;
463
- pointer-events: none;
464
- }
465
-
466
- @keyframes btnShimmer {
467
- 0% { background-position: 200% center; }
468
- 100% { background-position: -100% center; }
469
- }
470
-
471
- .primary-btn:hover {
472
- background: rgba(255, 255, 255, 0.12);
473
- border-color: rgba(255, 255, 255, 0.18);
474
- box-shadow: 0 2px 20px rgba(255, 255, 255, 0.04);
475
- }
476
-
477
- .secondary-btn {
478
- width: 100%;
479
- padding: 8px 12px;
480
- background: rgba(255, 255, 255, 0.03);
481
- color: var(--text-secondary);
482
- border: 1px solid var(--border);
483
- border-radius: 8px;
484
- font-size: 12px;
485
- cursor: pointer;
486
- transition: all 0.3s ease;
487
- }
488
- .secondary-btn:hover {
489
- background: rgba(255, 255, 255, 0.06);
490
- color: var(--text-primary);
491
- }
492
-
493
- .danger-btn {
494
- width: 100%;
495
- padding: 8px 12px;
496
- background: transparent;
497
- color: var(--error);
498
- border: 1px solid rgba(220, 80, 80, 0.25);
499
- border-radius: 8px;
500
- font-size: 12px;
501
- cursor: pointer;
502
- transition: all 0.3s ease;
503
- margin-top: 12px;
504
- }
505
- .danger-btn:hover {
506
- background: rgba(220, 80, 80, 0.1);
507
- }
508
-
509
- .icon-btn {
510
- width: 28px;
511
- height: 28px;
512
- display: flex;
513
- align-items: center;
514
- justify-content: center;
515
- background: transparent;
516
- border: none;
517
- border-radius: 6px;
518
- color: var(--text-tertiary);
519
- cursor: pointer;
520
- transition: all 0.3s ease;
521
- }
522
- .icon-btn:hover {
523
- background: rgba(255, 255, 255, 0.06);
524
- color: var(--text-secondary);
525
- }
526
- .icon-btn.small { width: 24px; height: 24px; }
527
- .icon-btn svg { width: 14px; height: 14px; }
528
-
529
- /* Panels (Tools & Settings) */
530
- .tab-content:not(#tab-chat) {
531
- overflow-y: auto;
532
- padding: 14px;
533
- gap: 12px;
534
- }
535
-
536
- .panel {
537
- background: var(--bg-glass);
538
- backdrop-filter: blur(12px);
539
- border: 1px solid var(--border-light);
540
- border-radius: 12px;
541
- padding: 14px;
542
- margin-bottom: 10px;
543
- transition: border-color 0.3s ease;
544
- }
545
-
546
- .panel:hover {
547
- border-color: var(--border);
548
- }
549
-
550
- .panel h3 {
551
- font-size: 11px;
552
- font-weight: 600;
553
- letter-spacing: 0.06em;
554
- text-transform: uppercase;
555
- color: var(--text-tertiary);
556
- margin-bottom: 10px;
557
- }
558
-
559
- .panel-header {
560
- display: flex;
561
- align-items: center;
562
- justify-content: space-between;
563
- margin-bottom: 10px;
564
- }
565
-
566
- .badge {
567
- background: rgba(255, 255, 255, 0.06);
568
- color: var(--text-secondary);
569
- padding: 2px 8px;
570
- border-radius: 10px;
571
- font-size: 10px;
572
- font-weight: 600;
573
- letter-spacing: 0.03em;
574
- }
575
-
576
- /* Status Rows */
577
- .status-row {
578
- display: flex;
579
- justify-content: space-between;
580
- align-items: center;
581
- padding: 6px 0;
582
- border-bottom: 1px solid var(--border-light);
583
- }
584
- .status-row:last-child { border-bottom: none; }
585
- .status-row span:first-child { color: var(--text-tertiary); font-size: 12px; }
586
-
587
- .status-value {
588
- display: flex;
589
- align-items: center;
590
- gap: 6px;
591
- font-size: 12px;
592
- font-weight: 500;
593
- color: var(--text-secondary);
594
- }
595
-
596
- .status-indicator {
597
- width: 6px;
598
- height: 6px;
599
- border-radius: 50%;
600
- background: var(--text-tertiary);
601
- transition: all 0.3s ease;
602
- }
603
- .status-indicator.connected {
604
- background: var(--success);
605
- box-shadow: 0 0 8px rgba(120, 200, 130, 0.3);
606
- }
607
- .status-indicator.warning {
608
- background: var(--warning);
609
- box-shadow: 0 0 8px rgba(240, 200, 80, 0.3);
610
- }
611
- .status-indicator.disconnected {
612
- background: var(--error);
613
- box-shadow: 0 0 8px rgba(220, 80, 80, 0.3);
614
- }
615
-
616
- /* Settings user */
617
- .settings-user {
618
- display: flex;
619
- align-items: center;
620
- gap: 12px;
621
- margin-bottom: 12px;
622
- }
623
-
624
- .user-avatar {
625
- width: 34px;
626
- height: 34px;
627
- border-radius: 50%;
628
- background: var(--accent-dim);
629
- border: 1px solid var(--border);
630
- }
631
-
632
- .user-name { font-weight: 500; font-size: 13px; }
633
- .user-email { color: var(--text-tertiary); font-size: 11px; }
634
-
635
- /* Settings items */
636
- .setting-item {
637
- display: flex;
638
- align-items: center;
639
- justify-content: space-between;
640
- padding: 8px 0;
641
- }
642
- .setting-item span { font-size: 12px; color: var(--text-secondary); }
643
-
644
- .setting-item input[type="number"],
645
- .setting-item select {
646
- width: 100px;
647
- padding: 4px 8px;
648
- background: rgba(255, 255, 255, 0.03);
649
- border: 1px solid var(--border);
650
- border-radius: 6px;
651
- color: var(--text-primary);
652
- font-size: 12px;
653
- transition: border-color 0.3s ease;
654
- }
655
-
656
- .setting-item input[type="number"]:focus,
657
- .setting-item select:focus {
658
- outline: none;
659
- border-color: rgba(255, 255, 255, 0.15);
660
- }
661
-
662
- .setting-item input[type="checkbox"] {
663
- width: 16px;
664
- height: 16px;
665
- cursor: pointer;
666
- accent-color: rgba(255, 255, 255, 0.5);
667
- }
668
-
669
- /* Agent & Tab lists */
670
- .agent-list, .tab-filesystem {
671
- display: flex;
672
- flex-direction: column;
673
- gap: 3px;
674
- }
675
-
676
- .tab-filesystem {
677
- max-height: 200px;
678
- overflow-y: auto;
679
- font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
680
- font-size: 11px;
681
- }
682
-
683
- .tab-item {
684
- display: flex;
685
- align-items: center;
686
- gap: 6px;
687
- padding: 5px 8px;
688
- border-radius: 6px;
689
- cursor: pointer;
690
- transition: all 0.25s ease;
691
- color: var(--text-secondary);
692
- }
693
- .tab-item:hover {
694
- background: rgba(255, 255, 255, 0.04);
695
- color: var(--text-primary);
696
- }
697
- .tab-item.active {
698
- background: rgba(255, 255, 255, 0.06);
699
- color: var(--text-primary);
700
- }
701
-
702
- .empty-state {
703
- text-align: center;
704
- padding: 16px;
705
- color: var(--text-tertiary);
706
- font-size: 12px;
707
- }
708
-
709
- /* Scrollbar — ultra minimal */
710
- ::-webkit-scrollbar { width: 4px; }
711
- ::-webkit-scrollbar-track { background: transparent; }
712
- ::-webkit-scrollbar-thumb {
713
- background: rgba(255, 255, 255, 0.08);
714
- border-radius: 2px;
715
- }
716
- ::-webkit-scrollbar-thumb:hover {
717
- background: rgba(255, 255, 255, 0.14);
718
- }