repo-wrapped 0.0.6 → 0.0.9

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 (176) hide show
  1. package/.github/agents/complete.agent.md +257 -0
  2. package/.github/agents/feature-scaffold.agent.md +248 -0
  3. package/.github/agents/jsdoc.agent.md +243 -0
  4. package/.github/agents/plan.agent.md +202 -0
  5. package/.github/agents/spec-writer.agent.md +169 -0
  6. package/.github/agents/test-writer.agent.md +169 -0
  7. package/.stylelintrc.json +27 -0
  8. package/README.md +94 -94
  9. package/coverage/base.css +224 -0
  10. package/coverage/block-navigation.js +87 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +446 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +446 -0
  17. package/coverage/lcov-report/prettify.css +1 -0
  18. package/coverage/lcov-report/prettify.js +2 -0
  19. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  20. package/coverage/lcov-report/sorter.js +210 -0
  21. package/coverage/lcov.info +7039 -0
  22. package/coverage/prettify.css +1 -0
  23. package/coverage/prettify.js +2 -0
  24. package/coverage/sort-arrow-sprite.png +0 -0
  25. package/coverage/sorter.js +210 -0
  26. package/dist/commands/generate.js +262 -5
  27. package/dist/config/defaults.js +158 -0
  28. package/dist/config/index.js +10 -0
  29. package/dist/features/achievements/data/achievements.json +284 -0
  30. package/dist/features/achievements/engine.js +140 -0
  31. package/dist/features/achievements/evaluators.js +246 -0
  32. package/dist/features/achievements/helpers.js +58 -0
  33. package/dist/features/achievements/index.js +57 -0
  34. package/dist/features/achievements/loader.js +88 -0
  35. package/dist/features/achievements/template.js +155 -0
  36. package/dist/features/achievements/types.js +7 -0
  37. package/dist/features/commit-quality/analyzer.js +378 -0
  38. package/dist/features/commit-quality/analyzer.test.js +484 -0
  39. package/dist/features/commit-quality/index.js +28 -0
  40. package/dist/features/commit-quality/template.js +114 -0
  41. package/dist/features/commit-quality/types.js +2 -0
  42. package/dist/features/comparison/analyzer.js +222 -0
  43. package/dist/features/comparison/index.js +28 -0
  44. package/dist/features/comparison/template.js +119 -0
  45. package/dist/features/comparison/types.js +2 -0
  46. package/dist/features/contribution-graph/index.js +9 -0
  47. package/dist/features/contribution-graph/template.js +89 -0
  48. package/dist/features/events/index.js +31 -0
  49. package/dist/features/events/parser.js +253 -0
  50. package/dist/features/events/template.js +113 -0
  51. package/dist/features/events/types.js +2 -0
  52. package/dist/features/executive-summary/generator.js +275 -0
  53. package/dist/features/executive-summary/index.js +27 -0
  54. package/dist/features/executive-summary/template.js +80 -0
  55. package/dist/features/executive-summary/types.js +2 -0
  56. package/dist/features/gaps/analyzer.js +298 -0
  57. package/dist/features/gaps/analyzer.test.js +517 -0
  58. package/dist/features/gaps/index.js +27 -0
  59. package/dist/features/gaps/template.js +190 -0
  60. package/dist/features/gaps/types.js +2 -0
  61. package/dist/features/impact/analyzer.js +248 -0
  62. package/dist/features/impact/index.js +26 -0
  63. package/dist/features/impact/template.js +118 -0
  64. package/dist/features/impact/types.js +2 -0
  65. package/dist/features/index.js +40 -0
  66. package/dist/features/knowledge/analyzer.js +385 -0
  67. package/dist/features/knowledge/index.js +26 -0
  68. package/dist/features/knowledge/template.js +239 -0
  69. package/dist/features/knowledge/types.js +2 -0
  70. package/dist/features/streaks/calculator.js +184 -0
  71. package/dist/features/streaks/calculator.test.js +366 -0
  72. package/dist/features/streaks/index.js +36 -0
  73. package/dist/features/streaks/template.js +41 -0
  74. package/dist/features/streaks/types.js +9 -0
  75. package/dist/features/team/analyzer.js +316 -0
  76. package/dist/features/team/index.js +30 -0
  77. package/dist/features/team/template.js +146 -0
  78. package/dist/features/team/types.js +2 -0
  79. package/dist/features/time-patterns/analyzer.js +319 -0
  80. package/dist/features/time-patterns/analyzer.test.js +278 -0
  81. package/dist/features/time-patterns/index.js +37 -0
  82. package/dist/features/time-patterns/template.js +109 -0
  83. package/dist/features/time-patterns/types.js +9 -0
  84. package/dist/features/velocity/analyzer.js +257 -0
  85. package/dist/features/velocity/analyzer.test.js +383 -0
  86. package/dist/features/velocity/index.js +27 -0
  87. package/dist/features/velocity/template.js +189 -0
  88. package/dist/features/velocity/types.js +2 -0
  89. package/dist/generators/html/scripts/knowledge.js +17 -0
  90. package/dist/generators/html/styles/base.css +10 -6
  91. package/dist/generators/html/styles/components.css +121 -1
  92. package/dist/generators/html/styles/knowledge.css +21 -0
  93. package/dist/generators/html/styles/leaddev.css +1335 -0
  94. package/dist/generators/html/styles/strategic-insights.css +1337 -0
  95. package/dist/generators/html/templates/commitQualitySection.js +28 -2
  96. package/dist/generators/html/templates/comparisonSection.js +119 -0
  97. package/dist/generators/html/templates/eventsSection.js +113 -0
  98. package/dist/generators/html/templates/executiveSummarySection.js +80 -0
  99. package/dist/generators/html/templates/gapSection.js +190 -0
  100. package/dist/generators/html/templates/impactSection.js +8 -6
  101. package/dist/generators/html/templates/knowledgeSection.js +16 -2
  102. package/dist/generators/html/templates/teamSection.js +146 -0
  103. package/dist/generators/html/templates/velocitySection.js +189 -0
  104. package/dist/generators/html/types.js +7 -0
  105. package/dist/generators/html/utils/analysisRunner.js +93 -0
  106. package/dist/generators/html/utils/cardBuilder.js +47 -0
  107. package/dist/generators/html/utils/contextBuilder.js +54 -0
  108. package/dist/generators/html/utils/htmlDocumentBuilder.js +396 -0
  109. package/dist/generators/html/utils/kpiBuilder.js +76 -0
  110. package/dist/generators/html/utils/sectionWrapper.js +71 -0
  111. package/dist/generators/html/utils/styleLoader.js +2 -1
  112. package/dist/html/analysisRunner.js +93 -0
  113. package/dist/html/htmlDocumentBuilder.js +396 -0
  114. package/dist/html/index.js +29 -0
  115. package/dist/html/shared/colorUtils.js +61 -0
  116. package/dist/html/shared/commitMapBuilder.js +23 -0
  117. package/dist/html/shared/components/cardBuilder.js +47 -0
  118. package/dist/html/shared/components/index.js +18 -0
  119. package/dist/html/shared/components/kpiBuilder.js +76 -0
  120. package/dist/html/shared/components/sectionWrapper.js +71 -0
  121. package/dist/html/shared/contextBuilder.js +54 -0
  122. package/dist/html/shared/dateRangeCalculator.js +56 -0
  123. package/dist/html/shared/developerStatsCalculator.js +28 -0
  124. package/dist/html/shared/index.js +39 -0
  125. package/dist/html/shared/scriptLoader.js +15 -0
  126. package/dist/html/shared/scripts/export.js +125 -0
  127. package/dist/html/shared/scripts/knowledge.js +137 -0
  128. package/dist/html/shared/scripts/modal.js +68 -0
  129. package/dist/html/shared/scripts/navigation.js +156 -0
  130. package/dist/html/shared/scripts/tabs.js +18 -0
  131. package/dist/html/shared/scripts/tooltip.js +21 -0
  132. package/dist/html/shared/styleLoader.js +18 -0
  133. package/dist/html/shared/styles/achievements.css +387 -0
  134. package/dist/html/shared/styles/base.css +822 -0
  135. package/dist/html/shared/styles/components.css +1511 -0
  136. package/dist/html/shared/styles/knowledge.css +242 -0
  137. package/dist/html/shared/styles/strategic-insights.css +1337 -0
  138. package/dist/html/shared/weekGrouper.js +27 -0
  139. package/dist/html/types.js +7 -0
  140. package/dist/index.js +54 -21
  141. package/dist/test/helpers/commitFactory.js +166 -0
  142. package/dist/test/helpers/dateUtils.js +101 -0
  143. package/dist/test/helpers/index.js +29 -0
  144. package/dist/test/setup.js +17 -0
  145. package/dist/test/smoke.test.js +94 -0
  146. package/dist/types/achievements.js +7 -0
  147. package/dist/types/analysis.js +7 -0
  148. package/dist/types/core.js +7 -0
  149. package/dist/types/index.js +38 -0
  150. package/dist/types/options.js +7 -0
  151. package/dist/types/shared.js +7 -0
  152. package/dist/types/strategic.js +7 -0
  153. package/dist/types/summary.js +7 -0
  154. package/dist/utils/achievementDefinitions.js +22 -22
  155. package/dist/utils/analyzerContextBuilder.js +124 -0
  156. package/dist/utils/commitQualityAnalyzer.js +13 -2
  157. package/dist/utils/emptyResults.js +95 -0
  158. package/dist/utils/eventAnnotationParser.js +253 -0
  159. package/dist/utils/executiveSummaryGenerator.js +275 -0
  160. package/dist/utils/fileHotspotAnalyzer.js +4 -12
  161. package/dist/utils/gapAnalyzer.js +298 -0
  162. package/dist/utils/gitParser.test.js +363 -0
  163. package/dist/utils/htmlGenerator.js +126 -450
  164. package/dist/utils/impactAnalyzer.js +20 -19
  165. package/dist/utils/knowledgeDistributionAnalyzer.js +32 -27
  166. package/dist/utils/matrixGenerator.js +13 -13
  167. package/dist/utils/rangeComparisonAnalyzer.js +222 -0
  168. package/dist/utils/streakCalculator.js +77 -27
  169. package/dist/utils/teamAnalyzer.js +316 -0
  170. package/dist/utils/timePatternAnalyzer.js +18 -3
  171. package/dist/utils/velocityAnalyzer.js +257 -0
  172. package/dist/utils/wrappedGenerator.js +8 -8
  173. package/package.json +74 -55
  174. package/vitest.config.ts +46 -0
  175. package/dist/cli.js +0 -24
  176. package/dist/commands/index.js +0 -24
@@ -0,0 +1,1335 @@
1
+ /* Lead Developer Insights Styles */
2
+
3
+ /* ===== Velocity Section ===== */
4
+ .velocity-section {
5
+ margin-bottom: var(--spacing-xl);
6
+ }
7
+
8
+ .velocity-stats {
9
+ display: grid;
10
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
11
+ gap: var(--spacing-md);
12
+ margin-bottom: var(--spacing-lg);
13
+ }
14
+
15
+ .velocity-stat-card {
16
+ display: flex;
17
+ flex-direction: column;
18
+ align-items: center;
19
+ justify-content: center;
20
+ text-align: center;
21
+ gap: var(--spacing-sm);
22
+ padding: var(--spacing-md);
23
+ background: var(--bg-primary);
24
+ border: 1px solid var(--border-default);
25
+ border-radius: var(--radius-md);
26
+ transition: border-color var(--transition-fast);
27
+ }
28
+
29
+ .velocity-stat-card:hover {
30
+ border-color: var(--border-emphasis);
31
+ }
32
+
33
+ .velocity-stat-card .stat-icon {
34
+ font-size: 32px;
35
+ line-height: 1;
36
+ }
37
+
38
+ .velocity-stat-card .stat-info {
39
+ display: flex;
40
+ flex-direction: column;
41
+ align-items: center;
42
+ }
43
+
44
+ .velocity-stat-card .stat-label {
45
+ font-size: var(--font-size-sm);
46
+ color: var(--text-secondary);
47
+ text-transform: uppercase;
48
+ letter-spacing: 0.5px;
49
+ font-weight: var(--font-weight-medium);
50
+ margin-bottom: var(--spacing-xs);
51
+ }
52
+
53
+ .velocity-stat-card .stat-value {
54
+ font-size: 24px;
55
+ font-weight: var(--font-weight-semibold);
56
+ color: var(--text-primary);
57
+ margin-bottom: var(--spacing-xs);
58
+ }
59
+
60
+ .velocity-stat-card .stat-value.positive { color: #69db7c; }
61
+ .velocity-stat-card .stat-value.negative { color: #ff6b6b; }
62
+ .velocity-stat-card .stat-value.neutral { color: var(--text-secondary); }
63
+
64
+ .velocity-stat-card .stat-detail {
65
+ font-size: var(--font-size-sm);
66
+ color: var(--text-secondary);
67
+ }
68
+
69
+ .velocity-chart-container {
70
+ background: var(--bg-primary);
71
+ border-radius: var(--radius-md);
72
+ padding: var(--spacing-lg);
73
+ border: 1px solid var(--border-default);
74
+ margin-bottom: var(--spacing-lg);
75
+ }
76
+
77
+ .velocity-chart-container h3 {
78
+ margin-top: 0;
79
+ margin-bottom: var(--spacing-md);
80
+ }
81
+
82
+ .velocity-chart {
83
+ width: 100%;
84
+ height: auto;
85
+ max-height: 250px;
86
+ }
87
+
88
+ .velocity-chart .grid-line {
89
+ stroke: var(--border-color);
90
+ stroke-width: 1;
91
+ }
92
+
93
+ .velocity-chart .axis-label {
94
+ fill: var(--text-muted);
95
+ font-size: 10px;
96
+ }
97
+
98
+ .velocity-chart .legend-label {
99
+ fill: var(--text-primary);
100
+ font-size: 12px;
101
+ font-weight: 500;
102
+ }
103
+
104
+ .velocity-chart .anomaly-marker {
105
+ cursor: pointer;
106
+ transition: r 0.2s ease;
107
+ }
108
+
109
+ .velocity-chart .anomaly-marker:hover {
110
+ r: 8;
111
+ }
112
+
113
+ .anomalies-section {
114
+ background: var(--card-bg);
115
+ border-radius: 12px;
116
+ padding: 1.5rem;
117
+ border: 1px solid var(--border-color);
118
+ }
119
+
120
+ .anomalies-section h3 {
121
+ margin-top: 0;
122
+ }
123
+
124
+ .anomalies-list {
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: 0.75rem;
128
+ }
129
+
130
+ .anomaly-item {
131
+ display: flex;
132
+ align-items: flex-start;
133
+ gap: 0.75rem;
134
+ padding: 0.75rem;
135
+ border-radius: 8px;
136
+ background: var(--bg-color);
137
+ }
138
+
139
+ .anomaly-item.critical {
140
+ border-left: 3px solid #ff6b6b;
141
+ }
142
+
143
+ .anomaly-item.warning {
144
+ border-left: 3px solid #ffa94d;
145
+ }
146
+
147
+ .anomaly-icon {
148
+ font-size: 1.25rem;
149
+ }
150
+
151
+ .anomaly-header {
152
+ display: flex;
153
+ align-items: center;
154
+ gap: 0.5rem;
155
+ flex-wrap: wrap;
156
+ }
157
+
158
+ .anomaly-type {
159
+ font-weight: 600;
160
+ text-transform: capitalize;
161
+ }
162
+
163
+ .anomaly-date {
164
+ color: var(--text-muted);
165
+ font-size: 0.85rem;
166
+ }
167
+
168
+ .anomaly-change {
169
+ font-weight: 600;
170
+ font-size: 0.85rem;
171
+ }
172
+
173
+ .anomaly-causes {
174
+ font-size: 0.8rem;
175
+ color: var(--text-muted);
176
+ margin-top: 0.25rem;
177
+ }
178
+
179
+ /* ===== Gap Section ===== */
180
+ .gap-section {
181
+ margin-bottom: var(--spacing-xl);
182
+ }
183
+
184
+ .gap-stats {
185
+ display: grid;
186
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
187
+ gap: var(--spacing-md);
188
+ margin-bottom: var(--spacing-lg);
189
+ }
190
+
191
+ .gap-stat-card {
192
+ display: flex;
193
+ flex-direction: column;
194
+ align-items: center;
195
+ justify-content: center;
196
+ text-align: center;
197
+ gap: var(--spacing-sm);
198
+ padding: var(--spacing-md);
199
+ background: var(--bg-primary);
200
+ border: 1px solid var(--border-default);
201
+ border-radius: var(--radius-md);
202
+ transition: border-color var(--transition-fast);
203
+ }
204
+
205
+ .gap-stat-card:hover {
206
+ border-color: var(--border-emphasis);
207
+ }
208
+
209
+ .gap-stat-card.risk-card {
210
+ border-left: 4px solid var(--risk-color);
211
+ }
212
+
213
+ .gap-stat-card .stat-icon {
214
+ font-size: 32px;
215
+ line-height: 1;
216
+ }
217
+
218
+ .gap-stat-card .stat-info {
219
+ display: flex;
220
+ flex-direction: column;
221
+ align-items: center;
222
+ }
223
+
224
+ .gap-stat-card .stat-label {
225
+ font-size: var(--font-size-sm);
226
+ color: var(--text-secondary);
227
+ text-transform: uppercase;
228
+ letter-spacing: 0.5px;
229
+ font-weight: var(--font-weight-medium);
230
+ margin-bottom: var(--spacing-xs);
231
+ }
232
+
233
+ .gap-stat-card .stat-value {
234
+ font-size: 24px;
235
+ font-weight: var(--font-weight-semibold);
236
+ color: var(--text-primary);
237
+ margin-bottom: var(--spacing-xs);
238
+ }
239
+
240
+ .gap-stat-card .stat-detail {
241
+ font-size: var(--font-size-sm);
242
+ color: var(--text-secondary);
243
+ }
244
+
245
+ .gap-stat-card .stat-value.risk-low { color: #69db7c; }
246
+ .gap-stat-card .stat-value.risk-medium { color: #ffd43b; }
247
+ .gap-stat-card .stat-value.risk-high { color: #ff922b; }
248
+ .gap-stat-card .stat-value.risk-critical { color: #ff6b6b; }
249
+
250
+ .risk-factors {
251
+ background: var(--bg-primary);
252
+ border-radius: var(--radius-md);
253
+ padding: var(--spacing-md) var(--spacing-lg);
254
+ border: 1px solid var(--border-default);
255
+ margin-bottom: var(--spacing-lg);
256
+ }
257
+
258
+ .risk-factors h4 {
259
+ margin: 0 0 var(--spacing-sm) 0;
260
+ font-size: var(--font-size-sm);
261
+ color: var(--text-secondary);
262
+ }
263
+
264
+ .risk-factors ul {
265
+ margin: 0;
266
+ padding-left: 1.25rem;
267
+ }
268
+
269
+ .risk-factors li {
270
+ margin-bottom: var(--spacing-xs);
271
+ font-size: var(--font-size-sm);
272
+ }
273
+
274
+ .gap-timeline-container {
275
+ background: var(--bg-primary);
276
+ border-radius: var(--radius-md);
277
+ padding: var(--spacing-lg);
278
+ border: 1px solid var(--border-default);
279
+ margin-bottom: var(--spacing-lg);
280
+ }
281
+
282
+ .gap-timeline-container h3 {
283
+ margin-top: 0;
284
+ }
285
+
286
+ .no-gaps-message {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 0.5rem;
290
+ padding: 1rem;
291
+ background: rgba(105, 219, 124, 0.1);
292
+ border-radius: 8px;
293
+ color: #69db7c;
294
+ }
295
+
296
+ .gap-timeline {
297
+ margin: 1rem 0;
298
+ }
299
+
300
+ .timeline-track {
301
+ position: relative;
302
+ height: 40px;
303
+ background: var(--bg-color);
304
+ border-radius: 8px;
305
+ overflow: hidden;
306
+ }
307
+
308
+ .gap-segment {
309
+ position: absolute;
310
+ top: 0;
311
+ height: 100%;
312
+ opacity: 0.8;
313
+ transition: opacity 0.2s ease;
314
+ }
315
+
316
+ .gap-segment:hover {
317
+ opacity: 1;
318
+ }
319
+
320
+ .gap-segment.blocker { background: #ff6b6b; }
321
+ .gap-segment.vacation { background: #4dabf7; }
322
+ .gap-segment.holiday { background: #69db7c; }
323
+ .gap-segment.unknown { background: #868e96; }
324
+
325
+ .timeline-labels {
326
+ display: flex;
327
+ justify-content: space-between;
328
+ margin-top: 0.5rem;
329
+ font-size: 0.8rem;
330
+ color: var(--text-muted);
331
+ }
332
+
333
+ .timeline-legend {
334
+ display: flex;
335
+ flex-wrap: wrap;
336
+ gap: 1rem;
337
+ margin-top: 1rem;
338
+ font-size: 0.8rem;
339
+ }
340
+
341
+ .legend-item {
342
+ display: flex;
343
+ align-items: center;
344
+ gap: 0.5rem;
345
+ }
346
+
347
+ .legend-color {
348
+ width: 12px;
349
+ height: 12px;
350
+ border-radius: 3px;
351
+ }
352
+
353
+ .legend-color.blocker { background: #ff6b6b; }
354
+ .legend-color.vacation { background: #4dabf7; }
355
+ .legend-color.holiday { background: #69db7c; }
356
+ .legend-color.unknown { background: #868e96; }
357
+
358
+ .gaps-list-section {
359
+ background: var(--card-bg);
360
+ border-radius: 12px;
361
+ padding: 1.5rem;
362
+ border: 1px solid var(--border-color);
363
+ }
364
+
365
+ .gaps-list-section h3 {
366
+ margin-top: 0;
367
+ }
368
+
369
+ .gaps-list {
370
+ display: flex;
371
+ flex-direction: column;
372
+ gap: 1rem;
373
+ }
374
+
375
+ .gap-item {
376
+ padding: 1rem;
377
+ background: var(--bg-color);
378
+ border-radius: 8px;
379
+ }
380
+
381
+ .gap-item-header {
382
+ display: flex;
383
+ align-items: center;
384
+ gap: 0.75rem;
385
+ margin-bottom: 0.5rem;
386
+ }
387
+
388
+ .gap-type-icon {
389
+ font-size: 1.25rem;
390
+ }
391
+
392
+ .gap-duration {
393
+ font-weight: 700;
394
+ font-size: 1.1rem;
395
+ }
396
+
397
+ .gap-type-badge {
398
+ font-size: 0.7rem;
399
+ padding: 0.2rem 0.5rem;
400
+ border-radius: 4px;
401
+ text-transform: uppercase;
402
+ font-weight: 600;
403
+ }
404
+
405
+ .gap-type-badge.blocker { background: rgba(255, 107, 107, 0.2); color: #ff6b6b; }
406
+ .gap-type-badge.vacation { background: rgba(77, 171, 247, 0.2); color: #4dabf7; }
407
+ .gap-type-badge.holiday { background: rgba(105, 219, 124, 0.2); color: #69db7c; }
408
+ .gap-type-badge.unknown { background: rgba(134, 142, 150, 0.2); color: #868e96; }
409
+
410
+ .gap-dates {
411
+ font-size: 0.85rem;
412
+ color: var(--text-muted);
413
+ margin-bottom: 0.5rem;
414
+ }
415
+
416
+ .gap-context {
417
+ font-size: 0.8rem;
418
+ }
419
+
420
+ .context-item {
421
+ display: flex;
422
+ gap: 0.5rem;
423
+ margin-top: 0.25rem;
424
+ }
425
+
426
+ .context-label {
427
+ color: var(--text-muted);
428
+ min-width: 45px;
429
+ }
430
+
431
+ .context-message {
432
+ color: var(--text-color);
433
+ font-style: italic;
434
+ }
435
+
436
+ /* ===== Comparison Section ===== */
437
+ .comparison-section {
438
+ margin-bottom: 2rem;
439
+ }
440
+
441
+ .comparison-header {
442
+ display: flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ gap: 2rem;
446
+ margin-bottom: 1.5rem;
447
+ flex-wrap: wrap;
448
+ }
449
+
450
+ .period-label {
451
+ text-align: center;
452
+ padding: 1rem 1.5rem;
453
+ border-radius: 12px;
454
+ background: var(--card-bg);
455
+ border: 2px solid var(--border-color);
456
+ }
457
+
458
+ .period-label.period-1 {
459
+ border-color: var(--accent-color);
460
+ }
461
+
462
+ .period-label.period-2 {
463
+ border-color: #ffa94d;
464
+ }
465
+
466
+ .period-name {
467
+ display: block;
468
+ font-weight: 700;
469
+ font-size: 1.1rem;
470
+ margin-bottom: 0.25rem;
471
+ }
472
+
473
+ .period-dates {
474
+ font-size: 0.8rem;
475
+ color: var(--text-muted);
476
+ }
477
+
478
+ .vs-divider {
479
+ font-weight: 700;
480
+ font-size: 1.25rem;
481
+ color: var(--text-muted);
482
+ }
483
+
484
+ .comparison-summary {
485
+ background: var(--card-bg);
486
+ border-radius: 12px;
487
+ padding: 1rem 1.5rem;
488
+ border: 1px solid var(--border-color);
489
+ margin-bottom: 1.5rem;
490
+ text-align: center;
491
+ }
492
+
493
+ .comparison-summary p {
494
+ margin: 0;
495
+ font-size: 1rem;
496
+ line-height: 1.5;
497
+ }
498
+
499
+ .comparison-grid {
500
+ display: grid;
501
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
502
+ gap: 1rem;
503
+ margin-bottom: 1.5rem;
504
+ }
505
+
506
+ .comparison-card {
507
+ background: var(--card-bg);
508
+ border-radius: 12px;
509
+ padding: 1rem;
510
+ border: 1px solid var(--border-color);
511
+ }
512
+
513
+ .card-header {
514
+ display: flex;
515
+ align-items: center;
516
+ gap: 0.5rem;
517
+ margin-bottom: 0.75rem;
518
+ }
519
+
520
+ .card-emoji {
521
+ font-size: 1.25rem;
522
+ }
523
+
524
+ .card-label {
525
+ font-weight: 600;
526
+ }
527
+
528
+ .card-values {
529
+ display: flex;
530
+ align-items: center;
531
+ justify-content: space-between;
532
+ gap: 0.5rem;
533
+ }
534
+
535
+ .value-box {
536
+ flex: 1;
537
+ text-align: center;
538
+ padding: 0.5rem;
539
+ border-radius: 8px;
540
+ background: var(--bg-color);
541
+ }
542
+
543
+ .value-box .value {
544
+ font-weight: 700;
545
+ font-size: 1.25rem;
546
+ }
547
+
548
+ .value-box.period-1 {
549
+ border-bottom: 2px solid var(--accent-color);
550
+ }
551
+
552
+ .value-box.period-2 {
553
+ border-bottom: 2px solid #ffa94d;
554
+ }
555
+
556
+ .change-indicator {
557
+ display: flex;
558
+ flex-direction: column;
559
+ align-items: center;
560
+ padding: 0.25rem 0.5rem;
561
+ }
562
+
563
+ .change-arrow {
564
+ font-size: 1.25rem;
565
+ }
566
+
567
+ .change-percent {
568
+ font-size: 0.75rem;
569
+ font-weight: 600;
570
+ }
571
+
572
+ .change-indicator.positive { color: #69db7c; }
573
+ .change-indicator.negative { color: #ff6b6b; }
574
+ .change-indicator.neutral { color: var(--text-muted); }
575
+
576
+ .type-distribution-comparison {
577
+ background: var(--card-bg);
578
+ border-radius: 12px;
579
+ padding: 1.5rem;
580
+ border: 1px solid var(--border-color);
581
+ }
582
+
583
+ .type-distribution-comparison h3 {
584
+ margin-top: 0;
585
+ }
586
+
587
+ .distribution-legend {
588
+ display: flex;
589
+ gap: 2rem;
590
+ margin-bottom: 1rem;
591
+ font-size: 0.85rem;
592
+ }
593
+
594
+ .distribution-legend .period-1::before {
595
+ content: '';
596
+ display: inline-block;
597
+ width: 12px;
598
+ height: 12px;
599
+ background: var(--accent-color);
600
+ border-radius: 2px;
601
+ margin-right: 0.5rem;
602
+ }
603
+
604
+ .distribution-legend .period-2::before {
605
+ content: '';
606
+ display: inline-block;
607
+ width: 12px;
608
+ height: 12px;
609
+ background: #ffa94d;
610
+ border-radius: 2px;
611
+ margin-right: 0.5rem;
612
+ }
613
+
614
+ .type-bars-container {
615
+ display: flex;
616
+ flex-direction: column;
617
+ gap: 0.75rem;
618
+ }
619
+
620
+ .type-row {
621
+ display: grid;
622
+ grid-template-columns: 80px 1fr;
623
+ gap: 1rem;
624
+ align-items: center;
625
+ }
626
+
627
+ .type-label {
628
+ font-weight: 600;
629
+ font-size: 0.85rem;
630
+ }
631
+
632
+ .type-bars {
633
+ display: flex;
634
+ flex-direction: column;
635
+ gap: 0.25rem;
636
+ }
637
+
638
+ .bar-container {
639
+ display: flex;
640
+ align-items: center;
641
+ gap: 0.5rem;
642
+ height: 18px;
643
+ }
644
+
645
+ .bar-container .bar {
646
+ height: 100%;
647
+ border-radius: 4px;
648
+ min-width: 2px;
649
+ transition: width 0.3s ease;
650
+ }
651
+
652
+ .bar-container .bar-value {
653
+ font-size: 0.75rem;
654
+ color: var(--text-muted);
655
+ white-space: nowrap;
656
+ }
657
+
658
+ /* ===== Executive Summary Section ===== */
659
+ .executive-summary-section {
660
+ margin-bottom: 2rem;
661
+ }
662
+
663
+ .executive-header {
664
+ display: flex;
665
+ justify-content: space-between;
666
+ align-items: flex-start;
667
+ flex-wrap: wrap;
668
+ gap: 1rem;
669
+ margin-bottom: 1.5rem;
670
+ }
671
+
672
+ .executive-header h2 {
673
+ margin: 0;
674
+ }
675
+
676
+ .summary-meta {
677
+ display: flex;
678
+ flex-direction: column;
679
+ align-items: flex-end;
680
+ font-size: 0.85rem;
681
+ }
682
+
683
+ .summary-meta .repo-name {
684
+ font-weight: 600;
685
+ }
686
+
687
+ .summary-meta .period {
688
+ color: var(--text-muted);
689
+ }
690
+
691
+ .kpi-grid {
692
+ display: grid;
693
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
694
+ gap: 1rem;
695
+ margin-bottom: 1.5rem;
696
+ }
697
+
698
+ .kpi-card {
699
+ background: var(--card-bg);
700
+ border-radius: 12px;
701
+ padding: 1rem;
702
+ border: 1px solid var(--border-color);
703
+ position: relative;
704
+ overflow: hidden;
705
+ }
706
+
707
+ .kpi-status-indicator {
708
+ position: absolute;
709
+ top: 0;
710
+ left: 0;
711
+ width: 4px;
712
+ height: 100%;
713
+ background: var(--status-color);
714
+ }
715
+
716
+ .kpi-content {
717
+ padding-left: 0.5rem;
718
+ }
719
+
720
+ .kpi-label {
721
+ font-size: 0.75rem;
722
+ color: var(--text-muted);
723
+ text-transform: uppercase;
724
+ letter-spacing: 0.5px;
725
+ margin-bottom: 0.25rem;
726
+ }
727
+
728
+ .kpi-value {
729
+ font-size: 1.5rem;
730
+ font-weight: 700;
731
+ margin-bottom: 0.25rem;
732
+ }
733
+
734
+ .kpi-trend {
735
+ display: flex;
736
+ align-items: center;
737
+ gap: 0.25rem;
738
+ font-size: 0.85rem;
739
+ }
740
+
741
+ .kpi-trend.positive { color: #69db7c; }
742
+ .kpi-trend.negative { color: #ff6b6b; }
743
+ .kpi-trend.neutral { color: var(--text-muted); }
744
+
745
+ .kpi-benchmark {
746
+ font-size: 0.75rem;
747
+ color: var(--text-muted);
748
+ margin-top: 0.25rem;
749
+ }
750
+
751
+ .insights-risks-grid {
752
+ display: grid;
753
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
754
+ gap: 1.5rem;
755
+ margin-bottom: 1.5rem;
756
+ }
757
+
758
+ .insights-column,
759
+ .risks-column {
760
+ background: var(--card-bg);
761
+ border-radius: 12px;
762
+ padding: 1.5rem;
763
+ border: 1px solid var(--border-color);
764
+ }
765
+
766
+ .insights-column h3,
767
+ .risks-column h3 {
768
+ margin-top: 0;
769
+ margin-bottom: 1rem;
770
+ }
771
+
772
+ .insights-list,
773
+ .risks-list {
774
+ display: flex;
775
+ flex-direction: column;
776
+ gap: 0.75rem;
777
+ }
778
+
779
+ .insight-item {
780
+ display: flex;
781
+ align-items: flex-start;
782
+ gap: 0.75rem;
783
+ padding: 0.5rem;
784
+ border-radius: 8px;
785
+ background: var(--bg-color);
786
+ }
787
+
788
+ .insight-icon {
789
+ font-size: 1rem;
790
+ flex-shrink: 0;
791
+ }
792
+
793
+ .insight-text {
794
+ font-size: 0.9rem;
795
+ line-height: 1.4;
796
+ }
797
+
798
+ .risk-item {
799
+ display: flex;
800
+ gap: 0.75rem;
801
+ padding: 0.75rem;
802
+ border-radius: 8px;
803
+ background: var(--bg-color);
804
+ }
805
+
806
+ .risk-badge {
807
+ font-size: 0.65rem;
808
+ padding: 0.2rem 0.5rem;
809
+ border-radius: 4px;
810
+ font-weight: 700;
811
+ flex-shrink: 0;
812
+ height: fit-content;
813
+ }
814
+
815
+ .risk-item.low .risk-badge { background: rgba(105, 219, 124, 0.2); color: #69db7c; }
816
+ .risk-item.medium .risk-badge { background: rgba(255, 212, 59, 0.2); color: #ffd43b; }
817
+ .risk-item.high .risk-badge { background: rgba(255, 107, 107, 0.2); color: #ff6b6b; }
818
+
819
+ .risk-content {
820
+ display: flex;
821
+ flex-direction: column;
822
+ gap: 0.25rem;
823
+ }
824
+
825
+ .risk-category {
826
+ font-weight: 600;
827
+ font-size: 0.85rem;
828
+ }
829
+
830
+ .risk-description {
831
+ font-size: 0.8rem;
832
+ color: var(--text-muted);
833
+ }
834
+
835
+ .no-risks {
836
+ color: #69db7c;
837
+ font-size: 0.9rem;
838
+ padding: 0.5rem;
839
+ }
840
+
841
+ .recommendations-section {
842
+ background: var(--card-bg);
843
+ border-radius: 12px;
844
+ padding: 1.5rem;
845
+ border: 1px solid var(--border-color);
846
+ margin-bottom: 1rem;
847
+ }
848
+
849
+ .recommendations-section h3 {
850
+ margin-top: 0;
851
+ }
852
+
853
+ .recommendations-list {
854
+ margin: 0;
855
+ padding-left: 1.5rem;
856
+ }
857
+
858
+ .recommendations-list li {
859
+ margin-bottom: 0.5rem;
860
+ line-height: 1.5;
861
+ }
862
+
863
+ .summary-footer {
864
+ text-align: right;
865
+ font-size: 0.8rem;
866
+ color: var(--text-muted);
867
+ }
868
+
869
+ /* ===== Team Section ===== */
870
+ .team-section {
871
+ margin-bottom: 2rem;
872
+ }
873
+
874
+ .team-summary {
875
+ display: grid;
876
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
877
+ gap: 1rem;
878
+ margin-bottom: 2rem;
879
+ }
880
+
881
+ .team-stat-card {
882
+ background: var(--card-bg);
883
+ border-radius: 12px;
884
+ padding: 1.25rem;
885
+ text-align: center;
886
+ border: 1px solid var(--border-color);
887
+ }
888
+
889
+ .team-stat-card .stat-value {
890
+ display: block;
891
+ font-size: 1.75rem;
892
+ font-weight: 700;
893
+ color: #69db7c;
894
+ }
895
+
896
+ .team-stat-card .stat-label {
897
+ display: block;
898
+ font-size: 0.75rem;
899
+ color: var(--text-muted);
900
+ text-transform: uppercase;
901
+ letter-spacing: 0.5px;
902
+ margin-top: 0.25rem;
903
+ }
904
+
905
+ /* Load Distribution */
906
+ .load-distribution {
907
+ background: var(--card-bg);
908
+ border-radius: 12px;
909
+ padding: 1.5rem;
910
+ margin-bottom: 2rem;
911
+ border: 1px solid var(--border-color);
912
+ }
913
+
914
+ .load-distribution h3 {
915
+ margin-top: 0;
916
+ margin-bottom: 1rem;
917
+ }
918
+
919
+ .gini-container {
920
+ margin-bottom: 1rem;
921
+ }
922
+
923
+ .gini-bar-bg {
924
+ height: 12px;
925
+ background: rgba(255, 255, 255, 0.1);
926
+ border-radius: 6px;
927
+ overflow: hidden;
928
+ margin-bottom: 0.75rem;
929
+ }
930
+
931
+ .gini-bar {
932
+ height: 100%;
933
+ border-radius: 6px;
934
+ transition: width 0.3s ease;
935
+ }
936
+
937
+ .gini-bar.balanced { background: #69db7c; }
938
+ .gini-bar.moderate { background: #fcc419; }
939
+ .gini-bar.imbalanced { background: #ff6b6b; }
940
+
941
+ .gini-info {
942
+ display: flex;
943
+ justify-content: space-between;
944
+ align-items: center;
945
+ }
946
+
947
+ .gini-value {
948
+ font-weight: 600;
949
+ font-size: 1rem;
950
+ }
951
+
952
+ .gini-assessment {
953
+ padding: 0.25rem 0.75rem;
954
+ border-radius: 20px;
955
+ font-size: 0.875rem;
956
+ font-weight: 500;
957
+ }
958
+
959
+ .gini-assessment.balanced { background: rgba(105, 219, 124, 0.2); color: #69db7c; }
960
+ .gini-assessment.moderate { background: rgba(252, 196, 25, 0.2); color: #fcc419; }
961
+ .gini-assessment.imbalanced { background: rgba(255, 107, 107, 0.2); color: #ff6b6b; }
962
+
963
+ .gini-explanation {
964
+ font-size: 0.875rem;
965
+ color: var(--text-muted);
966
+ margin: 0;
967
+ }
968
+
969
+ /* Member Breakdown */
970
+ .member-breakdown {
971
+ background: var(--card-bg);
972
+ border-radius: 12px;
973
+ padding: 1.5rem;
974
+ margin-bottom: 2rem;
975
+ border: 1px solid var(--border-color);
976
+ }
977
+
978
+ .member-breakdown h3 {
979
+ margin-top: 0;
980
+ margin-bottom: 1rem;
981
+ }
982
+
983
+ .member-list {
984
+ display: flex;
985
+ flex-direction: column;
986
+ gap: 0.75rem;
987
+ }
988
+
989
+ .member-card {
990
+ display: grid;
991
+ grid-template-columns: 40px 1fr 200px auto auto;
992
+ align-items: center;
993
+ gap: 1rem;
994
+ padding: 0.75rem 1rem;
995
+ background: rgba(255, 255, 255, 0.03);
996
+ border-radius: 8px;
997
+ }
998
+
999
+ .member-rank {
1000
+ font-size: 1rem;
1001
+ font-weight: 700;
1002
+ color: var(--text-muted);
1003
+ text-align: center;
1004
+ }
1005
+
1006
+ .member-info {
1007
+ min-width: 0;
1008
+ }
1009
+
1010
+ .member-name {
1011
+ font-weight: 600;
1012
+ white-space: nowrap;
1013
+ overflow: hidden;
1014
+ text-overflow: ellipsis;
1015
+ }
1016
+
1017
+ .member-areas {
1018
+ display: flex;
1019
+ gap: 0.5rem;
1020
+ margin-top: 0.25rem;
1021
+ flex-wrap: wrap;
1022
+ }
1023
+
1024
+ .area-tag {
1025
+ font-size: 0.7rem;
1026
+ padding: 0.125rem 0.5rem;
1027
+ background: rgba(255, 255, 255, 0.1);
1028
+ border-radius: 4px;
1029
+ color: var(--text-muted);
1030
+ }
1031
+
1032
+ .member-bar-container {
1033
+ height: 8px;
1034
+ background: rgba(255, 255, 255, 0.1);
1035
+ border-radius: 4px;
1036
+ overflow: hidden;
1037
+ }
1038
+
1039
+ .member-bar {
1040
+ height: 100%;
1041
+ background: linear-gradient(90deg, #69db7c, #40c057);
1042
+ border-radius: 4px;
1043
+ }
1044
+
1045
+ .member-stats {
1046
+ text-align: right;
1047
+ white-space: nowrap;
1048
+ }
1049
+
1050
+ .member-commits {
1051
+ font-weight: 700;
1052
+ font-size: 1rem;
1053
+ }
1054
+
1055
+ .member-percentage {
1056
+ font-size: 0.8rem;
1057
+ color: var(--text-muted);
1058
+ margin-left: 0.25rem;
1059
+ }
1060
+
1061
+ .member-quality {
1062
+ text-align: center;
1063
+ }
1064
+
1065
+ .quality-badge {
1066
+ display: inline-block;
1067
+ padding: 0.25rem 0.5rem;
1068
+ background: rgba(105, 219, 124, 0.2);
1069
+ color: #69db7c;
1070
+ border-radius: 4px;
1071
+ font-size: 0.8rem;
1072
+ font-weight: 600;
1073
+ }
1074
+
1075
+ /* Team Insights */
1076
+ .team-insights {
1077
+ background: var(--card-bg);
1078
+ border-radius: 12px;
1079
+ padding: 1.5rem;
1080
+ border: 1px solid var(--border-color);
1081
+ }
1082
+
1083
+ .team-insights h3 {
1084
+ margin-top: 0;
1085
+ margin-bottom: 1rem;
1086
+ }
1087
+
1088
+ .insights-list {
1089
+ list-style: none;
1090
+ padding: var(--spacing-md);
1091
+ margin: 0;
1092
+ }
1093
+
1094
+ .insight-item {
1095
+ padding: 0.75rem 1rem;
1096
+ background: rgba(255, 255, 255, 0.03);
1097
+ border-radius: 8px;
1098
+ margin-bottom: 0.5rem;
1099
+ font-size: 0.9rem;
1100
+ }
1101
+
1102
+ .insight-item:last-child {
1103
+ margin-bottom: 0;
1104
+ }
1105
+
1106
+ /* Responsive for team section */
1107
+ @media (max-width: 768px) {
1108
+ .member-card {
1109
+ grid-template-columns: 30px 1fr;
1110
+ grid-template-rows: auto auto auto;
1111
+ gap: 0.5rem;
1112
+ }
1113
+
1114
+ .member-bar-container {
1115
+ grid-column: 1 / -1;
1116
+ }
1117
+
1118
+ .member-stats,
1119
+ .member-quality {
1120
+ grid-column: 2;
1121
+ }
1122
+ }
1123
+
1124
+ /* ===== Events Section ===== */
1125
+ .events-section {
1126
+ display: flex;
1127
+ flex-direction: column;
1128
+ gap: 1.5rem;
1129
+ }
1130
+
1131
+ .events-legend {
1132
+ display: flex;
1133
+ flex-wrap: wrap;
1134
+ gap: 1rem;
1135
+ padding: 1rem 1.25rem;
1136
+ background: rgba(255, 255, 255, 0.03);
1137
+ border-radius: 12px;
1138
+ border: 1px solid var(--border-color);
1139
+ }
1140
+
1141
+ .events-legend .legend-item {
1142
+ display: flex;
1143
+ align-items: center;
1144
+ gap: 0.5rem;
1145
+ font-size: 0.875rem;
1146
+ }
1147
+
1148
+ .events-legend .legend-item .event-icon {
1149
+ font-size: 1rem;
1150
+ }
1151
+
1152
+ .events-legend .legend-item .legend-label {
1153
+ color: var(--text-muted);
1154
+ text-transform: capitalize;
1155
+ }
1156
+
1157
+ .events-summary {
1158
+ display: flex;
1159
+ flex-wrap: wrap;
1160
+ gap: 1rem;
1161
+ }
1162
+
1163
+ .events-summary .summary-stat {
1164
+ display: flex;
1165
+ flex-direction: column;
1166
+ align-items: center;
1167
+ gap: 0.25rem;
1168
+ padding: 1rem 1.5rem;
1169
+ background: var(--card-bg);
1170
+ border-radius: 12px;
1171
+ border: 1px solid var(--border-color);
1172
+ min-width: 100px;
1173
+ }
1174
+
1175
+ .events-summary .stat-value {
1176
+ font-size: 1.25rem;
1177
+ font-weight: 700;
1178
+ }
1179
+
1180
+ .events-summary .stat-label {
1181
+ font-size: 0.75rem;
1182
+ color: var(--text-muted);
1183
+ text-transform: capitalize;
1184
+ }
1185
+
1186
+ .events-timeline {
1187
+ display: flex;
1188
+ flex-direction: column;
1189
+ gap: 1rem;
1190
+ }
1191
+
1192
+ .event-card {
1193
+ padding: 1.25rem 1.5rem;
1194
+ background: rgba(255, 255, 255, 0.03);
1195
+ border-left: 4px solid var(--event-color, #6b7280);
1196
+ border-radius: 0 12px 12px 0;
1197
+ transition: background 0.2s ease;
1198
+ }
1199
+
1200
+ .event-card:hover {
1201
+ background: rgba(255, 255, 255, 0.05);
1202
+ }
1203
+
1204
+ .event-header {
1205
+ display: flex;
1206
+ align-items: center;
1207
+ gap: 0.75rem;
1208
+ margin-bottom: 0.5rem;
1209
+ }
1210
+
1211
+ .event-header .event-icon {
1212
+ font-size: 1.25rem;
1213
+ }
1214
+
1215
+ .event-date {
1216
+ font-size: 0.875rem;
1217
+ color: var(--text-muted);
1218
+ }
1219
+
1220
+ .event-type-badge {
1221
+ font-size: 0.7rem;
1222
+ padding: 0.2rem 0.5rem;
1223
+ background: rgba(255, 255, 255, 0.1);
1224
+ border-radius: 4px;
1225
+ text-transform: uppercase;
1226
+ letter-spacing: 0.5px;
1227
+ }
1228
+
1229
+ .event-label {
1230
+ font-weight: 600;
1231
+ font-size: 1.1rem;
1232
+ line-height: 1.4;
1233
+ }
1234
+
1235
+ .event-description {
1236
+ margin-top: 0.5rem;
1237
+ color: var(--text-muted);
1238
+ font-size: 0.9rem;
1239
+ line-height: 1.5;
1240
+ }
1241
+
1242
+ .event-correlation {
1243
+ margin-top: 1rem;
1244
+ padding-top: 1rem;
1245
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
1246
+ }
1247
+
1248
+ .correlation-metrics {
1249
+ display: flex;
1250
+ flex-wrap: wrap;
1251
+ gap: 0.75rem;
1252
+ margin-bottom: 0.75rem;
1253
+ }
1254
+
1255
+ .correlation-metric {
1256
+ display: flex;
1257
+ flex-direction: column;
1258
+ gap: 0.125rem;
1259
+ padding: 0.5rem 0.75rem;
1260
+ border-radius: 8px;
1261
+ background: rgba(255, 255, 255, 0.05);
1262
+ }
1263
+
1264
+ .correlation-metric .metric-label {
1265
+ font-size: 0.7rem;
1266
+ color: var(--text-muted);
1267
+ text-transform: uppercase;
1268
+ letter-spacing: 0.5px;
1269
+ }
1270
+
1271
+ .correlation-metric .metric-value {
1272
+ font-size: 0.9rem;
1273
+ font-weight: 600;
1274
+ }
1275
+
1276
+ .correlation-metric.positive {
1277
+ background: rgba(16, 185, 129, 0.15);
1278
+ }
1279
+ .correlation-metric.positive .metric-value {
1280
+ color: #10b981;
1281
+ }
1282
+
1283
+ .correlation-metric.negative {
1284
+ background: rgba(239, 68, 68, 0.15);
1285
+ }
1286
+ .correlation-metric.negative .metric-value {
1287
+ color: #ef4444;
1288
+ }
1289
+
1290
+ .correlation-assessment {
1291
+ display: flex;
1292
+ align-items: flex-start;
1293
+ gap: 0.5rem;
1294
+ font-size: 0.875rem;
1295
+ font-style: italic;
1296
+ color: var(--text-muted);
1297
+ line-height: 1.5;
1298
+ }
1299
+
1300
+ .correlation-assessment .assessment-icon {
1301
+ flex-shrink: 0;
1302
+ }
1303
+
1304
+ /* Responsive for events section */
1305
+ @media (max-width: 768px) {
1306
+ .events-legend {
1307
+ gap: 0.75rem;
1308
+ padding: 0.75rem;
1309
+ }
1310
+
1311
+ .events-legend .legend-item {
1312
+ font-size: 0.8rem;
1313
+ }
1314
+
1315
+ .events-summary {
1316
+ flex-direction: column;
1317
+ }
1318
+
1319
+ .events-summary .summary-stat {
1320
+ flex-direction: row;
1321
+ justify-content: space-between;
1322
+ width: 100%;
1323
+ }
1324
+
1325
+ .correlation-metrics {
1326
+ flex-direction: column;
1327
+ gap: 0.5rem;
1328
+ }
1329
+
1330
+ .correlation-metric {
1331
+ flex-direction: row;
1332
+ justify-content: space-between;
1333
+ align-items: center;
1334
+ }
1335
+ }