x-ipe 1.0.24__py3-none-any.whl → 1.0.25__py3-none-any.whl

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 (139) hide show
  1. x_ipe/app.py +25 -3
  2. x_ipe/handlers/terminal_handlers.py +6 -0
  3. x_ipe/handlers/voice_handlers.py +5 -0
  4. x_ipe/resources/copilot-instructions.md +19 -6
  5. x_ipe/resources/skills/lesson-learned/SKILL.md +208 -0
  6. x_ipe/resources/skills/lesson-learned/references/examples.md +238 -0
  7. x_ipe/resources/skills/project-quality-board-management/SKILL.md +135 -298
  8. x_ipe/resources/skills/project-quality-board-management/references/evaluation-principles.md +213 -0
  9. x_ipe/resources/skills/project-quality-board-management/references/evaluation-procedures.md +214 -0
  10. x_ipe/resources/skills/project-quality-board-management/templates/quality-report.md +70 -18
  11. x_ipe/resources/skills/task-execution-guideline/SKILL.md +2 -2
  12. x_ipe/resources/skills/task-execution-guideline/templates/task-record.yaml +1 -1
  13. x_ipe/resources/skills/task-type-code-implementation/SKILL.md +72 -270
  14. x_ipe/resources/skills/task-type-code-implementation/references/implementation-guidelines.md +432 -0
  15. x_ipe/resources/skills/task-type-code-refactor-v2/SKILL.md +127 -353
  16. x_ipe/resources/skills/task-type-code-refactor-v2/references/refactoring-techniques.md +373 -0
  17. x_ipe/resources/skills/task-type-feature-breakdown/SKILL.md +31 -243
  18. x_ipe/resources/skills/task-type-feature-breakdown/references/breakdown-guidelines.md +330 -0
  19. x_ipe/resources/skills/task-type-feature-refinement/SKILL.md +27 -180
  20. x_ipe/resources/skills/task-type-feature-refinement/references/specification-writing-guide.md +267 -0
  21. x_ipe/resources/skills/task-type-idea-mockup/SKILL.md +38 -276
  22. x_ipe/resources/skills/task-type-idea-mockup/references/mockup-guidelines.md +299 -0
  23. x_ipe/resources/skills/task-type-idea-to-architecture/SKILL.md +20 -218
  24. x_ipe/resources/skills/task-type-idea-to-architecture/references/architecture-patterns.md +342 -0
  25. x_ipe/resources/skills/task-type-ideation/SKILL.md +10 -266
  26. x_ipe/resources/skills/task-type-ideation/references/folder-naming-guide.md +55 -0
  27. x_ipe/resources/skills/task-type-ideation/references/tool-usage-guide.md +236 -0
  28. x_ipe/resources/skills/task-type-ideation-v2/SKILL.md +488 -0
  29. x_ipe/resources/skills/task-type-ideation-v2/references/examples.md +377 -0
  30. x_ipe/resources/skills/task-type-ideation-v2/references/folder-naming-guide.md +74 -0
  31. x_ipe/resources/skills/task-type-ideation-v2/references/tool-usage-guide.md +145 -0
  32. x_ipe/resources/skills/task-type-ideation-v2/references/visualization-guide.md +160 -0
  33. x_ipe/resources/skills/task-type-ideation-v2/templates/idea-summary.md +86 -0
  34. x_ipe/resources/skills/task-type-refactoring-analysis/SKILL.md +83 -145
  35. x_ipe/resources/skills/task-type-refactoring-analysis/references/output-schema.md +172 -0
  36. x_ipe/resources/skills/task-type-technical-design/SKILL.md +28 -214
  37. x_ipe/resources/skills/task-type-technical-design/references/design-templates.md +422 -0
  38. x_ipe/resources/skills/task-type-test-generation/SKILL.md +47 -332
  39. x_ipe/resources/skills/task-type-test-generation/references/test-patterns.md +368 -0
  40. x_ipe/resources/skills/tool-tracing-creator/SKILL.md +312 -0
  41. x_ipe/resources/skills/tool-tracing-creator/references/examples.md +324 -0
  42. x_ipe/resources/skills/tool-tracing-instrumentation/SKILL.md +373 -0
  43. x_ipe/resources/skills/tool-tracing-instrumentation/references/examples.md +264 -0
  44. x_ipe/resources/skills/x-ipe-skill-creator-v3/SKILL.md +486 -0
  45. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/10. example-gate-conditions.md +73 -0
  46. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/11. reference-quality-standards.md +127 -0
  47. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/2. reference-section-order.md +127 -0
  48. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/3. example-step-based-code-review.md +84 -0
  49. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/4. example-step-based-feature-implementation.md +113 -0
  50. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/5. example-function-based-validation.md +73 -0
  51. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/6. example-function-based-analysis.md +94 -0
  52. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/7. example-task-io-code-implementation.md +36 -0
  53. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/8. example-structured-summary.md +43 -0
  54. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/9. example-dor-dod.md +77 -0
  55. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/examples.md +429 -0
  56. x_ipe/resources/skills/x-ipe-skill-creator-v3/references/skill-general-guidelines-v2.md +611 -0
  57. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-meta.md +153 -0
  58. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-task-based.md +324 -0
  59. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-task-category.md +109 -0
  60. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/skill-meta-x-ipe-tool.md +205 -0
  61. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-meta.md +334 -0
  62. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-task-based.md +279 -0
  63. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-tool.md +175 -0
  64. x_ipe/resources/skills/x-ipe-skill-creator-v3/templates/x-ipe-workflow-orchestration.md +329 -0
  65. x_ipe/resources/skills/x-ipe-task-based-ideation/SKILL.md +487 -0
  66. x_ipe/resources/skills/x-ipe-task-based-ideation/references/examples.md +377 -0
  67. x_ipe/resources/skills/x-ipe-task-based-ideation/references/folder-naming-guide.md +74 -0
  68. x_ipe/resources/skills/x-ipe-task-based-ideation/references/tool-usage-guide.md +145 -0
  69. x_ipe/resources/skills/x-ipe-task-based-ideation/references/visualization-guide.md +160 -0
  70. x_ipe/resources/skills/x-ipe-task-based-ideation/templates/idea-summary.md +86 -0
  71. x_ipe/routes/__init__.py +2 -0
  72. x_ipe/routes/ideas_routes.py +17 -0
  73. x_ipe/routes/kb_routes.py +80 -0
  74. x_ipe/routes/main_routes.py +18 -0
  75. x_ipe/routes/project_routes.py +7 -0
  76. x_ipe/routes/proxy_routes.py +2 -0
  77. x_ipe/routes/quality_evaluation_routes.py +193 -0
  78. x_ipe/routes/settings_routes.py +6 -0
  79. x_ipe/routes/tools_routes.py +6 -0
  80. x_ipe/routes/tracing_routes.py +232 -0
  81. x_ipe/routes/uiux_feedback_routes.py +30 -0
  82. x_ipe/services/__init__.py +5 -0
  83. x_ipe/services/config_service.py +6 -0
  84. x_ipe/services/file_service.py +20 -0
  85. x_ipe/services/homepage_service.py +160 -0
  86. x_ipe/services/ideas_service.py +19 -0
  87. x_ipe/services/kb_service.py +378 -0
  88. x_ipe/services/proxy_service.py +4 -0
  89. x_ipe/services/settings_service.py +13 -0
  90. x_ipe/services/skills_service.py +4 -0
  91. x_ipe/services/terminal_service.py +24 -0
  92. x_ipe/services/themes_service.py +4 -0
  93. x_ipe/services/tools_config_service.py +4 -0
  94. x_ipe/services/tracing_service.py +333 -0
  95. x_ipe/services/uiux_feedback_service.py +32 -0
  96. x_ipe/services/voice_input_service_v2.py +11 -0
  97. x_ipe/static/css/base.css +7 -0
  98. x_ipe/static/css/homepage-infinity.css +330 -0
  99. x_ipe/static/css/kb-core.css +301 -0
  100. x_ipe/static/css/quality-evaluation.css +345 -0
  101. x_ipe/static/css/sidebar.css +14 -4
  102. x_ipe/static/css/terminal.css +1 -0
  103. x_ipe/static/css/tracing-dashboard.css +796 -0
  104. x_ipe/static/css/workplace.css +20 -0
  105. x_ipe/static/img/homepage-infinity-loop.png +0 -0
  106. x_ipe/static/js/features/homepage-infinity.js +314 -0
  107. x_ipe/static/js/features/kb-core.js +371 -0
  108. x_ipe/static/js/features/quality-evaluation.js +387 -0
  109. x_ipe/static/js/features/sidebar.js +255 -12
  110. x_ipe/static/js/features/tracing-dashboard.js +855 -0
  111. x_ipe/static/js/features/tracing-graph.js +1031 -0
  112. x_ipe/static/js/features/tree-search.js +6 -2
  113. x_ipe/static/js/features/workplace.js +200 -6
  114. x_ipe/static/js/init.js +76 -0
  115. x_ipe/static/js/uiux-feedback.js +18 -2
  116. x_ipe/templates/base.html +19 -0
  117. x_ipe/templates/index.html +7 -1
  118. x_ipe/templates/knowledge-base.html +110 -0
  119. x_ipe/templates/workplace.html +4 -0
  120. x_ipe/tracing/__init__.py +37 -0
  121. x_ipe/tracing/buffer.py +135 -0
  122. x_ipe/tracing/context.py +125 -0
  123. x_ipe/tracing/decorator.py +288 -0
  124. x_ipe/tracing/middleware.py +197 -0
  125. x_ipe/tracing/parser.py +235 -0
  126. x_ipe/tracing/redactor.py +111 -0
  127. x_ipe/tracing/writer.py +122 -0
  128. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/METADATA +2 -2
  129. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/RECORD +132 -62
  130. x_ipe/resources/skills/x-ipe-skill-creator/SKILL.md +0 -329
  131. x_ipe/resources/skills/x-ipe-skill-creator/references/output-patterns.md +0 -169
  132. x_ipe/resources/skills/x-ipe-skill-creator/references/skill-structure.md +0 -162
  133. x_ipe/resources/skills/x-ipe-skill-creator/references/workflows.md +0 -110
  134. x_ipe/resources/skills/x-ipe-skill-creator/templates/references/examples.md +0 -113
  135. x_ipe/resources/skills/x-ipe-skill-creator/templates/skill-category-skill.md +0 -296
  136. x_ipe/resources/skills/x-ipe-skill-creator/templates/task-type-skill.md +0 -269
  137. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/WHEEL +0 -0
  138. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/entry_points.txt +0 -0
  139. {x_ipe-1.0.24.dist-info → x_ipe-1.0.25.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,796 @@
1
+ /**
2
+ * FEATURE-023-B: Tracing Dashboard UI Styles
3
+ * Matches mockup tracing-dashboard-v4.html
4
+ */
5
+
6
+ /* Color variables - matching mockup */
7
+ :root {
8
+ --tracing-bg-primary: #ffffff;
9
+ --tracing-bg-secondary: #f8fafc;
10
+ --tracing-bg-tertiary: #f1f5f9;
11
+ --tracing-bg-hover: #e2e8f0;
12
+
13
+ --tracing-text-primary: #0f172a;
14
+ --tracing-text-secondary: #475569;
15
+ --tracing-text-muted: #94a3b8;
16
+
17
+ --tracing-status-success: #10b981;
18
+ --tracing-status-success-light: #d1fae5;
19
+ --tracing-status-error: #ef4444;
20
+ --tracing-status-error-light: #fee2e2;
21
+ --tracing-status-warning: #f59e0b;
22
+ --tracing-status-warning-light: #fef3c7;
23
+ --tracing-status-processing: #3b82f6;
24
+ --tracing-status-processing-light: #dbeafe;
25
+
26
+ --tracing-accent-primary: #6366f1;
27
+ --tracing-accent-light: #e0e7ff;
28
+
29
+ --tracing-border-subtle: #e2e8f0;
30
+ --tracing-border-default: #cbd5e1;
31
+
32
+ --tracing-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
33
+ --tracing-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
34
+ }
35
+
36
+ /* Main container */
37
+ .tracing-dashboard {
38
+ display: flex;
39
+ flex-direction: column;
40
+ height: 100%;
41
+ background: var(--tracing-bg-secondary);
42
+ color: var(--tracing-text-primary);
43
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
44
+ }
45
+
46
+ /* ===== HEADER ===== */
47
+ .tracing-header {
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: space-between;
51
+ padding: 0 20px;
52
+ height: 56px;
53
+ background: var(--tracing-bg-primary);
54
+ border-bottom: 1px solid var(--tracing-border-subtle);
55
+ flex-shrink: 0;
56
+ }
57
+
58
+ .tracing-header-left {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 16px;
62
+ }
63
+
64
+ .tracing-header h2 {
65
+ margin: 0;
66
+ font-size: 16px;
67
+ font-weight: 600;
68
+ color: var(--tracing-text-primary);
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 8px;
72
+ }
73
+
74
+ .tracing-header-controls {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 12px;
78
+ }
79
+
80
+ /* Tracing Control Group */
81
+ .tracing-control {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 12px;
85
+ }
86
+
87
+ .tracing-label {
88
+ font-size: 13px;
89
+ color: var(--tracing-text-secondary);
90
+ font-weight: 500;
91
+ }
92
+
93
+ /* Duration Toggle - Pill style like mockup */
94
+ .duration-toggle {
95
+ display: flex;
96
+ background: var(--tracing-bg-tertiary);
97
+ border-radius: 8px;
98
+ padding: 3px;
99
+ gap: 2px;
100
+ }
101
+
102
+ .duration-option {
103
+ padding: 6px 12px;
104
+ font-size: 12px;
105
+ font-weight: 500;
106
+ color: var(--tracing-text-muted);
107
+ background: none;
108
+ border: none;
109
+ border-radius: 6px;
110
+ cursor: pointer;
111
+ transition: all 0.15s;
112
+ }
113
+
114
+ .duration-option:hover {
115
+ color: var(--tracing-text-secondary);
116
+ }
117
+
118
+ .duration-option.active {
119
+ background: var(--tracing-accent-primary);
120
+ color: white;
121
+ box-shadow: var(--tracing-shadow-sm);
122
+ }
123
+
124
+ /* Countdown Timer - Matching mockup */
125
+ .countdown-container {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 8px;
129
+ padding: 6px 14px;
130
+ background: var(--tracing-status-success-light);
131
+ border: 1px solid var(--tracing-status-success);
132
+ border-radius: 8px;
133
+ transition: all 0.25s;
134
+ }
135
+
136
+ .countdown-container.inactive {
137
+ background: var(--tracing-bg-tertiary);
138
+ border-color: var(--tracing-border-subtle);
139
+ }
140
+
141
+ .countdown-container.warning {
142
+ background: var(--tracing-status-warning-light);
143
+ border-color: var(--tracing-status-warning);
144
+ }
145
+
146
+ .countdown-icon {
147
+ width: 16px;
148
+ height: 16px;
149
+ color: var(--tracing-status-success);
150
+ animation: tracing-pulse 2s infinite;
151
+ }
152
+
153
+ .countdown-container.inactive .countdown-icon {
154
+ color: var(--tracing-text-muted);
155
+ animation: none;
156
+ }
157
+
158
+ .countdown-container.warning .countdown-icon {
159
+ color: var(--tracing-status-warning);
160
+ animation: tracing-pulse 1s infinite;
161
+ }
162
+
163
+ @keyframes tracing-pulse {
164
+ 0%, 100% { opacity: 1; }
165
+ 50% { opacity: 0.5; }
166
+ }
167
+
168
+ .countdown-text {
169
+ font-family: 'JetBrains Mono', 'Consolas', monospace;
170
+ font-size: 13px;
171
+ font-weight: 600;
172
+ color: var(--tracing-status-success);
173
+ min-width: 50px;
174
+ }
175
+
176
+ .countdown-container.inactive .countdown-text {
177
+ color: var(--tracing-text-muted);
178
+ }
179
+
180
+ .countdown-container.warning .countdown-text {
181
+ color: var(--tracing-status-warning);
182
+ }
183
+
184
+ .countdown-label {
185
+ font-size: 11px;
186
+ color: var(--tracing-status-success);
187
+ font-weight: 500;
188
+ }
189
+
190
+ .countdown-container.inactive .countdown-label {
191
+ color: var(--tracing-text-muted);
192
+ }
193
+
194
+ .countdown-container.warning .countdown-label {
195
+ color: var(--tracing-status-warning);
196
+ }
197
+
198
+ /* Stop Button */
199
+ .stop-btn {
200
+ padding: 6px 12px;
201
+ background: var(--tracing-status-error-light);
202
+ border: 1px solid var(--tracing-status-error);
203
+ border-radius: 6px;
204
+ color: var(--tracing-status-error);
205
+ font-size: 12px;
206
+ font-weight: 600;
207
+ cursor: pointer;
208
+ transition: all 0.15s;
209
+ }
210
+
211
+ .stop-btn:hover {
212
+ background: var(--tracing-status-error);
213
+ color: white;
214
+ }
215
+
216
+ .stop-btn.hidden {
217
+ display: none;
218
+ }
219
+
220
+ /* Icon Buttons */
221
+ .icon-btn {
222
+ width: 34px;
223
+ height: 34px;
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: center;
227
+ background: var(--tracing-bg-tertiary);
228
+ border: 1px solid var(--tracing-border-subtle);
229
+ border-radius: 8px;
230
+ color: var(--tracing-text-secondary);
231
+ cursor: pointer;
232
+ transition: all 0.15s;
233
+ }
234
+
235
+ .icon-btn:hover {
236
+ background: var(--tracing-bg-hover);
237
+ color: var(--tracing-text-primary);
238
+ border-color: var(--tracing-border-default);
239
+ }
240
+
241
+ /* ===== MAIN CONTENT ===== */
242
+ .tracing-content {
243
+ display: flex;
244
+ flex: 1;
245
+ overflow: hidden;
246
+ }
247
+
248
+ /* ===== SIDEBAR ===== */
249
+ .trace-list-sidebar {
250
+ width: 340px;
251
+ background: var(--tracing-bg-primary);
252
+ border-right: 1px solid var(--tracing-border-subtle);
253
+ display: flex;
254
+ flex-direction: column;
255
+ flex-shrink: 0;
256
+ }
257
+
258
+ .trace-list-header {
259
+ padding: 16px;
260
+ border-bottom: 1px solid var(--tracing-border-subtle);
261
+ }
262
+
263
+ .trace-list-title {
264
+ font-size: 12px;
265
+ font-weight: 600;
266
+ color: var(--tracing-text-muted);
267
+ text-transform: uppercase;
268
+ letter-spacing: 0.05em;
269
+ margin-bottom: 12px;
270
+ }
271
+
272
+ /* Search Box */
273
+ .trace-search-box {
274
+ position: relative;
275
+ }
276
+
277
+ .trace-search-box input {
278
+ width: 100%;
279
+ padding: 10px 12px 10px 36px;
280
+ background: var(--tracing-bg-tertiary);
281
+ border: 1px solid var(--tracing-border-subtle);
282
+ border-radius: 8px;
283
+ color: var(--tracing-text-primary);
284
+ font-size: 13px;
285
+ font-family: inherit;
286
+ transition: all 0.15s;
287
+ }
288
+
289
+ .trace-search-box input::placeholder {
290
+ color: var(--tracing-text-muted);
291
+ }
292
+
293
+ .trace-search-box input:focus {
294
+ outline: none;
295
+ border-color: var(--tracing-accent-primary);
296
+ box-shadow: 0 0 0 3px var(--tracing-accent-light);
297
+ }
298
+
299
+ .trace-search-box .search-icon {
300
+ position: absolute;
301
+ left: 12px;
302
+ top: 50%;
303
+ transform: translateY(-50%);
304
+ width: 14px;
305
+ height: 14px;
306
+ color: var(--tracing-text-muted);
307
+ }
308
+
309
+ /* Filter Chips */
310
+ .filter-row {
311
+ display: flex;
312
+ gap: 8px;
313
+ padding: 12px 16px;
314
+ border-bottom: 1px solid var(--tracing-border-subtle);
315
+ }
316
+
317
+ .filter-chip {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 5px;
321
+ padding: 5px 10px;
322
+ background: var(--tracing-bg-primary);
323
+ border: 1px solid var(--tracing-border-subtle);
324
+ border-radius: 16px;
325
+ font-size: 11px;
326
+ font-weight: 500;
327
+ color: var(--tracing-text-secondary);
328
+ cursor: pointer;
329
+ transition: all 0.15s;
330
+ }
331
+
332
+ .filter-chip:hover {
333
+ background: var(--tracing-bg-tertiary);
334
+ border-color: var(--tracing-border-default);
335
+ }
336
+
337
+ .filter-chip.active {
338
+ background: var(--tracing-accent-light);
339
+ border-color: var(--tracing-accent-primary);
340
+ color: var(--tracing-accent-primary);
341
+ }
342
+
343
+ .filter-chip .dot {
344
+ width: 6px;
345
+ height: 6px;
346
+ border-radius: 50%;
347
+ }
348
+
349
+ .filter-chip .dot.success { background: var(--tracing-status-success); }
350
+ .filter-chip .dot.error { background: var(--tracing-status-error); }
351
+ .filter-chip .dot.processing { background: var(--tracing-status-processing); }
352
+
353
+ /* Trace List */
354
+ .trace-list-items {
355
+ flex: 1;
356
+ overflow-y: auto;
357
+ padding: 8px;
358
+ }
359
+
360
+ .trace-item {
361
+ padding: 12px 14px;
362
+ background: var(--tracing-bg-primary);
363
+ border: 1px solid var(--tracing-border-subtle);
364
+ border-radius: 10px;
365
+ margin-bottom: 6px;
366
+ cursor: pointer;
367
+ transition: all 0.15s;
368
+ position: relative;
369
+ }
370
+
371
+ .trace-item::before {
372
+ content: '';
373
+ position: absolute;
374
+ left: 0;
375
+ top: 0;
376
+ bottom: 0;
377
+ width: 3px;
378
+ border-radius: 10px 0 0 10px;
379
+ opacity: 0;
380
+ transition: opacity 0.15s;
381
+ }
382
+
383
+ .trace-item.success::before { background: var(--tracing-status-success); }
384
+ .trace-item.error::before { background: var(--tracing-status-error); }
385
+ .trace-item.processing::before { background: var(--tracing-status-processing); }
386
+
387
+ .trace-item:hover {
388
+ background: var(--tracing-bg-tertiary);
389
+ border-color: var(--tracing-border-default);
390
+ }
391
+
392
+ .trace-item:hover::before,
393
+ .trace-item.selected::before {
394
+ opacity: 1;
395
+ }
396
+
397
+ .trace-item.selected {
398
+ background: var(--tracing-accent-light);
399
+ border-color: var(--tracing-accent-primary);
400
+ }
401
+
402
+ /* Trace ID Row */
403
+ .trace-id-row {
404
+ display: flex;
405
+ align-items: center;
406
+ justify-content: space-between;
407
+ margin-bottom: 8px;
408
+ gap: 6px;
409
+ }
410
+
411
+ .trace-id {
412
+ font-family: 'JetBrains Mono', 'Consolas', monospace;
413
+ font-size: 11px;
414
+ color: var(--tracing-text-muted);
415
+ background: var(--tracing-bg-tertiary);
416
+ padding: 3px 8px;
417
+ border-radius: 4px;
418
+ }
419
+
420
+ .trace-block-btn {
421
+ display: none;
422
+ align-items: center;
423
+ justify-content: center;
424
+ width: 20px;
425
+ height: 20px;
426
+ padding: 0;
427
+ border: none;
428
+ background: transparent;
429
+ color: var(--tracing-text-muted);
430
+ border-radius: 4px;
431
+ cursor: pointer;
432
+ transition: all 0.15s ease;
433
+ margin-left: auto;
434
+ }
435
+
436
+ .trace-item:hover .trace-block-btn {
437
+ display: flex;
438
+ }
439
+
440
+ .trace-block-btn:hover {
441
+ background: var(--tracing-status-error-light);
442
+ color: var(--tracing-status-error);
443
+ }
444
+
445
+ .trace-block-btn i {
446
+ font-size: 12px;
447
+ }
448
+
449
+ .trace-status-dot {
450
+ width: 8px;
451
+ height: 8px;
452
+ border-radius: 50%;
453
+ }
454
+
455
+ .trace-status-dot.success { background: var(--tracing-status-success); }
456
+ .trace-status-dot.error { background: var(--tracing-status-error); }
457
+ .trace-status-dot.processing {
458
+ background: var(--tracing-status-processing);
459
+ animation: tracing-pulse 2s infinite;
460
+ }
461
+
462
+ /* Trace Entry API */
463
+ .trace-entry-api {
464
+ display: flex;
465
+ align-items: center;
466
+ gap: 8px;
467
+ margin-bottom: 6px;
468
+ }
469
+
470
+ .method-badge {
471
+ padding: 2px 6px;
472
+ background: var(--tracing-bg-tertiary);
473
+ border-radius: 4px;
474
+ font-family: 'JetBrains Mono', 'Consolas', monospace;
475
+ font-size: 10px;
476
+ font-weight: 600;
477
+ color: var(--tracing-status-processing);
478
+ }
479
+
480
+ .method-badge.get { color: var(--tracing-status-processing); }
481
+ .method-badge.post { color: var(--tracing-status-success); }
482
+ .method-badge.put { color: var(--tracing-status-warning); }
483
+ .method-badge.delete { color: var(--tracing-status-error); }
484
+
485
+ .trace-path {
486
+ font-family: 'JetBrains Mono', 'Consolas', monospace;
487
+ font-size: 12px;
488
+ color: var(--tracing-text-primary);
489
+ font-weight: 500;
490
+ white-space: nowrap;
491
+ overflow: hidden;
492
+ text-overflow: ellipsis;
493
+ }
494
+
495
+ .trace-nested {
496
+ font-size: 11px;
497
+ color: var(--tracing-text-muted);
498
+ margin-left: 4px;
499
+ }
500
+
501
+ /* Trace Meta */
502
+ .trace-meta {
503
+ display: flex;
504
+ align-items: center;
505
+ gap: 12px;
506
+ font-size: 11px;
507
+ color: var(--tracing-text-muted);
508
+ }
509
+
510
+ .trace-meta span {
511
+ display: flex;
512
+ align-items: center;
513
+ gap: 4px;
514
+ }
515
+
516
+ /* ===== DETAIL PANEL ===== */
517
+ .trace-detail-panel {
518
+ flex: 1;
519
+ display: flex;
520
+ flex-direction: column;
521
+ background: var(--tracing-bg-secondary);
522
+ overflow: hidden;
523
+ }
524
+
525
+ .trace-detail-placeholder {
526
+ display: flex;
527
+ flex-direction: column;
528
+ align-items: center;
529
+ justify-content: center;
530
+ height: 100%;
531
+ color: var(--tracing-text-muted);
532
+ font-size: 14px;
533
+ gap: 8px;
534
+ }
535
+
536
+ .trace-detail-placeholder i {
537
+ font-size: 48px;
538
+ opacity: 0.3;
539
+ }
540
+
541
+ /* Empty state */
542
+ .trace-list-empty {
543
+ display: flex;
544
+ flex-direction: column;
545
+ align-items: center;
546
+ justify-content: center;
547
+ padding: 40px 20px;
548
+ text-align: center;
549
+ color: var(--tracing-text-muted);
550
+ font-size: 13px;
551
+ }
552
+
553
+ .trace-list-empty-icon {
554
+ font-size: 32px;
555
+ margin-bottom: 12px;
556
+ opacity: 0.5;
557
+ }
558
+
559
+ /* ===== MODALS ===== */
560
+ .tracing-modal-overlay {
561
+ position: fixed;
562
+ top: 0;
563
+ left: 0;
564
+ right: 0;
565
+ bottom: 0;
566
+ background: rgba(0, 0, 0, 0.5);
567
+ display: flex;
568
+ align-items: center;
569
+ justify-content: center;
570
+ z-index: 1000;
571
+ }
572
+
573
+ .tracing-modal {
574
+ background: var(--tracing-bg-primary);
575
+ border-radius: 12px;
576
+ box-shadow: var(--tracing-shadow-md);
577
+ width: 90%;
578
+ max-width: 480px;
579
+ max-height: 80vh;
580
+ display: flex;
581
+ flex-direction: column;
582
+ }
583
+
584
+ .tracing-modal-header {
585
+ display: flex;
586
+ justify-content: space-between;
587
+ align-items: center;
588
+ padding: 16px 20px;
589
+ border-bottom: 1px solid var(--tracing-border-subtle);
590
+ }
591
+
592
+ .tracing-modal-header h3 {
593
+ margin: 0;
594
+ font-size: 16px;
595
+ font-weight: 600;
596
+ }
597
+
598
+ .tracing-modal-close {
599
+ width: 32px;
600
+ height: 32px;
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ border: none;
605
+ background: var(--tracing-bg-tertiary);
606
+ border-radius: 6px;
607
+ font-size: 18px;
608
+ cursor: pointer;
609
+ color: var(--tracing-text-secondary);
610
+ }
611
+
612
+ .tracing-modal-close:hover {
613
+ background: var(--tracing-bg-hover);
614
+ }
615
+
616
+ .tracing-modal-body {
617
+ padding: 20px;
618
+ overflow-y: auto;
619
+ }
620
+
621
+ .tracing-modal-footer {
622
+ display: flex;
623
+ justify-content: flex-end;
624
+ gap: 8px;
625
+ padding: 16px 20px;
626
+ border-top: 1px solid var(--tracing-border-subtle);
627
+ }
628
+
629
+ /* Form elements */
630
+ .tracing-form-group {
631
+ margin-bottom: 16px;
632
+ }
633
+
634
+ .tracing-form-group label {
635
+ display: block;
636
+ margin-bottom: 6px;
637
+ font-size: 13px;
638
+ font-weight: 500;
639
+ color: var(--tracing-text-secondary);
640
+ }
641
+
642
+ .tracing-form-group input,
643
+ .tracing-form-group select {
644
+ width: 100%;
645
+ padding: 10px 12px;
646
+ font-size: 13px;
647
+ border: 1px solid var(--tracing-border-subtle);
648
+ border-radius: 8px;
649
+ background: var(--tracing-bg-primary);
650
+ color: var(--tracing-text-primary);
651
+ font-family: inherit;
652
+ }
653
+
654
+ .tracing-form-group input:focus,
655
+ .tracing-form-group select:focus {
656
+ outline: none;
657
+ border-color: var(--tracing-accent-primary);
658
+ box-shadow: 0 0 0 3px var(--tracing-accent-light);
659
+ }
660
+
661
+ /* Buttons */
662
+ .btn-primary {
663
+ padding: 8px 16px;
664
+ font-size: 13px;
665
+ font-weight: 500;
666
+ border: none;
667
+ border-radius: 8px;
668
+ background: var(--tracing-accent-primary);
669
+ color: white;
670
+ cursor: pointer;
671
+ transition: background 0.15s;
672
+ }
673
+
674
+ .btn-primary:hover {
675
+ background: #4f46e5;
676
+ }
677
+
678
+ .btn-secondary {
679
+ padding: 8px 16px;
680
+ font-size: 13px;
681
+ font-weight: 500;
682
+ border: 1px solid var(--tracing-border-subtle);
683
+ border-radius: 8px;
684
+ background: var(--tracing-bg-primary);
685
+ color: var(--tracing-text-secondary);
686
+ cursor: pointer;
687
+ }
688
+
689
+ .btn-secondary:hover {
690
+ background: var(--tracing-bg-tertiary);
691
+ }
692
+
693
+ /* Ignored APIs list */
694
+ .ignored-apis-list {
695
+ display: flex;
696
+ flex-direction: column;
697
+ gap: 8px;
698
+ }
699
+
700
+ .ignored-api-item {
701
+ display: flex;
702
+ align-items: center;
703
+ justify-content: space-between;
704
+ padding: 10px 12px;
705
+ background: var(--tracing-bg-tertiary);
706
+ border-radius: 8px;
707
+ font-family: 'JetBrains Mono', 'Consolas', monospace;
708
+ font-size: 12px;
709
+ }
710
+
711
+ .ignored-api-item button {
712
+ width: 24px;
713
+ height: 24px;
714
+ display: flex;
715
+ align-items: center;
716
+ justify-content: center;
717
+ border: none;
718
+ background: transparent;
719
+ color: var(--tracing-status-error);
720
+ cursor: pointer;
721
+ font-size: 16px;
722
+ border-radius: 4px;
723
+ }
724
+
725
+ .ignored-api-item button:hover {
726
+ background: var(--tracing-status-error-light);
727
+ }
728
+
729
+ .add-ignored-api {
730
+ display: flex;
731
+ gap: 8px;
732
+ margin-top: 12px;
733
+ }
734
+
735
+ .add-ignored-api input {
736
+ flex: 1;
737
+ }
738
+
739
+ /* Toast notification */
740
+ .tracing-toast {
741
+ position: fixed;
742
+ bottom: 20px;
743
+ right: 20px;
744
+ padding: 12px 20px;
745
+ border-radius: 8px;
746
+ color: white;
747
+ font-size: 13px;
748
+ font-weight: 500;
749
+ z-index: 1100;
750
+ animation: slideIn 0.3s ease;
751
+ box-shadow: var(--tracing-shadow-md);
752
+ }
753
+
754
+ .tracing-toast.success {
755
+ background: var(--tracing-status-success);
756
+ }
757
+
758
+ .tracing-toast.error {
759
+ background: var(--tracing-status-error);
760
+ }
761
+
762
+ @keyframes slideIn {
763
+ from {
764
+ transform: translateX(100%);
765
+ opacity: 0;
766
+ }
767
+ to {
768
+ transform: translateX(0);
769
+ opacity: 1;
770
+ }
771
+ }
772
+
773
+ /* ==========================================================================
774
+ FEATURE-023-C: DAG Graph Visualization
775
+ ========================================================================== */
776
+
777
+ .trace-graph-container {
778
+ width: 100%;
779
+ height: 100%;
780
+ min-height: 350px;
781
+ position: relative;
782
+ background: #ffffff;
783
+ border-radius: 8px;
784
+ }
785
+
786
+ /* Zoom controls positioning */
787
+ .trace-detail-panel {
788
+ position: relative;
789
+ }
790
+
791
+ .trace-detail-panel .trace-graph-zoom-controls {
792
+ position: absolute;
793
+ bottom: 16px;
794
+ right: 16px;
795
+ z-index: 100;
796
+ }