@xera-ai/core 0.11.1 → 0.11.3

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.
@@ -9,12 +9,10 @@ body {
9
9
  background: #050810;
10
10
  display: grid;
11
11
  grid-template-rows: 52px 1fr 26px;
12
- grid-template-columns: 1fr 280px;
13
12
  }
14
13
 
15
14
  /* ─── Topbar ─────────────────────────────────────── */
16
15
  #topbar {
17
- grid-column: 1 / -1;
18
16
  display: flex;
19
17
  align-items: center;
20
18
  gap: 0;
@@ -97,6 +95,11 @@ body {
97
95
  align-items: center;
98
96
  padding-left: 16px;
99
97
  border-left: 1px solid #1a2035;
98
+ transition: opacity 0.15s;
99
+ }
100
+ body:has([data-tab-panel="coverage"].active) .topbar-controls {
101
+ opacity: 0;
102
+ pointer-events: none;
100
103
  }
101
104
 
102
105
  #search {
@@ -194,11 +197,11 @@ body {
194
197
 
195
198
  /* ─── Canvas ──────────────────────────────────────── */
196
199
  #canvas {
200
+ position: absolute;
201
+ inset: 0;
197
202
  background-color: #050810;
198
203
  background-image: radial-gradient(rgba(148, 163, 184, 0.06) 1px, transparent 1px);
199
204
  background-size: 28px 28px;
200
- position: relative;
201
- min-height: 0;
202
205
  overflow: hidden;
203
206
  }
204
207
 
@@ -223,17 +226,27 @@ body {
223
226
 
224
227
  /* ─── Side panel ──────────────────────────────────── */
225
228
  #sidepanel {
229
+ position: absolute;
230
+ top: 0;
231
+ right: 0;
232
+ bottom: 0;
233
+ width: 300px;
226
234
  background: #080c14;
227
235
  border-left: 1px solid #1a2035;
228
236
  overflow-y: auto;
229
237
  color: #e2e8f0;
230
238
  display: flex;
231
239
  flex-direction: column;
232
- transition: opacity 0.2s;
240
+ transform: translateX(0);
241
+ transition:
242
+ transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
243
+ opacity 0.2s;
244
+ z-index: 5;
245
+ box-shadow: -8px 0 24px rgba(0, 0, 0, 0.35);
233
246
  }
234
247
 
235
248
  #sidepanel.hidden {
236
- visibility: hidden;
249
+ transform: translateX(100%);
237
250
  opacity: 0;
238
251
  pointer-events: none;
239
252
  }
@@ -326,7 +339,6 @@ body {
326
339
 
327
340
  /* ─── Footer ──────────────────────────────────────── */
328
341
  #footer {
329
- grid-column: 1 / -1;
330
342
  background: #050810;
331
343
  padding: 4px 16px;
332
344
  font-size: 10px;
@@ -361,64 +373,825 @@ body {
361
373
  [data-tab-panel] {
362
374
  display: none;
363
375
  }
364
- [data-tab-panel].active {
376
+ [data-tab-panel="knowledge"].active {
365
377
  display: block;
378
+ position: relative;
379
+ min-height: 0;
380
+ overflow: hidden;
366
381
  }
382
+ [data-tab-panel="coverage"].active {
383
+ display: block;
384
+ overflow: auto;
385
+ padding: 20px 24px 32px;
386
+ color: #e2e8f0;
387
+ }
388
+
389
+ /* ── Subtabs ──────────────────────────────────────── */
367
390
  .subtabs {
368
- display: flex;
369
- gap: 4px;
370
- padding: 8px;
391
+ display: inline-flex;
392
+ gap: 2px;
393
+ padding: 3px;
394
+ margin: 0 0 16px;
395
+ background: #0f1624;
396
+ border: 1px solid #1e2d45;
397
+ border-radius: 8px;
371
398
  }
372
399
  .subtabs button {
373
- padding: 4px 10px;
374
- border: 1px solid #d1d5db;
375
- background: white;
400
+ padding: 5px 14px;
401
+ border: 0;
402
+ background: transparent;
403
+ color: #64748b;
404
+ font-size: 12px;
405
+ font-weight: 500;
406
+ border-radius: 5px;
376
407
  cursor: pointer;
408
+ transition:
409
+ background 0.12s,
410
+ color 0.12s;
411
+ }
412
+ .subtabs button:hover {
413
+ color: #9ca3af;
414
+ background: #1a2540;
377
415
  }
378
416
  .subtabs button.active {
379
- background: #3b82f6;
380
- color: white;
417
+ background: #1a2540;
418
+ color: #e2e8f0;
381
419
  }
420
+
382
421
  [data-subpanel] {
383
- padding: 12px;
422
+ padding: 0;
384
423
  }
424
+
385
425
  .subpanel-hint {
386
- color: #6b7280;
426
+ color: #64748b;
427
+ font-size: 12px;
428
+ line-height: 1.6;
429
+ margin: 0 0 16px;
430
+ padding: 10px 14px;
431
+ background: #0a111e;
432
+ border-left: 2px solid #1e3a6e;
433
+ border-radius: 0 6px 6px 0;
434
+ }
435
+
436
+ /* ── Tables ───────────────────────────────────────── */
437
+ [data-tab-panel="coverage"] h3 {
387
438
  font-size: 13px;
388
- margin: 4px 0 12px;
439
+ font-weight: 600;
440
+ color: #cbd5e1;
441
+ margin: 28px 0 12px;
442
+ letter-spacing: -0.01em;
389
443
  }
444
+
390
445
  #coverage-list-table,
391
446
  #coverage-ac-table {
392
- border-collapse: collapse;
447
+ border-collapse: separate;
448
+ border-spacing: 0;
393
449
  width: 100%;
394
- font-size: 13px;
450
+ font-size: 12px;
451
+ background: #080c14;
452
+ border: 1px solid #1a2035;
453
+ border-radius: 8px;
454
+ overflow: hidden;
395
455
  }
456
+
396
457
  #coverage-list-table th,
397
458
  #coverage-list-table td,
398
459
  #coverage-ac-table th,
399
460
  #coverage-ac-table td {
400
- border: 1px solid #e5e7eb;
401
- padding: 6px 10px;
461
+ padding: 9px 14px;
402
462
  text-align: left;
463
+ border-bottom: 1px solid #1a2035;
464
+ vertical-align: middle;
465
+ }
466
+ #coverage-list-table tr:last-child td,
467
+ #coverage-ac-table tr:last-child td {
468
+ border-bottom: 0;
403
469
  }
404
- #coverage-list-table th {
405
- background: #f9fafb;
470
+
471
+ #coverage-list-table th,
472
+ #coverage-ac-table th {
473
+ background: #0a111e;
474
+ color: #64748b;
475
+ font-size: 10px;
476
+ font-weight: 600;
477
+ letter-spacing: 0.06em;
478
+ text-transform: uppercase;
406
479
  cursor: pointer;
480
+ user-select: none;
481
+ border-bottom: 1px solid #1e2d45;
482
+ }
483
+ #coverage-list-table th:hover,
484
+ #coverage-ac-table th:hover {
485
+ color: #9ca3af;
486
+ }
487
+
488
+ #coverage-list-table tbody tr,
489
+ #coverage-ac-table tbody tr {
490
+ transition: background 0.1s;
491
+ }
492
+ #coverage-list-table tbody tr:hover,
493
+ #coverage-ac-table tbody tr:hover {
494
+ background: #0f1624;
495
+ }
496
+
497
+ #coverage-list-table td,
498
+ #coverage-ac-table td {
499
+ color: #cbd5e1;
500
+ }
501
+
502
+ /* ── Status row accents (left-edge badge, not full bg) ── */
503
+ #coverage-list-table tbody tr td:first-child {
504
+ font-weight: 600;
505
+ font-size: 10px;
506
+ letter-spacing: 0.06em;
507
+ text-transform: uppercase;
508
+ position: relative;
509
+ padding-left: 22px;
510
+ }
511
+ #coverage-list-table tbody tr td:first-child::before {
512
+ content: "";
513
+ position: absolute;
514
+ left: 10px;
515
+ top: 50%;
516
+ transform: translateY(-50%);
517
+ width: 6px;
518
+ height: 6px;
519
+ border-radius: 50%;
520
+ }
521
+ .status-uncovered td:first-child {
522
+ color: #f87171;
523
+ }
524
+ .status-uncovered td:first-child::before {
525
+ background: #ef4444;
526
+ box-shadow: 0 0 6px rgba(239, 68, 68, 0.5);
407
527
  }
408
- .status-uncovered {
409
- background: #fee2e2;
528
+ .status-stale td:first-child {
529
+ color: #fbbf24;
530
+ }
531
+ .status-stale td:first-child::before {
532
+ background: #f59e0b;
533
+ box-shadow: 0 0 6px rgba(245, 158, 11, 0.5);
410
534
  }
411
- .status-stale {
412
- background: #fef3c7;
535
+ .status-covered td:first-child {
536
+ color: #34d399;
413
537
  }
414
- .status-covered {
415
- background: #d1fae5;
538
+ .status-covered td:first-child::before {
539
+ background: #10b981;
540
+ box-shadow: 0 0 6px rgba(16, 185, 129, 0.45);
416
541
  }
542
+
543
+ /* ── Coverage Map: QA action queue ────────────────── */
417
544
  #coverage-map-canvas {
418
545
  width: 100%;
419
- height: 600px;
546
+ background: transparent;
547
+ border: 0;
548
+ }
549
+
550
+ .cov-empty {
551
+ padding: 64px 32px;
552
+ text-align: center;
553
+ color: #64748b;
554
+ font-size: 13px;
555
+ border: 1px dashed #1e2d45;
556
+ border-radius: 10px;
557
+ }
558
+ .cov-empty code {
559
+ background: #0f1624;
560
+ border: 1px solid #1e2d45;
561
+ border-radius: 4px;
562
+ padding: 1px 6px;
563
+ font-size: 12px;
564
+ color: #cbd5e1;
565
+ }
566
+
567
+ /* ── Sticky summary bar ───────────────────────────── */
568
+ .cov-summary {
569
+ position: sticky;
570
+ top: -20px;
571
+ z-index: 4;
572
+ display: flex;
573
+ align-items: center;
574
+ gap: 18px;
575
+ margin: -8px 0 20px;
576
+ padding: 14px 18px;
577
+ background: linear-gradient(180deg, #0a111e 0%, #080c14 100%);
578
+ border: 1px solid #1a2035;
579
+ border-radius: 10px;
580
+ backdrop-filter: blur(8px);
581
+ }
582
+ .cov-summary-stat {
583
+ display: flex;
584
+ flex-direction: column;
585
+ gap: 1px;
586
+ min-width: 64px;
587
+ }
588
+ .cov-summary-num {
589
+ font-size: 22px;
590
+ font-weight: 700;
591
+ color: #cbd5e1;
592
+ font-variant-numeric: tabular-nums;
593
+ line-height: 1.1;
594
+ }
595
+ .cov-summary-label {
596
+ font-size: 10px;
597
+ font-weight: 600;
598
+ letter-spacing: 0.06em;
599
+ text-transform: uppercase;
600
+ color: #64748b;
601
+ }
602
+ .cov-summary-stat-urgent .cov-summary-num {
603
+ color: #f87171;
604
+ text-shadow: 0 0 14px rgba(239, 68, 68, 0.4);
605
+ }
606
+ .cov-summary-stat-urgent .cov-summary-label {
607
+ color: #f87171;
608
+ }
609
+ .cov-summary-divider {
610
+ width: 1px;
611
+ height: 28px;
612
+ background: #1e2d45;
613
+ }
614
+ .cov-summary-top {
615
+ margin-left: auto;
616
+ display: flex;
617
+ flex-direction: column;
618
+ gap: 2px;
619
+ align-items: flex-end;
620
+ }
621
+ .cov-summary-top-label {
622
+ font-size: 10px;
623
+ font-weight: 600;
624
+ letter-spacing: 0.06em;
625
+ text-transform: uppercase;
626
+ color: #64748b;
627
+ }
628
+ .cov-summary-top-btn {
629
+ display: inline-flex;
630
+ align-items: center;
631
+ gap: 8px;
632
+ background: transparent;
633
+ border: 1px solid #1e2d45;
634
+ border-radius: 6px;
635
+ padding: 4px 10px;
636
+ font-size: 12px;
637
+ font-weight: 600;
638
+ color: #cbd5e1;
639
+ cursor: pointer;
640
+ transition:
641
+ background 0.12s,
642
+ border-color 0.12s;
643
+ font-family: inherit;
644
+ }
645
+ .cov-summary-top-btn:hover {
646
+ background: #1a2540;
647
+ border-color: #2d3f5f;
648
+ }
649
+ .cov-summary-top-risk {
650
+ font-size: 11px;
651
+ color: #f87171;
652
+ font-variant-numeric: tabular-nums;
653
+ }
654
+
655
+ /* ── Sections ─────────────────────────────────────── */
656
+ .cov-section,
657
+ .cov-section-collapsible {
658
+ margin: 0 0 28px;
659
+ }
660
+ .cov-section-collapsible {
661
+ border-top: 1px solid #1a2035;
662
+ padding-top: 14px;
663
+ }
664
+ .cov-section-collapsible[open] {
665
+ padding-bottom: 4px;
666
+ }
667
+ .cov-section-collapsible > summary {
668
+ list-style: none;
669
+ cursor: pointer;
670
+ user-select: none;
671
+ }
672
+ .cov-section-collapsible > summary::-webkit-details-marker {
673
+ display: none;
674
+ }
675
+ .cov-section-collapsible[open] > summary .cov-section-head::before {
676
+ transform: rotate(90deg);
677
+ }
678
+ .cov-section-collapsible > summary .cov-section-head::before {
679
+ content: "▸";
680
+ color: #4b5563;
681
+ margin-right: 6px;
682
+ font-size: 11px;
683
+ transition: transform 0.15s;
684
+ display: inline-block;
685
+ }
686
+
687
+ .cov-section-head {
688
+ display: flex;
689
+ align-items: center;
690
+ gap: 8px;
691
+ margin: 0 0 12px;
692
+ }
693
+ .cov-section-icon {
694
+ width: 8px;
695
+ height: 8px;
696
+ border-radius: 50%;
697
+ flex-shrink: 0;
698
+ }
699
+ .cov-section-icon-urgent {
700
+ background: #ef4444;
701
+ box-shadow: 0 0 8px rgba(239, 68, 68, 0.7);
702
+ }
703
+ .cov-section-icon-warn {
704
+ background: #fb923c;
705
+ box-shadow: 0 0 8px rgba(251, 146, 60, 0.6);
706
+ }
707
+ .cov-section-icon-ok {
708
+ background: #10b981;
709
+ box-shadow: 0 0 6px rgba(16, 185, 129, 0.5);
710
+ }
711
+ .cov-section-title {
712
+ margin: 0;
713
+ font-size: 13px;
714
+ font-weight: 600;
715
+ color: #e2e8f0;
716
+ letter-spacing: -0.01em;
717
+ }
718
+ .cov-section-count {
719
+ font-size: 11px;
720
+ font-weight: 600;
721
+ color: #64748b;
722
+ background: #0f1624;
723
+ border: 1px solid #1e2d45;
724
+ border-radius: 10px;
725
+ padding: 1px 8px;
726
+ min-width: 22px;
727
+ text-align: center;
728
+ font-variant-numeric: tabular-nums;
729
+ }
730
+ .cov-section-desc {
731
+ margin-left: 4px;
732
+ font-size: 11px;
733
+ color: #4b5563;
734
+ font-style: italic;
735
+ }
736
+
737
+ .cov-grid {
738
+ display: grid;
739
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
740
+ gap: 12px;
741
+ }
742
+
743
+ .cov-tile {
744
+ position: relative;
745
+ background: linear-gradient(135deg, var(--fill) 0%, #0a111e 100%);
746
+ border: 1px solid var(--border);
747
+ border-radius: 10px;
748
+ padding: 14px 16px 12px;
749
+ box-shadow: 0 0 calc(8px + var(--heat) * 18px) var(--glow);
750
+ transition:
751
+ transform 0.15s,
752
+ box-shadow 0.15s;
753
+ overflow: hidden;
754
+ cursor: pointer;
755
+ text-align: left;
756
+ font-family: inherit;
757
+ }
758
+ .cov-tile::before {
759
+ content: "";
760
+ position: absolute;
761
+ top: 0;
762
+ left: 0;
763
+ right: 0;
764
+ height: 2px;
765
+ background: var(--border);
766
+ opacity: calc(0.5 + var(--heat) * 0.5);
767
+ }
768
+ .cov-tile:hover,
769
+ .cov-tile:focus-visible {
770
+ transform: translateY(-2px);
771
+ box-shadow: 0 0 calc(14px + var(--heat) * 22px) var(--glow);
772
+ outline: none;
773
+ }
774
+ .cov-tile:focus-visible {
775
+ border-color: #fff;
776
+ }
777
+
778
+ @keyframes cov-tile-pulse {
779
+ 0%,
780
+ 100% {
781
+ box-shadow: 0 0 calc(8px + var(--heat) * 18px) var(--glow);
782
+ }
783
+ 50% {
784
+ box-shadow:
785
+ 0 0 calc(20px + var(--heat) * 26px) var(--glow),
786
+ 0 0 calc(36px + var(--heat) * 36px) var(--glow);
787
+ }
788
+ }
789
+ .cov-tile[data-pulse="true"] {
790
+ animation: cov-tile-pulse 2.4s ease-in-out infinite;
791
+ }
792
+
793
+ .cov-tile-head {
794
+ display: flex;
795
+ justify-content: space-between;
796
+ align-items: center;
797
+ margin-bottom: 8px;
798
+ }
799
+ .cov-tile-status {
800
+ font-size: 9px;
801
+ font-weight: 700;
802
+ letter-spacing: 0.08em;
803
+ text-transform: uppercase;
804
+ color: var(--border);
805
+ background: rgba(0, 0, 0, 0.3);
806
+ padding: 2px 7px;
807
+ border-radius: 3px;
808
+ }
809
+ .cov-tile-risk {
810
+ font-size: 18px;
811
+ font-weight: 700;
812
+ color: var(--border);
813
+ font-variant-numeric: tabular-nums;
814
+ line-height: 1;
815
+ }
816
+ .cov-tile-name {
817
+ margin: 0 0 10px;
818
+ font-size: 14px;
819
+ font-weight: 600;
820
+ color: #f1f5f9;
821
+ letter-spacing: -0.01em;
822
+ word-break: break-word;
823
+ }
824
+ .cov-tile-meta {
825
+ margin: 0;
826
+ display: flex;
827
+ gap: 14px;
828
+ }
829
+ .cov-tile-meta > div {
830
+ display: flex;
831
+ flex-direction: column;
832
+ gap: 1px;
833
+ }
834
+ .cov-tile-meta dt {
835
+ font-size: 9px;
836
+ font-weight: 600;
837
+ letter-spacing: 0.06em;
838
+ text-transform: uppercase;
839
+ color: #64748b;
840
+ }
841
+ .cov-tile-meta dd {
842
+ margin: 0;
843
+ font-size: 13px;
844
+ font-weight: 600;
845
+ color: #cbd5e1;
846
+ font-variant-numeric: tabular-nums;
847
+ }
848
+
849
+ /* ── Coverage drawer ──────────────────────────────── */
850
+ .cov-drawer {
851
+ position: fixed;
852
+ top: 52px;
853
+ right: 0;
854
+ bottom: 26px;
855
+ width: 360px;
856
+ background: #080c14;
857
+ border-left: 1px solid #1a2035;
858
+ box-shadow: -12px 0 32px rgba(0, 0, 0, 0.5);
859
+ z-index: 20;
860
+ display: flex;
861
+ flex-direction: column;
862
+ transform: translateX(0);
863
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
864
+ overflow: hidden;
865
+ }
866
+ .cov-drawer.hidden {
867
+ transform: translateX(100%);
868
+ pointer-events: none;
869
+ }
870
+
871
+ .cov-drawer-head {
872
+ display: flex;
873
+ align-items: flex-start;
874
+ justify-content: space-between;
875
+ gap: 12px;
876
+ padding: 16px 18px 14px;
877
+ border-bottom: 1px solid #1a2035;
878
+ flex-shrink: 0;
879
+ }
880
+ .cov-drawer-head-text {
881
+ display: flex;
882
+ flex-direction: column;
883
+ gap: 6px;
884
+ min-width: 0;
885
+ }
886
+ .cov-drawer-status {
887
+ display: inline-block;
888
+ width: fit-content;
889
+ font-size: 9px;
890
+ font-weight: 700;
891
+ letter-spacing: 0.08em;
892
+ text-transform: uppercase;
893
+ padding: 2px 7px;
894
+ border-radius: 3px;
895
+ border: 1px solid;
896
+ }
897
+ .cov-drawer-head h3 {
898
+ margin: 0;
899
+ font-size: 16px;
900
+ font-weight: 600;
901
+ color: #f1f5f9;
902
+ letter-spacing: -0.01em;
903
+ word-break: break-word;
904
+ }
905
+ #cov-drawer-close {
906
+ background: transparent;
907
+ border: 0;
908
+ color: #4b5563;
909
+ font-size: 22px;
910
+ line-height: 1;
911
+ padding: 2px 6px;
912
+ cursor: pointer;
913
+ border-radius: 4px;
914
+ transition:
915
+ background 0.12s,
916
+ color 0.12s;
917
+ flex-shrink: 0;
918
+ }
919
+ #cov-drawer-close:hover {
920
+ background: #1a2035;
921
+ color: #cbd5e1;
922
+ }
923
+
924
+ .cov-drawer-body {
925
+ flex: 1;
926
+ overflow-y: auto;
927
+ padding: 14px 18px 18px;
928
+ }
929
+
930
+ .cov-drawer-section {
931
+ margin: 0 0 20px;
932
+ }
933
+ .cov-drawer-section h4 {
934
+ margin: 0 0 10px;
935
+ display: flex;
936
+ align-items: center;
937
+ gap: 8px;
938
+ font-size: 11px;
939
+ font-weight: 600;
940
+ letter-spacing: 0.06em;
941
+ text-transform: uppercase;
942
+ color: #64748b;
943
+ }
944
+ .cov-drawer-count {
945
+ background: #0f1624;
946
+ border: 1px solid #1e2d45;
947
+ border-radius: 10px;
948
+ padding: 1px 7px;
949
+ font-size: 10px;
950
+ font-weight: 600;
951
+ color: #94a3b8;
952
+ font-variant-numeric: tabular-nums;
953
+ letter-spacing: 0;
954
+ text-transform: none;
955
+ }
956
+
957
+ .cov-drawer-risk {
958
+ display: flex;
959
+ align-items: center;
960
+ gap: 16px;
961
+ padding: 14px 16px;
962
+ background: #0a111e;
963
+ border: 1px solid #1a2035;
964
+ border-radius: 8px;
965
+ }
966
+ .cov-drawer-risk-num {
967
+ font-size: 32px;
968
+ font-weight: 700;
969
+ color: #f87171;
970
+ font-variant-numeric: tabular-nums;
971
+ line-height: 1;
972
+ text-shadow: 0 0 16px rgba(239, 68, 68, 0.3);
973
+ }
974
+ .cov-drawer-risk-meta {
975
+ margin: 0;
976
+ padding: 0;
977
+ list-style: none;
978
+ display: flex;
979
+ flex-direction: column;
980
+ gap: 2px;
981
+ flex: 1;
982
+ }
983
+ .cov-drawer-risk-meta li {
984
+ font-size: 12px;
985
+ color: #94a3b8;
986
+ }
987
+ .cov-drawer-risk-meta li span {
988
+ color: #e2e8f0;
989
+ font-weight: 600;
990
+ font-variant-numeric: tabular-nums;
991
+ }
992
+ .cov-drawer-risk-crit {
993
+ color: #fbbf24 !important;
994
+ font-weight: 600;
995
+ }
996
+
997
+ .cov-drawer-pillrow {
998
+ display: flex;
999
+ gap: 6px;
1000
+ margin-bottom: 10px;
1001
+ }
1002
+ .cov-drawer-pill {
1003
+ font-size: 10px;
1004
+ font-weight: 600;
1005
+ letter-spacing: 0.04em;
1006
+ padding: 2px 8px;
1007
+ border-radius: 3px;
1008
+ border: 1px solid;
1009
+ }
1010
+ .cov-pill-pass {
1011
+ color: #34d399;
1012
+ background: rgba(16, 185, 129, 0.1);
1013
+ border-color: rgba(16, 185, 129, 0.3);
1014
+ }
1015
+ .cov-pill-fail {
1016
+ color: #f87171;
1017
+ background: rgba(239, 68, 68, 0.1);
1018
+ border-color: rgba(239, 68, 68, 0.3);
1019
+ }
1020
+
1021
+ .cov-drawer-list {
1022
+ list-style: none;
1023
+ margin: 0;
1024
+ padding: 0;
1025
+ display: flex;
1026
+ flex-direction: column;
1027
+ gap: 2px;
1028
+ }
1029
+ .cov-drawer-list-stack {
1030
+ gap: 8px;
1031
+ }
1032
+ .cov-drawer-item {
1033
+ display: flex;
1034
+ align-items: center;
1035
+ gap: 9px;
1036
+ width: 100%;
1037
+ text-align: left;
1038
+ background: transparent;
1039
+ border: 0;
1040
+ padding: 7px 10px;
1041
+ border-radius: 5px;
1042
+ color: #cbd5e1;
1043
+ font-size: 12px;
1044
+ cursor: pointer;
1045
+ transition:
1046
+ background 0.1s,
1047
+ color 0.1s;
1048
+ font-family: inherit;
1049
+ }
1050
+ .cov-drawer-item:hover {
1051
+ background: #0f1624;
1052
+ color: #e2e8f0;
1053
+ }
1054
+ .cov-drawer-item span {
1055
+ flex: 1;
1056
+ overflow: hidden;
1057
+ text-overflow: ellipsis;
1058
+ white-space: nowrap;
1059
+ }
1060
+ .cov-drawer-item .cov-dot {
1061
+ width: 7px;
1062
+ height: 7px;
1063
+ border-radius: 50%;
1064
+ flex-shrink: 0;
1065
+ }
1066
+ .cov-dot-pass {
1067
+ background: #34d399;
1068
+ box-shadow: 0 0 5px rgba(16, 185, 129, 0.5);
1069
+ }
1070
+ .cov-dot-fail {
1071
+ background: #f87171;
1072
+ box-shadow: 0 0 5px rgba(239, 68, 68, 0.5);
420
1073
  }
1074
+ .cov-dot-ticket {
1075
+ background: #60a5fa;
1076
+ box-shadow: 0 0 5px rgba(59, 130, 246, 0.5);
1077
+ }
1078
+
1079
+ .cov-drawer-ac {
1080
+ padding: 10px 12px;
1081
+ background: #0a111e;
1082
+ border: 1px solid #1a2035;
1083
+ border-radius: 6px;
1084
+ font-size: 12px;
1085
+ color: #cbd5e1;
1086
+ }
1087
+ .cov-drawer-ac strong {
1088
+ color: #93c5fd;
1089
+ font-weight: 600;
1090
+ }
1091
+ .cov-drawer-ac-tags {
1092
+ display: flex;
1093
+ flex-wrap: wrap;
1094
+ gap: 4px;
1095
+ margin-top: 6px;
1096
+ }
1097
+ .cov-drawer-ac-tag {
1098
+ font-size: 10px;
1099
+ font-weight: 600;
1100
+ color: #f87171;
1101
+ background: rgba(239, 68, 68, 0.12);
1102
+ border: 1px solid rgba(239, 68, 68, 0.3);
1103
+ padding: 1px 6px;
1104
+ border-radius: 3px;
1105
+ font-variant-numeric: tabular-nums;
1106
+ }
1107
+
1108
+ .cov-drawer-actions {
1109
+ margin-top: 16px;
1110
+ padding-top: 14px;
1111
+ border-top: 1px solid #1a2035;
1112
+ }
1113
+ .cov-drawer-action {
1114
+ display: flex;
1115
+ align-items: center;
1116
+ justify-content: center;
1117
+ gap: 8px;
1118
+ width: 100%;
1119
+ background: linear-gradient(135deg, #1d4ed8, #4f46e5);
1120
+ color: #eff6ff;
1121
+ border: 0;
1122
+ border-radius: 6px;
1123
+ padding: 9px 14px;
1124
+ font-size: 12px;
1125
+ font-weight: 600;
1126
+ letter-spacing: 0.01em;
1127
+ cursor: pointer;
1128
+ transition:
1129
+ opacity 0.15s,
1130
+ transform 0.1s;
1131
+ font-family: inherit;
1132
+ }
1133
+ .cov-drawer-action:hover {
1134
+ opacity: 0.9;
1135
+ }
1136
+ .cov-drawer-action:active {
1137
+ transform: scale(0.98);
1138
+ }
1139
+
421
1140
  #coverage-trend-svg {
422
1141
  width: 100%;
423
1142
  min-height: 300px;
1143
+ background: #080c14;
1144
+ border: 1px solid #1a2035;
1145
+ border-radius: 8px;
1146
+ padding: 16px;
1147
+ display: flex;
1148
+ }
1149
+ #coverage-trend-svg svg {
1150
+ width: 100%;
1151
+ height: auto;
1152
+ }
1153
+ #coverage-trend-svg svg text {
1154
+ fill: #64748b;
1155
+ }
1156
+ #coverage-trend-svg svg path[stroke="#ef4444"] {
1157
+ filter: drop-shadow(0 0 4px rgba(239, 68, 68, 0.4));
1158
+ }
1159
+
1160
+ .cov-trend-single {
1161
+ width: 100%;
1162
+ display: flex;
1163
+ flex-direction: column;
1164
+ align-items: center;
1165
+ justify-content: center;
1166
+ text-align: center;
1167
+ padding: 40px 20px;
1168
+ gap: 6px;
1169
+ }
1170
+ .cov-trend-single .cov-trend-value {
1171
+ font-size: 56px;
1172
+ font-weight: 700;
1173
+ color: #ef4444;
1174
+ line-height: 1;
1175
+ font-variant-numeric: tabular-nums;
1176
+ text-shadow: 0 0 24px rgba(239, 68, 68, 0.35);
1177
+ }
1178
+ .cov-trend-single .cov-trend-unit {
1179
+ font-size: 12px;
1180
+ font-weight: 500;
1181
+ color: #94a3b8;
1182
+ letter-spacing: 0.04em;
1183
+ text-transform: uppercase;
1184
+ }
1185
+ .cov-trend-single .cov-trend-date {
1186
+ font-size: 11px;
1187
+ color: #4b5563;
1188
+ font-variant-numeric: tabular-nums;
1189
+ margin-top: 8px;
1190
+ }
1191
+ .cov-trend-single .cov-trend-hint {
1192
+ max-width: 360px;
1193
+ margin: 12px 0 0;
1194
+ font-size: 12px;
1195
+ color: #64748b;
1196
+ line-height: 1.6;
424
1197
  }