@hanzo/browser-extension 1.7.6 → 1.9.31

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 (135) hide show
  1. package/LICENSE +9 -18
  2. package/dist/browser-extension/README.md +1 -1
  3. package/dist/browser-extension/background-firefox.js +4180 -499
  4. package/dist/browser-extension/background.js +6932 -2419
  5. package/dist/browser-extension/browser-control.js +652 -18
  6. package/dist/browser-extension/chrome/background.js +6932 -2419
  7. package/dist/browser-extension/chrome/content-script.js +1642 -123
  8. package/dist/browser-extension/chrome/icon128.png +0 -0
  9. package/dist/browser-extension/chrome/icon16.png +0 -0
  10. package/dist/browser-extension/chrome/icon48.png +0 -0
  11. package/dist/browser-extension/chrome/manifest.json +20 -11
  12. package/dist/browser-extension/chrome/popup.css +352 -110
  13. package/dist/browser-extension/chrome/popup.html +159 -48
  14. package/dist/browser-extension/chrome/popup.js +1418 -46
  15. package/dist/browser-extension/chrome/sidebar.css +772 -156
  16. package/dist/browser-extension/chrome/sidebar.html +268 -85
  17. package/dist/browser-extension/chrome/sidebar.js +25846 -84
  18. package/dist/browser-extension/cli.js +2 -2
  19. package/dist/browser-extension/content-script.js +1642 -123
  20. package/dist/browser-extension/firefox/background.js +4180 -499
  21. package/dist/browser-extension/firefox/content-script.js +1642 -123
  22. package/dist/browser-extension/firefox/icon128.png +0 -0
  23. package/dist/browser-extension/firefox/icon16.png +0 -0
  24. package/dist/browser-extension/firefox/icon48.png +0 -0
  25. package/dist/browser-extension/firefox/manifest.json +24 -13
  26. package/dist/browser-extension/firefox/popup.css +352 -110
  27. package/dist/browser-extension/firefox/popup.html +159 -48
  28. package/dist/browser-extension/firefox/popup.js +1418 -46
  29. package/dist/browser-extension/firefox/sidebar.css +772 -156
  30. package/dist/browser-extension/firefox/sidebar.html +268 -85
  31. package/dist/browser-extension/firefox/sidebar.js +25846 -84
  32. package/dist/browser-extension/icon128.png +0 -0
  33. package/dist/browser-extension/icon16.png +0 -0
  34. package/dist/browser-extension/icon48.png +0 -0
  35. package/dist/browser-extension/manifest.json +20 -11
  36. package/dist/browser-extension/package.json +1 -1
  37. package/dist/browser-extension/popup.js +1418 -46
  38. package/dist/browser-extension/safari/Info.plist +3 -3
  39. package/dist/browser-extension/safari/background.js +6932 -2419
  40. package/dist/browser-extension/safari/content-script.js +1642 -123
  41. package/dist/browser-extension/safari/icon128.png +0 -0
  42. package/dist/browser-extension/safari/icon16.png +0 -0
  43. package/dist/browser-extension/safari/icon48.png +0 -0
  44. package/dist/browser-extension/safari/popup.css +352 -110
  45. package/dist/browser-extension/safari/popup.html +159 -48
  46. package/dist/browser-extension/safari/popup.js +1418 -46
  47. package/dist/browser-extension/safari/sidebar.css +772 -156
  48. package/dist/browser-extension/safari/sidebar.html +268 -85
  49. package/dist/browser-extension/safari/sidebar.js +25846 -84
  50. package/dist/browser-extension/sidebar.js +25846 -84
  51. package/dist/browser-extension/webgpu-ai.js +78 -5
  52. package/images/icon128.png +0 -0
  53. package/images/icon16.png +0 -0
  54. package/images/icon48.png +0 -0
  55. package/manifest.json +7 -2
  56. package/package.json +27 -10
  57. package/src/chat-widget.tsx +96 -0
  58. package/src/gui-primitives.tsx +116 -0
  59. package/src/icon128.png +0 -0
  60. package/src/icon16.png +0 -0
  61. package/src/icon32.png +0 -0
  62. package/src/icon48.png +0 -0
  63. package/src/manifest-firefox.json +23 -12
  64. package/src/manifest.json +19 -10
  65. package/src/package.json +1 -1
  66. package/src/popup.css +352 -110
  67. package/src/popup.html +159 -48
  68. package/src/popup.js +196 -0
  69. package/src/sidebar.css +772 -156
  70. package/src/sidebar.html +268 -85
  71. package/src/sidebar.js +885 -0
  72. package/.github/workflows/docs.yml +0 -44
  73. package/.github/workflows/release.yml +0 -55
  74. package/README.md +0 -126
  75. package/dist/browser-extension/ai-worker.js +0 -30
  76. package/dist/browser-extension/cdp-bridge-server.js +0 -444
  77. package/dist/browser-extension/chrome/icon32.png +0 -0
  78. package/dist/browser-extension/firefox/icon32.png +0 -0
  79. package/dist/browser-extension/hanzo-browser-extension-firefox-1.1.0.zip +0 -0
  80. package/dist/browser-extension/icon32.png +0 -0
  81. package/dist/browser-extension/popup.css +0 -468
  82. package/dist/browser-extension/popup.html +0 -191
  83. package/dist/browser-extension/safari/icon32.png +0 -0
  84. package/dist/browser-extension/sidebar.css +0 -718
  85. package/dist/browser-extension/sidebar.html +0 -184
  86. package/dist/cdp-bridge-server.js +0 -411
  87. package/dist/hanzo-ai-chrome-1.7.2.zip +0 -0
  88. package/dist/hanzo-ai-chrome-1.7.3.zip +0 -0
  89. package/dist/hanzo-ai-firefox-1.7.2.zip +0 -0
  90. package/dist/hanzo-ai-firefox-1.7.3.zip +0 -0
  91. package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.pbxproj +0 -1047
  92. package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  93. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  94. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  95. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png +0 -0
  96. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png +0 -0
  97. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png +0 -0
  98. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png +0 -0
  99. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png +0 -0
  100. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png +0 -0
  101. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png +0 -0
  102. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png +0 -0
  103. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png +0 -0
  104. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png +0 -0
  105. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/universal-icon-1024@1x.png +0 -0
  106. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/Contents.json +0 -6
  107. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/Contents.json +0 -21
  108. package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/icon128.png +0 -0
  109. package/dist/safari/Hanzo AI/Shared (App)/Resources/Base.lproj/Main.html +0 -20
  110. package/dist/safari/Hanzo AI/Shared (App)/Resources/Icon.png +0 -0
  111. package/dist/safari/Hanzo AI/Shared (App)/Resources/Script.js +0 -24
  112. package/dist/safari/Hanzo AI/Shared (App)/Resources/Style.css +0 -61
  113. package/dist/safari/Hanzo AI/Shared (App)/ViewController.swift +0 -81
  114. package/dist/safari/Hanzo AI/Shared (Extension)/SafariWebExtensionHandler.swift +0 -42
  115. package/dist/safari/Hanzo AI/iOS (App)/AppDelegate.swift +0 -24
  116. package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/LaunchScreen.storyboard +0 -36
  117. package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/Main.storyboard +0 -38
  118. package/dist/safari/Hanzo AI/iOS (App)/Info.plist +0 -27
  119. package/dist/safari/Hanzo AI/iOS (App)/SceneDelegate.swift +0 -18
  120. package/dist/safari/Hanzo AI/iOS (Extension)/Info.plist +0 -13
  121. package/dist/safari/Hanzo AI/macOS (App)/AppDelegate.swift +0 -21
  122. package/dist/safari/Hanzo AI/macOS (App)/Base.lproj/Main.storyboard +0 -124
  123. package/dist/safari/Hanzo AI/macOS (App)/Info.plist +0 -8
  124. package/dist/safari/Hanzo AI/macOS (Extension)/Info.plist +0 -13
  125. package/docs/_config.yml +0 -13
  126. package/docs/_layouts/default.html +0 -435
  127. package/docs/index.md +0 -54
  128. package/hanzo-ai-chrome-v1.7.6.zip +0 -0
  129. package/hanzo-ai-firefox-v1.7.6.zip +0 -0
  130. package/install-extension.sh +0 -75
  131. package/test/claude-integration.test.ts +0 -251
  132. package/test/server-frameworks-edge-cases.test.ts +0 -145
  133. package/test/server-frameworks.test.ts +0 -395
  134. package/test-cdp-connection.js +0 -140
  135. package/tsconfig.json +0 -19
package/src/popup.css CHANGED
@@ -1,20 +1,27 @@
1
- /* Hanzo AI Browser Extension Popup — Monochrome Vibrancy */
1
+ /* Hanzo AI Browser Extension Popup — @hanzo/gui dark theme, monochrome */
2
2
 
3
3
  :root {
4
- --primary: #FFFFFF;
5
- --primary-dark: #D4D4D4;
6
- --bg: #000000;
7
- --surface: #0A0A0A;
8
- --surface-light: #1A1A1A;
9
- --text: #FFFFFF;
10
- --text-dim: #888888;
11
- --border: rgba(255,255,255,0.08);
12
- --border-strong: rgba(255,255,255,0.14);
4
+ --primary: #fafafa;
5
+ --primary-dark: #d4d4d4;
6
+ --bg: #0a0a0a;
7
+ --surface: #0f0f0f;
8
+ --surface-light: #171717;
9
+ --text: #fafafa;
10
+ --text-secondary: #a3a3a3;
11
+ --text-dim: #666666;
12
+ --border: rgba(255,255,255,0.10);
13
+ --border-strong: rgba(255,255,255,0.16);
13
14
  --glass: rgba(255,255,255,0.04);
14
15
  --glass-strong: rgba(255,255,255,0.07);
15
- --success: #4CAF50;
16
- --warning: #FFC107;
17
- --error: #F44336;
16
+ /* Status: monochrome by hue per @hanzo/brand (white luminance scale). */
17
+ --success: #fafafa;
18
+ --warning: #d4d4d4;
19
+ --error: rgba(255,255,255,0.55);
20
+ --link: #a3a3a3;
21
+ --link-hover: #fafafa;
22
+ --radius: 10px;
23
+ --radius-md: 8px;
24
+ --radius-sm: 6px;
18
25
  }
19
26
 
20
27
  * {
@@ -24,11 +31,11 @@
24
31
  }
25
32
 
26
33
  body {
27
- width: 380px;
28
- font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', sans-serif;
34
+ width: 360px;
35
+ font-family: 'Geist Sans', -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', sans-serif;
29
36
  background: var(--bg);
30
37
  color: var(--text);
31
- font-size: 14px;
38
+ font-size: 13px;
32
39
  line-height: 1.5;
33
40
  -webkit-font-smoothing: antialiased;
34
41
  -moz-osx-font-smoothing: grayscale;
@@ -36,7 +43,7 @@ body {
36
43
 
37
44
  .container {
38
45
  background: var(--surface);
39
- min-height: 500px;
46
+ min-height: 480px;
40
47
  position: relative;
41
48
  }
42
49
 
@@ -47,7 +54,7 @@ body {
47
54
  top: 0;
48
55
  left: 0;
49
56
  right: 0;
50
- height: 120px;
57
+ height: 100px;
51
58
  background: radial-gradient(ellipse at 50% 0%, rgba(255,255,255,0.03) 0%, transparent 70%);
52
59
  pointer-events: none;
53
60
  }
@@ -71,15 +78,15 @@ body {
71
78
 
72
79
  @keyframes glowPulse {
73
80
  0%, 100% { box-shadow: 0 0 0 0 rgba(255,255,255,0); }
74
- 50% { box-shadow: 0 0 12px 2px rgba(255,255,255,0.06); }
81
+ 50% { box-shadow: 0 0 8px 1px rgba(255,255,255,0.05); }
75
82
  }
76
83
 
77
84
  /* Header */
78
85
  header {
79
86
  display: flex;
80
87
  align-items: center;
81
- gap: 12px;
82
- padding: 16px;
88
+ gap: 10px;
89
+ padding: 14px 16px;
83
90
  border-bottom: 1px solid var(--border);
84
91
  background: rgba(0,0,0,0.6);
85
92
  backdrop-filter: blur(20px) saturate(180%);
@@ -89,43 +96,164 @@ header {
89
96
  }
90
97
 
91
98
  .logo {
92
- width: 24px;
93
- height: 24px;
99
+ width: 22px;
100
+ height: 22px;
94
101
  color: var(--text);
95
- filter: drop-shadow(0 0 6px rgba(255,255,255,0.15));
102
+ filter: drop-shadow(0 0 4px rgba(255,255,255,0.12));
96
103
  }
97
104
 
98
105
  h1 {
99
- font-size: 18px;
106
+ font-size: 16px;
100
107
  font-weight: 600;
101
108
  letter-spacing: -0.01em;
102
109
  }
103
110
 
104
111
  h2 {
105
- font-size: 16px;
112
+ font-size: 15px;
106
113
  font-weight: 600;
107
- margin-bottom: 8px;
114
+ margin-bottom: 6px;
108
115
  }
109
116
 
110
117
  h3 {
111
- font-size: 14px;
118
+ font-size: 12px;
112
119
  font-weight: 600;
113
- margin-bottom: 12px;
120
+ text-transform: uppercase;
121
+ letter-spacing: 0.04em;
122
+ color: var(--text-secondary);
123
+ margin-bottom: 10px;
114
124
  }
115
125
 
116
126
  /* Sections */
117
127
  .section {
118
- padding: 20px;
128
+ padding: 16px;
119
129
  animation: fadeIn 0.3s ease;
120
130
  }
121
131
 
122
- .section.hidden {
132
+ .section.hidden,
133
+ .hidden {
123
134
  display: none;
124
135
  }
125
136
 
126
137
  .subtitle {
127
138
  color: var(--text-dim);
128
- margin-bottom: 20px;
139
+ margin-bottom: 16px;
140
+ font-size: 13px;
141
+ }
142
+
143
+ /* Login Card */
144
+ .login-section {
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ min-height: 380px;
149
+ padding: 32px 24px;
150
+ }
151
+
152
+ .login-card {
153
+ text-align: center;
154
+ max-width: 280px;
155
+ width: 100%;
156
+ }
157
+
158
+ .login-logo {
159
+ width: 48px;
160
+ height: 48px;
161
+ color: var(--text);
162
+ margin: 0 auto 20px;
163
+ display: block;
164
+ filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.12));
165
+ }
166
+
167
+ .login-headline {
168
+ font-size: 20px;
169
+ font-weight: 700;
170
+ color: var(--text);
171
+ margin-bottom: 8px;
172
+ letter-spacing: -0.02em;
173
+ }
174
+
175
+ .login-sub {
176
+ font-size: 13px;
177
+ color: var(--text-secondary);
178
+ margin-bottom: 24px;
179
+ line-height: 1.5;
180
+ }
181
+
182
+ .login-signin-btn {
183
+ width: 100%;
184
+ padding: 12px 20px;
185
+ background: #FFFFFF;
186
+ color: #000000;
187
+ border: none;
188
+ border-radius: 10px;
189
+ font-size: 14px;
190
+ font-weight: 600;
191
+ cursor: pointer;
192
+ transition: all 0.2s;
193
+ margin-bottom: 10px;
194
+ position: relative;
195
+ overflow: hidden;
196
+ letter-spacing: -0.01em;
197
+ }
198
+
199
+ .login-signin-btn::after {
200
+ content: '';
201
+ position: absolute;
202
+ top: 0;
203
+ left: -100%;
204
+ width: 100%;
205
+ height: 100%;
206
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
207
+ transition: left 0.5s ease;
208
+ }
209
+
210
+ .login-signin-btn:hover {
211
+ background: #E0E0E0;
212
+ box-shadow: 0 0 16px rgba(255, 255, 255, 0.1);
213
+ }
214
+
215
+ .login-signin-btn:hover::after {
216
+ left: 100%;
217
+ }
218
+
219
+ .login-signin-btn:disabled {
220
+ opacity: 0.6;
221
+ cursor: not-allowed;
222
+ }
223
+
224
+ .login-create-btn {
225
+ width: 100%;
226
+ padding: 10px 20px;
227
+ background: transparent;
228
+ color: var(--text-secondary);
229
+ border: none;
230
+ border-radius: 10px;
231
+ font-size: 13px;
232
+ font-weight: 500;
233
+ cursor: pointer;
234
+ transition: all 0.2s;
235
+ margin-bottom: 16px;
236
+ }
237
+
238
+ .login-create-btn:hover {
239
+ color: var(--text);
240
+ background: rgba(255, 255, 255, 0.06);
241
+ }
242
+
243
+ .login-note {
244
+ font-size: 11px;
245
+ color: var(--text-dim);
246
+ line-height: 1.5;
247
+ }
248
+
249
+ .login-note a {
250
+ color: var(--text-secondary);
251
+ text-decoration: underline;
252
+ text-underline-offset: 2px;
253
+ }
254
+
255
+ .login-note a:hover {
256
+ color: var(--text);
129
257
  }
130
258
 
131
259
  /* Buttons */
@@ -135,17 +263,22 @@ h3 {
135
263
  justify-content: center;
136
264
  gap: 8px;
137
265
  width: 100%;
138
- padding: 12px 16px;
266
+ padding: 10px 14px;
139
267
  border: none;
140
268
  border-radius: 8px;
141
- font-size: 14px;
269
+ font-size: 13px;
142
270
  font-weight: 500;
143
271
  cursor: pointer;
144
- transition: all 0.25s ease;
272
+ transition: all 0.2s ease;
145
273
  position: relative;
146
274
  overflow: hidden;
147
275
  }
148
276
 
277
+ .btn:disabled {
278
+ opacity: 0.5;
279
+ cursor: not-allowed;
280
+ }
281
+
149
282
  .btn-primary {
150
283
  background: var(--primary);
151
284
  color: #000000;
@@ -160,13 +293,13 @@ h3 {
160
293
  left: -100%;
161
294
  width: 100%;
162
295
  height: 100%;
163
- background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
296
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
164
297
  transition: left 0.5s ease;
165
298
  }
166
299
 
167
300
  .btn-primary:hover {
168
301
  background: var(--primary-dark);
169
- box-shadow: 0 0 16px rgba(255,255,255,0.12);
302
+ box-shadow: 0 0 12px rgba(255,255,255,0.1);
170
303
  }
171
304
 
172
305
  .btn-primary:hover::after {
@@ -177,19 +310,28 @@ h3 {
177
310
  background: var(--glass-strong);
178
311
  color: var(--text);
179
312
  border: 1px solid var(--border);
180
- backdrop-filter: blur(8px);
181
- -webkit-backdrop-filter: blur(8px);
182
313
  }
183
314
 
184
315
  .btn-secondary:hover {
185
- background: var(--glass);
316
+ background: rgba(255,255,255,0.1);
186
317
  border-color: var(--border-strong);
187
- box-shadow: 0 0 8px rgba(255,255,255,0.05);
318
+ }
319
+
320
+ .btn-ghost {
321
+ background: transparent;
322
+ color: var(--text-secondary);
323
+ border: 1px solid var(--border);
324
+ }
325
+
326
+ .btn-ghost:hover {
327
+ color: var(--text);
328
+ border-color: var(--border-strong);
329
+ background: var(--glass);
188
330
  }
189
331
 
190
332
  .btn-icon {
191
- width: 32px;
192
- height: 32px;
333
+ width: 28px;
334
+ height: 28px;
193
335
  padding: 0;
194
336
  display: flex;
195
337
  align-items: center;
@@ -208,32 +350,30 @@ h3 {
208
350
  }
209
351
 
210
352
  .btn-icon svg {
211
- width: 18px;
212
- height: 18px;
353
+ width: 16px;
354
+ height: 16px;
213
355
  stroke-width: 1.5;
214
356
  }
215
357
 
216
358
  .icon {
217
- width: 20px;
218
- height: 20px;
359
+ width: 16px;
360
+ height: 16px;
219
361
  }
220
362
 
221
363
  /* User Info */
222
364
  .user-info {
223
365
  display: flex;
224
366
  align-items: center;
225
- gap: 12px;
226
- padding: 16px;
367
+ gap: 10px;
368
+ padding: 12px;
227
369
  background: var(--glass-strong);
228
- backdrop-filter: blur(12px);
229
- -webkit-backdrop-filter: blur(12px);
230
370
  border: 1px solid var(--border);
231
371
  border-radius: 8px;
232
372
  }
233
373
 
234
374
  .avatar {
235
- width: 40px;
236
- height: 40px;
375
+ width: 34px;
376
+ height: 34px;
237
377
  border-radius: 50%;
238
378
  background: var(--border);
239
379
  border: 1px solid var(--border);
@@ -245,35 +385,103 @@ h3 {
245
385
 
246
386
  .user-name {
247
387
  font-weight: 600;
388
+ font-size: 13px;
248
389
  }
249
390
 
250
391
  .user-email {
251
- font-size: 12px;
392
+ font-size: 11px;
252
393
  color: var(--text-dim);
253
394
  }
254
395
 
255
- /* Features */
396
+ /* Tools Grid */
397
+ .tools-grid {
398
+ display: grid;
399
+ grid-template-columns: repeat(3, 1fr);
400
+ gap: 6px;
401
+ margin-bottom: 4px;
402
+ }
403
+
404
+ .tool-btn {
405
+ display: flex;
406
+ flex-direction: column;
407
+ align-items: center;
408
+ justify-content: center;
409
+ gap: 4px;
410
+ padding: 10px 4px;
411
+ background: var(--glass);
412
+ border: 1px solid var(--border);
413
+ border-radius: 8px;
414
+ color: var(--text-secondary);
415
+ font-size: 10px;
416
+ cursor: pointer;
417
+ transition: all 0.2s ease;
418
+ position: relative;
419
+ overflow: hidden;
420
+ }
421
+
422
+ .tool-btn svg {
423
+ width: 18px;
424
+ height: 18px;
425
+ flex-shrink: 0;
426
+ }
427
+
428
+ .tool-btn:hover {
429
+ color: var(--text);
430
+ background: var(--glass-strong);
431
+ border-color: var(--border-strong);
432
+ }
433
+
434
+ .tool-btn:active {
435
+ transform: scale(0.96);
436
+ }
437
+
438
+ .tool-btn.active {
439
+ color: var(--text);
440
+ background: rgba(255,255,255,0.1);
441
+ border-color: var(--text);
442
+ box-shadow: 0 0 8px rgba(255,255,255,0.06);
443
+ }
444
+
445
+ .tool-btn:disabled {
446
+ opacity: 0.4;
447
+ cursor: not-allowed;
448
+ }
449
+
450
+ .tool-btn .tool-feedback {
451
+ position: absolute;
452
+ inset: 0;
453
+ display: flex;
454
+ align-items: center;
455
+ justify-content: center;
456
+ background: rgba(76, 175, 80, 0.9);
457
+ color: #fff;
458
+ font-size: 11px;
459
+ font-weight: 600;
460
+ border-radius: 7px;
461
+ animation: fadeIn 0.15s ease;
462
+ }
463
+
464
+ /* Features — compact toggles */
256
465
  .features {
257
466
  display: flex;
258
467
  flex-direction: column;
259
- gap: 12px;
468
+ gap: 2px;
260
469
  }
261
470
 
262
471
  .feature-toggle label {
263
472
  display: flex;
264
473
  align-items: center;
265
- gap: 12px;
266
- padding: 12px;
267
- background: var(--glass-strong);
268
- border: 1px solid var(--border);
269
- border-radius: 8px;
474
+ gap: 10px;
475
+ padding: 8px 10px;
476
+ background: transparent;
477
+ border: none;
478
+ border-radius: 6px;
270
479
  cursor: pointer;
271
- transition: all 0.2s;
480
+ transition: all 0.15s;
272
481
  }
273
482
 
274
483
  .feature-toggle label:hover {
275
- background: var(--glass);
276
- border-color: var(--border-strong);
484
+ background: var(--glass-strong);
277
485
  }
278
486
 
279
487
  .feature-toggle input {
@@ -282,11 +490,11 @@ h3 {
282
490
 
283
491
  .toggle {
284
492
  position: relative;
285
- width: 44px;
286
- height: 24px;
287
- background: rgba(255,255,255,0.1);
288
- border-radius: 12px;
289
- transition: background 0.3s;
493
+ width: 32px;
494
+ height: 18px;
495
+ background: rgba(255,255,255,0.12);
496
+ border-radius: 9px;
497
+ transition: background 0.25s;
290
498
  flex-shrink: 0;
291
499
  }
292
500
 
@@ -295,12 +503,12 @@ h3 {
295
503
  position: absolute;
296
504
  top: 2px;
297
505
  left: 2px;
298
- width: 20px;
299
- height: 20px;
300
- background: white;
506
+ width: 14px;
507
+ height: 14px;
508
+ background: #888;
301
509
  border-radius: 50%;
302
- transition: transform 0.3s;
303
- box-shadow: 0 1px 4px rgba(0,0,0,0.3);
510
+ transition: all 0.25s;
511
+ box-shadow: 0 1px 3px rgba(0,0,0,0.3);
304
512
  }
305
513
 
306
514
  input:checked + .toggle {
@@ -308,54 +516,62 @@ input:checked + .toggle {
308
516
  }
309
517
 
310
518
  input:checked + .toggle::after {
311
- transform: translateX(20px);
519
+ transform: translateX(14px);
520
+ background: #000;
312
521
  }
313
522
 
314
523
  .feature-info {
315
524
  flex: 1;
316
525
  }
317
526
 
527
+ .feature-info strong {
528
+ font-size: 13px;
529
+ font-weight: 500;
530
+ }
531
+
318
532
  .feature-info small {
319
533
  display: block;
320
534
  color: var(--text-dim);
321
- font-size: 12px;
535
+ font-size: 11px;
536
+ line-height: 1.3;
322
537
  }
323
538
 
324
539
  /* Status */
325
540
  .status {
326
541
  display: flex;
327
542
  flex-direction: column;
328
- gap: 12px;
543
+ gap: 8px;
329
544
  }
330
545
 
331
546
  .status-item {
332
547
  display: flex;
333
548
  align-items: center;
334
549
  gap: 8px;
550
+ font-size: 12px;
335
551
  }
336
552
 
337
553
  .status-dot {
338
- width: 8px;
339
- height: 8px;
554
+ width: 6px;
555
+ height: 6px;
340
556
  border-radius: 50%;
341
- background: rgba(255,255,255,0.1);
557
+ background: rgba(255,255,255,0.12);
342
558
  transition: all 0.3s;
559
+ flex-shrink: 0;
343
560
  }
344
561
 
345
562
  .status-dot.connected {
346
563
  background: var(--success);
347
- box-shadow: 0 0 8px rgba(76, 175, 80, 0.3);
348
- animation: glowPulse 3s infinite;
564
+ box-shadow: 0 0 6px rgba(76, 175, 80, 0.3);
349
565
  }
350
566
 
351
567
  .status-dot.warning {
352
568
  background: var(--warning);
353
- box-shadow: 0 0 8px rgba(255, 193, 7, 0.2);
569
+ box-shadow: 0 0 6px rgba(255, 193, 7, 0.2);
354
570
  }
355
571
 
356
572
  .status-dot.error {
357
573
  background: var(--error);
358
- box-shadow: 0 0 8px rgba(244, 67, 54, 0.2);
574
+ box-shadow: 0 0 6px rgba(244, 67, 54, 0.2);
359
575
  }
360
576
 
361
577
  .status-dot.connecting {
@@ -364,54 +580,56 @@ input:checked + .toggle::after {
364
580
 
365
581
  .status-detail {
366
582
  margin-left: auto;
367
- font-size: 12px;
583
+ font-size: 11px;
368
584
  color: var(--text-dim);
369
585
  }
370
586
 
371
587
  /* Actions */
372
588
  .actions {
373
589
  display: flex;
374
- gap: 12px;
590
+ gap: 8px;
375
591
  }
376
592
 
377
593
  .actions .btn {
378
594
  flex: 1;
595
+ font-size: 12px;
596
+ padding: 8px 12px;
379
597
  }
380
598
 
381
599
  /* Guide */
382
600
  .guide {
383
- background: var(--glass-strong);
601
+ background: var(--glass);
384
602
  border: 1px solid var(--border);
385
- padding: 16px;
603
+ padding: 12px;
386
604
  border-radius: 8px;
387
605
  }
388
606
 
389
607
  .guide h3 {
390
- margin-bottom: 8px;
608
+ margin-bottom: 6px;
391
609
  }
392
610
 
393
611
  .guide p {
394
- font-size: 12px;
612
+ font-size: 11px;
395
613
  color: var(--text-dim);
396
- margin-bottom: 4px;
614
+ margin-bottom: 3px;
397
615
  }
398
616
 
399
617
  kbd {
400
618
  display: inline-block;
401
- padding: 2px 6px;
619
+ padding: 1px 5px;
402
620
  background: rgba(255,255,255,0.06);
403
621
  border: 1px solid var(--border);
404
- border-radius: 4px;
405
- font-family: monospace;
406
- font-size: 11px;
622
+ border-radius: 3px;
623
+ font-family: 'Geist Mono', 'Menlo', monospace;
624
+ font-size: 10px;
407
625
  }
408
626
 
409
627
  /* Settings */
410
628
  .settings-header {
411
629
  display: flex;
412
630
  align-items: center;
413
- gap: 12px;
414
- margin-bottom: 20px;
631
+ gap: 10px;
632
+ margin-bottom: 16px;
415
633
  }
416
634
 
417
635
  .settings-header h2 {
@@ -419,12 +637,12 @@ kbd {
419
637
  }
420
638
 
421
639
  .setting-group {
422
- margin-bottom: 24px;
640
+ margin-bottom: 20px;
423
641
  }
424
642
 
425
643
  .setting-group label {
426
644
  display: block;
427
- margin-bottom: 12px;
645
+ margin-bottom: 10px;
428
646
  color: var(--text-dim);
429
647
  font-size: 12px;
430
648
  }
@@ -433,12 +651,12 @@ kbd {
433
651
  .setting-group input[type="number"],
434
652
  .setting-group select {
435
653
  width: 100%;
436
- padding: 8px 12px;
654
+ padding: 7px 10px;
437
655
  background: var(--glass-strong);
438
656
  border: 1px solid var(--border);
439
657
  border-radius: 6px;
440
658
  color: var(--text);
441
- font-size: 14px;
659
+ font-size: 13px;
442
660
  margin-top: 4px;
443
661
  transition: border-color 0.2s;
444
662
  }
@@ -465,17 +683,17 @@ kbd {
465
683
 
466
684
  .backend-select-wrapper select {
467
685
  width: 100%;
468
- padding: 8px 12px;
686
+ padding: 7px 10px;
469
687
  background: var(--glass-strong);
470
688
  border: 1px solid var(--border);
471
689
  border-radius: 6px;
472
690
  color: var(--text);
473
- font-size: 14px;
691
+ font-size: 13px;
474
692
  cursor: pointer;
475
693
  appearance: none;
476
694
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
477
695
  background-repeat: no-repeat;
478
- background-position: right 12px center;
696
+ background-position: right 10px center;
479
697
  transition: border-color 0.2s;
480
698
  }
481
699
 
@@ -488,8 +706,8 @@ kbd {
488
706
  display: flex;
489
707
  align-items: center;
490
708
  gap: 8px;
491
- margin-top: 8px;
492
- font-size: 12px;
709
+ margin-top: 6px;
710
+ font-size: 11px;
493
711
  color: var(--text-dim);
494
712
  }
495
713
 
@@ -497,23 +715,47 @@ kbd {
497
715
  .divider {
498
716
  height: 1px;
499
717
  background: var(--border);
500
- margin: 16px 0;
718
+ margin: 12px 0;
501
719
  }
502
720
 
721
+ /* Links */
503
722
  .help-text {
504
723
  text-align: center;
505
724
  font-size: 12px;
506
725
  color: var(--text-dim);
507
- margin-top: 16px;
726
+ margin-top: 12px;
508
727
  }
509
728
 
510
729
  .help-text a {
730
+ color: var(--link);
731
+ text-decoration: underline;
732
+ text-decoration-color: rgba(160,160,160,0.3);
733
+ text-underline-offset: 2px;
734
+ transition: all 0.2s;
735
+ }
736
+
737
+ .help-text a:hover {
738
+ color: var(--link-hover);
739
+ text-decoration-color: rgba(255,255,255,0.5);
740
+ }
741
+
742
+ /* Footer links */
743
+ .footer-links {
744
+ display: flex;
745
+ justify-content: center;
746
+ gap: 16px;
747
+ padding: 12px 16px;
748
+ border-top: 1px solid var(--border);
749
+ margin-top: 4px;
750
+ }
751
+
752
+ .footer-links a {
511
753
  color: var(--text-dim);
512
754
  text-decoration: none;
755
+ font-size: 11px;
513
756
  transition: color 0.2s;
514
757
  }
515
758
 
516
- .help-text a:hover {
759
+ .footer-links a:hover {
517
760
  color: var(--text);
518
- text-decoration: underline;
519
761
  }