browser-assistant 2.8.1 → 2.8.3

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.
@@ -1,203 +1,203 @@
1
- /* Browser Assistant – Styles v2.0 */
2
-
3
- #assistant-root {
4
- position: fixed;
5
- top: 20px;
6
- right: 20px;
7
- z-index: 2147483647;
8
- font-family: 'Inter', system-ui, -apple-system, sans-serif;
9
- color: #fff;
10
- pointer-events: none;
11
- user-select: none;
12
- -webkit-user-select: none;
13
- }
14
-
15
- /* ── Collapsed badge ──────────────────────────────────────────────────── */
16
- .assistant-tab.collapsed {
17
- width: 40px !important;
18
- height: 40px !important;
19
- min-width: 40px !important;
20
- min-height: 40px !important;
21
- max-width: 40px !important;
22
- max-height: 40px !important;
23
- border-radius: 50% !important;
24
- padding: 0 !important;
25
- display: flex !important;
26
- align-items: center;
27
- justify-content: center;
28
- cursor: grab;
29
- pointer-events: auto;
30
- background: #ffffff !important;
31
- border: 2px solid #333 !important;
32
- box-shadow: 0 4px 15px rgba(0,0,0,0.4) !important;
33
- overflow: hidden !important;
34
- resize: none !important;
35
- flex-shrink: 0;
36
- font-size: 16px !important;
37
- color: #333 !important;
38
- }
39
- .assistant-dragging .assistant-tab.collapsed { cursor: grabbing; }
40
-
41
-
42
- .assistant-tab.collapsed:hover {
43
- transform: scale(1.15);
44
- box-shadow: 0 6px 25px rgba(110,142,251,0.8);
45
- }
46
- .assistant-tab.collapsed::before {
47
- content: attr(data-content);
48
- display: flex;
49
- align-items: center;
50
- justify-content: center;
51
- width: 100%;
52
- height: 100%;
53
- }
54
- .assistant-tab.collapsed.has-answer {
55
- background: linear-gradient(135deg, #10b981, #059669) !important;
56
- color: #fff !important;
57
- font-weight: 900 !important;
58
- font-size: 16px !important;
59
- border: 2px solid rgba(255,255,255,0.4) !important;
60
- box-shadow: 0 4px 15px rgba(16,185,129,0.5) !important;
61
- text-transform: uppercase;
62
- }
63
- .assistant-tab.collapsed.has-answer[data-content="A"],
64
- .assistant-tab.collapsed.has-answer[data-content="B"],
65
- .assistant-tab.collapsed.has-answer[data-content="C"],
66
- .assistant-tab.collapsed.has-answer[data-content="D"],
67
- .assistant-tab.collapsed.has-answer[data-content="E"],
68
- .assistant-tab.collapsed.has-answer[data-content="OK"] {
69
- font-size: 18px !important;
70
- }
71
-
72
- /* ── Expanded panel ───────────────────────────────────────────────────── */
73
- .assistant-tab {
74
- background: rgba(15, 15, 20, 0.88);
75
- backdrop-filter: blur(20px);
76
- -webkit-backdrop-filter: blur(20px);
77
- border: 1px solid rgba(255, 255, 255, 0.12);
78
- border-radius: 14px;
79
- padding: 10px;
80
- width: 272px;
81
- box-shadow: 0 10px 40px rgba(0, 0, 0, 0.55);
82
- pointer-events: auto;
83
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
84
- overflow: hidden;
85
- max-height: 85vh;
86
- display: flex;
87
- flex-direction: column;
88
- resize: vertical;
89
- min-height: 180px;
90
- }
91
-
92
- /* ── Header ───────────────────────────────────────────────────────────── */
93
- .assistant-header {
94
- display: flex;
95
- justify-content: space-between;
96
- align-items: center;
97
- margin-bottom: 8px;
98
- cursor: grab;
99
- touch-action: none;
100
- }
101
- .assistant-dragging .assistant-header { cursor: grabbing; }
102
- .assistant-title-row {
103
- display: flex;
104
- align-items: center;
105
- gap: 6px;
106
- }
107
- .assistant-title {
108
- margin: 0;
109
- font-size: 13px;
110
- font-weight: 600;
111
- color: #f0f0f0;
112
- }
113
- .assistant-close {
114
- background: none;
115
- border: none;
116
- color: #666;
117
- cursor: pointer;
118
- font-size: 18px;
119
- line-height: 1;
120
- padding: 0 2px;
121
- transition: color 0.15s;
122
- }
123
- .assistant-close:hover { color: #fff; }
124
-
125
- /* ── Container for internal flexing ─────────────────────────────────────── */
126
- .assistant-content {
127
- display: flex;
128
- flex-direction: column;
129
- flex: 1;
130
- overflow: hidden;
131
- min-height: 0;
132
- }
133
-
134
- /* ── Server status dot ────────────────────────────────────────────────── */
135
- .status-dot {
136
- width: 7px;
137
- height: 7px;
138
- border-radius: 50%;
139
- display: inline-block;
140
- flex-shrink: 0;
141
- }
142
- .status-dot.online { background: #10b981; box-shadow: 0 0 5px #10b981; }
143
- .status-dot.offline { background: #ef4444; box-shadow: 0 0 5px #ef4444; }
144
- .status-dot.unknown { background: #f59e0b; }
145
-
146
- /* ── Mode switcher ────────────────────────────────────────────────────── */
147
- .assistant-mode-switcher {
148
- display: flex;
149
- background: rgba(255,255,255,0.05);
150
- border-radius: 8px;
151
- padding: 2px;
152
- margin-bottom: 8px;
153
- border: 1px solid rgba(255,255,255,0.08);
154
- }
155
- .mode-btn {
156
- flex: 1;
157
- background: none;
158
- border: none;
159
- color: #777;
160
- font-size: 10px;
161
- padding: 4px 0;
162
- cursor: pointer;
163
- border-radius: 6px;
164
- transition: all 0.18s;
165
- font-weight: 600;
166
- letter-spacing: 0.4px;
167
- }
168
- .mode-btn.active {
169
- background: rgba(110,142,251,0.85);
170
- color: #fff;
171
- }
172
- .mode-btn:hover:not(.active) {
173
- background: rgba(255,255,255,0.08);
174
- color: #bbb;
175
- }
176
-
177
- /* ── Scan buttons ─────────────────────────────────────────────────────── */
178
- .assistant-btn-row {
179
- display: flex;
180
- gap: 6px;
181
- margin-bottom: 8px;
182
- }
183
- .assistant-btn {
184
- flex: 1;
185
- background: linear-gradient(135deg, #6e8efb, #a777e3);
186
- border: none;
187
- border-radius: 6px;
188
- color: #fff;
189
- padding: 6px 8px;
190
- font-weight: 600;
191
- font-size: 11px;
192
- cursor: pointer;
193
- transition: opacity 0.18s, transform 0.1s;
194
- }
195
- .assistant-btn.secondary {
196
- background: rgba(255,255,255,0.08);
197
- border: 1px solid rgba(255,255,255,0.12);
198
- color: #bbb;
199
- }
200
- .assistant-btn:hover { opacity: 0.88; transform: translateY(-1px); }
1
+ /* Browser Assistant – Styles v2.0 */
2
+
3
+ #assistant-root {
4
+ position: fixed;
5
+ top: 20px;
6
+ right: 20px;
7
+ z-index: 2147483647;
8
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
9
+ color: #fff;
10
+ pointer-events: none;
11
+ user-select: none;
12
+ -webkit-user-select: none;
13
+ }
14
+
15
+ /* ── Collapsed badge ──────────────────────────────────────────────────── */
16
+ .assistant-tab.collapsed {
17
+ width: 40px !important;
18
+ height: 40px !important;
19
+ min-width: 40px !important;
20
+ min-height: 40px !important;
21
+ max-width: 40px !important;
22
+ max-height: 40px !important;
23
+ border-radius: 50% !important;
24
+ padding: 0 !important;
25
+ display: flex !important;
26
+ align-items: center;
27
+ justify-content: center;
28
+ cursor: grab;
29
+ pointer-events: auto;
30
+ background: #ffffff !important;
31
+ border: 2px solid #333 !important;
32
+ box-shadow: 0 4px 15px rgba(0,0,0,0.4) !important;
33
+ overflow: hidden !important;
34
+ resize: none !important;
35
+ flex-shrink: 0;
36
+ font-size: 16px !important;
37
+ color: #333 !important;
38
+ }
39
+ .assistant-dragging .assistant-tab.collapsed { cursor: grabbing; }
40
+
41
+
42
+ .assistant-tab.collapsed:hover {
43
+ transform: scale(1.15);
44
+ box-shadow: 0 6px 25px rgba(110,142,251,0.8);
45
+ }
46
+ .assistant-tab.collapsed::before {
47
+ content: attr(data-content);
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ width: 100%;
52
+ height: 100%;
53
+ }
54
+ .assistant-tab.collapsed.has-answer {
55
+ background: linear-gradient(135deg, #10b981, #059669) !important;
56
+ color: #fff !important;
57
+ font-weight: 900 !important;
58
+ font-size: 16px !important;
59
+ border: 2px solid rgba(255,255,255,0.4) !important;
60
+ box-shadow: 0 4px 15px rgba(16,185,129,0.5) !important;
61
+ text-transform: uppercase;
62
+ }
63
+ .assistant-tab.collapsed.has-answer[data-content="A"],
64
+ .assistant-tab.collapsed.has-answer[data-content="B"],
65
+ .assistant-tab.collapsed.has-answer[data-content="C"],
66
+ .assistant-tab.collapsed.has-answer[data-content="D"],
67
+ .assistant-tab.collapsed.has-answer[data-content="E"],
68
+ .assistant-tab.collapsed.has-answer[data-content="OK"] {
69
+ font-size: 18px !important;
70
+ }
71
+
72
+ /* ── Expanded panel ───────────────────────────────────────────────────── */
73
+ .assistant-tab {
74
+ background: rgba(15, 15, 20, 0.88);
75
+ backdrop-filter: blur(20px);
76
+ -webkit-backdrop-filter: blur(20px);
77
+ border: 1px solid rgba(255, 255, 255, 0.12);
78
+ border-radius: 14px;
79
+ padding: 10px;
80
+ width: 272px;
81
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.55);
82
+ pointer-events: auto;
83
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
84
+ overflow: hidden;
85
+ max-height: 85vh;
86
+ display: flex;
87
+ flex-direction: column;
88
+ resize: vertical;
89
+ min-height: 180px;
90
+ }
91
+
92
+ /* ── Header ───────────────────────────────────────────────────────────── */
93
+ .assistant-header {
94
+ display: flex;
95
+ justify-content: space-between;
96
+ align-items: center;
97
+ margin-bottom: 8px;
98
+ cursor: grab;
99
+ touch-action: none;
100
+ }
101
+ .assistant-dragging .assistant-header { cursor: grabbing; }
102
+ .assistant-title-row {
103
+ display: flex;
104
+ align-items: center;
105
+ gap: 6px;
106
+ }
107
+ .assistant-title {
108
+ margin: 0;
109
+ font-size: 13px;
110
+ font-weight: 600;
111
+ color: #f0f0f0;
112
+ }
113
+ .assistant-close {
114
+ background: none;
115
+ border: none;
116
+ color: #666;
117
+ cursor: pointer;
118
+ font-size: 18px;
119
+ line-height: 1;
120
+ padding: 0 2px;
121
+ transition: color 0.15s;
122
+ }
123
+ .assistant-close:hover { color: #fff; }
124
+
125
+ /* ── Container for internal flexing ─────────────────────────────────────── */
126
+ .assistant-content {
127
+ display: flex;
128
+ flex-direction: column;
129
+ flex: 1;
130
+ overflow: hidden;
131
+ min-height: 0;
132
+ }
133
+
134
+ /* ── Server status dot ────────────────────────────────────────────────── */
135
+ .status-dot {
136
+ width: 7px;
137
+ height: 7px;
138
+ border-radius: 50%;
139
+ display: inline-block;
140
+ flex-shrink: 0;
141
+ }
142
+ .status-dot.online { background: #10b981; box-shadow: 0 0 5px #10b981; }
143
+ .status-dot.offline { background: #ef4444; box-shadow: 0 0 5px #ef4444; }
144
+ .status-dot.unknown { background: #f59e0b; }
145
+
146
+ /* ── Mode switcher ────────────────────────────────────────────────────── */
147
+ .assistant-mode-switcher {
148
+ display: flex;
149
+ background: rgba(255,255,255,0.05);
150
+ border-radius: 8px;
151
+ padding: 2px;
152
+ margin-bottom: 8px;
153
+ border: 1px solid rgba(255,255,255,0.08);
154
+ }
155
+ .mode-btn {
156
+ flex: 1;
157
+ background: none;
158
+ border: none;
159
+ color: #777;
160
+ font-size: 10px;
161
+ padding: 4px 0;
162
+ cursor: pointer;
163
+ border-radius: 6px;
164
+ transition: all 0.18s;
165
+ font-weight: 600;
166
+ letter-spacing: 0.4px;
167
+ }
168
+ .mode-btn.active {
169
+ background: rgba(110,142,251,0.85);
170
+ color: #fff;
171
+ }
172
+ .mode-btn:hover:not(.active) {
173
+ background: rgba(255,255,255,0.08);
174
+ color: #bbb;
175
+ }
176
+
177
+ /* ── Scan buttons ─────────────────────────────────────────────────────── */
178
+ .assistant-btn-row {
179
+ display: flex;
180
+ gap: 6px;
181
+ margin-bottom: 8px;
182
+ }
183
+ .assistant-btn {
184
+ flex: 1;
185
+ background: linear-gradient(135deg, #6e8efb, #a777e3);
186
+ border: none;
187
+ border-radius: 6px;
188
+ color: #fff;
189
+ padding: 6px 8px;
190
+ font-weight: 600;
191
+ font-size: 11px;
192
+ cursor: pointer;
193
+ transition: opacity 0.18s, transform 0.1s;
194
+ }
195
+ .assistant-btn.secondary {
196
+ background: rgba(255,255,255,0.08);
197
+ border: 1px solid rgba(255,255,255,0.12);
198
+ color: #bbb;
199
+ }
200
+ .assistant-btn:hover { opacity: 0.88; transform: translateY(-1px); }
201
201
  .assistant-btn:active { transform: translateY(0); }
202
202
  .assistant-btn:disabled { opacity: 0.5; cursor: wait; transform: none; }
203
203
 
@@ -234,199 +234,199 @@
234
234
  .assistant-auto-btn { flex: 1; padding: 5px 4px; border: 1px solid rgba(16,185,129,0.35); border-radius: 5px; color: #d1fae5; background: rgba(16,185,129,0.12); cursor: pointer; font-size: 9px; font-weight: 700; }
235
235
  .assistant-auto-btn.stop { color: #fecaca; border-color: rgba(248,113,113,0.38); background: rgba(248,113,113,0.08); }
236
236
  .assistant-auto-btn:disabled { opacity: .42; cursor: not-allowed; }
237
-
238
- /* ── Results body ─────────────────────────────────────────────────────── */
239
- .assistant-body {
240
- flex: 1;
241
- overflow-y: auto;
242
- overflow-x: hidden;
243
- min-height: 0;
244
- font-size: 12.5px;
245
- line-height: 1.55;
246
- padding-right: 3px;
247
- user-select: text;
248
- -webkit-user-select: text;
249
- }
250
- .assistant-body::-webkit-scrollbar { width: 3px; }
251
- .assistant-body::-webkit-scrollbar-track { background: transparent; }
252
- .assistant-body::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.18); border-radius: 10px; }
253
-
254
- .assistant-placeholder {
255
- text-align: center;
256
- color: #555;
257
- padding: 20px 0;
258
- font-size: 12px;
259
- line-height: 1.8;
260
- }
261
- .assistant-placeholder kbd {
262
- background: #222;
263
- border: 1px solid #444;
264
- border-radius: 3px;
265
- padding: 1px 4px;
266
- font-size: 10px;
267
- color: #bbb;
268
- }
269
-
270
- /* ── Loading spinner ──────────────────────────────────────────────────── */
271
- .assistant-loading {
272
- text-align: center;
273
- padding: 18px;
274
- color: #888;
275
- font-size: 12px;
276
- display: flex;
277
- flex-direction: column;
278
- align-items: center;
279
- gap: 10px;
280
- }
281
- .assistant-spinner {
282
- width: 20px;
283
- height: 20px;
284
- border: 2px solid rgba(110,142,251,0.25);
285
- border-top-color: #6e8efb;
286
- border-radius: 50%;
287
- animation: spin 0.75s linear infinite;
288
- }
289
- @keyframes spin { to { transform: rotate(360deg); } }
290
-
291
- /* ── Error state ──────────────────────────────────────────────────────── */
292
- .assistant-error {
293
- color: #f87171;
294
- padding: 10px;
295
- font-size: 11.5px;
296
- line-height: 1.5;
297
- background: rgba(239,68,68,0.08);
298
- border-radius: 7px;
299
- border-left: 3px solid #ef4444;
300
- }
301
-
302
- /* ── Provider badge ───────────────────────────────────────────────────── */
303
- .assistant-provider-badge {
304
- font-size: 9.5px;
305
- text-transform: uppercase;
306
- letter-spacing: 0.6px;
307
- color: #6e8efb;
308
- margin-bottom: 6px;
309
- opacity: 0.75;
310
- }
311
-
312
- /* ── MCQ answer card ──────────────────────────────────────────────────── */
313
- .assistant-answer {
314
- background: rgba(255,255,255,0.04);
315
- border-radius: 8px;
316
- padding: 10px;
317
- margin-bottom: 7px;
318
- border-left: 3px solid #6e8efb;
319
- }
320
- .assistant-question-text {
321
- font-weight: 500;
322
- margin-bottom: 4px;
323
- color: #e0e0e0;
324
- font-size: 12px;
325
- }
326
- .assistant-answer-text {
327
- color: #10b981;
328
- font-weight: 700;
329
- font-size: 12.5px;
330
- }
331
-
332
- /* ── Code block ───────────────────────────────────────────────────────── */
333
- .assistant-code-container {
334
- position: relative;
335
- background: #111;
336
- border-radius: 8px;
337
- margin-bottom: 10px;
338
- border: 1px solid rgba(255,255,255,0.08);
339
- }
340
- .assistant-code-header {
341
- display: flex;
342
- justify-content: space-between;
343
- align-items: center;
344
- background: rgba(255,255,255,0.04);
345
- padding: 4px 10px;
346
- border-radius: 8px 8px 0 0;
347
- font-size: 10px;
348
- color: #666;
349
- }
350
- .assistant-code-approach,
351
- .assistant-code-complexity {
352
- padding: 5px 10px 0;
353
- color: #9aa0aa;
354
- font-size: 10px;
355
- line-height: 1.45;
356
- user-select: text;
357
- -webkit-user-select: text;
358
- }
359
- .assistant-code-complexity {
360
- padding-top: 3px;
361
- padding-bottom: 2px;
362
- color: #6f7782;
363
- font-family: 'Fira Code', 'Consolas', monospace;
364
- font-size: 9px;
365
- }
366
- .assistant-code-block {
367
- box-sizing: border-box;
368
- margin: 0;
369
- padding: 10px 12px;
370
- max-width: 100%;
371
- max-height: 240px;
372
- overflow-x: auto;
373
- overflow-y: auto;
374
- font-family: 'Fira Code', 'Consolas', monospace;
375
- font-size: 11.5px;
376
- color: #c9d1d9;
377
- background: transparent;
378
- white-space: pre;
379
- word-break: normal;
380
- overflow-wrap: normal;
381
- min-height: 36px;
382
- scrollbar-width: thin;
383
- scrollbar-color: rgba(255,255,255,0.28) rgba(255,255,255,0.04);
384
- }
385
- .assistant-code-block::-webkit-scrollbar {
386
- width: 8px;
387
- height: 8px;
388
- }
389
- .assistant-code-block::-webkit-scrollbar-track {
390
- background: rgba(255,255,255,0.04);
391
- border-radius: 8px;
392
- }
393
- .assistant-code-block::-webkit-scrollbar-thumb {
394
- background: rgba(255,255,255,0.28);
395
- border: 2px solid #111;
396
- border-radius: 8px;
397
- }
398
- .assistant-code-block::-webkit-scrollbar-thumb:hover {
399
- background: rgba(255,255,255,0.45);
400
- }
401
- .assistant-code-block::-webkit-scrollbar-corner {
402
- background: #111;
403
- }
404
- .assistant-code-block code {
405
- color: inherit;
406
- font: inherit;
407
- white-space: inherit;
408
- word-break: inherit;
409
- overflow-wrap: inherit;
410
- }
411
- .assistant-copy-btn {
412
- background: rgba(255,255,255,0.08);
413
- border: 1px solid rgba(255,255,255,0.15);
414
- border-radius: 4px;
415
- color: #aaa;
416
- cursor: pointer;
417
- font-size: 9.5px;
418
- padding: 2px 7px;
419
- transition: all 0.15s;
420
- }
421
- .assistant-copy-btn:hover { background: rgba(255,255,255,0.16); color: #fff; }
422
- .assistant-copy-btn.copied { border-color: #10b981; color: #10b981; }
423
-
424
- .mode-btn:focus-visible,
425
- .assistant-btn:focus-visible,
426
- .assistant-close:focus-visible,
237
+
238
+ /* ── Results body ─────────────────────────────────────────────────────── */
239
+ .assistant-body {
240
+ flex: 1;
241
+ overflow-y: auto;
242
+ overflow-x: hidden;
243
+ min-height: 0;
244
+ font-size: 12.5px;
245
+ line-height: 1.55;
246
+ padding-right: 3px;
247
+ user-select: text;
248
+ -webkit-user-select: text;
249
+ }
250
+ .assistant-body::-webkit-scrollbar { width: 3px; }
251
+ .assistant-body::-webkit-scrollbar-track { background: transparent; }
252
+ .assistant-body::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.18); border-radius: 10px; }
253
+
254
+ .assistant-placeholder {
255
+ text-align: center;
256
+ color: #555;
257
+ padding: 20px 0;
258
+ font-size: 12px;
259
+ line-height: 1.8;
260
+ }
261
+ .assistant-placeholder kbd {
262
+ background: #222;
263
+ border: 1px solid #444;
264
+ border-radius: 3px;
265
+ padding: 1px 4px;
266
+ font-size: 10px;
267
+ color: #bbb;
268
+ }
269
+
270
+ /* ── Loading spinner ──────────────────────────────────────────────────── */
271
+ .assistant-loading {
272
+ text-align: center;
273
+ padding: 18px;
274
+ color: #888;
275
+ font-size: 12px;
276
+ display: flex;
277
+ flex-direction: column;
278
+ align-items: center;
279
+ gap: 10px;
280
+ }
281
+ .assistant-spinner {
282
+ width: 20px;
283
+ height: 20px;
284
+ border: 2px solid rgba(110,142,251,0.25);
285
+ border-top-color: #6e8efb;
286
+ border-radius: 50%;
287
+ animation: spin 0.75s linear infinite;
288
+ }
289
+ @keyframes spin { to { transform: rotate(360deg); } }
290
+
291
+ /* ── Error state ──────────────────────────────────────────────────────── */
292
+ .assistant-error {
293
+ color: #f87171;
294
+ padding: 10px;
295
+ font-size: 11.5px;
296
+ line-height: 1.5;
297
+ background: rgba(239,68,68,0.08);
298
+ border-radius: 7px;
299
+ border-left: 3px solid #ef4444;
300
+ }
301
+
302
+ /* ── Provider badge ───────────────────────────────────────────────────── */
303
+ .assistant-provider-badge {
304
+ font-size: 9.5px;
305
+ text-transform: uppercase;
306
+ letter-spacing: 0.6px;
307
+ color: #6e8efb;
308
+ margin-bottom: 6px;
309
+ opacity: 0.75;
310
+ }
311
+
312
+ /* ── MCQ answer card ──────────────────────────────────────────────────── */
313
+ .assistant-answer {
314
+ background: rgba(255,255,255,0.04);
315
+ border-radius: 8px;
316
+ padding: 10px;
317
+ margin-bottom: 7px;
318
+ border-left: 3px solid #6e8efb;
319
+ }
320
+ .assistant-question-text {
321
+ font-weight: 500;
322
+ margin-bottom: 4px;
323
+ color: #e0e0e0;
324
+ font-size: 12px;
325
+ }
326
+ .assistant-answer-text {
327
+ color: #10b981;
328
+ font-weight: 700;
329
+ font-size: 12.5px;
330
+ }
331
+
332
+ /* ── Code block ───────────────────────────────────────────────────────── */
333
+ .assistant-code-container {
334
+ position: relative;
335
+ background: #111;
336
+ border-radius: 8px;
337
+ margin-bottom: 10px;
338
+ border: 1px solid rgba(255,255,255,0.08);
339
+ }
340
+ .assistant-code-header {
341
+ display: flex;
342
+ justify-content: space-between;
343
+ align-items: center;
344
+ background: rgba(255,255,255,0.04);
345
+ padding: 4px 10px;
346
+ border-radius: 8px 8px 0 0;
347
+ font-size: 10px;
348
+ color: #666;
349
+ }
350
+ .assistant-code-approach,
351
+ .assistant-code-complexity {
352
+ padding: 5px 10px 0;
353
+ color: #9aa0aa;
354
+ font-size: 10px;
355
+ line-height: 1.45;
356
+ user-select: text;
357
+ -webkit-user-select: text;
358
+ }
359
+ .assistant-code-complexity {
360
+ padding-top: 3px;
361
+ padding-bottom: 2px;
362
+ color: #6f7782;
363
+ font-family: 'Fira Code', 'Consolas', monospace;
364
+ font-size: 9px;
365
+ }
366
+ .assistant-code-block {
367
+ box-sizing: border-box;
368
+ margin: 0;
369
+ padding: 10px 12px;
370
+ max-width: 100%;
371
+ max-height: 240px;
372
+ overflow-x: auto;
373
+ overflow-y: auto;
374
+ font-family: 'Fira Code', 'Consolas', monospace;
375
+ font-size: 11.5px;
376
+ color: #c9d1d9;
377
+ background: transparent;
378
+ white-space: pre;
379
+ word-break: normal;
380
+ overflow-wrap: normal;
381
+ min-height: 36px;
382
+ scrollbar-width: thin;
383
+ scrollbar-color: rgba(255,255,255,0.28) rgba(255,255,255,0.04);
384
+ }
385
+ .assistant-code-block::-webkit-scrollbar {
386
+ width: 8px;
387
+ height: 8px;
388
+ }
389
+ .assistant-code-block::-webkit-scrollbar-track {
390
+ background: rgba(255,255,255,0.04);
391
+ border-radius: 8px;
392
+ }
393
+ .assistant-code-block::-webkit-scrollbar-thumb {
394
+ background: rgba(255,255,255,0.28);
395
+ border: 2px solid #111;
396
+ border-radius: 8px;
397
+ }
398
+ .assistant-code-block::-webkit-scrollbar-thumb:hover {
399
+ background: rgba(255,255,255,0.45);
400
+ }
401
+ .assistant-code-block::-webkit-scrollbar-corner {
402
+ background: #111;
403
+ }
404
+ .assistant-code-block code {
405
+ color: inherit;
406
+ font: inherit;
407
+ white-space: inherit;
408
+ word-break: inherit;
409
+ overflow-wrap: inherit;
410
+ }
411
+ .assistant-copy-btn {
412
+ background: rgba(255,255,255,0.08);
413
+ border: 1px solid rgba(255,255,255,0.15);
414
+ border-radius: 4px;
415
+ color: #aaa;
416
+ cursor: pointer;
417
+ font-size: 9.5px;
418
+ padding: 2px 7px;
419
+ transition: all 0.15s;
420
+ }
421
+ .assistant-copy-btn:hover { background: rgba(255,255,255,0.16); color: #fff; }
422
+ .assistant-copy-btn.copied { border-color: #10b981; color: #10b981; }
423
+
424
+ .mode-btn:focus-visible,
425
+ .assistant-btn:focus-visible,
426
+ .assistant-close:focus-visible,
427
427
  .assistant-copy-btn:focus-visible {
428
- outline: 2px solid #6e8efb;
429
- outline-offset: 2px;
428
+ outline: 2px solid #6e8efb;
429
+ outline-offset: 2px;
430
430
  }
431
431
  .assistant-history-btn:focus-visible,
432
432
  .assistant-history-action:focus-visible,
@@ -435,183 +435,183 @@
435
435
  outline-offset: 2px;
436
436
  }
437
437
  .assistant-auto-btn:focus-visible { outline: 2px solid #6ee7b7; outline-offset: 2px; }
438
-
439
- /* ── Minimal-mode indicator dot ───────────────────────────────────────── */
440
- .assistant-mode-indicator {
441
- position: absolute;
442
- top: -5px;
443
- right: -5px;
444
- background: #ef4444;
445
- color: #fff;
446
- font-size: 7px;
447
- padding: 2px 4px;
448
- border-radius: 10px;
449
- font-weight: bold;
450
- border: 1px solid #fff;
451
- }
452
-
453
- /* ── Reasoning display (collapsible) ──────────────────────────────────── */
454
- .assistant-reasoning {
455
- margin-top: 6px;
456
- border-top: 1px solid rgba(255,255,255,0.1);
457
- padding-top: 4px;
458
- }
459
- .assistant-reasoning summary {
460
- cursor: pointer;
461
- font-size: 10px;
462
- color: #94a3b8;
463
- opacity: 0.7;
464
- transition: opacity 0.2s;
465
- user-select: none;
466
- }
467
- .assistant-reasoning summary:hover {
468
- opacity: 1;
469
- color: #a5b4fc;
470
- }
471
- .assistant-reasoning-text {
472
- margin-top: 4px;
473
- font-size: 10px;
474
- color: #94a3b8;
475
- line-height: 1.5;
476
- white-space: pre-wrap;
477
- word-break: break-word;
478
- max-height: 200px;
479
- overflow-y: auto;
480
- padding: 6px;
481
- background: rgba(0,0,0,0.2);
482
- border-radius: 4px;
483
- }
484
-
485
- /* ── Verified badge ───────────────────────────────────────────────────── */
486
- .assistant-provider-badge.verified {
487
- background: rgba(34, 197, 94, 0.15);
488
- color: #4ade80;
489
- border: 1px solid rgba(34, 197, 94, 0.3);
490
- }
491
-
492
- /* ── Navigation and QA Control refresh ───────────────────────────────── */
493
- .assistant-tab {
494
- width: 332px;
495
- padding: 12px;
496
- background:
497
- radial-gradient(circle at 100% 0%, rgba(110, 142, 251, 0.13), transparent 34%),
498
- rgba(15, 16, 25, 0.94);
499
- border-color: rgba(182, 195, 255, 0.16);
500
- box-shadow: 0 18px 52px rgba(0, 0, 0, 0.58), 0 1px 0 rgba(255, 255, 255, 0.04) inset;
501
- }
502
- .assistant-header { margin-bottom: 10px; }
503
- .assistant-title { font-size: 13px; font-weight: 700; letter-spacing: -0.1px; }
504
- .assistant-header-actions { display: flex; align-items: center; gap: 5px; }
505
- .assistant-icon-btn,
506
- .assistant-close {
507
- display: inline-grid;
508
- place-items: center;
509
- width: 25px;
510
- height: 25px;
511
- padding: 0;
512
- border-radius: 7px;
513
- }
514
- .assistant-icon-btn {
515
- border: 1px solid transparent;
516
- background: transparent;
517
- color: #aeb8d8;
518
- cursor: pointer;
519
- transition: color .16s ease, background .16s ease, border-color .16s ease, transform .16s ease;
520
- }
521
- .assistant-icon-btn svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
522
- .assistant-icon-btn:hover { color: #e6eaff; background: rgba(130, 149, 236, .13); border-color: rgba(150, 168, 255, .16); transform: translateY(-1px); }
523
- .assistant-close { color: #8e96ad; }
524
- .assistant-close:hover { color: #fff; background: rgba(255,255,255,.08); }
525
-
526
- .assistant-mode-switcher {
527
- display: grid;
528
- grid-template-columns: repeat(4, minmax(0, 1fr)) minmax(72px, 1.45fr);
529
- gap: 2px;
530
- padding: 3px;
531
- margin-bottom: 10px;
532
- background: rgba(255,255,255,0.045);
533
- border-color: rgba(184, 196, 255, 0.12);
534
- border-radius: 9px;
535
- }
536
- .mode-btn {
537
- min-width: 0;
538
- min-height: 28px;
539
- padding: 4px 2px;
540
- color: #8790aa;
541
- font-size: 8.5px;
542
- font-weight: 750;
543
- line-height: 1.05;
544
- letter-spacing: .25px;
545
- }
546
- .mode-btn.active {
547
- background: linear-gradient(135deg, #708dff, #9067e4);
548
- color: white;
549
- box-shadow: 0 3px 10px rgba(99, 122, 255, .25);
550
- }
551
- .mode-btn.qa-tab { color: #8baaa8; font-size: 8px; }
552
- .mode-btn.qa-tab.active {
553
- background: linear-gradient(135deg, #0f9f8c, #16b889);
554
- box-shadow: 0 3px 10px rgba(16, 185, 145, .23);
555
- color: #f1fffb;
556
- }
557
- .mode-btn:hover:not(.active) { color: #d7ddf2; background: rgba(255,255,255,.075); }
558
- .mode-btn:focus-visible,
559
- .assistant-icon-btn:focus-visible,
560
- .assistant-close:focus-visible,
561
- .assistant-auto-btn:focus-visible { outline: 2px solid #8fa5ff; outline-offset: 2px; }
562
-
563
- .assistant-scan-panel { display: flex; min-height: 0; flex: 1; flex-direction: column; }
564
- .assistant-btn-row { gap: 7px; margin-bottom: 10px; }
565
- .assistant-btn { min-height: 32px; border-radius: 8px; font-size: 10.5px; box-shadow: 0 5px 14px rgba(100, 116, 255, .18); }
566
- .assistant-btn.secondary { color: #d2d7e7; background: rgba(255,255,255,.065); }
567
-
568
- .assistant-qa-panel {
569
- flex: 1;
570
- min-height: 0;
571
- overflow-y: auto;
572
- padding: 10px;
573
- border: 1px solid rgba(45, 211, 168, .22);
574
- border-radius: 10px;
575
- background: linear-gradient(145deg, rgba(16,185,129,.095), rgba(15,23,42,.22) 54%);
576
- }
577
- .assistant-qa-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; margin-bottom: 7px; }
578
- .assistant-eyebrow { margin: 0 0 2px; color: #61d9ba; font-size: 8px; font-weight: 800; letter-spacing: .75px; }
579
- .assistant-qa-heading h4 { margin: 0; color: #f0fffa; font-size: 13px; line-height: 1.2; }
580
- .assistant-qa-state {
581
- max-width: 128px;
582
- overflow: hidden;
583
- text-overflow: ellipsis;
584
- white-space: nowrap;
585
- padding: 4px 6px;
586
- border: 1px solid rgba(111, 231, 192, .26);
587
- border-radius: 999px;
588
- background: rgba(16,185,129,.12);
589
- color: #a7f3d0;
590
- font-size: 8px;
591
- font-weight: 800;
592
- letter-spacing: .35px;
593
- }
594
- .assistant-qa-state::before { content: '●'; margin-right: 4px; color: #52e0b6; }
595
- .assistant-qa-state[data-state="error"]::before,
596
- .assistant-qa-state[data-state="unauthorized"]::before { color: #fb7185; }
597
- .assistant-qa-state[data-state="paused"]::before { color: #fbbf24; }
598
- .assistant-automation-status { margin: 0 0 9px; color: #bad8cf; font-size: 9px; line-height: 1.4; }
599
- .assistant-qa-details { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 0 0 8px; }
600
- .assistant-qa-details > div { min-width: 0; padding: 7px; border: 1px solid rgba(255,255,255,.07); border-radius: 7px; background: rgba(2, 12, 16, .25); }
601
- .assistant-qa-details .assistant-qa-wide { grid-column: 1 / -1; }
602
- .assistant-qa-details dt { margin-bottom: 2px; color: #7d98a1; font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .35px; }
603
- .assistant-qa-details dd { margin: 0; overflow: hidden; color: #e0f3eb; font-size: 10px; font-weight: 650; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
604
- .assistant-qa-latest { margin: 0 0 8px; padding: 7px; border-left: 2px solid #35c99b; border-radius: 0 6px 6px 0; background: rgba(16,185,129,.08); color: #b7d8cb; font-size: 9.5px; line-height: 1.4; }
605
- .assistant-qa-latest.has-error { border-left-color: #fb7185; background: rgba(251,113,133,.09); color: #fecdd3; }
606
- .assistant-qa-actions { margin: 0; gap: 5px; }
607
- .assistant-auto-btn { min-height: 29px; padding: 5px 6px; border-radius: 7px; font-size: 8.5px; transition: transform .12s ease, background .12s ease, opacity .12s ease; }
608
- .assistant-auto-btn.start { flex: 1.55; background: linear-gradient(135deg, #0e9f7e, #16b889); border-color: rgba(135,255,215,.32); color: #f1fffb; }
609
- .assistant-auto-btn:hover:not(:disabled) { transform: translateY(-1px); background: rgba(41, 211, 163, .24); }
610
- .assistant-auto-btn.start:hover:not(:disabled) { background: linear-gradient(135deg, #0fb68e, #21c899); }
611
- .assistant-auto-btn.stop:hover:not(:disabled) { background: rgba(248,113,113,.18); }
612
-
613
- @media (max-width: 390px) {
614
- .assistant-tab { width: min(332px, calc(100vw - 20px)); }
615
- .mode-btn { font-size: 8px; }
616
- .mode-btn.qa-tab { font-size: 7.5px; }
617
- }
438
+
439
+ /* ── Minimal-mode indicator dot ───────────────────────────────────────── */
440
+ .assistant-mode-indicator {
441
+ position: absolute;
442
+ top: -5px;
443
+ right: -5px;
444
+ background: #ef4444;
445
+ color: #fff;
446
+ font-size: 7px;
447
+ padding: 2px 4px;
448
+ border-radius: 10px;
449
+ font-weight: bold;
450
+ border: 1px solid #fff;
451
+ }
452
+
453
+ /* ── Reasoning display (collapsible) ──────────────────────────────────── */
454
+ .assistant-reasoning {
455
+ margin-top: 6px;
456
+ border-top: 1px solid rgba(255,255,255,0.1);
457
+ padding-top: 4px;
458
+ }
459
+ .assistant-reasoning summary {
460
+ cursor: pointer;
461
+ font-size: 10px;
462
+ color: #94a3b8;
463
+ opacity: 0.7;
464
+ transition: opacity 0.2s;
465
+ user-select: none;
466
+ }
467
+ .assistant-reasoning summary:hover {
468
+ opacity: 1;
469
+ color: #a5b4fc;
470
+ }
471
+ .assistant-reasoning-text {
472
+ margin-top: 4px;
473
+ font-size: 10px;
474
+ color: #94a3b8;
475
+ line-height: 1.5;
476
+ white-space: pre-wrap;
477
+ word-break: break-word;
478
+ max-height: 200px;
479
+ overflow-y: auto;
480
+ padding: 6px;
481
+ background: rgba(0,0,0,0.2);
482
+ border-radius: 4px;
483
+ }
484
+
485
+ /* ── Verified badge ───────────────────────────────────────────────────── */
486
+ .assistant-provider-badge.verified {
487
+ background: rgba(34, 197, 94, 0.15);
488
+ color: #4ade80;
489
+ border: 1px solid rgba(34, 197, 94, 0.3);
490
+ }
491
+
492
+ /* ── Navigation and QA Control refresh ───────────────────────────────── */
493
+ .assistant-tab {
494
+ width: 332px;
495
+ padding: 12px;
496
+ background:
497
+ radial-gradient(circle at 100% 0%, rgba(110, 142, 251, 0.13), transparent 34%),
498
+ rgba(15, 16, 25, 0.94);
499
+ border-color: rgba(182, 195, 255, 0.16);
500
+ box-shadow: 0 18px 52px rgba(0, 0, 0, 0.58), 0 1px 0 rgba(255, 255, 255, 0.04) inset;
501
+ }
502
+ .assistant-header { margin-bottom: 10px; }
503
+ .assistant-title { font-size: 13px; font-weight: 700; letter-spacing: -0.1px; }
504
+ .assistant-header-actions { display: flex; align-items: center; gap: 5px; }
505
+ .assistant-icon-btn,
506
+ .assistant-close {
507
+ display: inline-grid;
508
+ place-items: center;
509
+ width: 25px;
510
+ height: 25px;
511
+ padding: 0;
512
+ border-radius: 7px;
513
+ }
514
+ .assistant-icon-btn {
515
+ border: 1px solid transparent;
516
+ background: transparent;
517
+ color: #aeb8d8;
518
+ cursor: pointer;
519
+ transition: color .16s ease, background .16s ease, border-color .16s ease, transform .16s ease;
520
+ }
521
+ .assistant-icon-btn svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
522
+ .assistant-icon-btn:hover { color: #e6eaff; background: rgba(130, 149, 236, .13); border-color: rgba(150, 168, 255, .16); transform: translateY(-1px); }
523
+ .assistant-close { color: #8e96ad; }
524
+ .assistant-close:hover { color: #fff; background: rgba(255,255,255,.08); }
525
+
526
+ .assistant-mode-switcher {
527
+ display: grid;
528
+ grid-template-columns: repeat(4, minmax(0, 1fr)) minmax(72px, 1.45fr);
529
+ gap: 2px;
530
+ padding: 3px;
531
+ margin-bottom: 10px;
532
+ background: rgba(255,255,255,0.045);
533
+ border-color: rgba(184, 196, 255, 0.12);
534
+ border-radius: 9px;
535
+ }
536
+ .mode-btn {
537
+ min-width: 0;
538
+ min-height: 28px;
539
+ padding: 4px 2px;
540
+ color: #8790aa;
541
+ font-size: 8.5px;
542
+ font-weight: 750;
543
+ line-height: 1.05;
544
+ letter-spacing: .25px;
545
+ }
546
+ .mode-btn.active {
547
+ background: linear-gradient(135deg, #708dff, #9067e4);
548
+ color: white;
549
+ box-shadow: 0 3px 10px rgba(99, 122, 255, .25);
550
+ }
551
+ .mode-btn.qa-tab { color: #8baaa8; font-size: 8px; }
552
+ .mode-btn.qa-tab.active {
553
+ background: linear-gradient(135deg, #0f9f8c, #16b889);
554
+ box-shadow: 0 3px 10px rgba(16, 185, 145, .23);
555
+ color: #f1fffb;
556
+ }
557
+ .mode-btn:hover:not(.active) { color: #d7ddf2; background: rgba(255,255,255,.075); }
558
+ .mode-btn:focus-visible,
559
+ .assistant-icon-btn:focus-visible,
560
+ .assistant-close:focus-visible,
561
+ .assistant-auto-btn:focus-visible { outline: 2px solid #8fa5ff; outline-offset: 2px; }
562
+
563
+ .assistant-scan-panel { display: flex; min-height: 0; flex: 1; flex-direction: column; }
564
+ .assistant-btn-row { gap: 7px; margin-bottom: 10px; }
565
+ .assistant-btn { min-height: 32px; border-radius: 8px; font-size: 10.5px; box-shadow: 0 5px 14px rgba(100, 116, 255, .18); }
566
+ .assistant-btn.secondary { color: #d2d7e7; background: rgba(255,255,255,.065); }
567
+
568
+ .assistant-qa-panel {
569
+ flex: 1;
570
+ min-height: 0;
571
+ overflow-y: auto;
572
+ padding: 10px;
573
+ border: 1px solid rgba(45, 211, 168, .22);
574
+ border-radius: 10px;
575
+ background: linear-gradient(145deg, rgba(16,185,129,.095), rgba(15,23,42,.22) 54%);
576
+ }
577
+ .assistant-qa-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; margin-bottom: 7px; }
578
+ .assistant-eyebrow { margin: 0 0 2px; color: #61d9ba; font-size: 8px; font-weight: 800; letter-spacing: .75px; }
579
+ .assistant-qa-heading h4 { margin: 0; color: #f0fffa; font-size: 13px; line-height: 1.2; }
580
+ .assistant-qa-state {
581
+ max-width: 128px;
582
+ overflow: hidden;
583
+ text-overflow: ellipsis;
584
+ white-space: nowrap;
585
+ padding: 4px 6px;
586
+ border: 1px solid rgba(111, 231, 192, .26);
587
+ border-radius: 999px;
588
+ background: rgba(16,185,129,.12);
589
+ color: #a7f3d0;
590
+ font-size: 8px;
591
+ font-weight: 800;
592
+ letter-spacing: .35px;
593
+ }
594
+ .assistant-qa-state::before { content: '●'; margin-right: 4px; color: #52e0b6; }
595
+ .assistant-qa-state[data-state="error"]::before,
596
+ .assistant-qa-state[data-state="unauthorized"]::before { color: #fb7185; }
597
+ .assistant-qa-state[data-state="paused"]::before { color: #fbbf24; }
598
+ .assistant-automation-status { margin: 0 0 9px; color: #bad8cf; font-size: 9px; line-height: 1.4; }
599
+ .assistant-qa-details { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 0 0 8px; }
600
+ .assistant-qa-details > div { min-width: 0; padding: 7px; border: 1px solid rgba(255,255,255,.07); border-radius: 7px; background: rgba(2, 12, 16, .25); }
601
+ .assistant-qa-details .assistant-qa-wide { grid-column: 1 / -1; }
602
+ .assistant-qa-details dt { margin-bottom: 2px; color: #7d98a1; font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .35px; }
603
+ .assistant-qa-details dd { margin: 0; overflow: hidden; color: #e0f3eb; font-size: 10px; font-weight: 650; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
604
+ .assistant-qa-latest { margin: 0 0 8px; padding: 7px; border-left: 2px solid #35c99b; border-radius: 0 6px 6px 0; background: rgba(16,185,129,.08); color: #b7d8cb; font-size: 9.5px; line-height: 1.4; }
605
+ .assistant-qa-latest.has-error { border-left-color: #fb7185; background: rgba(251,113,133,.09); color: #fecdd3; }
606
+ .assistant-qa-actions { margin: 0; gap: 5px; }
607
+ .assistant-auto-btn { min-height: 29px; padding: 5px 6px; border-radius: 7px; font-size: 8.5px; transition: transform .12s ease, background .12s ease, opacity .12s ease; }
608
+ .assistant-auto-btn.start { flex: 1.55; background: linear-gradient(135deg, #0e9f7e, #16b889); border-color: rgba(135,255,215,.32); color: #f1fffb; }
609
+ .assistant-auto-btn:hover:not(:disabled) { transform: translateY(-1px); background: rgba(41, 211, 163, .24); }
610
+ .assistant-auto-btn.start:hover:not(:disabled) { background: linear-gradient(135deg, #0fb68e, #21c899); }
611
+ .assistant-auto-btn.stop:hover:not(:disabled) { background: rgba(248,113,113,.18); }
612
+
613
+ @media (max-width: 390px) {
614
+ .assistant-tab { width: min(332px, calc(100vw - 20px)); }
615
+ .mode-btn { font-size: 8px; }
616
+ .mode-btn.qa-tab { font-size: 7.5px; }
617
+ }