closed-loop-cli 1.0.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.

Potentially problematic release.


This version of closed-loop-cli might be problematic. Click here for more details.

Files changed (86) hide show
  1. package/dist/dashboard/server.js +237 -0
  2. package/dist/index.js +272 -0
  3. package/dist/orchestrator/agent-prompts.js +42 -0
  4. package/dist/orchestrator/autogenesis.js +973 -0
  5. package/dist/orchestrator/dgm-archive.js +223 -0
  6. package/dist/orchestrator/event-stream.js +103 -0
  7. package/dist/orchestrator/fitness-evaluator.js +99 -0
  8. package/dist/orchestrator/meta-agent.js +421 -0
  9. package/dist/orchestrator/microagent-registry.js +134 -0
  10. package/dist/orchestrator/mutation-strategies.js +174 -0
  11. package/dist/orchestrator/prompt-benchmark.js +102 -0
  12. package/dist/orchestrator/prompt-optimizer.js +169 -0
  13. package/dist/orchestrator/refactor-scanner.js +222 -0
  14. package/dist/orchestrator/research-manager.js +104 -0
  15. package/dist/orchestrator/rulez.js +135 -0
  16. package/dist/orchestrator/sahoo-gateway.js +261 -0
  17. package/dist/orchestrator/state-manager.js +121 -0
  18. package/dist/orchestrator/task-agent.js +444 -0
  19. package/dist/orchestrator/telegram-bot.js +374 -0
  20. package/dist/orchestrator/types.js +2 -0
  21. package/dist/tests/dynamic/dependencies.test.js +37 -0
  22. package/dist/tests/dynamic/dummy.test.js +7 -0
  23. package/dist/tests/dynamic/fuzzy-patch.test.js +68 -0
  24. package/dist/tests/dynamic/indexer.test.js +60 -0
  25. package/dist/tests/dynamic/openhands.test.js +83 -0
  26. package/dist/tests/dynamic/skills.test.js +88 -0
  27. package/dist/tests/run-tests.js +294 -0
  28. package/dist/tools/diff-tools.js +24 -0
  29. package/dist/tools/file-tools.js +191 -0
  30. package/dist/tools/indexer.js +301 -0
  31. package/dist/tools/math-helper.js +6 -0
  32. package/dist/tools/repo-map.js +122 -0
  33. package/dist/tools/search-tools.js +271 -0
  34. package/dist/tools/shell-tools.js +75 -0
  35. package/dist/tools/skills.js +122 -0
  36. package/dist/tools/tui-tools.js +82 -0
  37. package/docs/AI_Arch_Opt_Anti_Gaming.md +227 -0
  38. package/docs/AI_Self_Improvement_Safety.md +457 -0
  39. package/docs/Anthropic AI Agents_ Capabilities and Concerns.md +134 -0
  40. package/docs/Auto_ClosedLoop_AI_Agent.md +415 -0
  41. package/docs/Autonomous AI Agents_ Closing the Loop.docx +0 -0
  42. package/docs/Secure_AI_Sandbox_Framework.md +358 -0
  43. package/docs/skills/add-file-existence-check-utility.json +9 -0
  44. package/docs/skills/add-utility-function-for-file-existence-check.json +9 -0
  45. package/docs/skills/add-utility-function-to-module.json +9 -0
  46. package/docs/skills/extract-command-runner-utility.json +9 -0
  47. package/docs/skills/file-existence-check-utility.json +9 -0
  48. package/package.json +36 -0
  49. package/src/dashboard/public/index.css +1334 -0
  50. package/src/dashboard/public/index.html +385 -0
  51. package/src/dashboard/public/index.js +1059 -0
  52. package/src/dashboard/server.ts +209 -0
  53. package/src/index.ts +256 -0
  54. package/src/orchestrator/agent-prompts.ts +43 -0
  55. package/src/orchestrator/autogenesis.ts +1078 -0
  56. package/src/orchestrator/dgm-archive.ts +257 -0
  57. package/src/orchestrator/event-stream.ts +90 -0
  58. package/src/orchestrator/fitness-evaluator.ts +154 -0
  59. package/src/orchestrator/meta-agent.ts +434 -0
  60. package/src/orchestrator/microagent-registry.ts +115 -0
  61. package/src/orchestrator/microagents/git-helper.md +11 -0
  62. package/src/orchestrator/microagents/test-fixer.md +10 -0
  63. package/src/orchestrator/microagents/typescript-expert.md +11 -0
  64. package/src/orchestrator/mutation-strategies.ts +214 -0
  65. package/src/orchestrator/research-manager.ts +88 -0
  66. package/src/orchestrator/rulez.ts +118 -0
  67. package/src/orchestrator/sahoo-gateway.ts +300 -0
  68. package/src/orchestrator/state-manager.ts +161 -0
  69. package/src/orchestrator/system-prompt.txt +1 -0
  70. package/src/orchestrator/task-agent.ts +461 -0
  71. package/src/orchestrator/telegram-bot.ts +358 -0
  72. package/src/tests/dynamic/dependencies.test.ts +48 -0
  73. package/src/tests/dynamic/dummy.test.ts +4 -0
  74. package/src/tests/dynamic/fuzzy-patch.test.ts +42 -0
  75. package/src/tests/dynamic/indexer.test.ts +31 -0
  76. package/src/tests/dynamic/openhands.test.ts +59 -0
  77. package/src/tests/dynamic/skills.test.ts +63 -0
  78. package/src/tests/run-tests.ts +296 -0
  79. package/src/tools/diff-tools.ts +27 -0
  80. package/src/tools/file-tools.ts +187 -0
  81. package/src/tools/indexer.ts +325 -0
  82. package/src/tools/repo-map.ts +96 -0
  83. package/src/tools/search-tools.ts +258 -0
  84. package/src/tools/shell-tools.ts +90 -0
  85. package/src/tools/skills.ts +101 -0
  86. package/src/tools/tui-tools.ts +87 -0
@@ -0,0 +1,1334 @@
1
+ /* General Variables & CSS Reset */
2
+ :root {
3
+ --bg-color: hsl(222, 25%, 8%);
4
+ --bg-sub-color: hsl(222, 25%, 5%);
5
+ --panel-bg: rgba(30, 41, 59, 0.4);
6
+ --panel-border: rgba(255, 255, 255, 0.05);
7
+ --text-main: hsl(210, 40%, 98%);
8
+ --text-dim: hsl(215, 20%, 65%);
9
+ --accent-color: hsl(265, 80%, 65%);
10
+ --accent-glow: hsla(265, 80%, 65%, 0.35);
11
+
12
+ --state-idle: hsl(210, 15%, 50%);
13
+ --state-active: hsl(150, 80%, 50%);
14
+ --state-warn: hsl(35, 90%, 55%);
15
+ --state-err: hsl(355, 85%, 55%);
16
+
17
+ --card-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3);
18
+ --border-radius: 12px;
19
+ --transition-speed: 0.3s;
20
+ }
21
+
22
+ * {
23
+ margin: 0;
24
+ padding: 0;
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ body {
29
+ background-color: var(--bg-color);
30
+ background-image:
31
+ radial-gradient(at 10% 20%, hsla(265, 80%, 55%, 0.05) 0px, transparent 50%),
32
+ radial-gradient(at 90% 80%, hsla(190, 80%, 55%, 0.05) 0px, transparent 50%);
33
+ color: var(--text-main);
34
+ font-family: 'Outfit', sans-serif;
35
+ min-height: 100vh;
36
+ overflow-x: hidden;
37
+ padding: 2rem;
38
+ line-height: 1.5;
39
+ }
40
+
41
+ .flex-between {
42
+ display: flex;
43
+ justify-content: space-between;
44
+ align-items: center;
45
+ }
46
+
47
+ .flex-column {
48
+ display: flex;
49
+ flex-direction: column;
50
+ }
51
+
52
+ .flex-center {
53
+ display: flex;
54
+ justify-content: center;
55
+ align-items: center;
56
+ }
57
+
58
+ .hidden {
59
+ display: none !important;
60
+ }
61
+
62
+ .text-dim {
63
+ color: var(--text-dim);
64
+ }
65
+
66
+ .text-bright {
67
+ color: var(--text-main);
68
+ text-shadow: 0 0 10px var(--accent-glow);
69
+ }
70
+
71
+ /* Glassmorphism Classes */
72
+ .glass {
73
+ background: var(--panel-bg);
74
+ backdrop-filter: blur(12px);
75
+ -webkit-backdrop-filter: blur(12px);
76
+ border: 1px solid var(--panel-border);
77
+ box-shadow: var(--card-shadow);
78
+ border-radius: var(--border-radius);
79
+ transition: all var(--transition-speed) ease;
80
+ }
81
+
82
+ .glass:hover {
83
+ border-color: rgba(255, 255, 255, 0.1);
84
+ box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.4);
85
+ }
86
+
87
+ /* Main Container Layout */
88
+ .app-container {
89
+ max-width: 1400px;
90
+ margin: 0 auto;
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: 2rem;
94
+ }
95
+
96
+ /* Header Area */
97
+ .app-header {
98
+ display: flex;
99
+ justify-content: space-between;
100
+ align-items: center;
101
+ padding: 1.5rem 2rem;
102
+ background: rgba(15, 23, 42, 0.4);
103
+ border-bottom: 1px solid var(--panel-border);
104
+ border-radius: var(--border-radius);
105
+ backdrop-filter: blur(8px);
106
+ }
107
+
108
+ .logo-area {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 1rem;
112
+ }
113
+
114
+ .logo-icon {
115
+ width: 42px;
116
+ height: 42px;
117
+ border-radius: 50%;
118
+ background: linear-gradient(135deg, var(--accent-color), hsl(190, 80%, 55%));
119
+ box-shadow: 0 0 20px rgba(139, 92, 246, 0.5);
120
+ position: relative;
121
+ }
122
+
123
+ .logo-icon::after {
124
+ content: '';
125
+ position: absolute;
126
+ top: 4px;
127
+ left: 4px;
128
+ right: 4px;
129
+ bottom: 4px;
130
+ background: var(--bg-color);
131
+ border-radius: 50%;
132
+ }
133
+
134
+ .logo-text h1 {
135
+ font-size: 1.5rem;
136
+ font-weight: 700;
137
+ letter-spacing: -0.5px;
138
+ background: linear-gradient(to right, #ffffff, #93c5fd);
139
+ -webkit-background-clip: text;
140
+ -webkit-text-fill-color: transparent;
141
+ }
142
+
143
+ .logo-text .subtitle {
144
+ font-size: 0.8rem;
145
+ color: var(--text-dim);
146
+ text-transform: uppercase;
147
+ letter-spacing: 1px;
148
+ }
149
+
150
+ .status-indicator {
151
+ display: flex;
152
+ align-items: center;
153
+ gap: 0.75rem;
154
+ background: rgba(30, 41, 59, 0.5);
155
+ padding: 0.5rem 1rem;
156
+ border-radius: 20px;
157
+ border: 1px solid var(--panel-border);
158
+ }
159
+
160
+ .status-indicator span {
161
+ font-size: 0.85rem;
162
+ font-weight: 600;
163
+ letter-spacing: 0.5px;
164
+ }
165
+
166
+ .dot {
167
+ width: 10px;
168
+ height: 10px;
169
+ border-radius: 50%;
170
+ }
171
+
172
+ .dot.idle { background-color: var(--state-idle); box-shadow: 0 0 10px var(--state-idle); }
173
+ .dot.active { background-color: var(--state-active); box-shadow: 0 0 10px var(--state-active); }
174
+ .dot.warn { background-color: var(--state-warn); box-shadow: 0 0 10px var(--state-warn); }
175
+ .dot.err { background-color: var(--state-err); box-shadow: 0 0 10px var(--state-err); }
176
+
177
+ /* Dashboard Grid Layout */
178
+ .dashboard-grid {
179
+ display: grid;
180
+ grid-template-columns: 1fr;
181
+ gap: 2rem;
182
+ }
183
+
184
+ /* Metrics Row */
185
+ .metrics-row {
186
+ display: grid;
187
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
188
+ gap: 1.5rem;
189
+ }
190
+
191
+ .metric-card {
192
+ padding: 1.5rem;
193
+ display: flex;
194
+ flex-direction: column;
195
+ gap: 1rem;
196
+ }
197
+
198
+ .metric-card .card-header {
199
+ display: flex;
200
+ justify-content: space-between;
201
+ align-items: center;
202
+ }
203
+
204
+ .metric-card .card-header h3 {
205
+ font-size: 0.9rem;
206
+ font-weight: 500;
207
+ color: var(--text-dim);
208
+ text-transform: uppercase;
209
+ letter-spacing: 0.5px;
210
+ }
211
+
212
+ .metric-card .card-header .icon {
213
+ font-size: 1.25rem;
214
+ }
215
+
216
+ .metric-card .metric-value {
217
+ font-size: 2.25rem;
218
+ font-weight: 700;
219
+ letter-spacing: -1px;
220
+ }
221
+
222
+ .metric-card .metric-value.font-md {
223
+ font-size: 1.25rem;
224
+ font-weight: 600;
225
+ line-height: 1.4;
226
+ white-space: nowrap;
227
+ text-overflow: ellipsis;
228
+ overflow: hidden;
229
+ }
230
+
231
+ .metric-card .metric-label {
232
+ font-size: 0.8rem;
233
+ color: var(--text-dim);
234
+ }
235
+
236
+ /* Progress bar styles */
237
+ .progress-bar-container {
238
+ width: 100%;
239
+ height: 6px;
240
+ background: rgba(255, 255, 255, 0.05);
241
+ border-radius: 3px;
242
+ overflow: hidden;
243
+ }
244
+
245
+ .progress-bar {
246
+ height: 100%;
247
+ background: var(--accent-color);
248
+ box-shadow: 0 0 10px var(--accent-glow);
249
+ width: 0%;
250
+ transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);
251
+ }
252
+
253
+ /* Active Task Status Bar */
254
+ .active-task-bar {
255
+ padding: 1rem 1.5rem;
256
+ border-left: 4px solid var(--accent-color);
257
+ animation: taskPulse 3s infinite;
258
+ }
259
+
260
+ .task-info {
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 0.75rem;
264
+ }
265
+
266
+ .task-label {
267
+ font-size: 0.85rem;
268
+ font-weight: 600;
269
+ color: var(--accent-color);
270
+ text-transform: uppercase;
271
+ }
272
+
273
+ .task-text {
274
+ font-size: 0.95rem;
275
+ font-weight: 500;
276
+ }
277
+
278
+ /* Navigation Tabs */
279
+ .tabs-nav {
280
+ display: flex;
281
+ padding: 0.4rem;
282
+ gap: 0.25rem;
283
+ overflow-x: auto;
284
+ }
285
+
286
+ .tab-btn {
287
+ background: transparent;
288
+ border: none;
289
+ color: var(--text-dim);
290
+ padding: 0.75rem 1.5rem;
291
+ font-size: 0.9rem;
292
+ font-weight: 500;
293
+ border-radius: calc(var(--border-radius) - 4px);
294
+ cursor: pointer;
295
+ transition: all 0.25s ease;
296
+ white-space: nowrap;
297
+ }
298
+
299
+ .tab-btn:hover {
300
+ color: var(--text-main);
301
+ background: rgba(255, 255, 255, 0.03);
302
+ }
303
+
304
+ .tab-btn.active {
305
+ color: var(--text-main);
306
+ background: var(--accent-color);
307
+ box-shadow: 0 4px 12px var(--accent-glow);
308
+ }
309
+
310
+ /* Tab Content */
311
+ .tab-content {
312
+ display: none;
313
+ }
314
+
315
+ .tab-content.active {
316
+ display: block;
317
+ }
318
+
319
+ /* Panels */
320
+ .panel {
321
+ padding: 2rem;
322
+ display: flex;
323
+ flex-direction: column;
324
+ gap: 1.5rem;
325
+ }
326
+
327
+ .panel-title {
328
+ font-size: 1.25rem;
329
+ font-weight: 600;
330
+ letter-spacing: -0.5px;
331
+ }
332
+
333
+ .panel-header {
334
+ border-bottom: 1px solid var(--panel-border);
335
+ padding-bottom: 1rem;
336
+ }
337
+
338
+ .description {
339
+ font-size: 0.9rem;
340
+ color: var(--text-dim);
341
+ max-width: 700px;
342
+ }
343
+
344
+ .empty-state {
345
+ padding: 3rem;
346
+ text-align: center;
347
+ color: var(--text-dim);
348
+ font-style: italic;
349
+ }
350
+
351
+ /* Details and Lists */
352
+ .details-list {
353
+ display: flex;
354
+ flex-direction: column;
355
+ gap: 1rem;
356
+ }
357
+
358
+ .detail-item {
359
+ display: flex;
360
+ flex-direction: column;
361
+ gap: 0.25rem;
362
+ padding-bottom: 0.75rem;
363
+ border-bottom: 1px solid rgba(255, 255, 255, 0.02);
364
+ }
365
+
366
+ .detail-item:last-child {
367
+ border-bottom: none;
368
+ }
369
+
370
+ .detail-item .label {
371
+ font-size: 0.8rem;
372
+ text-transform: uppercase;
373
+ color: var(--text-dim);
374
+ letter-spacing: 0.5px;
375
+ }
376
+
377
+ .detail-item .value {
378
+ font-size: 0.95rem;
379
+ font-weight: 500;
380
+ }
381
+
382
+ .detail-item .value.code {
383
+ font-family: 'JetBrains Mono', monospace;
384
+ font-size: 0.85rem;
385
+ background: rgba(255, 255, 255, 0.03);
386
+ padding: 0.25rem 0.5rem;
387
+ border-radius: 4px;
388
+ width: max-content;
389
+ }
390
+
391
+ .badge {
392
+ display: inline-block;
393
+ padding: 0.25rem 0.75rem;
394
+ border-radius: 20px;
395
+ font-size: 0.8rem !important;
396
+ font-weight: 600 !important;
397
+ }
398
+
399
+ .badge.success { background-color: rgba(16, 185, 129, 0.1); color: hsl(150, 80%, 50%); border: 1px solid rgba(16, 185, 129, 0.2); }
400
+ .badge.failed { background-color: rgba(239, 68, 68, 0.1); color: hsl(355, 85%, 55%); border: 1px solid rgba(239, 68, 68, 0.2); }
401
+
402
+ /* Overview Tab Grid */
403
+ .overview-grid {
404
+ display: grid;
405
+ grid-template-columns: repeat(auto-fit, minmax(450px, 1fr));
406
+ gap: 2rem;
407
+ }
408
+
409
+ .overview-metrics-grid {
410
+ display: grid;
411
+ grid-template-columns: 1fr 1fr;
412
+ gap: 1.5rem;
413
+ }
414
+
415
+ .mini-card {
416
+ background: rgba(255, 255, 255, 0.02);
417
+ border: 1px solid rgba(255, 255, 255, 0.03);
418
+ padding: 1.25rem;
419
+ border-radius: var(--border-radius);
420
+ display: flex;
421
+ flex-direction: column;
422
+ gap: 0.5rem;
423
+ }
424
+
425
+ .mini-card .title {
426
+ font-size: 0.8rem;
427
+ text-transform: uppercase;
428
+ color: var(--text-dim);
429
+ font-weight: 500;
430
+ }
431
+
432
+ .mini-card .value {
433
+ font-size: 1.75rem;
434
+ font-weight: 700;
435
+ }
436
+
437
+ .mini-card .sub {
438
+ font-size: 0.75rem;
439
+ }
440
+
441
+ /* SAHOO Tab Layout */
442
+ .sahoo-container {
443
+ display: grid;
444
+ grid-template-columns: 3fr 2fr;
445
+ gap: 2rem;
446
+ }
447
+
448
+ @media(max-width: 1024px) {
449
+ .sahoo-container {
450
+ grid-template-columns: 1fr;
451
+ }
452
+ }
453
+
454
+ .drift-bars-grid {
455
+ display: flex;
456
+ flex-direction: column;
457
+ gap: 1.5rem;
458
+ }
459
+
460
+ .drift-bar-item {
461
+ display: flex;
462
+ flex-direction: column;
463
+ gap: 0.5rem;
464
+ }
465
+
466
+ .drift-bar-item .bar-info .name {
467
+ font-size: 0.9rem;
468
+ font-weight: 500;
469
+ }
470
+
471
+ .drift-bar-item .bar-info .name .desc {
472
+ font-size: 0.75rem;
473
+ color: var(--text-dim);
474
+ font-weight: 400;
475
+ }
476
+
477
+ .drift-bar-item .bar-info .value-badge {
478
+ font-family: 'JetBrains Mono', monospace;
479
+ font-size: 0.85rem;
480
+ font-weight: 600;
481
+ }
482
+
483
+ .drift-bar-item .bar-outer {
484
+ height: 8px;
485
+ background: rgba(255, 255, 255, 0.04);
486
+ border-radius: 4px;
487
+ overflow: hidden;
488
+ }
489
+
490
+ .drift-bar-item .bar-inner {
491
+ height: 100%;
492
+ border-radius: 4px;
493
+ width: 0%;
494
+ transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
495
+ }
496
+
497
+ .drift-bar-item .bar-inner.blue { background-color: hsl(200, 85%, 50%); box-shadow: 0 0 10px hsla(200, 85%, 50%, 0.4); }
498
+ .drift-bar-item .bar-inner.purple { background-color: hsl(270, 85%, 55%); box-shadow: 0 0 10px hsla(270, 85%, 55%, 0.4); }
499
+ .drift-bar-item .bar-inner.teal { background-color: hsl(170, 85%, 45%); box-shadow: 0 0 10px hsla(170, 85%, 45%, 0.4); }
500
+ .drift-bar-item .bar-inner.orange { background-color: hsl(25, 90%, 50%); box-shadow: 0 0 10px hsla(25, 90%, 50%, 0.4); }
501
+
502
+ .halting-rules-list {
503
+ display: flex;
504
+ flex-direction: column;
505
+ gap: 1rem;
506
+ }
507
+
508
+ .rule-card {
509
+ padding: 1.25rem;
510
+ background: rgba(255, 255, 255, 0.02);
511
+ border: 1px solid rgba(255, 255, 255, 0.03);
512
+ border-radius: var(--border-radius);
513
+ }
514
+
515
+ .rule-card h4 {
516
+ font-size: 0.95rem;
517
+ font-weight: 600;
518
+ margin-bottom: 0.25rem;
519
+ }
520
+
521
+ .rule-card p {
522
+ font-size: 0.8rem;
523
+ color: var(--text-dim);
524
+ }
525
+
526
+ .rule-badge {
527
+ padding: 0.25rem 0.75rem;
528
+ border-radius: 20px;
529
+ font-size: 0.75rem;
530
+ font-weight: 600;
531
+ text-transform: uppercase;
532
+ }
533
+
534
+ .rule-badge.pass { background: rgba(16, 185, 129, 0.1); color: hsl(150, 80%, 50%); border: 1px solid rgba(16, 185, 129, 0.2); }
535
+ .rule-badge.fail { background: rgba(239, 68, 68, 0.1); color: hsl(355, 85%, 55%); border: 1px solid rgba(239, 68, 68, 0.2); }
536
+
537
+ /* Prompt Optimization Tab */
538
+ .score-comparison-cards {
539
+ display: grid;
540
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
541
+ gap: 1.5rem;
542
+ }
543
+
544
+ .score-card {
545
+ padding: 2rem;
546
+ text-align: center;
547
+ }
548
+
549
+ .score-card .title {
550
+ font-size: 0.85rem;
551
+ text-transform: uppercase;
552
+ color: var(--text-dim);
553
+ margin-bottom: 0.75rem;
554
+ }
555
+
556
+ .score-card .value {
557
+ font-size: 3rem;
558
+ font-weight: 700;
559
+ letter-spacing: -2px;
560
+ }
561
+
562
+ .score-card .value.font-md {
563
+ font-size: 1.5rem;
564
+ font-weight: 600;
565
+ letter-spacing: normal;
566
+ }
567
+
568
+ .score-card.approved { border-color: rgba(16, 185, 129, 0.2); background: rgba(16, 185, 129, 0.03); }
569
+ .score-card.rejected { border-color: rgba(239, 68, 68, 0.2); background: rgba(239, 68, 68, 0.03); }
570
+
571
+ /* Learnings Registry Tab */
572
+ .markdown-view {
573
+ background: rgba(0, 0, 0, 0.2);
574
+ border: 1px solid rgba(255, 255, 255, 0.02);
575
+ border-radius: var(--border-radius);
576
+ padding: 1.5rem;
577
+ font-family: 'Outfit', sans-serif;
578
+ font-size: 0.95rem;
579
+ overflow-y: auto;
580
+ max-height: 600px;
581
+ }
582
+
583
+ .markdown-view h1, .markdown-view h2, .markdown-view h3 {
584
+ margin-top: 1.5rem;
585
+ margin-bottom: 0.75rem;
586
+ font-weight: 600;
587
+ }
588
+
589
+ .markdown-view h3 {
590
+ font-size: 1.1rem;
591
+ color: var(--accent-color);
592
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
593
+ padding-bottom: 0.25rem;
594
+ }
595
+
596
+ .markdown-view ul {
597
+ padding-left: 1.5rem;
598
+ margin-bottom: 1rem;
599
+ }
600
+
601
+ .markdown-view li {
602
+ margin-bottom: 0.5rem;
603
+ }
604
+
605
+ .markdown-view code {
606
+ font-family: 'JetBrains Mono', monospace;
607
+ font-size: 0.85rem;
608
+ background: rgba(255, 255, 255, 0.05);
609
+ padding: 0.1rem 0.3rem;
610
+ border-radius: 3px;
611
+ }
612
+
613
+ .markdown-view pre {
614
+ background: rgba(0, 0, 0, 0.4);
615
+ padding: 1rem;
616
+ border-radius: 6px;
617
+ overflow-x: auto;
618
+ margin-bottom: 1rem;
619
+ }
620
+
621
+ .markdown-view pre code {
622
+ background: transparent;
623
+ padding: 0;
624
+ }
625
+
626
+ /* Console Logs Tab */
627
+ .control-btn {
628
+ background: rgba(255, 255, 255, 0.05);
629
+ border: 1px solid rgba(255, 255, 255, 0.05);
630
+ color: var(--text-dim);
631
+ padding: 0.4rem 0.8rem;
632
+ border-radius: 4px;
633
+ font-size: 0.8rem;
634
+ font-weight: 600;
635
+ cursor: pointer;
636
+ transition: all 0.2s ease;
637
+ }
638
+
639
+ .control-btn.active {
640
+ background: rgba(139, 92, 246, 0.2);
641
+ border-color: rgba(139, 92, 246, 0.4);
642
+ color: var(--text-main);
643
+ }
644
+
645
+ .terminal-log {
646
+ background: hsl(222, 25%, 3%);
647
+ border: 1px solid rgba(255, 255, 255, 0.03);
648
+ border-radius: var(--border-radius);
649
+ padding: 1.5rem;
650
+ font-family: 'JetBrains Mono', monospace;
651
+ font-size: 0.85rem;
652
+ color: hsl(210, 20%, 85%);
653
+ overflow-y: auto;
654
+ height: 480px;
655
+ white-space: pre-wrap;
656
+ word-wrap: break-word;
657
+ line-height: 1.6;
658
+ }
659
+
660
+ /* History Timeline Section */
661
+ .history-timeline-section {
662
+ padding: 2rem;
663
+ }
664
+
665
+ .timeline {
666
+ display: flex;
667
+ flex-direction: column;
668
+ gap: 1.5rem;
669
+ position: relative;
670
+ padding-left: 1.5rem;
671
+ margin-top: 1rem;
672
+ }
673
+
674
+ .timeline::after {
675
+ content: '';
676
+ position: absolute;
677
+ top: 0;
678
+ bottom: 0;
679
+ left: 3px;
680
+ width: 2px;
681
+ background: rgba(255, 255, 255, 0.05);
682
+ }
683
+
684
+ .timeline-empty {
685
+ text-align: center;
686
+ color: var(--text-dim);
687
+ font-style: italic;
688
+ padding: 1rem 0;
689
+ }
690
+
691
+ .timeline-item {
692
+ position: relative;
693
+ }
694
+
695
+ .timeline-item::after {
696
+ content: '';
697
+ position: absolute;
698
+ top: 6px;
699
+ left: -24px;
700
+ width: 8px;
701
+ height: 8px;
702
+ border-radius: 50%;
703
+ background: var(--state-idle);
704
+ box-shadow: 0 0 8px var(--state-idle);
705
+ }
706
+
707
+ .timeline-item.success::after { background-color: var(--state-active); box-shadow: 0 0 8px var(--state-active); }
708
+ .timeline-item.failed::after { background-color: var(--state-err); box-shadow: 0 0 8px var(--state-err); }
709
+
710
+ .timeline-card {
711
+ padding: 1rem 1.25rem;
712
+ background: rgba(255, 255, 255, 0.02);
713
+ border: 1px solid rgba(255, 255, 255, 0.03);
714
+ border-radius: var(--border-radius);
715
+ display: flex;
716
+ justify-content: space-between;
717
+ align-items: flex-start;
718
+ gap: 1rem;
719
+ }
720
+
721
+ .timeline-card .content {
722
+ display: flex;
723
+ flex-direction: column;
724
+ gap: 0.25rem;
725
+ }
726
+
727
+ .timeline-card .content .title {
728
+ font-size: 0.95rem;
729
+ font-weight: 600;
730
+ }
731
+
732
+ .timeline-card .content .desc {
733
+ font-size: 0.85rem;
734
+ color: var(--text-dim);
735
+ }
736
+
737
+ .timeline-card .meta {
738
+ display: flex;
739
+ flex-direction: column;
740
+ align-items: flex-end;
741
+ gap: 0.25rem;
742
+ }
743
+
744
+ .timeline-card .meta .time {
745
+ font-size: 0.75rem;
746
+ color: var(--text-dim);
747
+ }
748
+
749
+ .timeline-card .meta .type {
750
+ font-size: 0.7rem;
751
+ text-transform: uppercase;
752
+ letter-spacing: 0.5px;
753
+ padding: 0.1rem 0.4rem;
754
+ border-radius: 4px;
755
+ background: rgba(255, 255, 255, 0.04);
756
+ color: var(--text-main);
757
+ font-weight: 600;
758
+ }
759
+
760
+ /* Animations */
761
+ @keyframes taskPulse {
762
+ 0% { border-left-color: var(--accent-color); }
763
+ 50% { border-left-color: hsl(190, 80%, 55%); box-shadow: inset 4px 0 20px rgba(139, 92, 246, 0.05); }
764
+ 100% { border-left-color: var(--accent-color); }
765
+ }
766
+
767
+ @keyframes pulse {
768
+ 0%, 100% { opacity: 1; }
769
+ 50% { opacity: 0.4; }
770
+ }
771
+
772
+ .animate-pulse {
773
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
774
+ }
775
+
776
+ .spinner-mini {
777
+ width: 16px;
778
+ height: 16px;
779
+ border: 2px solid rgba(255, 255, 255, 0.1);
780
+ border-top-color: var(--accent-color);
781
+ border-radius: 50%;
782
+ animation: spin 0.8s linear infinite;
783
+ }
784
+
785
+ @keyframes spin {
786
+ to { transform: rotate(360deg); }
787
+ }
788
+
789
+ /* Skill Registry Styling */
790
+ .skills-list-view {
791
+ display: flex;
792
+ flex-direction: column;
793
+ gap: 1.5rem;
794
+ margin-top: 1rem;
795
+ }
796
+
797
+ .skill-card {
798
+ padding: 1.75rem;
799
+ border-left: 4px solid var(--accent-color);
800
+ background: rgba(30, 41, 59, 0.2);
801
+ border: 1px solid var(--panel-border);
802
+ border-left-width: 4px;
803
+ border-radius: var(--border-radius);
804
+ transition: all var(--transition-speed) ease;
805
+ }
806
+
807
+ .skill-card:hover {
808
+ background: rgba(30, 41, 59, 0.35);
809
+ border-color: rgba(255, 255, 255, 0.1);
810
+ transform: translateY(-2px);
811
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
812
+ }
813
+
814
+ .skill-header {
815
+ display: flex;
816
+ justify-content: space-between;
817
+ align-items: flex-start;
818
+ gap: 1rem;
819
+ margin-bottom: 0.75rem;
820
+ }
821
+
822
+ .skill-title {
823
+ font-size: 1.2rem;
824
+ font-weight: 600;
825
+ color: var(--text-main);
826
+ }
827
+
828
+ .skill-id {
829
+ font-family: 'JetBrains Mono', monospace;
830
+ font-size: 0.8rem;
831
+ color: var(--text-dim);
832
+ background: rgba(0, 0, 0, 0.2);
833
+ padding: 0.15rem 0.4rem;
834
+ border-radius: 4px;
835
+ white-space: nowrap;
836
+ }
837
+
838
+ .skill-desc {
839
+ font-size: 0.95rem;
840
+ color: var(--text-dim);
841
+ line-height: 1.5;
842
+ margin-bottom: 1.25rem;
843
+ }
844
+
845
+ .skill-files {
846
+ display: flex;
847
+ flex-direction: column;
848
+ gap: 0.5rem;
849
+ margin-bottom: 1.25rem;
850
+ }
851
+
852
+ .skill-files-label {
853
+ font-size: 0.8rem;
854
+ text-transform: uppercase;
855
+ color: var(--text-dim);
856
+ font-weight: 600;
857
+ letter-spacing: 0.5px;
858
+ }
859
+
860
+ .skill-files-list {
861
+ display: flex;
862
+ flex-wrap: wrap;
863
+ gap: 0.5rem;
864
+ }
865
+
866
+ .skill-file-badge {
867
+ font-family: 'JetBrains Mono', monospace;
868
+ font-size: 0.8rem;
869
+ background: rgba(139, 92, 246, 0.1);
870
+ border: 1px solid rgba(139, 92, 246, 0.2);
871
+ color: hsl(265, 80%, 75%);
872
+ padding: 0.2rem 0.5rem;
873
+ border-radius: 4px;
874
+ }
875
+
876
+ .skill-recipe {
877
+ padding-top: 1.25rem;
878
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
879
+ }
880
+
881
+ .skill-recipe-label {
882
+ font-size: 0.8rem;
883
+ text-transform: uppercase;
884
+ color: var(--text-dim);
885
+ font-weight: 600;
886
+ letter-spacing: 0.5px;
887
+ margin-bottom: 0.75rem;
888
+ }
889
+
890
+ .skill-recipe-steps {
891
+ font-size: 0.9rem;
892
+ color: var(--text-dim);
893
+ line-height: 1.6;
894
+ display: flex;
895
+ flex-direction: column;
896
+ gap: 0.5rem;
897
+ }
898
+
899
+ .skill-recipe-step-item {
900
+ position: relative;
901
+ padding-left: 1.5rem;
902
+ }
903
+
904
+ .skill-recipe-step-item::before {
905
+ content: attr(data-step);
906
+ position: absolute;
907
+ left: 0;
908
+ top: 0;
909
+ font-weight: 700;
910
+ color: var(--accent-color);
911
+ }
912
+
913
+ /* Live Research Tab Styling */
914
+ .research-sessions-container {
915
+ display: flex;
916
+ flex-direction: column;
917
+ gap: 2rem;
918
+ margin-top: 1rem;
919
+ }
920
+
921
+ .research-session-card {
922
+ padding: 1.5rem;
923
+ border: 1px solid var(--panel-border);
924
+ border-radius: var(--border-radius);
925
+ background: rgba(30, 41, 59, 0.2);
926
+ }
927
+
928
+ .research-session-card.running {
929
+ border-left: 4px solid var(--accent-color);
930
+ }
931
+
932
+ .research-session-card.success {
933
+ border-left: 4px solid var(--state-active);
934
+ }
935
+
936
+ .research-session-card.failed {
937
+ border-left: 4px solid var(--state-err);
938
+ }
939
+
940
+ .session-header {
941
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
942
+ padding-bottom: 1rem;
943
+ margin-bottom: 1.5rem;
944
+ }
945
+
946
+ .session-header h3 {
947
+ font-size: 1.15rem;
948
+ font-weight: 600;
949
+ color: var(--text-main);
950
+ }
951
+
952
+ .session-meta {
953
+ display: flex;
954
+ align-items: center;
955
+ gap: 0.75rem;
956
+ }
957
+
958
+ .time-meta {
959
+ font-size: 0.8rem;
960
+ color: var(--text-dim);
961
+ }
962
+
963
+ .badge.effort-standard {
964
+ background: rgba(59, 130, 246, 0.1);
965
+ color: hsl(210, 85%, 65%);
966
+ border: 1px solid rgba(59, 130, 246, 0.2);
967
+ }
968
+
969
+ .badge.effort-ultracode {
970
+ background: rgba(139, 92, 246, 0.15);
971
+ color: hsl(265, 80%, 75%);
972
+ border: 1px solid rgba(139, 92, 246, 0.3);
973
+ box-shadow: 0 0 10px rgba(139, 92, 246, 0.2);
974
+ }
975
+
976
+ .badge.status-running {
977
+ background: rgba(245, 158, 11, 0.1);
978
+ color: hsl(35, 90%, 60%);
979
+ border: 1px solid rgba(245, 158, 11, 0.2);
980
+ }
981
+
982
+ .badge.status-success {
983
+ background: rgba(16, 185, 129, 0.1);
984
+ color: hsl(150, 80%, 50%);
985
+ border: 1px solid rgba(16, 185, 129, 0.2);
986
+ }
987
+
988
+ .badge.status-failed {
989
+ background: rgba(239, 68, 68, 0.1);
990
+ color: hsl(355, 85%, 55%);
991
+ border: 1px solid rgba(239, 68, 68, 0.2);
992
+ }
993
+
994
+ .decisions-list {
995
+ display: flex;
996
+ flex-direction: column;
997
+ gap: 1.25rem;
998
+ position: relative;
999
+ padding-left: 1.5rem;
1000
+ }
1001
+
1002
+ .decisions-list::before {
1003
+ content: '';
1004
+ position: absolute;
1005
+ top: 6px;
1006
+ bottom: 6px;
1007
+ left: 4px;
1008
+ width: 2px;
1009
+ background: rgba(255, 255, 255, 0.05);
1010
+ }
1011
+
1012
+ .decision-item-node {
1013
+ position: relative;
1014
+ display: flex;
1015
+ gap: 1rem;
1016
+ }
1017
+
1018
+ .node-dot {
1019
+ position: absolute;
1020
+ left: -23px;
1021
+ top: 6px;
1022
+ width: 10px;
1023
+ height: 10px;
1024
+ border-radius: 50%;
1025
+ background: var(--state-idle);
1026
+ box-shadow: 0 0 8px var(--state-idle);
1027
+ z-index: 2;
1028
+ }
1029
+
1030
+ .decision-item-node.success .node-dot {
1031
+ background-color: var(--state-active);
1032
+ box-shadow: 0 0 8px var(--state-active);
1033
+ }
1034
+
1035
+ .decision-item-node.failure .node-dot {
1036
+ background-color: var(--state-err);
1037
+ box-shadow: 0 0 8px var(--state-err);
1038
+ }
1039
+
1040
+ .decision-item-node.info .node-dot {
1041
+ background-color: hsl(200, 85%, 50%);
1042
+ box-shadow: 0 0 8px hsl(200, 85%, 50%);
1043
+ }
1044
+
1045
+ .node-content {
1046
+ flex: 1;
1047
+ background: rgba(255, 255, 255, 0.01);
1048
+ border: 1px solid rgba(255, 255, 255, 0.02);
1049
+ padding: 0.85rem 1.15rem;
1050
+ border-radius: 8px;
1051
+ }
1052
+
1053
+ .node-header {
1054
+ margin-bottom: 0.35rem;
1055
+ }
1056
+
1057
+ .node-header .phase {
1058
+ font-size: 0.85rem;
1059
+ font-weight: 600;
1060
+ color: var(--accent-color);
1061
+ }
1062
+
1063
+ .node-header .time {
1064
+ font-size: 0.75rem;
1065
+ color: var(--text-dim);
1066
+ }
1067
+
1068
+ .node-content .action {
1069
+ font-size: 0.9rem;
1070
+ color: var(--text-main);
1071
+ line-height: 1.4;
1072
+ }
1073
+
1074
+ .node-content pre.details {
1075
+ margin-top: 0.75rem;
1076
+ padding: 0.75rem;
1077
+ background: rgba(0, 0, 0, 0.3);
1078
+ border: 1px solid rgba(255, 255, 255, 0.03);
1079
+ border-radius: 6px;
1080
+ font-family: 'JetBrains Mono', monospace;
1081
+ font-size: 0.8rem;
1082
+ color: hsl(210, 15%, 80%);
1083
+ overflow-x: auto;
1084
+ white-space: pre-wrap;
1085
+ word-wrap: break-word;
1086
+ max-height: 250px;
1087
+ }
1088
+
1089
+ /* DGM Archive Tab Styles */
1090
+ .archive-nodes-list {
1091
+ display: flex;
1092
+ flex-direction: column;
1093
+ align-items: center;
1094
+ gap: 0;
1095
+ margin-top: 1.5rem;
1096
+ padding: 1rem 0;
1097
+ }
1098
+
1099
+ .archive-node-card {
1100
+ width: 100%;
1101
+ max-width: 800px;
1102
+ padding: 1.5rem;
1103
+ background: var(--panel-bg);
1104
+ border: 1px solid var(--panel-border);
1105
+ border-radius: var(--border-radius);
1106
+ transition: all var(--transition-speed) ease;
1107
+ position: relative;
1108
+ }
1109
+
1110
+ .archive-node-card:hover {
1111
+ border-color: var(--accent-color);
1112
+ box-shadow: 0 0 20px var(--accent-glow), var(--card-shadow);
1113
+ transform: translateY(-2px);
1114
+ }
1115
+
1116
+ .archive-node-header {
1117
+ margin-bottom: 1rem;
1118
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
1119
+ padding-bottom: 0.75rem;
1120
+ }
1121
+
1122
+ .archive-node-header .title-wrapper {
1123
+ display: flex;
1124
+ align-items: center;
1125
+ gap: 0.75rem;
1126
+ }
1127
+
1128
+ .archive-node-header .node-title {
1129
+ font-size: 1.15rem;
1130
+ font-weight: 700;
1131
+ color: var(--text-main);
1132
+ letter-spacing: -0.02em;
1133
+ }
1134
+
1135
+ .archive-node-header .node-cycle-badge {
1136
+ font-size: 0.75rem;
1137
+ font-weight: 600;
1138
+ background: hsla(265, 80%, 65%, 0.15);
1139
+ color: hsl(265, 80%, 75%);
1140
+ padding: 0.2rem 0.6rem;
1141
+ border-radius: 20px;
1142
+ border: 1px solid hsla(265, 80%, 65%, 0.3);
1143
+ }
1144
+
1145
+ .archive-node-header .node-time-stamp {
1146
+ font-size: 0.8rem;
1147
+ color: var(--text-dim);
1148
+ margin-right: 1rem;
1149
+ }
1150
+
1151
+ .archive-node-header .node-hash-badge {
1152
+ font-family: 'JetBrains Mono', monospace;
1153
+ font-size: 0.8rem;
1154
+ background: rgba(255, 255, 255, 0.06);
1155
+ color: var(--text-main);
1156
+ padding: 0.25rem 0.5rem;
1157
+ border-radius: 4px;
1158
+ border: 1px solid rgba(255, 255, 255, 0.1);
1159
+ cursor: help;
1160
+ }
1161
+
1162
+ .node-task-desc {
1163
+ font-size: 0.95rem;
1164
+ color: var(--text-main);
1165
+ margin-bottom: 1.25rem;
1166
+ line-height: 1.5;
1167
+ }
1168
+
1169
+ .node-task-desc .label {
1170
+ font-weight: 600;
1171
+ color: var(--text-dim);
1172
+ margin-right: 0.5rem;
1173
+ }
1174
+
1175
+ .node-metrics-container {
1176
+ display: flex;
1177
+ flex-direction: column;
1178
+ gap: 1rem;
1179
+ }
1180
+
1181
+ .primary-metrics-row {
1182
+ display: flex;
1183
+ gap: 1rem;
1184
+ width: 100%;
1185
+ }
1186
+
1187
+ @media (max-width: 600px) {
1188
+ .primary-metrics-row {
1189
+ flex-direction: column;
1190
+ }
1191
+ }
1192
+
1193
+ .metric-mini-card {
1194
+ flex: 1;
1195
+ background: rgba(0, 0, 0, 0.2);
1196
+ border: 1px solid rgba(255, 255, 255, 0.03);
1197
+ border-radius: 8px;
1198
+ padding: 0.75rem 1rem;
1199
+ display: flex;
1200
+ flex-direction: column;
1201
+ gap: 0.35rem;
1202
+ }
1203
+
1204
+ .metric-mini-card .metric-label {
1205
+ font-size: 0.75rem;
1206
+ color: var(--text-dim);
1207
+ font-weight: 500;
1208
+ text-transform: uppercase;
1209
+ letter-spacing: 0.05em;
1210
+ }
1211
+
1212
+ .metric-mini-card .metric-value {
1213
+ font-size: 1.25rem;
1214
+ font-weight: 700;
1215
+ }
1216
+
1217
+ .metric-mini-card .metric-value.good {
1218
+ color: var(--state-active);
1219
+ text-shadow: 0 0 10px hsla(150, 80%, 50%, 0.2);
1220
+ }
1221
+
1222
+ .metric-mini-card .metric-value.warn {
1223
+ color: var(--state-warn);
1224
+ text-shadow: 0 0 10px hsla(35, 90%, 55%, 0.2);
1225
+ }
1226
+
1227
+ .metric-mini-card .metric-value.bad {
1228
+ color: var(--state-err);
1229
+ text-shadow: 0 0 10px hsla(355, 85%, 55%, 0.2);
1230
+ }
1231
+
1232
+ .metric-mini-card .metric-bar-bg {
1233
+ width: 100%;
1234
+ height: 4px;
1235
+ background: rgba(255, 255, 255, 0.05);
1236
+ border-radius: 2px;
1237
+ overflow: hidden;
1238
+ margin-top: 0.25rem;
1239
+ }
1240
+
1241
+ .metric-mini-card .metric-bar {
1242
+ height: 100%;
1243
+ border-radius: 2px;
1244
+ }
1245
+
1246
+ .metric-mini-card .metric-bar.good {
1247
+ background: var(--state-active);
1248
+ box-shadow: 0 0 6px var(--state-active);
1249
+ }
1250
+
1251
+ .metric-mini-card .metric-bar.warn {
1252
+ background: var(--state-warn);
1253
+ box-shadow: 0 0 6px var(--state-warn);
1254
+ }
1255
+
1256
+ .metric-mini-card .metric-bar.bad {
1257
+ background: var(--state-err);
1258
+ box-shadow: 0 0 6px var(--state-err);
1259
+ }
1260
+
1261
+ .drift-breakdown-toggle {
1262
+ background: none;
1263
+ border: none;
1264
+ color: var(--accent-color);
1265
+ font-size: 0.85rem;
1266
+ font-weight: 600;
1267
+ cursor: pointer;
1268
+ padding: 0.25rem 0;
1269
+ align-self: flex-start;
1270
+ transition: color var(--transition-speed);
1271
+ }
1272
+
1273
+ .drift-breakdown-toggle:hover {
1274
+ color: hsl(265, 80%, 75%);
1275
+ text-decoration: underline;
1276
+ }
1277
+
1278
+ .drift-breakdown-panel {
1279
+ background: rgba(0, 0, 0, 0.15);
1280
+ border: 1px dashed rgba(255, 255, 255, 0.05);
1281
+ border-radius: 8px;
1282
+ padding: 1rem;
1283
+ transition: all var(--transition-speed) ease;
1284
+ }
1285
+
1286
+ .drift-breakdown-panel .breakdown-grid {
1287
+ display: grid;
1288
+ grid-template-columns: repeat(2, 1fr);
1289
+ gap: 0.75rem;
1290
+ }
1291
+
1292
+ @media (max-width: 500px) {
1293
+ .drift-breakdown-panel .breakdown-grid {
1294
+ grid-template-columns: 1fr;
1295
+ }
1296
+ }
1297
+
1298
+ .breakdown-item {
1299
+ display: flex;
1300
+ justify-content: space-between;
1301
+ font-size: 0.85rem;
1302
+ border-bottom: 1px solid rgba(255, 255, 255, 0.02);
1303
+ padding-bottom: 0.25rem;
1304
+ }
1305
+
1306
+ .breakdown-item .breakdown-label {
1307
+ color: var(--text-dim);
1308
+ }
1309
+
1310
+ .breakdown-item .breakdown-value {
1311
+ font-family: 'JetBrains Mono', monospace;
1312
+ color: var(--text-main);
1313
+ font-weight: 600;
1314
+ }
1315
+
1316
+ .tree-connector-line {
1317
+ width: 2px;
1318
+ height: 40px;
1319
+ background: linear-gradient(to bottom, var(--accent-color), rgba(255, 255, 255, 0.05));
1320
+ position: relative;
1321
+ display: flex;
1322
+ justify-content: center;
1323
+ align-items: center;
1324
+ }
1325
+
1326
+ .tree-connector-dot {
1327
+ width: 8px;
1328
+ height: 8px;
1329
+ border-radius: 50%;
1330
+ background-color: var(--accent-color);
1331
+ box-shadow: 0 0 8px var(--accent-color);
1332
+ position: absolute;
1333
+ }
1334
+