@alejandrojca/elmulo-reporter 2.0.0-beta.5

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.
package/assets/app.css ADDED
@@ -0,0 +1,4457 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&family=Rubik:wght@300;400;500;600;700&display=swap");
2
+
3
+ :root {
4
+ --pw-blue-900: #002a55;
5
+ --pw-blue-800: #082950;
6
+ --pw-blue-700: #023f80;
7
+ --pw-blue-600: #1e4384;
8
+ --pw-blue-100: #e0eeff;
9
+ --pw-blue-050: #eef4fb;
10
+ --pw-gray-900: #373e45;
11
+ --pw-gray-700: #647180;
12
+ --pw-gray-300: #b6c5d5;
13
+ --pw-gray-200: #dee8f3;
14
+ --pw-gray-100: #eceef6;
15
+ --pw-white: #ffffff;
16
+ --pw-teal: #20babb;
17
+ --pw-danger: #ef4161;
18
+ --pw-success: #1a9b78;
19
+ --pw-warning: #f59e0b;
20
+ --shadow-soft: 0 18px 50px rgb(0 42 85 / 10%);
21
+ color: var(--pw-gray-900);
22
+ background: var(--pw-blue-050);
23
+ font-family: "Rubik", "Roboto", ui-sans-serif, system-ui, sans-serif;
24
+ }
25
+
26
+ * {
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ body {
31
+ margin: 0;
32
+ }
33
+
34
+ html[data-theme="dark"],
35
+ html[data-theme="dark"] * {
36
+ scrollbar-color: #4c6b83 #071522;
37
+ scrollbar-width: thin;
38
+ }
39
+
40
+ html[data-theme="dark"]::-webkit-scrollbar,
41
+ html[data-theme="dark"] *::-webkit-scrollbar {
42
+ height: 11px;
43
+ width: 11px;
44
+ }
45
+
46
+ html[data-theme="dark"]::-webkit-scrollbar-track,
47
+ html[data-theme="dark"] *::-webkit-scrollbar-track {
48
+ background: #071522;
49
+ }
50
+
51
+ html[data-theme="dark"]::-webkit-scrollbar-thumb,
52
+ html[data-theme="dark"] *::-webkit-scrollbar-thumb {
53
+ background: #4c6b83;
54
+ border: 2px solid #071522;
55
+ border-radius: 999px;
56
+ }
57
+
58
+ html[data-theme="dark"]::-webkit-scrollbar-thumb:hover,
59
+ html[data-theme="dark"] *::-webkit-scrollbar-thumb:hover {
60
+ background: #5d8ead;
61
+ }
62
+
63
+ html[data-theme="dark"]::-webkit-scrollbar-corner,
64
+ html[data-theme="dark"] *::-webkit-scrollbar-corner {
65
+ background: #071522;
66
+ }
67
+
68
+ body::before {
69
+ background:
70
+ radial-gradient(circle at 10% 0%, rgb(224 238 255 / 90%), transparent 28rem),
71
+ radial-gradient(circle at 95% 8%, rgb(32 186 187 / 14%), transparent 24rem);
72
+ content: "";
73
+ inset: 0;
74
+ pointer-events: none;
75
+ position: fixed;
76
+ z-index: -1;
77
+ }
78
+
79
+ button,
80
+ input,
81
+ select,
82
+ textarea {
83
+ font: inherit;
84
+ }
85
+
86
+ button {
87
+ cursor: pointer;
88
+ }
89
+
90
+ .appShell {
91
+ margin: 0 auto;
92
+ max-width: 1440px;
93
+ padding: 1.5rem 2rem 4rem;
94
+ }
95
+
96
+ .topbar {
97
+ align-items: center;
98
+ display: flex;
99
+ justify-content: space-between;
100
+ margin-bottom: 1rem;
101
+ }
102
+
103
+ .brand {
104
+ align-items: center;
105
+ display: flex;
106
+ gap: 0.75rem;
107
+ }
108
+
109
+ .brandMark {
110
+ align-items: center;
111
+ background: var(--pw-blue-900);
112
+ border-radius: 14px;
113
+ color: var(--pw-white);
114
+ display: inline-flex;
115
+ font-size: 1.15rem;
116
+ font-weight: 700;
117
+ height: 42px;
118
+ justify-content: center;
119
+ width: 42px;
120
+ }
121
+
122
+ .brand strong,
123
+ .brand small {
124
+ display: block;
125
+ }
126
+
127
+ .brand small {
128
+ color: var(--pw-gray-700);
129
+ }
130
+
131
+ .brandMascot {
132
+ height: 42px;
133
+ object-fit: contain;
134
+ width: 52px;
135
+ }
136
+
137
+ .environmentPill,
138
+ .tag,
139
+ .statusPill {
140
+ border-radius: 999px;
141
+ display: inline-flex;
142
+ font-size: 0.82rem;
143
+ font-weight: 700;
144
+ padding: 0.45rem 0.72rem;
145
+ }
146
+
147
+ .environmentPill {
148
+ background: var(--pw-white);
149
+ border: 1px solid var(--pw-gray-200);
150
+ color: var(--pw-blue-900);
151
+ text-transform: uppercase;
152
+ }
153
+
154
+ .hero {
155
+ align-items: center;
156
+ background:
157
+ radial-gradient(circle at top right, rgb(32 186 187 / 22%), transparent 34%),
158
+ linear-gradient(135deg, var(--pw-blue-900), var(--pw-blue-700));
159
+ border-radius: 30px;
160
+ box-shadow: var(--shadow-soft);
161
+ color: var(--pw-white);
162
+ display: grid;
163
+ gap: 2rem;
164
+ grid-template-columns: minmax(0, 1fr) auto;
165
+ overflow: hidden;
166
+ padding: 2rem 2.2rem;
167
+ }
168
+
169
+ .eyebrow {
170
+ color: var(--pw-teal);
171
+ font-size: 0.8rem;
172
+ font-weight: 700;
173
+ letter-spacing: 0.1em;
174
+ margin: 0 0 0.65rem;
175
+ text-transform: uppercase;
176
+ }
177
+
178
+ .hero h1 {
179
+ font-size: clamp(2.1rem, 5vw, 4rem);
180
+ font-weight: 600;
181
+ letter-spacing: -0.045em;
182
+ line-height: 1;
183
+ margin: 0;
184
+ }
185
+
186
+ .hero p {
187
+ color: var(--pw-blue-100);
188
+ margin: 0.85rem 0 0;
189
+ }
190
+
191
+ .heroMeta {
192
+ display: flex;
193
+ flex-wrap: wrap;
194
+ gap: 0.6rem;
195
+ margin-top: 1.25rem;
196
+ }
197
+
198
+ .heroMeta span {
199
+ background: rgb(255 255 255 / 11%);
200
+ border: 1px solid rgb(255 255 255 / 16%);
201
+ border-radius: 999px;
202
+ padding: 0.48rem 0.72rem;
203
+ }
204
+
205
+ .heroMascot {
206
+ filter: drop-shadow(0 18px 26px rgb(0 0 0 / 25%));
207
+ max-height: 150px;
208
+ max-width: 230px;
209
+ opacity: 0.92;
210
+ }
211
+
212
+ .summaryGrid {
213
+ display: grid;
214
+ gap: 1rem;
215
+ grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
216
+ margin: 1.25rem 0;
217
+ }
218
+
219
+ .metricCard,
220
+ .panel,
221
+ .testList,
222
+ .testDetail {
223
+ background: var(--pw-white);
224
+ border: 1px solid var(--pw-gray-200);
225
+ box-shadow: var(--shadow-soft);
226
+ }
227
+
228
+ .metricCard {
229
+ border-radius: 20px;
230
+ overflow: hidden;
231
+ padding: 1rem;
232
+ position: relative;
233
+ }
234
+
235
+ .metricCard::before {
236
+ background: var(--metric-color, var(--pw-blue-700));
237
+ content: "";
238
+ inset: 0 auto 0 0;
239
+ position: absolute;
240
+ width: 4px;
241
+ }
242
+
243
+ .metricCard span {
244
+ color: var(--pw-gray-700);
245
+ display: block;
246
+ font-size: 0.8rem;
247
+ font-weight: 600;
248
+ text-transform: uppercase;
249
+ }
250
+
251
+ .metricCard strong {
252
+ color: var(--pw-blue-900);
253
+ display: block;
254
+ font-size: 2rem;
255
+ margin-top: 0.35rem;
256
+ }
257
+
258
+ .metricCard.passed { --metric-color: var(--pw-success); }
259
+ .metricCard.failed { --metric-color: var(--pw-danger); }
260
+ .metricCard.skipped { --metric-color: var(--pw-gray-300); }
261
+ .metricCard.flaky { --metric-color: var(--pw-warning); }
262
+ .metricCard.otherErrors { --metric-color: #d18a00; }
263
+
264
+ .metricCard.activeFilter {
265
+ border-color: var(--metric-color, var(--pw-blue-700));
266
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--metric-color, var(--pw-blue-700)) 18%, transparent);
267
+ }
268
+
269
+ .statusDistribution {
270
+ align-items: center;
271
+ background: var(--pw-white);
272
+ border: 1px solid var(--pw-gray-200);
273
+ border-radius: 22px;
274
+ box-shadow: var(--shadow-soft);
275
+ display: grid;
276
+ gap: 1.4rem;
277
+ grid-template-columns: minmax(190px, 0.75fr) auto minmax(360px, 1.35fr);
278
+ padding: 1.25rem 1.4rem;
279
+ }
280
+
281
+ .statusDistributionCopy h2,
282
+ .statusDistributionCopy p {
283
+ margin: 0;
284
+ }
285
+
286
+ .statusDistributionCopy h2 {
287
+ color: var(--pw-blue-900);
288
+ font-size: 1.25rem;
289
+ }
290
+
291
+ .statusDistributionCopy > p:last-child {
292
+ color: var(--pw-gray-700);
293
+ font-size: 0.8rem;
294
+ line-height: 1.45;
295
+ margin-top: 0.45rem;
296
+ }
297
+
298
+ .statusDonutWrap {
299
+ align-items: center;
300
+ display: flex;
301
+ justify-content: center;
302
+ }
303
+
304
+ .statusDonut {
305
+ align-items: center;
306
+ background: var(--donut-gradient);
307
+ border-radius: 50%;
308
+ display: flex;
309
+ height: 158px;
310
+ justify-content: center;
311
+ position: relative;
312
+ width: 158px;
313
+ }
314
+
315
+ .statusDonut::before {
316
+ background: var(--pw-white);
317
+ border-radius: 50%;
318
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--pw-gray-200) 72%, transparent);
319
+ content: "";
320
+ height: 96px;
321
+ position: absolute;
322
+ width: 96px;
323
+ }
324
+
325
+ .statusDonut > span {
326
+ align-items: center;
327
+ display: flex;
328
+ flex-direction: column;
329
+ position: relative;
330
+ z-index: 1;
331
+ }
332
+
333
+ .statusDonut strong {
334
+ color: var(--pw-blue-900);
335
+ font-size: 2rem;
336
+ line-height: 1;
337
+ }
338
+
339
+ .statusDonut small {
340
+ color: var(--pw-gray-700);
341
+ font-size: 0.65rem;
342
+ font-weight: 800;
343
+ letter-spacing: 0.04em;
344
+ margin-top: 0.3rem;
345
+ text-transform: uppercase;
346
+ }
347
+
348
+ .statusDistributionLegend {
349
+ display: grid;
350
+ gap: 0.45rem 0.9rem;
351
+ grid-template-columns: repeat(2, minmax(150px, 1fr));
352
+ }
353
+
354
+ .statusLegendItem {
355
+ align-items: center;
356
+ background: var(--pw-blue-050);
357
+ border: 1px solid var(--pw-gray-200);
358
+ border-radius: 11px;
359
+ display: grid;
360
+ gap: 0.55rem;
361
+ grid-template-columns: auto minmax(0, 1fr) auto;
362
+ min-height: 48px;
363
+ padding: 0.55rem 0.65rem;
364
+ }
365
+
366
+ .statusLegendItem.empty {
367
+ opacity: 0.56;
368
+ }
369
+
370
+ .statusLegendDot {
371
+ background: var(--status-color);
372
+ border-radius: 50%;
373
+ height: 10px;
374
+ width: 10px;
375
+ }
376
+
377
+ .statusLegendItem > span:nth-child(2) {
378
+ min-width: 0;
379
+ }
380
+
381
+ .statusLegendItem strong,
382
+ .statusLegendItem small {
383
+ display: block;
384
+ }
385
+
386
+ .statusLegendItem strong {
387
+ color: var(--pw-blue-900);
388
+ font-size: 0.72rem;
389
+ overflow: hidden;
390
+ text-overflow: ellipsis;
391
+ white-space: nowrap;
392
+ }
393
+
394
+ .statusLegendItem small {
395
+ color: var(--pw-gray-700);
396
+ font-size: 0.65rem;
397
+ margin-top: 0.12rem;
398
+ }
399
+
400
+ .statusLegendItem b {
401
+ color: var(--pw-blue-900);
402
+ font-size: 0.95rem;
403
+ }
404
+
405
+ .panel {
406
+ border-radius: 24px;
407
+ padding: 1.25rem;
408
+ }
409
+
410
+ .trendSummary {
411
+ align-items: center;
412
+ cursor: pointer;
413
+ display: flex;
414
+ gap: 1rem;
415
+ justify-content: space-between;
416
+ list-style: none;
417
+ padding: 1.25rem;
418
+ }
419
+
420
+ .trendSummary::-webkit-details-marker {
421
+ display: none;
422
+ }
423
+
424
+ .trendSummary h2 {
425
+ color: var(--pw-blue-900);
426
+ margin: 0;
427
+ }
428
+
429
+ .trendSummary p {
430
+ color: var(--pw-gray-700);
431
+ margin: 0.3rem 0 0;
432
+ }
433
+
434
+ .trendEnvironmentPicker {
435
+ align-items: center;
436
+ color: var(--pw-gray-700);
437
+ display: flex;
438
+ flex-wrap: wrap;
439
+ font-size: 0.9rem;
440
+ font-weight: 600;
441
+ gap: 0.45rem;
442
+ margin-top: 0.3rem;
443
+ }
444
+
445
+ .trendEnvironmentPicker select {
446
+ background: var(--pw-blue-050);
447
+ border-radius: 10px;
448
+ color: var(--pw-blue-900);
449
+ font-size: 0.82rem;
450
+ font-weight: 700;
451
+ min-height: 34px;
452
+ padding: 0.35rem 1.8rem 0.35rem 0.65rem;
453
+ width: auto;
454
+ }
455
+
456
+ .trendSummaryMeta {
457
+ align-items: center;
458
+ display: flex;
459
+ gap: 0.65rem;
460
+ }
461
+
462
+ .trendChevron {
463
+ align-items: center;
464
+ background: var(--pw-blue-100);
465
+ border-radius: 999px;
466
+ color: var(--pw-blue-700);
467
+ display: inline-flex;
468
+ font-size: 1.25rem;
469
+ font-weight: 700;
470
+ height: 30px;
471
+ justify-content: center;
472
+ transform: rotate(0deg);
473
+ transition: transform 160ms ease;
474
+ width: 30px;
475
+ }
476
+
477
+ .trendPanel[open] .trendChevron,
478
+ .featuresPanel[open] .trendChevron,
479
+ .comparisonPanel[open] .trendChevron,
480
+ .qualityPanel[open] .trendChevron {
481
+ transform: rotate(90deg);
482
+ }
483
+
484
+ .trendExpandedContent {
485
+ border-top: 1px solid var(--pw-gray-200);
486
+ margin-top: 1rem;
487
+ padding-top: 1rem;
488
+ }
489
+
490
+ .panelHeader,
491
+ .listHeader,
492
+ .detailHeader {
493
+ align-items: flex-start;
494
+ display: flex;
495
+ gap: 1rem;
496
+ justify-content: space-between;
497
+ }
498
+
499
+ .panelHeader h2,
500
+ .listHeader h2,
501
+ .detailHeader h2 {
502
+ color: var(--pw-blue-900);
503
+ margin: 0;
504
+ }
505
+
506
+ .panelHeader p,
507
+ .listHeader p {
508
+ color: var(--pw-gray-700);
509
+ margin: 0.3rem 0 0;
510
+ }
511
+
512
+ .trendHeaderControls {
513
+ align-items: center;
514
+ display: flex;
515
+ flex-wrap: wrap;
516
+ gap: 0.65rem;
517
+ justify-content: flex-end;
518
+ }
519
+
520
+ .trendHeaderControls label {
521
+ color: var(--pw-blue-900);
522
+ font-size: 0.78rem;
523
+ font-weight: 700;
524
+ margin: 0;
525
+ }
526
+
527
+ .trendHeaderControls select {
528
+ min-height: 38px;
529
+ min-width: 140px;
530
+ padding: 0.5rem 2rem 0.5rem 0.75rem;
531
+ width: auto;
532
+ }
533
+
534
+ .trendFigure {
535
+ --trend-environment-error: var(--pw-warning);
536
+ --trend-failed: var(--pw-danger);
537
+ --trend-outdated-test: #8b5cf6;
538
+ --trend-passed: var(--pw-success);
539
+ --trend-precondition-error: #e87922;
540
+ --trend-reported: var(--pw-blue-600);
541
+ display: grid;
542
+ gap: 0.65rem;
543
+ grid-template-columns: 22px minmax(0, 1fr);
544
+ margin-top: 1.2rem;
545
+ }
546
+
547
+ .trendYAxisTitle {
548
+ align-items: center;
549
+ color: var(--pw-gray-700);
550
+ display: flex;
551
+ font-size: 0.72rem;
552
+ font-weight: 700;
553
+ justify-content: center;
554
+ letter-spacing: 0.04em;
555
+ text-transform: uppercase;
556
+ writing-mode: vertical-rl;
557
+ transform: rotate(180deg);
558
+ }
559
+
560
+ .trendPlot {
561
+ display: grid;
562
+ grid-template-columns: 44px minmax(0, 1fr);
563
+ min-width: 0;
564
+ }
565
+
566
+ .trendYAxis {
567
+ height: 250px;
568
+ position: relative;
569
+ }
570
+
571
+ .trendYAxis span {
572
+ color: var(--pw-gray-700);
573
+ font: 0.72rem "Roboto", sans-serif;
574
+ position: absolute;
575
+ right: 0.55rem;
576
+ transform: translateY(50%);
577
+ }
578
+
579
+ .trendViewport {
580
+ min-width: 0;
581
+ overflow-x: auto;
582
+ padding-bottom: 0.2rem;
583
+ }
584
+
585
+ .trendCanvas {
586
+ height: 250px;
587
+ min-width: 520px;
588
+ position: relative;
589
+ }
590
+
591
+ .trendGridLine {
592
+ border-top: 1px dashed var(--pw-gray-200);
593
+ left: 0;
594
+ pointer-events: none;
595
+ position: absolute;
596
+ right: 0;
597
+ }
598
+
599
+ .trendGridLine.baseline {
600
+ border-color: var(--pw-gray-300);
601
+ border-top-style: solid;
602
+ }
603
+
604
+ .trendColumns {
605
+ bottom: 0;
606
+ display: grid;
607
+ gap: 0.75rem;
608
+ grid-template-columns: repeat(var(--run-count), minmax(64px, 1fr));
609
+ height: 250px;
610
+ left: 0;
611
+ position: absolute;
612
+ right: 0;
613
+ }
614
+
615
+ .trendColumn {
616
+ align-items: center;
617
+ background: transparent;
618
+ border: 1px solid transparent;
619
+ border-radius: 12px;
620
+ color: inherit;
621
+ display: grid;
622
+ grid-template-rows: 22px 198px 30px;
623
+ justify-items: center;
624
+ min-width: 64px;
625
+ padding: 0;
626
+ }
627
+
628
+ .trendColumn:hover,
629
+ .trendColumn.selected {
630
+ background: var(--pw-blue-050);
631
+ border-color: var(--pw-blue-700);
632
+ }
633
+
634
+ .trendColumn.selected {
635
+ box-shadow: 0 0 0 3px rgb(224 238 255 / 90%);
636
+ }
637
+
638
+ .trendValue {
639
+ color: var(--pw-blue-900);
640
+ font: 700 0.75rem "Roboto", sans-serif;
641
+ }
642
+
643
+ .trendBarSlot {
644
+ align-items: end;
645
+ display: flex;
646
+ height: 100%;
647
+ justify-content: center;
648
+ width: 100%;
649
+ }
650
+
651
+ .trendBar {
652
+ background: var(--pw-blue-100);
653
+ border-radius: 10px 10px 4px 4px;
654
+ display: flex;
655
+ flex-direction: column-reverse;
656
+ height: var(--bar-height);
657
+ min-height: 8px;
658
+ overflow: hidden;
659
+ width: min(42px, 60%);
660
+ }
661
+
662
+ .trendBar i {
663
+ display: block;
664
+ }
665
+
666
+ .trendBar .failed { background: var(--trend-failed); }
667
+ .trendBar .passed { background: var(--trend-passed); }
668
+ .trendBar .other { background: var(--pw-gray-300); }
669
+ .trendBar .flaky { background: var(--pw-warning); }
670
+ .trendBar .environment_error { background: var(--trend-environment-error); }
671
+ .trendBar .precondition_error { background: var(--trend-precondition-error); }
672
+ .trendBar .outdated_test { background: var(--trend-outdated-test); }
673
+ .trendBar .reported { background: var(--trend-reported); }
674
+ .trendBar.empty {
675
+ background: transparent;
676
+ min-height: 0;
677
+ }
678
+
679
+ .trendColumn small {
680
+ color: var(--pw-gray-700);
681
+ font-size: 0.68rem;
682
+ padding-top: 0.55rem;
683
+ white-space: nowrap;
684
+ }
685
+
686
+ .trendXAxisTitle {
687
+ color: var(--pw-gray-700);
688
+ font-size: 0.72rem;
689
+ font-weight: 700;
690
+ grid-column: 2;
691
+ grid-row: 2;
692
+ letter-spacing: 0.04em;
693
+ text-align: center;
694
+ text-transform: uppercase;
695
+ }
696
+
697
+ .trendHistoryPlaceholder {
698
+ align-items: center;
699
+ background: var(--pw-blue-050);
700
+ border: 1px dashed var(--pw-gray-300);
701
+ border-radius: 14px;
702
+ color: var(--pw-gray-700);
703
+ display: flex;
704
+ justify-content: center;
705
+ margin-top: 1rem;
706
+ min-height: 72px;
707
+ padding: 1rem;
708
+ text-align: center;
709
+ }
710
+
711
+ .trendHistoryPlaceholder.error {
712
+ background: #fff4f6;
713
+ border-color: #f3b6c3;
714
+ color: #b42143;
715
+ }
716
+
717
+ .trendHistoryPanel {
718
+ border-top: 1px solid var(--pw-gray-200);
719
+ margin-top: 1.2rem;
720
+ padding-top: 1.2rem;
721
+ }
722
+
723
+ .trendHistoryHeader {
724
+ align-items: flex-start;
725
+ display: flex;
726
+ gap: 1rem;
727
+ justify-content: space-between;
728
+ }
729
+
730
+ .trendHistoryActions {
731
+ align-items: center;
732
+ display: flex;
733
+ gap: 0.55rem;
734
+ }
735
+
736
+ .rerunReportButton {
737
+ background: var(--pw-blue-700);
738
+ border: 1px solid var(--pw-blue-700);
739
+ border-radius: 10px;
740
+ color: white;
741
+ font-size: 0.76rem;
742
+ font-weight: 800;
743
+ padding: 0.55rem 0.75rem;
744
+ }
745
+
746
+ .rerunReportButton:disabled {
747
+ cursor: not-allowed;
748
+ opacity: 0.55;
749
+ }
750
+
751
+ .trendRerunFeedback {
752
+ background: #effbf7;
753
+ border: 1px solid #a6dfca;
754
+ border-radius: 10px;
755
+ color: #11694f;
756
+ font-size: 0.78rem;
757
+ font-weight: 700;
758
+ margin-top: 0.85rem;
759
+ padding: 0.65rem 0.75rem;
760
+ }
761
+
762
+ .trendRerunFeedback.error {
763
+ background: #fff4f6;
764
+ border-color: #f3b6c3;
765
+ color: #b42143;
766
+ }
767
+
768
+ .closeHistoryButton,
769
+ .modalCloseButton {
770
+ align-items: center;
771
+ background: var(--pw-blue-100);
772
+ border: 0;
773
+ border-radius: 999px;
774
+ color: var(--pw-blue-700);
775
+ display: inline-flex;
776
+ font-size: 1.25rem;
777
+ height: 34px;
778
+ justify-content: center;
779
+ line-height: 1;
780
+ width: 34px;
781
+ }
782
+
783
+ .trendHistoryHeader h3 {
784
+ color: var(--pw-blue-900);
785
+ margin: 0.15rem 0 0;
786
+ }
787
+
788
+ .trendHistoryHeader p:not(.eyebrow) {
789
+ color: var(--pw-gray-700);
790
+ font-size: 0.82rem;
791
+ margin: 0.3rem 0 0;
792
+ }
793
+
794
+ .trendHistoryStats {
795
+ display: flex;
796
+ flex-wrap: wrap;
797
+ gap: 0.55rem;
798
+ margin: 1rem 0;
799
+ }
800
+
801
+ .trendHistoryStats span {
802
+ background: var(--pw-blue-050);
803
+ border-radius: 999px;
804
+ color: var(--pw-gray-700);
805
+ font-size: 0.78rem;
806
+ padding: 0.45rem 0.65rem;
807
+ }
808
+
809
+ .trendHistoryStats .passed { color: #11694f; }
810
+ .trendHistoryStats .failed { color: #b42143; }
811
+ .trendHistoryStats .otherErrors { color: #875100; }
812
+
813
+ .historicalTestList {
814
+ display: grid;
815
+ gap: 0.55rem;
816
+ max-height: 480px;
817
+ overflow: auto;
818
+ }
819
+
820
+ .historicalTestRow {
821
+ align-items: flex-start;
822
+ background: var(--pw-blue-050);
823
+ border: 1px solid var(--pw-gray-200);
824
+ border-radius: 14px;
825
+ display: grid;
826
+ gap: 0.75rem;
827
+ grid-template-columns: auto minmax(0, 1fr) auto;
828
+ padding: 0.75rem;
829
+ }
830
+
831
+ .historicalTestRow > span:nth-child(2) > strong,
832
+ .historicalTestRow > span:nth-child(2) > small {
833
+ display: block;
834
+ }
835
+
836
+ .historicalTestRow > span:nth-child(2) > strong {
837
+ color: var(--pw-blue-900);
838
+ font-size: 0.88rem;
839
+ }
840
+
841
+ .historicalTestRow small {
842
+ color: var(--pw-gray-700);
843
+ font-size: 0.72rem;
844
+ margin-top: 0.25rem;
845
+ }
846
+
847
+ .historicalTestRow .historicalNote {
848
+ color: var(--pw-blue-700);
849
+ }
850
+
851
+ .historicalTestMeta {
852
+ align-items: flex-end;
853
+ display: flex;
854
+ flex-direction: column;
855
+ }
856
+
857
+ .filters {
858
+ align-items: end;
859
+ display: grid;
860
+ gap: 0.8rem;
861
+ grid-template-columns: minmax(260px, 1.5fr) repeat(3, minmax(150px, 0.6fr));
862
+ margin: 1.25rem 0;
863
+ }
864
+
865
+ .field label,
866
+ .filterFieldLabel {
867
+ color: var(--pw-blue-900);
868
+ display: block;
869
+ font-size: 0.78rem;
870
+ font-weight: 700;
871
+ margin: 0 0 0.38rem;
872
+ }
873
+
874
+ .filterDropdown {
875
+ position: relative;
876
+ }
877
+
878
+ .filterDropdownTrigger {
879
+ align-items: center;
880
+ background: var(--pw-white);
881
+ border: 1px solid var(--pw-gray-200);
882
+ border-radius: 14px;
883
+ color: var(--pw-gray-900);
884
+ display: flex;
885
+ gap: 0.55rem;
886
+ justify-content: space-between;
887
+ min-height: 44px;
888
+ padding: 0.7rem 0.85rem;
889
+ text-align: left;
890
+ width: 100%;
891
+ }
892
+
893
+ .filterDropdownTrigger > span:first-child {
894
+ min-width: 0;
895
+ overflow: hidden;
896
+ text-overflow: ellipsis;
897
+ white-space: nowrap;
898
+ }
899
+
900
+ .filterDropdownChevron {
901
+ color: var(--pw-blue-700);
902
+ flex: 0 0 auto;
903
+ font-size: 1rem;
904
+ transition: transform 140ms ease;
905
+ }
906
+
907
+ .filterDropdownTrigger[aria-expanded="true"] .filterDropdownChevron {
908
+ transform: rotate(180deg);
909
+ }
910
+
911
+ .filterDropdownMenu {
912
+ background: var(--pw-white);
913
+ border: 1px solid var(--pw-gray-200);
914
+ border-radius: 12px;
915
+ box-shadow: 0 18px 42px rgb(0 42 85 / 18%);
916
+ box-sizing: border-box;
917
+ left: 0;
918
+ max-height: 24.5rem;
919
+ max-width: min(360px, 80vw);
920
+ min-width: 100%;
921
+ overflow-x: hidden;
922
+ overflow-y: auto;
923
+ padding: 0.25rem;
924
+ position: absolute;
925
+ scrollbar-color: var(--pw-blue-300) var(--pw-blue-050);
926
+ scrollbar-width: thin;
927
+ top: calc(100% + 0.35rem);
928
+ width: max-content;
929
+ z-index: 80;
930
+ }
931
+
932
+ .filterDropdownMenu[hidden] {
933
+ display: none;
934
+ }
935
+
936
+ .filterDropdownMenu button {
937
+ align-items: center;
938
+ background: transparent;
939
+ border: 0;
940
+ border-radius: 8px;
941
+ color: var(--pw-gray-900);
942
+ display: flex;
943
+ height: 2.4rem;
944
+ max-width: 100%;
945
+ overflow: hidden;
946
+ padding: 0 0.7rem;
947
+ text-align: left;
948
+ text-overflow: ellipsis;
949
+ white-space: nowrap;
950
+ width: 100%;
951
+ }
952
+
953
+ .filterDropdownMenu button:hover,
954
+ .filterDropdownMenu button:focus-visible {
955
+ background: var(--pw-blue-050);
956
+ box-shadow: none;
957
+ color: var(--pw-blue-900);
958
+ }
959
+
960
+ .filterDropdownMenu button[aria-selected="true"] {
961
+ background: var(--pw-blue-100);
962
+ color: var(--pw-blue-900);
963
+ font-weight: 850;
964
+ }
965
+
966
+ .filterDropdownMenu button[aria-selected="true"]::after {
967
+ color: var(--pw-blue-700);
968
+ content: "✓";
969
+ margin-left: auto;
970
+ padding-left: 0.8rem;
971
+ }
972
+
973
+ .filterDropdownMenu::-webkit-scrollbar {
974
+ width: 9px;
975
+ }
976
+
977
+ .filterDropdownMenu::-webkit-scrollbar-track {
978
+ background: var(--pw-blue-050);
979
+ border-radius: 999px;
980
+ }
981
+
982
+ .filterDropdownMenu::-webkit-scrollbar-thumb {
983
+ background: var(--pw-blue-300);
984
+ border: 2px solid var(--pw-blue-050);
985
+ border-radius: 999px;
986
+ }
987
+
988
+ input,
989
+ select,
990
+ textarea {
991
+ background: var(--pw-white);
992
+ border: 1px solid var(--pw-gray-200);
993
+ border-radius: 14px;
994
+ color: var(--pw-gray-900);
995
+ min-height: 44px;
996
+ padding: 0.7rem 0.85rem;
997
+ width: 100%;
998
+ }
999
+
1000
+ input:focus,
1001
+ select:focus,
1002
+ textarea:focus,
1003
+ button:focus-visible,
1004
+ summary:focus-visible {
1005
+ border-color: var(--pw-blue-700);
1006
+ box-shadow: 0 0 0 4px rgb(224 238 255 / 90%);
1007
+ outline: none;
1008
+ }
1009
+
1010
+ .resultsLayout {
1011
+ align-items: start;
1012
+ display: grid;
1013
+ gap: 1rem;
1014
+ grid-template-columns: minmax(420px, 0.9fr) minmax(0, 1.35fr);
1015
+ }
1016
+
1017
+ .testList,
1018
+ .testDetail {
1019
+ border-radius: 24px;
1020
+ min-width: 0;
1021
+ }
1022
+
1023
+ .testList {
1024
+ max-height: 820px;
1025
+ overflow: auto;
1026
+ padding: 1rem;
1027
+ }
1028
+
1029
+ .testDetail {
1030
+ max-height: calc(100vh - 104px);
1031
+ min-height: 560px;
1032
+ overflow-y: auto;
1033
+ padding: 1.3rem;
1034
+ position: sticky;
1035
+ scrollbar-gutter: stable;
1036
+ top: 88px;
1037
+ }
1038
+
1039
+ .testRows {
1040
+ display: grid;
1041
+ gap: 0.65rem;
1042
+ margin-top: 1rem;
1043
+ }
1044
+
1045
+ .testRow {
1046
+ align-items: flex-start;
1047
+ background: var(--pw-blue-050);
1048
+ border: 1px solid var(--pw-gray-200);
1049
+ border-radius: 18px;
1050
+ color: inherit;
1051
+ display: grid;
1052
+ gap: 0.75rem;
1053
+ grid-template-columns: auto minmax(0, 1fr) auto;
1054
+ padding: 0.85rem;
1055
+ text-align: left;
1056
+ width: 100%;
1057
+ }
1058
+
1059
+ .testRow:hover,
1060
+ .testRow.selected {
1061
+ border-color: var(--pw-blue-700);
1062
+ box-shadow: 0 8px 24px rgb(0 42 85 / 8%);
1063
+ }
1064
+
1065
+ .testCaseGroup {
1066
+ display: grid;
1067
+ gap: 0.55rem;
1068
+ }
1069
+
1070
+ .testCaseGroup.containsSelected > .testCaseRow {
1071
+ border-color: var(--pw-blue-700);
1072
+ }
1073
+
1074
+ .testCaseRow {
1075
+ background: var(--pw-white);
1076
+ }
1077
+
1078
+ .groupChevron {
1079
+ align-items: center;
1080
+ background: var(--pw-blue-100);
1081
+ border-radius: 999px;
1082
+ color: var(--pw-blue-700);
1083
+ display: inline-flex;
1084
+ font-size: 1.25rem;
1085
+ font-weight: 700;
1086
+ height: 24px;
1087
+ justify-content: center;
1088
+ transform: rotate(0deg);
1089
+ transition: transform 160ms ease;
1090
+ width: 24px;
1091
+ }
1092
+
1093
+ .groupChevron.expanded {
1094
+ transform: rotate(90deg);
1095
+ }
1096
+
1097
+ .examplesToggleLabel {
1098
+ color: var(--pw-blue-700);
1099
+ font-weight: 700;
1100
+ }
1101
+
1102
+ .exampleRows {
1103
+ display: grid;
1104
+ gap: 0.5rem;
1105
+ margin-left: 1.15rem;
1106
+ padding-left: 1rem;
1107
+ position: relative;
1108
+ }
1109
+
1110
+ .exampleRows[hidden] {
1111
+ display: none;
1112
+ }
1113
+
1114
+ .exampleRows::before {
1115
+ background: var(--pw-blue-100);
1116
+ bottom: 0.75rem;
1117
+ content: "";
1118
+ left: 0;
1119
+ position: absolute;
1120
+ top: 0;
1121
+ width: 3px;
1122
+ }
1123
+
1124
+ .exampleRow {
1125
+ background: #f8fbff;
1126
+ border-radius: 15px;
1127
+ padding-block: 0.72rem;
1128
+ }
1129
+
1130
+ html[data-theme="dark"] .exampleRows::before {
1131
+ background: #1e5075;
1132
+ }
1133
+
1134
+ html[data-theme="dark"] .exampleRow {
1135
+ background: #102638;
1136
+ border-color: #315069;
1137
+ }
1138
+
1139
+ html[data-theme="dark"] .exampleRow:hover,
1140
+ html[data-theme="dark"] .exampleRow.selected {
1141
+ background: #132c40;
1142
+ border-color: #62a8f4;
1143
+ box-shadow: 0 8px 24px rgb(0 0 0 / 24%);
1144
+ }
1145
+
1146
+ html[data-theme="dark"] .exampleRow .testName {
1147
+ color: #e8f2ff;
1148
+ }
1149
+
1150
+ html[data-theme="dark"] .filterFieldLabel {
1151
+ color: #dce9f6;
1152
+ }
1153
+
1154
+ html[data-theme="dark"] .filterDropdownTrigger,
1155
+ html[data-theme="dark"] .filterDropdownMenu {
1156
+ background: #0a1a29;
1157
+ border-color: #3c566d;
1158
+ color: #e8f2ff;
1159
+ }
1160
+
1161
+ html[data-theme="dark"] .filterDropdownMenu {
1162
+ box-shadow: 0 18px 42px rgb(0 0 0 / 42%);
1163
+ scrollbar-color: #4c6b83 #071522;
1164
+ }
1165
+
1166
+ html[data-theme="dark"] .filterDropdownMenu button {
1167
+ color: #dce9f6;
1168
+ }
1169
+
1170
+ html[data-theme="dark"] .filterDropdownMenu button:hover,
1171
+ html[data-theme="dark"] .filterDropdownMenu button:focus-visible {
1172
+ background: #173047;
1173
+ color: #fff;
1174
+ }
1175
+
1176
+ html[data-theme="dark"] .filterDropdownMenu button[aria-selected="true"] {
1177
+ background: #174b75;
1178
+ color: #fff;
1179
+ }
1180
+
1181
+ html[data-theme="dark"] .filterDropdownMenu::-webkit-scrollbar-track {
1182
+ background: #071522;
1183
+ }
1184
+
1185
+ html[data-theme="dark"] .filterDropdownMenu::-webkit-scrollbar-thumb {
1186
+ background: #4c6b83;
1187
+ border-color: #071522;
1188
+ }
1189
+
1190
+ html[data-theme="dark"] .exampleRow .testSpec,
1191
+ html[data-theme="dark"] .exampleRow .testMeta {
1192
+ color: #aebed0;
1193
+ }
1194
+
1195
+ .statusDot {
1196
+ background: var(--pw-gray-300);
1197
+ border-radius: 999px;
1198
+ height: 11px;
1199
+ margin-top: 0.4rem;
1200
+ width: 11px;
1201
+ }
1202
+
1203
+ .statusDot.passed { background: var(--pw-success); }
1204
+ .statusDot.failed { background: var(--pw-danger); }
1205
+ .statusDot.environment_error { background: var(--pw-warning); }
1206
+ .statusDot.precondition_error { background: #e8790c; }
1207
+ .statusDot.outdated_test { background: var(--pw-gray-700); }
1208
+ .statusDot.reported { background: var(--pw-blue-600); }
1209
+ .statusDot.flaky { box-shadow: 0 0 0 4px rgb(245 158 11 / 18%); }
1210
+
1211
+ .testName {
1212
+ color: var(--pw-blue-900);
1213
+ display: block;
1214
+ font-weight: 700;
1215
+ line-height: 1.35;
1216
+ }
1217
+
1218
+ .testSpec,
1219
+ .testMeta {
1220
+ color: var(--pw-gray-700);
1221
+ display: block;
1222
+ font-size: 0.78rem;
1223
+ margin-top: 0.25rem;
1224
+ }
1225
+
1226
+ .testMeta {
1227
+ text-align: right;
1228
+ }
1229
+
1230
+ .statusPill.passed {
1231
+ background: #dff7ef;
1232
+ color: #11694f;
1233
+ }
1234
+
1235
+ .statusPill.failed {
1236
+ background: #fde7ec;
1237
+ color: #b42143;
1238
+ }
1239
+
1240
+ .statusPill.skipped,
1241
+ .statusPill.pending {
1242
+ background: var(--pw-gray-100);
1243
+ color: var(--pw-gray-700);
1244
+ }
1245
+
1246
+ .statusPill.environment_error {
1247
+ background: #fff3d6;
1248
+ color: #875100;
1249
+ }
1250
+
1251
+ .statusPill.precondition_error {
1252
+ background: #ffead5;
1253
+ color: #9a4b08;
1254
+ }
1255
+
1256
+ .statusPill.outdated_test {
1257
+ background: var(--pw-gray-100);
1258
+ color: var(--pw-gray-700);
1259
+ }
1260
+
1261
+ .statusPill.reported {
1262
+ background: var(--pw-blue-100);
1263
+ color: var(--pw-blue-700);
1264
+ }
1265
+
1266
+ .inlineStatus {
1267
+ border-radius: 999px;
1268
+ display: inline-flex;
1269
+ font-size: 0.72rem;
1270
+ font-weight: 700;
1271
+ margin-top: 0.4rem;
1272
+ padding: 0.25rem 0.5rem;
1273
+ }
1274
+
1275
+ .inlineStatus.environment_error {
1276
+ background: #fff3d6;
1277
+ color: #875100;
1278
+ }
1279
+
1280
+ .inlineStatus.precondition_error {
1281
+ background: #ffead5;
1282
+ color: #9a4b08;
1283
+ }
1284
+
1285
+ .inlineStatus.outdated_test {
1286
+ background: var(--pw-gray-100);
1287
+ color: var(--pw-gray-700);
1288
+ }
1289
+
1290
+ .inlineStatus.reported {
1291
+ background: var(--pw-blue-100);
1292
+ color: var(--pw-blue-700);
1293
+ }
1294
+
1295
+ .statusEditor {
1296
+ flex: 0 0 auto;
1297
+ }
1298
+
1299
+ .detailStatusColumn {
1300
+ align-items: flex-end;
1301
+ display: flex;
1302
+ flex: 0 0 auto;
1303
+ flex-direction: column;
1304
+ gap: 0.55rem;
1305
+ }
1306
+
1307
+ .jiraHistoryButton {
1308
+ background: var(--pw-white);
1309
+ border: 1px solid var(--pw-blue-700);
1310
+ border-radius: 999px;
1311
+ color: var(--pw-blue-700);
1312
+ font-size: 0.72rem;
1313
+ font-weight: 700;
1314
+ padding: 0.42rem 0.65rem;
1315
+ }
1316
+
1317
+ .statusSelect {
1318
+ appearance: auto;
1319
+ border: 0;
1320
+ cursor: pointer;
1321
+ min-height: 36px;
1322
+ padding: 0.45rem 2rem 0.45rem 0.72rem;
1323
+ width: auto;
1324
+ }
1325
+
1326
+ .statusSelect:focus {
1327
+ border: 0;
1328
+ }
1329
+
1330
+ .tag {
1331
+ background: var(--pw-blue-100);
1332
+ color: var(--pw-blue-900);
1333
+ margin: 0.2rem;
1334
+ }
1335
+
1336
+ .detailSection {
1337
+ border-top: 1px solid var(--pw-gray-200);
1338
+ margin-top: 1rem;
1339
+ padding-top: 1rem;
1340
+ }
1341
+
1342
+ .detailSection h3 {
1343
+ color: var(--pw-blue-900);
1344
+ font-size: 1rem;
1345
+ margin: 0 0 0.75rem;
1346
+ }
1347
+
1348
+ .failureReview {
1349
+ background: linear-gradient(135deg, #fff9eb, var(--pw-white));
1350
+ border: 1px solid #f4dca7;
1351
+ border-radius: 16px;
1352
+ padding: 1rem;
1353
+ }
1354
+
1355
+ .failureReviewHeader {
1356
+ align-items: flex-start;
1357
+ display: flex;
1358
+ gap: 1rem;
1359
+ justify-content: space-between;
1360
+ }
1361
+
1362
+ .failureReviewHeader h3 {
1363
+ margin-bottom: 0.2rem;
1364
+ }
1365
+
1366
+ .failureReviewHeader p {
1367
+ color: var(--pw-gray-700);
1368
+ font-size: 0.82rem;
1369
+ margin: 0;
1370
+ }
1371
+
1372
+ .failureReviewHeader > span {
1373
+ background: #fff3d6;
1374
+ border-radius: 999px;
1375
+ color: #875100;
1376
+ flex: 0 0 auto;
1377
+ font-size: 0.72rem;
1378
+ font-weight: 700;
1379
+ padding: 0.35rem 0.55rem;
1380
+ }
1381
+
1382
+ .failureReviewFields {
1383
+ display: grid;
1384
+ gap: 0.8rem;
1385
+ margin-top: 1rem;
1386
+ }
1387
+
1388
+ .failureReviewFields label {
1389
+ color: var(--pw-blue-900);
1390
+ display: grid;
1391
+ font-size: 0.78rem;
1392
+ font-weight: 700;
1393
+ gap: 0.4rem;
1394
+ }
1395
+
1396
+ .failureReviewFields textarea {
1397
+ min-height: 104px;
1398
+ resize: vertical;
1399
+ }
1400
+
1401
+ .failureReviewActions {
1402
+ align-items: center;
1403
+ display: flex;
1404
+ gap: 0.75rem;
1405
+ margin-top: 0.85rem;
1406
+ }
1407
+
1408
+ .saveReviewButton {
1409
+ background: var(--pw-blue-700);
1410
+ border: 0;
1411
+ border-radius: 12px;
1412
+ color: var(--pw-white);
1413
+ font-weight: 700;
1414
+ padding: 0.68rem 0.9rem;
1415
+ }
1416
+
1417
+ .saveFeedback {
1418
+ color: var(--pw-success);
1419
+ font-size: 0.78rem;
1420
+ font-weight: 700;
1421
+ }
1422
+
1423
+ .saveFeedback.error {
1424
+ color: var(--pw-danger);
1425
+ }
1426
+
1427
+ html[data-theme="dark"] pre {
1428
+ background: #071522;
1429
+ border: 1px solid #29445c;
1430
+ color: #dbeaff;
1431
+ }
1432
+
1433
+ html[data-theme="dark"] .failureReview {
1434
+ background:
1435
+ radial-gradient(circle at 100% 0%, rgb(245 158 11 / 10%), transparent 42%),
1436
+ linear-gradient(135deg, #102638, #0d2031);
1437
+ border-color: #80652c;
1438
+ }
1439
+
1440
+ html[data-theme="dark"] .failureReviewHeader h3,
1441
+ html[data-theme="dark"] .failureReviewFields label,
1442
+ html[data-theme="dark"] .auditTrail summary {
1443
+ color: #e8f2ff;
1444
+ }
1445
+
1446
+ html[data-theme="dark"] .failureReviewHeader p,
1447
+ html[data-theme="dark"] .auditSummary,
1448
+ html[data-theme="dark"] .auditEvent span,
1449
+ html[data-theme="dark"] .auditEvent small {
1450
+ color: #aebed0;
1451
+ }
1452
+
1453
+ html[data-theme="dark"] .failureReviewFields input,
1454
+ html[data-theme="dark"] .failureReviewFields textarea {
1455
+ background: #0a1a29;
1456
+ border-color: #3c566d;
1457
+ color: #e8f2ff;
1458
+ }
1459
+
1460
+ html[data-theme="dark"] .failureReviewFields input::placeholder,
1461
+ html[data-theme="dark"] .failureReviewFields textarea::placeholder {
1462
+ color: #7f94a8;
1463
+ }
1464
+
1465
+ html[data-theme="dark"] .saveReviewButton {
1466
+ background: #4e91dc;
1467
+ color: #fff;
1468
+ }
1469
+
1470
+ html[data-theme="dark"] .auditTrail {
1471
+ border-top-color: #315069;
1472
+ }
1473
+
1474
+ html[data-theme="dark"] .auditEvent {
1475
+ border-left-color: #62a8f4;
1476
+ }
1477
+
1478
+ .srOnly {
1479
+ height: 1px;
1480
+ margin: -1px;
1481
+ overflow: hidden;
1482
+ padding: 0;
1483
+ position: absolute;
1484
+ width: 1px;
1485
+ clip: rect(0, 0, 0, 0);
1486
+ white-space: nowrap;
1487
+ }
1488
+
1489
+ .testHistoryModal,
1490
+ .reuseConfirmationModal,
1491
+ .pdfExportModal {
1492
+ background: transparent;
1493
+ border: 0;
1494
+ max-height: min(88vh, 920px);
1495
+ max-width: 880px;
1496
+ padding: 0;
1497
+ width: calc(100% - 2rem);
1498
+ }
1499
+
1500
+ .testHistoryModal {
1501
+ overflow: hidden;
1502
+ }
1503
+
1504
+ .versionBadge {
1505
+ background: #dff8f7;
1506
+ border: 1px solid #7ed9d5;
1507
+ border-radius: 999px;
1508
+ color: #057f83;
1509
+ font-size: 0.65rem;
1510
+ font-style: normal;
1511
+ letter-spacing: 0.04em;
1512
+ margin-left: 0.35rem;
1513
+ padding: 0.15rem 0.45rem;
1514
+ text-transform: uppercase;
1515
+ }
1516
+
1517
+ .actorPicker {
1518
+ align-items: center;
1519
+ color: var(--pw-gray-700);
1520
+ display: flex;
1521
+ font-size: 0.76rem;
1522
+ font-weight: 800;
1523
+ gap: 0.45rem;
1524
+ }
1525
+
1526
+ .actorPicker input {
1527
+ border: 1px solid var(--pw-gray-300);
1528
+ border-radius: 10px;
1529
+ max-width: 170px;
1530
+ padding: 0.5rem 0.65rem;
1531
+ }
1532
+
1533
+ .qualityPanel,
1534
+ .featuresPanel,
1535
+ .comparisonPanel {
1536
+ margin-top: 1rem;
1537
+ }
1538
+
1539
+ .qualityPanel > summary,
1540
+ .featuresPanel > summary,
1541
+ .comparisonPanel > summary {
1542
+ align-items: center;
1543
+ cursor: pointer;
1544
+ display: flex;
1545
+ justify-content: space-between;
1546
+ list-style: none;
1547
+ padding: 1.25rem;
1548
+ }
1549
+
1550
+ .qualityPanel > summary h2,
1551
+ .featuresPanel > summary h2,
1552
+ .comparisonPanel > summary h2 {
1553
+ margin: 0;
1554
+ }
1555
+
1556
+ .qualityPanel > summary p,
1557
+ .featuresPanel > summary p,
1558
+ .comparisonPanel > summary p {
1559
+ color: var(--pw-gray-700);
1560
+ margin: 0.25rem 0 0;
1561
+ }
1562
+
1563
+ .featureDistribution {
1564
+ --trend-environment-error: var(--pw-warning);
1565
+ --trend-failed: var(--pw-danger);
1566
+ --trend-outdated-test: #8b5cf6;
1567
+ --trend-passed: var(--pw-success);
1568
+ --trend-precondition-error: #e87922;
1569
+ --trend-reported: var(--pw-blue-600);
1570
+ border-top: 1px solid var(--pw-gray-200);
1571
+ padding: 0.95rem 1.25rem 1.25rem;
1572
+ }
1573
+
1574
+ .featureLegend {
1575
+ display: flex;
1576
+ flex-wrap: wrap;
1577
+ gap: 0.45rem 1rem;
1578
+ justify-content: flex-end;
1579
+ margin-bottom: 0.75rem;
1580
+ }
1581
+
1582
+ .featureLegend span {
1583
+ align-items: center;
1584
+ color: var(--pw-gray-700);
1585
+ display: inline-flex;
1586
+ font-size: 0.7rem;
1587
+ font-weight: 700;
1588
+ gap: 0.35rem;
1589
+ white-space: nowrap;
1590
+ }
1591
+
1592
+ .featureLegend i {
1593
+ border-radius: 50%;
1594
+ flex: 0 0 auto;
1595
+ height: 9px;
1596
+ width: 9px;
1597
+ }
1598
+
1599
+ .featureRows {
1600
+ border: 1px solid var(--pw-gray-200);
1601
+ border-radius: 12px;
1602
+ overflow: hidden;
1603
+ }
1604
+
1605
+ .featureRow {
1606
+ align-items: center;
1607
+ display: grid;
1608
+ gap: 1.25rem;
1609
+ grid-template-columns: minmax(220px, 0.9fr) minmax(300px, 1.6fr);
1610
+ min-height: 48px;
1611
+ padding: 0.55rem 0.8rem;
1612
+ }
1613
+
1614
+ .featureRow + .featureRow {
1615
+ border-top: 1px solid var(--pw-gray-200);
1616
+ }
1617
+
1618
+ .featureRow > strong {
1619
+ color: var(--pw-blue-900);
1620
+ font-size: 0.82rem;
1621
+ min-width: 0;
1622
+ overflow: hidden;
1623
+ text-overflow: ellipsis;
1624
+ white-space: nowrap;
1625
+ }
1626
+
1627
+ .featureStatusBar {
1628
+ background: var(--pw-blue-050);
1629
+ border-radius: 6px;
1630
+ display: flex;
1631
+ height: 26px;
1632
+ min-width: 0;
1633
+ overflow: hidden;
1634
+ }
1635
+
1636
+ .featureStatusSegment {
1637
+ align-items: center;
1638
+ color: #fff;
1639
+ display: flex;
1640
+ flex: var(--feature-count) 1 0;
1641
+ font-size: 0.7rem;
1642
+ font-weight: 900;
1643
+ justify-content: center;
1644
+ min-width: 24px;
1645
+ text-shadow: 0 1px 1px rgb(0 0 0 / 24%);
1646
+ }
1647
+
1648
+ .featureLegend .passed,
1649
+ .featureStatusSegment.passed { background: var(--trend-passed); }
1650
+ .featureLegend .failed,
1651
+ .featureStatusSegment.failed { background: var(--trend-failed); }
1652
+ .featureLegend .environment_error,
1653
+ .featureStatusSegment.environment_error { background: var(--trend-environment-error); }
1654
+ .featureLegend .precondition_error,
1655
+ .featureStatusSegment.precondition_error { background: var(--trend-precondition-error); }
1656
+ .featureLegend .outdated_test,
1657
+ .featureStatusSegment.outdated_test { background: var(--trend-outdated-test); }
1658
+ .featureLegend .reported,
1659
+ .featureStatusSegment.reported { background: var(--trend-reported); }
1660
+ .featureLegend .omitted,
1661
+ .featureStatusSegment.omitted { background: #8da0b3; }
1662
+ .featureLegend .other,
1663
+ .featureStatusSegment.other { background: var(--pw-gray-700); }
1664
+
1665
+ .featureStatusSegment.environment_error {
1666
+ color: #3d2a00;
1667
+ text-shadow: none;
1668
+ }
1669
+
1670
+ .qualityGrid {
1671
+ border-top: 1px solid var(--pw-gray-200);
1672
+ display: grid;
1673
+ gap: 1rem;
1674
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1675
+ padding: 1.25rem;
1676
+ }
1677
+
1678
+ .qualityGrid h3 {
1679
+ margin-top: 0;
1680
+ }
1681
+
1682
+ .qualityRow,
1683
+ .comparisonRow {
1684
+ align-items: center;
1685
+ border-bottom: 1px solid var(--pw-gray-200);
1686
+ display: flex;
1687
+ gap: 1rem;
1688
+ justify-content: space-between;
1689
+ padding: 0.7rem 0;
1690
+ }
1691
+
1692
+ .qualityRow span:first-child,
1693
+ .comparisonRow span:first-child {
1694
+ display: grid;
1695
+ min-width: 0;
1696
+ }
1697
+
1698
+ .qualityRow small,
1699
+ .comparisonRow small {
1700
+ color: var(--pw-gray-700);
1701
+ margin-top: 0.2rem;
1702
+ overflow: hidden;
1703
+ text-overflow: ellipsis;
1704
+ white-space: nowrap;
1705
+ }
1706
+
1707
+ .analyticsLoading {
1708
+ color: var(--pw-gray-700);
1709
+ padding: 1.25rem;
1710
+ }
1711
+
1712
+ .comparisonControls {
1713
+ align-items: end;
1714
+ border-top: 1px solid var(--pw-gray-200);
1715
+ display: grid;
1716
+ gap: 0.8rem;
1717
+ grid-template-columns: 1fr 1fr auto;
1718
+ padding: 1.25rem;
1719
+ }
1720
+
1721
+ .comparisonControls label,
1722
+ .bulkFields label {
1723
+ display: grid;
1724
+ font-size: 0.78rem;
1725
+ font-weight: 800;
1726
+ gap: 0.35rem;
1727
+ }
1728
+
1729
+ .comparisonControls select,
1730
+ .bulkFields input,
1731
+ .bulkFields select {
1732
+ border: 1px solid var(--pw-gray-300);
1733
+ border-radius: 10px;
1734
+ min-height: 42px;
1735
+ padding: 0.55rem 0.7rem;
1736
+ }
1737
+
1738
+ .comparisonControls button,
1739
+ .bulkFields button {
1740
+ background: var(--pw-blue-700);
1741
+ border: 0;
1742
+ border-radius: 10px;
1743
+ color: white;
1744
+ cursor: pointer;
1745
+ font-weight: 800;
1746
+ min-height: 42px;
1747
+ padding: 0.6rem 1rem;
1748
+ }
1749
+
1750
+ #comparison-results {
1751
+ padding: 0 1.25rem 1.25rem;
1752
+ }
1753
+
1754
+ .comparisonRow.new_failure {
1755
+ color: var(--pw-danger);
1756
+ }
1757
+
1758
+ .comparisonRow.resolved {
1759
+ color: var(--pw-success);
1760
+ }
1761
+
1762
+ .filterSearch {
1763
+ min-width: 260px;
1764
+ }
1765
+
1766
+ .bulkPanel {
1767
+ background: #f7fbff;
1768
+ border: 1px solid var(--pw-gray-200);
1769
+ border-radius: 16px;
1770
+ margin: 0 0 1rem;
1771
+ }
1772
+
1773
+ .bulkPanel > summary {
1774
+ cursor: pointer;
1775
+ font-weight: 850;
1776
+ padding: 0.9rem 1rem;
1777
+ }
1778
+
1779
+ .bulkFields {
1780
+ align-items: end;
1781
+ border-top: 1px solid var(--pw-gray-200);
1782
+ display: grid;
1783
+ gap: 0.7rem;
1784
+ grid-template-columns: 1fr 2fr 1fr auto;
1785
+ padding: 1rem;
1786
+ }
1787
+
1788
+ #bulk-feedback {
1789
+ color: var(--pw-gray-700);
1790
+ font-size: 0.8rem;
1791
+ grid-column: 1 / -1;
1792
+ }
1793
+
1794
+ html[data-theme="dark"] .bulkPanel {
1795
+ background: #102638;
1796
+ border-color: #315069;
1797
+ }
1798
+
1799
+ html[data-theme="dark"] .bulkPanel > summary {
1800
+ color: #e8f2ff;
1801
+ }
1802
+
1803
+ html[data-theme="dark"] .bulkFields {
1804
+ border-top-color: #315069;
1805
+ }
1806
+
1807
+ html[data-theme="dark"] .bulkFields label {
1808
+ color: #b8c7d6;
1809
+ }
1810
+
1811
+ html[data-theme="dark"] .bulkFields input,
1812
+ html[data-theme="dark"] .bulkFields select {
1813
+ background: #0a1a29;
1814
+ border-color: #3c566d;
1815
+ color: #e8f2ff;
1816
+ }
1817
+
1818
+ html[data-theme="dark"] .bulkFields button {
1819
+ background: #4e91dc;
1820
+ color: #fff;
1821
+ }
1822
+
1823
+ html[data-theme="dark"] .bulkFields button:disabled {
1824
+ background: #28445d;
1825
+ color: #91a7bd;
1826
+ cursor: not-allowed;
1827
+ }
1828
+
1829
+ html[data-theme="dark"] #bulk-feedback {
1830
+ color: #aebed0;
1831
+ }
1832
+
1833
+ .auditSummary {
1834
+ color: var(--pw-gray-700);
1835
+ font-size: 0.78rem;
1836
+ }
1837
+
1838
+ .auditTrail {
1839
+ border-top: 1px solid var(--pw-gray-200);
1840
+ margin-top: 1rem;
1841
+ padding-top: 0.8rem;
1842
+ }
1843
+
1844
+ .auditTrail summary {
1845
+ cursor: pointer;
1846
+ font-weight: 800;
1847
+ }
1848
+
1849
+ .auditEvent {
1850
+ border-left: 3px solid var(--pw-blue-500);
1851
+ display: grid;
1852
+ gap: 0.25rem;
1853
+ margin-top: 0.75rem;
1854
+ padding: 0.35rem 0.7rem;
1855
+ }
1856
+
1857
+ .auditEvent span,
1858
+ .auditEvent small {
1859
+ color: var(--pw-gray-700);
1860
+ font-size: 0.76rem;
1861
+ }
1862
+
1863
+ @media (max-width: 900px) {
1864
+ .qualityGrid,
1865
+ .comparisonControls,
1866
+ .bulkFields {
1867
+ grid-template-columns: 1fr;
1868
+ }
1869
+
1870
+ .actorPicker span {
1871
+ display: none;
1872
+ }
1873
+ }
1874
+
1875
+ /* Elmulo V2 observability workspace */
1876
+
1877
+ html[data-theme="dark"] {
1878
+ --pw-blue-900: #e8f2ff;
1879
+ --pw-blue-800: #c5dcf5;
1880
+ --pw-blue-700: #62a8f4;
1881
+ --pw-blue-600: #4e91dc;
1882
+ --pw-blue-100: #1b3b5c;
1883
+ --pw-blue-050: #0b1724;
1884
+ --pw-gray-900: #edf4fb;
1885
+ --pw-gray-700: #aab9c9;
1886
+ --pw-gray-300: #53677b;
1887
+ --pw-gray-200: #2b4054;
1888
+ --pw-gray-100: #172738;
1889
+ --pw-white: #102131;
1890
+ --shadow-soft: 0 18px 50px rgb(0 0 0 / 26%);
1891
+ background: #0b1724;
1892
+ }
1893
+
1894
+ html[data-theme="dark"] body::before {
1895
+ background:
1896
+ radial-gradient(circle at 10% 0%, rgb(30 67 132 / 28%), transparent 28rem),
1897
+ radial-gradient(circle at 95% 8%, rgb(32 186 187 / 12%), transparent 24rem);
1898
+ }
1899
+
1900
+ html[data-theme="dark"] .hero {
1901
+ background:
1902
+ radial-gradient(circle at top right, rgb(32 186 187 / 22%), transparent 34%),
1903
+ linear-gradient(135deg, #102a43, #0b5e8e);
1904
+ color: #fff;
1905
+ }
1906
+
1907
+ html[data-theme="dark"] .hero p,
1908
+ html[data-theme="dark"] .heroMeta,
1909
+ html[data-theme="dark"] .heroRunState span,
1910
+ html[data-theme="dark"] .heroRunState small {
1911
+ color: #dbeaff;
1912
+ }
1913
+
1914
+ html[data-theme="dark"] .exportPdfButton {
1915
+ background: #dffafa;
1916
+ border-color: #8ee8e2;
1917
+ color: #06253a;
1918
+ }
1919
+
1920
+ .topbar {
1921
+ gap: 0.7rem;
1922
+ justify-content: flex-start;
1923
+ }
1924
+
1925
+ .topbar .brand {
1926
+ margin-right: auto;
1927
+ }
1928
+
1929
+ .toolbarSelect select {
1930
+ border-radius: 10px;
1931
+ font-size: 0.75rem;
1932
+ min-height: 38px;
1933
+ padding: 0.45rem 1.8rem 0.45rem 0.55rem;
1934
+ width: auto;
1935
+ }
1936
+
1937
+ .themeToggle {
1938
+ align-items: center;
1939
+ background: var(--pw-white);
1940
+ border: 1px solid var(--pw-gray-200);
1941
+ border-radius: 10px;
1942
+ color: var(--pw-blue-900);
1943
+ display: inline-flex;
1944
+ font-size: 1.1rem;
1945
+ height: 38px;
1946
+ justify-content: center;
1947
+ width: 38px;
1948
+ }
1949
+
1950
+ .saveStatus {
1951
+ align-items: center;
1952
+ border-radius: 999px;
1953
+ display: inline-flex;
1954
+ font-size: 0.72rem;
1955
+ font-weight: 800;
1956
+ gap: 0.35rem;
1957
+ padding: 0.42rem 0.65rem;
1958
+ white-space: nowrap;
1959
+ }
1960
+
1961
+ .saveStatus::before {
1962
+ border-radius: 50%;
1963
+ content: "";
1964
+ height: 7px;
1965
+ width: 7px;
1966
+ }
1967
+
1968
+ .saveStatus.saved {
1969
+ background: color-mix(in srgb, var(--pw-success) 12%, transparent);
1970
+ color: var(--pw-success);
1971
+ }
1972
+
1973
+ .saveStatus.saved::before {
1974
+ background: var(--pw-success);
1975
+ }
1976
+
1977
+ .saveStatus.saving {
1978
+ background: var(--pw-blue-100);
1979
+ color: var(--pw-blue-700);
1980
+ }
1981
+
1982
+ .saveStatus.saving::before {
1983
+ animation: savePulse 900ms infinite alternate;
1984
+ background: var(--pw-blue-700);
1985
+ }
1986
+
1987
+ .saveStatus.local,
1988
+ .saveStatus.error {
1989
+ background: color-mix(in srgb, var(--pw-danger) 12%, transparent);
1990
+ color: var(--pw-danger);
1991
+ }
1992
+
1993
+ .saveStatus.local::before,
1994
+ .saveStatus.error::before {
1995
+ background: var(--pw-danger);
1996
+ }
1997
+
1998
+ @keyframes savePulse {
1999
+ to { opacity: 0.25; }
2000
+ }
2001
+
2002
+ .hero {
2003
+ border-radius: 22px;
2004
+ min-height: 0;
2005
+ padding: 1.35rem 1.6rem;
2006
+ }
2007
+
2008
+ .hero h1 {
2009
+ font-size: clamp(1.8rem, 3.2vw, 3rem);
2010
+ }
2011
+
2012
+ .heroMeta {
2013
+ margin-top: 0.85rem;
2014
+ }
2015
+
2016
+ .heroRunState {
2017
+ align-items: flex-end;
2018
+ display: flex;
2019
+ flex-direction: column;
2020
+ min-width: 150px;
2021
+ }
2022
+
2023
+ .heroActionStack {
2024
+ align-items: flex-end;
2025
+ display: flex;
2026
+ flex-direction: column;
2027
+ gap: 0.9rem;
2028
+ }
2029
+
2030
+ .exportPdfButton {
2031
+ align-items: center;
2032
+ background: #fff;
2033
+ border: 1px solid rgb(255 255 255 / 62%);
2034
+ border-radius: 11px;
2035
+ color: var(--pw-blue-900);
2036
+ display: inline-flex;
2037
+ font-weight: 850;
2038
+ gap: 0.45rem;
2039
+ justify-content: center;
2040
+ min-width: 190px;
2041
+ padding: 0.68rem 0.9rem;
2042
+ transition:
2043
+ background 150ms ease,
2044
+ box-shadow 150ms ease,
2045
+ transform 150ms ease;
2046
+ }
2047
+
2048
+ .exportPdfButton:hover:not(:disabled) {
2049
+ background: #e9fbfb;
2050
+ box-shadow: 0 8px 20px rgb(0 0 0 / 18%);
2051
+ transform: translateY(-1px);
2052
+ }
2053
+
2054
+ .exportPdfButton:disabled {
2055
+ cursor: wait;
2056
+ opacity: 0.78;
2057
+ }
2058
+
2059
+ .exportPdfButton > span {
2060
+ color: var(--pw-teal-700);
2061
+ font-size: 1rem;
2062
+ line-height: 1;
2063
+ }
2064
+
2065
+ .heroRunState span,
2066
+ .heroRunState small {
2067
+ color: var(--pw-blue-100);
2068
+ }
2069
+
2070
+ .heroRunState strong {
2071
+ font-size: 2.25rem;
2072
+ }
2073
+
2074
+ .summaryGrid {
2075
+ grid-template-columns: repeat(6, minmax(120px, 1fr));
2076
+ }
2077
+
2078
+ .metricCard strong {
2079
+ display: grid;
2080
+ font-size: 1.65rem;
2081
+ gap: 0.15rem;
2082
+ }
2083
+
2084
+ .metricDelta {
2085
+ font-size: 0.68rem;
2086
+ font-weight: 700;
2087
+ }
2088
+
2089
+ .metricDelta.up {
2090
+ color: var(--pw-danger);
2091
+ }
2092
+
2093
+ .metricDelta.down {
2094
+ color: var(--pw-success);
2095
+ }
2096
+
2097
+ .metricDelta.neutral {
2098
+ color: var(--pw-gray-700);
2099
+ }
2100
+
2101
+ .attentionSection {
2102
+ background: var(--pw-white);
2103
+ border: 1px solid var(--pw-gray-200);
2104
+ border-radius: 22px;
2105
+ box-shadow: var(--shadow-soft);
2106
+ margin: 1rem 0;
2107
+ padding: 1rem;
2108
+ }
2109
+
2110
+ .attentionSection > header {
2111
+ align-items: flex-end;
2112
+ display: flex;
2113
+ justify-content: space-between;
2114
+ margin-bottom: 0.8rem;
2115
+ }
2116
+
2117
+ .attentionSection h2,
2118
+ .attentionSection .eyebrow {
2119
+ margin-bottom: 0;
2120
+ margin-top: 0;
2121
+ }
2122
+
2123
+ .attentionSection > header > span {
2124
+ color: var(--pw-gray-700);
2125
+ font-size: 0.78rem;
2126
+ }
2127
+
2128
+ .attentionGrid {
2129
+ display: grid;
2130
+ gap: 0.7rem;
2131
+ grid-template-columns: repeat(5, 1fr);
2132
+ }
2133
+
2134
+ .attentionCard {
2135
+ background: var(--pw-blue-050);
2136
+ border: 1px solid var(--pw-gray-200);
2137
+ border-left: 4px solid var(--attention-color, var(--pw-blue-700));
2138
+ border-radius: 14px;
2139
+ color: var(--pw-gray-900);
2140
+ display: grid;
2141
+ gap: 0.25rem;
2142
+ padding: 0.8rem;
2143
+ text-align: left;
2144
+ }
2145
+
2146
+ .attentionCard.failed,
2147
+ .attentionCard.no_comment,
2148
+ .attentionCard.no_ticket {
2149
+ --attention-color: var(--pw-danger);
2150
+ }
2151
+
2152
+ .attentionCard.flaky {
2153
+ --attention-color: #d24a93;
2154
+ }
2155
+
2156
+ .attentionCard.reported {
2157
+ --attention-color: var(--pw-blue-700);
2158
+ }
2159
+
2160
+ .attentionCard strong {
2161
+ font-size: 1.45rem;
2162
+ }
2163
+
2164
+ .attentionCard small {
2165
+ color: var(--pw-gray-700);
2166
+ }
2167
+
2168
+ .attentionCard:disabled {
2169
+ cursor: default;
2170
+ opacity: 0.48;
2171
+ }
2172
+
2173
+ .trendHeaderControls {
2174
+ align-items: end;
2175
+ display: flex;
2176
+ gap: 0.75rem;
2177
+ }
2178
+
2179
+ .trendHeaderControls label {
2180
+ color: var(--pw-blue-900);
2181
+ display: grid;
2182
+ font-size: 0.75rem;
2183
+ font-weight: 800;
2184
+ gap: 0.3rem;
2185
+ }
2186
+
2187
+ .trendLegend {
2188
+ align-items: center;
2189
+ background: var(--pw-blue-050);
2190
+ border: 1px solid var(--pw-gray-200);
2191
+ border-radius: 12px;
2192
+ display: flex;
2193
+ flex-wrap: wrap;
2194
+ gap: 0.55rem 1.1rem;
2195
+ grid-column: 2;
2196
+ grid-row: 3;
2197
+ justify-content: center;
2198
+ margin-top: 0.2rem;
2199
+ padding: 0.65rem 0.85rem;
2200
+ }
2201
+
2202
+ .trendLegend span {
2203
+ align-items: center;
2204
+ color: var(--pw-gray-700);
2205
+ display: inline-flex;
2206
+ font-size: 0.75rem;
2207
+ font-weight: 700;
2208
+ gap: 0.4rem;
2209
+ white-space: nowrap;
2210
+ }
2211
+
2212
+ .trendLegend i {
2213
+ background: var(--pw-gray-300);
2214
+ border: 2px solid rgb(255 255 255 / 78%);
2215
+ border-radius: 50%;
2216
+ box-shadow: 0 0 0 1px rgb(0 42 85 / 9%);
2217
+ flex: 0 0 auto;
2218
+ height: 11px;
2219
+ width: 11px;
2220
+ }
2221
+
2222
+ .trendLegend i.passed { background: var(--trend-passed); }
2223
+ .trendLegend i.failed { background: var(--trend-failed); }
2224
+ .trendLegend i.environment_error { background: var(--trend-environment-error); }
2225
+ .trendLegend i.precondition_error { background: var(--trend-precondition-error); }
2226
+ .trendLegend i.outdated_test { background: var(--trend-outdated-test); }
2227
+ .trendLegend i.reported { background: var(--trend-reported); }
2228
+
2229
+ .qualityTabs {
2230
+ border-top: 1px solid var(--pw-gray-200);
2231
+ display: flex;
2232
+ gap: 0.35rem;
2233
+ padding: 1rem 1.25rem 0;
2234
+ }
2235
+
2236
+ .qualityTabs button,
2237
+ .detailTabs button {
2238
+ background: transparent;
2239
+ border: 0;
2240
+ border-bottom: 3px solid transparent;
2241
+ color: var(--pw-gray-700);
2242
+ font-weight: 800;
2243
+ padding: 0.65rem 0.8rem;
2244
+ }
2245
+
2246
+ .qualityTabs button[aria-selected="true"],
2247
+ .detailTabs button[aria-selected="true"] {
2248
+ border-bottom-color: var(--pw-blue-700);
2249
+ color: var(--pw-blue-900);
2250
+ }
2251
+
2252
+ .qualityContent {
2253
+ padding: 0.75rem 1.25rem 1.25rem;
2254
+ }
2255
+
2256
+ .qualityContent > header h3,
2257
+ .qualityContent > header p {
2258
+ margin: 0;
2259
+ }
2260
+
2261
+ .qualityContent > header p {
2262
+ color: var(--pw-gray-700);
2263
+ margin-top: 0.25rem;
2264
+ }
2265
+
2266
+ .qualityList {
2267
+ margin-top: 0.75rem;
2268
+ }
2269
+
2270
+ .qualityRow {
2271
+ display: grid;
2272
+ grid-template-columns: minmax(0, 1fr) auto minmax(120px, auto);
2273
+ }
2274
+
2275
+ .qualityMetric {
2276
+ text-align: right;
2277
+ }
2278
+
2279
+ .sparkline {
2280
+ align-items: center;
2281
+ display: inline-flex;
2282
+ flex-direction: row-reverse;
2283
+ gap: 3px;
2284
+ }
2285
+
2286
+ .sparkline i {
2287
+ background: var(--pw-gray-300);
2288
+ border-radius: 50%;
2289
+ height: 9px;
2290
+ width: 9px;
2291
+ }
2292
+
2293
+ .sparkline i.passed { background: var(--pw-success); }
2294
+ .sparkline i.failed { background: var(--pw-danger); }
2295
+ .sparkline i.flaky { background: #d24a93; }
2296
+ .sparkline i.skipped,
2297
+ .sparkline i.pending { background: var(--pw-gray-300); }
2298
+
2299
+ .comparisonSummary {
2300
+ display: flex;
2301
+ flex-wrap: wrap;
2302
+ gap: 0.55rem;
2303
+ margin-bottom: 0.75rem;
2304
+ }
2305
+
2306
+ .comparisonSummary button {
2307
+ background: var(--pw-blue-050);
2308
+ border: 1px solid var(--pw-gray-200);
2309
+ border-radius: 12px;
2310
+ color: var(--pw-gray-900);
2311
+ display: flex;
2312
+ gap: 0.4rem;
2313
+ padding: 0.55rem 0.7rem;
2314
+ }
2315
+
2316
+ .comparisonRow[hidden] {
2317
+ display: none;
2318
+ }
2319
+
2320
+ .filters {
2321
+ background: var(--pw-white);
2322
+ border: 1px solid var(--pw-gray-200);
2323
+ border-radius: 20px;
2324
+ box-shadow: var(--shadow-soft);
2325
+ grid-template-columns: minmax(280px, 1.5fr) repeat(5, minmax(125px, 0.65fr));
2326
+ padding: 1rem;
2327
+ }
2328
+
2329
+ .activeFilters {
2330
+ align-items: end;
2331
+ display: flex;
2332
+ gap: 0.55rem;
2333
+ grid-column: 1 / -1;
2334
+ }
2335
+
2336
+ .activeFilters button {
2337
+ background: var(--pw-blue-050);
2338
+ border: 1px solid var(--pw-gray-200);
2339
+ border-radius: 999px;
2340
+ color: var(--pw-blue-900);
2341
+ font-size: 0.76rem;
2342
+ font-weight: 800;
2343
+ min-height: 38px;
2344
+ padding: 0.45rem 0.75rem;
2345
+ }
2346
+
2347
+ .activeFilters {
2348
+ align-items: center;
2349
+ }
2350
+
2351
+ .activeFilters .clearFilters {
2352
+ color: var(--pw-danger);
2353
+ }
2354
+
2355
+ .noFilters {
2356
+ color: var(--pw-gray-700);
2357
+ font-size: 0.78rem;
2358
+ }
2359
+
2360
+ .helpTip {
2361
+ align-items: center;
2362
+ background: var(--pw-blue-100);
2363
+ border-radius: 50%;
2364
+ color: var(--pw-blue-700);
2365
+ display: inline-flex;
2366
+ font-size: 0.65rem;
2367
+ height: 16px;
2368
+ justify-content: center;
2369
+ width: 16px;
2370
+ }
2371
+
2372
+ .listHeader {
2373
+ align-items: center;
2374
+ display: flex;
2375
+ justify-content: space-between;
2376
+ }
2377
+
2378
+ .selectVisible {
2379
+ align-items: center;
2380
+ color: var(--pw-gray-700);
2381
+ display: inline-flex;
2382
+ font-size: 0.75rem;
2383
+ gap: 0.35rem;
2384
+ }
2385
+
2386
+ .selectVisible input,
2387
+ .testSelector input {
2388
+ min-height: 0;
2389
+ width: auto;
2390
+ }
2391
+
2392
+ .testRowContainer {
2393
+ align-items: center;
2394
+ display: grid;
2395
+ gap: 0.45rem;
2396
+ grid-template-columns: auto minmax(0, 1fr);
2397
+ }
2398
+
2399
+ .testRowContainer.bulkSelected {
2400
+ background: color-mix(in srgb, var(--pw-blue-700) 8%, transparent);
2401
+ border-radius: 18px;
2402
+ outline: 2px solid var(--pw-blue-700);
2403
+ }
2404
+
2405
+ .testSelector {
2406
+ padding: 0.35rem;
2407
+ }
2408
+
2409
+ .rowSignals {
2410
+ display: flex;
2411
+ flex-wrap: wrap;
2412
+ gap: 0.3rem;
2413
+ margin-top: 0.35rem;
2414
+ }
2415
+
2416
+ .rowSignals > span {
2417
+ background: var(--pw-white);
2418
+ border: 1px solid var(--pw-gray-200);
2419
+ border-radius: 999px;
2420
+ color: var(--pw-gray-700);
2421
+ font-size: 0.65rem;
2422
+ padding: 0.16rem 0.4rem;
2423
+ }
2424
+
2425
+ .rowSignals .resultSignal {
2426
+ color: var(--pw-blue-900);
2427
+ }
2428
+
2429
+ .rowSignals .miniSignal.flaky {
2430
+ background: #fde7f3;
2431
+ color: #a52369;
2432
+ }
2433
+
2434
+ .detailHeader {
2435
+ position: static;
2436
+ }
2437
+
2438
+ .statusPairLabel {
2439
+ color: var(--pw-gray-700);
2440
+ font-size: 0.65rem;
2441
+ font-weight: 800;
2442
+ text-transform: uppercase;
2443
+ }
2444
+
2445
+ .detailTabs {
2446
+ border-bottom: 1px solid var(--pw-gray-200);
2447
+ display: flex;
2448
+ gap: 0.25rem;
2449
+ margin-top: 1rem;
2450
+ overflow-x: auto;
2451
+ }
2452
+
2453
+ .detailTabPanel {
2454
+ min-height: 280px;
2455
+ }
2456
+
2457
+ .emptyState.compact {
2458
+ min-height: 120px;
2459
+ }
2460
+
2461
+ html[data-density="compact"] .appShell {
2462
+ padding: 1rem 1.25rem 3rem;
2463
+ }
2464
+
2465
+ html[data-density="compact"] .testRow,
2466
+ html[data-density="compact"] .metricCard {
2467
+ padding: 0.65rem;
2468
+ }
2469
+
2470
+ html[data-density="compact"] .testRows {
2471
+ gap: 0.45rem;
2472
+ }
2473
+
2474
+ html[data-density="dense"] .appShell {
2475
+ padding: 0.75rem 1rem 2rem;
2476
+ }
2477
+
2478
+ html[data-density="dense"] .hero {
2479
+ padding: 0.9rem 1.1rem;
2480
+ }
2481
+
2482
+ html[data-density="dense"] .hero h1 {
2483
+ font-size: 1.65rem;
2484
+ }
2485
+
2486
+ html[data-density="dense"] .testRow,
2487
+ html[data-density="dense"] .metricCard {
2488
+ border-radius: 12px;
2489
+ padding: 0.48rem;
2490
+ }
2491
+
2492
+ html[data-density="dense"] .testRows {
2493
+ gap: 0.3rem;
2494
+ }
2495
+
2496
+ @media (max-width: 1180px) {
2497
+ .summaryGrid {
2498
+ grid-template-columns: repeat(3, 1fr);
2499
+ }
2500
+
2501
+ .attentionGrid {
2502
+ grid-template-columns: repeat(3, 1fr);
2503
+ }
2504
+
2505
+ .filters {
2506
+ grid-template-columns: repeat(3, 1fr);
2507
+ }
2508
+ }
2509
+
2510
+ @media (max-width: 720px) {
2511
+ .topbar {
2512
+ flex-wrap: wrap;
2513
+ }
2514
+
2515
+ .actorPicker {
2516
+ order: 2;
2517
+ width: 100%;
2518
+ }
2519
+
2520
+ .actorPicker input {
2521
+ max-width: none;
2522
+ }
2523
+
2524
+ .attentionGrid,
2525
+ .summaryGrid,
2526
+ .filters {
2527
+ grid-template-columns: 1fr 1fr;
2528
+ }
2529
+
2530
+ .attentionSection > header {
2531
+ align-items: stretch;
2532
+ flex-direction: column;
2533
+ }
2534
+
2535
+ .qualityRow {
2536
+ grid-template-columns: 1fr;
2537
+ }
2538
+
2539
+ .qualityMetric {
2540
+ text-align: left;
2541
+ }
2542
+ }
2543
+
2544
+ .testHistoryModal::backdrop,
2545
+ .reuseConfirmationModal::backdrop,
2546
+ .pdfExportModal::backdrop {
2547
+ background: rgb(0 26 53 / 58%);
2548
+ backdrop-filter: blur(3px);
2549
+ }
2550
+
2551
+ .pdfExportModal {
2552
+ background: transparent;
2553
+ border: 0;
2554
+ max-height: min(92vh, 960px);
2555
+ max-width: 980px;
2556
+ padding: 0;
2557
+ width: calc(100% - 2rem);
2558
+ }
2559
+
2560
+ .pdfExportShell {
2561
+ background: var(--pw-white);
2562
+ border: 1px solid var(--pw-gray-200);
2563
+ border-radius: 22px;
2564
+ box-shadow: 0 28px 80px rgb(0 31 66 / 25%);
2565
+ display: grid;
2566
+ grid-template-rows: auto auto minmax(0, 1fr) auto;
2567
+ height: min(92vh, 960px);
2568
+ max-height: min(92vh, 960px);
2569
+ overflow: hidden;
2570
+ }
2571
+
2572
+ .pdfExportShell > header,
2573
+ .pdfExportShell > footer {
2574
+ align-items: center;
2575
+ display: flex;
2576
+ gap: 1rem;
2577
+ justify-content: space-between;
2578
+ padding: 1.2rem 1.35rem;
2579
+ }
2580
+
2581
+ .pdfExportShell > header {
2582
+ border-bottom: 1px solid var(--pw-gray-200);
2583
+ }
2584
+
2585
+ .pdfExportShell > header h2,
2586
+ .pdfExportShell > header p {
2587
+ margin: 0;
2588
+ }
2589
+
2590
+ .pdfExportShell > header h2 {
2591
+ color: var(--pw-blue-900);
2592
+ font-size: 1.35rem;
2593
+ }
2594
+
2595
+ .pdfExportShell > header p:not(.eyebrow) {
2596
+ color: var(--pw-gray-700);
2597
+ font-size: 0.82rem;
2598
+ margin-top: 0.35rem;
2599
+ }
2600
+
2601
+ .modalCloseButton {
2602
+ align-items: center;
2603
+ background: var(--pw-gray-100);
2604
+ border: 0;
2605
+ border-radius: 999px;
2606
+ color: var(--pw-blue-900);
2607
+ display: inline-flex;
2608
+ flex: 0 0 auto;
2609
+ font-size: 1.35rem;
2610
+ height: 38px;
2611
+ justify-content: center;
2612
+ width: 38px;
2613
+ }
2614
+
2615
+ .pdfExportToolbar {
2616
+ align-items: center;
2617
+ background: var(--pw-blue-050);
2618
+ border-bottom: 1px solid var(--pw-gray-200);
2619
+ display: flex;
2620
+ gap: 1rem;
2621
+ justify-content: space-between;
2622
+ padding: 0.75rem 1.35rem;
2623
+ }
2624
+
2625
+ .pdfExportToolbar > span {
2626
+ color: var(--pw-gray-700);
2627
+ font-size: 0.78rem;
2628
+ font-weight: 800;
2629
+ }
2630
+
2631
+ .pdfExportToolbar > div {
2632
+ display: flex;
2633
+ gap: 0.55rem;
2634
+ }
2635
+
2636
+ .pdfExportToolbar button,
2637
+ .secondaryButton {
2638
+ background: var(--pw-white);
2639
+ border: 1px solid var(--pw-gray-300);
2640
+ border-radius: 10px;
2641
+ color: var(--pw-blue-900);
2642
+ font-size: 0.76rem;
2643
+ font-weight: 800;
2644
+ padding: 0.55rem 0.75rem;
2645
+ }
2646
+
2647
+ .pdfSectionGrid {
2648
+ display: grid;
2649
+ gap: 0.7rem;
2650
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2651
+ min-height: 0;
2652
+ overflow-y: auto;
2653
+ padding: 1rem 1.35rem;
2654
+ }
2655
+
2656
+ .pdfSectionOption {
2657
+ align-items: start;
2658
+ background: var(--pw-blue-050);
2659
+ border: 1px solid var(--pw-gray-200);
2660
+ border-radius: 14px;
2661
+ cursor: pointer;
2662
+ display: grid;
2663
+ gap: 0.7rem;
2664
+ grid-template-columns: auto minmax(0, 1fr);
2665
+ padding: 0.85rem;
2666
+ position: relative;
2667
+ }
2668
+
2669
+ .pdfSectionOption:has(input:checked) {
2670
+ background: color-mix(in srgb, var(--pw-blue-100) 48%, var(--pw-white));
2671
+ border-color: var(--pw-blue-700);
2672
+ }
2673
+
2674
+ .pdfSectionOption input {
2675
+ height: 1px;
2676
+ opacity: 0;
2677
+ position: absolute;
2678
+ width: 1px;
2679
+ }
2680
+
2681
+ .pdfSectionCheck {
2682
+ align-items: center;
2683
+ background: var(--pw-white);
2684
+ border: 2px solid var(--pw-gray-300);
2685
+ border-radius: 6px;
2686
+ color: transparent;
2687
+ display: inline-flex;
2688
+ font-size: 0.72rem;
2689
+ height: 20px;
2690
+ justify-content: center;
2691
+ width: 20px;
2692
+ }
2693
+
2694
+ .pdfSectionOption input:checked + .pdfSectionCheck {
2695
+ background: var(--pw-blue-700);
2696
+ border-color: var(--pw-blue-700);
2697
+ color: white;
2698
+ }
2699
+
2700
+ .pdfSectionOption input:focus-visible + .pdfSectionCheck {
2701
+ box-shadow: 0 0 0 4px rgb(92 151 217 / 24%);
2702
+ }
2703
+
2704
+ .pdfSectionOption strong,
2705
+ .pdfSectionOption small {
2706
+ display: block;
2707
+ }
2708
+
2709
+ .pdfSectionOption strong {
2710
+ color: var(--pw-blue-900);
2711
+ font-size: 0.86rem;
2712
+ }
2713
+
2714
+ .pdfSectionOption small {
2715
+ color: var(--pw-gray-700);
2716
+ font-size: 0.75rem;
2717
+ line-height: 1.4;
2718
+ margin-top: 0.2rem;
2719
+ }
2720
+
2721
+ .pdfExportShell > footer {
2722
+ border-top: 1px solid var(--pw-gray-200);
2723
+ justify-content: flex-end;
2724
+ }
2725
+
2726
+ .pdfExportFeedback {
2727
+ color: var(--pw-danger);
2728
+ font-size: 0.75rem;
2729
+ font-weight: 700;
2730
+ margin-right: auto;
2731
+ }
2732
+
2733
+ .primaryButton {
2734
+ background: var(--pw-blue-700);
2735
+ border: 1px solid var(--pw-blue-700);
2736
+ border-radius: 10px;
2737
+ color: white;
2738
+ font-weight: 800;
2739
+ padding: 0.62rem 0.9rem;
2740
+ }
2741
+
2742
+ .primaryButton:disabled {
2743
+ cursor: not-allowed;
2744
+ opacity: 0.45;
2745
+ }
2746
+
2747
+ html[data-theme="dark"] .pdfExportShell,
2748
+ html[data-theme="dark"] .pdfSectionOption {
2749
+ background: #102638;
2750
+ border-color: #315069;
2751
+ }
2752
+
2753
+ html[data-theme="dark"] .pdfExportToolbar {
2754
+ background: #0a1a29;
2755
+ border-color: #315069;
2756
+ }
2757
+
2758
+ html[data-theme="dark"] .pdfSectionOption:has(input:checked) {
2759
+ background: #173b57;
2760
+ border-color: #62a8f4;
2761
+ }
2762
+
2763
+
2764
+ @media (max-width: 720px) {
2765
+ .pdfSectionGrid {
2766
+ grid-template-columns: 1fr;
2767
+ }
2768
+
2769
+ .pdfExportToolbar,
2770
+ .pdfExportShell > footer {
2771
+ align-items: stretch;
2772
+ flex-direction: column;
2773
+ }
2774
+
2775
+ .pdfExportToolbar > div {
2776
+ flex-wrap: wrap;
2777
+ }
2778
+ }
2779
+
2780
+ .historyModalShell {
2781
+ background: var(--pw-white);
2782
+ border: 1px solid var(--pw-gray-200);
2783
+ border-radius: 24px;
2784
+ box-shadow: 0 24px 70px rgb(0 42 85 / 28%);
2785
+ max-height: min(88vh, 920px);
2786
+ overflow: hidden;
2787
+ }
2788
+
2789
+ .historyModalHeader {
2790
+ align-items: flex-start;
2791
+ border-bottom: 1px solid var(--pw-gray-200);
2792
+ display: flex;
2793
+ gap: 1rem;
2794
+ justify-content: space-between;
2795
+ padding: 1.25rem;
2796
+ }
2797
+
2798
+ .historyModalHeader h2 {
2799
+ color: var(--pw-blue-900);
2800
+ margin: 0.15rem 0;
2801
+ }
2802
+
2803
+ .historyModalHeader p:not(.eyebrow) {
2804
+ color: var(--pw-gray-700);
2805
+ margin: 0;
2806
+ }
2807
+
2808
+ .historyModalBody {
2809
+ display: grid;
2810
+ gap: 0.8rem;
2811
+ max-height: calc(min(88vh, 920px) - 185px);
2812
+ overflow: auto;
2813
+ padding: 1.25rem;
2814
+ }
2815
+
2816
+ .historyFilterBar {
2817
+ align-items: flex-end;
2818
+ background: var(--pw-blue-050);
2819
+ border: 1px solid var(--pw-gray-200);
2820
+ border-radius: 14px;
2821
+ display: flex;
2822
+ gap: 1rem;
2823
+ justify-content: space-between;
2824
+ padding: 0.75rem 0.85rem;
2825
+ }
2826
+
2827
+ .historyFilterBar label {
2828
+ color: var(--pw-blue-900);
2829
+ display: grid;
2830
+ font-size: 0.72rem;
2831
+ font-weight: 800;
2832
+ gap: 0.3rem;
2833
+ }
2834
+
2835
+ .historyFilterBar select {
2836
+ border-radius: 9px;
2837
+ min-height: 36px;
2838
+ padding: 0.4rem 2rem 0.4rem 0.6rem;
2839
+ width: 150px;
2840
+ }
2841
+
2842
+ .historyFilterBar > span {
2843
+ color: var(--pw-gray-700);
2844
+ font-size: 0.75rem;
2845
+ font-weight: 700;
2846
+ padding-bottom: 0.55rem;
2847
+ }
2848
+
2849
+ .modalMessage {
2850
+ background: var(--pw-blue-050);
2851
+ border-radius: 14px;
2852
+ color: var(--pw-gray-700);
2853
+ padding: 1rem;
2854
+ text-align: center;
2855
+ }
2856
+
2857
+ .modalMessage.error {
2858
+ background: #fff4f6;
2859
+ color: #b42143;
2860
+ }
2861
+
2862
+ .modalMessage.success {
2863
+ background: #e6f8f1;
2864
+ color: #11694f;
2865
+ }
2866
+
2867
+ .historyEntry {
2868
+ background: var(--pw-blue-050);
2869
+ border: 1px solid var(--pw-gray-200);
2870
+ border-radius: 16px;
2871
+ padding: 1rem;
2872
+ }
2873
+
2874
+ .historyEntry.selected {
2875
+ border-color: var(--pw-blue-700);
2876
+ box-shadow: 0 0 0 3px rgb(224 238 255 / 90%);
2877
+ }
2878
+
2879
+ .historyEntry.latest {
2880
+ background:
2881
+ linear-gradient(135deg, rgb(224 238 255 / 82%), rgb(230 248 241 / 74%));
2882
+ border-color: var(--pw-teal);
2883
+ box-shadow: 0 10px 28px rgb(0 42 85 / 12%);
2884
+ }
2885
+
2886
+ .historyEntry.latest.selected {
2887
+ border-color: var(--pw-blue-700);
2888
+ box-shadow:
2889
+ 0 0 0 3px rgb(224 238 255 / 90%),
2890
+ 0 10px 28px rgb(0 42 85 / 14%);
2891
+ }
2892
+
2893
+ .historyEntry.notReusable,
2894
+ .historyEntry.latest.notReusable {
2895
+ background: #edf1f5;
2896
+ border-color: #c9d2dc;
2897
+ box-shadow: none;
2898
+ filter: grayscale(0.75);
2899
+ opacity: 0.62;
2900
+ }
2901
+
2902
+ .historyEntry.notReusable .historyRadio {
2903
+ cursor: not-allowed;
2904
+ }
2905
+
2906
+ .historyEntry.notReusable .historyRadio input {
2907
+ cursor: not-allowed;
2908
+ }
2909
+
2910
+ .historyEntry.currentExecution,
2911
+ .historyEntry.latest.currentExecution {
2912
+ border: 2px solid #1e70b8;
2913
+ box-shadow:
2914
+ 0 0 0 4px rgb(30 112 184 / 12%),
2915
+ 0 12px 30px rgb(0 42 85 / 16%);
2916
+ }
2917
+
2918
+ .historyEntry.currentExecution.notReusable,
2919
+ .historyEntry.latest.currentExecution.notReusable {
2920
+ background:
2921
+ radial-gradient(circle at 100% 0%, rgb(32 186 187 / 14%), transparent 45%),
2922
+ linear-gradient(135deg, #e8f2fb, #edf7f5);
2923
+ border-color: #1e70b8;
2924
+ box-shadow:
2925
+ 0 0 0 4px rgb(30 112 184 / 12%),
2926
+ 0 12px 30px rgb(0 42 85 / 14%);
2927
+ filter: none;
2928
+ opacity: 1;
2929
+ }
2930
+
2931
+ .historyDateLine {
2932
+ align-items: center;
2933
+ display: flex;
2934
+ flex-wrap: wrap;
2935
+ gap: 0.5rem;
2936
+ }
2937
+
2938
+ .latestExecutionBadge {
2939
+ background: #075f76;
2940
+ border: 1px solid rgb(255 255 255 / 32%);
2941
+ border-radius: 999px;
2942
+ color: #fff;
2943
+ font-size: 0.72rem;
2944
+ font-weight: 800;
2945
+ letter-spacing: 0.01em;
2946
+ line-height: 1;
2947
+ padding: 0.38rem 0.58rem;
2948
+ white-space: nowrap;
2949
+ }
2950
+
2951
+ .currentExecutionBadge {
2952
+ background: #1e70b8;
2953
+ border: 1px solid #5ba0dc;
2954
+ border-radius: 999px;
2955
+ color: #fff;
2956
+ font-size: 0.72rem;
2957
+ font-weight: 850;
2958
+ letter-spacing: 0.01em;
2959
+ line-height: 1;
2960
+ padding: 0.38rem 0.58rem;
2961
+ box-shadow: 0 0 0 3px rgb(30 112 184 / 14%);
2962
+ white-space: nowrap;
2963
+ }
2964
+
2965
+ .historyEntryHeading {
2966
+ align-items: flex-start;
2967
+ display: flex;
2968
+ gap: 0.7rem;
2969
+ }
2970
+
2971
+ .historyRadio {
2972
+ align-items: center;
2973
+ display: inline-flex;
2974
+ padding-top: 0.15rem;
2975
+ }
2976
+
2977
+ .historyRadio input {
2978
+ appearance: auto;
2979
+ accent-color: var(--pw-blue-700);
2980
+ cursor: pointer;
2981
+ height: 18px;
2982
+ min-height: auto;
2983
+ padding: 0;
2984
+ width: 18px;
2985
+ }
2986
+
2987
+ .historyRadio input:focus,
2988
+ .historyRadio input:focus-visible {
2989
+ border-radius: 50%;
2990
+ box-shadow: none;
2991
+ outline: 2px solid #62a8f4;
2992
+ outline-offset: 2px;
2993
+ }
2994
+
2995
+ .historyEntry > header,
2996
+ .historyEntry > footer {
2997
+ align-items: flex-start;
2998
+ display: flex;
2999
+ gap: 1rem;
3000
+ justify-content: space-between;
3001
+ }
3002
+
3003
+ .historyEntry > header span:not(.statusPill),
3004
+ .historyEntry > footer > span {
3005
+ color: var(--pw-gray-700);
3006
+ display: block;
3007
+ font-size: 0.75rem;
3008
+ margin-top: 0.25rem;
3009
+ }
3010
+
3011
+ .historyEntry > header .currentExecutionBadge {
3012
+ color: #fff;
3013
+ display: inline-flex;
3014
+ margin: 0;
3015
+ }
3016
+
3017
+ .historyEntry.latest > header .latestExecutionBadge {
3018
+ display: inline-flex;
3019
+ margin: 0;
3020
+ }
3021
+
3022
+ .historyExecutionState {
3023
+ align-items: flex-end;
3024
+ display: flex;
3025
+ flex-direction: column;
3026
+ gap: 0.4rem;
3027
+ }
3028
+
3029
+ .historyExecutionState .historyEnvironment {
3030
+ background: var(--pw-white);
3031
+ border: 1px solid var(--pw-gray-200);
3032
+ border-radius: 999px;
3033
+ color: var(--pw-blue-900);
3034
+ font-size: 0.7rem;
3035
+ font-weight: 700;
3036
+ margin: 0;
3037
+ padding: 0.3rem 0.5rem;
3038
+ }
3039
+
3040
+ .historyEntryDetails {
3041
+ background: var(--pw-white);
3042
+ border: 1px solid var(--pw-gray-200);
3043
+ border-radius: 12px;
3044
+ margin: 0.9rem 0;
3045
+ padding: 0.7rem;
3046
+ }
3047
+
3048
+ .historyEntryDetails summary {
3049
+ color: var(--pw-blue-900);
3050
+ cursor: pointer;
3051
+ font-size: 0.78rem;
3052
+ font-weight: 700;
3053
+ }
3054
+
3055
+ .historyEntryDetails dl {
3056
+ display: grid;
3057
+ gap: 0.75rem;
3058
+ margin: 0.8rem 0 0;
3059
+ }
3060
+
3061
+ .historyEntryDetails dt {
3062
+ color: var(--pw-blue-900);
3063
+ font-size: 0.72rem;
3064
+ font-weight: 700;
3065
+ }
3066
+
3067
+ .historyEntryDetails dd {
3068
+ color: var(--pw-gray-700);
3069
+ font-size: 0.78rem;
3070
+ margin: 0.2rem 0 0;
3071
+ overflow-wrap: anywhere;
3072
+ white-space: pre-wrap;
3073
+ }
3074
+
3075
+ .reuseStateButton {
3076
+ background: var(--pw-blue-700);
3077
+ border: 0;
3078
+ border-radius: 11px;
3079
+ color: var(--pw-white);
3080
+ font-weight: 700;
3081
+ padding: 0.6rem 0.8rem;
3082
+ }
3083
+
3084
+ .reuseStateButton:disabled {
3085
+ cursor: not-allowed;
3086
+ opacity: 0.6;
3087
+ }
3088
+
3089
+ .historyModalFooter {
3090
+ align-items: center;
3091
+ background: var(--pw-white);
3092
+ border-top: 1px solid var(--pw-gray-200);
3093
+ display: flex;
3094
+ gap: 1rem;
3095
+ justify-content: space-between;
3096
+ padding: 1rem 1.25rem;
3097
+ }
3098
+
3099
+ .historyModalFooter > span {
3100
+ color: var(--pw-gray-700);
3101
+ font-size: 0.78rem;
3102
+ }
3103
+
3104
+ .historyEntryFeedback {
3105
+ color: var(--pw-success);
3106
+ font-size: 0.75rem;
3107
+ font-weight: 700;
3108
+ margin-top: 0.55rem;
3109
+ min-height: 1em;
3110
+ }
3111
+
3112
+ .historyEntryFeedback.error {
3113
+ color: var(--pw-danger);
3114
+ }
3115
+
3116
+ html[data-theme="dark"] .historyModalShell {
3117
+ background: #0d2031;
3118
+ border-color: #2b455c;
3119
+ box-shadow: 0 28px 80px rgb(0 0 0 / 52%);
3120
+ color: #e8f2ff;
3121
+ }
3122
+
3123
+ html[data-theme="dark"] .historyModalHeader {
3124
+ border-bottom-color: #2b455c;
3125
+ }
3126
+
3127
+ html[data-theme="dark"] .historyModalHeader h2,
3128
+ html[data-theme="dark"] .historyDateLine strong {
3129
+ color: #f4f8fc;
3130
+ }
3131
+
3132
+ html[data-theme="dark"] .historyModalHeader p:not(.eyebrow),
3133
+ html[data-theme="dark"] .historyEntry > header span:not(.statusPill),
3134
+ html[data-theme="dark"] .historyEntry > footer > span,
3135
+ html[data-theme="dark"] .historyModalFooter > span {
3136
+ color: #aebed0;
3137
+ }
3138
+
3139
+ html[data-theme="dark"] .historyModalBody {
3140
+ scrollbar-color: #53677b #0d2031;
3141
+ }
3142
+
3143
+ html[data-theme="dark"] .historyEntry {
3144
+ background: #0a1a29;
3145
+ border-color: #29445c;
3146
+ }
3147
+
3148
+ html[data-theme="dark"] .historyEntry.selected {
3149
+ border-color: #62a8f4;
3150
+ box-shadow: 0 0 0 3px rgb(98 168 244 / 18%);
3151
+ }
3152
+
3153
+ html[data-theme="dark"] .historyEntry.latest {
3154
+ background:
3155
+ radial-gradient(circle at 100% 0%, rgb(32 186 187 / 16%), transparent 45%),
3156
+ linear-gradient(135deg, #102b41, #12384a);
3157
+ border-color: #20babb;
3158
+ box-shadow: 0 12px 30px rgb(0 0 0 / 28%);
3159
+ }
3160
+
3161
+ html[data-theme="dark"] .historyEntry.latest.selected {
3162
+ border-color: #62a8f4;
3163
+ box-shadow:
3164
+ 0 0 0 3px rgb(98 168 244 / 18%),
3165
+ 0 12px 30px rgb(0 0 0 / 30%);
3166
+ }
3167
+
3168
+ html[data-theme="dark"] .historyEntry.notReusable,
3169
+ html[data-theme="dark"] .historyEntry.latest.notReusable {
3170
+ background: #15222d;
3171
+ border-color: #394a59;
3172
+ box-shadow: none;
3173
+ filter: grayscale(0.85);
3174
+ opacity: 0.55;
3175
+ }
3176
+
3177
+ html[data-theme="dark"] .historyEntry.currentExecution,
3178
+ html[data-theme="dark"] .historyEntry.latest.currentExecution,
3179
+ html[data-theme="dark"] .historyEntry.currentExecution.notReusable,
3180
+ html[data-theme="dark"] .historyEntry.latest.currentExecution.notReusable {
3181
+ background:
3182
+ radial-gradient(circle at 100% 0%, rgb(32 186 187 / 18%), transparent 45%),
3183
+ linear-gradient(135deg, #143148, #153c4b);
3184
+ border-color: #62a8f4;
3185
+ box-shadow:
3186
+ 0 0 0 4px rgb(98 168 244 / 18%),
3187
+ 0 14px 32px rgb(0 0 0 / 34%);
3188
+ filter: none;
3189
+ opacity: 1;
3190
+ }
3191
+
3192
+ html[data-theme="dark"] .historyEntry.latest > header .latestExecutionBadge {
3193
+ background: #8ee8e2;
3194
+ border-color: #baf5f1;
3195
+ color: #06253a;
3196
+ }
3197
+
3198
+ html[data-theme="dark"] .historyEntry > header .currentExecutionBadge {
3199
+ background: #8ee8e2;
3200
+ border-color: #baf5f1;
3201
+ box-shadow: 0 0 0 3px rgb(142 232 226 / 16%);
3202
+ color: #06253a;
3203
+ display: inline-flex;
3204
+ margin: 0;
3205
+ }
3206
+
3207
+ html[data-theme="dark"] .historyFilterBar {
3208
+ background: #102638;
3209
+ border-color: #315069;
3210
+ }
3211
+
3212
+ html[data-theme="dark"] .historyFilterBar label {
3213
+ color: #e8f2ff;
3214
+ }
3215
+
3216
+ html[data-theme="dark"] .historyFilterBar > span {
3217
+ color: #aebed0;
3218
+ }
3219
+
3220
+ html[data-theme="dark"] .historyExecutionState .historyEnvironment {
3221
+ background: #142b3e;
3222
+ border-color: #3c566d;
3223
+ color: #dbeaff;
3224
+ }
3225
+
3226
+ html[data-theme="dark"] .historyEntryDetails {
3227
+ background: #102638;
3228
+ border-color: #315069;
3229
+ }
3230
+
3231
+ html[data-theme="dark"] .historyEntryDetails summary,
3232
+ html[data-theme="dark"] .historyEntryDetails dt {
3233
+ color: #e8f2ff;
3234
+ }
3235
+
3236
+ html[data-theme="dark"] .historyEntryDetails dd {
3237
+ color: #b8c7d6;
3238
+ }
3239
+
3240
+ html[data-theme="dark"] .historyModalFooter {
3241
+ background: #102638;
3242
+ border-top-color: #2b455c;
3243
+ }
3244
+
3245
+ html[data-theme="dark"] .reuseStateButton {
3246
+ background: #4e91dc;
3247
+ color: #fff;
3248
+ }
3249
+
3250
+ html[data-theme="dark"] .modalCloseButton {
3251
+ background: #173a58;
3252
+ color: #9bc9f8;
3253
+ }
3254
+
3255
+ .reuseConfirmationModal {
3256
+ max-width: 620px;
3257
+ width: calc(100% - 2rem);
3258
+ }
3259
+
3260
+ .confirmationShell {
3261
+ background: var(--pw-white);
3262
+ border: 1px solid var(--pw-gray-200);
3263
+ border-radius: 22px;
3264
+ box-shadow: 0 24px 70px rgb(0 42 85 / 32%);
3265
+ overflow: hidden;
3266
+ }
3267
+
3268
+ .confirmationShell > header,
3269
+ .confirmationShell > footer {
3270
+ align-items: flex-start;
3271
+ display: flex;
3272
+ gap: 1rem;
3273
+ justify-content: space-between;
3274
+ padding: 1.1rem 1.25rem;
3275
+ }
3276
+
3277
+ .confirmationShell > header {
3278
+ border-bottom: 1px solid var(--pw-gray-200);
3279
+ }
3280
+
3281
+ .confirmationShell > header h2 {
3282
+ color: var(--pw-blue-900);
3283
+ margin: 0.15rem 0 0;
3284
+ }
3285
+
3286
+ .confirmationShell > footer {
3287
+ border-top: 1px solid var(--pw-gray-200);
3288
+ justify-content: flex-end;
3289
+ }
3290
+
3291
+ .confirmationBody {
3292
+ padding: 1.25rem;
3293
+ }
3294
+
3295
+ .confirmationBody > p {
3296
+ color: var(--pw-gray-700);
3297
+ margin: 0 0 1rem;
3298
+ }
3299
+
3300
+ .statusComparison {
3301
+ align-items: center;
3302
+ display: grid;
3303
+ gap: 0.7rem;
3304
+ grid-template-columns: 1fr auto 1fr;
3305
+ }
3306
+
3307
+ .statusComparison article {
3308
+ background: var(--pw-blue-050);
3309
+ border: 1px solid var(--pw-gray-200);
3310
+ border-radius: 14px;
3311
+ display: grid;
3312
+ gap: 0.55rem;
3313
+ justify-items: start;
3314
+ padding: 0.85rem;
3315
+ }
3316
+
3317
+ .statusComparison article > span,
3318
+ .statusComparison article > small {
3319
+ color: var(--pw-gray-700);
3320
+ font-size: 0.72rem;
3321
+ }
3322
+
3323
+ .comparisonArrow {
3324
+ color: var(--pw-blue-700);
3325
+ font-size: 1.4rem;
3326
+ font-weight: 700;
3327
+ }
3328
+
3329
+ .confirmationMetadata {
3330
+ background: var(--pw-blue-050);
3331
+ border-radius: 14px;
3332
+ display: grid;
3333
+ gap: 0.75rem;
3334
+ margin-top: 1rem;
3335
+ padding: 0.85rem;
3336
+ }
3337
+
3338
+ .confirmationMetadata div {
3339
+ display: grid;
3340
+ gap: 0.2rem;
3341
+ }
3342
+
3343
+ .confirmationMetadata strong {
3344
+ color: var(--pw-blue-900);
3345
+ font-size: 0.75rem;
3346
+ }
3347
+
3348
+ .confirmationMetadata span {
3349
+ color: var(--pw-gray-700);
3350
+ font-size: 0.78rem;
3351
+ overflow-wrap: anywhere;
3352
+ white-space: pre-wrap;
3353
+ }
3354
+
3355
+ .cancelReuseButton,
3356
+ .confirmReuseButton {
3357
+ border-radius: 11px;
3358
+ font-weight: 700;
3359
+ padding: 0.65rem 0.85rem;
3360
+ }
3361
+
3362
+ .cancelReuseButton {
3363
+ background: var(--pw-white);
3364
+ border: 1px solid var(--pw-gray-300);
3365
+ color: var(--pw-gray-700);
3366
+ }
3367
+
3368
+ .confirmReuseButton {
3369
+ background: var(--pw-blue-700);
3370
+ border: 1px solid var(--pw-blue-700);
3371
+ color: var(--pw-white);
3372
+ }
3373
+
3374
+ .confirmReuseButton:disabled {
3375
+ cursor: wait;
3376
+ opacity: 0.65;
3377
+ }
3378
+
3379
+ html[data-theme="dark"] .confirmationShell {
3380
+ background: #0d2031;
3381
+ border-color: #2b455c;
3382
+ box-shadow: 0 28px 80px rgb(0 0 0 / 52%);
3383
+ }
3384
+
3385
+ html[data-theme="dark"] .confirmationShell > header,
3386
+ html[data-theme="dark"] .confirmationShell > footer {
3387
+ border-color: #2b455c;
3388
+ }
3389
+
3390
+ html[data-theme="dark"] .confirmationShell > header h2 {
3391
+ color: #f4f8fc;
3392
+ }
3393
+
3394
+ html[data-theme="dark"] .confirmationBody > p {
3395
+ color: #b8c7d6;
3396
+ }
3397
+
3398
+ html[data-theme="dark"] .cancelReuseButton {
3399
+ background: #142b3e;
3400
+ border-color: #3c566d;
3401
+ color: #dbeaff;
3402
+ }
3403
+
3404
+ html[data-theme="dark"] .confirmReuseButton {
3405
+ background: #4e91dc;
3406
+ border-color: #4e91dc;
3407
+ color: #fff;
3408
+ }
3409
+
3410
+ .confirmationFeedback {
3411
+ color: var(--pw-gray-700);
3412
+ font-size: 0.78rem;
3413
+ font-weight: 700;
3414
+ margin-top: 0.8rem;
3415
+ min-height: 1em;
3416
+ }
3417
+
3418
+ .confirmationFeedback.error {
3419
+ color: var(--pw-danger);
3420
+ }
3421
+
3422
+ .timelineList,
3423
+ .attemptList,
3424
+ .httpExchangeList,
3425
+ .attachmentList {
3426
+ display: grid;
3427
+ gap: 0.55rem;
3428
+ list-style: none;
3429
+ margin: 0;
3430
+ padding: 0;
3431
+ }
3432
+
3433
+ .timelineStep,
3434
+ .attempt,
3435
+ .httpExchange,
3436
+ .timelineLog,
3437
+ .attachment {
3438
+ background: var(--pw-blue-050);
3439
+ border: 1px solid var(--pw-gray-200);
3440
+ border-radius: 14px;
3441
+ padding: 0.75rem;
3442
+ }
3443
+
3444
+ .httpExchange > p {
3445
+ color: var(--pw-gray-700);
3446
+ font-size: 0.78rem;
3447
+ font-weight: 800;
3448
+ margin: 0 0 0.55rem;
3449
+ text-transform: uppercase;
3450
+ }
3451
+
3452
+ .httpDisclosure + .httpDisclosure {
3453
+ margin-top: 0.5rem;
3454
+ }
3455
+
3456
+ .httpDisclosure summary {
3457
+ color: var(--pw-blue-900);
3458
+ cursor: pointer;
3459
+ font-weight: 750;
3460
+ overflow-wrap: anywhere;
3461
+ }
3462
+
3463
+ .httpDisclosure pre {
3464
+ margin: 0.65rem 0 0;
3465
+ max-height: 24rem;
3466
+ overflow: auto;
3467
+ white-space: pre-wrap;
3468
+ }
3469
+
3470
+ .httpEmpty {
3471
+ color: var(--pw-gray-700);
3472
+ margin: 0;
3473
+ }
3474
+
3475
+ .timelineHeader {
3476
+ align-items: center;
3477
+ display: flex;
3478
+ gap: 1rem;
3479
+ justify-content: space-between;
3480
+ margin-bottom: 0.75rem;
3481
+ }
3482
+
3483
+ .timelineHeader h3 {
3484
+ margin-bottom: 0.2rem;
3485
+ }
3486
+
3487
+ .timelineHeader p {
3488
+ color: var(--pw-gray-700);
3489
+ font-size: 0.8rem;
3490
+ margin: 0;
3491
+ }
3492
+
3493
+ .debugButton {
3494
+ background: var(--pw-white);
3495
+ border: 1px solid var(--pw-blue-700);
3496
+ border-radius: 999px;
3497
+ box-shadow: none;
3498
+ color: var(--pw-blue-700);
3499
+ flex: 0 0 auto;
3500
+ font-weight: 700;
3501
+ padding: 0.55rem 0.9rem;
3502
+ }
3503
+
3504
+ .debugButton:hover,
3505
+ .debugButton.active {
3506
+ background: var(--pw-blue-700);
3507
+ color: var(--pw-white);
3508
+ }
3509
+
3510
+ .timelineList {
3511
+ counter-reset: cucumber-step;
3512
+ position: relative;
3513
+ }
3514
+
3515
+ .timelineList::before {
3516
+ background: var(--pw-gray-200);
3517
+ bottom: 1.2rem;
3518
+ content: "";
3519
+ left: 1.03rem;
3520
+ position: absolute;
3521
+ top: 1.2rem;
3522
+ width: 2px;
3523
+ }
3524
+
3525
+ .timelineStep {
3526
+ align-items: flex-start;
3527
+ display: grid;
3528
+ gap: 0.6rem;
3529
+ grid-template-columns: 20px auto minmax(0, 1fr) auto auto;
3530
+ position: relative;
3531
+ }
3532
+
3533
+ .timelineMarker {
3534
+ align-items: center;
3535
+ background: var(--pw-white);
3536
+ border: 2px solid var(--pw-gray-300);
3537
+ border-radius: 999px;
3538
+ display: inline-flex;
3539
+ font-size: 0.78rem;
3540
+ height: 18px;
3541
+ justify-content: center;
3542
+ margin-top: 0.08rem;
3543
+ position: relative;
3544
+ width: 18px;
3545
+ z-index: 1;
3546
+ }
3547
+
3548
+ .timelineMarker.passed { border-color: var(--pw-success); }
3549
+ .timelineMarker.failed { border-color: var(--pw-danger); }
3550
+ .timelineMarker.skipped { border-color: var(--pw-gray-300); }
3551
+
3552
+ .timelineBody {
3553
+ display: grid;
3554
+ gap: 0.25rem;
3555
+ min-width: 0;
3556
+ }
3557
+
3558
+ .stepKeyword {
3559
+ color: var(--pw-blue-700);
3560
+ font-weight: 700;
3561
+ }
3562
+
3563
+ .stepText {
3564
+ overflow-wrap: anywhere;
3565
+ }
3566
+
3567
+ .stepStatus {
3568
+ font-size: 0.75rem;
3569
+ font-weight: 700;
3570
+ }
3571
+
3572
+ .stepStatus.passed { color: var(--pw-success); }
3573
+ .stepStatus.failed { color: var(--pw-danger); }
3574
+ .stepStatus.skipped { color: var(--pw-gray-700); }
3575
+
3576
+ .timelineStep time,
3577
+ .timelineLog time {
3578
+ color: var(--pw-gray-700);
3579
+ font: 0.7rem "Roboto", sans-serif;
3580
+ white-space: nowrap;
3581
+ }
3582
+
3583
+ .timelineLog {
3584
+ align-items: flex-start;
3585
+ background: #f8fbff;
3586
+ border-style: dashed;
3587
+ display: grid;
3588
+ gap: 0.6rem;
3589
+ grid-template-columns: 20px minmax(0, 1fr) auto;
3590
+ margin-left: 1.3rem;
3591
+ padding: 0.65rem 0.75rem;
3592
+ position: relative;
3593
+ }
3594
+
3595
+ .timelineLog .timelineMarker {
3596
+ background: var(--pw-blue-100);
3597
+ border: 0;
3598
+ color: var(--pw-blue-700);
3599
+ }
3600
+
3601
+ .timelineLog strong {
3602
+ color: var(--pw-blue-900);
3603
+ font-size: 0.78rem;
3604
+ }
3605
+
3606
+ .timelineLog .timelineBody > span {
3607
+ color: var(--pw-gray-700);
3608
+ font: 0.78rem/1.45 "Roboto", sans-serif;
3609
+ overflow-wrap: anywhere;
3610
+ }
3611
+
3612
+ .timelineLog .logHighlight {
3613
+ background: var(--pw-blue-100);
3614
+ border: 1px solid rgb(2 63 128 / 14%);
3615
+ border-radius: 5px;
3616
+ box-decoration-break: clone;
3617
+ color: var(--pw-blue-900);
3618
+ font-size: inherit;
3619
+ font-weight: 700;
3620
+ padding: 0.08rem 0.22rem;
3621
+ -webkit-box-decoration-break: clone;
3622
+ }
3623
+
3624
+ html[data-theme="dark"] .timelineLog {
3625
+ background: #102638;
3626
+ border-color: #315069;
3627
+ box-shadow: 0 6px 18px rgb(0 0 0 / 14%);
3628
+ }
3629
+
3630
+ html[data-theme="dark"] .timelineLog .timelineMarker {
3631
+ background: #173a58;
3632
+ color: #9bc9f8;
3633
+ }
3634
+
3635
+ html[data-theme="dark"] .timelineLog strong {
3636
+ color: #e8f2ff;
3637
+ }
3638
+
3639
+ html[data-theme="dark"] .timelineLog .timelineBody > span,
3640
+ html[data-theme="dark"] .timelineLog time {
3641
+ color: #aebed0;
3642
+ }
3643
+
3644
+ html[data-theme="dark"] .timelineLog .logHighlight {
3645
+ background: #1d4667;
3646
+ border-color: #3f6f93;
3647
+ color: #f4f8fc;
3648
+ }
3649
+
3650
+ html[data-theme="dark"] .debugButton:hover,
3651
+ html[data-theme="dark"] .debugButton.active {
3652
+ background: #4e91dc;
3653
+ color: #fff;
3654
+ }
3655
+
3656
+ details summary {
3657
+ color: var(--pw-blue-900);
3658
+ cursor: pointer;
3659
+ font-weight: 700;
3660
+ }
3661
+
3662
+ pre {
3663
+ background: var(--pw-blue-900);
3664
+ border-radius: 14px;
3665
+ color: var(--pw-white);
3666
+ font: 0.82rem/1.55 "Roboto", ui-monospace, Consolas, monospace;
3667
+ max-height: 320px;
3668
+ overflow: auto;
3669
+ padding: 0.9rem;
3670
+ white-space: pre-wrap;
3671
+ }
3672
+
3673
+ .mediaGrid {
3674
+ display: grid;
3675
+ gap: 0.75rem;
3676
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
3677
+ }
3678
+
3679
+ .mediaGrid img,
3680
+ .mediaGrid video {
3681
+ background: var(--pw-blue-900);
3682
+ border-radius: 14px;
3683
+ display: block;
3684
+ max-height: 260px;
3685
+ object-fit: contain;
3686
+ width: 100%;
3687
+ }
3688
+
3689
+ .attachment a {
3690
+ color: var(--pw-blue-700);
3691
+ font-weight: 700;
3692
+ }
3693
+
3694
+ .emptyState {
3695
+ align-items: center;
3696
+ color: var(--pw-gray-700);
3697
+ display: grid;
3698
+ justify-items: center;
3699
+ min-height: 220px;
3700
+ padding: 2rem;
3701
+ text-align: center;
3702
+ }
3703
+
3704
+ .emptyState strong {
3705
+ color: var(--pw-blue-900);
3706
+ font-size: 1.1rem;
3707
+ }
3708
+
3709
+ .footer {
3710
+ color: var(--pw-gray-700);
3711
+ font-size: 0.78rem;
3712
+ margin-top: 1.5rem;
3713
+ text-align: center;
3714
+ }
3715
+
3716
+ @media (max-width: 1100px) {
3717
+ .summaryGrid {
3718
+ grid-template-columns: repeat(3, 1fr);
3719
+ }
3720
+
3721
+ .filters {
3722
+ grid-template-columns: repeat(2, 1fr);
3723
+ }
3724
+
3725
+ .resultsLayout {
3726
+ grid-template-columns: 1fr;
3727
+ }
3728
+
3729
+ .panelHeader {
3730
+ align-items: stretch;
3731
+ flex-direction: column;
3732
+ }
3733
+
3734
+ .trendHeaderControls {
3735
+ justify-content: flex-start;
3736
+ }
3737
+
3738
+ .testDetail {
3739
+ max-height: none;
3740
+ overflow: visible;
3741
+ position: static;
3742
+ }
3743
+ }
3744
+
3745
+ @media (max-width: 700px) {
3746
+ .appShell {
3747
+ padding: 1rem;
3748
+ }
3749
+
3750
+ .hero {
3751
+ border-radius: 22px;
3752
+ grid-template-columns: 1fr;
3753
+ }
3754
+
3755
+ .heroActionStack,
3756
+ .heroRunState {
3757
+ align-items: stretch;
3758
+ }
3759
+
3760
+ .featureLegend {
3761
+ justify-content: flex-start;
3762
+ }
3763
+
3764
+ .featureRow {
3765
+ gap: 0.5rem;
3766
+ grid-template-columns: 1fr;
3767
+ }
3768
+
3769
+ .exportPdfButton {
3770
+ width: 100%;
3771
+ }
3772
+
3773
+ .heroMascot {
3774
+ display: none;
3775
+ }
3776
+
3777
+ .summaryGrid,
3778
+ .filters {
3779
+ grid-template-columns: 1fr 1fr;
3780
+ }
3781
+
3782
+ .resultsLayout {
3783
+ display: block;
3784
+ }
3785
+
3786
+ .statusComparison {
3787
+ grid-template-columns: 1fr;
3788
+ }
3789
+
3790
+ .comparisonArrow {
3791
+ justify-self: center;
3792
+ transform: rotate(90deg);
3793
+ }
3794
+
3795
+ .historyModalFooter {
3796
+ align-items: stretch;
3797
+ flex-direction: column;
3798
+ }
3799
+
3800
+ .testList {
3801
+ max-height: none;
3802
+ }
3803
+
3804
+ .testDetail {
3805
+ margin-top: 1rem;
3806
+ }
3807
+
3808
+ .timelineStep {
3809
+ grid-template-columns: 20px auto minmax(0, 1fr);
3810
+ }
3811
+
3812
+ .timelineStep .stepStatus,
3813
+ .timelineStep time {
3814
+ grid-column: 3;
3815
+ }
3816
+
3817
+ .timelineLog {
3818
+ grid-template-columns: 20px minmax(0, 1fr);
3819
+ margin-left: 0.65rem;
3820
+ }
3821
+
3822
+ .timelineLog time {
3823
+ grid-column: 2;
3824
+ }
3825
+ }
3826
+
3827
+ @media (max-width: 460px) {
3828
+ .summaryGrid,
3829
+ .filters {
3830
+ grid-template-columns: 1fr;
3831
+ }
3832
+
3833
+ .topbar {
3834
+ align-items: flex-start;
3835
+ }
3836
+
3837
+ .brandMascot {
3838
+ display: none;
3839
+ }
3840
+ }
3841
+
3842
+ /* Elmulo V2 application navigation */
3843
+
3844
+ .appFrame {
3845
+ display: grid;
3846
+ grid-template-columns: auto minmax(0, 1fr);
3847
+ min-height: 100vh;
3848
+ }
3849
+
3850
+ .workspaceShell {
3851
+ min-width: 0;
3852
+ }
3853
+
3854
+ .sidebar {
3855
+ background:
3856
+ radial-gradient(circle at 15% 0%, rgb(32 186 187 / 16%), transparent 18rem),
3857
+ linear-gradient(180deg, #061b31, #092745);
3858
+ color: #dbeaff;
3859
+ display: flex;
3860
+ flex-direction: column;
3861
+ height: 100vh;
3862
+ padding: 1rem 0.8rem;
3863
+ position: sticky;
3864
+ top: 0;
3865
+ transition: width 180ms ease;
3866
+ width: 250px;
3867
+ z-index: 50;
3868
+ }
3869
+
3870
+ .sidebar.collapsed {
3871
+ width: 76px;
3872
+ }
3873
+
3874
+ .sidebarBrand {
3875
+ align-items: center;
3876
+ display: grid;
3877
+ gap: 0.65rem;
3878
+ grid-template-columns: auto minmax(0, 1fr) auto;
3879
+ min-height: 52px;
3880
+ padding: 0 0.2rem 1rem;
3881
+ }
3882
+
3883
+ .sidebar .brandMark {
3884
+ background: #fff;
3885
+ color: #002a55;
3886
+ flex: 0 0 auto;
3887
+ }
3888
+
3889
+ .sidebarBrandText,
3890
+ .sidebarContext .sidebarLabel {
3891
+ min-width: 0;
3892
+ }
3893
+
3894
+ .sidebarBrandText strong,
3895
+ .sidebarBrandText small,
3896
+ .sidebarContext strong,
3897
+ .sidebarContext small {
3898
+ display: block;
3899
+ }
3900
+
3901
+ .sidebarBrandText strong {
3902
+ color: #fff;
3903
+ font-size: 0.92rem;
3904
+ white-space: nowrap;
3905
+ }
3906
+
3907
+ .sidebarBrandText small {
3908
+ color: #64d6d7;
3909
+ font-size: 0.7rem;
3910
+ font-weight: 800;
3911
+ letter-spacing: 0.08em;
3912
+ margin-top: 0.15rem;
3913
+ text-transform: uppercase;
3914
+ }
3915
+
3916
+ .sidebarToggle,
3917
+ .mobileMenuToggle {
3918
+ align-items: center;
3919
+ background: rgb(255 255 255 / 8%);
3920
+ border: 1px solid rgb(255 255 255 / 13%);
3921
+ color: #fff;
3922
+ display: inline-flex;
3923
+ justify-content: center;
3924
+ }
3925
+
3926
+ .sidebarToggle {
3927
+ border-radius: 9px;
3928
+ font-size: 1.15rem;
3929
+ height: 30px;
3930
+ width: 30px;
3931
+ }
3932
+
3933
+ .sidebarNav {
3934
+ display: grid;
3935
+ gap: 0.35rem;
3936
+ margin-top: 0.5rem;
3937
+ }
3938
+
3939
+ .sidebarLink {
3940
+ align-items: center;
3941
+ background: transparent;
3942
+ border: 1px solid transparent;
3943
+ border-radius: 12px;
3944
+ color: #aebed0;
3945
+ display: grid;
3946
+ gap: 0.7rem;
3947
+ grid-template-columns: 34px minmax(0, 1fr) auto;
3948
+ min-height: 48px;
3949
+ padding: 0.42rem 0.55rem;
3950
+ text-align: left;
3951
+ transition: background 140ms ease, border-color 140ms ease, color 140ms ease;
3952
+ width: 100%;
3953
+ }
3954
+
3955
+ .sidebarLink:hover {
3956
+ background: rgb(255 255 255 / 7%);
3957
+ color: #fff;
3958
+ }
3959
+
3960
+ .sidebarLink.active {
3961
+ background: linear-gradient(90deg, rgb(30 145 220 / 24%), rgb(32 186 187 / 12%));
3962
+ border-color: rgb(98 168 244 / 25%);
3963
+ color: #fff;
3964
+ }
3965
+
3966
+ .sidebarLink.active::before {
3967
+ background: #20babb;
3968
+ border-radius: 0 4px 4px 0;
3969
+ content: "";
3970
+ height: 26px;
3971
+ left: -0.8rem;
3972
+ position: absolute;
3973
+ width: 4px;
3974
+ }
3975
+
3976
+ .sidebarLink {
3977
+ position: relative;
3978
+ }
3979
+
3980
+ .sidebarIcon {
3981
+ align-items: center;
3982
+ background: rgb(255 255 255 / 7%);
3983
+ border-radius: 9px;
3984
+ display: inline-flex;
3985
+ font-size: 1rem;
3986
+ font-weight: 800;
3987
+ height: 34px;
3988
+ justify-content: center;
3989
+ width: 34px;
3990
+ }
3991
+
3992
+ .sidebarLink.active .sidebarIcon {
3993
+ background: #dff8f8;
3994
+ color: #075f76;
3995
+ }
3996
+
3997
+ .sidebarLabel {
3998
+ font-size: 0.85rem;
3999
+ font-weight: 700;
4000
+ white-space: nowrap;
4001
+ }
4002
+
4003
+ .sidebarBadge {
4004
+ align-items: center;
4005
+ background: #ef4161;
4006
+ border-radius: 999px;
4007
+ color: #fff;
4008
+ display: inline-flex;
4009
+ font-size: 0.68rem;
4010
+ font-weight: 800;
4011
+ justify-content: center;
4012
+ min-width: 22px;
4013
+ padding: 0.2rem 0.38rem;
4014
+ }
4015
+
4016
+ .sidebarContext {
4017
+ align-items: center;
4018
+ border-top: 1px solid rgb(255 255 255 / 10%);
4019
+ display: grid;
4020
+ gap: 0.65rem;
4021
+ grid-template-columns: auto minmax(0, 1fr);
4022
+ margin-top: auto;
4023
+ padding: 1rem 0.55rem 0.2rem;
4024
+ }
4025
+
4026
+ .sidebarContext small {
4027
+ color: #91a7bd;
4028
+ font-size: 0.65rem;
4029
+ margin-top: 0.2rem;
4030
+ white-space: nowrap;
4031
+ }
4032
+
4033
+ .environmentDot {
4034
+ background: #20babb;
4035
+ border: 3px solid rgb(32 186 187 / 22%);
4036
+ border-radius: 50%;
4037
+ box-shadow: 0 0 0 4px rgb(32 186 187 / 10%);
4038
+ height: 10px;
4039
+ width: 10px;
4040
+ }
4041
+
4042
+ .sidebar.collapsed .sidebarBrand {
4043
+ grid-template-columns: 1fr;
4044
+ justify-items: center;
4045
+ }
4046
+
4047
+ .sidebar.collapsed .sidebarBrandText,
4048
+ .sidebar.collapsed .sidebarLabel,
4049
+ .sidebar.collapsed .sidebarBadge,
4050
+ .sidebar.collapsed .sidebarContext {
4051
+ display: none;
4052
+ }
4053
+
4054
+ .sidebar.collapsed .sidebarToggle {
4055
+ margin-top: 0.2rem;
4056
+ }
4057
+
4058
+ .sidebar.collapsed .sidebarLink {
4059
+ grid-template-columns: 1fr;
4060
+ justify-items: center;
4061
+ padding-inline: 0;
4062
+ }
4063
+
4064
+ .topbar {
4065
+ backdrop-filter: blur(16px);
4066
+ background: color-mix(in srgb, var(--pw-blue-050) 88%, transparent);
4067
+ border-bottom: 1px solid color-mix(in srgb, var(--pw-gray-200) 72%, transparent);
4068
+ gap: 0.75rem;
4069
+ margin: 0;
4070
+ min-height: 72px;
4071
+ padding: 0.8rem 2rem;
4072
+ position: sticky;
4073
+ top: 0;
4074
+ z-index: 40;
4075
+ }
4076
+
4077
+ .pageContext {
4078
+ display: grid;
4079
+ margin-right: auto;
4080
+ }
4081
+
4082
+ .pageContext span {
4083
+ color: var(--pw-blue-900);
4084
+ font-size: 1rem;
4085
+ font-weight: 800;
4086
+ }
4087
+
4088
+ .pageContext small {
4089
+ color: var(--pw-gray-700);
4090
+ font-size: 0.72rem;
4091
+ margin-top: 0.15rem;
4092
+ }
4093
+
4094
+ .mobileMenuToggle {
4095
+ border-radius: 10px;
4096
+ color: var(--pw-blue-900);
4097
+ display: none;
4098
+ height: 38px;
4099
+ width: 38px;
4100
+ }
4101
+
4102
+ .appShell {
4103
+ margin: 0 auto;
4104
+ max-width: 1600px;
4105
+ padding: 1.5rem 2rem 4rem;
4106
+ }
4107
+
4108
+ .workspaceView[hidden] {
4109
+ display: none !important;
4110
+ }
4111
+
4112
+ .workspaceView {
4113
+ animation: workspaceEnter 180ms ease-out;
4114
+ }
4115
+
4116
+ .workspaceView + .workspaceView:not([hidden]) {
4117
+ margin-top: 1rem;
4118
+ }
4119
+
4120
+ @keyframes workspaceEnter {
4121
+ from {
4122
+ opacity: 0;
4123
+ transform: translateY(5px);
4124
+ }
4125
+ }
4126
+
4127
+ .workspaceHeader {
4128
+ align-items: flex-end;
4129
+ display: flex;
4130
+ gap: 1.5rem;
4131
+ justify-content: space-between;
4132
+ margin: 0.3rem 0 1.2rem;
4133
+ }
4134
+
4135
+ .workspaceHeader h1,
4136
+ .workspaceHeader p {
4137
+ margin: 0;
4138
+ }
4139
+
4140
+ .workspaceHeader h1 {
4141
+ color: var(--pw-blue-900);
4142
+ font-size: clamp(1.8rem, 3vw, 2.6rem);
4143
+ letter-spacing: -0.04em;
4144
+ }
4145
+
4146
+ .workspaceHeader > div > p:last-child {
4147
+ color: var(--pw-gray-700);
4148
+ margin-top: 0.4rem;
4149
+ }
4150
+
4151
+ .workspaceHeader > button,
4152
+ .preferenceAction {
4153
+ background: var(--pw-blue-700);
4154
+ border: 0;
4155
+ border-radius: 11px;
4156
+ color: #fff;
4157
+ font-weight: 800;
4158
+ padding: 0.7rem 1rem;
4159
+ }
4160
+
4161
+ .overviewLaunchpad,
4162
+ .analysisGuidance,
4163
+ .preferencesGrid {
4164
+ margin-top: 1.25rem;
4165
+ }
4166
+
4167
+ .overviewLaunchpad {
4168
+ background: var(--pw-white);
4169
+ border: 1px solid var(--pw-gray-200);
4170
+ border-radius: 20px;
4171
+ box-shadow: var(--shadow-soft);
4172
+ padding: 1.2rem;
4173
+ }
4174
+
4175
+ .overviewLaunchpad > header,
4176
+ .attentionSection > header {
4177
+ align-items: flex-end;
4178
+ display: flex;
4179
+ gap: 1rem;
4180
+ justify-content: space-between;
4181
+ }
4182
+
4183
+ .overviewLaunchpad h2,
4184
+ .overviewLaunchpad p {
4185
+ margin: 0;
4186
+ }
4187
+
4188
+ .overviewLaunchpad > header > span {
4189
+ color: var(--pw-gray-700);
4190
+ font-size: 0.78rem;
4191
+ }
4192
+
4193
+ .overviewLaunchGrid {
4194
+ display: grid;
4195
+ gap: 0.75rem;
4196
+ grid-template-columns: repeat(4, minmax(0, 1fr));
4197
+ margin-top: 1rem;
4198
+ }
4199
+
4200
+ .overviewLaunchGrid button {
4201
+ background: var(--pw-blue-050);
4202
+ border: 1px solid var(--pw-gray-200);
4203
+ border-radius: 15px;
4204
+ color: var(--pw-blue-900);
4205
+ display: grid;
4206
+ gap: 0.35rem;
4207
+ min-height: 118px;
4208
+ padding: 0.9rem;
4209
+ text-align: left;
4210
+ }
4211
+
4212
+ .overviewLaunchGrid button:hover {
4213
+ border-color: var(--pw-blue-700);
4214
+ transform: translateY(-1px);
4215
+ }
4216
+
4217
+ .overviewLaunchGrid button > span {
4218
+ color: var(--pw-teal);
4219
+ font-size: 1.15rem;
4220
+ font-weight: 800;
4221
+ }
4222
+
4223
+ .overviewLaunchGrid small {
4224
+ color: var(--pw-gray-700);
4225
+ line-height: 1.35;
4226
+ }
4227
+
4228
+ .analysisGuidance {
4229
+ display: grid;
4230
+ gap: 0.8rem;
4231
+ grid-template-columns: repeat(3, 1fr);
4232
+ }
4233
+
4234
+ .analysisGuidance article,
4235
+ .preferenceCard {
4236
+ background: var(--pw-white);
4237
+ border: 1px solid var(--pw-gray-200);
4238
+ border-radius: 17px;
4239
+ box-shadow: var(--shadow-soft);
4240
+ }
4241
+
4242
+ .analysisGuidance article {
4243
+ display: grid;
4244
+ gap: 0.35rem;
4245
+ grid-template-columns: auto 1fr;
4246
+ padding: 1rem;
4247
+ }
4248
+
4249
+ .analysisGuidance article > span {
4250
+ align-items: center;
4251
+ background: var(--pw-blue-100);
4252
+ border-radius: 9px;
4253
+ color: var(--pw-blue-700);
4254
+ display: inline-flex;
4255
+ font-weight: 800;
4256
+ grid-row: span 2;
4257
+ height: 32px;
4258
+ justify-content: center;
4259
+ width: 32px;
4260
+ }
4261
+
4262
+ .analysisGuidance small {
4263
+ color: var(--pw-gray-700);
4264
+ }
4265
+
4266
+ .preferencesGrid {
4267
+ display: grid;
4268
+ gap: 1rem;
4269
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4270
+ }
4271
+
4272
+ .preferenceCard {
4273
+ align-items: start;
4274
+ display: grid;
4275
+ gap: 1rem;
4276
+ grid-template-columns: auto minmax(0, 1fr);
4277
+ padding: 1.2rem;
4278
+ }
4279
+
4280
+ .preferenceCard > label,
4281
+ .preferenceCard > button {
4282
+ grid-column: 2;
4283
+ }
4284
+
4285
+ .preferenceCard h2,
4286
+ .preferenceCard p {
4287
+ margin: 0;
4288
+ }
4289
+
4290
+ .preferenceCard h2 {
4291
+ color: var(--pw-blue-900);
4292
+ font-size: 1rem;
4293
+ }
4294
+
4295
+ .preferenceCard p {
4296
+ color: var(--pw-gray-700);
4297
+ font-size: 0.8rem;
4298
+ line-height: 1.45;
4299
+ margin-top: 0.25rem;
4300
+ }
4301
+
4302
+ .preferenceCard label {
4303
+ color: var(--pw-gray-700);
4304
+ display: grid;
4305
+ font-size: 0.74rem;
4306
+ font-weight: 700;
4307
+ gap: 0.35rem;
4308
+ }
4309
+
4310
+ .preferenceCard input,
4311
+ .preferenceCard select {
4312
+ background: var(--pw-white);
4313
+ border: 1px solid var(--pw-gray-200);
4314
+ border-radius: 10px;
4315
+ color: var(--pw-blue-900);
4316
+ min-height: 42px;
4317
+ padding: 0.6rem 0.75rem;
4318
+ width: 100%;
4319
+ }
4320
+
4321
+ .preferenceIcon {
4322
+ align-items: center;
4323
+ background: var(--pw-blue-100);
4324
+ border-radius: 12px;
4325
+ color: var(--pw-blue-700);
4326
+ display: inline-flex;
4327
+ font-size: 1rem;
4328
+ font-weight: 800;
4329
+ height: 42px;
4330
+ justify-content: center;
4331
+ width: 42px;
4332
+ }
4333
+
4334
+ .executionsContinuation {
4335
+ margin-top: 1rem;
4336
+ }
4337
+
4338
+ html[data-theme="dark"] .topbar {
4339
+ background: rgb(11 23 36 / 88%);
4340
+ }
4341
+
4342
+ @media (max-width: 1100px) {
4343
+ .overviewLaunchGrid {
4344
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4345
+ }
4346
+
4347
+ .statusDistribution {
4348
+ grid-template-columns: auto minmax(0, 1fr);
4349
+ }
4350
+
4351
+ .statusDistributionCopy {
4352
+ grid-column: 1 / -1;
4353
+ }
4354
+
4355
+ .sidebar {
4356
+ width: 220px;
4357
+ }
4358
+ }
4359
+
4360
+ @media (max-width: 820px) {
4361
+ .appFrame {
4362
+ display: block;
4363
+ }
4364
+
4365
+ .sidebar,
4366
+ .sidebar.collapsed {
4367
+ box-shadow: 18px 0 50px rgb(0 0 0 / 28%);
4368
+ left: 0;
4369
+ position: fixed;
4370
+ transform: translateX(-105%);
4371
+ transition: transform 180ms ease;
4372
+ width: min(280px, 86vw);
4373
+ }
4374
+
4375
+ .sidebar.mobileOpen {
4376
+ transform: translateX(0);
4377
+ }
4378
+
4379
+ .sidebar.collapsed .sidebarBrand {
4380
+ grid-template-columns: auto minmax(0, 1fr) auto;
4381
+ justify-items: stretch;
4382
+ }
4383
+
4384
+ .sidebar.collapsed .sidebarBrandText,
4385
+ .sidebar.collapsed .sidebarLabel {
4386
+ display: block;
4387
+ }
4388
+
4389
+ .sidebar.collapsed .sidebarBadge {
4390
+ display: inline-flex;
4391
+ }
4392
+
4393
+ .sidebar.collapsed .sidebarContext {
4394
+ display: grid;
4395
+ }
4396
+
4397
+ .sidebar.collapsed .sidebarLink {
4398
+ grid-template-columns: 34px minmax(0, 1fr) auto;
4399
+ justify-items: stretch;
4400
+ padding: 0.42rem 0.55rem;
4401
+ }
4402
+
4403
+ .mobileMenuToggle {
4404
+ display: inline-flex;
4405
+ }
4406
+
4407
+ .topbar {
4408
+ padding-inline: 1rem;
4409
+ }
4410
+
4411
+ .pageContext small {
4412
+ display: none;
4413
+ }
4414
+ }
4415
+
4416
+ @media (max-width: 700px) {
4417
+ .workspaceHeader {
4418
+ align-items: stretch;
4419
+ flex-direction: column;
4420
+ }
4421
+
4422
+ .overviewLaunchGrid,
4423
+ .analysisGuidance,
4424
+ .preferencesGrid {
4425
+ grid-template-columns: 1fr;
4426
+ }
4427
+
4428
+ .statusDistribution {
4429
+ grid-template-columns: 1fr;
4430
+ }
4431
+
4432
+ .statusDistributionCopy {
4433
+ grid-column: auto;
4434
+ }
4435
+
4436
+ .statusDistributionLegend {
4437
+ grid-template-columns: 1fr;
4438
+ }
4439
+
4440
+ .overviewLaunchpad > header {
4441
+ align-items: flex-start;
4442
+ flex-direction: column;
4443
+ }
4444
+
4445
+ .historyFilterBar {
4446
+ align-items: stretch;
4447
+ flex-direction: column;
4448
+ }
4449
+
4450
+ .historyFilterBar select {
4451
+ width: 100%;
4452
+ }
4453
+
4454
+ .historyFilterBar > span {
4455
+ padding-bottom: 0;
4456
+ }
4457
+ }