Match cards: composed title, header stage from match title, equal-sized grid

- SportsMatchController syncs Video.title with SportsMatch.title on
  store/update so the "Match title" field drives the video's display
  title everywhere.
- headerData(): "championship" now prefers event_name (event title)
  and adds a dedicated "stage" key sourced from SportsMatch.title
  (shown between the yellow lines above the weight class in both the
  in-player VS overlay and the vs-mini gallery card).
- Video cards render match titles with flags + corner colours
  ("FINALS – 🇧🇭 Blue vs 🇧🇭 Red (-61 kg)"), matching the video
  page header, and clip long titles to one line.
- Video gallery grid uses repeat(N, minmax(0, 1fr)) + grid-auto-rows:1fr
  so every card thumbnail renders at exactly the same size; hover-preview
  videos use object-fit:cover to stop portrait sources looking smaller.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
ghassanandClaude Opus 4.7 committed 2026-08-11 09:14:25 +03:00
1 parent 04d63cccdb
commit 665bad76bf
7 files changed
+128 -37

No files matched your search

+8 -1
View File
@@ -68,7 +68,14 @@ class SportsMatch extends Model
],
'weight_category' => $trim($p['weight_class'] ?? null),
'division' => $trim($c['division'] ?? null),
'championship' => $trim($c['championship_name'] ?? null) ?? $trim($this->event_name),
// Sub-header "stage" shown between the two yellow lines above
// the weight class (e.g. "Finals", "SEMI FINAL"). Sourced from
// the SportsMatch->title column — the form's "Match title" input.
'stage' => $trim($this->title),
// "Event title" = the championship / tournament name shown above the
// fighters. Prefer the SportsMatch->event_name column (the field the
// uploader labels "Event title"), fall back to competition.championship_name.
'championship' => $trim($this->event_name) ?? $trim($c['championship_name'] ?? null),
'match_number' => $trim(($c['match_number'] ?? null) !== null ? (string) $c['match_number'] : null),
'court' => $trim($c['court'] ?? null),
'format' => $trim($c['format'] ?? null), // "3 min", "Best of 3", …