@cs2dak/react 0.2.1 → 1.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.
package/src/theme.css CHANGED
@@ -151,6 +151,64 @@
151
151
  background: linear-gradient(180deg, rgba(255, 122, 33, 0.2), rgba(255, 122, 33, 0.08));
152
152
  }
153
153
 
154
+ .dak-finding-panel {
155
+ display: grid;
156
+ gap: 9px;
157
+ padding: 14px;
158
+ border: 1px solid var(--dak-border-hi);
159
+ border-radius: 8px;
160
+ background: var(--dak-panel);
161
+ }
162
+
163
+ .dak-finding-head {
164
+ display: flex;
165
+ align-items: start;
166
+ justify-content: space-between;
167
+ gap: 12px;
168
+ }
169
+
170
+ .dak-finding-head small,
171
+ .dak-finding-meta,
172
+ .dak-limit-note {
173
+ color: var(--dak-fg-dim);
174
+ font-size: 11px;
175
+ }
176
+
177
+ .dak-finding-head h3,
178
+ .dak-finding-panel p {
179
+ margin: 0;
180
+ }
181
+
182
+ .dak-finding-head h3 {
183
+ margin-top: 3px;
184
+ font-size: 14px;
185
+ }
186
+
187
+ .dak-finding-meta {
188
+ display: flex;
189
+ flex-wrap: wrap;
190
+ gap: 10px;
191
+ }
192
+
193
+ .dak-limit-note {
194
+ margin: 0;
195
+ line-height: 1.45;
196
+ }
197
+
198
+ .dak-limit-note b {
199
+ margin-right: 6px;
200
+ color: var(--dak-fg-mid);
201
+ }
202
+
203
+ .dak-leaderboard .dak-col-sortable {
204
+ cursor: pointer;
205
+ }
206
+
207
+ .dak-leaderboard .dak-col-sorted {
208
+ color: var(--dak-fg);
209
+ background: rgba(255, 122, 33, 0.08);
210
+ }
211
+
154
212
  .dak-grid {
155
213
  display: grid;
156
214
  grid-template-columns: minmax(0, 1.24fr) minmax(380px, 0.76fr);
@@ -209,6 +267,11 @@
209
267
  font-size: 13px;
210
268
  }
211
269
 
270
+ .dak-table-scroll {
271
+ max-width: 100%;
272
+ overflow-x: auto;
273
+ }
274
+
212
275
  .dak-table th,
213
276
  .dak-table td {
214
277
  border-bottom: 1px solid var(--dak-border);
@@ -291,6 +354,213 @@
291
354
  border-radius: 50%;
292
355
  }
293
356
 
357
+ /* ── 队伍对比(TeamComparisonPanel) ── */
358
+
359
+ .dak-team-compare {
360
+ min-width: 0;
361
+ }
362
+
363
+ .dak-team-compare-grid {
364
+ display: grid;
365
+ grid-template-columns: minmax(180px, 0.9fr) minmax(200px, 1.2fr) minmax(180px, 0.9fr);
366
+ gap: 14px;
367
+ align-items: start;
368
+ }
369
+
370
+ .dak-team-side {
371
+ min-width: 0;
372
+ }
373
+
374
+ .dak-team-side h3 {
375
+ margin: 0 0 8px;
376
+ font-size: 13px;
377
+ font-weight: 700;
378
+ }
379
+
380
+ .dak-team-side table {
381
+ width: 100%;
382
+ border-collapse: collapse;
383
+ font-size: 12px;
384
+ }
385
+
386
+ .dak-team-side th,
387
+ .dak-team-side td {
388
+ padding: 5px 4px;
389
+ border-bottom: 1px solid var(--dak-border);
390
+ text-align: right;
391
+ white-space: nowrap;
392
+ }
393
+
394
+ .dak-team-side th:first-child,
395
+ .dak-team-side td:first-child {
396
+ text-align: left;
397
+ min-width: 60px;
398
+ }
399
+
400
+ .dak-team-side th {
401
+ color: var(--dak-fg-dim);
402
+ font-size: 10px;
403
+ text-transform: uppercase;
404
+ letter-spacing: 0.08em;
405
+ }
406
+
407
+ .dak-team-weapons,
408
+ .dak-team-economy {
409
+ display: flex;
410
+ flex-wrap: wrap;
411
+ gap: 4px;
412
+ margin-top: 8px;
413
+ }
414
+
415
+ .dak-team-weapons span,
416
+ .dak-team-economy span {
417
+ min-height: 22px;
418
+ display: inline-flex;
419
+ align-items: center;
420
+ gap: 4px;
421
+ padding: 0 7px;
422
+ border: 1px solid var(--dak-border);
423
+ border-radius: 3px;
424
+ background: var(--dak-bg-subtle);
425
+ color: var(--dak-fg-mid);
426
+ font-size: 11px;
427
+ }
428
+
429
+ .dak-team-weapons b,
430
+ .dak-team-economy b {
431
+ color: var(--dak-fg);
432
+ }
433
+
434
+ /* 雷达对比行 */
435
+ .dak-team-radar {
436
+ min-width: 0;
437
+ display: grid;
438
+ gap: 6px;
439
+ }
440
+
441
+ .dak-team-radar-row {
442
+ display: grid;
443
+ grid-template-columns: minmax(64px, 0.5fr) 44px minmax(0, 1fr) 44px 44px;
444
+ gap: 6px;
445
+ align-items: center;
446
+ font-size: 12px;
447
+ }
448
+
449
+ .dak-team-radar-row span {
450
+ color: var(--dak-fg-mid);
451
+ font-size: 11px;
452
+ overflow: hidden;
453
+ text-overflow: ellipsis;
454
+ white-space: nowrap;
455
+ }
456
+
457
+ .dak-team-radar-row b {
458
+ text-align: right;
459
+ font-family: var(--dak-mono);
460
+ font-variant-numeric: tabular-nums;
461
+ }
462
+
463
+ .dak-team-radar-row i {
464
+ display: block;
465
+ height: 7px;
466
+ border-radius: 4px;
467
+ background: linear-gradient(90deg, var(--dak-accent), var(--dak-accent-b));
468
+ min-width: 4%;
469
+ }
470
+
471
+ .dak-team-radar-row em {
472
+ font-style: normal;
473
+ color: var(--dak-fg-dim);
474
+ text-align: right;
475
+ font-family: var(--dak-mono);
476
+ font-size: 11px;
477
+ }
478
+
479
+ /* 选队下拉(A vs B) */
480
+ .dak-team-picker {
481
+ display: flex;
482
+ align-items: center;
483
+ gap: 10px;
484
+ margin-bottom: 12px;
485
+ }
486
+
487
+ .dak-team-picker-vs {
488
+ color: var(--dak-fg-dim);
489
+ font-size: 11px;
490
+ letter-spacing: 0.12em;
491
+ }
492
+
493
+ .dak-team-select {
494
+ flex: 1;
495
+ min-width: 0;
496
+ height: 30px;
497
+ padding: 0 8px;
498
+ border: 1px solid var(--dak-border);
499
+ border-radius: 3px;
500
+ background: var(--dak-bg-subtle);
501
+ color: var(--dak-fg);
502
+ font: inherit;
503
+ font-size: 12px;
504
+ }
505
+
506
+ .dak-team-select:disabled {
507
+ opacity: 0.7;
508
+ }
509
+
510
+ /* 该队比赛列表(赛前侦察素材,可点跳回放) */
511
+ .dak-team-matches {
512
+ display: grid;
513
+ gap: 4px;
514
+ margin-top: 10px;
515
+ }
516
+
517
+ .dak-team-match {
518
+ display: grid;
519
+ grid-template-columns: auto minmax(0, 1fr) auto;
520
+ align-items: center;
521
+ gap: 8px;
522
+ padding: 5px 8px;
523
+ border: 1px solid var(--dak-border);
524
+ border-radius: 3px;
525
+ background: var(--dak-bg-subtle);
526
+ color: var(--dak-fg-mid);
527
+ cursor: pointer;
528
+ font: inherit;
529
+ font-size: 11px;
530
+ text-align: left;
531
+ }
532
+
533
+ .dak-team-match:hover:not(:disabled) {
534
+ color: var(--dak-fg);
535
+ border-color: var(--dak-border-hi);
536
+ background: var(--dak-accent-soft);
537
+ }
538
+
539
+ .dak-team-match:disabled {
540
+ cursor: default;
541
+ }
542
+
543
+ .dak-team-match-opp {
544
+ overflow: hidden;
545
+ text-overflow: ellipsis;
546
+ white-space: nowrap;
547
+ }
548
+
549
+ .dak-team-match small {
550
+ color: var(--dak-fg-dim);
551
+ font-variant-numeric: tabular-nums;
552
+ }
553
+
554
+ .dak-team-match-win {
555
+ color: var(--dak-pos, #4caf7d);
556
+ font-weight: 700;
557
+ }
558
+
559
+ .dak-team-match-loss {
560
+ color: var(--dak-neg, #d2685a);
561
+ font-weight: 700;
562
+ }
563
+
294
564
  .dak-muted {
295
565
  color: var(--dak-fg-mid);
296
566
  }
@@ -378,6 +648,20 @@
378
648
  overflow: hidden;
379
649
  }
380
650
 
651
+ .dak-radar-field-map {
652
+ background-color: #0f151d;
653
+ }
654
+
655
+ .dak-radar-field-map::after {
656
+ content: "";
657
+ position: absolute;
658
+ inset: 0;
659
+ z-index: 2;
660
+ pointer-events: none;
661
+ border: 1px solid rgba(255, 255, 255, 0.05);
662
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.35);
663
+ }
664
+
381
665
  /* ── Heatmap wrap: vertical layout (filters / radar / tuning) ── */
382
666
  .dak-heatmap-wrap {
383
667
  display: flex;
@@ -421,6 +705,11 @@
421
705
 
422
706
  .dak-sf-chip:hover { color: var(--dak-fg); border-color: rgba(255,255,255,0.24); }
423
707
 
708
+ .dak-sf-chip:disabled {
709
+ cursor: not-allowed;
710
+ opacity: 0.42;
711
+ }
712
+
424
713
  .dak-sf-chip-active {
425
714
  color: var(--dak-fg);
426
715
  border-color: rgba(255,255,255,0.35);
@@ -453,6 +742,27 @@
453
742
  accent-color: var(--dak-accent);
454
743
  }
455
744
 
745
+ .dak-radar-timebar {
746
+ grid-template-columns: auto minmax(0, 1fr) auto;
747
+ align-items: center;
748
+ }
749
+
750
+ .dak-radar-play-button {
751
+ width: 36px;
752
+ height: 36px;
753
+ }
754
+
755
+ .dak-radar-time-slider {
756
+ min-width: 0;
757
+ }
758
+
759
+ .dak-radar-time-meta {
760
+ color: var(--dak-fg-dim);
761
+ font-family: var(--dak-mono);
762
+ font-size: 11px;
763
+ white-space: nowrap;
764
+ }
765
+
456
766
  .dak-mode {
457
767
  display: inline-flex;
458
768
  align-items: center;
@@ -555,6 +865,19 @@
555
865
  background: rgba(255,255,255,0.10);
556
866
  }
557
867
 
868
+ .dak-empty-state {
869
+ display: grid;
870
+ gap: 8px;
871
+ min-height: 220px;
872
+ align-content: center;
873
+ text-align: center;
874
+ }
875
+
876
+ .dak-empty-state h2,
877
+ .dak-empty-state p {
878
+ margin: 0;
879
+ }
880
+
558
881
  .dak-radar-schematic {
559
882
  position: absolute;
560
883
  inset: 0;
@@ -712,6 +1035,16 @@
712
1035
  background: linear-gradient(to right, blue, cyan, lime, yellow, red);
713
1036
  }
714
1037
 
1038
+ .dak-legend-radar-field {
1039
+ width: 44px;
1040
+ height: 6px;
1041
+ border-radius: 999px;
1042
+ }
1043
+
1044
+ .dak-legend-radar-field {
1045
+ background: linear-gradient(to right, rgb(34,47,86), rgb(48,91,145), rgb(48,145,176), rgb(103,188,146), rgb(220,174,82), rgb(245,128,86));
1046
+ }
1047
+
715
1048
  .dak-legend-warm { display: none; }
716
1049
 
717
1050
  .dak-qa {
@@ -986,27 +1319,104 @@
986
1319
  height: 8px;
987
1320
  }
988
1321
 
989
- .dak-replay-stage {
990
- position: relative;
991
- min-height: 520px;
992
- overflow: hidden;
1322
+ .dak-rr-explain {
1323
+ display: grid;
1324
+ gap: 10px;
1325
+ margin-top: 12px;
1326
+ padding: 12px;
993
1327
  border: 1px solid var(--dak-border);
994
- border-radius: 4px;
995
- background:
996
- linear-gradient(rgba(238, 243, 248, 0.04) 1px, transparent 1px),
997
- linear-gradient(90deg, rgba(238, 243, 248, 0.04) 1px, transparent 1px),
998
- radial-gradient(circle at 50% 50%, rgba(73, 182, 255, 0.08), transparent 48%),
999
- #07090d;
1000
- background-size: cover;
1001
- background-position: center;
1002
- background-repeat: no-repeat;
1328
+ border-radius: 8px;
1329
+ background: var(--dak-panel);
1003
1330
  }
1004
1331
 
1005
- .dak-replay-token {
1006
- position: absolute;
1007
- width: 26px;
1008
- height: 26px;
1009
- transform: translate(-50%, -50%);
1332
+ .dak-rr-explain-head,
1333
+ .dak-rr-status {
1334
+ display: flex;
1335
+ align-items: center;
1336
+ gap: 10px;
1337
+ flex-wrap: wrap;
1338
+ }
1339
+
1340
+ .dak-rr-explain-head span {
1341
+ color: var(--dak-fg-mid);
1342
+ font-size: 12px;
1343
+ }
1344
+
1345
+ .dak-rr-explain-head small,
1346
+ .dak-rr-status span {
1347
+ color: var(--dak-fg-dim);
1348
+ font-size: 11px;
1349
+ }
1350
+
1351
+ .dak-rr-metric-groups {
1352
+ display: grid;
1353
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1354
+ gap: 12px;
1355
+ }
1356
+
1357
+ .dak-rr-metric-group h4 {
1358
+ margin: 0 0 6px;
1359
+ color: var(--dak-fg-mid);
1360
+ font-size: 11px;
1361
+ letter-spacing: 0.08em;
1362
+ text-transform: uppercase;
1363
+ }
1364
+
1365
+ .dak-rr-metric-row {
1366
+ display: grid;
1367
+ grid-template-columns: minmax(86px, 1fr) minmax(72px, 1.4fr) 48px;
1368
+ align-items: center;
1369
+ gap: 8px;
1370
+ min-height: 22px;
1371
+ color: var(--dak-fg-mid);
1372
+ font-size: 11px;
1373
+ }
1374
+
1375
+ .dak-rr-metric-track {
1376
+ height: 5px;
1377
+ overflow: hidden;
1378
+ border-radius: 99px;
1379
+ background: rgba(255, 255, 255, 0.08);
1380
+ }
1381
+
1382
+ .dak-rr-metric-track i {
1383
+ display: block;
1384
+ height: 100%;
1385
+ border-radius: inherit;
1386
+ background: linear-gradient(90deg, var(--dak-accent), var(--dak-accent-b));
1387
+ }
1388
+
1389
+ .dak-rr-metric-row b {
1390
+ text-align: right;
1391
+ color: var(--dak-fg);
1392
+ font-size: 11px;
1393
+ }
1394
+
1395
+ .dak-replay-stage {
1396
+ position: relative;
1397
+ /* 雷达图与回放坐标都以正方形为基准:强制 1:1 防止容器变窄时左右被裁剪 */
1398
+ aspect-ratio: 1 / 1;
1399
+ width: min(100%, calc(100vh - 240px));
1400
+ min-width: 320px;
1401
+ margin: 0 auto;
1402
+ overflow: hidden;
1403
+ border: 1px solid var(--dak-border);
1404
+ border-radius: 4px;
1405
+ background:
1406
+ linear-gradient(rgba(238, 243, 248, 0.04) 1px, transparent 1px),
1407
+ linear-gradient(90deg, rgba(238, 243, 248, 0.04) 1px, transparent 1px),
1408
+ radial-gradient(circle at 50% 50%, rgba(73, 182, 255, 0.08), transparent 48%),
1409
+ #07090d;
1410
+ background-size: 100% 100%;
1411
+ background-position: center;
1412
+ background-repeat: no-repeat;
1413
+ }
1414
+
1415
+ .dak-replay-token {
1416
+ position: absolute;
1417
+ width: 26px;
1418
+ height: 26px;
1419
+ transform: translate(-50%, -50%);
1010
1420
  display: grid;
1011
1421
  place-items: center;
1012
1422
  border: 2px solid rgba(238, 243, 248, 0.8);
@@ -1038,67 +1448,49 @@
1038
1448
  text-transform: uppercase;
1039
1449
  }
1040
1450
 
1041
- .dak-workbench {
1042
- display: grid;
1043
- grid-template-columns: 238px minmax(0, 1fr);
1044
- gap: 14px;
1045
- align-items: start;
1046
- }
1047
-
1048
- .dak-workbench-sidebar {
1049
- position: sticky;
1050
- top: 12px;
1051
- min-width: 0;
1052
- }
1053
-
1054
- .dak-workbench-main {
1055
- min-width: 0;
1056
- }
1057
-
1058
- .dak-tabs {
1059
- display: grid;
1060
- gap: 7px;
1061
- margin: 0;
1062
- overflow: visible;
1451
+ /* 比赛工作台:顶部横向分段导航 + 单一全宽主区(一次一个视图,无重叠) */
1452
+ .dak-ws-nav {
1453
+ display: flex;
1454
+ flex-wrap: wrap;
1455
+ gap: 6px;
1456
+ padding: 6px;
1457
+ border: 1px solid var(--dak-border);
1458
+ border-radius: 10px;
1459
+ background: var(--dak-panel);
1063
1460
  }
1064
1461
 
1065
- .dak-tab {
1066
- width: 100%;
1067
- display: grid;
1068
- grid-template-columns: 24px minmax(0, 1fr);
1069
- grid-template-areas:
1070
- "icon label"
1071
- "icon detail";
1462
+ .dak-ws-navtab {
1463
+ display: inline-flex;
1072
1464
  align-items: center;
1073
- gap: 1px 9px;
1074
- min-height: 54px;
1075
- padding: 8px 10px;
1076
- text-align: left;
1465
+ gap: 6px;
1466
+ padding: 7px 14px;
1467
+ border: 1px solid transparent;
1468
+ border-radius: 7px;
1469
+ background: transparent;
1470
+ color: var(--dak-fg-dim);
1471
+ font-family: inherit;
1472
+ font-size: 13px;
1473
+ font-weight: 600;
1474
+ cursor: pointer;
1077
1475
  }
1078
1476
 
1079
- .dak-tab svg {
1080
- grid-area: icon;
1477
+ .dak-ws-navtab svg {
1478
+ flex: 0 0 auto;
1081
1479
  }
1082
1480
 
1083
- .dak-tab span {
1084
- grid-area: label;
1085
- min-width: 0;
1086
- overflow: hidden;
1087
- text-overflow: ellipsis;
1088
- white-space: nowrap;
1481
+ .dak-ws-navtab:hover {
1089
1482
  color: var(--dak-fg);
1090
- font-weight: 800;
1483
+ background: var(--dak-bg-subtle);
1484
+ }
1485
+
1486
+ .dak-ws-navtab-active {
1487
+ color: var(--dak-accent);
1488
+ border-color: var(--dak-accent);
1489
+ background: var(--dak-accent-soft, rgba(47, 224, 168, 0.08));
1091
1490
  }
1092
1491
 
1093
- .dak-tab small {
1094
- grid-area: detail;
1492
+ .dak-ws-main {
1095
1493
  min-width: 0;
1096
- overflow: hidden;
1097
- text-overflow: ellipsis;
1098
- white-space: nowrap;
1099
- color: var(--dak-fg-dim);
1100
- font-size: 10px;
1101
- font-family: var(--dak-mono);
1102
1494
  }
1103
1495
 
1104
1496
  .dak-tab:hover,
@@ -1229,493 +1621,1546 @@
1229
1621
 
1230
1622
  .dak-replay-layout {
1231
1623
  display: grid;
1232
- grid-template-columns: 300px minmax(0, 1fr) 260px;
1624
+ grid-template-columns: minmax(210px, 260px) minmax(520px, 1fr) minmax(210px, 260px);
1625
+ grid-template-areas:
1626
+ "controls controls controls"
1627
+ "roster-left stage roster-right";
1233
1628
  gap: 14px;
1234
1629
  align-items: start;
1235
1630
  }
1236
1631
 
1237
- .dak-playback {
1632
+ .dak-replay-controlbar {
1633
+ grid-area: controls;
1238
1634
  display: grid;
1239
- grid-template-columns: 42px 34px minmax(0, 1fr) 34px;
1240
- gap: 8px;
1635
+ grid-template-columns: 270px minmax(360px, 1fr) auto;
1636
+ gap: 12px;
1241
1637
  align-items: center;
1242
- margin: 14px 0 10px;
1243
- }
1244
-
1245
- .dak-play-button,
1246
- .dak-icon-button {
1247
- display: inline-grid;
1248
- place-items: center;
1638
+ padding: 10px;
1249
1639
  border: 1px solid var(--dak-border);
1250
1640
  border-radius: 4px;
1251
- cursor: pointer;
1252
- color: var(--dak-fg);
1253
- }
1254
-
1255
- .dak-play-button {
1256
- width: 42px;
1257
- height: 42px;
1258
- background: var(--dak-accent);
1259
- border-color: rgba(255, 122, 33, 0.78);
1260
- }
1261
-
1262
- .dak-icon-button {
1263
- width: 34px;
1264
- height: 34px;
1265
- background: var(--dak-bg-subtle);
1641
+ background: linear-gradient(180deg, rgba(238, 243, 248, 0.035), transparent), var(--dak-panel);
1266
1642
  }
1267
1643
 
1268
- .dak-scrubber {
1644
+ .dak-replay-round-nav {
1269
1645
  min-width: 0;
1270
- accent-color: var(--dak-accent);
1271
- cursor: pointer;
1646
+ display: grid;
1647
+ grid-template-columns: 34px minmax(0, 1fr) 34px;
1648
+ gap: 8px;
1649
+ align-items: center;
1272
1650
  }
1273
1651
 
1274
- .dak-speed-group {
1652
+ .dak-round-select-label {
1653
+ min-width: 0;
1275
1654
  display: grid;
1276
- grid-template-columns: repeat(4, minmax(0, 1fr));
1277
- gap: 6px;
1278
- margin-bottom: 12px;
1655
+ gap: 4px;
1656
+ color: var(--dak-fg-dim);
1657
+ font-family: var(--dak-mono);
1658
+ font-size: 10px;
1659
+ text-transform: uppercase;
1279
1660
  }
1280
1661
 
1281
- .dak-speed {
1282
- min-height: 30px;
1662
+ .dak-round-select {
1663
+ width: 100%;
1664
+ min-width: 0;
1665
+ height: 34px;
1666
+ padding: 0 9px;
1283
1667
  border: 1px solid var(--dak-border);
1284
1668
  border-radius: 4px;
1285
1669
  background: var(--dak-bg-subtle);
1286
- color: var(--dak-fg-mid);
1287
- cursor: pointer;
1670
+ color: var(--dak-fg);
1288
1671
  font: inherit;
1289
1672
  font-family: var(--dak-mono);
1290
- font-size: 12px;
1291
1673
  }
1292
1674
 
1293
- .dak-speed-active {
1294
- color: var(--dak-fg);
1295
- border-color: rgba(73, 182, 255, 0.62);
1296
- background: rgba(73, 182, 255, 0.13);
1675
+ .dak-replay-togglebar {
1676
+ grid-column: 1 / -1;
1677
+ display: grid;
1678
+ grid-template-columns: minmax(240px, 1fr) auto auto;
1679
+ gap: 10px;
1680
+ align-items: center;
1297
1681
  }
1298
1682
 
1299
- .dak-replay-meta {
1300
- display: grid;
1301
- grid-template-columns: 1fr;
1302
- gap: 8px;
1683
+ .dak-replay-statusline {
1684
+ min-width: 0;
1685
+ display: flex;
1686
+ align-items: center;
1687
+ justify-content: flex-end;
1688
+ gap: 10px;
1689
+ color: var(--dak-fg-mid);
1690
+ font-family: var(--dak-mono);
1691
+ font-size: 11px;
1303
1692
  }
1304
1693
 
1305
- .dak-replay-gridlines {
1306
- position: absolute;
1307
- inset: 0;
1308
- background:
1309
- linear-gradient(rgba(238, 243, 248, 0.05) 1px, transparent 1px),
1310
- linear-gradient(90deg, rgba(238, 243, 248, 0.05) 1px, transparent 1px);
1311
- background-size: 48px 48px;
1694
+ .dak-replay-clock {
1695
+ min-width: 104px;
1696
+ display: grid;
1697
+ grid-template-columns: auto auto;
1698
+ align-items: baseline;
1699
+ gap: 8px;
1700
+ padding: 5px 8px;
1701
+ border: 1px solid var(--dak-border-hi);
1702
+ border-radius: 3px;
1703
+ background: var(--dak-bg-subtle);
1312
1704
  }
1313
1705
 
1314
- .dak-replay-token {
1315
- transition: left 80ms linear, top 80ms linear, opacity 120ms ease;
1706
+ .dak-replay-clock span {
1707
+ color: var(--dak-fg-mid);
1708
+ font-family: var(--dak-font);
1709
+ font-size: 10px;
1316
1710
  }
1317
1711
 
1318
- .dak-replay-token::after {
1319
- content: "";
1320
- position: absolute;
1321
- top: -6px;
1322
- left: 50%;
1323
- width: 2px;
1324
- height: 7px;
1325
- background: rgba(238, 243, 248, 0.9);
1326
- transform: translateX(-50%);
1712
+ .dak-replay-clock strong {
1713
+ color: var(--dak-fg);
1714
+ font-size: 18px;
1715
+ font-variant-numeric: tabular-nums;
1716
+ line-height: 1;
1327
1717
  }
1328
1718
 
1329
- .dak-replay-token-dead {
1330
- opacity: 0.28;
1331
- filter: grayscale(1);
1719
+ .dak-replay-clock-bomb strong {
1720
+ color: var(--dak-danger);
1332
1721
  }
1333
1722
 
1334
- .dak-replay-token-flashed {
1335
- box-shadow: 0 0 0 3px rgba(255, 198, 77, 0.45), 0 8px 18px rgba(0, 0, 0, 0.38);
1723
+ .dak-replay-clock-round-end strong {
1724
+ color: var(--dak-warn);
1336
1725
  }
1337
1726
 
1338
- .dak-frame-player-list {
1339
- display: grid;
1340
- gap: 7px;
1341
- max-height: 620px;
1342
- overflow: auto;
1727
+ .dak-replay-techline {
1728
+ display: flex;
1729
+ flex-wrap: wrap;
1730
+ justify-content: flex-end;
1731
+ gap: 4px;
1343
1732
  }
1344
1733
 
1345
- .dak-frame-player-row {
1346
- display: grid;
1347
- grid-template-columns: 10px 18px minmax(0, 1fr) 52px;
1348
- gap: 8px;
1734
+ .dak-replay-techline span {
1735
+ min-height: 22px;
1736
+ display: inline-flex;
1349
1737
  align-items: center;
1350
- padding: 8px 9px;
1738
+ padding: 0 7px;
1351
1739
  border: 1px solid var(--dak-border);
1352
- border-radius: 4px;
1740
+ border-radius: 3px;
1353
1741
  background: var(--dak-bg-subtle);
1354
- font-size: 12px;
1742
+ white-space: nowrap;
1355
1743
  }
1356
1744
 
1357
- .dak-frame-player-name,
1358
- .dak-frame-player-row small {
1745
+ .dak-replay-stage-panel {
1746
+ grid-area: stage;
1359
1747
  min-width: 0;
1360
- overflow: hidden;
1361
- text-overflow: ellipsis;
1362
- white-space: nowrap;
1363
1748
  }
1364
1749
 
1365
- .dak-frame-player-num {
1366
- font-family: var(--dak-mono);
1367
- font-size: 10px;
1368
- font-weight: 800;
1369
- color: var(--dak-fg-dim);
1370
- text-align: center;
1750
+ .dak-replay-roster-panel {
1751
+ min-width: 0;
1371
1752
  }
1372
1753
 
1373
- .dak-frame-player-row small {
1374
- grid-column: 2 / 5;
1375
- color: var(--dak-fg-dim);
1376
- font-family: var(--dak-mono);
1754
+ .dak-replay-roster-left {
1755
+ grid-area: roster-left;
1377
1756
  }
1378
1757
 
1379
- .dak-frame-player-row-dead {
1380
- opacity: 0.38;
1758
+ .dak-replay-roster-right {
1759
+ grid-area: roster-right;
1381
1760
  }
1382
1761
 
1383
- .dak-hp-bar-wrap {
1384
- height: 6px;
1385
- background: rgba(238, 243, 248, 0.08);
1386
- border-radius: 3px;
1387
- overflow: hidden;
1388
- }
1762
+ .dak-replay-stage-head {
1763
+ display: flex;
1764
+ align-items: baseline;
1765
+ justify-content: space-between;
1766
+ margin-bottom: 8px;
1767
+ color: var(--dak-fg-mid);
1768
+ font-family: var(--dak-mono);
1769
+ font-size: 12px;
1770
+ }
1389
1771
 
1390
- .dak-hp-bar {
1391
- height: 100%;
1392
- border-radius: 3px;
1393
- transition: width 80ms linear, background 200ms ease;
1772
+ .dak-replay-stage-head span {
1773
+ color: var(--dak-fg);
1774
+ font-weight: 800;
1394
1775
  }
1395
1776
 
1396
- .dak-team-dot-teamA {
1777
+ .dak-playback {
1778
+ display: grid;
1779
+ grid-template-columns: 42px 34px minmax(0, 1fr) 34px;
1780
+ gap: 8px;
1781
+ align-items: center;
1782
+ margin: 0;
1783
+ }
1784
+
1785
+ .dak-play-button,
1786
+ .dak-icon-button {
1787
+ display: inline-grid;
1788
+ place-items: center;
1789
+ border: 1px solid var(--dak-border);
1790
+ border-radius: 4px;
1791
+ cursor: pointer;
1792
+ color: var(--dak-fg);
1793
+ }
1794
+
1795
+ .dak-play-button {
1796
+ width: 42px;
1797
+ height: 42px;
1397
1798
  background: var(--dak-accent);
1799
+ border-color: rgba(255, 122, 33, 0.78);
1398
1800
  }
1399
1801
 
1400
- .dak-team-dot-teamB {
1401
- background: var(--dak-accent-b);
1802
+ .dak-icon-button {
1803
+ width: 34px;
1804
+ height: 34px;
1805
+ background: var(--dak-bg-subtle);
1402
1806
  }
1403
1807
 
1404
- .dak-player-roundfacts {
1405
- display: grid;
1406
- grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
1407
- gap: 10px;
1408
- margin-top: 14px;
1409
- max-height: 560px;
1410
- overflow: auto;
1808
+ .dak-icon-button:disabled {
1809
+ opacity: 0.42;
1810
+ cursor: not-allowed;
1411
1811
  }
1412
1812
 
1413
- .dak-player-round-summary {
1414
- display: grid;
1415
- grid-template-columns: repeat(4, minmax(0, 1fr));
1416
- gap: 8px;
1417
- margin: 12px 0;
1813
+ .dak-scrubber {
1814
+ min-width: 0;
1815
+ accent-color: var(--dak-accent);
1816
+ cursor: pointer;
1418
1817
  }
1419
1818
 
1420
- .dak-player-round-card {
1819
+ /* v0.2:scrubber 上方的事件锚点(首杀/击杀/下包/拆包),点击跳帧 */
1820
+ .dak-scrubber-wrap {
1821
+ position: relative;
1822
+ flex: 1;
1421
1823
  min-width: 0;
1422
- display: grid;
1423
- gap: 9px;
1424
- padding: 11px;
1425
- border: 1px solid var(--dak-border);
1426
- border-radius: 4px;
1427
- background:
1428
- linear-gradient(180deg, rgba(73, 182, 255, 0.06), transparent 42%),
1429
- var(--dak-bg-subtle);
1824
+ display: flex;
1825
+ flex-direction: column;
1826
+ justify-content: flex-end;
1430
1827
  }
1431
1828
 
1432
- .dak-player-round-head {
1433
- display: grid;
1434
- grid-template-columns: auto minmax(0, 1fr) auto;
1435
- gap: 8px;
1436
- align-items: center;
1829
+ .dak-scrubber-wrap .dak-scrubber {
1830
+ width: 100%;
1437
1831
  }
1438
1832
 
1439
- .dak-player-round-head span:nth-child(2) {
1440
- min-width: 0;
1441
- overflow: hidden;
1442
- color: var(--dak-fg-mid);
1443
- text-overflow: ellipsis;
1444
- white-space: nowrap;
1445
- font-size: 12px;
1833
+ .dak-scrubber-anchors {
1834
+ position: relative;
1835
+ height: 10px;
1446
1836
  }
1447
1837
 
1448
- .dak-player-round-meta,
1449
- .dak-player-round-tags {
1450
- display: flex;
1451
- flex-wrap: wrap;
1452
- gap: 6px;
1838
+ .dak-scrubber-anchor {
1839
+ position: absolute;
1840
+ top: 0;
1841
+ width: 7px;
1842
+ height: 7px;
1843
+ padding: 0;
1844
+ border: none;
1845
+ border-radius: 50%;
1846
+ transform: translateX(-50%);
1847
+ cursor: pointer;
1848
+ background: var(--dak-text-dim);
1453
1849
  }
1454
1850
 
1455
- .dak-player-round-meta span,
1456
- .dak-player-round-tags span {
1457
- display: inline-flex;
1458
- align-items: center;
1459
- min-height: 22px;
1460
- padding: 0 7px;
1851
+ .dak-scrubber-anchor-firstkill { background: var(--dak-ok); }
1852
+ .dak-scrubber-anchor-kill { background: var(--dak-danger); }
1853
+ .dak-scrubber-anchor-bomb { background: var(--dak-warn); }
1854
+ .dak-scrubber-anchor-defuse { background: #4db8ff; }
1855
+
1856
+ /* v0.3:比赛报告导出按钮 */
1857
+ .dak-report-button {
1858
+ margin-top: 8px;
1859
+ background: transparent;
1461
1860
  border: 1px solid var(--dak-border);
1462
- border-radius: 3px;
1463
- background: rgba(9, 11, 15, 0.38);
1464
- color: var(--dak-fg-mid);
1465
- font-size: 11px;
1861
+ border-radius: 8px;
1862
+ color: var(--dak-text-dim, #8b97a5);
1863
+ font-size: 12px;
1864
+ padding: 4px 10px;
1865
+ cursor: pointer;
1466
1866
  }
1467
1867
 
1468
- .dak-player-round-tags span {
1868
+ .dak-report-button:hover {
1869
+ border-color: var(--dak-accent);
1469
1870
  color: var(--dak-accent);
1470
- border-color: rgba(255, 122, 33, 0.26);
1471
- background: rgba(255, 122, 33, 0.08);
1472
1871
  }
1473
1872
 
1474
- .dak-economy-legend {
1873
+ /* v0.2:回合筛选器 */
1874
+ .dak-round-filterbar {
1475
1875
  display: flex;
1476
1876
  flex-wrap: wrap;
1477
- gap: 8px 12px;
1478
- margin: 10px 0;
1479
- color: var(--dak-fg-mid);
1877
+ gap: 8px;
1878
+ margin-bottom: 12px;
1879
+ }
1880
+
1881
+ .dak-round-filter-select {
1882
+ background: var(--dak-bg-subtle);
1883
+ color: var(--dak-text);
1884
+ border: 1px solid var(--dak-border);
1885
+ border-radius: 8px;
1886
+ padding: 4px 8px;
1480
1887
  font-size: 12px;
1481
1888
  }
1482
1889
 
1483
- .dak-economy-legend span {
1484
- display: inline-flex;
1485
- align-items: center;
1486
- gap: 5px;
1890
+ /* v0.2:统计跳回放的可点击行/卡片 */
1891
+ .dak-timeline-row-link,
1892
+ .dak-player-round-card-link {
1893
+ cursor: pointer;
1487
1894
  }
1488
1895
 
1489
- .dak-economy-legend i {
1490
- width: 12px;
1491
- height: 12px;
1492
- display: block;
1493
- border: 1px solid var(--dak-border);
1494
- border-radius: 3px;
1896
+ .dak-timeline-row-link:hover,
1897
+ .dak-player-round-card-link:hover {
1898
+ background: rgba(47, 224, 168, 0.08);
1495
1899
  }
1496
1900
 
1497
- .dak-economy-rounds {
1498
- display: grid;
1499
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1500
- gap: 7px;
1501
- margin-top: 10px;
1901
+ /* v0.2:走位轨迹与击杀连线图层 */
1902
+ .dak-replay-playertrace {
1903
+ fill: none;
1904
+ stroke-width: 0.35;
1905
+ stroke-linejoin: round;
1906
+ opacity: 0.55;
1502
1907
  }
1503
1908
 
1504
- .dak-economy-round {
1909
+ .dak-replay-playertrace-teamA { stroke: var(--dak-team-a, #4db8ff); }
1910
+ .dak-replay-playertrace-teamB { stroke: var(--dak-team-b, #ff7a21); }
1911
+
1912
+ .dak-replay-killline {
1913
+ stroke: rgba(255, 92, 92, 0.85);
1914
+ stroke-width: 0.3;
1915
+ stroke-dasharray: 1.4 0.9;
1916
+ }
1917
+
1918
+ .dak-replay-killline-victim {
1919
+ fill: rgba(255, 92, 92, 0.9);
1920
+ }
1921
+
1922
+ .dak-speed-group {
1505
1923
  display: grid;
1506
- gap: 3px;
1507
- padding: 8px;
1924
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1925
+ gap: 6px;
1926
+ margin-bottom: 12px;
1927
+ }
1928
+
1929
+ .dak-speed {
1930
+ min-height: 30px;
1508
1931
  border: 1px solid var(--dak-border);
1509
1932
  border-radius: 4px;
1510
1933
  background: var(--dak-bg-subtle);
1511
- font-size: 11px;
1934
+ color: var(--dak-fg-mid);
1935
+ cursor: pointer;
1936
+ font: inherit;
1937
+ font-family: var(--dak-mono);
1938
+ font-size: 12px;
1512
1939
  }
1513
1940
 
1514
- .dak-economy-round b {
1941
+ .dak-speed-active {
1515
1942
  color: var(--dak-fg);
1516
- font-family: var(--dak-mono);
1943
+ border-color: rgba(73, 182, 255, 0.62);
1944
+ background: rgba(73, 182, 255, 0.13);
1517
1945
  }
1518
1946
 
1519
- .dak-economy-round span {
1520
- min-width: 0;
1521
- overflow: hidden;
1522
- color: var(--dak-fg-dim);
1523
- text-overflow: ellipsis;
1524
- white-space: nowrap;
1947
+ .dak-replay-meta {
1948
+ display: grid;
1949
+ grid-template-columns: repeat(3, minmax(70px, 1fr));
1950
+ gap: 6px;
1525
1951
  }
1526
1952
 
1527
- .dak-economy-round .dak-economy-winner {
1528
- color: var(--dak-ok);
1953
+ .dak-replay-gridlines {
1954
+ position: absolute;
1955
+ inset: 0;
1956
+ background:
1957
+ linear-gradient(rgba(238, 243, 248, 0.05) 1px, transparent 1px),
1958
+ linear-gradient(90deg, rgba(238, 243, 248, 0.05) 1px, transparent 1px);
1959
+ background-size: 48px 48px;
1529
1960
  }
1530
1961
 
1531
- .dak-economy-round-upset {
1532
- border-color: rgba(255, 198, 77, 0.4);
1533
- background: linear-gradient(135deg, rgba(255, 198, 77, 0.07), var(--dak-bg-subtle));
1962
+ .dak-replay-token {
1963
+ transition: left 80ms linear, top 80ms linear, opacity 120ms ease;
1534
1964
  }
1535
1965
 
1536
- .dak-economy-upsets {
1537
- display: flex;
1538
- flex-wrap: wrap;
1539
- align-items: center;
1540
- gap: 6px;
1541
- margin: 8px 0 4px;
1966
+ .dak-replay-token::after {
1967
+ content: "";
1968
+ position: absolute;
1969
+ top: -6px;
1970
+ left: 50%;
1971
+ width: 2px;
1972
+ height: 7px;
1973
+ background: rgba(238, 243, 248, 0.9);
1974
+ transform: translateX(-50%);
1542
1975
  }
1543
1976
 
1544
- .dak-upset-chip {
1545
- display: inline-flex;
1546
- align-items: center;
1547
- min-height: 22px;
1548
- padding: 0 8px;
1549
- border-radius: 3px;
1550
- font-size: 11px;
1551
- font-weight: 700;
1552
- border: 1px solid transparent;
1977
+ .dak-replay-token-dead {
1978
+ opacity: 0.28;
1979
+ filter: grayscale(1);
1553
1980
  }
1554
1981
 
1555
- .dak-upset-chip-eco { background: rgba(255,84,114,0.15); color: var(--dak-danger); border-color: rgba(255,84,114,0.3); }
1556
- .dak-upset-chip-semi { background: rgba(73,182,255,0.13); color: var(--dak-accent-b); border-color: rgba(73,182,255,0.28); }
1557
- .dak-upset-chip-force { background: rgba(255,122,33,0.13); color: var(--dak-accent); border-color: rgba(255,122,33,0.28); }
1982
+ /* 双层地图:另一层的选手以幽灵态显示,可感知存在但不干扰当前层阅读 */
1983
+ .dak-replay-token-offlevel {
1984
+ opacity: 0.22;
1985
+ filter: grayscale(0.65);
1986
+ }
1558
1987
 
1559
- .dak-upset-badge {
1560
- display: inline-flex;
1561
- align-items: center;
1562
- padding: 1px 5px;
1563
- border-radius: 2px;
1564
- font-size: 10px;
1565
- font-weight: 800;
1566
- white-space: nowrap;
1988
+ .dak-replay-token-flashed {
1989
+ box-shadow: 0 0 0 3px rgba(255, 198, 77, 0.45), 0 8px 18px rgba(0, 0, 0, 0.38);
1567
1990
  }
1568
1991
 
1569
- .dak-upset-badge-eco { background: rgba(255,84,114,0.18); color: var(--dak-danger); }
1570
- .dak-upset-badge-semi { background: rgba(73,182,255,0.16); color: var(--dak-accent-b); }
1571
- .dak-upset-badge-force { background: rgba(255,122,33,0.16); color: var(--dak-accent); }
1992
+ .dak-frame-player-list {
1993
+ display: grid;
1994
+ gap: 5px;
1995
+ }
1572
1996
 
1573
- /* ── Kill feed overlay ──────────────────────────────────────────────────────── */
1997
+ .dak-roster-board {
1998
+ display: grid;
1999
+ gap: 9px;
2000
+ padding: 10px;
2001
+ border: 1px solid var(--dak-border);
2002
+ border-radius: 4px;
2003
+ background:
2004
+ linear-gradient(180deg, rgba(238, 243, 248, 0.035), transparent 48%),
2005
+ var(--dak-panel);
2006
+ }
1574
2007
 
1575
- .dak-killfeed {
1576
- position: absolute;
1577
- top: 10px;
1578
- right: 10px;
1579
- z-index: 5;
1580
- display: flex;
1581
- flex-direction: column;
1582
- gap: 3px;
1583
- pointer-events: none;
2008
+ .dak-roster-team {
1584
2009
  min-width: 0;
1585
- max-width: 260px;
2010
+ display: grid;
2011
+ gap: 6px;
1586
2012
  }
1587
2013
 
1588
- .dak-killfeed-row {
1589
- display: flex;
2014
+ .dak-roster-team-head {
2015
+ min-width: 0;
2016
+ display: grid;
2017
+ grid-template-columns: 10px minmax(0, 1fr) auto;
2018
+ gap: 7px;
1590
2019
  align-items: center;
1591
- gap: 5px;
1592
- padding: 4px 8px;
1593
- background: rgba(9, 11, 15, 0.78);
2020
+ color: var(--dak-fg-dim);
2021
+ font-family: var(--dak-mono);
2022
+ font-size: 10px;
2023
+ text-transform: uppercase;
2024
+ }
2025
+
2026
+ .dak-roster-team-head b {
2027
+ color: var(--dak-fg);
2028
+ font-size: 12px;
2029
+ }
2030
+
2031
+ .dak-roster-team-head small {
2032
+ color: var(--dak-fg-dim);
2033
+ }
2034
+
2035
+ .dak-frame-player-row {
2036
+ display: grid;
2037
+ grid-template-columns: 22px minmax(0, 1fr);
2038
+ align-content: center;
2039
+ gap: 6px 10px;
2040
+ /* min-height 预留「名字 + 2 行 loadout + 血条」的空间:
2041
+ 逐帧道具增减时高度稳定(不跳动),罕见超长 loadout 才轻微增高,信息始终完整显示 */
2042
+ min-height: 82px;
2043
+ padding: 10px 12px;
1594
2044
  border: 1px solid var(--dak-border);
1595
- border-radius: 3px;
1596
- font-size: 11px;
1597
- white-space: nowrap;
1598
- overflow: hidden;
2045
+ border-radius: 6px;
2046
+ background: var(--dak-bg-subtle);
2047
+ font-size: 12px;
1599
2048
  }
1600
2049
 
1601
- .dak-killfeed-name {
2050
+ .dak-frame-player-row .dak-frame-player-num {
2051
+ grid-column: 1;
2052
+ grid-row: 1 / -1;
2053
+ align-self: center;
2054
+ }
2055
+
2056
+ .dak-frame-player-row .dak-frame-player-name {
2057
+ grid-column: 2;
2058
+ grid-row: 1;
1602
2059
  font-weight: 700;
1603
- max-width: 80px;
2060
+ color: var(--dak-fg);
2061
+ }
2062
+
2063
+ .dak-frame-player-row .dak-frame-loadout {
2064
+ grid-column: 2;
2065
+ grid-row: 2;
2066
+ /* 预留 2 行高度:常见 loadout 不会让卡片忽高忽低 */
2067
+ min-height: 32px;
2068
+ align-content: flex-start;
2069
+ }
2070
+
2071
+ .dak-frame-player-row .dak-frame-weapon {
2072
+ grid-column: 2;
2073
+ grid-row: 2;
2074
+ min-height: 32px;
2075
+ }
2076
+
2077
+ .dak-frame-player-row .dak-hp-bar-wrap {
2078
+ grid-column: 2;
2079
+ grid-row: 3;
2080
+ width: 100%;
2081
+ align-self: center;
2082
+ }
2083
+
2084
+ .dak-frame-player-name,
2085
+ .dak-frame-player-row small {
2086
+ min-width: 0;
1604
2087
  overflow: hidden;
1605
2088
  text-overflow: ellipsis;
1606
- flex-shrink: 0;
2089
+ white-space: nowrap;
1607
2090
  }
1608
2091
 
1609
- .dak-killfeed-name-teamA { color: var(--dak-accent); }
1610
- .dak-killfeed-name-teamB { color: var(--dak-accent-b); }
1611
- .dak-killfeed-name-none { color: var(--dak-fg-dim); }
2092
+ .dak-frame-player-num {
2093
+ font-family: var(--dak-mono);
2094
+ font-size: 10px;
2095
+ font-weight: 800;
2096
+ color: var(--dak-fg-dim);
2097
+ text-align: center;
2098
+ }
1612
2099
 
1613
- .dak-killfeed-weapon {
2100
+ .dak-frame-weapon {
2101
+ display: block;
1614
2102
  color: var(--dak-fg-dim);
1615
2103
  font-family: var(--dak-mono);
1616
- font-size: 10px;
1617
- flex-shrink: 0;
2104
+ font-size: 11px;
2105
+ min-width: 0;
2106
+ overflow: hidden;
2107
+ text-overflow: ellipsis;
2108
+ white-space: nowrap;
1618
2109
  }
1619
2110
 
1620
- .dak-killfeed-victim {
1621
- color: var(--dak-fg-mid);
2111
+ .dak-frame-loadout {
2112
+ display: flex;
2113
+ flex-wrap: wrap;
2114
+ gap: 4px;
1622
2115
  min-width: 0;
2116
+ color: var(--dak-fg-dim);
2117
+ font-family: var(--dak-mono);
2118
+ font-size: 10px;
2119
+ }
2120
+
2121
+ .dak-frame-loadout span {
2122
+ flex: 0 0 auto;
2123
+ max-width: 92px;
1623
2124
  overflow: hidden;
2125
+ padding: 1px 5px;
2126
+ border: 1px solid rgba(238, 243, 248, 0.11);
2127
+ border-radius: 3px;
2128
+ background: rgba(9, 11, 15, 0.34);
1624
2129
  text-overflow: ellipsis;
1625
- flex: 1;
2130
+ white-space: nowrap;
1626
2131
  }
1627
2132
 
1628
- .dak-killfeed-badges {
2133
+ .dak-frame-loadout .dak-frame-primary {
2134
+ color: var(--dak-fg);
2135
+ border-color: rgba(73, 182, 255, 0.28);
2136
+ background: rgba(73, 182, 255, 0.09);
2137
+ }
2138
+
2139
+ .dak-frame-loadout .dak-frame-current {
2140
+ color: var(--dak-warn);
2141
+ border-color: rgba(255, 198, 77, 0.28);
2142
+ background: rgba(255, 198, 77, 0.08);
2143
+ }
2144
+
2145
+ .dak-frame-player-row-dead {
2146
+ opacity: 0.38;
2147
+ }
2148
+
2149
+ .dak-hp-bar-wrap {
2150
+ /* 垂直叠层:HP 条(6px)+ 护甲条(2px),之间 1px 间隙,不重叠 */
1629
2151
  display: flex;
1630
- gap: 3px;
1631
- flex-shrink: 0;
2152
+ flex-direction: column;
2153
+ gap: 1px;
2154
+ height: 9px;
1632
2155
  }
1633
2156
 
1634
- .dak-kf-badge {
1635
- display: inline-flex;
1636
- align-items: center;
1637
- padding: 1px 4px;
2157
+ .dak-hp-bar-track {
2158
+ flex: none;
2159
+ height: 6px;
1638
2160
  border-radius: 2px;
1639
- font-size: 9px;
1640
- font-weight: 800;
1641
- font-style: normal;
1642
- text-transform: uppercase;
2161
+ background: rgba(238, 243, 248, 0.08);
2162
+ overflow: hidden;
1643
2163
  }
1644
2164
 
1645
- .dak-kf-hs { background: rgba(255, 84, 114, 0.22); color: var(--dak-danger); }
1646
- .dak-kf-tr { background: rgba(255, 122, 33, 0.18); color: var(--dak-accent); }
1647
- .dak-kf-smk { background: rgba(162, 172, 184, 0.14); color: var(--dak-fg-mid); }
1648
- .dak-kf-ns { background: rgba(73, 182, 255, 0.16); color: var(--dak-accent-b); }
1649
- .dak-kf-fa { background: rgba(83, 215, 126, 0.18); color: var(--dak-ok); }
2165
+ .dak-hp-bar {
2166
+ flex: none;
2167
+ height: 6px;
2168
+ border-radius: 2px;
2169
+ transition: width 80ms linear, background 200ms ease;
2170
+ }
1650
2171
 
1651
- @media (max-width: 1080px) {
1652
- .dak-header,
1653
- .dak-grid,
1654
- .dak-grid-even,
1655
- .dak-selection-layout,
1656
- .dak-kpi-strip,
1657
- .dak-fact-grid,
1658
- .dak-workbench,
1659
- .dak-replay-layout {
1660
- grid-template-columns: 1fr;
1661
- }
2172
+ /* 护甲独立细条:在 HP 下方,不覆盖 */
2173
+ .dak-armor-bar {
2174
+ flex: none;
2175
+ height: 2px;
2176
+ border-radius: 1px;
2177
+ background: var(--dak-accent-b);
2178
+ transition: width 80ms linear;
2179
+ }
1662
2180
 
1663
- .dak-workbench-sidebar {
1664
- position: static;
1665
- }
2181
+ .dak-team-dot-teamA {
2182
+ background: var(--dak-accent);
2183
+ }
1666
2184
 
1667
- .dak-tabs {
1668
- grid-template-columns: repeat(3, minmax(0, 1fr));
1669
- }
2185
+ .dak-team-dot-teamB {
2186
+ background: var(--dak-accent-b);
2187
+ }
1670
2188
 
1671
- .dak-scoreblock {
1672
- text-align: left;
1673
- }
2189
+ .dak-player-roundfacts {
2190
+ display: grid;
2191
+ grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
2192
+ gap: 10px;
2193
+ margin-top: 14px;
2194
+ max-height: 560px;
2195
+ overflow: auto;
2196
+ }
1674
2197
 
1675
- .dak-scoreline {
1676
- font-size: 34px;
1677
- }
2198
+ .dak-player-round-summary {
2199
+ display: grid;
2200
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2201
+ gap: 8px;
2202
+ margin: 12px 0;
2203
+ }
1678
2204
 
1679
- .dak-title {
1680
- font-size: 32px;
1681
- }
2205
+ .dak-player-round-card {
2206
+ min-width: 0;
2207
+ display: grid;
2208
+ gap: 9px;
2209
+ padding: 11px;
2210
+ border: 1px solid var(--dak-border);
2211
+ border-radius: 4px;
2212
+ background:
2213
+ linear-gradient(180deg, rgba(73, 182, 255, 0.06), transparent 42%),
2214
+ var(--dak-bg-subtle);
2215
+ }
1682
2216
 
1683
- .dak-qa-row,
1684
- .dak-roundfact-row {
1685
- grid-template-columns: 1fr;
1686
- }
2217
+ .dak-player-round-head {
2218
+ display: grid;
2219
+ grid-template-columns: auto minmax(0, 1fr) auto;
2220
+ gap: 8px;
2221
+ align-items: center;
2222
+ }
1687
2223
 
1688
- .dak-player-round-summary {
1689
- grid-template-columns: repeat(2, minmax(0, 1fr));
1690
- }
2224
+ .dak-player-round-head span:nth-child(2) {
2225
+ min-width: 0;
2226
+ overflow: hidden;
2227
+ color: var(--dak-fg-mid);
2228
+ text-overflow: ellipsis;
2229
+ white-space: nowrap;
2230
+ font-size: 12px;
1691
2231
  }
1692
2232
 
1693
- @media (max-width: 720px) {
1694
- .dak-workspace {
1695
- width: min(100vw - 18px, 1480px);
1696
- padding-top: 14px;
1697
- }
2233
+ .dak-player-round-meta,
2234
+ .dak-player-round-tags {
2235
+ display: flex;
2236
+ flex-wrap: wrap;
2237
+ gap: 6px;
2238
+ }
1698
2239
 
1699
- .dak-tabs,
1700
- .dak-kpi-strip,
1701
- .dak-speed-group,
1702
- .dak-heatmap-tuning {
1703
- grid-template-columns: 1fr;
1704
- }
2240
+ .dak-player-round-meta span,
2241
+ .dak-player-round-tags span {
2242
+ display: inline-flex;
2243
+ align-items: center;
2244
+ min-height: 22px;
2245
+ padding: 0 7px;
2246
+ border: 1px solid var(--dak-border);
2247
+ border-radius: 3px;
2248
+ background: rgba(9, 11, 15, 0.38);
2249
+ color: var(--dak-fg-mid);
2250
+ font-size: 11px;
2251
+ }
1705
2252
 
1706
- .dak-tab {
1707
- min-height: 46px;
1708
- }
2253
+ .dak-player-round-tags span {
2254
+ color: var(--dak-accent);
2255
+ border-color: rgba(255, 122, 33, 0.26);
2256
+ background: rgba(255, 122, 33, 0.08);
2257
+ }
1709
2258
 
1710
- .dak-title {
1711
- font-size: 28px;
1712
- }
2259
+ .dak-economy-legend {
2260
+ display: flex;
2261
+ flex-wrap: wrap;
2262
+ gap: 8px 12px;
2263
+ margin: 10px 0;
2264
+ color: var(--dak-fg-mid);
2265
+ font-size: 12px;
2266
+ }
1713
2267
 
1714
- .dak-replay-stage {
1715
- min-height: 380px;
1716
- }
2268
+ .dak-economy-legend span {
2269
+ display: inline-flex;
2270
+ align-items: center;
2271
+ gap: 5px;
2272
+ }
1717
2273
 
1718
- .dak-player-round-summary {
1719
- grid-template-columns: 1fr;
2274
+ .dak-economy-legend i {
2275
+ width: 12px;
2276
+ height: 12px;
2277
+ display: block;
2278
+ border: 1px solid var(--dak-border);
2279
+ border-radius: 3px;
2280
+ }
2281
+
2282
+ .dak-economy-rounds {
2283
+ display: grid;
2284
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2285
+ gap: 7px;
2286
+ margin-top: 10px;
2287
+ }
2288
+
2289
+ .dak-economy-round {
2290
+ display: grid;
2291
+ gap: 3px;
2292
+ padding: 8px;
2293
+ border: 1px solid var(--dak-border);
2294
+ border-radius: 4px;
2295
+ background: var(--dak-bg-subtle);
2296
+ font-size: 11px;
2297
+ }
2298
+
2299
+ .dak-economy-round b {
2300
+ color: var(--dak-fg);
2301
+ font-family: var(--dak-mono);
2302
+ }
2303
+
2304
+ .dak-economy-round span {
2305
+ min-width: 0;
2306
+ overflow: hidden;
2307
+ color: var(--dak-fg-dim);
2308
+ text-overflow: ellipsis;
2309
+ white-space: nowrap;
2310
+ }
2311
+
2312
+ .dak-economy-round .dak-economy-winner {
2313
+ color: var(--dak-ok);
2314
+ }
2315
+
2316
+ .dak-economy-round-clickable {
2317
+ cursor: pointer;
2318
+ }
2319
+
2320
+ .dak-economy-round-clickable:hover {
2321
+ border-color: var(--dak-border-hi);
2322
+ background: var(--dak-panel);
2323
+ }
2324
+
2325
+ .dak-economy-round-upset {
2326
+ border-color: rgba(255, 198, 77, 0.4);
2327
+ background: linear-gradient(135deg, rgba(255, 198, 77, 0.07), var(--dak-bg-subtle));
2328
+ }
2329
+
2330
+ .dak-economy-upsets {
2331
+ display: flex;
2332
+ flex-wrap: wrap;
2333
+ align-items: center;
2334
+ gap: 6px;
2335
+ margin: 8px 0 4px;
2336
+ }
2337
+
2338
+ .dak-upset-chip {
2339
+ display: inline-flex;
2340
+ align-items: center;
2341
+ min-height: 22px;
2342
+ padding: 0 8px;
2343
+ border-radius: 3px;
2344
+ font-size: 11px;
2345
+ font-weight: 700;
2346
+ border: 1px solid transparent;
2347
+ }
2348
+
2349
+ .dak-upset-chip-eco { background: rgba(255,84,114,0.15); color: var(--dak-danger); border-color: rgba(255,84,114,0.3); }
2350
+ .dak-upset-chip-semi { background: rgba(73,182,255,0.13); color: var(--dak-accent-b); border-color: rgba(73,182,255,0.28); }
2351
+ .dak-upset-chip-force { background: rgba(255,122,33,0.13); color: var(--dak-accent); border-color: rgba(255,122,33,0.28); }
2352
+
2353
+ .dak-upset-badge {
2354
+ display: inline-flex;
2355
+ align-items: center;
2356
+ padding: 1px 5px;
2357
+ border-radius: 2px;
2358
+ font-size: 10px;
2359
+ font-weight: 800;
2360
+ white-space: nowrap;
2361
+ }
2362
+
2363
+ .dak-upset-badge-eco { background: rgba(255,84,114,0.18); color: var(--dak-danger); }
2364
+ .dak-upset-badge-semi { background: rgba(73,182,255,0.16); color: var(--dak-accent-b); }
2365
+ .dak-upset-badge-force { background: rgba(255,122,33,0.16); color: var(--dak-accent); }
2366
+
2367
+ /* ── Kill feed overlay ──────────────────────────────────────────────────────── */
2368
+
2369
+ .dak-killfeed {
2370
+ position: absolute;
2371
+ top: 10px;
2372
+ right: 10px;
2373
+ z-index: 5;
2374
+ display: flex;
2375
+ flex-direction: column;
2376
+ gap: 3px;
2377
+ pointer-events: none;
2378
+ min-width: 0;
2379
+ max-width: 260px;
2380
+ }
2381
+
2382
+ .dak-killfeed-row {
2383
+ display: flex;
2384
+ align-items: center;
2385
+ gap: 5px;
2386
+ padding: 4px 8px;
2387
+ background: rgba(9, 11, 15, 0.78);
2388
+ border: 1px solid var(--dak-border);
2389
+ border-radius: 3px;
2390
+ font-size: 11px;
2391
+ white-space: nowrap;
2392
+ overflow: hidden;
2393
+ }
2394
+
2395
+ .dak-killfeed-name {
2396
+ font-weight: 700;
2397
+ max-width: 80px;
2398
+ overflow: hidden;
2399
+ text-overflow: ellipsis;
2400
+ flex-shrink: 0;
2401
+ }
2402
+
2403
+ .dak-killfeed-name-teamA { color: var(--dak-accent); }
2404
+ .dak-killfeed-name-teamB { color: var(--dak-accent-b); }
2405
+ .dak-killfeed-name-none { color: var(--dak-fg-dim); }
2406
+
2407
+ .dak-killfeed-weapon {
2408
+ color: var(--dak-fg-dim);
2409
+ font-family: var(--dak-mono);
2410
+ font-size: 10px;
2411
+ flex-shrink: 0;
2412
+ }
2413
+
2414
+ .dak-killfeed-victim {
2415
+ color: var(--dak-fg-mid);
2416
+ min-width: 0;
2417
+ overflow: hidden;
2418
+ text-overflow: ellipsis;
2419
+ flex: 1;
2420
+ }
2421
+
2422
+ .dak-killfeed-badges {
2423
+ display: flex;
2424
+ gap: 3px;
2425
+ flex-shrink: 0;
2426
+ }
2427
+
2428
+ .dak-kf-badge {
2429
+ display: inline-flex;
2430
+ align-items: center;
2431
+ padding: 1px 4px;
2432
+ border-radius: 2px;
2433
+ font-size: 9px;
2434
+ font-weight: 800;
2435
+ font-style: normal;
2436
+ text-transform: uppercase;
2437
+ }
2438
+
2439
+ .dak-kf-hs { background: rgba(255, 84, 114, 0.22); color: var(--dak-danger); }
2440
+ .dak-kf-tr { background: rgba(255, 122, 33, 0.18); color: var(--dak-accent); }
2441
+ .dak-kf-smk { background: rgba(162, 172, 184, 0.14); color: var(--dak-fg-mid); }
2442
+ .dak-kf-ns { background: rgba(73, 182, 255, 0.16); color: var(--dak-accent-b); }
2443
+ .dak-kf-fa { background: rgba(83, 215, 126, 0.18); color: var(--dak-ok); }
2444
+ .dak-kf-wb { background: rgba(255, 198, 77, 0.18); color: var(--dak-warn); }
2445
+
2446
+ @media (max-width: 1080px) {
2447
+ .dak-header,
2448
+ .dak-grid,
2449
+ .dak-grid-even,
2450
+ .dak-selection-layout,
2451
+ .dak-kpi-strip,
2452
+ .dak-fact-grid,
2453
+ .dak-workbench,
2454
+ .dak-replay-layout {
2455
+ grid-template-columns: 1fr;
2456
+ }
2457
+
2458
+ .dak-workbench-sidebar {
2459
+ position: static;
2460
+ }
2461
+
2462
+ .dak-tabs {
2463
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2464
+ }
2465
+
2466
+ .dak-scoreblock {
2467
+ text-align: left;
2468
+ }
2469
+
2470
+ .dak-scoreline {
2471
+ font-size: 34px;
2472
+ }
2473
+
2474
+ .dak-title {
2475
+ font-size: 32px;
2476
+ }
2477
+
2478
+ .dak-qa-row,
2479
+ .dak-roundfact-row {
2480
+ grid-template-columns: 1fr;
2481
+ }
2482
+
2483
+ .dak-player-round-summary {
2484
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2485
+ }
2486
+
2487
+ .dak-replay-layout {
2488
+ grid-template-areas:
2489
+ "controls controls"
2490
+ "roster-left roster-right"
2491
+ "stage stage";
2492
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2493
+ }
2494
+
2495
+ .dak-replay-controlbar,
2496
+ .dak-replay-togglebar {
2497
+ grid-template-columns: 1fr;
2498
+ }
2499
+
2500
+ }
2501
+
2502
+ @media (max-width: 720px) {
2503
+ .dak-workspace {
2504
+ width: min(100vw - 18px, 1480px);
2505
+ padding-top: 14px;
2506
+ }
2507
+
2508
+ .dak-tabs,
2509
+ .dak-kpi-strip,
2510
+ .dak-speed-group,
2511
+ .dak-heatmap-tuning {
2512
+ grid-template-columns: 1fr;
2513
+ }
2514
+
2515
+ .dak-tab {
2516
+ min-height: 46px;
2517
+ }
2518
+
2519
+ .dak-title {
2520
+ font-size: 28px;
2521
+ }
2522
+
2523
+ .dak-replay-stage {
2524
+ width: 100%;
1720
2525
  }
2526
+
2527
+ .dak-roster-board {
2528
+ grid-template-columns: 1fr;
2529
+ }
2530
+
2531
+ .dak-replay-layout {
2532
+ grid-template-areas:
2533
+ "controls"
2534
+ "roster-left"
2535
+ "roster-right"
2536
+ "stage";
2537
+ grid-template-columns: 1fr;
2538
+ }
2539
+
2540
+ .dak-player-round-summary {
2541
+ grid-template-columns: 1fr;
2542
+ }
2543
+ }
2544
+
2545
+ /* ── 2D 回放:道具效果 / C4 ───────────────────────────────── */
2546
+
2547
+ .dak-replay-fx {
2548
+ position: absolute;
2549
+ transform: translate(-50%, -50%);
2550
+ border-radius: 50%;
2551
+ pointer-events: none;
2552
+ }
2553
+
2554
+ .dak-replay-fx-smoke {
2555
+ background: radial-gradient(circle, rgba(214, 222, 230, 0.55) 0%, rgba(214, 222, 230, 0.35) 65%, transparent 100%);
2556
+ border: 1px solid rgba(214, 222, 230, 0.42);
2557
+ box-shadow: inset 0 0 0 1px rgba(9, 11, 15, 0.42), 0 0 12px rgba(214, 222, 230, 0.18);
2558
+ }
2559
+
2560
+ .dak-replay-fx-smoke.dak-replay-fx-ct {
2561
+ border-color: color-mix(in srgb, var(--dak-accent-b) 72%, white 12%);
2562
+ box-shadow: inset 0 0 0 1px rgba(9, 11, 15, 0.45), 0 0 14px rgba(73, 182, 255, 0.34);
2563
+ }
2564
+
2565
+ .dak-replay-fx-smoke.dak-replay-fx-t {
2566
+ border-color: color-mix(in srgb, var(--dak-accent) 76%, white 10%);
2567
+ box-shadow: inset 0 0 0 1px rgba(9, 11, 15, 0.45), 0 0 14px rgba(255, 122, 33, 0.34);
2568
+ }
2569
+
2570
+ .dak-replay-fx-fire {
2571
+ background: radial-gradient(circle, rgba(255, 138, 61, 0.7) 0%, rgba(255, 84, 38, 0.4) 60%, transparent 100%);
2572
+ animation: dak-fx-flicker 0.5s ease-in-out infinite alternate;
2573
+ }
2574
+
2575
+ .dak-replay-fx-he {
2576
+ background: radial-gradient(circle, rgba(255, 233, 178, 0.9) 0%, rgba(255, 95, 110, 0.5) 55%, transparent 100%);
2577
+ animation: dak-fx-burst 0.7s ease-out forwards;
2578
+ }
2579
+
2580
+ .dak-replay-fx-flash {
2581
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.95) 0%, rgba(255, 246, 200, 0.4) 60%, transparent 100%);
2582
+ animation: dak-fx-burst 0.7s ease-out forwards;
2583
+ }
2584
+
2585
+ .dak-replay-fx-countdown {
2586
+ position: absolute;
2587
+ inset: 0;
2588
+ display: flex;
2589
+ align-items: center;
2590
+ justify-content: center;
2591
+ font-size: 9px;
2592
+ font-weight: 700;
2593
+ font-variant-numeric: tabular-nums;
2594
+ color: rgba(28, 34, 40, 0.85);
2595
+ text-shadow: 0 0 3px rgba(255, 255, 255, 0.7);
2596
+ }
2597
+
2598
+ .dak-replay-fx-decoy {
2599
+ background: radial-gradient(circle, rgba(111, 125, 138, 0.6) 0%, transparent 100%);
2600
+ }
2601
+
2602
+ @keyframes dak-fx-flicker {
2603
+ from { opacity: 0.75; }
2604
+ to { opacity: 1; }
2605
+ }
2606
+
2607
+ @keyframes dak-fx-burst {
2608
+ from { opacity: 1; scale: 0.4; }
2609
+ to { opacity: 0; scale: 1.15; }
2610
+ }
2611
+
2612
+ .dak-replay-projectile {
2613
+ position: absolute;
2614
+ width: 7px;
2615
+ height: 7px;
2616
+ transform: translate(-50%, -50%);
2617
+ border-radius: 50%;
2618
+ border: 1px solid #0b0e10;
2619
+ background: #eef3f8;
2620
+ pointer-events: none;
2621
+ }
2622
+
2623
+ .dak-replay-projectile-flashbang { background: #ffd84d; }
2624
+ .dak-replay-projectile-smoke { background: #9aa6b2; }
2625
+ .dak-replay-projectile-molotov,
2626
+ .dak-replay-projectile-incendiary { background: #ff8a3d; }
2627
+ .dak-replay-projectile-hegrenade { background: #ff5f6e; }
2628
+ .dak-replay-projectile-decoy { background: #6f7d8a; }
2629
+
2630
+ /* 道具飞行尾迹:随播放逐帧延伸,颜色与落点标记一致 */
2631
+ .dak-replay-trajectories {
2632
+ position: absolute;
2633
+ inset: 0;
2634
+ width: 100%;
2635
+ height: 100%;
2636
+ pointer-events: none;
2637
+ }
2638
+
2639
+ .dak-replay-trail {
2640
+ fill: none;
2641
+ stroke: #eef3f8;
2642
+ stroke-width: 1.5px;
2643
+ vector-effect: non-scaling-stroke;
2644
+ stroke-linecap: round;
2645
+ stroke-linejoin: round;
2646
+ opacity: 0.65;
2647
+ stroke-dasharray: 1.6 1.2;
2648
+ }
2649
+
2650
+ .dak-replay-trail-flashbang { stroke: #ffd84d; }
2651
+ .dak-replay-trail-smoke { stroke: #9aa6b2; }
2652
+ .dak-replay-trail-molotov,
2653
+ .dak-replay-trail-incendiary { stroke: #ff8a3d; }
2654
+ .dak-replay-trail-hegrenade { stroke: #ff5f6e; }
2655
+ .dak-replay-trail-decoy { stroke: #6f7d8a; }
2656
+
2657
+ .dak-replay-bomb {
2658
+ position: absolute;
2659
+ transform: translate(-50%, -50%);
2660
+ padding: 1px 5px;
2661
+ border-radius: 3px;
2662
+ font-size: 10px;
2663
+ font-weight: 700;
2664
+ letter-spacing: 0.04em;
2665
+ text-transform: uppercase;
2666
+ color: #0b0e10;
2667
+ background: var(--dak-warn, #f5a623);
2668
+ border: 1px solid #0b0e10;
2669
+ pointer-events: none;
2670
+ }
2671
+
2672
+ .dak-replay-bomb-armed { animation: dak-bomb-pulse 1s ease-in-out infinite; }
2673
+ .dak-replay-bomb-defused { background: var(--dak-ok, #38c87d); animation: none; }
2674
+ .dak-replay-bomb-exploding { animation: dak-fx-burst 1.2s ease-out forwards; }
2675
+ .dak-replay-bomb-exploded { opacity: 0.35; }
2676
+ .dak-replay-bomb-dropped {
2677
+ background: rgba(245, 166, 35, 0.55);
2678
+ border: 1px dashed #f5a623;
2679
+ animation: dak-bomb-blink 1.2s ease-in-out infinite;
2680
+ font-size: 9px;
2681
+ padding: 1px 5px;
2682
+ }
2683
+
2684
+ /* 地面掉落的拆弹器:蓝色虚线,与橙色 C4 区分。 */
2685
+ .dak-replay-defuser {
2686
+ position: absolute;
2687
+ transform: translate(-50%, -50%);
2688
+ border-radius: 3px;
2689
+ font-size: 9px;
2690
+ font-weight: 700;
2691
+ letter-spacing: 0.04em;
2692
+ text-transform: uppercase;
2693
+ color: #0b0e10;
2694
+ pointer-events: none;
2695
+ }
2696
+
2697
+ .dak-replay-defuser-dropped {
2698
+ background: rgba(77, 184, 255, 0.55);
2699
+ border: 1px dashed #4db8ff;
2700
+ animation: dak-bomb-blink 1.2s ease-in-out infinite;
2701
+ padding: 1px 5px;
2702
+ }
2703
+
2704
+ @keyframes dak-bomb-blink {
2705
+ 0%, 100% { opacity: 0.5; }
2706
+ 50% { opacity: 0.9; }
2707
+ }
2708
+
2709
+ @keyframes dak-bomb-pulse {
2710
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(245, 166, 35, 0.7); }
2711
+ 50% { box-shadow: 0 0 0 7px rgba(245, 166, 35, 0); }
2712
+ }
2713
+
2714
+ .dak-replay-token .dak-replay-c4-tag {
2715
+ background: var(--dak-warn, #f5a623);
2716
+ color: #0b0e10;
2717
+ }
2718
+
2719
+ /* ── 武器统计 / 对位 ─────────────────────────────────────── */
2720
+
2721
+ .dak-num {
2722
+ text-align: right;
2723
+ font-variant-numeric: tabular-nums;
2724
+ }
2725
+
2726
+ .dak-weapon-bar-cell {
2727
+ width: 120px;
2728
+ min-width: 80px;
2729
+ }
2730
+
2731
+ .dak-weapon-bar {
2732
+ height: 7px;
2733
+ border-radius: 999px;
2734
+ background: linear-gradient(90deg, var(--dak-accent), rgba(255, 122, 33, 0.35));
2735
+ }
2736
+
2737
+ .dak-duel-scroll {
2738
+ overflow-x: auto;
2739
+ }
2740
+
2741
+ .dak-duel-matrix {
2742
+ border-collapse: collapse;
2743
+ font-size: 12px;
2744
+ }
2745
+
2746
+ .dak-duel-matrix th,
2747
+ .dak-duel-matrix td {
2748
+ border: 1px solid var(--dak-border);
2749
+ padding: 0;
2750
+ }
2751
+
2752
+ .dak-duel-head {
2753
+ height: 110px;
2754
+ min-width: 30px;
2755
+ vertical-align: bottom;
2756
+ padding: 6px 4px;
2757
+ }
2758
+
2759
+ .dak-duel-head span {
2760
+ display: inline-block;
2761
+ max-height: 100px;
2762
+ overflow: hidden;
2763
+ writing-mode: vertical-rl;
2764
+ transform: rotate(180deg);
2765
+ font-weight: 600;
2766
+ white-space: nowrap;
2767
+ }
2768
+
2769
+ .dak-duel-rowhead {
2770
+ max-width: 140px;
2771
+ overflow: hidden;
2772
+ padding: 5px 8px;
2773
+ font-weight: 600;
2774
+ text-align: right;
2775
+ text-overflow: ellipsis;
2776
+ white-space: nowrap;
2777
+ }
2778
+
2779
+ .dak-duel-teamA {
2780
+ color: var(--dak-accent);
2781
+ }
2782
+
2783
+ .dak-duel-teamB {
2784
+ color: var(--dak-accent-b);
2785
+ }
2786
+
2787
+ .dak-duel-cell {
2788
+ width: 34px;
2789
+ height: 30px;
2790
+ text-align: center;
2791
+ font-family: var(--dak-mono);
2792
+ font-variant-numeric: tabular-nums;
2793
+ }
2794
+
2795
+ .dak-duel-cell-same {
2796
+ background: var(--dak-bg-subtle);
2797
+ color: var(--dak-fg-dim);
2798
+ }
2799
+
2800
+ /* ── 原语(EmptyState / MetricInfo / EvidenceLink) ───────────────── */
2801
+
2802
+ .dak-empty {
2803
+ display: flex;
2804
+ flex-direction: column;
2805
+ align-items: center;
2806
+ gap: 10px;
2807
+ padding: 80px 24px;
2808
+ border: 1px dashed var(--dak-border-hi);
2809
+ border-radius: 3px;
2810
+ text-align: center;
2811
+ }
2812
+
2813
+ .dak-empty-mark {
2814
+ font-size: 34px;
2815
+ color: var(--dak-accent);
2816
+ }
2817
+
2818
+ .dak-empty h2 {
2819
+ margin: 0;
2820
+ font-size: 18px;
2821
+ }
2822
+
2823
+ .dak-empty p {
2824
+ margin: 0;
2825
+ max-width: 460px;
2826
+ color: var(--dak-fg-mid);
2827
+ font-size: 13px;
2828
+ line-height: 1.6;
2829
+ }
2830
+
2831
+ .dak-empty-error h2 {
2832
+ color: var(--dak-danger);
2833
+ }
2834
+
2835
+ /* ⓘ 口径说明 */
2836
+ .dak-info {
2837
+ position: relative;
2838
+ display: inline-block;
2839
+ margin-left: 4px;
2840
+ color: var(--dak-fg-dim);
2841
+ font-size: 11px;
2842
+ cursor: help;
2843
+ }
2844
+
2845
+ .dak-info-tip {
2846
+ position: absolute;
2847
+ left: 50%;
2848
+ bottom: calc(100% + 6px);
2849
+ transform: translateX(-50%) translateY(2px);
2850
+ z-index: 30;
2851
+ width: max-content;
2852
+ max-width: 300px;
2853
+ padding: 8px 10px;
2854
+ border: 1px solid var(--dak-border);
2855
+ border-radius: 2px;
2856
+ background: var(--dak-bg-subtle);
2857
+ color: var(--dak-fg);
2858
+ box-shadow: 0 12px 32px rgba(0, 0, 0, .35);
2859
+ font-size: 12px;
2860
+ line-height: 1.45;
2861
+ white-space: normal;
2862
+ text-transform: none;
2863
+ letter-spacing: normal;
2864
+ opacity: 0;
2865
+ pointer-events: none;
2866
+ transition: opacity .12s ease, transform .12s ease;
2867
+ }
2868
+
2869
+ .dak-info:hover .dak-info-tip,
2870
+ .dak-info:focus-visible .dak-info-tip {
2871
+ opacity: 1;
2872
+ transform: translateX(-50%) translateY(0);
2873
+ }
2874
+
2875
+ .dak-evidence {
2876
+ background: var(--dak-panel);
2877
+ border: 1px solid var(--dak-border);
2878
+ border-radius: 2px;
2879
+ color: var(--dak-accent);
2880
+ font-size: 12px;
2881
+ padding: 4px 8px;
2882
+ cursor: pointer;
2883
+ }
2884
+
2885
+ .dak-evidence:hover:not(:disabled) {
2886
+ border-color: var(--dak-border-hi);
2887
+ background: var(--dak-panel-hi);
2888
+ }
2889
+
2890
+ .dak-evidence:disabled {
2891
+ opacity: 0.45;
2892
+ cursor: default;
2893
+ }
2894
+
2895
+ /* ── Map roles ───────────────────────────────────────────────────────── */
2896
+ .dak-role-panel { display: grid; min-width: 0; gap: 12px; }
2897
+ .dak-role-panel .dak-table th,
2898
+ .dak-role-panel .dak-table td { white-space: normal; }
2899
+ .dak-role-panel .dak-info-tip {
2900
+ right: 0;
2901
+ left: auto;
2902
+ transform: translateY(2px);
2903
+ }
2904
+ .dak-role-panel .dak-info:hover .dak-info-tip,
2905
+ .dak-role-panel .dak-info:focus-visible .dak-info-tip { transform: translateY(0); }
2906
+ .dak-role-head { display: flex; align-items: start; justify-content: space-between; gap: 12px; }
2907
+ .dak-role-head h3 { margin: 0; }
2908
+ .dak-role-head p, .dak-role-note { margin: 4px 0 0; color: var(--dak-fg-dim); font-size: 12px; line-height: 1.5; }
2909
+ .dak-role-summary, .dak-role-declarations, .dak-role-evidence { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; color: var(--dak-fg-mid); font-size: 12px; }
2910
+ .dak-role-summary b, .dak-role-declarations b, .dak-role-evidence b { color: var(--dak-fg); }
2911
+ .dak-role-tag, .dak-role-status { border: 1px solid var(--dak-border); border-radius: 2px; padding: 2px 6px; font-size: 11px; }
2912
+ .dak-role-status-ready { color: var(--dak-ok); }
2913
+ .dak-role-status-mixed { color: var(--dak-warn); }
2914
+ .dak-role-status-insufficient, .dak-role-status-unknown { color: var(--dak-fg-dim); }
2915
+
2916
+ /* ── Event Bracket(瑞士轮 + 淘汰赛,DOM + SVG 双模式) ─────────────────── */
2917
+
2918
+ .dak-bracket-diagram {
2919
+ overflow-x: auto;
2920
+ margin: 10px 0 16px;
2921
+ border: 1px solid var(--dak-border);
2922
+ border-radius: 7px;
2923
+ background: var(--dak-bg);
2924
+ }
2925
+
2926
+ .dak-bracket-diagram svg {
2927
+ display: block;
2928
+ }
2929
+
2930
+ .dak-bracket-edge {
2931
+ fill: none;
2932
+ stroke: var(--dak-accent);
2933
+ stroke-width: 2;
2934
+ }
2935
+
2936
+ .dak-bracket-edge-loss {
2937
+ stroke: var(--dak-fg-dim);
2938
+ stroke-dasharray: 5 4;
2939
+ }
2940
+
2941
+ .dak-bracket-box {
2942
+ fill: var(--dak-panel);
2943
+ stroke: var(--dak-border-hi);
2944
+ }
2945
+
2946
+ .dak-bracket-box-title,
2947
+ .dak-bracket-box-match {
2948
+ fill: var(--dak-fg);
2949
+ font-family: var(--dak-sans);
2950
+ font-size: 12px;
2951
+ }
2952
+
2953
+ .dak-bracket-lane-separator {
2954
+ stroke: var(--dak-border);
2955
+ stroke-width: 1;
2956
+ }
2957
+
2958
+ .dak-bracket-lane-label {
2959
+ fill: var(--dak-fg-mid);
2960
+ font-family: var(--dak-sans);
2961
+ font-size: 12px;
2962
+ font-weight: 600;
2963
+ }
2964
+
2965
+ .dak-bracket-box-match {
2966
+ fill: var(--dak-fg-dim);
2967
+ font-size: 10px;
2968
+ }
2969
+
2970
+ .dak-bracket-round,
2971
+ .dak-bracket-links {
2972
+ display: grid;
2973
+ gap: 8px;
2974
+ }
2975
+
2976
+ .dak-bracket-node {
2977
+ border: 1px solid var(--dak-border);
2978
+ border-radius: 7px;
2979
+ background: var(--dak-panel);
2980
+ padding: 10px;
2981
+ }
2982
+
2983
+ .dak-bracket-links {
2984
+ color: var(--dak-fg-dim);
2985
+ font-size: 11px;
2986
+ }
2987
+
2988
+ .dak-eb {
2989
+ display: flex;
2990
+ gap: 18px;
2991
+ align-items: stretch;
2992
+ overflow-x: auto;
2993
+ padding: 6px 2px 12px;
2994
+ }
2995
+
2996
+ .dak-eb-col {
2997
+ display: flex;
2998
+ flex-direction: column;
2999
+ min-width: 210px;
3000
+ align-self: stretch;
3001
+ }
3002
+
3003
+ .dak-eb-col-body {
3004
+ flex: 1;
3005
+ display: flex;
3006
+ flex-direction: column;
3007
+ justify-content: center;
3008
+ gap: 10px;
3009
+ }
3010
+
3011
+ .dak-eb-elim {
3012
+ align-items: stretch;
3013
+ }
3014
+
3015
+ .dak-eb-elim-col .dak-eb-col-body {
3016
+ justify-content: space-evenly;
3017
+ }
3018
+
3019
+ .dak-eb-elim-matches {
3020
+ display: flex;
3021
+ flex-direction: column;
3022
+ gap: 14px;
3023
+ flex: 1;
3024
+ }
3025
+
3026
+ .dak-eb-col-head {
3027
+ font-size: 11px;
3028
+ font-weight: 800;
3029
+ letter-spacing: .1em;
3030
+ text-transform: uppercase;
3031
+ color: var(--dak-fg-mid);
3032
+ }
3033
+
3034
+ .dak-eb-group {
3035
+ display: flex;
3036
+ flex-direction: column;
3037
+ gap: 6px;
3038
+ }
3039
+
3040
+ .dak-eb-group-head {
3041
+ font-family: var(--dak-mono);
3042
+ font-size: 12px;
3043
+ font-weight: 700;
3044
+ color: var(--dak-fg-dim);
3045
+ }
3046
+
3047
+ .dak-eb-box {
3048
+ display: grid;
3049
+ gap: 1px;
3050
+ border: 1px solid var(--dak-border);
3051
+ border-radius: 7px;
3052
+ background: var(--dak-panel);
3053
+ overflow: hidden;
3054
+ text-align: left;
3055
+ width: 100%;
3056
+ padding: 0;
3057
+ }
3058
+
3059
+ .dak-eb-box-click {
3060
+ cursor: pointer;
3061
+ }
3062
+
3063
+ .dak-eb-box-click:hover {
3064
+ border-color: var(--dak-border-hi);
3065
+ }
3066
+
3067
+ .dak-eb-box-sel {
3068
+ border-color: var(--dak-accent);
3069
+ }
3070
+
3071
+ .dak-eb-team {
3072
+ display: flex;
3073
+ justify-content: space-between;
3074
+ align-items: center;
3075
+ gap: 8px;
3076
+ padding: 6px 9px;
3077
+ font-size: 13px;
3078
+ color: var(--dak-fg-mid);
3079
+ background: var(--dak-panel);
3080
+ }
3081
+
3082
+ .dak-eb-team b {
3083
+ font-family: var(--dak-mono);
3084
+ color: var(--dak-fg);
3085
+ }
3086
+
3087
+ .dak-eb-win {
3088
+ color: var(--dak-fg);
3089
+ font-weight: 700;
3090
+ border-left: 3px solid var(--dak-ok);
3091
+ }
3092
+
3093
+ .dak-eb-lose {
3094
+ color: var(--dak-fg-dim);
3095
+ border-left: 3px solid var(--dak-danger);
3096
+ }
3097
+
3098
+ .dak-eb-date {
3099
+ padding: 3px 9px;
3100
+ font-size: 10px;
3101
+ color: var(--dak-fg-dim);
3102
+ border-top: 1px solid var(--dak-border);
3103
+ }
3104
+
3105
+ .dak-eb-box-empty {
3106
+ padding: 12px 9px;
3107
+ border-style: dashed;
3108
+ color: var(--dak-fg-dim);
3109
+ font-size: 12px;
3110
+ cursor: pointer;
3111
+ }
3112
+
3113
+ .dak-eb-box-empty:hover {
3114
+ border-color: var(--dak-accent);
3115
+ color: var(--dak-accent);
3116
+ }
3117
+
3118
+ .dak-eb-add {
3119
+ border: 1px dashed var(--dak-border-hi);
3120
+ border-radius: 7px;
3121
+ background: transparent;
3122
+ color: var(--dak-fg-dim);
3123
+ font-size: 11px;
3124
+ padding: 5px;
3125
+ cursor: pointer;
3126
+ }
3127
+
3128
+ .dak-eb-add:hover {
3129
+ border-color: var(--dak-accent);
3130
+ color: var(--dak-accent);
3131
+ }
3132
+
3133
+ .dak-eb-outcomes {
3134
+ gap: 14px;
3135
+ }
3136
+
3137
+ .dak-eb-outcome {
3138
+ display: flex;
3139
+ flex-direction: column;
3140
+ gap: 4px;
3141
+ padding: 10px;
3142
+ border-radius: 7px;
3143
+ }
3144
+
3145
+ .dak-eb-advanced {
3146
+ background: color-mix(in srgb, var(--dak-ok) 14%, transparent);
3147
+ border: 1px solid color-mix(in srgb, var(--dak-ok) 40%, transparent);
3148
+ }
3149
+
3150
+ .dak-eb-eliminated {
3151
+ background: color-mix(in srgb, var(--dak-danger) 12%, transparent);
3152
+ border: 1px solid color-mix(in srgb, var(--dak-danger) 38%, transparent);
3153
+ }
3154
+
3155
+ .dak-eb-outcome-row {
3156
+ display: flex;
3157
+ justify-content: space-between;
3158
+ gap: 10px;
3159
+ font-size: 12px;
3160
+ color: var(--dak-fg);
3161
+ }
3162
+
3163
+ .dak-eb-outcome-row b {
3164
+ font-family: var(--dak-mono);
3165
+ color: var(--dak-fg-mid);
1721
3166
  }