{# ══════════════════════════════════════════════════════════════════════ Fragment dynamique du match (swap AJAX) Contient : flashes, topbar, board, main du joueur actif, log. Le modal et le contexte JS sont dans match.html.twig hors du wrapper. ══════════════════════════════════════════════════════════════════════ #} {% import 'admin/tcg/_macros.html.twig' as helpers %} {# ── Flashes ── #} {% for label, msgs in app.flashes(['error', 'warning', 'success']) %} {% for m in msgs %}
Vainqueur : Joueur #{{ state.activePlayer ?? '?' }} {% if match.winner %} ({{ match.winner.username }}){% endif %}