@claudinho/cli 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +5 -1
  2. package/dist/index.js +1346 -228
  3. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -257,6 +257,151 @@ function nationToRegion(nameOrCode) {
257
257
  if (byCode) return byCode;
258
258
  return intlNameMap()[norm(nameOrCode)];
259
259
  }
260
+ var EN = {
261
+ "bracket.title": "Knockout bracket",
262
+ "bracket.stageTitle": "Knockout \xB7 {stage}",
263
+ "bracket.shareTitle": "Knockout bracket \xB7 2026",
264
+ "bracket.degraded": "Live scores unavailable \u2014 bracket structure only, no confirmed advancement.",
265
+ "bracket.standingsDegraded": "Live standings unavailable \u2014 group slots stay TBD until groups finish.",
266
+ "bracket.treeFallback": "Terminal too narrow for tree view \u2014 showing staged list.",
267
+ "bracket.empty": "No bracket matches available.",
268
+ "bracket.projected": "(proj.)",
269
+ "bracket.invalidStage": "Stage must be one of: R32, R16, QF, SF, 3P, F",
270
+ "bracket.unknownStage": 'Unknown stage "{stage}". Use R32, R16, QF, SF, 3P, or F.',
271
+ "bracket.slot.groupWinner": "Group {group} winner",
272
+ "bracket.slot.groupSecond": "Group {group} 2nd",
273
+ "bracket.slot.third": "3rd ({groups})",
274
+ "bracket.slot.winner": "{stage} {n} winner",
275
+ "bracket.slot.loser": "{stage} {n} loser",
276
+ "bracket.slot.tbd": "TBD",
277
+ "live.data": "Live data: {source}",
278
+ "share.tryIt": "Try it: {line}",
279
+ "stage.group": "Group {group}",
280
+ "stage.groupStage": "Group stage",
281
+ "stage.r32": "Round of 32",
282
+ "stage.r16": "Round of 16",
283
+ "stage.qf": "Quarter-final",
284
+ "stage.sf": "Semi-final",
285
+ "stage.3p": "Third-place play-off",
286
+ "stage.f": "Final",
287
+ "stage.friendly": "Friendly"
288
+ };
289
+ var ES = {
290
+ "bracket.title": "Cuadro de eliminatorias",
291
+ "bracket.stageTitle": "Eliminatorias \xB7 {stage}",
292
+ "bracket.shareTitle": "Cuadro de eliminatorias \xB7 2026",
293
+ "bracket.degraded": "Marcadores en vivo no disponibles \u2014 solo estructura del cuadro, sin avances confirmados.",
294
+ "bracket.standingsDegraded": "Tabla en vivo no disponible \u2014 los cupos de grupo siguen por definir hasta que terminen los grupos.",
295
+ "bracket.treeFallback": "Terminal demasiado estrecha para el \xE1rbol \u2014 mostrando lista por fase.",
296
+ "bracket.empty": "No hay partidos de eliminatorias disponibles.",
297
+ "bracket.projected": "(proy.)",
298
+ "bracket.invalidStage": "La fase debe ser una de: R32, R16, QF, SF, 3P, F",
299
+ "bracket.unknownStage": 'Fase desconocida "{stage}". Usa R32, R16, QF, SF, 3P o F.',
300
+ "bracket.slot.groupWinner": "Ganador del grupo {group}",
301
+ "bracket.slot.groupSecond": "2.\xBA del grupo {group}",
302
+ "bracket.slot.third": "3.\xBA ({groups})",
303
+ "bracket.slot.winner": "Ganador {stage} {n}",
304
+ "bracket.slot.loser": "Perdedor {stage} {n}",
305
+ "bracket.slot.tbd": "Por definir",
306
+ "live.data": "Datos en vivo: {source}",
307
+ "share.tryIt": "Pru\xE9balo: {line}",
308
+ "stage.group": "Grupo {group}",
309
+ "stage.groupStage": "Fase de grupos",
310
+ "stage.r32": "Dieciseisavos de final",
311
+ "stage.r16": "Octavos de final",
312
+ "stage.qf": "Cuartos de final",
313
+ "stage.sf": "Semifinal",
314
+ "stage.3p": "Tercer puesto",
315
+ "stage.f": "Final",
316
+ "stage.friendly": "Amistoso"
317
+ };
318
+ var PT = {
319
+ "bracket.title": "Chave do mata-mata",
320
+ "bracket.stageTitle": "Mata-mata \xB7 {stage}",
321
+ "bracket.shareTitle": "Chave do mata-mata \xB7 2026",
322
+ "bracket.degraded": "Placar ao vivo indispon\xEDvel \u2014 apenas a estrutura da chave, sem avan\xE7os confirmados.",
323
+ "bracket.standingsDegraded": "Classifica\xE7\xE3o ao vivo indispon\xEDvel \u2014 vagas de grupo seguem a definir at\xE9 o fim dos grupos.",
324
+ "bracket.treeFallback": "Terminal estreito demais para a \xE1rvore \u2014 mostrando lista por fase.",
325
+ "bracket.empty": "Nenhum jogo do mata-mata dispon\xEDvel.",
326
+ "bracket.projected": "(proj.)",
327
+ "bracket.invalidStage": "A fase deve ser uma de: R32, R16, QF, SF, 3P, F",
328
+ "bracket.unknownStage": 'Fase desconhecida "{stage}". Use R32, R16, QF, SF, 3P ou F.',
329
+ "bracket.slot.groupWinner": "Vencedor do grupo {group}",
330
+ "bracket.slot.groupSecond": "2.\xBA do grupo {group}",
331
+ "bracket.slot.third": "3.\xBA ({groups})",
332
+ "bracket.slot.winner": "Vencedor {stage} {n}",
333
+ "bracket.slot.loser": "Perdedor {stage} {n}",
334
+ "bracket.slot.tbd": "A definir",
335
+ "live.data": "Dados ao vivo: {source}",
336
+ "share.tryIt": "Experimente: {line}",
337
+ "stage.group": "Grupo {group}",
338
+ "stage.groupStage": "Fase de grupos",
339
+ "stage.r32": "Fase de 32 equipes",
340
+ "stage.r16": "Oitavas de final",
341
+ "stage.qf": "Quartas de final",
342
+ "stage.sf": "Semifinal",
343
+ "stage.3p": "Disputa do 3.\xBA lugar",
344
+ "stage.f": "Final",
345
+ "stage.friendly": "Amistoso"
346
+ };
347
+ var FR = {
348
+ "bracket.title": "Tableau \xE0 \xE9limination directe",
349
+ "bracket.stageTitle": "\xC9liminatoires \xB7 {stage}",
350
+ "bracket.shareTitle": "Tableau \xE0 \xE9limination directe \xB7 2026",
351
+ "bracket.degraded": "Scores en direct indisponibles \u2014 structure du tableau seulement, aucune qualification confirm\xE9e.",
352
+ "bracket.standingsDegraded": "Classement en direct indisponible \u2014 les places de groupe restent \xE0 d\xE9finir jusqu\u2019\xE0 la fin des poules.",
353
+ "bracket.treeFallback": "Terminal trop \xE9troit pour l\u2019arbre \u2014 affichage par phase.",
354
+ "bracket.empty": "Aucun match \xE0 \xE9limination directe disponible.",
355
+ "bracket.projected": "(proj.)",
356
+ "bracket.invalidStage": "La phase doit \xEAtre l\u2019une de : R32, R16, QF, SF, 3P, F",
357
+ "bracket.unknownStage": "Phase inconnue \xAB {stage} \xBB. Utilisez R32, R16, QF, SF, 3P ou F.",
358
+ "bracket.slot.groupWinner": "Vainqueur du groupe {group}",
359
+ "bracket.slot.groupSecond": "2e du groupe {group}",
360
+ "bracket.slot.third": "3e ({groups})",
361
+ "bracket.slot.winner": "Vainqueur {stage} {n}",
362
+ "bracket.slot.loser": "Perdant {stage} {n}",
363
+ "bracket.slot.tbd": "\xC0 d\xE9finir",
364
+ "live.data": "Donn\xE9es en direct : {source}",
365
+ "share.tryIt": "Essayez : {line}",
366
+ "stage.group": "Groupe {group}",
367
+ "stage.groupStage": "Phase de groupes",
368
+ "stage.r32": "Seizi\xE8mes de finale",
369
+ "stage.r16": "Huiti\xE8mes de finale",
370
+ "stage.qf": "Quarts de finale",
371
+ "stage.sf": "Demi-finale",
372
+ "stage.3p": "Match pour la 3e place",
373
+ "stage.f": "Finale",
374
+ "stage.friendly": "Match amical"
375
+ };
376
+ var CATALOGS = { en: EN, es: ES, pt: PT, fr: FR };
377
+ function normalizeLang(lang) {
378
+ const code = (lang ?? "en").slice(0, 2).toLowerCase();
379
+ if (code === "es" || code === "pt" || code === "fr") return code;
380
+ return "en";
381
+ }
382
+ function t(lang, key, vars) {
383
+ const dict = CATALOGS[normalizeLang(lang)];
384
+ let s = dict[key] ?? EN[key] ?? key;
385
+ if (vars) {
386
+ for (const [k, v] of Object.entries(vars)) s = s.replaceAll(`{${k}}`, v);
387
+ }
388
+ return s;
389
+ }
390
+ var STAGE_KEYS = {
391
+ GROUP: "stage.groupStage",
392
+ R32: "stage.r32",
393
+ R16: "stage.r16",
394
+ QF: "stage.qf",
395
+ SF: "stage.sf",
396
+ "3P": "stage.3p",
397
+ F: "stage.f",
398
+ FRIENDLY: "stage.friendly"
399
+ };
400
+ function stageLabelI18n(lang, stage, group) {
401
+ if (group) return t(lang, "stage.group", { group });
402
+ const key = STAGE_KEYS[stage];
403
+ return key ? t(lang, key) : stage;
404
+ }
260
405
  function isValidTimeZone(tz) {
261
406
  if (!tz) return false;
262
407
  try {
@@ -350,6 +495,11 @@ function localDate(iso, tz) {
350
495
  timeZone: zone
351
496
  }).format(new Date(iso));
352
497
  }
498
+ function outcomeFromScore(home, away) {
499
+ if (home > away) return "H";
500
+ if (home < away) return "A";
501
+ return "D";
502
+ }
353
503
  function isLive(status) {
354
504
  return status === "LIVE" || status === "HT";
355
505
  }
@@ -477,7 +627,7 @@ var schedule_2026_default = [
477
627
  flag: "\u{1F1FF}\u{1F1E6}"
478
628
  },
479
629
  status: "SCHEDULED",
480
- updatedAt: "2026-06-23T22:15:03.527Z"
630
+ updatedAt: "2026-06-24T01:20:06.301Z"
481
631
  },
482
632
  {
483
633
  id: "760414",
@@ -498,7 +648,7 @@ var schedule_2026_default = [
498
648
  flag: "\u{1F1E8}\u{1F1FF}"
499
649
  },
500
650
  status: "SCHEDULED",
501
- updatedAt: "2026-06-23T22:15:03.528Z"
651
+ updatedAt: "2026-06-24T01:20:06.302Z"
502
652
  },
503
653
  {
504
654
  id: "760416",
@@ -519,7 +669,7 @@ var schedule_2026_default = [
519
669
  flag: "\u{1F1E7}\u{1F1E6}"
520
670
  },
521
671
  status: "SCHEDULED",
522
- updatedAt: "2026-06-23T22:15:03.528Z"
672
+ updatedAt: "2026-06-24T01:20:06.302Z"
523
673
  },
524
674
  {
525
675
  id: "760417",
@@ -540,7 +690,7 @@ var schedule_2026_default = [
540
690
  flag: "\u{1F1F5}\u{1F1FE}"
541
691
  },
542
692
  status: "SCHEDULED",
543
- updatedAt: "2026-06-23T22:15:03.528Z"
693
+ updatedAt: "2026-06-24T01:20:06.302Z"
544
694
  },
545
695
  {
546
696
  id: "760420",
@@ -561,7 +711,7 @@ var schedule_2026_default = [
561
711
  flag: "\u{1F1E8}\u{1F1ED}"
562
712
  },
563
713
  status: "SCHEDULED",
564
- updatedAt: "2026-06-23T22:15:03.528Z"
714
+ updatedAt: "2026-06-24T01:20:06.302Z"
565
715
  },
566
716
  {
567
717
  id: "760419",
@@ -582,7 +732,7 @@ var schedule_2026_default = [
582
732
  flag: "\u{1F1F2}\u{1F1E6}"
583
733
  },
584
734
  status: "SCHEDULED",
585
- updatedAt: "2026-06-23T22:15:03.528Z"
735
+ updatedAt: "2026-06-24T01:20:06.302Z"
586
736
  },
587
737
  {
588
738
  id: "760418",
@@ -603,7 +753,7 @@ var schedule_2026_default = [
603
753
  flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}"
604
754
  },
605
755
  status: "SCHEDULED",
606
- updatedAt: "2026-06-23T22:15:03.528Z"
756
+ updatedAt: "2026-06-24T01:20:06.302Z"
607
757
  },
608
758
  {
609
759
  id: "760421",
@@ -624,7 +774,7 @@ var schedule_2026_default = [
624
774
  flag: "\u{1F1F9}\u{1F1F7}"
625
775
  },
626
776
  status: "SCHEDULED",
627
- updatedAt: "2026-06-23T22:15:03.528Z"
777
+ updatedAt: "2026-06-24T01:20:06.302Z"
628
778
  },
629
779
  {
630
780
  id: "760422",
@@ -645,7 +795,7 @@ var schedule_2026_default = [
645
795
  flag: "\u{1F1E8}\u{1F1FC}"
646
796
  },
647
797
  status: "SCHEDULED",
648
- updatedAt: "2026-06-23T22:15:03.528Z"
798
+ updatedAt: "2026-06-24T01:20:06.302Z"
649
799
  },
650
800
  {
651
801
  id: "760425",
@@ -666,7 +816,7 @@ var schedule_2026_default = [
666
816
  flag: "\u{1F1EF}\u{1F1F5}"
667
817
  },
668
818
  status: "SCHEDULED",
669
- updatedAt: "2026-06-23T22:15:03.528Z"
819
+ updatedAt: "2026-06-24T01:20:06.302Z"
670
820
  },
671
821
  {
672
822
  id: "760423",
@@ -687,7 +837,7 @@ var schedule_2026_default = [
687
837
  flag: "\u{1F1EA}\u{1F1E8}"
688
838
  },
689
839
  status: "SCHEDULED",
690
- updatedAt: "2026-06-23T22:15:03.528Z"
840
+ updatedAt: "2026-06-24T01:20:06.302Z"
691
841
  },
692
842
  {
693
843
  id: "760424",
@@ -708,7 +858,7 @@ var schedule_2026_default = [
708
858
  flag: "\u{1F1F9}\u{1F1F3}"
709
859
  },
710
860
  status: "SCHEDULED",
711
- updatedAt: "2026-06-23T22:15:03.528Z"
861
+ updatedAt: "2026-06-24T01:20:06.302Z"
712
862
  },
713
863
  {
714
864
  id: "760428",
@@ -729,7 +879,7 @@ var schedule_2026_default = [
729
879
  flag: "\u{1F1E8}\u{1F1FB}"
730
880
  },
731
881
  status: "SCHEDULED",
732
- updatedAt: "2026-06-23T22:15:03.528Z"
882
+ updatedAt: "2026-06-24T01:20:06.302Z"
733
883
  },
734
884
  {
735
885
  id: "760426",
@@ -750,7 +900,7 @@ var schedule_2026_default = [
750
900
  flag: "\u{1F1EA}\u{1F1EC}"
751
901
  },
752
902
  status: "SCHEDULED",
753
- updatedAt: "2026-06-23T22:15:03.528Z"
903
+ updatedAt: "2026-06-24T01:20:06.302Z"
754
904
  },
755
905
  {
756
906
  id: "760429",
@@ -771,7 +921,7 @@ var schedule_2026_default = [
771
921
  flag: "\u{1F1FA}\u{1F1FE}"
772
922
  },
773
923
  status: "SCHEDULED",
774
- updatedAt: "2026-06-23T22:15:03.528Z"
924
+ updatedAt: "2026-06-24T01:20:06.302Z"
775
925
  },
776
926
  {
777
927
  id: "760427",
@@ -792,7 +942,7 @@ var schedule_2026_default = [
792
942
  flag: "\u{1F1F3}\u{1F1FF}"
793
943
  },
794
944
  status: "SCHEDULED",
795
- updatedAt: "2026-06-23T22:15:03.528Z"
945
+ updatedAt: "2026-06-24T01:20:06.302Z"
796
946
  },
797
947
  {
798
948
  id: "760432",
@@ -813,7 +963,7 @@ var schedule_2026_default = [
813
963
  flag: "\u{1F1F8}\u{1F1F3}"
814
964
  },
815
965
  status: "SCHEDULED",
816
- updatedAt: "2026-06-23T22:15:03.528Z"
966
+ updatedAt: "2026-06-24T01:20:06.302Z"
817
967
  },
818
968
  {
819
969
  id: "760430",
@@ -834,7 +984,7 @@ var schedule_2026_default = [
834
984
  flag: "\u{1F1F3}\u{1F1F4}"
835
985
  },
836
986
  status: "SCHEDULED",
837
- updatedAt: "2026-06-23T22:15:03.528Z"
987
+ updatedAt: "2026-06-24T01:20:06.302Z"
838
988
  },
839
989
  {
840
990
  id: "760433",
@@ -855,7 +1005,7 @@ var schedule_2026_default = [
855
1005
  flag: "\u{1F1E9}\u{1F1FF}"
856
1006
  },
857
1007
  status: "SCHEDULED",
858
- updatedAt: "2026-06-23T22:15:03.528Z"
1008
+ updatedAt: "2026-06-24T01:20:06.302Z"
859
1009
  },
860
1010
  {
861
1011
  id: "760431",
@@ -876,7 +1026,7 @@ var schedule_2026_default = [
876
1026
  flag: "\u{1F1EF}\u{1F1F4}"
877
1027
  },
878
1028
  status: "SCHEDULED",
879
- updatedAt: "2026-06-23T22:15:03.528Z"
1029
+ updatedAt: "2026-06-24T01:20:06.302Z"
880
1030
  },
881
1031
  {
882
1032
  id: "760435",
@@ -897,7 +1047,7 @@ var schedule_2026_default = [
897
1047
  flag: "\u{1F1E8}\u{1F1E9}"
898
1048
  },
899
1049
  status: "SCHEDULED",
900
- updatedAt: "2026-06-23T22:15:03.528Z"
1050
+ updatedAt: "2026-06-24T01:20:06.302Z"
901
1051
  },
902
1052
  {
903
1053
  id: "760437",
@@ -918,7 +1068,7 @@ var schedule_2026_default = [
918
1068
  flag: "\u{1F1ED}\u{1F1F7}"
919
1069
  },
920
1070
  status: "SCHEDULED",
921
- updatedAt: "2026-06-23T22:15:03.528Z"
1071
+ updatedAt: "2026-06-24T01:20:06.302Z"
922
1072
  },
923
1073
  {
924
1074
  id: "760434",
@@ -939,7 +1089,7 @@ var schedule_2026_default = [
939
1089
  flag: "\u{1F1F5}\u{1F1E6}"
940
1090
  },
941
1091
  status: "SCHEDULED",
942
- updatedAt: "2026-06-23T22:15:03.528Z"
1092
+ updatedAt: "2026-06-24T01:20:06.302Z"
943
1093
  },
944
1094
  {
945
1095
  id: "760436",
@@ -960,7 +1110,7 @@ var schedule_2026_default = [
960
1110
  flag: "\u{1F1E8}\u{1F1F4}"
961
1111
  },
962
1112
  status: "SCHEDULED",
963
- updatedAt: "2026-06-23T22:15:03.528Z"
1113
+ updatedAt: "2026-06-24T01:20:06.302Z"
964
1114
  },
965
1115
  {
966
1116
  id: "760438",
@@ -981,7 +1131,7 @@ var schedule_2026_default = [
981
1131
  flag: "\u{1F1FF}\u{1F1E6}"
982
1132
  },
983
1133
  status: "SCHEDULED",
984
- updatedAt: "2026-06-23T22:15:03.624Z"
1134
+ updatedAt: "2026-06-24T01:20:06.394Z"
985
1135
  },
986
1136
  {
987
1137
  id: "760439",
@@ -1002,7 +1152,7 @@ var schedule_2026_default = [
1002
1152
  flag: "\u{1F1E7}\u{1F1E6}"
1003
1153
  },
1004
1154
  status: "SCHEDULED",
1005
- updatedAt: "2026-06-23T22:15:03.624Z"
1155
+ updatedAt: "2026-06-24T01:20:06.394Z"
1006
1156
  },
1007
1157
  {
1008
1158
  id: "760440",
@@ -1023,7 +1173,7 @@ var schedule_2026_default = [
1023
1173
  flag: "\u{1F1F6}\u{1F1E6}"
1024
1174
  },
1025
1175
  status: "SCHEDULED",
1026
- updatedAt: "2026-06-23T22:15:03.624Z"
1176
+ updatedAt: "2026-06-24T01:20:06.394Z"
1027
1177
  },
1028
1178
  {
1029
1179
  id: "760441",
@@ -1044,7 +1194,7 @@ var schedule_2026_default = [
1044
1194
  flag: "\u{1F1F0}\u{1F1F7}"
1045
1195
  },
1046
1196
  status: "SCHEDULED",
1047
- updatedAt: "2026-06-23T22:15:03.624Z"
1197
+ updatedAt: "2026-06-24T01:20:06.394Z"
1048
1198
  },
1049
1199
  {
1050
1200
  id: "760442",
@@ -1065,7 +1215,7 @@ var schedule_2026_default = [
1065
1215
  flag: "\u{1F1E6}\u{1F1FA}"
1066
1216
  },
1067
1217
  status: "SCHEDULED",
1068
- updatedAt: "2026-06-23T22:15:03.624Z"
1218
+ updatedAt: "2026-06-24T01:20:06.394Z"
1069
1219
  },
1070
1220
  {
1071
1221
  id: "760445",
@@ -1086,7 +1236,7 @@ var schedule_2026_default = [
1086
1236
  flag: "\u{1F1F2}\u{1F1E6}"
1087
1237
  },
1088
1238
  status: "SCHEDULED",
1089
- updatedAt: "2026-06-23T22:15:03.624Z"
1239
+ updatedAt: "2026-06-24T01:20:06.394Z"
1090
1240
  },
1091
1241
  {
1092
1242
  id: "760444",
@@ -1107,7 +1257,7 @@ var schedule_2026_default = [
1107
1257
  flag: "\u{1F1ED}\u{1F1F9}"
1108
1258
  },
1109
1259
  status: "SCHEDULED",
1110
- updatedAt: "2026-06-23T22:15:03.624Z"
1260
+ updatedAt: "2026-06-24T01:20:06.394Z"
1111
1261
  },
1112
1262
  {
1113
1263
  id: "760443",
@@ -1128,7 +1278,7 @@ var schedule_2026_default = [
1128
1278
  flag: "\u{1F1F5}\u{1F1FE}"
1129
1279
  },
1130
1280
  status: "SCHEDULED",
1131
- updatedAt: "2026-06-23T22:15:03.624Z"
1281
+ updatedAt: "2026-06-24T01:20:06.394Z"
1132
1282
  },
1133
1283
  {
1134
1284
  id: "760447",
@@ -1149,7 +1299,7 @@ var schedule_2026_default = [
1149
1299
  flag: "\u{1F1F8}\u{1F1EA}"
1150
1300
  },
1151
1301
  status: "SCHEDULED",
1152
- updatedAt: "2026-06-23T22:15:03.624Z"
1302
+ updatedAt: "2026-06-24T01:20:06.394Z"
1153
1303
  },
1154
1304
  {
1155
1305
  id: "760448",
@@ -1170,7 +1320,7 @@ var schedule_2026_default = [
1170
1320
  flag: "\u{1F1E8}\u{1F1EE}"
1171
1321
  },
1172
1322
  status: "SCHEDULED",
1173
- updatedAt: "2026-06-23T22:15:03.624Z"
1323
+ updatedAt: "2026-06-24T01:20:06.394Z"
1174
1324
  },
1175
1325
  {
1176
1326
  id: "760446",
@@ -1191,7 +1341,7 @@ var schedule_2026_default = [
1191
1341
  flag: "\u{1F1E8}\u{1F1FC}"
1192
1342
  },
1193
1343
  status: "SCHEDULED",
1194
- updatedAt: "2026-06-23T22:15:03.624Z"
1344
+ updatedAt: "2026-06-24T01:20:06.394Z"
1195
1345
  },
1196
1346
  {
1197
1347
  id: "760449",
@@ -1212,7 +1362,7 @@ var schedule_2026_default = [
1212
1362
  flag: "\u{1F1EF}\u{1F1F5}"
1213
1363
  },
1214
1364
  status: "SCHEDULED",
1215
- updatedAt: "2026-06-23T22:15:03.624Z"
1365
+ updatedAt: "2026-06-24T01:20:06.394Z"
1216
1366
  },
1217
1367
  {
1218
1368
  id: "760453",
@@ -1233,7 +1383,7 @@ var schedule_2026_default = [
1233
1383
  flag: "\u{1F1F8}\u{1F1E6}"
1234
1384
  },
1235
1385
  status: "SCHEDULED",
1236
- updatedAt: "2026-06-23T22:15:03.624Z"
1386
+ updatedAt: "2026-06-24T01:20:06.394Z"
1237
1387
  },
1238
1388
  {
1239
1389
  id: "760451",
@@ -1254,7 +1404,7 @@ var schedule_2026_default = [
1254
1404
  flag: "\u{1F1EE}\u{1F1F7}"
1255
1405
  },
1256
1406
  status: "SCHEDULED",
1257
- updatedAt: "2026-06-23T22:15:03.624Z"
1407
+ updatedAt: "2026-06-24T01:20:06.394Z"
1258
1408
  },
1259
1409
  {
1260
1410
  id: "760450",
@@ -1275,7 +1425,7 @@ var schedule_2026_default = [
1275
1425
  flag: "\u{1F1E8}\u{1F1FB}"
1276
1426
  },
1277
1427
  status: "SCHEDULED",
1278
- updatedAt: "2026-06-23T22:15:03.624Z"
1428
+ updatedAt: "2026-06-24T01:20:06.394Z"
1279
1429
  },
1280
1430
  {
1281
1431
  id: "760452",
@@ -1296,7 +1446,7 @@ var schedule_2026_default = [
1296
1446
  flag: "\u{1F1EA}\u{1F1EC}"
1297
1447
  },
1298
1448
  status: "SCHEDULED",
1299
- updatedAt: "2026-06-23T22:15:03.624Z"
1449
+ updatedAt: "2026-06-24T01:20:06.394Z"
1300
1450
  },
1301
1451
  {
1302
1452
  id: "760456",
@@ -1317,7 +1467,7 @@ var schedule_2026_default = [
1317
1467
  flag: "\u{1F1E6}\u{1F1F9}"
1318
1468
  },
1319
1469
  status: "SCHEDULED",
1320
- updatedAt: "2026-06-23T22:15:03.624Z"
1470
+ updatedAt: "2026-06-24T01:20:06.394Z"
1321
1471
  },
1322
1472
  {
1323
1473
  id: "760457",
@@ -1338,7 +1488,7 @@ var schedule_2026_default = [
1338
1488
  flag: "\u{1F1EE}\u{1F1F6}"
1339
1489
  },
1340
1490
  status: "SCHEDULED",
1341
- updatedAt: "2026-06-23T22:15:03.624Z"
1491
+ updatedAt: "2026-06-24T01:20:06.394Z"
1342
1492
  },
1343
1493
  {
1344
1494
  id: "760454",
@@ -1359,7 +1509,7 @@ var schedule_2026_default = [
1359
1509
  flag: "\u{1F1F8}\u{1F1F3}"
1360
1510
  },
1361
1511
  status: "SCHEDULED",
1362
- updatedAt: "2026-06-23T22:15:03.624Z"
1512
+ updatedAt: "2026-06-24T01:20:06.394Z"
1363
1513
  },
1364
1514
  {
1365
1515
  id: "760455",
@@ -1380,7 +1530,7 @@ var schedule_2026_default = [
1380
1530
  flag: "\u{1F1E9}\u{1F1FF}"
1381
1531
  },
1382
1532
  status: "SCHEDULED",
1383
- updatedAt: "2026-06-23T22:15:03.624Z"
1533
+ updatedAt: "2026-06-24T01:20:06.394Z"
1384
1534
  },
1385
1535
  {
1386
1536
  id: "760461",
@@ -1401,7 +1551,7 @@ var schedule_2026_default = [
1401
1551
  flag: "\u{1F1FA}\u{1F1FF}"
1402
1552
  },
1403
1553
  status: "SCHEDULED",
1404
- updatedAt: "2026-06-23T22:15:03.624Z"
1554
+ updatedAt: "2026-06-24T01:20:06.394Z"
1405
1555
  },
1406
1556
  {
1407
1557
  id: "760458",
@@ -1422,7 +1572,7 @@ var schedule_2026_default = [
1422
1572
  flag: "\u{1F1EC}\u{1F1ED}"
1423
1573
  },
1424
1574
  status: "SCHEDULED",
1425
- updatedAt: "2026-06-23T22:15:03.624Z"
1575
+ updatedAt: "2026-06-24T01:20:06.394Z"
1426
1576
  },
1427
1577
  {
1428
1578
  id: "760460",
@@ -1443,7 +1593,7 @@ var schedule_2026_default = [
1443
1593
  flag: "\u{1F1ED}\u{1F1F7}"
1444
1594
  },
1445
1595
  status: "SCHEDULED",
1446
- updatedAt: "2026-06-23T22:15:03.624Z"
1596
+ updatedAt: "2026-06-24T01:20:06.394Z"
1447
1597
  },
1448
1598
  {
1449
1599
  id: "760459",
@@ -1464,7 +1614,7 @@ var schedule_2026_default = [
1464
1614
  flag: "\u{1F1E8}\u{1F1E9}"
1465
1615
  },
1466
1616
  status: "SCHEDULED",
1467
- updatedAt: "2026-06-23T22:15:03.624Z"
1617
+ updatedAt: "2026-06-24T01:20:06.394Z"
1468
1618
  },
1469
1619
  {
1470
1620
  id: "760462",
@@ -1485,7 +1635,7 @@ var schedule_2026_default = [
1485
1635
  flag: "\u{1F1F6}\u{1F1E6}"
1486
1636
  },
1487
1637
  status: "SCHEDULED",
1488
- updatedAt: "2026-06-23T22:15:03.624Z"
1638
+ updatedAt: "2026-06-24T01:20:06.394Z"
1489
1639
  },
1490
1640
  {
1491
1641
  id: "760463",
@@ -1506,7 +1656,7 @@ var schedule_2026_default = [
1506
1656
  flag: "\u{1F1E8}\u{1F1E6}"
1507
1657
  },
1508
1658
  status: "SCHEDULED",
1509
- updatedAt: "2026-06-23T22:15:03.624Z"
1659
+ updatedAt: "2026-06-24T01:20:06.394Z"
1510
1660
  },
1511
1661
  {
1512
1662
  id: "760464",
@@ -1527,7 +1677,7 @@ var schedule_2026_default = [
1527
1677
  flag: "\u{1F1ED}\u{1F1F9}"
1528
1678
  },
1529
1679
  status: "SCHEDULED",
1530
- updatedAt: "2026-06-23T22:15:03.624Z"
1680
+ updatedAt: "2026-06-24T01:20:06.394Z"
1531
1681
  },
1532
1682
  {
1533
1683
  id: "760465",
@@ -1548,7 +1698,7 @@ var schedule_2026_default = [
1548
1698
  flag: "\u{1F1E7}\u{1F1F7}"
1549
1699
  },
1550
1700
  status: "SCHEDULED",
1551
- updatedAt: "2026-06-23T22:15:03.624Z"
1701
+ updatedAt: "2026-06-24T01:20:06.394Z"
1552
1702
  },
1553
1703
  {
1554
1704
  id: "760467",
@@ -1569,7 +1719,7 @@ var schedule_2026_default = [
1569
1719
  flag: "\u{1F1F2}\u{1F1FD}"
1570
1720
  },
1571
1721
  status: "SCHEDULED",
1572
- updatedAt: "2026-06-23T22:15:03.624Z"
1722
+ updatedAt: "2026-06-24T01:20:06.394Z"
1573
1723
  },
1574
1724
  {
1575
1725
  id: "760466",
@@ -1590,7 +1740,7 @@ var schedule_2026_default = [
1590
1740
  flag: "\u{1F1F0}\u{1F1F7}"
1591
1741
  },
1592
1742
  status: "SCHEDULED",
1593
- updatedAt: "2026-06-23T22:15:03.624Z"
1743
+ updatedAt: "2026-06-24T01:20:06.394Z"
1594
1744
  },
1595
1745
  {
1596
1746
  id: "760473",
@@ -1611,7 +1761,7 @@ var schedule_2026_default = [
1611
1761
  flag: "\u{1F1E8}\u{1F1EE}"
1612
1762
  },
1613
1763
  status: "SCHEDULED",
1614
- updatedAt: "2026-06-23T22:15:03.692Z"
1764
+ updatedAt: "2026-06-24T01:20:06.523Z"
1615
1765
  },
1616
1766
  {
1617
1767
  id: "760468",
@@ -1632,7 +1782,7 @@ var schedule_2026_default = [
1632
1782
  flag: "\u{1F1E9}\u{1F1EA}"
1633
1783
  },
1634
1784
  status: "SCHEDULED",
1635
- updatedAt: "2026-06-23T22:15:03.692Z"
1785
+ updatedAt: "2026-06-24T01:20:06.523Z"
1636
1786
  },
1637
1787
  {
1638
1788
  id: "760471",
@@ -1653,7 +1803,7 @@ var schedule_2026_default = [
1653
1803
  flag: "\u{1F1F8}\u{1F1EA}"
1654
1804
  },
1655
1805
  status: "SCHEDULED",
1656
- updatedAt: "2026-06-23T22:15:03.692Z"
1806
+ updatedAt: "2026-06-24T01:20:06.523Z"
1657
1807
  },
1658
1808
  {
1659
1809
  id: "760472",
@@ -1674,7 +1824,7 @@ var schedule_2026_default = [
1674
1824
  flag: "\u{1F1F3}\u{1F1F1}"
1675
1825
  },
1676
1826
  status: "SCHEDULED",
1677
- updatedAt: "2026-06-23T22:15:03.692Z"
1827
+ updatedAt: "2026-06-24T01:20:06.523Z"
1678
1828
  },
1679
1829
  {
1680
1830
  id: "760469",
@@ -1695,7 +1845,7 @@ var schedule_2026_default = [
1695
1845
  flag: "\u{1F1E6}\u{1F1FA}"
1696
1846
  },
1697
1847
  status: "SCHEDULED",
1698
- updatedAt: "2026-06-23T22:15:03.692Z"
1848
+ updatedAt: "2026-06-24T01:20:06.523Z"
1699
1849
  },
1700
1850
  {
1701
1851
  id: "760470",
@@ -1716,7 +1866,7 @@ var schedule_2026_default = [
1716
1866
  flag: "\u{1F1FA}\u{1F1F8}"
1717
1867
  },
1718
1868
  status: "SCHEDULED",
1719
- updatedAt: "2026-06-23T22:15:03.692Z"
1869
+ updatedAt: "2026-06-24T01:20:06.523Z"
1720
1870
  },
1721
1871
  {
1722
1872
  id: "760475",
@@ -1737,7 +1887,7 @@ var schedule_2026_default = [
1737
1887
  flag: "\u{1F1EB}\u{1F1F7}"
1738
1888
  },
1739
1889
  status: "SCHEDULED",
1740
- updatedAt: "2026-06-23T22:15:03.692Z"
1890
+ updatedAt: "2026-06-24T01:20:06.523Z"
1741
1891
  },
1742
1892
  {
1743
1893
  id: "760474",
@@ -1758,7 +1908,7 @@ var schedule_2026_default = [
1758
1908
  flag: "\u{1F1EE}\u{1F1F6}"
1759
1909
  },
1760
1910
  status: "SCHEDULED",
1761
- updatedAt: "2026-06-23T22:15:03.692Z"
1911
+ updatedAt: "2026-06-24T01:20:06.523Z"
1762
1912
  },
1763
1913
  {
1764
1914
  id: "760478",
@@ -1779,7 +1929,7 @@ var schedule_2026_default = [
1779
1929
  flag: "\u{1F1F8}\u{1F1E6}"
1780
1930
  },
1781
1931
  status: "SCHEDULED",
1782
- updatedAt: "2026-06-23T22:15:03.692Z"
1932
+ updatedAt: "2026-06-24T01:20:06.523Z"
1783
1933
  },
1784
1934
  {
1785
1935
  id: "760479",
@@ -1800,7 +1950,7 @@ var schedule_2026_default = [
1800
1950
  flag: "\u{1F1EA}\u{1F1F8}"
1801
1951
  },
1802
1952
  status: "SCHEDULED",
1803
- updatedAt: "2026-06-23T22:15:03.692Z"
1953
+ updatedAt: "2026-06-24T01:20:06.523Z"
1804
1954
  },
1805
1955
  {
1806
1956
  id: "760476",
@@ -1821,7 +1971,7 @@ var schedule_2026_default = [
1821
1971
  flag: "\u{1F1EE}\u{1F1F7}"
1822
1972
  },
1823
1973
  status: "SCHEDULED",
1824
- updatedAt: "2026-06-23T22:15:03.692Z"
1974
+ updatedAt: "2026-06-24T01:20:06.523Z"
1825
1975
  },
1826
1976
  {
1827
1977
  id: "760477",
@@ -1842,7 +1992,7 @@ var schedule_2026_default = [
1842
1992
  flag: "\u{1F1E7}\u{1F1EA}"
1843
1993
  },
1844
1994
  status: "SCHEDULED",
1845
- updatedAt: "2026-06-23T22:15:03.692Z"
1995
+ updatedAt: "2026-06-24T01:20:06.523Z"
1846
1996
  },
1847
1997
  {
1848
1998
  id: "760480",
@@ -1863,7 +2013,7 @@ var schedule_2026_default = [
1863
2013
  flag: "\u{1F1EC}\u{1F1ED}"
1864
2014
  },
1865
2015
  status: "SCHEDULED",
1866
- updatedAt: "2026-06-23T22:15:03.692Z"
2016
+ updatedAt: "2026-06-24T01:20:06.523Z"
1867
2017
  },
1868
2018
  {
1869
2019
  id: "760485",
@@ -1884,7 +2034,7 @@ var schedule_2026_default = [
1884
2034
  flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}"
1885
2035
  },
1886
2036
  status: "SCHEDULED",
1887
- updatedAt: "2026-06-23T22:15:03.692Z"
2037
+ updatedAt: "2026-06-24T01:20:06.523Z"
1888
2038
  },
1889
2039
  {
1890
2040
  id: "760481",
@@ -1905,7 +2055,7 @@ var schedule_2026_default = [
1905
2055
  flag: "\u{1F1F5}\u{1F1F9}"
1906
2056
  },
1907
2057
  status: "SCHEDULED",
1908
- updatedAt: "2026-06-23T22:15:03.692Z"
2058
+ updatedAt: "2026-06-24T01:20:06.523Z"
1909
2059
  },
1910
2060
  {
1911
2061
  id: "760482",
@@ -1926,7 +2076,7 @@ var schedule_2026_default = [
1926
2076
  flag: "\u{1F1FA}\u{1F1FF}"
1927
2077
  },
1928
2078
  status: "SCHEDULED",
1929
- updatedAt: "2026-06-23T22:15:03.692Z"
2079
+ updatedAt: "2026-06-24T01:20:06.523Z"
1930
2080
  },
1931
2081
  {
1932
2082
  id: "760484",
@@ -1947,7 +2097,7 @@ var schedule_2026_default = [
1947
2097
  flag: "\u{1F1E6}\u{1F1F9}"
1948
2098
  },
1949
2099
  status: "SCHEDULED",
1950
- updatedAt: "2026-06-23T22:15:03.692Z"
2100
+ updatedAt: "2026-06-24T01:20:06.523Z"
1951
2101
  },
1952
2102
  {
1953
2103
  id: "760483",
@@ -1968,7 +2118,7 @@ var schedule_2026_default = [
1968
2118
  flag: "\u{1F1E6}\u{1F1F7}"
1969
2119
  },
1970
2120
  status: "SCHEDULED",
1971
- updatedAt: "2026-06-23T22:15:03.692Z"
2121
+ updatedAt: "2026-06-24T01:20:06.523Z"
1972
2122
  },
1973
2123
  {
1974
2124
  id: "760486",
@@ -1988,7 +2138,7 @@ var schedule_2026_default = [
1988
2138
  flag: "\u{1F3F3}\uFE0F"
1989
2139
  },
1990
2140
  status: "SCHEDULED",
1991
- updatedAt: "2026-06-23T22:15:03.697Z"
2141
+ updatedAt: "2026-06-24T01:20:06.529Z"
1992
2142
  },
1993
2143
  {
1994
2144
  id: "760487",
@@ -2008,7 +2158,7 @@ var schedule_2026_default = [
2008
2158
  flag: "\u{1F3F3}\uFE0F"
2009
2159
  },
2010
2160
  status: "SCHEDULED",
2011
- updatedAt: "2026-06-23T22:15:03.697Z"
2161
+ updatedAt: "2026-06-24T01:20:06.529Z"
2012
2162
  },
2013
2163
  {
2014
2164
  id: "760489",
@@ -2018,9 +2168,9 @@ var schedule_2026_default = [
2018
2168
  city: "Foxborough, Massachusetts",
2019
2169
  country: "USA",
2020
2170
  home: {
2021
- code: "GER",
2171
+ code: "TBD",
2022
2172
  name: "Germany",
2023
- flag: "\u{1F1E9}\u{1F1EA}"
2173
+ flag: "\u{1F3F3}\uFE0F"
2024
2174
  },
2025
2175
  away: {
2026
2176
  code: "3RD",
@@ -2028,7 +2178,7 @@ var schedule_2026_default = [
2028
2178
  flag: "\u{1F3F3}\uFE0F"
2029
2179
  },
2030
2180
  status: "SCHEDULED",
2031
- updatedAt: "2026-06-23T22:15:03.697Z"
2181
+ updatedAt: "2026-06-24T01:20:06.529Z"
2032
2182
  },
2033
2183
  {
2034
2184
  id: "760488",
@@ -2048,7 +2198,7 @@ var schedule_2026_default = [
2048
2198
  flag: "\u{1F3F3}\uFE0F"
2049
2199
  },
2050
2200
  status: "SCHEDULED",
2051
- updatedAt: "2026-06-23T22:15:03.697Z"
2201
+ updatedAt: "2026-06-24T01:20:06.529Z"
2052
2202
  },
2053
2203
  {
2054
2204
  id: "760490",
@@ -2068,7 +2218,7 @@ var schedule_2026_default = [
2068
2218
  flag: "\u{1F3F3}\uFE0F"
2069
2219
  },
2070
2220
  status: "SCHEDULED",
2071
- updatedAt: "2026-06-23T22:15:03.697Z"
2221
+ updatedAt: "2026-06-24T01:20:06.529Z"
2072
2222
  },
2073
2223
  {
2074
2224
  id: "760492",
@@ -2088,7 +2238,7 @@ var schedule_2026_default = [
2088
2238
  flag: "\u{1F3F3}\uFE0F"
2089
2239
  },
2090
2240
  status: "SCHEDULED",
2091
- updatedAt: "2026-06-23T22:15:03.697Z"
2241
+ updatedAt: "2026-06-24T01:20:06.529Z"
2092
2242
  },
2093
2243
  {
2094
2244
  id: "760491",
@@ -2098,9 +2248,9 @@ var schedule_2026_default = [
2098
2248
  city: "Mexico City",
2099
2249
  country: "Mexico",
2100
2250
  home: {
2101
- code: "MEX",
2251
+ code: "TBD",
2102
2252
  name: "Mexico",
2103
- flag: "\u{1F1F2}\u{1F1FD}"
2253
+ flag: "\u{1F3F3}\uFE0F"
2104
2254
  },
2105
2255
  away: {
2106
2256
  code: "3RD",
@@ -2108,7 +2258,7 @@ var schedule_2026_default = [
2108
2258
  flag: "\u{1F3F3}\uFE0F"
2109
2259
  },
2110
2260
  status: "SCHEDULED",
2111
- updatedAt: "2026-06-23T22:15:03.697Z"
2261
+ updatedAt: "2026-06-24T01:20:06.529Z"
2112
2262
  },
2113
2263
  {
2114
2264
  id: "760495",
@@ -2128,7 +2278,7 @@ var schedule_2026_default = [
2128
2278
  flag: "\u{1F3F3}\uFE0F"
2129
2279
  },
2130
2280
  status: "SCHEDULED",
2131
- updatedAt: "2026-06-23T22:15:03.697Z"
2281
+ updatedAt: "2026-06-24T01:20:06.529Z"
2132
2282
  },
2133
2283
  {
2134
2284
  id: "760493",
@@ -2148,7 +2298,7 @@ var schedule_2026_default = [
2148
2298
  flag: "\u{1F3F3}\uFE0F"
2149
2299
  },
2150
2300
  status: "SCHEDULED",
2151
- updatedAt: "2026-06-23T22:15:03.697Z"
2301
+ updatedAt: "2026-06-24T01:20:06.529Z"
2152
2302
  },
2153
2303
  {
2154
2304
  id: "760494",
@@ -2158,9 +2308,9 @@ var schedule_2026_default = [
2158
2308
  city: "Santa Clara, California",
2159
2309
  country: "USA",
2160
2310
  home: {
2161
- code: "USA",
2311
+ code: "TBD",
2162
2312
  name: "United States",
2163
- flag: "\u{1F1FA}\u{1F1F8}"
2313
+ flag: "\u{1F3F3}\uFE0F"
2164
2314
  },
2165
2315
  away: {
2166
2316
  code: "3RD",
@@ -2168,7 +2318,7 @@ var schedule_2026_default = [
2168
2318
  flag: "\u{1F3F3}\uFE0F"
2169
2319
  },
2170
2320
  status: "SCHEDULED",
2171
- updatedAt: "2026-06-23T22:15:03.697Z"
2321
+ updatedAt: "2026-06-24T01:20:06.529Z"
2172
2322
  },
2173
2323
  {
2174
2324
  id: "760497",
@@ -2188,7 +2338,7 @@ var schedule_2026_default = [
2188
2338
  flag: "\u{1F3F3}\uFE0F"
2189
2339
  },
2190
2340
  status: "SCHEDULED",
2191
- updatedAt: "2026-06-23T22:15:03.762Z"
2341
+ updatedAt: "2026-06-24T01:20:06.593Z"
2192
2342
  },
2193
2343
  {
2194
2344
  id: "760496",
@@ -2208,7 +2358,7 @@ var schedule_2026_default = [
2208
2358
  flag: "\u{1F3F3}\uFE0F"
2209
2359
  },
2210
2360
  status: "SCHEDULED",
2211
- updatedAt: "2026-06-23T22:15:03.762Z"
2361
+ updatedAt: "2026-06-24T01:20:06.593Z"
2212
2362
  },
2213
2363
  {
2214
2364
  id: "760498",
@@ -2228,7 +2378,7 @@ var schedule_2026_default = [
2228
2378
  flag: "\u{1F3F3}\uFE0F"
2229
2379
  },
2230
2380
  status: "SCHEDULED",
2231
- updatedAt: "2026-06-23T22:15:03.762Z"
2381
+ updatedAt: "2026-06-24T01:20:06.593Z"
2232
2382
  },
2233
2383
  {
2234
2384
  id: "760499",
@@ -2248,7 +2398,7 @@ var schedule_2026_default = [
2248
2398
  flag: "\u{1F3F3}\uFE0F"
2249
2399
  },
2250
2400
  status: "SCHEDULED",
2251
- updatedAt: "2026-06-23T22:15:03.762Z"
2401
+ updatedAt: "2026-06-24T01:20:06.593Z"
2252
2402
  },
2253
2403
  {
2254
2404
  id: "760500",
@@ -2258,9 +2408,9 @@ var schedule_2026_default = [
2258
2408
  city: "Miami Gardens, Florida",
2259
2409
  country: "USA",
2260
2410
  home: {
2261
- code: "ARG",
2411
+ code: "TBD",
2262
2412
  name: "Argentina",
2263
- flag: "\u{1F1E6}\u{1F1F7}"
2413
+ flag: "\u{1F3F3}\uFE0F"
2264
2414
  },
2265
2415
  away: {
2266
2416
  code: "2H",
@@ -2268,7 +2418,7 @@ var schedule_2026_default = [
2268
2418
  flag: "\u{1F3F3}\uFE0F"
2269
2419
  },
2270
2420
  status: "SCHEDULED",
2271
- updatedAt: "2026-06-23T22:15:03.762Z"
2421
+ updatedAt: "2026-06-24T01:20:06.593Z"
2272
2422
  },
2273
2423
  {
2274
2424
  id: "760501",
@@ -2288,7 +2438,7 @@ var schedule_2026_default = [
2288
2438
  flag: "\u{1F3F3}\uFE0F"
2289
2439
  },
2290
2440
  status: "SCHEDULED",
2291
- updatedAt: "2026-06-23T22:15:03.762Z"
2441
+ updatedAt: "2026-06-24T01:20:06.593Z"
2292
2442
  },
2293
2443
  {
2294
2444
  id: "760502",
@@ -2308,7 +2458,7 @@ var schedule_2026_default = [
2308
2458
  flag: "\u{1F3F3}\uFE0F"
2309
2459
  },
2310
2460
  status: "SCHEDULED",
2311
- updatedAt: "2026-06-23T22:15:03.762Z"
2461
+ updatedAt: "2026-06-24T01:20:06.593Z"
2312
2462
  },
2313
2463
  {
2314
2464
  id: "760503",
@@ -2328,7 +2478,7 @@ var schedule_2026_default = [
2328
2478
  flag: "\u{1F3F3}\uFE0F"
2329
2479
  },
2330
2480
  status: "SCHEDULED",
2331
- updatedAt: "2026-06-23T22:15:03.762Z"
2481
+ updatedAt: "2026-06-24T01:20:06.593Z"
2332
2482
  },
2333
2483
  {
2334
2484
  id: "760504",
@@ -2348,7 +2498,7 @@ var schedule_2026_default = [
2348
2498
  flag: "\u{1F3F3}\uFE0F"
2349
2499
  },
2350
2500
  status: "SCHEDULED",
2351
- updatedAt: "2026-06-23T22:15:03.762Z"
2501
+ updatedAt: "2026-06-24T01:20:06.593Z"
2352
2502
  },
2353
2503
  {
2354
2504
  id: "760505",
@@ -2368,7 +2518,7 @@ var schedule_2026_default = [
2368
2518
  flag: "\u{1F3F3}\uFE0F"
2369
2519
  },
2370
2520
  status: "SCHEDULED",
2371
- updatedAt: "2026-06-23T22:15:03.762Z"
2521
+ updatedAt: "2026-06-24T01:20:06.593Z"
2372
2522
  },
2373
2523
  {
2374
2524
  id: "760506",
@@ -2388,7 +2538,7 @@ var schedule_2026_default = [
2388
2538
  flag: "\u{1F3F3}\uFE0F"
2389
2539
  },
2390
2540
  status: "SCHEDULED",
2391
- updatedAt: "2026-06-23T22:15:03.762Z"
2541
+ updatedAt: "2026-06-24T01:20:06.593Z"
2392
2542
  },
2393
2543
  {
2394
2544
  id: "760507",
@@ -2408,7 +2558,7 @@ var schedule_2026_default = [
2408
2558
  flag: "\u{1F3F3}\uFE0F"
2409
2559
  },
2410
2560
  status: "SCHEDULED",
2411
- updatedAt: "2026-06-23T22:15:03.762Z"
2561
+ updatedAt: "2026-06-24T01:20:06.593Z"
2412
2562
  },
2413
2563
  {
2414
2564
  id: "760509",
@@ -2428,7 +2578,7 @@ var schedule_2026_default = [
2428
2578
  flag: "\u{1F3F3}\uFE0F"
2429
2579
  },
2430
2580
  status: "SCHEDULED",
2431
- updatedAt: "2026-06-23T22:15:03.762Z"
2581
+ updatedAt: "2026-06-24T01:20:06.593Z"
2432
2582
  },
2433
2583
  {
2434
2584
  id: "760508",
@@ -2448,7 +2598,7 @@ var schedule_2026_default = [
2448
2598
  flag: "\u{1F3F3}\uFE0F"
2449
2599
  },
2450
2600
  status: "SCHEDULED",
2451
- updatedAt: "2026-06-23T22:15:03.762Z"
2601
+ updatedAt: "2026-06-24T01:20:06.593Z"
2452
2602
  },
2453
2603
  {
2454
2604
  id: "760510",
@@ -2458,17 +2608,17 @@ var schedule_2026_default = [
2458
2608
  city: "Foxborough, Massachusetts",
2459
2609
  country: "USA",
2460
2610
  home: {
2461
- code: "RD16 W1",
2611
+ code: "RD32",
2462
2612
  name: "Round of 16 1 Winner",
2463
2613
  flag: "\u{1F3F3}\uFE0F"
2464
2614
  },
2465
2615
  away: {
2466
- code: "RD16 W2",
2616
+ code: "RD32",
2467
2617
  name: "Round of 16 2 Winner",
2468
2618
  flag: "\u{1F3F3}\uFE0F"
2469
2619
  },
2470
2620
  status: "SCHEDULED",
2471
- updatedAt: "2026-06-23T22:15:03.862Z"
2621
+ updatedAt: "2026-06-24T01:20:06.650Z"
2472
2622
  },
2473
2623
  {
2474
2624
  id: "760511",
@@ -2478,17 +2628,17 @@ var schedule_2026_default = [
2478
2628
  city: "Inglewood, California",
2479
2629
  country: "USA",
2480
2630
  home: {
2481
- code: "RD16 W5",
2631
+ code: "RD32",
2482
2632
  name: "Round of 16 5 Winner",
2483
2633
  flag: "\u{1F3F3}\uFE0F"
2484
2634
  },
2485
2635
  away: {
2486
- code: "RD16 W6",
2636
+ code: "RD32",
2487
2637
  name: "Round of 16 6 Winner",
2488
2638
  flag: "\u{1F3F3}\uFE0F"
2489
2639
  },
2490
2640
  status: "SCHEDULED",
2491
- updatedAt: "2026-06-23T22:15:03.862Z"
2641
+ updatedAt: "2026-06-24T01:20:06.650Z"
2492
2642
  },
2493
2643
  {
2494
2644
  id: "760512",
@@ -2498,17 +2648,17 @@ var schedule_2026_default = [
2498
2648
  city: "Miami Gardens, Florida",
2499
2649
  country: "USA",
2500
2650
  home: {
2501
- code: "RD16 W3",
2651
+ code: "RD32",
2502
2652
  name: "Round of 16 3 Winner",
2503
2653
  flag: "\u{1F3F3}\uFE0F"
2504
2654
  },
2505
2655
  away: {
2506
- code: "RD16 W4",
2656
+ code: "RD32",
2507
2657
  name: "Round of 16 4 Winner",
2508
2658
  flag: "\u{1F3F3}\uFE0F"
2509
2659
  },
2510
2660
  status: "SCHEDULED",
2511
- updatedAt: "2026-06-23T22:15:03.862Z"
2661
+ updatedAt: "2026-06-24T01:20:06.650Z"
2512
2662
  },
2513
2663
  {
2514
2664
  id: "760513",
@@ -2518,17 +2668,17 @@ var schedule_2026_default = [
2518
2668
  city: "Kansas City, Missouri",
2519
2669
  country: "USA",
2520
2670
  home: {
2521
- code: "RD16 W7",
2671
+ code: "RD32",
2522
2672
  name: "Round of 16 7 Winner",
2523
2673
  flag: "\u{1F3F3}\uFE0F"
2524
2674
  },
2525
2675
  away: {
2526
- code: "RD16 W8",
2676
+ code: "RD32",
2527
2677
  name: "Round of 16 8 Winner",
2528
2678
  flag: "\u{1F3F3}\uFE0F"
2529
2679
  },
2530
2680
  status: "SCHEDULED",
2531
- updatedAt: "2026-06-23T22:15:03.862Z"
2681
+ updatedAt: "2026-06-24T01:20:06.650Z"
2532
2682
  },
2533
2683
  {
2534
2684
  id: "760514",
@@ -2538,17 +2688,17 @@ var schedule_2026_default = [
2538
2688
  city: "Arlington, Texas",
2539
2689
  country: "USA",
2540
2690
  home: {
2541
- code: "QFW1",
2691
+ code: "RD32",
2542
2692
  name: "Quarterfinal 1 Winner",
2543
2693
  flag: "\u{1F3F3}\uFE0F"
2544
2694
  },
2545
2695
  away: {
2546
- code: "QFW2",
2696
+ code: "RD32",
2547
2697
  name: "Quarterfinal 2 Winner",
2548
2698
  flag: "\u{1F3F3}\uFE0F"
2549
2699
  },
2550
2700
  status: "SCHEDULED",
2551
- updatedAt: "2026-06-23T22:15:03.862Z"
2701
+ updatedAt: "2026-06-24T01:20:06.650Z"
2552
2702
  },
2553
2703
  {
2554
2704
  id: "760515",
@@ -2558,17 +2708,17 @@ var schedule_2026_default = [
2558
2708
  city: "Atlanta, Georgia",
2559
2709
  country: "USA",
2560
2710
  home: {
2561
- code: "QFW3",
2711
+ code: "RD32",
2562
2712
  name: "Quarterfinal 3 Winner",
2563
2713
  flag: "\u{1F3F3}\uFE0F"
2564
2714
  },
2565
2715
  away: {
2566
- code: "QW4",
2716
+ code: "RD32",
2567
2717
  name: "Quarterfinal 4 Winner",
2568
2718
  flag: "\u{1F3F3}\uFE0F"
2569
2719
  },
2570
2720
  status: "SCHEDULED",
2571
- updatedAt: "2026-06-23T22:15:03.862Z"
2721
+ updatedAt: "2026-06-24T01:20:06.650Z"
2572
2722
  },
2573
2723
  {
2574
2724
  id: "760516",
@@ -2578,17 +2728,17 @@ var schedule_2026_default = [
2578
2728
  city: "Miami Gardens, Florida",
2579
2729
  country: "USA",
2580
2730
  home: {
2581
- code: "SF L1",
2731
+ code: "RD32",
2582
2732
  name: "Semifinal 1 Loser",
2583
2733
  flag: "\u{1F3F3}\uFE0F"
2584
2734
  },
2585
2735
  away: {
2586
- code: "SF L2",
2736
+ code: "RD32",
2587
2737
  name: "Semifinal 2 Loser",
2588
2738
  flag: "\u{1F3F3}\uFE0F"
2589
2739
  },
2590
2740
  status: "SCHEDULED",
2591
- updatedAt: "2026-06-23T22:15:03.932Z"
2741
+ updatedAt: "2026-06-24T01:20:06.749Z"
2592
2742
  },
2593
2743
  {
2594
2744
  id: "760517",
@@ -2598,17 +2748,17 @@ var schedule_2026_default = [
2598
2748
  city: "East Rutherford, New Jersey",
2599
2749
  country: "USA",
2600
2750
  home: {
2601
- code: "SFW1",
2751
+ code: "RD32",
2602
2752
  name: "Semifinal 1 Winner",
2603
2753
  flag: "\u{1F3F3}\uFE0F"
2604
2754
  },
2605
2755
  away: {
2606
- code: "SFW2",
2756
+ code: "RD32",
2607
2757
  name: "Semifinal 2 Winner",
2608
2758
  flag: "\u{1F3F3}\uFE0F"
2609
2759
  },
2610
2760
  status: "SCHEDULED",
2611
- updatedAt: "2026-06-23T22:15:03.932Z"
2761
+ updatedAt: "2026-06-24T01:20:06.749Z"
2612
2762
  }
2613
2763
  ];
2614
2764
  var SCHEDULE = schedule_2026_default;
@@ -2712,10 +2862,10 @@ function toInt(s) {
2712
2862
  const n = parseInt(s, 10);
2713
2863
  return Number.isFinite(n) ? n : void 0;
2714
2864
  }
2715
- function toTeam(t) {
2716
- const name = t?.displayName ?? t?.name ?? t?.location ?? t?.shortDisplayName ?? "TBD";
2717
- const code = (t?.abbreviation ?? name.slice(0, 3)).toUpperCase();
2718
- return { code, name, flag: nationToFlag(t?.displayName ?? t?.abbreviation ?? name) };
2865
+ function toTeam(t2) {
2866
+ const name = t2?.displayName ?? t2?.name ?? t2?.location ?? t2?.shortDisplayName ?? "TBD";
2867
+ const code = (t2?.abbreviation ?? name.slice(0, 3)).toUpperCase();
2868
+ return { code, name, flag: nationToFlag(t2?.displayName ?? t2?.abbreviation ?? name) };
2719
2869
  }
2720
2870
  function mapEspnEvent(ev, ctx = {}) {
2721
2871
  const comp = ev.competitions?.[0];
@@ -2733,6 +2883,11 @@ function mapEspnEvent(ev, ctx = {}) {
2733
2883
  const hs = toInt(homeC?.score);
2734
2884
  const as = toInt(awayC?.score);
2735
2885
  const hasScore = status !== "SCHEDULED" && hs !== void 0 && as !== void 0;
2886
+ let winnerCode;
2887
+ if (isFinished(status)) {
2888
+ if (homeC?.winner) winnerCode = home.code;
2889
+ else if (awayC?.winner) winnerCode = away.code;
2890
+ }
2736
2891
  return {
2737
2892
  id: ev.id,
2738
2893
  stage,
@@ -2746,6 +2901,7 @@ function mapEspnEvent(ev, ctx = {}) {
2746
2901
  score: hasScore ? { home: hs, away: as } : void 0,
2747
2902
  minute: parseMinute(ev.status ?? comp?.status),
2748
2903
  status,
2904
+ winnerCode,
2749
2905
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2750
2906
  };
2751
2907
  }
@@ -2837,7 +2993,7 @@ var EspnAdapter = class {
2837
2993
  const map = {};
2838
2994
  try {
2839
2995
  const tables = parseStandings(await this.get(this.standingsUrl()));
2840
- for (const t of tables) for (const r of t.rows) map[r.team.code] = t.group;
2996
+ for (const t2 of tables) for (const r of t2.rows) map[r.team.code] = t2.group;
2841
2997
  } catch {
2842
2998
  }
2843
2999
  this.groupMap = map;
@@ -2873,6 +3029,688 @@ var EspnAdapter = class {
2873
3029
  }
2874
3030
  }
2875
3031
  };
3032
+ function teamFromMatch(match, code) {
3033
+ if (match.home.code === code) return match.home;
3034
+ if (match.away.code === code) return match.away;
3035
+ return void 0;
3036
+ }
3037
+ function matchKey(stage, index) {
3038
+ return `${stage}:${index}`;
3039
+ }
3040
+ function isGroupComplete(group, tables, standingsDegraded) {
3041
+ if (standingsDegraded) return false;
3042
+ const table = tables.find((t2) => t2.group === group);
3043
+ if (!table?.rows.length || table.rows.length !== 4) return false;
3044
+ return table.rows.every((r) => r.played >= 3);
3045
+ }
3046
+ function teamFromStandings(group, position, tables) {
3047
+ const table = tables.find((t2) => t2.group === group);
3048
+ if (!table) return void 0;
3049
+ const row = table.rows[position - 1];
3050
+ return row?.team;
3051
+ }
3052
+ function resolveWinner(match) {
3053
+ if (!isFinished(match.status)) return void 0;
3054
+ if (match.winnerCode) {
3055
+ const w = teamFromMatch(match, match.winnerCode);
3056
+ if (w && w.flag !== "\u{1F3F3}\uFE0F") return w;
3057
+ }
3058
+ if (!match.score) return void 0;
3059
+ const outcome = outcomeFromScore(match.score.home, match.score.away);
3060
+ if (outcome === "H") return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
3061
+ if (outcome === "A") return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
3062
+ return void 0;
3063
+ }
3064
+ function resolveLoser(match) {
3065
+ if (!isFinished(match.status)) return void 0;
3066
+ if (match.winnerCode) {
3067
+ const winner = teamFromMatch(match, match.winnerCode);
3068
+ if (winner?.code === match.home.code) {
3069
+ return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
3070
+ }
3071
+ if (winner?.code === match.away.code) {
3072
+ return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
3073
+ }
3074
+ }
3075
+ if (!match.score) return void 0;
3076
+ const outcome = outcomeFromScore(match.score.home, match.score.away);
3077
+ if (outcome === "H") return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
3078
+ if (outcome === "A") return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
3079
+ return void 0;
3080
+ }
3081
+ function participant(team, status) {
3082
+ return { label: team.name, flag: team.flag, code: team.code, status };
3083
+ }
3084
+ function tbd(label) {
3085
+ return { label, flag: "\u{1F3F3}\uFE0F", status: "tbd" };
3086
+ }
3087
+ function winnerLabel(ctx, stage, index) {
3088
+ return t(ctx.lang, "bracket.slot.winner", {
3089
+ stage: stageLabelI18n(ctx.lang, stage),
3090
+ n: String(index)
3091
+ });
3092
+ }
3093
+ function resolveSlot(ref, ctx) {
3094
+ switch (ref.kind) {
3095
+ case "seed":
3096
+ return tbd(ref.label);
3097
+ case "group": {
3098
+ if (isGroupComplete(ref.group, ctx.tables, ctx.standingsDegraded)) {
3099
+ const team = teamFromStandings(ref.group, ref.position, ctx.tables);
3100
+ if (team) return participant(team, "projected");
3101
+ }
3102
+ const label = ref.position === 1 ? t(ctx.lang, "bracket.slot.groupWinner", { group: ref.group }) : t(ctx.lang, "bracket.slot.groupSecond", { group: ref.group });
3103
+ return tbd(label);
3104
+ }
3105
+ case "third":
3106
+ return tbd(t(ctx.lang, "bracket.slot.third", { groups: ref.groups.join("/") }));
3107
+ case "winner": {
3108
+ const node = ctx.nodesByKey.get(matchKey(ref.stage, ref.index));
3109
+ const match = node ? ctx.matchesById.get(node.matchId) : void 0;
3110
+ if (match) {
3111
+ const winner = resolveWinner(match);
3112
+ if (winner) return participant(winner, "confirmed");
3113
+ }
3114
+ return tbd(winnerLabel(ctx, ref.stage, ref.index));
3115
+ }
3116
+ case "loser": {
3117
+ const node = ctx.nodesByKey.get(matchKey(ref.stage, ref.index));
3118
+ const match = node ? ctx.matchesById.get(node.matchId) : void 0;
3119
+ if (match) {
3120
+ const loser = resolveLoser(match);
3121
+ if (loser) return participant(loser, "confirmed");
3122
+ }
3123
+ return tbd(
3124
+ t(ctx.lang, "bracket.slot.loser", {
3125
+ stage: stageLabelI18n(ctx.lang, ref.stage),
3126
+ n: String(ref.index)
3127
+ })
3128
+ );
3129
+ }
3130
+ default:
3131
+ return tbd(t(ctx.lang, "bracket.slot.tbd"));
3132
+ }
3133
+ }
3134
+ function buildBracketView(topology, matches, tables, standingsDegraded, liveDegraded, filterStage, lang) {
3135
+ const knockout = matches.filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
3136
+ const matchesById = new Map(knockout.map((m) => [m.id, m]));
3137
+ const nodesByKey = new Map(topology.matches.map((n) => [matchKey(n.stage, n.index), n]));
3138
+ const ctx = { nodesByKey, matchesById, tables, standingsDegraded, lang };
3139
+ const want = filterStage?.toUpperCase();
3140
+ const stages = [];
3141
+ for (const stage of topology.stages) {
3142
+ if (want && stage !== want) continue;
3143
+ const nodes = topology.matches.filter((n) => n.stage === stage);
3144
+ const matchViews = nodes.map((node) => {
3145
+ const match = matchesById.get(node.matchId) ?? {
3146
+ id: node.matchId,
3147
+ stage: node.stage,
3148
+ kickoff: "",
3149
+ venue: "",
3150
+ home: { code: "?", name: "TBD", flag: "\u{1F3F3}\uFE0F" },
3151
+ away: { code: "?", name: "TBD", flag: "\u{1F3F3}\uFE0F" },
3152
+ status: "SCHEDULED",
3153
+ updatedAt: ""
3154
+ };
3155
+ return {
3156
+ matchId: node.matchId,
3157
+ stage: node.stage,
3158
+ index: node.index,
3159
+ kickoff: match.kickoff,
3160
+ home: resolveSlot(node.home, ctx),
3161
+ away: resolveSlot(node.away, ctx),
3162
+ match
3163
+ };
3164
+ });
3165
+ stages.push({
3166
+ stage,
3167
+ label: stageLabelI18n(lang, stage),
3168
+ matches: matchViews
3169
+ });
3170
+ }
3171
+ return {
3172
+ stages,
3173
+ degraded: liveDegraded,
3174
+ standingsDegraded
3175
+ };
3176
+ }
3177
+ var bracket_2026_default = {
3178
+ generatedAt: "2026-06-24T01:20:06.749Z",
3179
+ stages: [
3180
+ "R32",
3181
+ "R16",
3182
+ "QF",
3183
+ "SF",
3184
+ "3P",
3185
+ "F"
3186
+ ],
3187
+ matches: [
3188
+ {
3189
+ matchId: "760486",
3190
+ stage: "R32",
3191
+ index: 1,
3192
+ home: {
3193
+ kind: "group",
3194
+ position: 2,
3195
+ group: "A"
3196
+ },
3197
+ away: {
3198
+ kind: "group",
3199
+ position: 2,
3200
+ group: "B"
3201
+ }
3202
+ },
3203
+ {
3204
+ matchId: "760487",
3205
+ stage: "R32",
3206
+ index: 2,
3207
+ home: {
3208
+ kind: "group",
3209
+ position: 1,
3210
+ group: "C"
3211
+ },
3212
+ away: {
3213
+ kind: "group",
3214
+ position: 2,
3215
+ group: "F"
3216
+ }
3217
+ },
3218
+ {
3219
+ matchId: "760488",
3220
+ stage: "R32",
3221
+ index: 3,
3222
+ home: {
3223
+ kind: "group",
3224
+ position: 1,
3225
+ group: "F"
3226
+ },
3227
+ away: {
3228
+ kind: "group",
3229
+ position: 2,
3230
+ group: "C"
3231
+ }
3232
+ },
3233
+ {
3234
+ matchId: "760489",
3235
+ stage: "R32",
3236
+ index: 4,
3237
+ home: {
3238
+ kind: "seed",
3239
+ label: "Germany",
3240
+ code: "TBD"
3241
+ },
3242
+ away: {
3243
+ kind: "third",
3244
+ groups: [
3245
+ "A",
3246
+ "B",
3247
+ "C",
3248
+ "D",
3249
+ "F"
3250
+ ]
3251
+ }
3252
+ },
3253
+ {
3254
+ matchId: "760490",
3255
+ stage: "R32",
3256
+ index: 5,
3257
+ home: {
3258
+ kind: "group",
3259
+ position: 2,
3260
+ group: "E"
3261
+ },
3262
+ away: {
3263
+ kind: "group",
3264
+ position: 2,
3265
+ group: "I"
3266
+ }
3267
+ },
3268
+ {
3269
+ matchId: "760491",
3270
+ stage: "R32",
3271
+ index: 6,
3272
+ home: {
3273
+ kind: "seed",
3274
+ label: "Mexico",
3275
+ code: "TBD"
3276
+ },
3277
+ away: {
3278
+ kind: "third",
3279
+ groups: [
3280
+ "C",
3281
+ "E",
3282
+ "F",
3283
+ "H",
3284
+ "I"
3285
+ ]
3286
+ }
3287
+ },
3288
+ {
3289
+ matchId: "760492",
3290
+ stage: "R32",
3291
+ index: 7,
3292
+ home: {
3293
+ kind: "group",
3294
+ position: 1,
3295
+ group: "I"
3296
+ },
3297
+ away: {
3298
+ kind: "third",
3299
+ groups: [
3300
+ "C",
3301
+ "D",
3302
+ "F",
3303
+ "G",
3304
+ "H"
3305
+ ]
3306
+ }
3307
+ },
3308
+ {
3309
+ matchId: "760493",
3310
+ stage: "R32",
3311
+ index: 8,
3312
+ home: {
3313
+ kind: "group",
3314
+ position: 1,
3315
+ group: "G"
3316
+ },
3317
+ away: {
3318
+ kind: "third",
3319
+ groups: [
3320
+ "A",
3321
+ "E",
3322
+ "H",
3323
+ "I",
3324
+ "J"
3325
+ ]
3326
+ }
3327
+ },
3328
+ {
3329
+ matchId: "760494",
3330
+ stage: "R32",
3331
+ index: 9,
3332
+ home: {
3333
+ kind: "seed",
3334
+ label: "United States",
3335
+ code: "TBD"
3336
+ },
3337
+ away: {
3338
+ kind: "third",
3339
+ groups: [
3340
+ "B",
3341
+ "E",
3342
+ "F",
3343
+ "I",
3344
+ "J"
3345
+ ]
3346
+ }
3347
+ },
3348
+ {
3349
+ matchId: "760495",
3350
+ stage: "R32",
3351
+ index: 10,
3352
+ home: {
3353
+ kind: "group",
3354
+ position: 1,
3355
+ group: "L"
3356
+ },
3357
+ away: {
3358
+ kind: "third",
3359
+ groups: [
3360
+ "E",
3361
+ "H",
3362
+ "I",
3363
+ "J",
3364
+ "K"
3365
+ ]
3366
+ }
3367
+ },
3368
+ {
3369
+ matchId: "760496",
3370
+ stage: "R32",
3371
+ index: 11,
3372
+ home: {
3373
+ kind: "group",
3374
+ position: 2,
3375
+ group: "K"
3376
+ },
3377
+ away: {
3378
+ kind: "group",
3379
+ position: 2,
3380
+ group: "L"
3381
+ }
3382
+ },
3383
+ {
3384
+ matchId: "760497",
3385
+ stage: "R32",
3386
+ index: 12,
3387
+ home: {
3388
+ kind: "group",
3389
+ position: 1,
3390
+ group: "H"
3391
+ },
3392
+ away: {
3393
+ kind: "group",
3394
+ position: 2,
3395
+ group: "J"
3396
+ }
3397
+ },
3398
+ {
3399
+ matchId: "760498",
3400
+ stage: "R32",
3401
+ index: 13,
3402
+ home: {
3403
+ kind: "group",
3404
+ position: 1,
3405
+ group: "B"
3406
+ },
3407
+ away: {
3408
+ kind: "third",
3409
+ groups: [
3410
+ "E",
3411
+ "F",
3412
+ "G",
3413
+ "I",
3414
+ "J"
3415
+ ]
3416
+ }
3417
+ },
3418
+ {
3419
+ matchId: "760499",
3420
+ stage: "R32",
3421
+ index: 14,
3422
+ home: {
3423
+ kind: "group",
3424
+ position: 2,
3425
+ group: "D"
3426
+ },
3427
+ away: {
3428
+ kind: "group",
3429
+ position: 2,
3430
+ group: "G"
3431
+ }
3432
+ },
3433
+ {
3434
+ matchId: "760500",
3435
+ stage: "R32",
3436
+ index: 15,
3437
+ home: {
3438
+ kind: "seed",
3439
+ label: "Argentina",
3440
+ code: "TBD"
3441
+ },
3442
+ away: {
3443
+ kind: "group",
3444
+ position: 2,
3445
+ group: "H"
3446
+ }
3447
+ },
3448
+ {
3449
+ matchId: "760501",
3450
+ stage: "R32",
3451
+ index: 16,
3452
+ home: {
3453
+ kind: "group",
3454
+ position: 1,
3455
+ group: "K"
3456
+ },
3457
+ away: {
3458
+ kind: "third",
3459
+ groups: [
3460
+ "D",
3461
+ "E",
3462
+ "I",
3463
+ "J",
3464
+ "L"
3465
+ ]
3466
+ }
3467
+ },
3468
+ {
3469
+ matchId: "760502",
3470
+ stage: "R16",
3471
+ index: 1,
3472
+ home: {
3473
+ kind: "winner",
3474
+ stage: "R32",
3475
+ index: 1
3476
+ },
3477
+ away: {
3478
+ kind: "winner",
3479
+ stage: "R32",
3480
+ index: 3
3481
+ }
3482
+ },
3483
+ {
3484
+ matchId: "760503",
3485
+ stage: "R16",
3486
+ index: 2,
3487
+ home: {
3488
+ kind: "winner",
3489
+ stage: "R32",
3490
+ index: 2
3491
+ },
3492
+ away: {
3493
+ kind: "winner",
3494
+ stage: "R32",
3495
+ index: 5
3496
+ }
3497
+ },
3498
+ {
3499
+ matchId: "760504",
3500
+ stage: "R16",
3501
+ index: 3,
3502
+ home: {
3503
+ kind: "winner",
3504
+ stage: "R32",
3505
+ index: 4
3506
+ },
3507
+ away: {
3508
+ kind: "winner",
3509
+ stage: "R32",
3510
+ index: 6
3511
+ }
3512
+ },
3513
+ {
3514
+ matchId: "760505",
3515
+ stage: "R16",
3516
+ index: 4,
3517
+ home: {
3518
+ kind: "winner",
3519
+ stage: "R32",
3520
+ index: 7
3521
+ },
3522
+ away: {
3523
+ kind: "winner",
3524
+ stage: "R32",
3525
+ index: 8
3526
+ }
3527
+ },
3528
+ {
3529
+ matchId: "760506",
3530
+ stage: "R16",
3531
+ index: 5,
3532
+ home: {
3533
+ kind: "winner",
3534
+ stage: "R32",
3535
+ index: 11
3536
+ },
3537
+ away: {
3538
+ kind: "winner",
3539
+ stage: "R32",
3540
+ index: 12
3541
+ }
3542
+ },
3543
+ {
3544
+ matchId: "760507",
3545
+ stage: "R16",
3546
+ index: 6,
3547
+ home: {
3548
+ kind: "winner",
3549
+ stage: "R32",
3550
+ index: 9
3551
+ },
3552
+ away: {
3553
+ kind: "winner",
3554
+ stage: "R32",
3555
+ index: 10
3556
+ }
3557
+ },
3558
+ {
3559
+ matchId: "760508",
3560
+ stage: "R16",
3561
+ index: 7,
3562
+ home: {
3563
+ kind: "winner",
3564
+ stage: "R32",
3565
+ index: 13
3566
+ },
3567
+ away: {
3568
+ kind: "winner",
3569
+ stage: "R32",
3570
+ index: 15
3571
+ }
3572
+ },
3573
+ {
3574
+ matchId: "760509",
3575
+ stage: "R16",
3576
+ index: 8,
3577
+ home: {
3578
+ kind: "winner",
3579
+ stage: "R32",
3580
+ index: 14
3581
+ },
3582
+ away: {
3583
+ kind: "winner",
3584
+ stage: "R32",
3585
+ index: 16
3586
+ }
3587
+ },
3588
+ {
3589
+ matchId: "760510",
3590
+ stage: "QF",
3591
+ index: 1,
3592
+ home: {
3593
+ kind: "winner",
3594
+ stage: "R16",
3595
+ index: 1
3596
+ },
3597
+ away: {
3598
+ kind: "winner",
3599
+ stage: "R16",
3600
+ index: 2
3601
+ }
3602
+ },
3603
+ {
3604
+ matchId: "760511",
3605
+ stage: "QF",
3606
+ index: 2,
3607
+ home: {
3608
+ kind: "winner",
3609
+ stage: "R16",
3610
+ index: 5
3611
+ },
3612
+ away: {
3613
+ kind: "winner",
3614
+ stage: "R16",
3615
+ index: 6
3616
+ }
3617
+ },
3618
+ {
3619
+ matchId: "760512",
3620
+ stage: "QF",
3621
+ index: 3,
3622
+ home: {
3623
+ kind: "winner",
3624
+ stage: "R16",
3625
+ index: 3
3626
+ },
3627
+ away: {
3628
+ kind: "winner",
3629
+ stage: "R16",
3630
+ index: 4
3631
+ }
3632
+ },
3633
+ {
3634
+ matchId: "760513",
3635
+ stage: "QF",
3636
+ index: 4,
3637
+ home: {
3638
+ kind: "winner",
3639
+ stage: "R16",
3640
+ index: 7
3641
+ },
3642
+ away: {
3643
+ kind: "winner",
3644
+ stage: "R16",
3645
+ index: 8
3646
+ }
3647
+ },
3648
+ {
3649
+ matchId: "760514",
3650
+ stage: "SF",
3651
+ index: 1,
3652
+ home: {
3653
+ kind: "winner",
3654
+ stage: "QF",
3655
+ index: 1
3656
+ },
3657
+ away: {
3658
+ kind: "winner",
3659
+ stage: "QF",
3660
+ index: 2
3661
+ }
3662
+ },
3663
+ {
3664
+ matchId: "760515",
3665
+ stage: "SF",
3666
+ index: 2,
3667
+ home: {
3668
+ kind: "winner",
3669
+ stage: "QF",
3670
+ index: 3
3671
+ },
3672
+ away: {
3673
+ kind: "winner",
3674
+ stage: "QF",
3675
+ index: 4
3676
+ }
3677
+ },
3678
+ {
3679
+ matchId: "760516",
3680
+ stage: "3P",
3681
+ index: 1,
3682
+ home: {
3683
+ kind: "loser",
3684
+ stage: "SF",
3685
+ index: 1
3686
+ },
3687
+ away: {
3688
+ kind: "loser",
3689
+ stage: "SF",
3690
+ index: 2
3691
+ }
3692
+ },
3693
+ {
3694
+ matchId: "760517",
3695
+ stage: "F",
3696
+ index: 1,
3697
+ home: {
3698
+ kind: "winner",
3699
+ stage: "SF",
3700
+ index: 1
3701
+ },
3702
+ away: {
3703
+ kind: "winner",
3704
+ stage: "SF",
3705
+ index: 2
3706
+ }
3707
+ }
3708
+ ]
3709
+ };
3710
+ var TOPOLOGY = bracket_2026_default;
3711
+ function loadBracketTopology() {
3712
+ return TOPOLOGY;
3713
+ }
2876
3714
  function resolveCompetition(explicit) {
2877
3715
  if (explicit) return explicit;
2878
3716
  if (typeof process !== "undefined" && process.env?.CLAUDINHO_COMPETITION) {
@@ -2913,7 +3751,7 @@ async function getStandings(adapter, group) {
2913
3751
  if (adapter.fetchStandings) {
2914
3752
  try {
2915
3753
  const all = await adapter.fetchStandings();
2916
- const tables2 = (want ? all.filter((t) => t.group === want) : all).sort(
3754
+ const tables2 = (want ? all.filter((t2) => t2.group === want) : all).sort(
2917
3755
  (a, b) => a.group.localeCompare(b.group)
2918
3756
  );
2919
3757
  return { tables: tables2, degraded: false, source: adapter.name };
@@ -2921,9 +3759,45 @@ async function getStandings(adapter, group) {
2921
3759
  }
2922
3760
  }
2923
3761
  const letters = want ? [want] : groups();
2924
- const tables = letters.map((g) => ({ group: g, rows: rosterAtZero(fixturesByGroup(g)) })).filter((t) => t.rows.length > 0);
3762
+ const tables = letters.map((g) => ({ group: g, rows: rosterAtZero(fixturesByGroup(g)) })).filter((t2) => t2.rows.length > 0);
2925
3763
  return { tables, degraded: true };
2926
3764
  }
3765
+ var KNOCKOUT_WINDOW_START = "20260628";
3766
+ var KNOCKOUT_WINDOW_END = "20260719";
3767
+ async function getBracket(adapter, opts = {}) {
3768
+ const topology = loadBracketTopology();
3769
+ const base = allFixtures().filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
3770
+ let matches = base;
3771
+ let liveDegraded = true;
3772
+ let source;
3773
+ try {
3774
+ const live = adapter.fetchWindow ? await adapter.fetchWindow(KNOCKOUT_WINDOW_START, KNOCKOUT_WINDOW_END) : [];
3775
+ matches = mergeLive(base, live);
3776
+ liveDegraded = false;
3777
+ source = adapter.name;
3778
+ } catch {
3779
+ }
3780
+ const standings = await getStandings(adapter);
3781
+ if (!source && !standings.degraded && standings.source) {
3782
+ source = standings.source;
3783
+ }
3784
+ const view = buildBracketView(
3785
+ topology,
3786
+ matches,
3787
+ standings.tables,
3788
+ standings.degraded,
3789
+ liveDegraded,
3790
+ opts.stage,
3791
+ opts.lang
3792
+ );
3793
+ if (source) view.source = source;
3794
+ return {
3795
+ view,
3796
+ degraded: liveDegraded,
3797
+ standingsDegraded: standings.degraded,
3798
+ source
3799
+ };
3800
+ }
2927
3801
  function shiftUtcDate(dateISO, days) {
2928
3802
  const [y, m, d] = dateISO.slice(0, 10).split("-").map(Number);
2929
3803
  return new Date(Date.UTC(y ?? 1970, (m ?? 1) - 1, (d ?? 1) + days)).toISOString().slice(0, 10);
@@ -3077,9 +3951,9 @@ function outcomeLabel(o, match) {
3077
3951
  return o.label;
3078
3952
  }
3079
3953
  function utcHhmm(iso) {
3080
- const t = Date.parse(iso);
3081
- if (!Number.isFinite(t)) return "";
3082
- return `${new Date(t).toISOString().slice(11, 16)} UTC`;
3954
+ const t2 = Date.parse(iso);
3955
+ if (!Number.isFinite(t2)) return "";
3956
+ return `${new Date(t2).toISOString().slice(11, 16)} UTC`;
3083
3957
  }
3084
3958
  function marketFavoriteText(signal, match) {
3085
3959
  const fav = signal.favorite;
@@ -3510,6 +4384,130 @@ function formatShareTable(input, options = {}) {
3510
4384
  );
3511
4385
  return blocks.join("\n\n");
3512
4386
  }
4387
+ function formatParticipant(p, side, flags, locale) {
4388
+ const suffix = p.status === "projected" ? ` ${t(locale, "bracket.projected")}` : "";
4389
+ if (!flags || p.flag === "\u{1F3F3}\uFE0F") {
4390
+ if (p.code && p.code !== "TBD") return `${p.code}${suffix}`;
4391
+ return `${p.label}${suffix}`;
4392
+ }
4393
+ if (side === "home") return `${p.flag} ${p.label}${suffix}`;
4394
+ return `${p.label}${suffix} ${p.flag}`;
4395
+ }
4396
+ function statusTail2(m) {
4397
+ if (m.status === "LIVE" && m.minute) return ` ${m.minute}'`;
4398
+ if (m.status === "HT") return " HT";
4399
+ if (m.status === "FT") return " FT";
4400
+ if (isLive(m.status)) return " LIVE";
4401
+ return "";
4402
+ }
4403
+ function formatBracketMatchLine(mv, opts = {}) {
4404
+ const flags = opts.flags !== false;
4405
+ const home = formatParticipant(mv.home, "home", flags, opts.locale);
4406
+ const away = formatParticipant(mv.away, "away", flags, opts.locale);
4407
+ const m = mv.match;
4408
+ if (isFinished(m.status) || isLive(m.status)) {
4409
+ return ` ${home} ${scoreline(m)} ${away}${statusTail2(m)}`;
4410
+ }
4411
+ const kickoff = mv.kickoff ? formatKickoff(mv.kickoff, { tz: opts.tz, locale: opts.locale }) : "";
4412
+ return ` ${home} vs ${away}${kickoff ? ` \xB7 ${kickoff}` : ""}`;
4413
+ }
4414
+ function formatBracketList(view, opts = {}) {
4415
+ const blocks = [];
4416
+ for (const stage of view.stages) {
4417
+ blocks.push(stage.label);
4418
+ for (const mv of stage.matches) {
4419
+ blocks.push(formatBracketMatchLine(mv, opts));
4420
+ }
4421
+ blocks.push("");
4422
+ }
4423
+ if (opts.footer !== false) {
4424
+ if (view.degraded) {
4425
+ blocks.push(`(${t(opts.locale, "bracket.degraded")})`);
4426
+ } else if (view.standingsDegraded) {
4427
+ blocks.push(`(${t(opts.locale, "bracket.standingsDegraded")})`);
4428
+ }
4429
+ if (view.source) {
4430
+ blocks.push(t(opts.locale, "live.data", { source: liveSourceLabel(view.source) }));
4431
+ }
4432
+ }
4433
+ return blocks.join("\n").trimEnd();
4434
+ }
4435
+ var MIN_TREE_WIDTH = 80;
4436
+ function formatBracketTree(view, opts = {}) {
4437
+ const width = opts.width ?? 80;
4438
+ if (width < MIN_TREE_WIDTH) return null;
4439
+ const blocks = [];
4440
+ for (let i = 0; i < view.stages.length; i++) {
4441
+ const stage = view.stages[i];
4442
+ blocks.push(`\u2501\u2501\u2501 ${stage.label} \u2501\u2501\u2501`);
4443
+ for (const mv of stage.matches) {
4444
+ blocks.push(formatBracketMatchLine(mv, opts));
4445
+ }
4446
+ if (i < view.stages.length - 1) {
4447
+ blocks.push(" \u2502");
4448
+ blocks.push(" \u25BC");
4449
+ }
4450
+ blocks.push("");
4451
+ }
4452
+ if (opts.footer !== false) {
4453
+ if (view.degraded) {
4454
+ blocks.push(`(${t(opts.locale, "bracket.degraded")})`);
4455
+ } else if (view.standingsDegraded) {
4456
+ blocks.push(`(${t(opts.locale, "bracket.standingsDegraded")})`);
4457
+ }
4458
+ if (view.source) {
4459
+ blocks.push(t(opts.locale, "live.data", { source: liveSourceLabel(view.source) }));
4460
+ }
4461
+ }
4462
+ return blocks.join("\n").trimEnd();
4463
+ }
4464
+ function formatShareBracket(input, options = {}) {
4465
+ const includeHashtag = options.includeHashtag !== false;
4466
+ const includeInstall = options.includeInstallLine !== false;
4467
+ const locale = options.locale;
4468
+ const blocks = [t(locale, "bracket.shareTitle"), ""];
4469
+ if (input.view.stages.length === 0) {
4470
+ blocks.push(input.emptyNote ?? t(locale, "bracket.empty"));
4471
+ } else if ((options.style ?? "social") === "compact") {
4472
+ const fmtOpts = { locale, tz: options.tz };
4473
+ const lines = input.view.stages.flatMap(
4474
+ (stage) => stage.matches.map((mv) => formatBracketCompactLine(mv, fmtOpts))
4475
+ );
4476
+ blocks.push(lines.join("\n"));
4477
+ if (input.view.degraded) {
4478
+ blocks.push(`(${t(locale, "bracket.degraded")})`);
4479
+ } else if (input.view.standingsDegraded) {
4480
+ blocks.push(`(${t(locale, "bracket.standingsDegraded")})`);
4481
+ }
4482
+ } else {
4483
+ blocks.push(formatBracketList(input.view, { footer: false, locale, tz: options.tz }));
4484
+ if (input.view.degraded) {
4485
+ blocks.push(`(${t(locale, "bracket.degraded")})`);
4486
+ } else if (input.view.standingsDegraded) {
4487
+ blocks.push(`(${t(locale, "bracket.standingsDegraded")})`);
4488
+ }
4489
+ }
4490
+ const footer = [];
4491
+ const src = input.source ?? input.view.source;
4492
+ if (src) footer.push(t(locale, "live.data", { source: liveSourceLabel(src) }));
4493
+ footer.push(
4494
+ [includeHashtag ? SHARE_HASHTAG : "", SHARE_DISCLAIMER].filter(Boolean).join(" \xB7 ")
4495
+ );
4496
+ if (includeInstall && input.installLine) {
4497
+ footer.push(t(locale, "share.tryIt", { line: input.installLine }));
4498
+ }
4499
+ blocks.push("", footer.join("\n"));
4500
+ return blocks.join("\n");
4501
+ }
4502
+ function formatBracketCompactLine(mv, opts = {}) {
4503
+ const flags = opts.flags !== false;
4504
+ const home = formatParticipant(mv.home, "home", flags, opts.locale);
4505
+ const away = formatParticipant(mv.away, "away", flags, opts.locale);
4506
+ const m = mv.match;
4507
+ const mid2 = isFinished(m.status) || isLive(m.status) ? scoreline(m) : "vs";
4508
+ const tail = m.status === "SCHEDULED" && mv.kickoff ? ` \xB7 ${formatKickoff(mv.kickoff, { tz: opts.tz, locale: opts.locale })}` : statusTail2(m);
4509
+ return `${stageLabelI18n(opts.locale, mv.stage)} \xB7 ${home} ${mid2} ${away}${tail}`;
4510
+ }
3513
4511
 
3514
4512
  // src/config.ts
3515
4513
  var SUPPORTED_LANGS = ["en", "es", "pt", "fr"];
@@ -3555,7 +4553,7 @@ function resolveConfig(opts) {
3555
4553
  }
3556
4554
 
3557
4555
  // src/i18n.ts
3558
- var EN = {
4556
+ var EN2 = {
3559
4557
  "today.title": "Today's matches",
3560
4558
  "today.on": "Matches",
3561
4559
  "today.none": "No matches scheduled for this date.",
@@ -3589,7 +4587,7 @@ var EN = {
3589
4587
  "warn.lang": "Unsupported language {lang}; using English. (supported: en, es, pt, fr)",
3590
4588
  disclaimer: "Not affiliated with FIFA or Anthropic."
3591
4589
  };
3592
- var ES = {
4590
+ var ES2 = {
3593
4591
  "today.title": "Partidos de hoy",
3594
4592
  "today.on": "Partidos",
3595
4593
  "today.none": "No hay partidos para esta fecha.",
@@ -3623,7 +4621,7 @@ var ES = {
3623
4621
  "warn.lang": "Idioma no soportado {lang}; usando ingl\xE9s. (disponibles: en, es, pt, fr)",
3624
4622
  disclaimer: "No afiliado a FIFA ni Anthropic."
3625
4623
  };
3626
- var PT = {
4624
+ var PT2 = {
3627
4625
  "today.title": "Jogos de hoje",
3628
4626
  "today.on": "Jogos",
3629
4627
  "today.none": "Nenhum jogo para esta data.",
@@ -3657,7 +4655,7 @@ var PT = {
3657
4655
  "warn.lang": "Idioma n\xE3o suportado {lang}; usando ingl\xEAs. (dispon\xEDveis: en, es, pt, fr)",
3658
4656
  disclaimer: "N\xE3o afiliado \xE0 FIFA nem \xE0 Anthropic."
3659
4657
  };
3660
- var FR = {
4658
+ var FR2 = {
3661
4659
  "today.title": "Matchs d'aujourd'hui",
3662
4660
  "today.on": "Matchs",
3663
4661
  "today.none": "Aucun match pr\xE9vu pour cette date.",
@@ -3691,11 +4689,11 @@ var FR = {
3691
4689
  "warn.lang": "Langue non prise en charge {lang} ; utilisation de l\u2019anglais. (disponibles : en, es, pt, fr)",
3692
4690
  disclaimer: "Non affili\xE9 \xE0 la FIFA ni \xE0 Anthropic."
3693
4691
  };
3694
- var CATALOGS = { en: EN, es: ES, pt: PT, fr: FR };
4692
+ var CATALOGS2 = { en: EN2, es: ES2, pt: PT2, fr: FR2 };
3695
4693
  function makeT(lang) {
3696
- const dict = CATALOGS[lang] ?? EN;
4694
+ const dict = CATALOGS2[lang] ?? EN2;
3697
4695
  return (key, vars) => {
3698
- let s = dict[key] ?? EN[key] ?? key;
4696
+ let s = dict[key] ?? EN2[key] ?? key;
3699
4697
  if (vars) for (const [k, v] of Object.entries(vars)) s = s.replace(`{${k}}`, v);
3700
4698
  return s;
3701
4699
  };
@@ -3735,23 +4733,23 @@ function tableTeamCell(team, flags) {
3735
4733
  function painterFor(cfg) {
3736
4734
  return paint(cfg.color);
3737
4735
  }
3738
- function statusToken(m, t, c) {
4736
+ function statusToken(m, t2, c) {
3739
4737
  switch (m.status) {
3740
4738
  case "LIVE":
3741
- return c.green(`${m.minute ? `${m.minute}'` : t("status.live")}`);
4739
+ return c.green(`${m.minute ? `${m.minute}'` : t2("status.live")}`);
3742
4740
  case "HT":
3743
- return c.yellow(t("status.ht"));
4741
+ return c.yellow(t2("status.ht"));
3744
4742
  case "FT":
3745
- return c.gray(t("status.ft"));
4743
+ return c.gray(t2("status.ft"));
3746
4744
  case "POSTPONED":
3747
- return c.red(t("status.postponed"));
4745
+ return c.red(t2("status.postponed"));
3748
4746
  case "CANCELLED":
3749
- return c.red(t("status.cancelled"));
4747
+ return c.red(t2("status.cancelled"));
3750
4748
  default:
3751
4749
  return "";
3752
4750
  }
3753
4751
  }
3754
- function matchLine(m, cfg, t, c, flags = true) {
4752
+ function matchLine(m, cfg, t2, c, flags = true) {
3755
4753
  const home = flags ? `${m.home.flag} ${m.home.name}` : m.home.name;
3756
4754
  const away = flags ? `${m.away.name} ${m.away.flag}` : m.away.name;
3757
4755
  const mid2 = isLive(m.status) || m.status === "FT" ? c.bold(scoreline(m)) : c.dim("vs");
@@ -3762,7 +4760,7 @@ function matchLine(m, cfg, t, c, flags = true) {
3762
4760
  `${formatKickoff(m.kickoff, { tz: cfg.tz, locale: cfg.lang })}`
3763
4761
  );
3764
4762
  } else {
3765
- right = statusToken(m, t, c);
4763
+ right = statusToken(m, t2, c);
3766
4764
  }
3767
4765
  const flair = matchFlavor(m, { level: cfg.flavor, locale: cfg.lang });
3768
4766
  const tail = flair ? ` ${c.dim(flair)}` : "";
@@ -3771,8 +4769,8 @@ function matchLine(m, cfg, t, c, flags = true) {
3771
4769
  function header(text, c) {
3772
4770
  return c.bold(c.cyan(text));
3773
4771
  }
3774
- function disclaimer(t, c) {
3775
- return c.dim(t("disclaimer"));
4772
+ function disclaimer(t2, c) {
4773
+ return c.dim(t2("disclaimer"));
3776
4774
  }
3777
4775
  function dataSource(source, c) {
3778
4776
  return source ? c.dim(`Live data: ${liveSourceLabel(source)}`) : "";
@@ -3806,10 +4804,10 @@ function readMarketCache(source, competition, now = Date.now()) {
3806
4804
  return { signals, checked };
3807
4805
  }
3808
4806
  for (const [id, entry] of Object.entries(file.entries ?? {})) {
3809
- const t = Date.parse(entry.fetchedAt);
3810
- if (!Number.isFinite(t)) continue;
4807
+ const t2 = Date.parse(entry.fetchedAt);
4808
+ if (!Number.isFinite(t2)) continue;
3811
4809
  const ttl = entry.signal ? POSITIVE_TTL_MS : NEGATIVE_TTL_MS;
3812
- if (now - t > ttl) continue;
4810
+ if (now - t2 > ttl) continue;
3813
4811
  checked.add(id);
3814
4812
  if (entry.signal) signals.set(id, entry.signal);
3815
4813
  }
@@ -3910,8 +4908,8 @@ function writeFileSync_(path, data) {
3910
4908
  }
3911
4909
  function ageMs(state, now = Date.now()) {
3912
4910
  if (!state) return Infinity;
3913
- const t = Date.parse(state.updatedAt);
3914
- return Number.isFinite(t) ? now - t : Infinity;
4911
+ const t2 = Date.parse(state.updatedAt);
4912
+ return Number.isFinite(t2) ? now - t2 : Infinity;
3915
4913
  }
3916
4914
  function lockAgeMs(now = Date.now()) {
3917
4915
  const lp = lockPath();
@@ -3987,8 +4985,8 @@ function inLiveWindow(now = Date.now(), fixtures = allFixtures()) {
3987
4985
  function nextOverall(now, fixtures = allFixtures()) {
3988
4986
  return [...fixtures].sort(byKickoff).find((m) => Date.parse(m.kickoff) >= now);
3989
4987
  }
3990
- function teamTok(t, flags) {
3991
- return flags ? t.flag : t.code;
4988
+ function teamTok(t2, flags) {
4989
+ return flags ? t2.flag : t2.code;
3992
4990
  }
3993
4991
  function matchSegment(m, compact, flags) {
3994
4992
  const minute = m.status === "HT" ? "HT" : m.minute ? `${m.minute}'` : "LIVE";
@@ -4363,12 +5361,12 @@ function emitJson(data) {
4363
5361
  }
4364
5362
  var InputError = class extends Error {
4365
5363
  };
4366
- function precheck(cfg, t, date) {
5364
+ function precheck(cfg, t2, date) {
4367
5365
  if (cfg.langRequestedUnsupported) {
4368
- process.stderr.write(t("warn.lang", { lang: cfg.langRequestedUnsupported }) + "\n");
5366
+ process.stderr.write(t2("warn.lang", { lang: cfg.langRequestedUnsupported }) + "\n");
4369
5367
  }
4370
5368
  if (cfg.tz && !isValidTimeZone(cfg.tz)) {
4371
- process.stderr.write(t("warn.tz", { tz: cfg.tz }) + "\n");
5369
+ process.stderr.write(t2("warn.tz", { tz: cfg.tz }) + "\n");
4372
5370
  }
4373
5371
  const competition = resolveCompetition();
4374
5372
  if (competition !== DEFAULT_COMPETITION) {
@@ -4378,7 +5376,7 @@ function precheck(cfg, t, date) {
4378
5376
  );
4379
5377
  }
4380
5378
  if (date !== void 0 && !isValidDate(date)) {
4381
- throw new InputError(t("err.date", { date }));
5379
+ throw new InputError(t2("err.date", { date }));
4382
5380
  }
4383
5381
  }
4384
5382
  function resolveTeamArg(team, usage) {
@@ -4387,8 +5385,8 @@ function resolveTeamArg(team, usage) {
4387
5385
  return code.toUpperCase();
4388
5386
  }
4389
5387
  async function cmdToday(date, ctx) {
4390
- const { cfg, t } = ctx;
4391
- precheck(cfg, t, date);
5388
+ const { cfg, t: t2 } = ctx;
5389
+ precheck(cfg, t2, date);
4392
5390
  const adapter = adapterFor(ctx);
4393
5391
  const targetDate = date ?? localDate((/* @__PURE__ */ new Date()).toISOString(), cfg.tz);
4394
5392
  const { matches, degraded, source } = await getMatchesForDate(adapter, targetDate);
@@ -4406,28 +5404,28 @@ async function cmdToday(date, ctx) {
4406
5404
  }
4407
5405
  const c = painterFor(cfg);
4408
5406
  const flags = flagsEnabled();
4409
- const title = date === void 0 ? t("today.title") : t("today.on");
5407
+ const title = date === void 0 ? t2("today.title") : t2("today.on");
4410
5408
  out();
4411
5409
  out(header(`${title} \xB7 ${targetDate}`, c));
4412
5410
  out();
4413
5411
  if (todays.length === 0) {
4414
- out(c.dim(" " + t("today.none")));
5412
+ out(c.dim(" " + t2("today.none")));
4415
5413
  } else {
4416
5414
  for (const m of todays) {
4417
- out(matchLine(m, cfg, t, c, flags));
5415
+ out(matchLine(m, cfg, t2, c, flags));
4418
5416
  const s = signals.get(m.id);
4419
5417
  if (s) out(" " + c.dim(marketLine(s, m)));
4420
5418
  }
4421
5419
  }
4422
5420
  out();
4423
- if (degraded) out(c.dim(" " + t("feed.degraded")));
5421
+ if (degraded) out(c.dim(" " + t2("feed.degraded")));
4424
5422
  const src = dataSource(source, c);
4425
5423
  if (src) out(src);
4426
- out(disclaimer(t, c));
5424
+ out(disclaimer(t2, c));
4427
5425
  }
4428
5426
  async function cmdLive(ctx) {
4429
- const { cfg, t } = ctx;
4430
- precheck(cfg, t);
5427
+ const { cfg, t: t2 } = ctx;
5428
+ precheck(cfg, t2);
4431
5429
  const adapter = adapterFor(ctx);
4432
5430
  const { matches, degraded, source } = await getLiveMatches(adapter);
4433
5431
  if (cfg.json) {
@@ -4437,22 +5435,22 @@ async function cmdLive(ctx) {
4437
5435
  const c = painterFor(cfg);
4438
5436
  const flags = flagsEnabled();
4439
5437
  out();
4440
- out(header(t("live.title"), c));
5438
+ out(header(t2("live.title"), c));
4441
5439
  out();
4442
5440
  if (degraded) {
4443
- out(c.dim(" " + t("live.degraded")));
5441
+ out(c.dim(" " + t2("live.degraded")));
4444
5442
  } else if (matches.length === 0) {
4445
- out(c.dim(" " + t("live.none")));
5443
+ out(c.dim(" " + t2("live.none")));
4446
5444
  } else {
4447
- for (const m of matches) out(matchLine(m, cfg, t, c, flags));
5445
+ for (const m of matches) out(matchLine(m, cfg, t2, c, flags));
4448
5446
  }
4449
5447
  out();
4450
5448
  const src = dataSource(source, c);
4451
5449
  if (src) out(src);
4452
- out(disclaimer(t, c));
5450
+ out(disclaimer(t2, c));
4453
5451
  }
4454
- async function cmdNext(team, { cfg, t, now }) {
4455
- precheck(cfg, t);
5452
+ async function cmdNext(team, { cfg, t: t2, now }) {
5453
+ precheck(cfg, t2);
4456
5454
  const code = resolveTeamArg(team, "Usage: claudinho next <team> (or set CLAUDINHO_TEAM)");
4457
5455
  const fixture = nextFixtureForTeam(code, { from: now ?? /* @__PURE__ */ new Date() });
4458
5456
  if (cfg.json) {
@@ -4463,26 +5461,26 @@ async function cmdNext(team, { cfg, t, now }) {
4463
5461
  const flags = flagsEnabled();
4464
5462
  out();
4465
5463
  if (!fixture) {
4466
- out(c.dim(" " + t("next.none", { team: code })));
5464
+ out(c.dim(" " + t2("next.none", { team: code })));
4467
5465
  out();
4468
- out(disclaimer(t, c));
5466
+ out(disclaimer(t2, c));
4469
5467
  return;
4470
5468
  }
4471
- out(header(t("next.label", { team: code }), c));
5469
+ out(header(t2("next.label", { team: code }), c));
4472
5470
  out();
4473
- out(matchLine(fixture, cfg, t, c, flags));
5471
+ out(matchLine(fixture, cfg, t2, c, flags));
4474
5472
  const stage = fixture.stage !== "GROUP" ? `${stageLabel(fixture)} \xB7 ` : "";
4475
5473
  out(
4476
5474
  " " + c.dim(
4477
- `${stage}${formatKickoff(fixture.kickoff, { tz: cfg.tz, locale: cfg.lang })} \xB7 ` + t("next.in", { countdown: countdown(fixture.kickoff) })
5475
+ `${stage}${formatKickoff(fixture.kickoff, { tz: cfg.tz, locale: cfg.lang })} \xB7 ` + t2("next.in", { countdown: countdown(fixture.kickoff) })
4478
5476
  )
4479
5477
  );
4480
5478
  out();
4481
- out(disclaimer(t, c));
5479
+ out(disclaimer(t2, c));
4482
5480
  }
4483
5481
  async function cmdTable(group, ctx) {
4484
- const { cfg, t } = ctx;
4485
- precheck(cfg, t);
5482
+ const { cfg, t: t2 } = ctx;
5483
+ precheck(cfg, t2);
4486
5484
  const { tables, degraded, source } = await getStandings(adapterFor(ctx), group);
4487
5485
  if (cfg.json) {
4488
5486
  const json = tables.map((tb) => ({ group: tb.group, standings: tb.rows }));
@@ -4499,26 +5497,26 @@ async function cmdTable(group, ctx) {
4499
5497
  out();
4500
5498
  out(
4501
5499
  c.dim(
4502
- " " + (group ? t("table.none", { group: group.toUpperCase() }) : t("table.empty"))
5500
+ " " + (group ? t2("table.none", { group: group.toUpperCase() }) : t2("table.empty"))
4503
5501
  )
4504
5502
  );
4505
5503
  out();
4506
- if (degraded) out(c.dim(" " + t("table.degraded")));
4507
- out(disclaimer(t, c));
5504
+ if (degraded) out(c.dim(" " + t2("table.degraded")));
5505
+ out(disclaimer(t2, c));
4508
5506
  return;
4509
5507
  }
4510
5508
  for (const { group: g, rows } of tables) {
4511
5509
  out();
4512
- out(header(t("table.title", { group: g }), c));
5510
+ out(header(t2("table.title", { group: g }), c));
4513
5511
  const table = new Table({
4514
5512
  head: [
4515
- t("col.team"),
4516
- t("col.p"),
4517
- t("col.w"),
4518
- t("col.d"),
4519
- t("col.l"),
4520
- t("col.gd"),
4521
- t("col.pts")
5513
+ t2("col.team"),
5514
+ t2("col.p"),
5515
+ t2("col.w"),
5516
+ t2("col.d"),
5517
+ t2("col.l"),
5518
+ t2("col.gd"),
5519
+ t2("col.pts")
4522
5520
  ],
4523
5521
  colAligns: ["left", "right", "right", "right", "right", "right", "right"],
4524
5522
  style: { head: cfg.color ? ["cyan"] : [], border: cfg.color ? ["gray"] : [] }
@@ -4537,10 +5535,61 @@ async function cmdTable(group, ctx) {
4537
5535
  out(table.toString());
4538
5536
  }
4539
5537
  out();
4540
- if (degraded) out(c.dim(" " + t("table.degraded")));
5538
+ if (degraded) out(c.dim(" " + t2("table.degraded")));
4541
5539
  const src = dataSource(source, c);
4542
5540
  if (src) out(src);
4543
- out(disclaimer(t, c));
5541
+ out(disclaimer(t2, c));
5542
+ }
5543
+ var BRACKET_STAGES = /* @__PURE__ */ new Set(["R32", "R16", "QF", "SF", "3P", "F"]);
5544
+ async function cmdBracket(stage, opts, ctx) {
5545
+ const { cfg, t: t2 } = ctx;
5546
+ precheck(cfg, t2);
5547
+ const filter = stage?.toUpperCase();
5548
+ if (filter && !BRACKET_STAGES.has(filter)) {
5549
+ throw new InputError(t(cfg.lang, "bracket.invalidStage"));
5550
+ }
5551
+ const { view, degraded, standingsDegraded, source } = await getBracket(
5552
+ adapterFor(ctx),
5553
+ filter ? { stage: filter, lang: cfg.lang } : { lang: cfg.lang }
5554
+ );
5555
+ if (cfg.json) {
5556
+ emitJson({
5557
+ degraded,
5558
+ standingsDegraded,
5559
+ source: source ?? null,
5560
+ view
5561
+ });
5562
+ return;
5563
+ }
5564
+ const c = painterFor(cfg);
5565
+ const flags = flagsEnabled();
5566
+ const formatOpts = { flags, tz: cfg.tz, locale: cfg.lang, footer: false };
5567
+ let body;
5568
+ if (opts.tree) {
5569
+ const tree = formatBracketTree(view, {
5570
+ ...formatOpts,
5571
+ width: process.stdout.columns ?? 80
5572
+ });
5573
+ body = tree ?? formatBracketList(view, formatOpts);
5574
+ if (!tree) {
5575
+ out();
5576
+ out(c.dim(` ${t(cfg.lang, "bracket.treeFallback")}`));
5577
+ }
5578
+ } else {
5579
+ body = formatBracketList(view, formatOpts);
5580
+ }
5581
+ out();
5582
+ out(header(
5583
+ filter ? t(cfg.lang, "bracket.stageTitle", { stage: stageLabelI18n(cfg.lang, filter) }) : t(cfg.lang, "bracket.title"),
5584
+ c
5585
+ ));
5586
+ out(body);
5587
+ out();
5588
+ if (degraded) out(c.dim(` ${t(cfg.lang, "bracket.degraded")}`));
5589
+ else if (standingsDegraded) out(c.dim(` ${t(cfg.lang, "bracket.standingsDegraded")}`));
5590
+ const src = dataSource(source, c);
5591
+ if (src) out(src);
5592
+ out(disclaimer(t2, c));
4544
5593
  }
4545
5594
  function cmdPrompt({ cfg }) {
4546
5595
  try {
@@ -4635,8 +5684,8 @@ function cmdInitClaude(opts, { cfg }) {
4635
5684
  out("\u2192 Restart Claude Code to see it.");
4636
5685
  }
4637
5686
  async function cmdMatch(id, ctx) {
4638
- const { cfg, t } = ctx;
4639
- precheck(cfg, t);
5687
+ const { cfg, t: t2 } = ctx;
5688
+ precheck(cfg, t2);
4640
5689
  const { match, degraded, source: liveSource } = await getMatchById(adapterFor(ctx), id);
4641
5690
  const marketSignal = match ? await reliableMarketSignalFor(ctx, match) : void 0;
4642
5691
  if (cfg.json) {
@@ -4651,9 +5700,9 @@ async function cmdMatch(id, ctx) {
4651
5700
  const c = painterFor(cfg);
4652
5701
  out();
4653
5702
  if (!match) {
4654
- out(c.dim(" " + t("match.none", { id })));
5703
+ out(c.dim(" " + t2("match.none", { id })));
4655
5704
  out();
4656
- out(disclaimer(t, c));
5705
+ out(disclaimer(t2, c));
4657
5706
  return;
4658
5707
  }
4659
5708
  const stageLabelText = stageLabel(match);
@@ -4661,7 +5710,7 @@ async function cmdMatch(id, ctx) {
4661
5710
  out(" " + c.dim(`${stageLabelText} \xB7 ${matchLocation(match)}`));
4662
5711
  out(
4663
5712
  " " + c.dim(
4664
- `${formatKickoff(match.kickoff, { tz: cfg.tz, locale: cfg.lang })} ${statusToken(match, t, c)}`.trimEnd()
5713
+ `${formatKickoff(match.kickoff, { tz: cfg.tz, locale: cfg.lang })} ${statusToken(match, t2, c)}`.trimEnd()
4665
5714
  )
4666
5715
  );
4667
5716
  const flair = matchFlavor(match, { level: cfg.flavor, locale: cfg.lang });
@@ -4677,10 +5726,10 @@ async function cmdMatch(id, ctx) {
4677
5726
  for (const mline of marketBlock(marketSignal, match)) out(" " + c.dim(mline));
4678
5727
  }
4679
5728
  out();
4680
- if (degraded) out(c.dim(" " + t("feed.degraded")));
5729
+ if (degraded) out(c.dim(" " + t2("feed.degraded")));
4681
5730
  const src = dataSource(liveSource, c);
4682
5731
  if (src) out(src);
4683
- out(disclaimer(t, c));
5732
+ out(disclaimer(t2, c));
4684
5733
  }
4685
5734
  var MARKET_INFO = "Prediction-market data is informational only.";
4686
5735
  function marketDisplayable(sig) {
@@ -4698,9 +5747,9 @@ function printMarketBlock(m, sig, c) {
4698
5747
  for (const line2 of marketBlock(sig, m)) out(" " + c.dim(line2));
4699
5748
  }
4700
5749
  async function cmdMarkets(target, team, ctx) {
4701
- const { cfg, t } = ctx;
5750
+ const { cfg, t: t2 } = ctx;
4702
5751
  if (target === "next") {
4703
- precheck(cfg, t);
5752
+ precheck(cfg, t2);
4704
5753
  const code = resolveTeamArg(team, "Usage: claudinho markets next <team> (or set CLAUDINHO_TEAM)");
4705
5754
  const now2 = ctx.now ?? /* @__PURE__ */ new Date();
4706
5755
  const { match: fixture } = await marketFixtureForTeam(adapterFor(ctx), code, now2);
@@ -4718,7 +5767,7 @@ async function cmdMarkets(target, team, ctx) {
4718
5767
  const c2 = painterFor(cfg);
4719
5768
  out();
4720
5769
  if (!fixture) {
4721
- out(c2.dim(" " + t("next.none", { team: code })));
5770
+ out(c2.dim(" " + t2("next.none", { team: code })));
4722
5771
  } else {
4723
5772
  out(header(marketHeaderLine(fixture, cfg), c2));
4724
5773
  out();
@@ -4726,12 +5775,12 @@ async function cmdMarkets(target, team, ctx) {
4726
5775
  else out(c2.dim(" " + noSignalLine(fixture, now2)));
4727
5776
  }
4728
5777
  out();
4729
- out(disclaimer(t, c2));
5778
+ out(disclaimer(t2, c2));
4730
5779
  out(c2.dim(MARKET_INFO));
4731
5780
  return;
4732
5781
  }
4733
5782
  if (target && target !== "today" && !isValidDate(target)) {
4734
- precheck(cfg, t);
5783
+ precheck(cfg, t2);
4735
5784
  const now2 = ctx.now ?? /* @__PURE__ */ new Date();
4736
5785
  const { match } = await getMatchById(adapterFor(ctx), target);
4737
5786
  const sig = match && marketRelevant(match, now2) ? (await marketSignalsFor(ctx, [match], MARKETS_CMD_OPTS)).get(match.id) : void 0;
@@ -4743,7 +5792,7 @@ async function cmdMarkets(target, team, ctx) {
4743
5792
  const c2 = painterFor(cfg);
4744
5793
  out();
4745
5794
  if (!match) {
4746
- out(c2.dim(" " + t("match.none", { id: target })));
5795
+ out(c2.dim(" " + t2("match.none", { id: target })));
4747
5796
  } else {
4748
5797
  out(header(marketHeaderLine(match, cfg), c2));
4749
5798
  out();
@@ -4751,12 +5800,12 @@ async function cmdMarkets(target, team, ctx) {
4751
5800
  else out(c2.dim(" " + noSignalLine(match, now2)));
4752
5801
  }
4753
5802
  out();
4754
- out(disclaimer(t, c2));
5803
+ out(disclaimer(t2, c2));
4755
5804
  out(c2.dim(MARKET_INFO));
4756
5805
  return;
4757
5806
  }
4758
5807
  const explicitDate = target && target !== "today" ? target : void 0;
4759
- precheck(cfg, t, explicitDate);
5808
+ precheck(cfg, t2, explicitDate);
4760
5809
  const now = ctx.now ?? /* @__PURE__ */ new Date();
4761
5810
  const date = explicitDate ?? localDate(now.toISOString(), cfg.tz);
4762
5811
  const { matches } = await getMatchesForDate(adapterFor(ctx), date);
@@ -4785,7 +5834,7 @@ async function cmdMarkets(target, team, ctx) {
4785
5834
  out();
4786
5835
  }
4787
5836
  }
4788
- out(disclaimer(t, c));
5837
+ out(disclaimer(t2, c));
4789
5838
  out(c.dim(MARKET_INFO));
4790
5839
  }
4791
5840
  function pickShareStyle(v) {
@@ -4854,8 +5903,39 @@ function emitShareTable(ctx, e, copy) {
4854
5903
  );
4855
5904
  }
4856
5905
  }
5906
+ function emitShareBracket(ctx, e, copy) {
5907
+ const snippet = formatShareBracket(
5908
+ {
5909
+ view: e.view,
5910
+ source: e.source,
5911
+ installLine: e.installLine,
5912
+ emptyNote: e.emptyNote
5913
+ },
5914
+ e.options
5915
+ );
5916
+ if (ctx.cfg.json) {
5917
+ emitJson({
5918
+ kind: "bracket",
5919
+ target: "bracket",
5920
+ ...e.stage ? { stage: e.stage } : {},
5921
+ source: e.source ?? null,
5922
+ degraded: e.degraded,
5923
+ informationalOnly: true,
5924
+ snippet,
5925
+ view: e.view
5926
+ });
5927
+ } else {
5928
+ out(snippet);
5929
+ }
5930
+ if (copy) {
5931
+ const ok = (ctx.copy ?? copyToClipboard)(snippet);
5932
+ process.stderr.write(
5933
+ (ok ? "Copied share snippet to clipboard." : "Clipboard unavailable; printed snippet instead.") + "\n"
5934
+ );
5935
+ }
5936
+ }
4857
5937
  async function cmdShare(target, team, opts, ctx) {
4858
- const { cfg, t } = ctx;
5938
+ const { cfg, t: t2 } = ctx;
4859
5939
  const baseOptions = {
4860
5940
  style: pickShareStyle(opts.style),
4861
5941
  includeMarkets: cfg.markets !== false,
@@ -4864,7 +5944,7 @@ async function cmdShare(target, team, opts, ctx) {
4864
5944
  };
4865
5945
  const copy = opts.copy === true;
4866
5946
  if (target === "live") {
4867
- precheck(cfg, t);
5947
+ precheck(cfg, t2);
4868
5948
  const { matches, degraded: degraded2, source: source2 } = await getLiveMatches(adapterFor(ctx));
4869
5949
  emitShare(
4870
5950
  ctx,
@@ -4890,7 +5970,7 @@ async function cmdShare(target, team, opts, ctx) {
4890
5970
  return;
4891
5971
  }
4892
5972
  if (target === "table") {
4893
- precheck(cfg, t);
5973
+ precheck(cfg, t2);
4894
5974
  const group = team?.toUpperCase();
4895
5975
  const { tables, degraded: degraded2, source: source2 } = await getStandings(adapterFor(ctx), group);
4896
5976
  emitShareTable(
@@ -4909,8 +5989,39 @@ async function cmdShare(target, team, opts, ctx) {
4909
5989
  );
4910
5990
  return;
4911
5991
  }
5992
+ if (target === "bracket") {
5993
+ precheck(cfg, t2);
5994
+ const stageFilter = team?.toUpperCase();
5995
+ if (stageFilter && !BRACKET_STAGES.has(stageFilter)) {
5996
+ throw new InputError(t(cfg.lang, "bracket.invalidStage"));
5997
+ }
5998
+ const { view, degraded: degraded2, source: source2 } = await getBracket(
5999
+ adapterFor(ctx),
6000
+ stageFilter ? { stage: stageFilter, lang: cfg.lang } : { lang: cfg.lang }
6001
+ );
6002
+ emitShareBracket(
6003
+ ctx,
6004
+ {
6005
+ stage: stageFilter,
6006
+ view,
6007
+ source: degraded2 ? void 0 : source2,
6008
+ degraded: degraded2,
6009
+ installLine: stageFilter ? `npx @claudinho/cli bracket ${stageFilter}` : "npx @claudinho/cli bracket",
6010
+ emptyNote: t(cfg.lang, "bracket.empty"),
6011
+ options: {
6012
+ includeHashtag: baseOptions.includeHashtag,
6013
+ includeInstallLine: baseOptions.includeInstallLine,
6014
+ locale: cfg.lang,
6015
+ style: baseOptions.style,
6016
+ tz: cfg.tz
6017
+ }
6018
+ },
6019
+ copy
6020
+ );
6021
+ return;
6022
+ }
4912
6023
  if (target === "next") {
4913
- precheck(cfg, t);
6024
+ precheck(cfg, t2);
4914
6025
  const code = resolveTeamArg(team, "Usage: claudinho share next <team> (or set CLAUDINHO_TEAM)");
4915
6026
  const fixture = nextFixtureForTeam(code, { from: ctx.now ?? /* @__PURE__ */ new Date() });
4916
6027
  const matches = fixture ? [fixture] : [];
@@ -4938,7 +6049,7 @@ async function cmdShare(target, team, opts, ctx) {
4938
6049
  return;
4939
6050
  }
4940
6051
  if (target && target !== "today" && !isValidDate(target)) {
4941
- precheck(cfg, t);
6052
+ precheck(cfg, t2);
4942
6053
  const { match, degraded: degraded2, source: source2 } = await getMatchById(adapterFor(ctx), target);
4943
6054
  const matches = match ? [match] : [];
4944
6055
  const signals2 = await reliableShareSignals(ctx, matches);
@@ -4965,7 +6076,7 @@ async function cmdShare(target, team, opts, ctx) {
4965
6076
  return;
4966
6077
  }
4967
6078
  const explicitDate = target && target !== "today" ? target : void 0;
4968
- precheck(cfg, t, explicitDate);
6079
+ precheck(cfg, t2, explicitDate);
4969
6080
  const date = explicitDate ?? localDate((/* @__PURE__ */ new Date()).toISOString(), cfg.tz);
4970
6081
  const { matches: all, degraded, source } = await getMatchesForDate(adapterFor(ctx), date);
4971
6082
  const todays = fixturesByDate(date, all, cfg.tz);
@@ -5063,7 +6174,7 @@ function handlePipeError(stream) {
5063
6174
  }
5064
6175
  handlePipeError(process.stdout);
5065
6176
  handlePipeError(process.stderr);
5066
- var VERSION = "0.7.0";
6177
+ var VERSION = "0.8.1";
5067
6178
  var DISCLAIMER = "Claudinho is an independent fan project. Not affiliated with or endorsed by FIFA or Anthropic.";
5068
6179
  function ctxFrom(cmd) {
5069
6180
  let root = cmd;
@@ -5111,6 +6222,13 @@ program.command("table").description("show group standings (default: all groups)
5111
6222
  fail(e);
5112
6223
  }
5113
6224
  });
6225
+ program.command("bracket").description("show the knockout bracket (default: all rounds)").argument("[stage]", "filter by stage: R32, R16, QF, SF, 3P, F").option("--tree", "ASCII tree view (falls back to list when terminal is narrow)").action(async (stage, opts, cmd) => {
6226
+ try {
6227
+ await cmdBracket(stage, opts, ctxFrom(cmd));
6228
+ } catch (e) {
6229
+ fail(e);
6230
+ }
6231
+ });
5114
6232
  program.command("match").description("show a single match by id").argument("<id>", "match id").action(async (id, _opts, cmd) => {
5115
6233
  try {
5116
6234
  await cmdMatch(id, ctxFrom(cmd));
@@ -5125,9 +6243,9 @@ program.command("markets").description("show prediction-market signals (read-onl
5125
6243
  fail(e);
5126
6244
  }
5127
6245
  });
5128
- program.command("share").description("print a shareable, copy-pasteable match snippet (#VibingLaVidaLoca)").argument("[target]", '"today" (default), "live", a date, a match id, "next", or "table"').argument(
6246
+ program.command("share").description("print a shareable, copy-pasteable match snippet (#VibingLaVidaLoca)").argument("[target]", '"today" (default), "live", a date, a match id, "next", "table", or "bracket"').argument(
5129
6247
  "[team]",
5130
- 'team code for "next" (default: $CLAUDINHO_TEAM), or group letter for "table" (omit for all groups)'
6248
+ 'team code for "next" (default: $CLAUDINHO_TEAM), group letter for "table", or stage for "bracket"'
5131
6249
  ).option("--style <style>", "snippet style: social (default) or compact").option("--copy", "also copy the snippet to the clipboard (best-effort)").option("--no-hashtag", "omit the #VibingLaVidaLoca tag").option("--no-install-line", "omit the install/run cue").action(async (target, team, opts, cmd) => {
5132
6250
  try {
5133
6251
  await cmdShare(target, team, opts, ctxFrom(cmd));