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