@pitvox/partner-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1139 @@
1
+ /*
2
+ * @pitvox/partner-react — default dark theme.
3
+ *
4
+ * Import this stylesheet in your app:
5
+ * import '@pitvox/partner-react/styles.css'
6
+ *
7
+ * All classes are prefixed with `pvx-` to avoid collisions.
8
+ * Override any class in your own CSS to customise.
9
+ */
10
+
11
+ /* ─── CSS custom properties (override these for theming) ─────── */
12
+
13
+ :root {
14
+ --pvx-bg: #111827;
15
+ --pvx-bg-card: #111827;
16
+ --pvx-bg-card-header: transparent;
17
+ --pvx-bg-hover: rgba(31, 41, 55, 0.5);
18
+ --pvx-bg-podium: rgba(120, 53, 15, 0.1);
19
+ --pvx-bg-personal-best: rgba(120, 53, 15, 0.1);
20
+ --pvx-bg-invalid: rgba(127, 29, 29, 0.1);
21
+
22
+ --pvx-border: #1f2937;
23
+ --pvx-border-header: #1f2937;
24
+
25
+ --pvx-text: #d1d5db;
26
+ --pvx-text-primary: #ffffff;
27
+ --pvx-text-muted: #6b7280;
28
+ --pvx-text-dimmed: #374151;
29
+
30
+ --pvx-accent: #6366f1;
31
+ --pvx-accent-hover: #818cf8;
32
+ --pvx-sector-best: #c084fc;
33
+
34
+ --pvx-rank-gold: #facc15;
35
+ --pvx-rank-silver: #9ca3af;
36
+ --pvx-rank-bronze: #f59e0b;
37
+
38
+ --pvx-valid: #4ade80;
39
+ --pvx-invalid: #f87171;
40
+
41
+ --pvx-tag-bg: #1f2937;
42
+ --pvx-tag-text: #9ca3af;
43
+ --pvx-tag-active-bg: var(--pvx-accent);
44
+ --pvx-tag-active-text: #ffffff;
45
+
46
+ --pvx-radius: 0.75rem;
47
+ --pvx-radius-sm: 0.5rem;
48
+ --pvx-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
49
+ }
50
+
51
+ /* ─── Explorer layout ────────────────────────────────────────── */
52
+
53
+ .pvx-leaderboard-explorer {
54
+ display: flex;
55
+ flex-direction: column;
56
+ gap: 1.5rem;
57
+ }
58
+
59
+ .pvx-explorer-header {
60
+ display: flex;
61
+ flex-wrap: wrap;
62
+ align-items: center;
63
+ justify-content: space-between;
64
+ gap: 1rem;
65
+ }
66
+
67
+ .pvx-explorer-title {
68
+ font-size: 1.875rem;
69
+ font-weight: 700;
70
+ color: var(--pvx-text-primary);
71
+ margin: 0;
72
+ }
73
+
74
+ .pvx-explorer-stats {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 1rem;
78
+ font-size: 0.875rem;
79
+ color: var(--pvx-text-muted);
80
+ }
81
+
82
+ .pvx-explorer-stats-sep {
83
+ color: var(--pvx-text-dimmed);
84
+ }
85
+
86
+ .pvx-explorer-controls {
87
+ display: flex;
88
+ flex-wrap: wrap;
89
+ align-items: center;
90
+ gap: 0.75rem;
91
+ }
92
+
93
+ .pvx-game-tabs {
94
+ display: flex;
95
+ border-radius: var(--pvx-radius-sm);
96
+ background: var(--pvx-tag-bg);
97
+ padding: 0.125rem;
98
+ }
99
+
100
+ .pvx-game-tab {
101
+ padding: 0.375rem 1rem;
102
+ border-radius: 0.375rem;
103
+ font-size: 0.875rem;
104
+ font-weight: 500;
105
+ border: none;
106
+ cursor: pointer;
107
+ transition: all 150ms;
108
+ background: transparent;
109
+ color: var(--pvx-text-muted);
110
+ }
111
+
112
+ .pvx-game-tab:hover {
113
+ color: var(--pvx-text-primary);
114
+ }
115
+
116
+ .pvx-game-tab--active {
117
+ background: var(--pvx-accent);
118
+ color: #fff;
119
+ }
120
+
121
+ .pvx-version-select {
122
+ font-size: 0.875rem;
123
+ padding: 0.375rem 2rem 0.375rem 0.75rem;
124
+ border-radius: var(--pvx-radius-sm);
125
+ background: var(--pvx-tag-bg);
126
+ color: var(--pvx-text);
127
+ border: none;
128
+ cursor: pointer;
129
+ }
130
+
131
+ .pvx-data-timestamp {
132
+ font-size: 0.75rem;
133
+ color: var(--pvx-text-dimmed);
134
+ text-align: right;
135
+ margin: 0;
136
+ }
137
+
138
+ /* ─── Card ───────────────────────────────────────────────────── */
139
+
140
+ .pvx-card {
141
+ border-radius: var(--pvx-radius);
142
+ border: 1px solid var(--pvx-border);
143
+ background: var(--pvx-bg-card);
144
+ overflow: hidden;
145
+ }
146
+
147
+ .pvx-card-header {
148
+ padding: 0.75rem 1rem;
149
+ border-bottom: 1px solid var(--pvx-border-header);
150
+ }
151
+
152
+ .pvx-card-header--split {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: space-between;
156
+ flex-wrap: wrap;
157
+ gap: 0.75rem;
158
+ padding: 0.75rem 1rem;
159
+ border-bottom: 1px solid var(--pvx-border-header);
160
+ }
161
+
162
+ .pvx-card-header-left {
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 0.75rem;
166
+ }
167
+
168
+ .pvx-card-title {
169
+ font-size: 1.125rem;
170
+ font-weight: 600;
171
+ color: var(--pvx-text-primary);
172
+ margin: 0;
173
+ }
174
+
175
+ /* ─── Table ──────────────────────────────────────────────────── */
176
+
177
+ .pvx-table-scroll {
178
+ overflow-x: auto;
179
+ }
180
+
181
+ .pvx-table {
182
+ width: 100%;
183
+ text-align: left;
184
+ border-collapse: collapse;
185
+ }
186
+
187
+ .pvx-thead-row {
188
+ border-bottom: 1px solid var(--pvx-border);
189
+ }
190
+
191
+ .pvx-th {
192
+ padding: 0.625rem 0.75rem;
193
+ font-size: 0.75rem;
194
+ font-weight: 500;
195
+ text-transform: uppercase;
196
+ letter-spacing: 0.05em;
197
+ color: var(--pvx-text-muted);
198
+ white-space: nowrap;
199
+ text-align: left;
200
+ }
201
+
202
+ .pvx-th--sortable {
203
+ cursor: pointer;
204
+ user-select: none;
205
+ }
206
+
207
+ .pvx-th--sortable:hover {
208
+ color: var(--pvx-text);
209
+ }
210
+
211
+ .pvx-th--narrow {
212
+ width: 4rem;
213
+ }
214
+
215
+ .pvx-th-inner {
216
+ display: inline-flex;
217
+ align-items: center;
218
+ gap: 0.25rem;
219
+ }
220
+
221
+ .pvx-tbody > tr + tr {
222
+ border-top: 1px solid rgba(31, 41, 55, 0.5);
223
+ }
224
+
225
+ .pvx-row {
226
+ transition: background-color 150ms;
227
+ }
228
+
229
+ .pvx-row--clickable {
230
+ cursor: pointer;
231
+ }
232
+
233
+ .pvx-row--clickable:hover {
234
+ background: var(--pvx-bg-hover);
235
+ }
236
+
237
+ .pvx-row--podium {
238
+ background: var(--pvx-bg-podium);
239
+ }
240
+
241
+ .pvx-row--personal-best {
242
+ background: var(--pvx-bg-personal-best);
243
+ }
244
+
245
+ .pvx-row--invalid {
246
+ opacity: 0.6;
247
+ background: var(--pvx-bg-invalid);
248
+ }
249
+
250
+ .pvx-td {
251
+ padding: 0.625rem 0.75rem;
252
+ white-space: nowrap;
253
+ font-size: 0.875rem;
254
+ color: var(--pvx-text);
255
+ }
256
+
257
+ .pvx-td--primary {
258
+ font-weight: 500;
259
+ color: var(--pvx-text-primary);
260
+ }
261
+
262
+ .pvx-td--mono {
263
+ font-family: var(--pvx-font-mono);
264
+ }
265
+
266
+ .pvx-td--sector {
267
+ font-size: 0.8125rem;
268
+ }
269
+
270
+ .pvx-td--best-sector {
271
+ color: var(--pvx-sector-best);
272
+ font-weight: 600;
273
+ }
274
+
275
+ .pvx-td--center {
276
+ text-align: center;
277
+ }
278
+
279
+ .pvx-td--muted {
280
+ color: var(--pvx-text-muted);
281
+ }
282
+
283
+ /* ─── Responsive column hiding ───────────────────────────────── */
284
+
285
+ @media (max-width: 639px) {
286
+ .pvx-hidden-below-sm { display: none; }
287
+ }
288
+ @media (max-width: 767px) {
289
+ .pvx-hidden-below-md { display: none; }
290
+ }
291
+ @media (max-width: 1023px) {
292
+ .pvx-hidden-below-lg { display: none; }
293
+ }
294
+ @media (max-width: 1279px) {
295
+ .pvx-hidden-below-xl { display: none; }
296
+ }
297
+
298
+ /* ─── Sort icon ──────────────────────────────────────────────── */
299
+
300
+ .pvx-sort-icon {
301
+ width: 0.875rem;
302
+ height: 0.875rem;
303
+ flex-shrink: 0;
304
+ }
305
+
306
+ .pvx-sort-icon--inactive {
307
+ opacity: 0.4;
308
+ }
309
+
310
+ /* ─── Driver cell ────────────────────────────────────────────── */
311
+
312
+ .pvx-driver {
313
+ display: inline-flex;
314
+ align-items: center;
315
+ gap: 0.5rem;
316
+ }
317
+
318
+ .pvx-driver-avatar {
319
+ width: 1.25rem;
320
+ height: 1.25rem;
321
+ border-radius: 9999px;
322
+ flex-shrink: 0;
323
+ object-fit: cover;
324
+ }
325
+
326
+ .pvx-driver-avatar--lg {
327
+ width: 1.5rem;
328
+ height: 1.5rem;
329
+ }
330
+
331
+ .pvx-driver-avatar--placeholder {
332
+ display: inline-block;
333
+ background: #374151;
334
+ }
335
+
336
+ .pvx-driver-name {
337
+ overflow: hidden;
338
+ text-overflow: ellipsis;
339
+ white-space: nowrap;
340
+ }
341
+
342
+ /* ─── Rank badge ─────────────────────────────────────────────── */
343
+
344
+ .pvx-rank {
345
+ font-weight: 700;
346
+ color: var(--pvx-text-muted);
347
+ }
348
+
349
+ .pvx-rank--gold { color: var(--pvx-rank-gold); }
350
+ .pvx-rank--silver { color: var(--pvx-rank-silver); }
351
+ .pvx-rank--bronze { color: var(--pvx-rank-bronze); }
352
+
353
+ /* ─── Tag filter bar ─────────────────────────────────────────── */
354
+
355
+ .pvx-tag-bar {
356
+ padding: 0.5rem 1rem;
357
+ border-bottom: 1px solid var(--pvx-border);
358
+ display: flex;
359
+ flex-wrap: wrap;
360
+ align-items: center;
361
+ gap: 0.375rem;
362
+ }
363
+
364
+ .pvx-tag {
365
+ padding: 0.25rem 0.625rem;
366
+ border-radius: 9999px;
367
+ font-size: 0.75rem;
368
+ font-weight: 500;
369
+ border: none;
370
+ cursor: pointer;
371
+ transition: all 150ms;
372
+ background: var(--pvx-tag-bg);
373
+ color: var(--pvx-tag-text);
374
+ }
375
+
376
+ .pvx-tag:hover {
377
+ background: #374151;
378
+ }
379
+
380
+ .pvx-tag--active {
381
+ background: var(--pvx-tag-active-bg);
382
+ color: var(--pvx-tag-active-text);
383
+ }
384
+
385
+ .pvx-tag-separator {
386
+ width: 1px;
387
+ height: 1.25rem;
388
+ background: #374151;
389
+ margin: 0 0.125rem;
390
+ }
391
+
392
+ /* ─── Breadcrumb ─────────────────────────────────────────────── */
393
+
394
+ .pvx-breadcrumb {
395
+ display: flex;
396
+ align-items: center;
397
+ font-size: 0.875rem;
398
+ }
399
+
400
+ .pvx-breadcrumb-list {
401
+ display: flex;
402
+ align-items: center;
403
+ flex-wrap: wrap;
404
+ gap: 0.25rem;
405
+ list-style: none;
406
+ margin: 0;
407
+ padding: 0;
408
+ }
409
+
410
+ .pvx-breadcrumb-item {
411
+ display: flex;
412
+ align-items: center;
413
+ }
414
+
415
+ .pvx-breadcrumb-chevron {
416
+ width: 1rem;
417
+ height: 1rem;
418
+ color: var(--pvx-text-dimmed);
419
+ margin: 0 0.25rem;
420
+ flex-shrink: 0;
421
+ }
422
+
423
+ .pvx-breadcrumb-link {
424
+ background: none;
425
+ border: none;
426
+ padding: 0;
427
+ cursor: pointer;
428
+ color: var(--pvx-text-muted);
429
+ transition: color 150ms;
430
+ }
431
+
432
+ .pvx-breadcrumb-link:hover {
433
+ color: var(--pvx-accent-hover);
434
+ }
435
+
436
+ .pvx-breadcrumb-current {
437
+ font-weight: 500;
438
+ color: var(--pvx-text-primary);
439
+ }
440
+
441
+ /* ─── Checkbox ───────────────────────────────────────────────── */
442
+
443
+ .pvx-checkbox-label {
444
+ display: flex;
445
+ align-items: center;
446
+ gap: 0.5rem;
447
+ font-size: 0.875rem;
448
+ cursor: pointer;
449
+ color: var(--pvx-text);
450
+ }
451
+
452
+ .pvx-checkbox {
453
+ width: 1rem;
454
+ height: 1rem;
455
+ border-radius: 0.25rem;
456
+ accent-color: var(--pvx-accent);
457
+ }
458
+
459
+ /* ─── Icons ──────────────────────────────────────────────────── */
460
+
461
+ .pvx-icon {
462
+ width: 1.25rem;
463
+ height: 1.25rem;
464
+ }
465
+
466
+ .pvx-icon--valid { color: var(--pvx-valid); }
467
+ .pvx-icon--invalid { color: var(--pvx-invalid); }
468
+
469
+ /* ─── Empty & loading states ─────────────────────────────────── */
470
+
471
+ .pvx-empty {
472
+ text-align: center;
473
+ padding: 4rem 1rem;
474
+ color: var(--pvx-text-muted);
475
+ }
476
+
477
+ .pvx-empty-icon {
478
+ width: 3rem;
479
+ height: 3rem;
480
+ margin: 0 auto 1rem;
481
+ opacity: 0.5;
482
+ }
483
+
484
+ .pvx-loading {
485
+ text-align: center;
486
+ padding: 4rem 1rem;
487
+ color: var(--pvx-text-muted);
488
+ }
489
+
490
+ /* ═══════════════════════════════════════════════════════════════════════════
491
+ Competition Components
492
+ ═══════════════════════════════════════════════════════════════════════════ */
493
+
494
+ /* ─── Competition Explorer layout ───────────────────────────────── */
495
+
496
+ .pvx-comp-explorer {
497
+ display: flex;
498
+ flex-direction: column;
499
+ gap: 1.5rem;
500
+ }
501
+
502
+ /* ─── Competition Cards (Layer 1) ───────────────────────────────── */
503
+
504
+ .pvx-comp-grid {
505
+ display: grid;
506
+ grid-template-columns: 1fr;
507
+ gap: 1.5rem;
508
+ }
509
+
510
+ @media (min-width: 640px) {
511
+ .pvx-comp-grid { grid-template-columns: repeat(2, 1fr); }
512
+ }
513
+
514
+ @media (min-width: 1024px) {
515
+ .pvx-comp-grid { grid-template-columns: repeat(3, 1fr); }
516
+ }
517
+
518
+ .pvx-comp-card {
519
+ border-radius: var(--pvx-radius);
520
+ border: 1px solid var(--pvx-border);
521
+ background: var(--pvx-bg-card);
522
+ overflow: hidden;
523
+ cursor: pointer;
524
+ transition: border-color 200ms, box-shadow 200ms;
525
+ display: flex;
526
+ flex-direction: column;
527
+ }
528
+
529
+ .pvx-comp-card:hover {
530
+ border-color: var(--pvx-accent);
531
+ box-shadow: 0 0 0 1px var(--pvx-accent);
532
+ }
533
+
534
+ .pvx-comp-card:focus-visible {
535
+ outline: 2px solid var(--pvx-accent);
536
+ outline-offset: 2px;
537
+ }
538
+
539
+ .pvx-comp-card-poster {
540
+ aspect-ratio: 16 / 9;
541
+ background: #0d1117;
542
+ overflow: hidden;
543
+ }
544
+
545
+ .pvx-comp-card-poster-img {
546
+ width: 100%;
547
+ height: 100%;
548
+ object-fit: cover;
549
+ }
550
+
551
+ .pvx-comp-card-poster-placeholder {
552
+ width: 100%;
553
+ height: 100%;
554
+ display: flex;
555
+ align-items: center;
556
+ justify-content: center;
557
+ }
558
+
559
+ .pvx-comp-trophy-icon {
560
+ width: 3rem;
561
+ height: 3rem;
562
+ color: var(--pvx-text-dimmed);
563
+ }
564
+
565
+ .pvx-comp-card-body {
566
+ padding: 1rem;
567
+ display: flex;
568
+ flex-direction: column;
569
+ gap: 0.5rem;
570
+ flex: 1;
571
+ }
572
+
573
+ .pvx-comp-card-title {
574
+ font-size: 1.125rem;
575
+ font-weight: 600;
576
+ color: var(--pvx-text-primary);
577
+ margin: 0;
578
+ overflow: hidden;
579
+ text-overflow: ellipsis;
580
+ white-space: nowrap;
581
+ }
582
+
583
+ .pvx-comp-card-desc {
584
+ font-size: 0.8125rem;
585
+ color: var(--pvx-text-muted);
586
+ margin: 0;
587
+ display: -webkit-box;
588
+ -webkit-line-clamp: 2;
589
+ -webkit-box-orient: vertical;
590
+ overflow: hidden;
591
+ }
592
+
593
+ .pvx-comp-card-pills {
594
+ display: flex;
595
+ flex-wrap: wrap;
596
+ gap: 0.375rem;
597
+ }
598
+
599
+ .pvx-comp-card-schedule {
600
+ display: flex;
601
+ flex-wrap: wrap;
602
+ align-items: center;
603
+ gap: 0.5rem;
604
+ font-size: 0.75rem;
605
+ color: var(--pvx-text-muted);
606
+ padding-top: 0.5rem;
607
+ border-top: 1px solid var(--pvx-border);
608
+ }
609
+
610
+ .pvx-comp-card-schedule-label {
611
+ color: var(--pvx-accent);
612
+ font-weight: 600;
613
+ }
614
+
615
+ .pvx-comp-card-schedule-next {
616
+ flex: 1;
617
+ min-width: 0;
618
+ overflow: hidden;
619
+ text-overflow: ellipsis;
620
+ white-space: nowrap;
621
+ }
622
+
623
+ .pvx-comp-card-round-count {
624
+ flex-shrink: 0;
625
+ color: var(--pvx-text-dimmed);
626
+ }
627
+
628
+ .pvx-comp-card-reg {
629
+ display: flex;
630
+ align-items: center;
631
+ justify-content: space-between;
632
+ gap: 0.5rem;
633
+ padding-top: 0.5rem;
634
+ border-top: 1px solid var(--pvx-border);
635
+ }
636
+
637
+ /* ─── Competition badges & pills ────────────────────────────────── */
638
+
639
+ .pvx-comp-badge {
640
+ display: inline-block;
641
+ padding: 0.125rem 0.5rem;
642
+ border-radius: 9999px;
643
+ font-size: 0.6875rem;
644
+ font-weight: 600;
645
+ text-transform: uppercase;
646
+ letter-spacing: 0.03em;
647
+ }
648
+
649
+ .pvx-comp-badge--championship {
650
+ background: rgba(99, 102, 241, 0.2);
651
+ color: #818cf8;
652
+ }
653
+
654
+ .pvx-comp-badge--series {
655
+ background: rgba(245, 158, 11, 0.2);
656
+ color: #fbbf24;
657
+ }
658
+
659
+ .pvx-comp-badge--event {
660
+ background: rgba(34, 197, 94, 0.2);
661
+ color: #4ade80;
662
+ }
663
+
664
+ .pvx-info-pill {
665
+ display: inline-block;
666
+ padding: 0.125rem 0.5rem;
667
+ border-radius: 0.25rem;
668
+ font-size: 0.6875rem;
669
+ font-weight: 500;
670
+ background: var(--pvx-tag-bg);
671
+ color: var(--pvx-tag-text);
672
+ }
673
+
674
+ .pvx-info-pill--format {
675
+ background: rgba(59, 130, 246, 0.15);
676
+ color: #93c5fd;
677
+ }
678
+
679
+ /* ─── Registration badges ───────────────────────────────────────── */
680
+
681
+ .pvx-comp-reg-badge {
682
+ display: inline-block;
683
+ padding: 0.125rem 0.5rem;
684
+ border-radius: 9999px;
685
+ font-size: 0.6875rem;
686
+ font-weight: 600;
687
+ }
688
+
689
+ .pvx-comp-reg-badge--open {
690
+ background: rgba(34, 197, 94, 0.2);
691
+ color: #4ade80;
692
+ }
693
+
694
+ .pvx-comp-reg-badge--closed {
695
+ background: rgba(107, 114, 128, 0.2);
696
+ color: #9ca3af;
697
+ }
698
+
699
+ .pvx-comp-reg-badge--full {
700
+ background: rgba(239, 68, 68, 0.2);
701
+ color: #f87171;
702
+ }
703
+
704
+ .pvx-comp-reg-count {
705
+ font-size: 0.75rem;
706
+ color: var(--pvx-text-muted);
707
+ }
708
+
709
+ /* ─── Competition detail header ─────────────────────────────────── */
710
+
711
+ .pvx-comp-back-link {
712
+ display: inline-block;
713
+ background: none;
714
+ border: none;
715
+ padding: 0;
716
+ cursor: pointer;
717
+ font-size: 0.875rem;
718
+ color: var(--pvx-text-muted);
719
+ transition: color 150ms;
720
+ }
721
+
722
+ .pvx-comp-back-link:hover {
723
+ color: var(--pvx-accent-hover);
724
+ }
725
+
726
+ .pvx-comp-back-link-wrap {
727
+ text-align: center;
728
+ margin-top: 1rem;
729
+ }
730
+
731
+ .pvx-comp-detail-header {
732
+ display: flex;
733
+ flex-direction: column;
734
+ gap: 0.5rem;
735
+ }
736
+
737
+ .pvx-comp-detail-desc {
738
+ font-size: 0.9375rem;
739
+ color: var(--pvx-text);
740
+ margin: 0;
741
+ }
742
+
743
+ .pvx-comp-detail-meta {
744
+ display: flex;
745
+ flex-wrap: wrap;
746
+ align-items: center;
747
+ gap: 0.5rem;
748
+ }
749
+
750
+ /* ─── Competition tabs ──────────────────────────────────────────── */
751
+
752
+ .pvx-comp-tabs {
753
+ display: flex;
754
+ gap: 0.125rem;
755
+ border-bottom: 1px solid var(--pvx-border);
756
+ }
757
+
758
+ .pvx-comp-tab {
759
+ padding: 0.625rem 1rem;
760
+ font-size: 0.875rem;
761
+ font-weight: 500;
762
+ border: none;
763
+ border-bottom: 2px solid transparent;
764
+ background: none;
765
+ cursor: pointer;
766
+ color: var(--pvx-text-muted);
767
+ transition: color 150ms, border-color 150ms;
768
+ margin-bottom: -1px;
769
+ }
770
+
771
+ .pvx-comp-tab:hover {
772
+ color: var(--pvx-text);
773
+ }
774
+
775
+ .pvx-comp-tab--active {
776
+ color: var(--pvx-text-primary);
777
+ border-bottom-color: var(--pvx-accent);
778
+ }
779
+
780
+ /* ─── Schedule strip ────────────────────────────────────────────── */
781
+
782
+ .pvx-comp-schedule {
783
+ overflow-x: auto;
784
+ padding-bottom: 0.25rem;
785
+ }
786
+
787
+ .pvx-comp-schedule-list {
788
+ display: flex;
789
+ gap: 0.5rem;
790
+ min-width: min-content;
791
+ }
792
+
793
+ .pvx-comp-schedule-item {
794
+ display: flex;
795
+ flex-direction: column;
796
+ align-items: center;
797
+ gap: 0.125rem;
798
+ padding: 0.5rem 0.75rem;
799
+ border-radius: var(--pvx-radius-sm);
800
+ background: var(--pvx-tag-bg);
801
+ font-size: 0.75rem;
802
+ white-space: nowrap;
803
+ min-width: 7rem;
804
+ text-align: center;
805
+ border: 1px solid transparent;
806
+ }
807
+
808
+ .pvx-comp-schedule-item--next {
809
+ border-color: var(--pvx-accent);
810
+ background: rgba(99, 102, 241, 0.1);
811
+ }
812
+
813
+ .pvx-comp-schedule-item--past {
814
+ opacity: 0.5;
815
+ }
816
+
817
+ .pvx-comp-schedule-round {
818
+ font-weight: 700;
819
+ color: var(--pvx-accent);
820
+ }
821
+
822
+ .pvx-comp-schedule-track {
823
+ font-weight: 500;
824
+ color: var(--pvx-text-primary);
825
+ }
826
+
827
+ .pvx-comp-schedule-date {
828
+ color: var(--pvx-text-muted);
829
+ }
830
+
831
+ .pvx-comp-schedule-badge {
832
+ font-size: 0.625rem;
833
+ font-weight: 600;
834
+ text-transform: uppercase;
835
+ color: var(--pvx-valid);
836
+ }
837
+
838
+ /* ─── Standings table ───────────────────────────────────────────── */
839
+
840
+ .pvx-standings-subtitle {
841
+ font-size: 0.8125rem;
842
+ font-weight: 400;
843
+ color: var(--pvx-text-muted);
844
+ }
845
+
846
+ .pvx-standings-total {
847
+ font-weight: 700;
848
+ font-size: 1rem;
849
+ }
850
+
851
+ .pvx-standings-cell--podium {
852
+ background: var(--pvx-bg-podium);
853
+ }
854
+
855
+ .pvx-standings-round-cell {
856
+ display: flex;
857
+ flex-direction: column;
858
+ align-items: center;
859
+ gap: 0;
860
+ line-height: 1.25;
861
+ }
862
+
863
+ .pvx-standings-round-cell--dropped {
864
+ opacity: 0.4;
865
+ text-decoration: line-through;
866
+ }
867
+
868
+ .pvx-standings-round-pos {
869
+ font-size: 0.6875rem;
870
+ color: var(--pvx-text-muted);
871
+ }
872
+
873
+ .pvx-standings-round-pts {
874
+ font-size: 0.8125rem;
875
+ font-weight: 500;
876
+ }
877
+
878
+ /* ─── Nation flag ────────────────────────────────────────────────── */
879
+
880
+ .pvx-nation-flag {
881
+ margin-right: 0.375rem;
882
+ }
883
+
884
+ /* ─── Round results ─────────────────────────────────────────────── */
885
+
886
+ .pvx-round-results {
887
+ display: flex;
888
+ flex-direction: column;
889
+ gap: 0.75rem;
890
+ }
891
+
892
+ .pvx-round-results-header {
893
+ display: flex;
894
+ flex-wrap: wrap;
895
+ align-items: flex-start;
896
+ justify-content: space-between;
897
+ gap: 0.75rem;
898
+ }
899
+
900
+ .pvx-round-results-title {
901
+ font-size: 1rem;
902
+ font-weight: 600;
903
+ color: var(--pvx-text-primary);
904
+ margin: 0;
905
+ }
906
+
907
+ .pvx-round-results-date {
908
+ font-size: 0.8125rem;
909
+ color: var(--pvx-text-muted);
910
+ margin: 0;
911
+ }
912
+
913
+ .pvx-round-podium-summary {
914
+ display: flex;
915
+ align-items: center;
916
+ gap: 0.75rem;
917
+ font-size: 0.8125rem;
918
+ color: var(--pvx-text-muted);
919
+ }
920
+
921
+ .pvx-round-podium-item {
922
+ display: inline-flex;
923
+ align-items: center;
924
+ gap: 0.25rem;
925
+ }
926
+
927
+ /* ─── Session tabs ──────────────────────────────────────────────── */
928
+
929
+ .pvx-session-tabs {
930
+ display: flex;
931
+ gap: 0.25rem;
932
+ background: var(--pvx-tag-bg);
933
+ border-radius: var(--pvx-radius-sm);
934
+ padding: 0.125rem;
935
+ width: fit-content;
936
+ }
937
+
938
+ .pvx-session-tab {
939
+ padding: 0.375rem 0.75rem;
940
+ border-radius: 0.375rem;
941
+ font-size: 0.75rem;
942
+ font-weight: 600;
943
+ text-transform: uppercase;
944
+ letter-spacing: 0.03em;
945
+ border: none;
946
+ cursor: pointer;
947
+ transition: all 150ms;
948
+ background: transparent;
949
+ color: var(--pvx-text-muted);
950
+ }
951
+
952
+ .pvx-session-tab:hover {
953
+ color: var(--pvx-text-primary);
954
+ }
955
+
956
+ .pvx-session-tab--active {
957
+ background: var(--pvx-accent);
958
+ color: #fff;
959
+ }
960
+
961
+ /* ─── Session result row extras ─────────────────────────────────── */
962
+
963
+ .pvx-car-number {
964
+ font-size: 0.75rem;
965
+ color: var(--pvx-text-muted);
966
+ margin-left: 0.375rem;
967
+ }
968
+
969
+ .pvx-penalty {
970
+ font-size: 0.75rem;
971
+ font-weight: 500;
972
+ color: var(--pvx-invalid);
973
+ margin-left: 0.375rem;
974
+ }
975
+
976
+ .pvx-session-points {
977
+ font-weight: 700;
978
+ }
979
+
980
+ .pvx-points-override {
981
+ font-size: 0.75rem;
982
+ color: var(--pvx-text-muted);
983
+ margin-left: 0.25rem;
984
+ }
985
+
986
+ /* ─── Best lap cell with sector tooltip ─────────────────────────── */
987
+
988
+ .pvx-best-lap-cell {
989
+ position: relative;
990
+ display: inline-flex;
991
+ align-items: center;
992
+ }
993
+
994
+ .pvx-best-lap-cell--fastest .pvx-best-lap-time {
995
+ color: var(--pvx-sector-best);
996
+ font-weight: 700;
997
+ }
998
+
999
+ .pvx-splits-tooltip-anchor {
1000
+ position: relative;
1001
+ display: inline-block;
1002
+ }
1003
+
1004
+ .pvx-splits-tooltip {
1005
+ pointer-events: none;
1006
+ position: absolute;
1007
+ left: 0;
1008
+ top: 100%;
1009
+ margin-top: 0.25rem;
1010
+ z-index: 10;
1011
+ padding: 0.375rem 0.625rem;
1012
+ background: #111827;
1013
+ border: 1px solid var(--pvx-border);
1014
+ border-radius: var(--pvx-radius-sm);
1015
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
1016
+ opacity: 0;
1017
+ transition: opacity 150ms;
1018
+ white-space: nowrap;
1019
+ font-size: 0.75rem;
1020
+ font-family: var(--pvx-font-mono);
1021
+ }
1022
+
1023
+ .pvx-splits-tooltip--above {
1024
+ top: auto;
1025
+ bottom: 100%;
1026
+ margin-top: 0;
1027
+ margin-bottom: 0.25rem;
1028
+ }
1029
+
1030
+ .pvx-best-lap-cell:hover .pvx-splits-tooltip {
1031
+ opacity: 1;
1032
+ }
1033
+
1034
+ .pvx-splits-tooltip-row {
1035
+ display: flex;
1036
+ justify-content: space-between;
1037
+ gap: 0.75rem;
1038
+ }
1039
+
1040
+ .pvx-splits-tooltip-label {
1041
+ color: var(--pvx-text-muted);
1042
+ }
1043
+
1044
+ .pvx-splits-tooltip-best {
1045
+ color: var(--pvx-sector-best);
1046
+ font-weight: 700;
1047
+ }
1048
+
1049
+ /* ─── Round selector pills ──────────────────────────────────────── */
1050
+
1051
+ .pvx-comp-rounds {
1052
+ display: flex;
1053
+ flex-direction: column;
1054
+ gap: 1rem;
1055
+ }
1056
+
1057
+ .pvx-comp-round-pills {
1058
+ display: flex;
1059
+ flex-wrap: wrap;
1060
+ gap: 0.5rem;
1061
+ }
1062
+
1063
+ .pvx-comp-round-pill {
1064
+ display: flex;
1065
+ align-items: center;
1066
+ gap: 0.375rem;
1067
+ padding: 0.5rem 0.75rem;
1068
+ border-radius: var(--pvx-radius-sm);
1069
+ border: 1px solid var(--pvx-border);
1070
+ background: var(--pvx-bg-card);
1071
+ cursor: pointer;
1072
+ transition: all 150ms;
1073
+ font-size: 0.8125rem;
1074
+ color: var(--pvx-text);
1075
+ }
1076
+
1077
+ .pvx-comp-round-pill:hover {
1078
+ border-color: var(--pvx-accent);
1079
+ }
1080
+
1081
+ .pvx-comp-round-pill--active {
1082
+ background: var(--pvx-accent);
1083
+ border-color: var(--pvx-accent);
1084
+ color: #fff;
1085
+ }
1086
+
1087
+ .pvx-comp-round-pill-num {
1088
+ font-weight: 700;
1089
+ }
1090
+
1091
+ .pvx-comp-round-pill-track {
1092
+ font-weight: 400;
1093
+ opacity: 0.8;
1094
+ }
1095
+
1096
+ /* ─── Entry list grid ───────────────────────────────────────────── */
1097
+
1098
+ .pvx-entry-grid {
1099
+ display: grid;
1100
+ grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
1101
+ gap: 0.75rem;
1102
+ }
1103
+
1104
+ .pvx-entry-card {
1105
+ display: flex;
1106
+ align-items: center;
1107
+ gap: 0.625rem;
1108
+ padding: 0.75rem;
1109
+ border-radius: var(--pvx-radius-sm);
1110
+ border: 1px solid var(--pvx-border);
1111
+ background: var(--pvx-bg-card);
1112
+ }
1113
+
1114
+ .pvx-entry-avatar {
1115
+ width: 2.25rem;
1116
+ height: 2.25rem;
1117
+ border-radius: 9999px;
1118
+ flex-shrink: 0;
1119
+ object-fit: cover;
1120
+ }
1121
+
1122
+ .pvx-entry-avatar--placeholder {
1123
+ display: flex;
1124
+ align-items: center;
1125
+ justify-content: center;
1126
+ background: #374151;
1127
+ color: var(--pvx-text);
1128
+ font-size: 0.875rem;
1129
+ font-weight: 600;
1130
+ }
1131
+
1132
+ .pvx-entry-name {
1133
+ font-size: 0.875rem;
1134
+ font-weight: 500;
1135
+ color: var(--pvx-text-primary);
1136
+ overflow: hidden;
1137
+ text-overflow: ellipsis;
1138
+ white-space: nowrap;
1139
+ }