beast-agent 0.15.0

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 (62) hide show
  1. package/.env.example +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +94 -0
  4. package/assets/app.ico +0 -0
  5. package/assets/tray.png +0 -0
  6. package/bin/beast-agent.js +23 -0
  7. package/config.example.yaml +26 -0
  8. package/eng.traineddata +0 -0
  9. package/package.json +101 -0
  10. package/scripts/swap-electron.js +40 -0
  11. package/src/agent/bus.js +384 -0
  12. package/src/agent/computeruse.js +200 -0
  13. package/src/agent/config.js +284 -0
  14. package/src/agent/engine.js +3118 -0
  15. package/src/agent/kb.js +123 -0
  16. package/src/agent/llm.js +219 -0
  17. package/src/agent/logger.js +90 -0
  18. package/src/agent/memory.js +383 -0
  19. package/src/agent/pdf.js +20 -0
  20. package/src/agent/scripts/__pycache__/websearch.cpython-312.pyc +0 -0
  21. package/src/agent/scripts/news.py +113 -0
  22. package/src/agent/scripts/websearch.py +225 -0
  23. package/src/agent/skills.js +522 -0
  24. package/src/agent/tokens.js +39 -0
  25. package/src/agent/tools.js +911 -0
  26. package/src/agent/usage.js +125 -0
  27. package/src/agent/watchers.js +312 -0
  28. package/src/agent/watext.js +75 -0
  29. package/src/agent/whatsapp.js +494 -0
  30. package/src/cron.js +245 -0
  31. package/src/main.js +3622 -0
  32. package/src/preload.js +122 -0
  33. package/src/renderer/browserPreload.js +73 -0
  34. package/src/renderer/i18n.js +757 -0
  35. package/src/renderer/index.html +227 -0
  36. package/src/renderer/renderer.js +3250 -0
  37. package/src/renderer/style.css +1559 -0
  38. package/tests/approval.test.js +56 -0
  39. package/tests/bg-jobs.test.js +315 -0
  40. package/tests/bus.test.js +46 -0
  41. package/tests/computeruse-context.test.js +69 -0
  42. package/tests/cron.test.js +95 -0
  43. package/tests/engine.test.js +140 -0
  44. package/tests/eval.test.js +91 -0
  45. package/tests/fallout.test.js +188 -0
  46. package/tests/llm.test.js +56 -0
  47. package/tests/memory.test.js +33 -0
  48. package/tests/memoryloop.test.js +26 -0
  49. package/tests/notegen.test.js +63 -0
  50. package/tests/owner.test.js +32 -0
  51. package/tests/python.test.js +75 -0
  52. package/tests/scenarios.json +81 -0
  53. package/tests/sessioncode.test.js +50 -0
  54. package/tests/setup.js +9 -0
  55. package/tests/tokens.test.js +42 -0
  56. package/tests/tools.test.js +84 -0
  57. package/tests/usage.test.js +44 -0
  58. package/tests/v11.test.js +76 -0
  59. package/tests/watchers.test.js +206 -0
  60. package/tests/watext.test.js +53 -0
  61. package/tests/whatsapp.test.js +103 -0
  62. package/tests/wherewasi.test.js +40 -0
@@ -0,0 +1,1559 @@
1
+ /* Beast Agent — monokrom tema: siyah + füme + beyaz */
2
+
3
+ :root {
4
+ --bg: #f7f7f8;
5
+ --panel: #f0f0f2;
6
+ --panel2: #e8e8ea;
7
+ --border: #d8d8dc;
8
+ --text: #131315;
9
+ --muted: #707078;
10
+ --accent: #131315;
11
+ --accent-dim: rgba(19, 19, 21, 0.07);
12
+ --ok: #4a4a52;
13
+ --err: #26262a;
14
+ --accent-contrast: #ffffff;
15
+ }
16
+
17
+ /* koyu tema — aynı 3 renk felsefesi */
18
+ body.dark {
19
+ --bg: #0d0d0f;
20
+ --panel: #161618;
21
+ --panel2: #1e1e21;
22
+ --border: #2c2c30;
23
+ --text: #e8e8ea;
24
+ --muted: #8a8a92;
25
+ --accent: #e8e8ea;
26
+ --accent-dim: rgba(232, 232, 234, 0.08);
27
+ --ok: #b4b4ba;
28
+ --err: #d4d4d8;
29
+ --accent-contrast: #131315;
30
+ }
31
+
32
+ /* ---------- rol modelleri ---------- */
33
+ .role-row {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 10px;
37
+ margin-bottom: 10px;
38
+ }
39
+ .role-label {
40
+ min-width: 110px;
41
+ font-size: 13px;
42
+ color: var(--text);
43
+ opacity: 0.9;
44
+ }
45
+ .role-select {
46
+ flex: 1;
47
+ background: var(--panel2);
48
+ color: var(--text);
49
+ border: 1px solid var(--border);
50
+ padding: 6px 8px;
51
+ font-size: 13px;
52
+ border-radius: 4px;
53
+ }
54
+ .role-select:focus {
55
+ outline: none;
56
+ border-color: var(--accent);
57
+ }
58
+
59
+ * { box-sizing: border-box; margin: 0; padding: 0; }
60
+
61
+ html, body { height: 100%; }
62
+
63
+ body {
64
+ font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
65
+ background: var(--bg);
66
+ color: var(--text);
67
+ font-size: 14px;
68
+ overflow: hidden;
69
+ }
70
+
71
+ #app { display: flex; height: 100vh; }
72
+
73
+ /* ---------- sidebar ---------- */
74
+
75
+ #sidebar {
76
+ flex: none;
77
+ width: 250px;
78
+ min-width: 250px;
79
+ background: var(--panel);
80
+ border-right: 1px solid var(--border);
81
+ display: flex;
82
+ flex-direction: column;
83
+ }
84
+
85
+ #brand {
86
+ padding: 18px 16px 12px;
87
+ letter-spacing: 3px;
88
+ font-weight: 800;
89
+ text-align: center;
90
+ -webkit-app-region: drag;
91
+ }
92
+ .brand-beast { color: var(--accent); font-size: 17px; }
93
+ .brand-sub { color: var(--muted); font-size: 11px; margin-left: 6px; letter-spacing: 2px; }
94
+
95
+ #newChat {
96
+ margin: 4px 12px 10px;
97
+ padding: 8px 10px;
98
+ background: var(--accent-dim);
99
+ color: var(--accent);
100
+ border: 1px solid rgba(19, 19, 21, 0.35);
101
+ border-radius: 8px;
102
+ cursor: pointer;
103
+ font-weight: 600;
104
+ transition: background 0.15s;
105
+ }
106
+ #newChat:hover { background: rgba(19, 19, 21, 0.14); }
107
+
108
+ #sessList { flex: 1; overflow-y: auto; padding: 4px 8px; }
109
+
110
+ .sess {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 6px;
114
+ padding: 7px 9px;
115
+ border-radius: 7px;
116
+ cursor: pointer;
117
+ color: var(--muted);
118
+ margin-bottom: 2px;
119
+ }
120
+ .sess:hover { background: var(--panel2); color: var(--text); }
121
+ .sess.active { background: var(--panel2); color: var(--text); box-shadow: inset 2px 0 0 var(--accent); }
122
+ .sess-wa {
123
+ width: 15px;
124
+ height: 15px;
125
+ border-radius: 4px;
126
+ background: #131315;
127
+ color: #fff;
128
+ font-size: 10px;
129
+ font-weight: 800;
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ flex-shrink: 0;
134
+ }
135
+ .sess-title { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 13px; }
136
+ .sess-code {
137
+ color: var(--muted);
138
+ font-size: 10.5px;
139
+ font-weight: 700;
140
+ letter-spacing: 0.04em;
141
+ border: 1px solid var(--border);
142
+ border-radius: 6px;
143
+ padding: 1px 5px;
144
+ }
145
+ .sess-del {
146
+ visibility: hidden;
147
+ border: none; background: none; color: var(--muted);
148
+ cursor: pointer; font-size: 13px; padding: 0 3px; border-radius: 4px;
149
+ }
150
+ .sess:hover .sess-del { visibility: visible; }
151
+ .sess-del:hover { color: var(--err); background: rgba(19, 19, 21, 0.08); }
152
+
153
+ #sideFoot {
154
+ padding: 4px 6px;
155
+ color: var(--muted);
156
+ font-size: 11px;
157
+ border-top: 1px solid var(--border);
158
+ display: flex;
159
+ align-items: center;
160
+ justify-content: center;
161
+ gap: 0;
162
+ }
163
+
164
+ #gearBtn,
165
+ #themeBtn,
166
+ #langBtn {
167
+ background: none;
168
+ border: none;
169
+ color: var(--muted);
170
+ font-size: 15px;
171
+ cursor: pointer;
172
+ padding: 3px 7px;
173
+ border-radius: 5px;
174
+ line-height: 1;
175
+ letter-spacing: 0.5px;
176
+ }
177
+ #gearBtn:hover,
178
+ #themeBtn:hover,
179
+ #langBtn:hover { background: var(--panel2); color: var(--text); }
180
+
181
+ /* model refresh butonu — çekerken döner */
182
+ #modelRefreshBtn.spin { opacity: .7; pointer-events: none; }
183
+ #modelRefreshBtn.spin { animation: beast-spin 0.9s linear infinite; }
184
+ @keyframes beast-spin { to { transform: rotate(360deg); } }
185
+
186
+ /* ---------- cron modülü (ayarlar sekmesi) ---------- */
187
+
188
+ #cronForm {
189
+ display: flex;
190
+ flex-direction: column;
191
+ gap: 8px;
192
+ margin-bottom: 14px;
193
+ }
194
+ #cronName, #cronSchedule, #cronPrompt {
195
+ background: var(--bg);
196
+ border: 1px solid var(--border);
197
+ color: var(--text);
198
+ border-radius: 8px;
199
+ padding: 7px 10px;
200
+ font-size: 13px;
201
+ outline: none;
202
+ font-family: inherit;
203
+ }
204
+ #cronName:focus, #cronSchedule:focus, #cronPrompt:focus { border-color: var(--accent); }
205
+ #cronPrompt { resize: vertical; min-height: 56px; }
206
+ #cronSchedRow { display: flex; gap: 8px; }
207
+ #cronPreset, #cronSchedule { flex: 1; }
208
+ #cronAddBtn {
209
+ align-self: flex-end;
210
+ background: var(--accent-dim);
211
+ color: var(--accent);
212
+ border: 1px solid var(--border);
213
+ border-radius: 8px;
214
+ padding: 6px 14px;
215
+ font-weight: 700;
216
+ cursor: pointer;
217
+ }
218
+ #cronAddBtn:hover { background: rgba(19, 19, 21, 0.14); }
219
+
220
+ #cronList { max-height: 46vh; overflow-y: auto; }
221
+ .cron-empty { color: var(--muted); font-size: 12.5px; text-align: center; padding: 22px 0; }
222
+ .cron-job {
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: space-between;
226
+ gap: 10px;
227
+ padding: 9px 10px;
228
+ border-radius: 9px;
229
+ margin-bottom: 3px;
230
+ }
231
+ .cron-job:hover { background: var(--panel2); }
232
+ .cron-job.off .cj-name, .cron-job.off .cj-meta { opacity: 0.45; }
233
+ .cj-main { display: flex; align-items: center; gap: 9px; min-width: 0; }
234
+ .cj-dot {
235
+ flex-shrink: 0;
236
+ width: 9px; height: 9px; border-radius: 50%;
237
+ background: var(--ok, #2e9e5b);
238
+ cursor: pointer;
239
+ }
240
+ .cron-job.off .cj-dot { background: var(--muted); }
241
+ .cj-info { min-width: 0; }
242
+ .cj-name { font-weight: 700; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
243
+ .cj-meta { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
244
+ .cj-meta code { font-family: ui-monospace, Consolas, monospace; font-size: 11px; }
245
+ .cj-btns { display: flex; gap: 4px; flex-shrink: 0; }
246
+ .cj-btns button {
247
+ background: none; border: none; color: var(--muted);
248
+ cursor: pointer; font-size: 12px; padding: 4px 7px; border-radius: 6px;
249
+ }
250
+ .cj-btns button:hover { background: var(--panel); color: var(--text); }
251
+ .cj-btns button:last-child:hover { color: var(--err); }
252
+
253
+ /* ---------- main ---------- */
254
+
255
+ #main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
256
+
257
+ /* dahili tarayıcı açıkken sağ tarafı boşalt */
258
+ body.browser-open #app { margin-right: var(--bw, 480px); }
259
+ body.browser-open #topbar { width: auto; }
260
+
261
+ #browserBtn.on { background: var(--accent-dim); color: var(--accent); }
262
+ #eyeBtn.on { background: var(--accent-dim); color: var(--accent); }
263
+
264
+ /* #19 sağ panel (paralel ajan konsolu) aç/kapa */
265
+ #railBtn.on { background: var(--accent-dim); color: var(--accent); }
266
+ body.rail-hidden #rail { display: none; }
267
+
268
+ #browserBar {
269
+ position: fixed;
270
+ top: 0;
271
+ right: 0;
272
+ width: var(--bw, 480px);
273
+ height: 46px;
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 4px;
277
+ padding: 0 148px 0 8px;
278
+ background: var(--panel);
279
+ border-bottom: 1px solid var(--border);
280
+ z-index: 50;
281
+ }
282
+ #browserBar[hidden] { display: none; }
283
+ #browserBar button {
284
+ background: none;
285
+ border: none;
286
+ color: var(--muted);
287
+ font-size: 15px;
288
+ cursor: pointer;
289
+ padding: 3px 7px;
290
+ border-radius: 6px;
291
+ line-height: 1;
292
+ }
293
+ #browserBar button:hover { background: var(--panel2); color: var(--text); }
294
+ #bbUrl {
295
+ flex: 1;
296
+ min-width: 0;
297
+ background: var(--bg);
298
+ border: 1px solid var(--border);
299
+ color: var(--text);
300
+ border-radius: 7px;
301
+ padding: 5px 9px;
302
+ font-size: 12px;
303
+ outline: none;
304
+ }
305
+ #bbUrl:focus { border-color: var(--accent); }
306
+ #bbClose:hover { color: var(--err); }
307
+
308
+ /* sürükle-boyutlandır tutamacı (görünmez) */
309
+ #bbResize {
310
+ position: fixed;
311
+ top: 46px;
312
+ right: var(--bw, 480px);
313
+ width: 8px;
314
+ height: calc(100vh - 46px);
315
+ cursor: col-resize;
316
+ z-index: 60;
317
+ }
318
+ body.bb-dragging { user-select: none; }
319
+ body.bb-dragging * { cursor: col-resize !important; }
320
+
321
+ /* ---------- terminal panel (sağ dock — tarayıcı gibi) ---------- */
322
+
323
+ #termBtn.on { background: var(--accent-dim); color: var(--accent); }
324
+
325
+ body.term-open #app { margin-right: var(--tw, 520px); }
326
+ body.term-open #topbar { width: auto; }
327
+
328
+ #termPanel {
329
+ position: fixed;
330
+ top: 0;
331
+ right: 0;
332
+ bottom: 0;
333
+ width: var(--tw, 520px);
334
+ display: flex;
335
+ flex-direction: column;
336
+ background: var(--panel);
337
+ border-left: 1px solid var(--border);
338
+ z-index: 55;
339
+ }
340
+ #termPanel[hidden] { display: none; }
341
+
342
+ #termHead {
343
+ height: 46px;
344
+ flex: none;
345
+ display: flex;
346
+ align-items: center;
347
+ gap: 8px;
348
+ padding: 0 10px;
349
+ border-bottom: 1px solid var(--border);
350
+ }
351
+ #termTitle { font-size: 11px; font-weight: 800; letter-spacing: 1px; color: var(--accent); flex: none; }
352
+ #termCwd {
353
+ color: var(--muted);
354
+ font-family: Consolas, monospace;
355
+ font-size: 11px;
356
+ min-width: 0;
357
+ overflow: hidden;
358
+ text-overflow: ellipsis;
359
+ white-space: nowrap;
360
+ }
361
+ .term-spacer { flex: 1; }
362
+ #termHead button {
363
+ background: none;
364
+ border: none;
365
+ color: var(--muted);
366
+ font-size: 12px;
367
+ cursor: pointer;
368
+ padding: 3px 7px;
369
+ border-radius: 6px;
370
+ line-height: 1;
371
+ flex: none;
372
+ }
373
+ #termHead button:hover { background: var(--panel2); color: var(--text); }
374
+ #termClose:hover { color: var(--err); }
375
+
376
+ #termBody {
377
+ flex: 1;
378
+ overflow-y: auto;
379
+ background: var(--bg);
380
+ padding: 8px 10px;
381
+ }
382
+ #termOut {
383
+ font-family: Consolas, "Cascadia Mono", monospace;
384
+ font-size: 12px;
385
+ line-height: 1.55;
386
+ }
387
+ .t-line { white-space: pre-wrap; word-break: break-all; color: var(--text); }
388
+ .t-time { color: var(--muted); font-size: 10.5px; }
389
+ .t-sys { color: var(--muted); }
390
+ .t-cmd { color: var(--text); font-weight: 700; }
391
+ .t-agent { color: var(--accent); }
392
+ .t-out { opacity: 0.85; }
393
+ .t-err { color: var(--err); }
394
+ .t-dim { color: var(--muted); }
395
+
396
+ #termInputRow {
397
+ flex: none;
398
+ display: flex;
399
+ align-items: center;
400
+ gap: 6px;
401
+ padding: 8px 10px;
402
+ border-top: 1px solid var(--border);
403
+ }
404
+ #termPrompt { color: var(--accent); font-family: Consolas, monospace; font-size: 12px; font-weight: 700; flex: none; }
405
+ #termInput {
406
+ flex: 1;
407
+ min-width: 0;
408
+ background: var(--bg);
409
+ border: 1px solid var(--border);
410
+ color: var(--text);
411
+ border-radius: 7px;
412
+ padding: 6px 9px;
413
+ font-family: Consolas, monospace;
414
+ font-size: 12px;
415
+ outline: none;
416
+ }
417
+ #termInput:focus { border-color: var(--accent); }
418
+ #termStop {
419
+ flex: none;
420
+ background: none;
421
+ border: 1px solid var(--border);
422
+ color: var(--err);
423
+ border-radius: 7px;
424
+ cursor: pointer;
425
+ font-size: 11px;
426
+ padding: 4px 8px;
427
+ line-height: 1;
428
+ }
429
+ #termStop[hidden] { display: none; }
430
+ #termStop:hover { border-color: var(--err); }
431
+
432
+ #termResize {
433
+ position: fixed;
434
+ top: 0;
435
+ right: var(--tw, 520px);
436
+ width: 8px;
437
+ height: 100vh;
438
+ cursor: col-resize;
439
+ z-index: 60;
440
+ }
441
+ body.term-dragging { user-select: none; }
442
+ body.term-dragging * { cursor: col-resize !important; }
443
+
444
+ body.term-open .mini-overlay { right: var(--tw, 520px); }
445
+ body.term-open #settingsOverlay { right: var(--tw, 520px); }
446
+
447
+ #topbar {
448
+ height: 46px;
449
+ display: flex;
450
+ align-items: center;
451
+ gap: 8px;
452
+ padding: 0 12px;
453
+ border-bottom: 1px solid var(--border);
454
+ background: var(--bg);
455
+ }
456
+ .drag-spacer { flex: 1; height: 100%; -webkit-app-region: drag; }
457
+
458
+ /* dropdown model picker */
459
+ .dd { position: relative; -webkit-app-region: no-drag; }
460
+ .dd-btn {
461
+ display: flex;
462
+ align-items: center;
463
+ gap: 7px;
464
+ background: var(--panel2);
465
+ color: var(--text);
466
+ border: 1px solid var(--border);
467
+ border-radius: 7px;
468
+ padding: 6px 11px;
469
+ font-size: 12.5px;
470
+ max-width: 360px;
471
+ cursor: pointer;
472
+ }
473
+ .dd-btn:hover { border-color: var(--accent); }
474
+ #modelBtnLabel { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
475
+ #thinkMenu { width: 250px; }
476
+ #thinkMenu .dd-list { overflow-x: hidden; }
477
+ #thinkMenu .dd-item { overflow: hidden; }
478
+ #thinkBtnLabel { white-space: nowrap; }
479
+ .think-lv { display: flex; align-items: center; gap: 8px; width: 100%; min-width: 0; }
480
+ .think-lv .ck { display: none !important; }
481
+ .think-lv .tv { width: 14px; color: var(--muted); font-family: Consolas, monospace; font-size: 11px; flex: none; }
482
+ .think-lv .tl { font-weight: 700; font-size: 12.5px; flex: none; }
483
+ .think-lv .td {
484
+ margin-left: auto;
485
+ color: var(--muted);
486
+ font-size: 10.5px;
487
+ font-family: Consolas, monospace;
488
+ white-space: nowrap;
489
+ overflow: hidden;
490
+ text-overflow: ellipsis;
491
+ min-width: 0;
492
+ }
493
+ .dd-caret { color: var(--muted); font-size: 10px; }
494
+ .dd-menu {
495
+ position: absolute;
496
+ top: calc(100% + 5px);
497
+ left: 0;
498
+ width: 340px;
499
+ max-width: 80vw;
500
+ background: var(--bg);
501
+ border: 1px solid var(--border);
502
+ border-radius: 10px;
503
+ box-shadow: 0 12px 36px rgba(0, 0, 0, 0.18);
504
+ padding: 8px;
505
+ z-index: 60;
506
+ }
507
+ .dd-filter {
508
+ width: 100%;
509
+ padding: 7px 10px;
510
+ border: 1px solid var(--border);
511
+ border-radius: 7px;
512
+ background: var(--panel);
513
+ color: var(--text);
514
+ font-size: 13px;
515
+ outline: none;
516
+ margin-bottom: 6px;
517
+ }
518
+ .dd-filter:focus { border-color: var(--accent); }
519
+ .dd-list { max-height: 280px; overflow-y: auto; }
520
+ .dd-item {
521
+ display: flex;
522
+ align-items: center;
523
+ gap: 8px;
524
+ padding: 7px 9px;
525
+ border-radius: 7px;
526
+ cursor: pointer;
527
+ font-size: 12.5px;
528
+ }
529
+ .dd-item:hover { background: var(--panel2); }
530
+ .dd-item.active { background: var(--accent-dim); }
531
+ .dd-item .dn { font-weight: 700; color: var(--text); flex-shrink: 0; }
532
+ .dd-item .dm { color: var(--muted); font-family: Consolas, monospace; font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
533
+ .dd-item .ck { margin-left: auto; color: var(--accent); font-weight: 800; visibility: hidden; }
534
+ .dd-item.active .ck { visibility: visible; }
535
+ .dd-empty { color: var(--muted); font-size: 12.5px; padding: 10px; }
536
+
537
+ /* picker yapılandırma popover */
538
+ .dd-icon-btn { width: 34px; justify-content: center; padding: 6px 0; font-size: 15px; }
539
+ .cfg-menu { width: 360px; max-width: 85vw; }
540
+ .cfg-head {
541
+ display: flex;
542
+ align-items: center;
543
+ justify-content: space-between;
544
+ font-size: 12px;
545
+ color: var(--muted);
546
+ font-weight: 700;
547
+ letter-spacing: 0.5px;
548
+ padding: 2px 4px 8px;
549
+ }
550
+ .cfg-quick button {
551
+ border: 1px solid var(--border);
552
+ background: var(--panel);
553
+ color: var(--muted);
554
+ border-radius: 6px;
555
+ font-size: 11.5px;
556
+ padding: 3px 9px;
557
+ cursor: pointer;
558
+ margin-left: 5px;
559
+ }
560
+ .cfg-quick button:hover { color: var(--accent); border-color: var(--accent); }
561
+ .cfg-item {
562
+ display: flex;
563
+ align-items: center;
564
+ gap: 8px;
565
+ padding: 6px 9px;
566
+ border-radius: 7px;
567
+ cursor: pointer;
568
+ font-size: 12.5px;
569
+ }
570
+ .cfg-item:hover { background: var(--panel2); }
571
+ .cfg-item input { accent-color: var(--accent); }
572
+ .cfg-item .cn { font-weight: 700; flex-shrink: 0; }
573
+ .cfg-item .cm { color: var(--muted); font-family: Consolas, monospace; font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
574
+
575
+ /* whatsapp integration */
576
+ .wa-card {
577
+ border: 1px solid var(--border);
578
+ border-radius: 12px;
579
+ background: var(--panel);
580
+ padding: 16px 18px;
581
+ max-width: 560px;
582
+ }
583
+ .wa-head { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; }
584
+ .wa-logo {
585
+ width: 34px; height: 34px;
586
+ border-radius: 9px;
587
+ background: #131315;
588
+ color: #fff;
589
+ display: flex; align-items: center; justify-content: center;
590
+ font-weight: 900; font-size: 17px;
591
+ }
592
+ .wa-title { font-weight: 800; font-size: 14.5px; }
593
+ .wa-sub { color: var(--muted); font-size: 12px; }
594
+ .wa-status { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; margin: 10px 0; }
595
+ .wa-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--muted); }
596
+ .wa-dot.on { background: var(--ok); }
597
+ .wa-dot.qr { background: var(--accent); animation: pulse 1.2s ease-in-out infinite; }
598
+ .wa-actions { display: flex; gap: 8px; margin-top: 4px; }
599
+ #waQr { margin-top: 12px; text-align: center; }
600
+ #waQr img { border-radius: 10px; border: 1px solid var(--border); background: #fff; }
601
+ .wa-user { color: var(--ok); font-size: 12.5px; margin-top: 6px; word-break: break-all; }
602
+ .lock-row {
603
+ display: flex;
604
+ align-items: center;
605
+ gap: 9px;
606
+ cursor: pointer;
607
+ user-select: none;
608
+ }
609
+ .lock-row input { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; }
610
+ .lock-title { font-weight: 700; font-size: 13.5px; }
611
+
612
+ /* kişi bazlı kısıt düğmesi */
613
+ .chip .lk {
614
+ margin-left: 7px;
615
+ cursor: pointer;
616
+ font-size: 10.5px;
617
+ font-weight: 700;
618
+ letter-spacing: 0.3px;
619
+ padding: 1px 8px;
620
+ border-radius: 999px;
621
+ border: 1px solid var(--border);
622
+ color: var(--muted);
623
+ user-select: none;
624
+ }
625
+ .chip .lk:hover { border-color: var(--accent); color: var(--text); }
626
+ .chip .lk.on { background: var(--accent); color: var(--bg); border-color: var(--accent); }
627
+ .chip-locked { opacity: 0.85; }
628
+ .chip .chip-txt { cursor: pointer; }
629
+ .chip .chip-txt:hover { text-decoration: underline; }
630
+ .chip-noname { border-style: dashed; border-color: var(--err); }
631
+ .chip .perm-select {
632
+ margin-left: 7px;
633
+ background: var(--panel2);
634
+ color: var(--text);
635
+ border: 1px solid var(--border);
636
+ border-radius: 999px;
637
+ font-size: 10.5px;
638
+ font-weight: 700;
639
+ padding: 1px 4px;
640
+ cursor: pointer;
641
+ }
642
+ .chip .perm-select:focus { outline: none; border-color: var(--accent); }
643
+
644
+ /* oturum notları */
645
+ .notes-card { max-width: 640px; }
646
+ .notes-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
647
+ .notes-meta { color: var(--muted); font-size: 11.5px; white-space: nowrap; }
648
+ .notes-body {
649
+ margin: 8px 0 4px;
650
+ padding: 10px 12px;
651
+ background: var(--panel2);
652
+ border: 1px solid var(--border);
653
+ border-radius: 8px;
654
+ font-family: inherit;
655
+ font-size: 12.5px;
656
+ line-height: 1.55;
657
+ color: var(--text);
658
+ white-space: pre-wrap;
659
+ word-break: break-word;
660
+ max-height: 220px;
661
+ overflow-y: auto;
662
+ }
663
+
664
+ /* ---------- chat ---------- */
665
+
666
+ #chatScroll { flex: 1; overflow-y: auto; scroll-behavior: auto; }
667
+
668
+ #empty {
669
+ height: 100%;
670
+ display: flex;
671
+ flex-direction: column;
672
+ align-items: center;
673
+ justify-content: center;
674
+ gap: 10px;
675
+ }
676
+ #emptyLogo {
677
+ font-size: 44px;
678
+ font-weight: 900;
679
+ letter-spacing: 10px;
680
+ color: var(--accent);
681
+ opacity: 0.9;
682
+ text-shadow: 0 0 30px rgba(19, 19, 21, 0.15);
683
+ }
684
+ #emptyHint { color: var(--muted); }
685
+
686
+ #msgs { max-width: 860px; margin: 0 auto; padding: 20px 24px 30px; }
687
+
688
+ .msg { margin-bottom: 18px; line-height: 1.55; }
689
+ .msg-user {
690
+ background: var(--panel2);
691
+ border: 1px solid var(--border);
692
+ border-radius: 12px;
693
+ padding: 10px 14px;
694
+ white-space: pre-wrap;
695
+ word-wrap: break-word;
696
+ }
697
+ .msg-assistant { word-wrap: break-word; }
698
+ .msg-assistant .who,
699
+ .msg-user .who {
700
+ display: block;
701
+ font-size: 11px;
702
+ color: var(--muted);
703
+ letter-spacing: 1.5px;
704
+ text-transform: uppercase;
705
+ margin-bottom: 5px;
706
+ }
707
+ .msg-assistant .who { color: var(--accent); }
708
+
709
+ .msg-error {
710
+ border: 1px solid rgba(19, 19, 21, 0.3);
711
+ background: rgba(19, 19, 21, 0.05);
712
+ color: var(--err);
713
+ border-radius: 10px;
714
+ padding: 10px 14px;
715
+ }
716
+
717
+ /* markdown */
718
+ .md p { margin: 0 0 8px; }
719
+ .md p:last-child { margin-bottom: 0; }
720
+ .md h1, .md h2, .md h3 { margin: 14px 0 8px; line-height: 1.3; }
721
+ .md h1 { font-size: 20px; } .md h2 { font-size: 17px; } .md h3 { font-size: 15px; }
722
+ .md ul, .md ol { margin: 4px 0 10px 22px; }
723
+ .md li { margin-bottom: 3px; }
724
+ .md code {
725
+ font-family: Consolas, "Cascadia Mono", monospace;
726
+ font-size: 12.5px;
727
+ background: var(--panel2);
728
+ border: 1px solid var(--border);
729
+ border-radius: 5px;
730
+ padding: 1px 5px;
731
+ }
732
+ .md pre {
733
+ background: var(--panel);
734
+ border: 1px solid var(--border);
735
+ border-radius: 9px;
736
+ padding: 12px 14px;
737
+ overflow-x: auto;
738
+ margin: 8px 0 12px;
739
+ }
740
+ .md pre code { background: none; border: none; padding: 0; font-size: 12.5px; line-height: 1.5; }
741
+ .md a { color: var(--text); text-decoration: underline; text-underline-offset: 2px; }
742
+ .md a:hover { opacity: 0.7; }
743
+ .md strong { font-weight: 700; }
744
+ .cursor-blink::after { content: "▍"; color: var(--accent); animation: blink 1s steps(1) infinite; }
745
+ @keyframes blink { 50% { opacity: 0; } }
746
+
747
+ /* tool cards */
748
+ .tool-card {
749
+ border: 1px solid var(--border);
750
+ border-radius: 9px;
751
+ margin: 8px 0 12px;
752
+ background: var(--panel);
753
+ overflow: hidden;
754
+ font-size: 12.5px;
755
+ }
756
+ .tool-head {
757
+ display: flex;
758
+ align-items: center;
759
+ gap: 8px;
760
+ padding: 7px 11px;
761
+ cursor: pointer;
762
+ user-select: none;
763
+ color: var(--muted);
764
+ }
765
+ .tool-head:hover { background: var(--panel2); }
766
+ .tool-icon { color: var(--text); display: inline-flex; align-items: center; }
767
+ .tool-name { font-weight: 700; color: var(--text); }
768
+ .tool-arg {
769
+ flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
770
+ font-family: Consolas, monospace; font-size: 11.5px;
771
+ }
772
+ .tool-state { font-size: 11px; }
773
+ .tool-state.run { color: var(--accent); animation: pulse 1.2s ease-in-out infinite; }
774
+ .tool-state.ok { color: var(--ok); }
775
+ .tool-state.err { color: var(--err); }
776
+ @keyframes pulse { 50% { opacity: 0.35; } }
777
+ .tool-body {
778
+ display: none;
779
+ border-top: 1px solid var(--border);
780
+ padding: 9px 12px;
781
+ max-height: 260px;
782
+ overflow-y: auto;
783
+ white-space: pre-wrap;
784
+ font-family: Consolas, monospace;
785
+ font-size: 11.5px;
786
+ color: var(--muted);
787
+ }
788
+ .tool-body.open { display: block; }
789
+ .tool-body.short { white-space: pre-wrap; }
790
+
791
+ /* status pill */
792
+
793
+ /* todo panel */
794
+ #todoPanel {
795
+ border: 1px solid var(--border);
796
+ background: var(--panel);
797
+ border-radius: 10px;
798
+ padding: 8px 12px;
799
+ margin-bottom: 8px;
800
+ font-size: 12px;
801
+ }
802
+ #todoPanel .td-head {
803
+ display: flex;
804
+ justify-content: space-between;
805
+ letter-spacing: 2px;
806
+ font-size: 10px;
807
+ color: var(--muted);
808
+ margin-bottom: 5px;
809
+ }
810
+ #todoPanel .td-count { letter-spacing: 0; font-weight: 700; color: var(--text); }
811
+ #todoPanel .td-row {
812
+ display: flex;
813
+ align-items: baseline;
814
+ gap: 7px;
815
+ padding: 1.5px 0;
816
+ color: var(--text);
817
+ }
818
+ #todoPanel .td-g { flex-shrink: 0; width: 12px; }
819
+ #todoPanel .td-row.active { color: var(--accent); }
820
+ #todoPanel .td-row.active .td-t { font-weight: 600; }
821
+ #todoPanel .td-row.done { color: var(--muted); }
822
+ #todoPanel .td-row.done .td-t { text-decoration: line-through; }
823
+
824
+ #statusPill {
825
+ align-self: flex-start;
826
+ margin-bottom: 6px;
827
+ font-size: 12px;
828
+ color: var(--accent);
829
+ background: var(--accent-dim);
830
+ border: 1px solid var(--accent);
831
+ padding: 3px 10px;
832
+ border-radius: 999px;
833
+ }
834
+ /* ---------- composer ---------- */
835
+
836
+ #composerWrap { padding: 8px 24px 16px; }
837
+
838
+ #composerWrap { display: flex; flex-direction: column; align-items: center; }
839
+
840
+ /* slash komut menüsü (#15) */
841
+ #slashMenu {
842
+ align-self: stretch;
843
+ max-width: 760px;
844
+ width: 100%;
845
+ margin: 0 auto 6px;
846
+ background: var(--panel);
847
+ border: 1px solid var(--border);
848
+ border-radius: 12px;
849
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
850
+ overflow-y: auto;
851
+ max-height: 46vh;
852
+ padding: 4px;
853
+ }
854
+ .slash-item {
855
+ padding: 7px 10px;
856
+ border-radius: 8px;
857
+ cursor: pointer;
858
+ display: flex;
859
+ gap: 10px;
860
+ align-items: baseline;
861
+ }
862
+ .slash-item .s-cmd { font-weight: 800; font-size: 13px; min-width: 92px; }
863
+ .slash-item .s-desc { color: var(--muted); font-size: 12px; }
864
+ .slash-item:hover, .slash-item.sel { background: rgba(128, 128, 128, 0.14); }
865
+
866
+ #chips {
867
+ width: 100%;
868
+ max-width: 860px;
869
+ display: flex;
870
+ flex-wrap: wrap;
871
+ gap: 6px;
872
+ margin-bottom: 7px;
873
+ }
874
+ #chips[hidden] { display: none; }
875
+ .chip {
876
+ display: inline-flex;
877
+ align-items: center;
878
+ gap: 6px;
879
+ background: var(--panel2);
880
+ border: 1px solid var(--border);
881
+ border-radius: 999px;
882
+ padding: 3px 10px;
883
+ font-size: 12px;
884
+ color: var(--text);
885
+ }
886
+ .chip .x { cursor: pointer; color: var(--muted); font-weight: 700; }
887
+ .chip .x:hover { color: var(--err); }
888
+
889
+ #composer {
890
+ width: 100%;
891
+ max-width: 860px;
892
+ display: flex;
893
+ align-items: center;
894
+ gap: 8px;
895
+ background: var(--panel2);
896
+ border: 1px solid var(--border);
897
+ border-radius: 14px;
898
+ padding: 7px 10px;
899
+ }
900
+ #composer:focus-within { border-color: var(--accent); }
901
+
902
+ #attachBtn {
903
+ width: 32px; height: 32px;
904
+ border-radius: 9px;
905
+ border: none;
906
+ cursor: pointer;
907
+ font-size: 18px;
908
+ line-height: 1;
909
+ flex-shrink: 0;
910
+ background: none;
911
+ color: var(--muted);
912
+ }
913
+ #attachBtn:hover { background: var(--panel); color: var(--accent); }
914
+
915
+ #micBtn {
916
+ width: 32px; height: 32px;
917
+ border-radius: 9px;
918
+ border: none;
919
+ cursor: pointer;
920
+ font-size: 17px;
921
+ line-height: 1;
922
+ flex-shrink: 0;
923
+ background: none;
924
+ color: var(--muted);
925
+ }
926
+ #micBtn:hover { background: var(--panel); color: var(--accent); }
927
+ #micBtn.rec { color: #e5484d; animation: mic-pulse 1.2s ease-in-out infinite; }
928
+ @keyframes mic-pulse { 50% { opacity: .45; } }
929
+
930
+ #input {
931
+ flex: 1;
932
+ background: none;
933
+ border: none;
934
+ outline: none;
935
+ resize: none;
936
+ color: var(--text);
937
+ font-family: inherit;
938
+ font-size: 14px;
939
+ line-height: 1.45;
940
+ max-height: 180px;
941
+ padding: 5px 2px;
942
+ }
943
+ #input::placeholder { color: var(--muted); }
944
+
945
+ #sendBtn, #stopBtn {
946
+ width: 34px; height: 34px;
947
+ border-radius: 9px;
948
+ border: none;
949
+ cursor: pointer;
950
+ font-size: 14px;
951
+ flex-shrink: 0;
952
+ }
953
+ #sendBtn { background: var(--accent); color: var(--accent-contrast); font-weight: 800; }
954
+ #sendBtn:disabled { background: var(--border); color: var(--muted); cursor: default; }
955
+ #stopBtn { background: rgba(19, 19, 21, 0.06); color: var(--err); border: 1px solid rgba(19, 19, 21, 0.35); }
956
+
957
+ ::-webkit-scrollbar { width: 10px; }
958
+ ::-webkit-scrollbar-thumb { background: #cfc9bf; border-radius: 6px; border: 2px solid var(--bg); }
959
+ ::-webkit-scrollbar-thumb:hover { background: #b0b0b6; }
960
+
961
+ /* ---------- setup wizard ---------- */
962
+ #setupOverlay {
963
+ position: fixed;
964
+ inset: 0;
965
+ background: rgba(10, 10, 12, 0.55);
966
+ display: flex;
967
+ align-items: center;
968
+ justify-content: center;
969
+ z-index: 90;
970
+ }
971
+ #setupDialog {
972
+ width: min(460px, 92vw);
973
+ max-height: 86vh;
974
+ overflow-y: auto;
975
+ background: var(--panel);
976
+ border: 1px solid var(--border);
977
+ border-radius: 16px;
978
+ padding: 18px 20px;
979
+ }
980
+ .s-step h3 { margin: 14px 0 6px; font-size: 14px; }
981
+ .s-step .inp { margin: 6px 0; }
982
+
983
+ /* ---------- settings ---------- */
984
+
985
+ #settingsOverlay {
986
+ position: fixed;
987
+ inset: 0;
988
+ background: rgba(36, 41, 47, 0.45);
989
+ display: flex;
990
+ align-items: center;
991
+ justify-content: center;
992
+ z-index: 50;
993
+ }
994
+
995
+ /* #22 mini modallar (izleyiciler / cron) — ayarlar modalı tasarımında */
996
+ .mini-overlay {
997
+ position: fixed;
998
+ inset: 0;
999
+ background: rgba(36, 41, 47, 0.45);
1000
+ display: flex;
1001
+ align-items: center;
1002
+ justify-content: center;
1003
+ z-index: 55;
1004
+ }
1005
+ .mini-overlay[hidden] { display: none; }
1006
+ body.browser-open .mini-overlay { right: var(--bw, 480px); }
1007
+ .mini-dialog {
1008
+ width: min(560px, 90vw);
1009
+ height: min(560px, 84vh);
1010
+ background: var(--bg);
1011
+ border: 1px solid var(--border);
1012
+ border-radius: 14px;
1013
+ display: flex;
1014
+ flex-direction: column;
1015
+ overflow: hidden;
1016
+ box-shadow: 0 24px 64px rgba(0, 0, 0, 0.25);
1017
+ }
1018
+ .mini-head {
1019
+ display: flex;
1020
+ align-items: center;
1021
+ justify-content: space-between;
1022
+ padding: 12px 16px;
1023
+ border-bottom: 1px solid var(--border);
1024
+ }
1025
+ .mini-title { font-weight: 800; letter-spacing: 0.5px; font-size: 14px; }
1026
+ .mini-close {
1027
+ border: none; background: none; color: var(--muted);
1028
+ font-size: 18px; cursor: pointer; line-height: 1; padding: 2px 6px; border-radius: 6px;
1029
+ }
1030
+ .mini-close:hover { color: var(--text); background: var(--panel2); }
1031
+ .mini-body { padding: 12px 16px 14px; overflow-y: auto; }
1032
+ .mini-list { display: flex; flex-direction: column; gap: 6px; }
1033
+ .mini-empty { color: var(--muted); font-size: 12.5px; text-align: center; padding: 18px 0; }
1034
+ .mini-row {
1035
+ display: flex; align-items: center; gap: 10px;
1036
+ background: var(--panel); border: 1px solid var(--border);
1037
+ border-radius: 9px; padding: 8px 10px;
1038
+ }
1039
+ .mini-row:hover { background: var(--panel2); }
1040
+ .mini-row.off .mr-name, .mini-row.off .mr-meta { opacity: 0.45; }
1041
+ .mr-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ok); flex: none; }
1042
+ .mini-row.off .mr-dot { background: var(--muted); }
1043
+ .mr-main { flex: 1; min-width: 0; }
1044
+ .mr-name { font-weight: 700; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1045
+ .mr-meta { color: var(--muted); font-size: 11px; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1046
+ .mr-meta b { color: var(--text); font-weight: 600; }
1047
+ .mr-btn {
1048
+ border: none; background: var(--panel2); color: var(--text);
1049
+ font-size: 12px; padding: 4px 8px; border-radius: 7px; cursor: pointer; flex: none;
1050
+ }
1051
+ .mr-btn:hover { color: var(--accent); }
1052
+ .mr-btn.del:hover { color: var(--err); }
1053
+
1054
+ /* #26 ajan dosya kartı */
1055
+ .file-card {
1056
+ display: flex;
1057
+ align-items: center;
1058
+ gap: 10px;
1059
+ background: var(--panel);
1060
+ border: 1px solid var(--border);
1061
+ border-radius: 12px;
1062
+ padding: 10px 12px;
1063
+ margin: 6px 0;
1064
+ max-width: 78%;
1065
+ }
1066
+ .fc-icon { font-size: 22px; flex: none; }
1067
+ .fc-main { flex: 1; min-width: 0; }
1068
+ .fc-name { font-weight: 700; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1069
+ .fc-cap { color: var(--muted); font-size: 11.5px; margin-top: 2px; }
1070
+ .fc-btns { display: flex; gap: 6px; flex: none; }
1071
+ #settingsOverlay[hidden] { display: none; }
1072
+
1073
+ /* tarayıcı açıkken diyalogu görünür alana ortala */
1074
+ body.browser-open #settingsOverlay { right: var(--bw, 480px); }
1075
+ body.browser-open #settingsDialog { width: min(70vw, calc(100vw - var(--bw, 480px) - 48px)); }
1076
+ /* toast'ı da görünür alanın ortasına kaydır */
1077
+ body.browser-open #toast { left: calc((100vw - var(--bw, 480px)) / 2); }
1078
+
1079
+ #settingsDialog {
1080
+ width: 70vw;
1081
+ height: 70vh;
1082
+ background: var(--bg);
1083
+ border: 1px solid var(--border);
1084
+ border-radius: 14px;
1085
+ display: flex;
1086
+ overflow: hidden;
1087
+ box-shadow: 0 24px 64px rgba(0, 0, 0, 0.25);
1088
+ }
1089
+
1090
+ #setTabs {
1091
+ width: 190px;
1092
+ min-width: 190px;
1093
+ background: var(--panel);
1094
+ border-right: 1px solid var(--border);
1095
+ display: flex;
1096
+ flex-direction: column;
1097
+ padding: 16px 10px 12px;
1098
+ }
1099
+ .set-tabs-title {
1100
+ font-size: 11px;
1101
+ letter-spacing: 2px;
1102
+ color: var(--muted);
1103
+ padding: 0 12px 10px;
1104
+ }
1105
+ #setTabs .tab {
1106
+ text-align: left;
1107
+ padding: 9px 12px;
1108
+ border-radius: 8px;
1109
+ border: none;
1110
+ background: none;
1111
+ color: var(--muted);
1112
+ font-size: 13.5px;
1113
+ cursor: pointer;
1114
+ margin-bottom: 2px;
1115
+ }
1116
+ #setTabs .tab:hover { background: var(--panel2); color: var(--text); }
1117
+ #setTabs .tab.active { background: var(--accent-dim); color: var(--accent); font-weight: 700; }
1118
+ .set-tabs-foot { margin-top: auto; }
1119
+ .beast-code {
1120
+ border: 1px solid var(--border);
1121
+ border-radius: 8px;
1122
+ padding: 4px 8px;
1123
+ margin-bottom: 8px;
1124
+ background: var(--panel2);
1125
+ }
1126
+ .bc-row { display: flex; align-items: center; gap: 6px; }
1127
+ .bc-value {
1128
+ flex: 1;
1129
+ font-family: var(--mono, monospace);
1130
+ font-size: 12px;
1131
+ letter-spacing: 1px;
1132
+ color: var(--muted);
1133
+ user-select: all;
1134
+ overflow: hidden;
1135
+ text-overflow: ellipsis;
1136
+ white-space: nowrap;
1137
+ }
1138
+ .bc-copy {
1139
+ flex: none;
1140
+ padding: 3px 8px;
1141
+ font-size: 11px;
1142
+ border-radius: 6px;
1143
+ border: 1px solid var(--border);
1144
+ background: none;
1145
+ color: var(--muted);
1146
+ cursor: pointer;
1147
+ }
1148
+ .bc-copy:hover { color: var(--text); background: var(--panel); }
1149
+ #setClose {
1150
+ width: 100%;
1151
+ padding: 8px;
1152
+ border-radius: 8px;
1153
+ border: 1px solid var(--border);
1154
+ background: none;
1155
+ color: var(--muted);
1156
+ cursor: pointer;
1157
+ font-size: 13px;
1158
+ }
1159
+ #setClose:hover { color: var(--err); border-color: var(--err); background: rgba(19, 19, 21, 0.05); }
1160
+
1161
+ #setContent { flex: 1; overflow-y: auto; padding: 22px 26px; }
1162
+ .pane {
1163
+ max-width: 620px;
1164
+ margin: 0 auto;
1165
+ display: flex;
1166
+ flex-direction: column;
1167
+ align-items: center;
1168
+ }
1169
+ .pane[hidden] { display: none; }
1170
+ .pane > * { width: 100%; }
1171
+ .pane h2, .pane .sub, .pane .mem-label, .pane .divider { text-align: center; }
1172
+ .pane h2 { font-size: 17px; margin-bottom: 4px; }
1173
+ .pane .sub { color: var(--muted); font-size: 12.5px; margin-bottom: 16px; }
1174
+ .chips-inline { display: flex; flex-wrap: wrap; margin-bottom: 4px; }
1175
+
1176
+ .prov-row {
1177
+ display: flex;
1178
+ align-items: center;
1179
+ gap: 10px;
1180
+ padding: 10px 13px;
1181
+ border: 1px solid var(--border);
1182
+ border-radius: 10px;
1183
+ margin-bottom: 8px;
1184
+ cursor: pointer;
1185
+ background: var(--panel);
1186
+ }
1187
+ .prov-row:hover { border-color: var(--accent); }
1188
+ .prov-row.active { border-color: var(--accent); background: var(--accent-dim); }
1189
+ .prov-name { font-weight: 700; font-size: 13px; }
1190
+ .prov-model { color: var(--muted); font-size: 12px; font-family: Consolas, monospace; }
1191
+ .check { margin-left: auto; color: var(--accent); font-weight: 800; visibility: hidden; }
1192
+ .prov-row.active .check { visibility: visible; }
1193
+
1194
+ .mem-area {
1195
+ width: 100%;
1196
+ min-height: 170px;
1197
+ resize: vertical;
1198
+ background: var(--panel);
1199
+ border: 1px solid var(--border);
1200
+ border-radius: 10px;
1201
+ color: var(--text);
1202
+ font-family: Consolas, "Cascadia Mono", monospace;
1203
+ font-size: 12.5px;
1204
+ line-height: 1.5;
1205
+ padding: 10px 12px;
1206
+ outline: none;
1207
+ }
1208
+ .mem-area:focus { border-color: var(--accent); }
1209
+ .mem-area.soul-area { min-height: 220px; }
1210
+ .mem-label { font-weight: 700; font-size: 13px; margin: 14px 0 6px; display: block; }
1211
+ .btn {
1212
+ padding: 7px 16px;
1213
+ border-radius: 8px;
1214
+ border: none;
1215
+ background: var(--accent);
1216
+ color: var(--accent-contrast);
1217
+ font-weight: 700;
1218
+ cursor: pointer;
1219
+ font-size: 13px;
1220
+ margin-top: 10px;
1221
+ }
1222
+ .btn:hover { filter: brightness(1.08); }
1223
+ .btn.ghost { background: var(--panel2); color: var(--text); border: 1px solid var(--border); }
1224
+
1225
+ .inp {
1226
+ width: 100%;
1227
+ padding: 8px 11px;
1228
+ border: 1px solid var(--border);
1229
+ border-radius: 8px;
1230
+ background: var(--panel);
1231
+ color: var(--text);
1232
+ font-size: 13px;
1233
+ outline: none;
1234
+ margin-bottom: 8px;
1235
+ }
1236
+ .inp:focus { border-color: var(--accent); }
1237
+ .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 10px; }
1238
+
1239
+ /* ---------------- ☢ Fallout ---------------- */
1240
+ .fo-toggles {
1241
+ display: flex;
1242
+ align-items: center;
1243
+ justify-content: center;
1244
+ gap: 18px;
1245
+ flex-wrap: wrap;
1246
+ margin-bottom: 16px;
1247
+ }
1248
+ .fo-toggles .lock-row { margin: 0; }
1249
+ .fo-count {
1250
+ color: var(--muted);
1251
+ font-size: 12px;
1252
+ font-weight: 700;
1253
+ border: 1px solid var(--border);
1254
+ border-radius: 999px;
1255
+ padding: 3px 10px;
1256
+ }
1257
+ /* ---------- maliyet (sade) ---------- */
1258
+ .usage-cards {
1259
+ display: grid;
1260
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
1261
+ gap: 8px;
1262
+ margin-top: 10px;
1263
+ }
1264
+ .usage-stat {
1265
+ border: 1px solid var(--border);
1266
+ border-radius: 10px;
1267
+ padding: 10px 12px;
1268
+ }
1269
+ .usage-stat .us-label {
1270
+ color: var(--muted);
1271
+ font-size: 11px;
1272
+ text-transform: uppercase;
1273
+ letter-spacing: 0.04em;
1274
+ margin-bottom: 3px;
1275
+ }
1276
+ .usage-stat .us-value {
1277
+ font-size: 15px;
1278
+ font-weight: 700;
1279
+ }
1280
+ #tab-usage h3 {
1281
+ margin: 14px 0 6px;
1282
+ font-size: 12.5px;
1283
+ color: var(--muted);
1284
+ }
1285
+ .usage-row {
1286
+ display: flex;
1287
+ align-items: baseline;
1288
+ gap: 10px;
1289
+ padding: 6px 0;
1290
+ border-bottom: 1px solid var(--border);
1291
+ }
1292
+ .usage-row .ur-model { font-weight: 700; }
1293
+ .usage-row .ur-meta {
1294
+ color: var(--muted);
1295
+ font-size: 12px;
1296
+ flex: 1;
1297
+ }
1298
+ .usage-row .ur-cost { font-weight: 700; font-size: 12.5px; }
1299
+ .usage-row.dash-active { background: var(--accent-dim); border-radius: 6px; }
1300
+ #tab-dash .usage-row { align-items: center; }
1301
+ #tab-dash .usage-row .ur-meta { flex: none; }
1302
+ .usage-row .sess-code {
1303
+ flex: none;
1304
+ font-size: 11px;
1305
+ color: var(--muted);
1306
+ border: 1px solid var(--border);
1307
+ border-radius: 4px;
1308
+ padding: 1px 5px;
1309
+ }
1310
+ .usage-empty {
1311
+ color: var(--muted);
1312
+ font-size: 12.5px;
1313
+ padding: 8px 0;
1314
+ }
1315
+ .fo-slot {
1316
+ display: grid;
1317
+ grid-template-columns: 34px minmax(110px, 1fr) minmax(140px, 1.3fr) minmax(120px, 1fr) auto auto;
1318
+ gap: 8px;
1319
+ align-items: center;
1320
+ padding: 9px 10px;
1321
+ border: 1px solid var(--border);
1322
+ border-radius: 10px;
1323
+ background: var(--panel);
1324
+ margin-bottom: 7px;
1325
+ }
1326
+ .fo-slot.filled { border-color: var(--accent); }
1327
+ .fo-badge {
1328
+ display: inline-flex;
1329
+ align-items: center;
1330
+ justify-content: center;
1331
+ width: 28px;
1332
+ height: 28px;
1333
+ border-radius: 50%;
1334
+ font-weight: 800;
1335
+ font-size: 12px;
1336
+ background: var(--panel2);
1337
+ border: 1px solid var(--border);
1338
+ color: var(--muted);
1339
+ }
1340
+ .fo-slot.filled .fo-badge {
1341
+ background: var(--accent-dim);
1342
+ border-color: var(--accent);
1343
+ color: var(--accent);
1344
+ }
1345
+ .fo-slot .inp { margin-bottom: 0; }
1346
+ .fo-slot select.inp { cursor: pointer; }
1347
+ .fo-save { margin-top: 0; white-space: nowrap; }
1348
+ .fo-clear {
1349
+ background: none;
1350
+ border: none;
1351
+ color: var(--muted);
1352
+ font-size: 13px;
1353
+ cursor: pointer;
1354
+ padding: 4px 6px;
1355
+ }
1356
+ .fo-clear:hover { color: #e05252; }
1357
+ .model-picks {
1358
+ border: 1px solid var(--border);
1359
+ border-radius: 10px;
1360
+ background: var(--panel);
1361
+ padding: 8px 4px;
1362
+ margin-bottom: 8px;
1363
+ max-height: 180px;
1364
+ overflow-y: auto;
1365
+ }
1366
+ .model-picks label {
1367
+ display: flex;
1368
+ align-items: center;
1369
+ gap: 8px;
1370
+ padding: 5px 10px;
1371
+ border-radius: 6px;
1372
+ font-size: 12.5px;
1373
+ cursor: pointer;
1374
+ font-family: Consolas, monospace;
1375
+ }
1376
+ .model-picks label:hover { background: var(--panel2); }
1377
+ .divider { border-top: 1px solid var(--border); margin: 20px 0 16px; }
1378
+ .prov-del {
1379
+ margin-left: 8px;
1380
+ border: none;
1381
+ background: none;
1382
+ color: var(--muted);
1383
+ cursor: pointer;
1384
+ font-size: 14px;
1385
+ padding: 2px 6px;
1386
+ border-radius: 5px;
1387
+ }
1388
+ .prov-del:hover { color: var(--err); background: rgba(19, 19, 21, 0.07); }
1389
+ .prov-url { color: var(--muted); font-size: 11.5px; font-family: Consolas, monospace; }
1390
+
1391
+ .skill-row {
1392
+ padding: 11px 13px;
1393
+ border: 1px solid var(--border);
1394
+ border-radius: 10px;
1395
+ margin-bottom: 8px;
1396
+ background: var(--panel);
1397
+ }
1398
+ .skill-name { font-weight: 700; font-size: 13.5px; color: var(--accent); }
1399
+ .skill-desc { color: var(--text); font-size: 12.5px; margin: 3px 0; }
1400
+ .skill-path { color: var(--muted); font-size: 11px; font-family: Consolas, monospace; word-break: break-all; }
1401
+
1402
+ /* ---------- rol modelleri ---------- */
1403
+ .role-row {
1404
+ display: flex;
1405
+ align-items: center;
1406
+ gap: 10px;
1407
+ margin-bottom: 10px;
1408
+ }
1409
+ .role-label {
1410
+ min-width: 110px;
1411
+ font-size: 13px;
1412
+ color: var(--text);
1413
+ opacity: 0.9;
1414
+ }
1415
+ .role-select {
1416
+ flex: 1;
1417
+ background: var(--panel2);
1418
+ color: var(--text);
1419
+ border: 1px solid var(--border);
1420
+ padding: 6px 8px;
1421
+ font-size: 13px;
1422
+ border-radius: 4px;
1423
+ }
1424
+ .role-select:focus {
1425
+ outline: none;
1426
+ border-color: var(--accent);
1427
+ }
1428
+
1429
+ #toast {
1430
+ position: fixed;
1431
+ bottom: 28px;
1432
+ left: 50%;
1433
+ transform: translateX(-50%) translateY(16px);
1434
+ opacity: 0;
1435
+ transition: all 0.25s ease;
1436
+ background: var(--text);
1437
+ color: var(--bg);
1438
+ padding: 9px 18px;
1439
+ border-radius: 999px;
1440
+ font-size: 13px;
1441
+ z-index: 99;
1442
+ pointer-events: none;
1443
+ }
1444
+ #toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
1445
+
1446
+ /* ---- paralel ajanlar (#14 CEO) ---- */
1447
+ .agent-ceo-row { display: flex; justify-content: center; margin-bottom: 12px; }
1448
+ .agent-ceo-row label { font-size: 12.5px; color: var(--muted); cursor: pointer; }
1449
+ .agent-ceo-row input { accent-color: var(--accent); margin-right: 6px; }
1450
+ .agent-card {
1451
+ background: var(--panel); border: 1px solid var(--border); border-radius: 10px;
1452
+ padding: 10px 12px; margin-bottom: 8px;
1453
+ }
1454
+ .agent-card.st-error { border-color: rgba(255, 90, 90, 0.45); }
1455
+ .agent-card.st-done { opacity: 0.75; }
1456
+ .ag-head { display: flex; align-items: center; gap: 8px; }
1457
+ .ag-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--muted); flex: none; }
1458
+ .st-running .ag-dot { background: #f0b429; animation: agPulse 1.1s infinite; }
1459
+ .st-done .ag-dot { background: #43c463; }
1460
+ .st-error .ag-dot { background: #ff5a5a; }
1461
+ .st-aborted .ag-dot { background: var(--muted); }
1462
+ .st-queued .ag-dot { background: var(--muted); animation: agPulse 2.2s infinite; }
1463
+ @keyframes agPulse { 50% { opacity: 0.25; } }
1464
+ .ag-title { font-weight: 700; font-size: 13px; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1465
+ .ag-st { font-size: 11px; color: var(--muted); flex: none; }
1466
+ .ag-time { font-size: 11px; color: var(--muted); flex: none; }
1467
+ .ag-btn {
1468
+ border: none; background: var(--panel2); color: var(--text); font-size: 11px;
1469
+ padding: 3px 9px; border-radius: 7px; cursor: pointer; flex: none;
1470
+ }
1471
+ .ag-btn:hover { color: var(--accent); }
1472
+ .ag-task { margin-top: 6px; font-size: 12px; color: var(--text); word-break: break-word; }
1473
+ .ag-last { margin-top: 6px; font-size: 11.5px; color: var(--accent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1474
+ .ag-err { margin-top: 6px; font-size: 11.5px; color: #ff7676; word-break: break-word; }
1475
+ .ag-log {
1476
+ margin-top: 8px; max-height: 260px; overflow: auto; font-size: 11px; line-height: 1.5;
1477
+ background: var(--panel2); border-radius: 8px; padding: 8px; white-space: pre-wrap; word-break: break-word;
1478
+ }
1479
+
1480
+ /* ---------- sağ panel: paralel ajan işleri ---------- */
1481
+
1482
+ #rail {
1483
+ flex: none;
1484
+ width: 250px;
1485
+ min-width: 250px;
1486
+ background: var(--panel);
1487
+ border-left: 1px solid var(--border);
1488
+ display: flex;
1489
+ flex-direction: column;
1490
+ /* pencere kontrolleri (– □ ×) 46px'lik alana oturur; altından başla */
1491
+ padding-top: 46px;
1492
+ }
1493
+
1494
+ #railHead {
1495
+ padding: 12px 16px 10px;
1496
+ font-weight: 800;
1497
+ letter-spacing: 1px;
1498
+ font-size: 13px;
1499
+ color: var(--text);
1500
+ text-align: center;
1501
+ }
1502
+
1503
+ #railList { flex: 1; overflow-y: auto; padding: 4px 8px; }
1504
+
1505
+ .rail-empty {
1506
+ color: var(--muted);
1507
+ font-size: 11.5px;
1508
+ text-align: center;
1509
+ padding: 18px 10px;
1510
+ line-height: 1.5;
1511
+ }
1512
+
1513
+ .rj {
1514
+ display: flex;
1515
+ flex-direction: column;
1516
+ gap: 4px;
1517
+ padding: 7px 9px;
1518
+ border-radius: 7px;
1519
+ cursor: pointer;
1520
+ color: var(--muted);
1521
+ margin-bottom: 2px;
1522
+ }
1523
+ .rj:hover { background: var(--panel2); color: var(--text); }
1524
+ .rj.open { background: var(--panel2); color: var(--text); }
1525
+ .rj-head { display: flex; align-items: center; gap: 6px; min-width: 0; }
1526
+ .rj .sess-title { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 13px; }
1527
+ .rj-time { font-size: 10.5px; color: var(--muted); flex: none; }
1528
+ .rj.st-done .rj-time { color: #43c463; font-weight: 700; }
1529
+ .rj-cancel {
1530
+ visibility: hidden;
1531
+ border: none; background: none; color: var(--muted);
1532
+ cursor: pointer; font-size: 13px; padding: 0 3px; border-radius: 4px;
1533
+ }
1534
+ .rj:hover .rj-cancel { visibility: visible; }
1535
+ .rj-cancel:hover { color: var(--err); }
1536
+ .rj-last { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1537
+ .rj-body {
1538
+ display: flex; flex-direction: column; gap: 6px;
1539
+ font-size: 12px; color: var(--text);
1540
+ word-break: break-word;
1541
+ }
1542
+ .rj-chat {
1543
+ max-height: 340px; overflow: auto; font-size: 11px; line-height: 1.55;
1544
+ background: var(--panel2); border-radius: 8px; padding: 8px;
1545
+ white-space: pre-wrap; word-break: break-word;
1546
+ }
1547
+
1548
+ #sideFoot2 {
1549
+ padding: 8px 10px;
1550
+ color: var(--muted);
1551
+ font-size: 11px;
1552
+ border-top: 1px solid var(--border);
1553
+ display: flex;
1554
+ align-items: center;
1555
+ justify-content: center;
1556
+ }
1557
+ .foot-label2 {
1558
+ letter-spacing: 0.5px;
1559
+ }