claude-code-workflow 6.0.4 → 6.1.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 (120) hide show
  1. package/.claude/agents/action-planning-agent.md +1 -1
  2. package/.claude/agents/cli-execution-agent.md +269 -269
  3. package/.claude/agents/cli-explore-agent.md +182 -182
  4. package/.claude/agents/context-search-agent.md +582 -582
  5. package/.claude/agents/memory-bridge.md +93 -93
  6. package/.claude/commands/cli/cli-init.md +1 -1
  7. package/.claude/commands/memory/docs-full-cli.md +471 -471
  8. package/.claude/commands/memory/docs-related-cli.md +386 -386
  9. package/.claude/commands/memory/docs.md +615 -615
  10. package/.claude/commands/memory/load.md +1 -1
  11. package/.claude/commands/memory/update-full.md +332 -332
  12. package/.claude/commands/memory/update-related.md +5 -5
  13. package/.claude/commands/workflow/init.md +1 -1
  14. package/.claude/commands/workflow/lite-fix.md +621 -621
  15. package/.claude/commands/workflow/lite-plan.md +592 -592
  16. package/.claude/commands/workflow/tools/context-gather.md +434 -434
  17. package/.claude/commands/workflow/ui-design/generate.md +504 -504
  18. package/.claude/commands/workflow/ui-design/import-from-code.md +537 -537
  19. package/.claude/scripts/classify-folders.sh +4 -0
  20. package/.claude/scripts/convert_tokens_to_css.sh +4 -0
  21. package/.claude/scripts/detect_changed_modules.sh +5 -1
  22. package/.claude/scripts/discover-design-files.sh +87 -83
  23. package/.claude/scripts/generate_module_docs.sh +717 -713
  24. package/.claude/scripts/get_modules_by_depth.sh +5 -1
  25. package/.claude/scripts/ui-generate-preview.sh +4 -0
  26. package/.claude/scripts/ui-instantiate-prototypes.sh +4 -0
  27. package/.claude/scripts/update_module_claude.sh +4 -0
  28. package/.claude/skills/command-guide/index/all-commands.json +1 -12
  29. package/.claude/skills/command-guide/index/by-category.json +1 -12
  30. package/.claude/skills/command-guide/index/by-use-case.json +1 -12
  31. package/.claude/skills/command-guide/index/essential-commands.json +1 -12
  32. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +127 -71
  33. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +269 -269
  34. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +182 -182
  35. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +18 -38
  36. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +582 -577
  37. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
  38. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +1 -1
  39. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
  40. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
  41. package/.claude/skills/command-guide/reference/commands/memory/docs.md +615 -610
  42. package/.claude/skills/command-guide/reference/commands/memory/load.md +1 -1
  43. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
  44. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +5 -5
  45. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +299 -451
  46. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +14 -37
  47. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +252 -350
  48. package/.claude/skills/command-guide/reference/commands/workflow/init.md +2 -2
  49. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +52 -0
  50. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +621 -602
  51. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +46 -36
  52. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +18 -58
  53. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +22 -52
  54. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +19 -48
  55. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +25 -5
  56. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +1 -1
  57. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +7 -7
  58. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
  59. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +151 -11
  60. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +4 -4
  61. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +1 -1
  62. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +504 -504
  63. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +537 -537
  64. package/.claude/workflows/context-search-strategy.md +77 -77
  65. package/.claude/workflows/tool-strategy.md +90 -71
  66. package/.claude/workflows/workflow-architecture.md +1 -1
  67. package/ccw/package.json +6 -6
  68. package/ccw/src/cli.js +16 -0
  69. package/ccw/src/commands/stop.js +101 -0
  70. package/ccw/src/commands/tool.js +181 -0
  71. package/ccw/src/core/dashboard-generator.js +18 -3
  72. package/ccw/src/core/lite-scanner.js +35 -11
  73. package/ccw/src/core/server.js +583 -17
  74. package/ccw/src/templates/dashboard-css/01-base.css +161 -0
  75. package/ccw/src/templates/dashboard-css/02-session.css +726 -0
  76. package/ccw/src/templates/dashboard-css/03-tasks.css +512 -0
  77. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +843 -0
  78. package/ccw/src/templates/dashboard-css/05-context.css +2206 -0
  79. package/ccw/src/templates/dashboard-css/06-cards.css +1570 -0
  80. package/ccw/src/templates/dashboard-css/07-managers.css +936 -0
  81. package/ccw/src/templates/dashboard-css/08-review.css +1266 -0
  82. package/ccw/src/templates/dashboard-css/09-explorer.css +1397 -0
  83. package/ccw/src/templates/dashboard-js/components/global-notifications.js +219 -0
  84. package/ccw/src/templates/dashboard-js/components/hook-manager.js +10 -0
  85. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +24 -2
  86. package/ccw/src/templates/dashboard-js/components/navigation.js +11 -5
  87. package/ccw/src/templates/dashboard-js/components/tabs-context.js +20 -20
  88. package/ccw/src/templates/dashboard-js/components/tabs-other.js +11 -11
  89. package/ccw/src/templates/dashboard-js/components/theme.js +29 -1
  90. package/ccw/src/templates/dashboard-js/main.js +4 -0
  91. package/ccw/src/templates/dashboard-js/state.js +5 -0
  92. package/ccw/src/templates/dashboard-js/views/explorer.js +852 -0
  93. package/ccw/src/templates/dashboard-js/views/home.js +13 -9
  94. package/ccw/src/templates/dashboard-js/views/hook-manager.js +8 -5
  95. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +21 -16
  96. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +148 -8
  97. package/ccw/src/templates/dashboard-js/views/project-overview.js +15 -11
  98. package/ccw/src/templates/dashboard-js/views/review-session.js +3 -3
  99. package/ccw/src/templates/dashboard-js/views/session-detail.js +38 -28
  100. package/ccw/src/templates/dashboard.html +129 -28
  101. package/ccw/src/tools/classify-folders.js +204 -0
  102. package/ccw/src/tools/convert-tokens-to-css.js +250 -0
  103. package/ccw/src/tools/detect-changed-modules.js +288 -0
  104. package/ccw/src/tools/discover-design-files.js +134 -0
  105. package/ccw/src/tools/edit-file.js +266 -0
  106. package/ccw/src/tools/generate-module-docs.js +416 -0
  107. package/ccw/src/tools/get-modules-by-depth.js +308 -0
  108. package/ccw/src/tools/index.js +176 -0
  109. package/ccw/src/tools/ui-generate-preview.js +327 -0
  110. package/ccw/src/tools/ui-instantiate-prototypes.js +301 -0
  111. package/ccw/src/tools/update-module-claude.js +380 -0
  112. package/ccw/src/utils/browser-launcher.js +15 -4
  113. package/package.json +1 -1
  114. package/.claude/skills/command-guide/reference/commands/workflow/status.md +0 -352
  115. package/ccw/src/core/server.js.bak +0 -385
  116. package/ccw/src/core/server_original.bak +0 -385
  117. package/ccw/src/templates/dashboard.css +0 -8114
  118. package/ccw/src/templates/dashboard_tailwind.html +0 -42
  119. package/ccw/src/templates/dashboard_test.html +0 -37
  120. package/ccw/src/templates/tailwind-base.css +0 -212
@@ -0,0 +1,1266 @@
1
+ /* ===================================
2
+ Enhanced Review Tab Styles
3
+ =================================== */
4
+
5
+ .review-enhanced-container {
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: 1rem;
9
+ height: 100%;
10
+ }
11
+
12
+ /* Review Header Bar */
13
+ .review-header-bar {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 1rem;
17
+ padding: 0.75rem 1rem;
18
+ background: hsl(var(--muted) / 0.2);
19
+ border: 1px solid hsl(var(--border) / 0.5);
20
+ border-radius: 0.5rem;
21
+ flex-wrap: wrap;
22
+ }
23
+
24
+ .review-severity-stats {
25
+ display: flex;
26
+ gap: 0.5rem;
27
+ }
28
+
29
+ .severity-stat {
30
+ padding: 0.375rem 0.75rem;
31
+ border-radius: 9999px;
32
+ font-size: 0.8rem;
33
+ font-weight: 600;
34
+ cursor: pointer;
35
+ transition: all 0.2s;
36
+ }
37
+
38
+ .severity-stat:hover {
39
+ transform: scale(1.05);
40
+ }
41
+
42
+ .severity-stat.critical { background: hsl(0 70% 90%); color: hsl(0 70% 40%); }
43
+ .severity-stat.high { background: hsl(25 90% 90%); color: hsl(25 90% 35%); }
44
+ .severity-stat.medium { background: hsl(45 90% 90%); color: hsl(45 90% 30%); }
45
+ .severity-stat.low { background: hsl(var(--success-light)); color: hsl(var(--success)); }
46
+
47
+ .review-search-box {
48
+ flex: 1;
49
+ min-width: 150px;
50
+ }
51
+
52
+ .review-search-box input {
53
+ width: 100%;
54
+ padding: 0.5rem 0.75rem;
55
+ border: 1px solid hsl(var(--border));
56
+ border-radius: 0.375rem;
57
+ background: hsl(var(--card));
58
+ color: hsl(var(--foreground));
59
+ font-size: 0.875rem;
60
+ }
61
+
62
+ .review-search-box input:focus {
63
+ outline: none;
64
+ border-color: hsl(var(--primary));
65
+ box-shadow: 0 0 0 2px hsl(var(--primary) / 0.2);
66
+ }
67
+
68
+ .review-selection-controls {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 0.5rem;
72
+ font-size: 0.85rem;
73
+ }
74
+
75
+ .selection-counter {
76
+ color: hsl(var(--muted-foreground));
77
+ font-weight: 500;
78
+ padding: 0.25rem 0.5rem;
79
+ background: hsl(var(--accent));
80
+ border-radius: 0.25rem;
81
+ }
82
+
83
+ .btn-mini {
84
+ padding: 0.375rem 0.75rem;
85
+ border: 1px solid hsl(var(--border));
86
+ border-radius: 0.375rem;
87
+ background: hsl(var(--card));
88
+ color: hsl(var(--foreground));
89
+ font-size: 0.75rem;
90
+ cursor: pointer;
91
+ transition: all 0.2s;
92
+ }
93
+
94
+ .btn-mini:hover {
95
+ background: hsl(var(--accent));
96
+ border-color: hsl(var(--primary) / 0.3);
97
+ }
98
+
99
+ .btn-export-fix {
100
+ padding: 0.5rem 1rem;
101
+ border: none;
102
+ border-radius: 0.375rem;
103
+ background: hsl(142 76% 36%);
104
+ color: white;
105
+ font-size: 0.85rem;
106
+ font-weight: 500;
107
+ cursor: pointer;
108
+ transition: all 0.2s;
109
+ }
110
+
111
+ .btn-export-fix:hover:not(:disabled) {
112
+ background: hsl(142 76% 30%);
113
+ }
114
+
115
+ .btn-export-fix:disabled {
116
+ opacity: 0.5;
117
+ cursor: not-allowed;
118
+ }
119
+
120
+ /* Filter Bar */
121
+ .review-filter-bar {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 1rem;
125
+ padding: 0.5rem 1rem;
126
+ background: hsl(var(--card));
127
+ border: 1px solid hsl(var(--border));
128
+ border-radius: 0.5rem;
129
+ flex-wrap: wrap;
130
+ }
131
+
132
+ .filter-group {
133
+ display: flex;
134
+ align-items: center;
135
+ gap: 0.5rem;
136
+ }
137
+
138
+ .filter-label {
139
+ font-size: 0.8rem;
140
+ font-weight: 500;
141
+ color: hsl(var(--muted-foreground));
142
+ }
143
+
144
+ .filter-chips {
145
+ display: flex;
146
+ gap: 0.375rem;
147
+ }
148
+
149
+ .filter-chip {
150
+ display: flex;
151
+ align-items: center;
152
+ gap: 0.25rem;
153
+ padding: 0.25rem 0.625rem;
154
+ border: 1px solid hsl(var(--border));
155
+ border-radius: 9999px;
156
+ background: hsl(var(--card));
157
+ font-size: 0.75rem;
158
+ cursor: pointer;
159
+ transition: all 0.2s;
160
+ }
161
+
162
+ .filter-chip:hover {
163
+ background: hsl(var(--accent));
164
+ }
165
+
166
+ .filter-chip.active {
167
+ background: hsl(var(--primary));
168
+ color: white;
169
+ border-color: hsl(var(--primary));
170
+ }
171
+
172
+ .filter-chip input[type="checkbox"] {
173
+ display: none;
174
+ }
175
+
176
+ .sort-select {
177
+ padding: 0.375rem 0.5rem;
178
+ border: 1px solid hsl(var(--border));
179
+ border-radius: 0.375rem;
180
+ background: hsl(var(--card));
181
+ color: hsl(var(--foreground));
182
+ font-size: 0.8rem;
183
+ cursor: pointer;
184
+ }
185
+
186
+ .btn-sort-order {
187
+ padding: 0.375rem 0.5rem;
188
+ border: 1px solid hsl(var(--border));
189
+ border-radius: 0.375rem;
190
+ background: hsl(var(--card));
191
+ color: hsl(var(--foreground));
192
+ font-size: 0.9rem;
193
+ cursor: pointer;
194
+ }
195
+
196
+ /* Dimension Tabs */
197
+ .review-dimension-tabs {
198
+ display: flex;
199
+ gap: 0.375rem;
200
+ padding-bottom: 0.5rem;
201
+ border-bottom: 2px solid hsl(var(--border));
202
+ overflow-x: auto;
203
+ flex-wrap: nowrap;
204
+ }
205
+
206
+ .dim-tab {
207
+ padding: 0.5rem 1rem;
208
+ border: none;
209
+ background: none;
210
+ color: hsl(var(--muted-foreground));
211
+ font-size: 0.85rem;
212
+ font-weight: 500;
213
+ cursor: pointer;
214
+ white-space: nowrap;
215
+ border-bottom: 2px solid transparent;
216
+ margin-bottom: -2px;
217
+ transition: all 0.2s;
218
+ }
219
+
220
+ .dim-tab:hover {
221
+ color: hsl(var(--foreground));
222
+ background: hsl(var(--accent) / 0.5);
223
+ }
224
+
225
+ .dim-tab.active {
226
+ color: hsl(var(--primary));
227
+ border-bottom-color: hsl(var(--primary));
228
+ }
229
+
230
+ /* Split Panel - Fixed height container */
231
+ .review-split-panel {
232
+ display: grid;
233
+ grid-template-columns: 1fr 1fr;
234
+ gap: 1rem;
235
+ height: 60vh;
236
+ min-height: 400px;
237
+ max-height: 700px;
238
+ }
239
+
240
+ /* Findings Panel - Scrollable */
241
+ .review-findings-panel {
242
+ display: flex;
243
+ flex-direction: column;
244
+ background: hsl(var(--card));
245
+ border: 1px solid hsl(var(--border));
246
+ border-radius: 0.5rem;
247
+ overflow: hidden;
248
+ height: 100%;
249
+ }
250
+
251
+ .findings-list-header {
252
+ padding: 0.75rem 1rem;
253
+ background: hsl(var(--muted) / 0.3);
254
+ border-bottom: 1px solid hsl(var(--border));
255
+ font-size: 0.85rem;
256
+ font-weight: 500;
257
+ color: hsl(var(--muted-foreground));
258
+ }
259
+
260
+ .review-findings-list {
261
+ flex: 1;
262
+ overflow-y: auto;
263
+ padding: 0.5rem;
264
+ }
265
+
266
+ .findings-empty {
267
+ display: flex;
268
+ flex-direction: column;
269
+ align-items: center;
270
+ justify-content: center;
271
+ padding: 2rem;
272
+ color: hsl(var(--muted-foreground));
273
+ gap: 0.5rem;
274
+ }
275
+
276
+ .findings-empty .empty-icon {
277
+ font-size: 2rem;
278
+ }
279
+
280
+ /* Finding Item in List */
281
+ .review-finding-item {
282
+ display: flex;
283
+ gap: 0.75rem;
284
+ padding: 0.75rem;
285
+ margin-bottom: 0.5rem;
286
+ background: hsl(var(--background));
287
+ border: 1px solid hsl(var(--border));
288
+ border-left: 3px solid hsl(var(--border));
289
+ border-radius: 0.375rem;
290
+ cursor: pointer;
291
+ transition: all 0.2s;
292
+ }
293
+
294
+ .review-finding-item:hover {
295
+ background: hsl(var(--accent) / 0.3);
296
+ transform: translateX(2px);
297
+ }
298
+
299
+ .review-finding-item.selected {
300
+ background: hsl(var(--primary) / 0.1);
301
+ border-color: hsl(var(--primary) / 0.3);
302
+ }
303
+
304
+ .review-finding-item.previewing {
305
+ background: hsl(var(--accent));
306
+ border-left-color: hsl(var(--primary));
307
+ }
308
+
309
+ .review-finding-item.critical { border-left-color: hsl(0 70% 50%); }
310
+ .review-finding-item.high { border-left-color: hsl(25 90% 55%); }
311
+ .review-finding-item.medium { border-left-color: hsl(45 90% 50%); }
312
+ .review-finding-item.low { border-left-color: hsl(var(--success)); }
313
+
314
+ .review-finding-item .finding-checkbox {
315
+ width: 18px;
316
+ height: 18px;
317
+ cursor: pointer;
318
+ accent-color: hsl(var(--primary));
319
+ flex-shrink: 0;
320
+ margin-top: 2px;
321
+ }
322
+
323
+ .review-finding-item .finding-content {
324
+ flex: 1;
325
+ min-width: 0;
326
+ }
327
+
328
+ .review-finding-item .finding-top-row {
329
+ display: flex;
330
+ gap: 0.375rem;
331
+ margin-bottom: 0.375rem;
332
+ }
333
+
334
+ .review-finding-item .finding-title {
335
+ font-size: 0.85rem;
336
+ font-weight: 600;
337
+ color: hsl(var(--foreground));
338
+ margin-bottom: 0.25rem;
339
+ line-height: 1.3;
340
+ }
341
+
342
+ .review-finding-item .finding-file {
343
+ font-size: 0.75rem;
344
+ font-family: var(--font-mono);
345
+ color: hsl(var(--muted-foreground));
346
+ overflow: hidden;
347
+ text-overflow: ellipsis;
348
+ white-space: nowrap;
349
+ }
350
+
351
+ .dimension-badge {
352
+ padding: 0.125rem 0.5rem;
353
+ border-radius: 9999px;
354
+ font-size: 0.65rem;
355
+ font-weight: 500;
356
+ background: hsl(var(--accent));
357
+ color: hsl(var(--accent-foreground));
358
+ text-transform: capitalize;
359
+ }
360
+
361
+ /* Preview Panel - Fixed height, scrollable */
362
+ .review-preview-panel {
363
+ display: flex;
364
+ flex-direction: column;
365
+ background: hsl(var(--card));
366
+ border: 1px solid hsl(var(--border));
367
+ border-radius: 0.5rem;
368
+ overflow: hidden;
369
+ height: 100%;
370
+ }
371
+
372
+ .preview-empty-state {
373
+ display: flex;
374
+ flex-direction: column;
375
+ align-items: center;
376
+ justify-content: center;
377
+ height: 100%;
378
+ padding: 2rem;
379
+ color: hsl(var(--muted-foreground));
380
+ }
381
+
382
+ .preview-empty-state .preview-icon {
383
+ font-size: 3rem;
384
+ margin-bottom: 1rem;
385
+ opacity: 0.5;
386
+ }
387
+
388
+ .preview-empty-state .preview-text {
389
+ font-size: 0.9rem;
390
+ }
391
+
392
+ .preview-content {
393
+ padding: 1.25rem;
394
+ overflow-y: auto;
395
+ flex: 1;
396
+ }
397
+
398
+ .preview-header {
399
+ display: flex;
400
+ justify-content: space-between;
401
+ align-items: flex-start;
402
+ margin-bottom: 1rem;
403
+ gap: 1rem;
404
+ }
405
+
406
+ .preview-badges {
407
+ display: flex;
408
+ gap: 0.5rem;
409
+ flex-wrap: wrap;
410
+ }
411
+
412
+ .category-badge {
413
+ padding: 0.125rem 0.5rem;
414
+ border-radius: 9999px;
415
+ font-size: 0.65rem;
416
+ font-weight: 500;
417
+ background: hsl(var(--muted));
418
+ color: hsl(var(--muted-foreground));
419
+ }
420
+
421
+ .btn-select-finding {
422
+ padding: 0.5rem 1rem;
423
+ border: 1px solid hsl(var(--border));
424
+ border-radius: 0.375rem;
425
+ background: hsl(var(--card));
426
+ color: hsl(var(--foreground));
427
+ font-size: 0.8rem;
428
+ cursor: pointer;
429
+ transition: all 0.2s;
430
+ white-space: nowrap;
431
+ }
432
+
433
+ .btn-select-finding:hover {
434
+ background: hsl(var(--accent));
435
+ }
436
+
437
+ .btn-select-finding.selected {
438
+ background: hsl(var(--primary));
439
+ color: white;
440
+ border-color: hsl(var(--primary));
441
+ }
442
+
443
+ .preview-title {
444
+ font-size: 1.1rem;
445
+ font-weight: 600;
446
+ color: hsl(var(--foreground));
447
+ margin-bottom: 1rem;
448
+ line-height: 1.4;
449
+ }
450
+
451
+ .preview-section {
452
+ margin-bottom: 1.25rem;
453
+ }
454
+
455
+ .preview-section-title {
456
+ font-size: 0.85rem;
457
+ font-weight: 600;
458
+ color: hsl(var(--primary));
459
+ margin-bottom: 0.5rem;
460
+ }
461
+
462
+ .preview-location code {
463
+ font-family: var(--font-mono);
464
+ font-size: 0.85rem;
465
+ padding: 0.25rem 0.5rem;
466
+ background: hsl(var(--muted));
467
+ border-radius: 0.25rem;
468
+ }
469
+
470
+ .preview-description {
471
+ font-size: 0.9rem;
472
+ line-height: 1.6;
473
+ color: hsl(var(--foreground));
474
+ }
475
+
476
+ .preview-code {
477
+ font-family: var(--font-mono);
478
+ font-size: 0.8rem;
479
+ padding: 1rem;
480
+ background: hsl(var(--muted));
481
+ border-radius: 0.375rem;
482
+ overflow-x: auto;
483
+ line-height: 1.5;
484
+ }
485
+
486
+ .preview-recommendations {
487
+ list-style: none;
488
+ padding: 0;
489
+ margin: 0;
490
+ }
491
+
492
+ .preview-recommendations li {
493
+ padding: 0.5rem 0.75rem;
494
+ background: hsl(142 76% 36% / 0.1);
495
+ border-left: 3px solid hsl(142 76% 36%);
496
+ margin-bottom: 0.5rem;
497
+ border-radius: 0 0.25rem 0.25rem 0;
498
+ font-size: 0.875rem;
499
+ line-height: 1.5;
500
+ }
501
+
502
+ .preview-root-cause,
503
+ .preview-impact {
504
+ font-size: 0.9rem;
505
+ line-height: 1.6;
506
+ color: hsl(var(--muted-foreground));
507
+ }
508
+
509
+ .preview-references {
510
+ list-style: none;
511
+ padding: 0;
512
+ margin: 0;
513
+ }
514
+
515
+ .preview-references li {
516
+ padding: 0.375rem 0;
517
+ border-bottom: 1px solid hsl(var(--border) / 0.5);
518
+ font-size: 0.85rem;
519
+ }
520
+
521
+ .preview-references li:last-child {
522
+ border-bottom: none;
523
+ }
524
+
525
+ .preview-references a {
526
+ color: hsl(var(--primary));
527
+ text-decoration: none;
528
+ }
529
+
530
+ .preview-references a:hover {
531
+ text-decoration: underline;
532
+ }
533
+
534
+ .preview-metadata {
535
+ display: grid;
536
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
537
+ gap: 0.75rem;
538
+ }
539
+
540
+ .preview-metadata .metadata-item {
541
+ padding: 0.5rem;
542
+ background: hsl(var(--muted) / 0.5);
543
+ border-radius: 0.25rem;
544
+ font-size: 0.8rem;
545
+ }
546
+
547
+ .preview-metadata .meta-key {
548
+ color: hsl(var(--muted-foreground));
549
+ font-weight: 500;
550
+ }
551
+
552
+ .preview-metadata .meta-value {
553
+ color: hsl(var(--foreground));
554
+ margin-left: 0.25rem;
555
+ }
556
+
557
+ /* Responsive: Stack panels on smaller screens */
558
+ @media (max-width: 1024px) {
559
+ .review-split-panel {
560
+ grid-template-columns: 1fr;
561
+ height: auto;
562
+ max-height: none;
563
+ }
564
+
565
+ .review-findings-panel {
566
+ height: 50vh;
567
+ max-height: 400px;
568
+ }
569
+
570
+ .review-preview-panel {
571
+ height: 50vh;
572
+ max-height: 400px;
573
+ }
574
+ }
575
+
576
+ @media (max-width: 768px) {
577
+ .review-header-bar {
578
+ flex-direction: column;
579
+ align-items: stretch;
580
+ gap: 0.75rem;
581
+ }
582
+
583
+ .review-severity-stats {
584
+ justify-content: center;
585
+ }
586
+
587
+ .review-selection-controls {
588
+ justify-content: center;
589
+ flex-wrap: wrap;
590
+ }
591
+
592
+ .btn-export-fix {
593
+ width: 100%;
594
+ }
595
+
596
+ .review-filter-bar {
597
+ flex-direction: column;
598
+ align-items: stretch;
599
+ }
600
+
601
+ .filter-group {
602
+ flex-wrap: wrap;
603
+ justify-content: flex-start;
604
+ }
605
+ }
606
+
607
+ /* ===================================
608
+ Review Session Specific Styles
609
+ =================================== */
610
+
611
+ /* Dimension Timeline Active State */
612
+ .dimension-item.active {
613
+ border-color: hsl(var(--primary));
614
+ background: hsl(var(--primary) / 0.1);
615
+ }
616
+
617
+ .dimension-item {
618
+ cursor: pointer;
619
+ transition: all 0.2s;
620
+ }
621
+
622
+ .dimension-item:hover {
623
+ transform: translateY(-2px);
624
+ box-shadow: 0 4px 8px rgb(0 0 0 / 0.1);
625
+ }
626
+
627
+ /* Fix Status Mini Badge */
628
+ .fix-status-mini {
629
+ padding: 0.125rem 0.375rem;
630
+ border-radius: 9999px;
631
+ font-size: 0.6rem;
632
+ font-weight: 600;
633
+ text-transform: uppercase;
634
+ }
635
+
636
+ .fix-status-mini.status-pending {
637
+ background: hsl(var(--muted));
638
+ color: hsl(var(--muted-foreground));
639
+ }
640
+
641
+ .fix-status-mini.status-in-progress {
642
+ background: hsl(var(--primary));
643
+ color: white;
644
+ }
645
+
646
+ .fix-status-mini.status-fixed {
647
+ background: hsl(var(--success));
648
+ color: white;
649
+ }
650
+
651
+ .fix-status-mini.status-failed {
652
+ background: hsl(0 70% 50%);
653
+ color: white;
654
+ }
655
+
656
+ /* Fix Status Badge (Preview Panel) */
657
+ .fix-status-badge {
658
+ padding: 0.25rem 0.5rem;
659
+ border-radius: 9999px;
660
+ font-size: 0.7rem;
661
+ font-weight: 600;
662
+ text-transform: uppercase;
663
+ }
664
+
665
+ .fix-status-badge.status-pending {
666
+ background: hsl(var(--muted));
667
+ color: hsl(var(--muted-foreground));
668
+ }
669
+
670
+ .fix-status-badge.status-in-progress {
671
+ background: hsl(var(--primary));
672
+ color: white;
673
+ animation: pulse-status 2s infinite;
674
+ }
675
+
676
+ .fix-status-badge.status-fixed {
677
+ background: hsl(var(--success));
678
+ color: white;
679
+ }
680
+
681
+ .fix-status-badge.status-failed {
682
+ background: hsl(0 70% 50%);
683
+ color: white;
684
+ }
685
+
686
+ @keyframes pulse-status {
687
+ 0%, 100% { opacity: 1; }
688
+ 50% { opacity: 0.7; }
689
+ }
690
+
691
+ /* ===================================
692
+ Review Session Card (All Sessions)
693
+ =================================== */
694
+
695
+ .review-findings-summary {
696
+ margin-top: 0.5rem;
697
+ }
698
+
699
+ .findings-severity-row {
700
+ display: flex;
701
+ gap: 0.5rem;
702
+ flex-wrap: wrap;
703
+ margin-bottom: 0.375rem;
704
+ }
705
+
706
+ .finding-count {
707
+ display: inline-flex;
708
+ align-items: center;
709
+ gap: 0.25rem;
710
+ padding: 0.125rem 0.5rem;
711
+ border-radius: 9999px;
712
+ font-size: 0.75rem;
713
+ font-weight: 600;
714
+ }
715
+
716
+ .finding-count.critical {
717
+ background: hsl(0 70% 95%);
718
+ color: hsl(0 70% 40%);
719
+ }
720
+
721
+ .finding-count.high {
722
+ background: hsl(25 90% 95%);
723
+ color: hsl(25 90% 35%);
724
+ }
725
+
726
+ .finding-count.medium {
727
+ background: hsl(45 90% 95%);
728
+ color: hsl(45 90% 30%);
729
+ }
730
+
731
+ .finding-count.low {
732
+ background: hsl(var(--success-light));
733
+ color: hsl(var(--success));
734
+ }
735
+
736
+ .dimensions-info {
737
+ font-size: 0.7rem;
738
+ color: hsl(var(--muted-foreground));
739
+ }
740
+
741
+ /* ===================================
742
+ Fix Progress Tracking Card (Carousel)
743
+ =================================== */
744
+
745
+ .fix-progress-section-container {
746
+ margin-bottom: 1rem;
747
+ }
748
+
749
+ .fix-progress-card {
750
+ background: hsl(var(--card));
751
+ border: 1px solid hsl(var(--border));
752
+ border-radius: 0.5rem;
753
+ padding: 1rem;
754
+ overflow: hidden;
755
+ }
756
+
757
+ .fix-card-header {
758
+ display: flex;
759
+ justify-content: space-between;
760
+ align-items: center;
761
+ margin-bottom: 0.75rem;
762
+ }
763
+
764
+ .fix-card-title {
765
+ font-weight: 600;
766
+ font-size: 0.9rem;
767
+ color: hsl(var(--foreground));
768
+ }
769
+
770
+ .fix-stage-dots {
771
+ display: flex;
772
+ gap: 0.375rem;
773
+ align-items: center;
774
+ }
775
+
776
+ .fix-stage-dot {
777
+ width: 8px;
778
+ height: 8px;
779
+ border-radius: 50%;
780
+ background: hsl(var(--muted));
781
+ transition: all 0.2s ease;
782
+ }
783
+
784
+ .fix-stage-dot.active {
785
+ background: hsl(var(--primary));
786
+ animation: pulse-dot 1.5s infinite;
787
+ }
788
+
789
+ .fix-stage-dot.completed {
790
+ background: hsl(var(--success));
791
+ }
792
+
793
+ @keyframes pulse-dot {
794
+ 0%, 100% { opacity: 1; transform: scale(1); }
795
+ 50% { opacity: 0.6; transform: scale(1.2); }
796
+ }
797
+
798
+ /* Carousel Container */
799
+ .fix-carousel-container {
800
+ overflow: hidden;
801
+ margin-bottom: 0.75rem;
802
+ }
803
+
804
+ .fix-carousel-track {
805
+ display: flex;
806
+ transition: transform 0.3s ease;
807
+ }
808
+
809
+ .fix-carousel-slide {
810
+ min-width: 100%;
811
+ padding: 0.5rem;
812
+ }
813
+
814
+ /* Slide Header */
815
+ .fix-slide-header {
816
+ display: flex;
817
+ justify-content: space-between;
818
+ align-items: center;
819
+ margin-bottom: 0.75rem;
820
+ }
821
+
822
+ .fix-phase-badge {
823
+ display: inline-flex;
824
+ align-items: center;
825
+ gap: 0.25rem;
826
+ padding: 0.25rem 0.75rem;
827
+ border-radius: 9999px;
828
+ font-size: 0.7rem;
829
+ font-weight: 600;
830
+ text-transform: uppercase;
831
+ }
832
+
833
+ .fix-phase-badge.phase-planning {
834
+ background: hsl(270 60% 90%);
835
+ color: hsl(270 60% 40%);
836
+ }
837
+
838
+ .fix-phase-badge.phase-execution {
839
+ background: hsl(220 80% 90%);
840
+ color: hsl(220 80% 40%);
841
+ animation: pulse-badge 2s infinite;
842
+ }
843
+
844
+ .fix-phase-badge.phase-completion {
845
+ background: hsl(var(--success-light));
846
+ color: hsl(var(--success));
847
+ }
848
+
849
+ @keyframes pulse-badge {
850
+ 0%, 100% { opacity: 1; }
851
+ 50% { opacity: 0.7; }
852
+ }
853
+
854
+ .fix-session-id {
855
+ font-size: 0.7rem;
856
+ color: hsl(var(--muted-foreground));
857
+ font-family: var(--font-mono);
858
+ }
859
+
860
+ /* Progress Bar Mini */
861
+ .fix-progress-bar-mini {
862
+ height: 6px;
863
+ background: hsl(var(--muted));
864
+ border-radius: 3px;
865
+ overflow: hidden;
866
+ margin-bottom: 0.5rem;
867
+ }
868
+
869
+ .fix-progress-fill {
870
+ height: 100%;
871
+ background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--success)));
872
+ border-radius: 3px;
873
+ transition: width 0.3s ease;
874
+ }
875
+
876
+ .fix-progress-text {
877
+ font-size: 0.75rem;
878
+ color: hsl(var(--muted-foreground));
879
+ text-align: center;
880
+ }
881
+
882
+ /* Stats Row (Slide 2) */
883
+ .fix-stats-row {
884
+ display: flex;
885
+ justify-content: space-around;
886
+ padding: 0.5rem 0;
887
+ }
888
+
889
+ .fix-stat {
890
+ text-align: center;
891
+ }
892
+
893
+ .fix-stat-value {
894
+ display: block;
895
+ font-size: 1.25rem;
896
+ font-weight: 700;
897
+ color: hsl(var(--foreground));
898
+ }
899
+
900
+ .fix-stat-label {
901
+ display: block;
902
+ font-size: 0.65rem;
903
+ color: hsl(var(--muted-foreground));
904
+ text-transform: uppercase;
905
+ }
906
+
907
+ .fix-stat.fixed .fix-stat-value {
908
+ color: hsl(var(--success));
909
+ }
910
+
911
+ .fix-stat.failed .fix-stat-value {
912
+ color: hsl(var(--destructive));
913
+ }
914
+
915
+ .fix-stat.pending .fix-stat-value {
916
+ color: hsl(var(--warning));
917
+ }
918
+
919
+ /* Active Agents (Slide 3) */
920
+ .fix-agents-header {
921
+ font-size: 0.8rem;
922
+ font-weight: 600;
923
+ color: hsl(var(--foreground));
924
+ margin-bottom: 0.5rem;
925
+ }
926
+
927
+ .fix-agent-item {
928
+ display: flex;
929
+ align-items: center;
930
+ gap: 0.5rem;
931
+ padding: 0.375rem 0.5rem;
932
+ background: hsl(var(--muted));
933
+ border-radius: 0.25rem;
934
+ margin-bottom: 0.375rem;
935
+ }
936
+
937
+ .fix-agent-item:last-child {
938
+ margin-bottom: 0;
939
+ }
940
+
941
+ .fix-agent-icon {
942
+ font-size: 0.875rem;
943
+ animation: spin-agent 2s linear infinite;
944
+ }
945
+
946
+ @keyframes spin-agent {
947
+ 0% { transform: rotate(0deg); }
948
+ 100% { transform: rotate(360deg); }
949
+ }
950
+
951
+ .fix-agent-info {
952
+ font-size: 0.75rem;
953
+ color: hsl(var(--foreground));
954
+ white-space: nowrap;
955
+ overflow: hidden;
956
+ text-overflow: ellipsis;
957
+ }
958
+
959
+ /* Carousel Navigation */
960
+ .fix-carousel-nav {
961
+ display: flex;
962
+ justify-content: center;
963
+ align-items: center;
964
+ gap: 0.75rem;
965
+ }
966
+
967
+ .fix-nav-btn {
968
+ width: 24px;
969
+ height: 24px;
970
+ border: none;
971
+ background: hsl(var(--muted));
972
+ color: hsl(var(--muted-foreground));
973
+ border-radius: 50%;
974
+ cursor: pointer;
975
+ font-size: 1rem;
976
+ font-weight: bold;
977
+ display: flex;
978
+ align-items: center;
979
+ justify-content: center;
980
+ transition: all 0.15s;
981
+ }
982
+
983
+ .fix-nav-btn:hover {
984
+ background: hsl(var(--hover));
985
+ color: hsl(var(--foreground));
986
+ }
987
+
988
+ .fix-nav-dots {
989
+ display: flex;
990
+ gap: 0.375rem;
991
+ }
992
+
993
+ .fix-nav-dot {
994
+ width: 6px;
995
+ height: 6px;
996
+ border-radius: 50%;
997
+ background: hsl(var(--muted));
998
+ cursor: pointer;
999
+ transition: all 0.2s;
1000
+ }
1001
+
1002
+ .fix-nav-dot:hover {
1003
+ background: hsl(var(--muted-foreground));
1004
+ }
1005
+
1006
+ .fix-nav-dot.active {
1007
+ background: hsl(var(--primary));
1008
+ width: 16px;
1009
+ border-radius: 3px;
1010
+ }
1011
+
1012
+ /* ===================================
1013
+ Path Selection Modal
1014
+ =================================== */
1015
+
1016
+ .path-modal-overlay {
1017
+ position: fixed;
1018
+ top: 0;
1019
+ left: 0;
1020
+ right: 0;
1021
+ bottom: 0;
1022
+ background: rgba(0, 0, 0, 0.5);
1023
+ display: flex;
1024
+ align-items: center;
1025
+ justify-content: center;
1026
+ z-index: 1000;
1027
+ backdrop-filter: blur(2px);
1028
+ }
1029
+
1030
+ .path-modal {
1031
+ background: hsl(var(--card));
1032
+ border: 1px solid hsl(var(--border));
1033
+ border-radius: 0.75rem;
1034
+ width: 90%;
1035
+ max-width: 480px;
1036
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
1037
+ animation: modal-enter 0.2s ease-out;
1038
+ }
1039
+
1040
+ @keyframes modal-enter {
1041
+ from {
1042
+ opacity: 0;
1043
+ transform: scale(0.95) translateY(-10px);
1044
+ }
1045
+ to {
1046
+ opacity: 1;
1047
+ transform: scale(1) translateY(0);
1048
+ }
1049
+ }
1050
+
1051
+ .path-modal-header {
1052
+ display: flex;
1053
+ align-items: center;
1054
+ gap: 0.75rem;
1055
+ padding: 1.25rem 1.5rem;
1056
+ border-bottom: 1px solid hsl(var(--border));
1057
+ }
1058
+
1059
+ .path-modal-icon {
1060
+ font-size: 1.5rem;
1061
+ color: hsl(var(--primary));
1062
+ }
1063
+
1064
+ .path-modal-header h3 {
1065
+ margin: 0;
1066
+ font-size: 1.1rem;
1067
+ font-weight: 600;
1068
+ color: hsl(var(--foreground));
1069
+ }
1070
+
1071
+ .path-modal-body {
1072
+ padding: 1.5rem;
1073
+ }
1074
+
1075
+ .path-modal-body p {
1076
+ margin: 0 0 1rem;
1077
+ color: hsl(var(--muted-foreground));
1078
+ font-size: 0.9rem;
1079
+ line-height: 1.5;
1080
+ }
1081
+
1082
+ .path-modal-command {
1083
+ display: flex;
1084
+ align-items: center;
1085
+ gap: 0.75rem;
1086
+ background: hsl(var(--muted));
1087
+ padding: 0.75rem 1rem;
1088
+ border-radius: 0.5rem;
1089
+ font-family: var(--font-mono);
1090
+ }
1091
+
1092
+ .path-modal-command code {
1093
+ flex: 1;
1094
+ font-size: 0.85rem;
1095
+ color: hsl(var(--foreground));
1096
+ word-break: break-all;
1097
+ }
1098
+
1099
+ .path-modal-command .copy-btn {
1100
+ display: flex;
1101
+ align-items: center;
1102
+ gap: 0.375rem;
1103
+ padding: 0.375rem 0.75rem;
1104
+ background: hsl(var(--primary));
1105
+ color: white;
1106
+ border: none;
1107
+ border-radius: 0.375rem;
1108
+ font-size: 0.8rem;
1109
+ cursor: pointer;
1110
+ transition: all 0.15s;
1111
+ white-space: nowrap;
1112
+ }
1113
+
1114
+ .path-modal-command .copy-btn:hover {
1115
+ background: hsl(var(--primary) / 0.9);
1116
+ }
1117
+
1118
+ .path-modal-note {
1119
+ font-size: 0.85rem !important;
1120
+ color: hsl(var(--muted-foreground)) !important;
1121
+ }
1122
+
1123
+ .path-modal-note code {
1124
+ background: hsl(var(--muted));
1125
+ padding: 0.125rem 0.375rem;
1126
+ border-radius: 0.25rem;
1127
+ font-size: 0.8rem;
1128
+ }
1129
+
1130
+ .path-modal-input {
1131
+ width: 100%;
1132
+ padding: 0.75rem 1rem;
1133
+ background: hsl(var(--background));
1134
+ border: 1px solid hsl(var(--border));
1135
+ border-radius: 0.5rem;
1136
+ font-size: 0.9rem;
1137
+ color: hsl(var(--foreground));
1138
+ outline: none;
1139
+ transition: border-color 0.15s;
1140
+ }
1141
+
1142
+ .path-modal-input:focus {
1143
+ border-color: hsl(var(--primary));
1144
+ }
1145
+
1146
+ .path-modal-input::placeholder {
1147
+ color: hsl(var(--muted-foreground));
1148
+ }
1149
+
1150
+ .path-modal-footer {
1151
+ display: flex;
1152
+ justify-content: flex-end;
1153
+ gap: 0.75rem;
1154
+ padding: 1rem 1.5rem;
1155
+ border-top: 1px solid hsl(var(--border));
1156
+ background: hsl(var(--muted) / 0.3);
1157
+ border-radius: 0 0 0.75rem 0.75rem;
1158
+ }
1159
+
1160
+ .path-modal-close {
1161
+ padding: 0.5rem 1.25rem;
1162
+ background: hsl(var(--muted));
1163
+ color: hsl(var(--foreground));
1164
+ border: none;
1165
+ border-radius: 0.375rem;
1166
+ font-size: 0.875rem;
1167
+ cursor: pointer;
1168
+ transition: all 0.15s;
1169
+ }
1170
+
1171
+ .path-modal-close:hover {
1172
+ background: hsl(var(--hover));
1173
+ }
1174
+
1175
+ .path-modal-confirm {
1176
+ padding: 0.5rem 1.25rem;
1177
+ background: hsl(var(--primary));
1178
+ color: white;
1179
+ border: none;
1180
+ border-radius: 0.375rem;
1181
+ font-size: 0.875rem;
1182
+ cursor: pointer;
1183
+ transition: all 0.15s;
1184
+ }
1185
+
1186
+ .path-modal-confirm:hover {
1187
+ background: hsl(var(--primary) / 0.9);
1188
+ }
1189
+
1190
+ .path-modal-confirm:disabled {
1191
+ opacity: 0.5;
1192
+ cursor: not-allowed;
1193
+ }
1194
+
1195
+ /* Path Input Group */
1196
+ .path-input-group {
1197
+ display: flex;
1198
+ align-items: center;
1199
+ gap: 0.75rem;
1200
+ flex-wrap: wrap;
1201
+ }
1202
+
1203
+ .path-input-group label {
1204
+ font-size: 0.875rem;
1205
+ color: hsl(var(--muted-foreground));
1206
+ white-space: nowrap;
1207
+ }
1208
+
1209
+ .path-input-group input {
1210
+ flex: 1;
1211
+ min-width: 200px;
1212
+ padding: 0.625rem 0.875rem;
1213
+ background: hsl(var(--background));
1214
+ border: 1px solid hsl(var(--border));
1215
+ border-radius: 0.375rem;
1216
+ font-size: 0.875rem;
1217
+ font-family: var(--font-mono);
1218
+ color: hsl(var(--foreground));
1219
+ outline: none;
1220
+ transition: border-color 0.15s, box-shadow 0.15s;
1221
+ }
1222
+
1223
+ .path-input-group input:focus {
1224
+ border-color: hsl(var(--primary));
1225
+ box-shadow: 0 0 0 3px hsl(var(--primary) / 0.1);
1226
+ }
1227
+
1228
+ .path-input-group input::placeholder {
1229
+ color: hsl(var(--muted-foreground));
1230
+ }
1231
+
1232
+ .path-go-btn {
1233
+ padding: 0.625rem 1.25rem;
1234
+ background: hsl(var(--primary));
1235
+ color: white;
1236
+ border: none;
1237
+ border-radius: 0.375rem;
1238
+ font-size: 0.875rem;
1239
+ font-weight: 500;
1240
+ cursor: pointer;
1241
+ transition: all 0.15s;
1242
+ white-space: nowrap;
1243
+ }
1244
+
1245
+ .path-go-btn:hover {
1246
+ background: hsl(var(--primary) / 0.9);
1247
+ transform: translateY(-1px);
1248
+ }
1249
+
1250
+ .path-go-btn:active {
1251
+ transform: translateY(0);
1252
+ }
1253
+
1254
+ /* Selected Folder Display */
1255
+ .selected-folder {
1256
+ padding: 0.75rem 1rem;
1257
+ background: hsl(var(--muted));
1258
+ border-radius: 0.5rem;
1259
+ margin-bottom: 0.75rem;
1260
+ }
1261
+
1262
+ .selected-folder strong {
1263
+ font-size: 1rem;
1264
+ color: hsl(var(--foreground));
1265
+ font-family: var(--font-mono);
1266
+ }