{% extends 'base.html.twig' %} {% block body_class %} front-body--recap-stories{% endblock %} {% block title %}Récap — {{ team.name }} | LPF 2026{% endblock %} {% block stylesheets %} {{ parent() }} {% endblock %} {% set team_logo_src = team.logo ? (team.logo starts with 'http' ? team.logo : asset(team.logo)) : null %} {% set bigballs_rate = team_summary.bigballs_attempted > 0 ? ((team_summary.bigballs_succeeded / team_summary.bigballs_attempted) * 100)|round : null %} {% block body %}
LPF’26
Fin de compétition
« {{ team.slogan }} »
{% endif %}Tape ou swipe pour continuer
Classement final
#{{ final_snapshot.position }}
sur {{ latest_teams_count }} équipes
{{ team_total_points|number_format(0, ',', ' ') }} points
Meilleure position
#{{ best_snapshot.position }}
{% if best_snapshot.matchRef %}après {{ best_snapshot.matchRef.paysDomicile ? best_snapshot.matchRef.paysDomicile.nom : '?' }} — {{ best_snapshot.matchRef.paysExterieur ? best_snapshot.matchRef.paysExterieur.nom : '?' }}
{% endif %} {% if final_position and best_snapshot.position < final_position %}Tu as même été plus haut que ta place finale.
{% elseif final_position and best_snapshot.position == final_position %}Tu as fini sur ton meilleur rang.
{% endif %}Évolution du classement
{% if first_position and final_position %}#{{ first_position }} → #{{ final_position }}
{% endif %}Scores exacts
{{ team_summary.scores_exacts_count }}
{{ team_summary.points_score_exact|number_format(0, ',', ' ') }} pts
{% if team_summary.scores_exacts_count == 0 %} Zéro carton plein… la prochaine fois. {% elseif team_summary.scores_exacts_count < 5 %} Rare mais précieux. {% else %} Belle série de cartons pleins. {% endif %}
{{ bigballs_term('name') }}
{% if team_summary.bigballs_attempted == 0 %}0
Aucune tentative
Pas de risque partagé cette saison.
{% else %}{{ team_summary.bigballs_succeeded }}/{{ team_summary.bigballs_attempted }}
{% if bigballs_rate is not null %}{{ bigballs_rate }}% de réussite · {% endif %} {{ team_summary.points_bigballs|number_format(0, ',', ' ') }} pts
{% if bigballs_rate is not null and bigballs_rate >= 50 %} Vous avez osé… et ça a souvent payé. {% else %} Le duo a tenté le même score — le risque, c’est vous. {% endif %}
{% endif %}Jokers
{{ jokers_placed|length }}
posé{{ jokers_placed|length > 1 ? 's' : '' }} sur la compétition
{% if jokers_placed is not empty %}Les jokers sont restés dans la poche.
{% endif %} {% if jokers_suffered is not empty %}{{ jokers_suffered|length }} joker{{ jokers_suffered|length > 1 ? 's' : '' }} offensif{{ jokers_suffered|length > 1 ? 's' : '' }} subi{{ jokers_suffered|length > 1 ? 's' : '' }}
{% endif %}Efficacité des jokers
{% if joker_efficiency.success_rate is not null %}{{ joker_efficiency.success_rate }}%
{{ joker_efficiency.landed_count }}/{{ joker_efficiency.offensive_count }} offensif{{ joker_efficiency.offensive_count > 1 ? 's' : '' }} passé{{ joker_efficiency.landed_count > 1 ? 's' : '' }}
{% else %}{{ joker_efficiency.placed_count }}
joker{{ joker_efficiency.placed_count > 1 ? 's' : '' }} posé{{ joker_efficiency.placed_count > 1 ? 's' : '' }} (aucun offensif)
{% endif %} {% if joker_efficiency.points_gained > 0 %}+{{ joker_efficiency.points_gained|number_format(0, ',', ' ') }} pts via pique
{% endif %} {% if joker_efficiency.blocked_count > 0 %}{{ joker_efficiency.blocked_count }} bloqué{{ joker_efficiency.blocked_count > 1 ? 's' : '' }} (bouclier / équipe favorite)
{% endif %}{% if joker_efficiency.success_rate is null %} Des jokers plutôt défensifs ou utilitaires. {% elseif joker_efficiency.success_rate >= 70 %} Clinique. Tes jokers ont fait mal. {% elseif joker_efficiency.success_rate >= 40 %} Du bon, du moins bon — classique. {% else %} L’orga adverse était bien préparée… {% endif %}
Ta cible préférée
{% if attacked_logo_src %}{{ most_attacked.team_name }}
{{ most_attacked.attacks_count }} attaque{{ most_attacked.attacks_count > 1 ? 's' : '' }} {% if most_attacked.pique_count > 0 %} · {{ most_attacked.pique_count }} pique{{ most_attacked.pique_count > 1 ? 's' : '' }} {% endif %}
{% if most_attacked.points_inflicted > 0 %}{{ most_attacked.points_inflicted|number_format(0, ',', ' ') }} pts infligés
{% endif %} {% if most_attacked.joker_names is not empty %}L’équipe que tu as le plus ciblée.
Ton meilleur ennemi
{% if enemy_logo_src %}{{ best_enemy.team_name }}
{{ best_enemy.jokers_count }} joker{{ best_enemy.jokers_count > 1 ? 's' : '' }} reçu{{ best_enemy.jokers_count > 1 ? 's' : '' }} {% if best_enemy.pique_count > 0 %} · {{ best_enemy.pique_count }} pique{{ best_enemy.pique_count > 1 ? 's' : '' }} {% endif %}
{% if best_enemy.points_stolen > 0 %}{{ best_enemy.points_stolen|number_format(0, ',', ' ') }} pts volés / retirés
{% endif %} {% if best_enemy.joker_names is not empty %}Ils t’ont le plus cherché cette saison.
Tes buteurs
{{ buteurs.total_points|number_format(0, ',', ' ') }} pts
{{ buteurs.total_goals }} but{{ buteurs.total_goals > 1 ? 's' : '' }} au total
{{ row.buteur_name }}
{{ row.nickname }} {% if row.country %} · {{ row.country }}{% endif %}
{{ row.goals }} but{{ row.goals > 1 ? 's' : '' }} · {{ row.points|number_format(0, ',', ' ') }} pts
Duel interne
{{ duel.leader_nickname }}
{{ duel.leader_points|number_format(0, ',', ' ') }} pts
{{ duel.leader_percent }}%
VS
{{ duel.trailer_nickname }}
{{ duel.trailer_points|number_format(0, ',', ' ') }} pts
{{ duel.trailer_percent }}%
Écart : {{ duel.gap_points|number_format(0, ',', ' ') }} pts
{% else %}Match nul parfait.
{% endif %}MVP de l’équipe
{{ mvp.nickname }}
{{ mvp.points_total|number_format(0, ',', ' ') }} pts · {{ mvp.percent_of_team }}% de l’équipe
Le moteur de la saison.
Mot de l’orga
{% if team.recapAdminTitle %}{{ team.recapAdminBody|nl2br }}
{% if recap_admin_persona %} {% elseif team.recapAdminAuthor %}— {{ team.recapAdminAuthor }}
{% endif %}Merci
{{ team.name }} · {{ team_total_points|number_format(0, ',', ' ') }} pts {% if final_snapshot %} · #{{ final_snapshot.position }}{% endif %}