# CHANGELOG — Coaster World v1.71.0

## Classements V2
- Nouvelle page authentifiée `/rankings` accessible depuis le header, le menu mobile, le profil, la page Progression et les groupes.
- Trois périmètres de classement : **Amis**, **Groupe** et **Communauté**.
- Sélection du groupe directement depuis la page lorsqu’un utilisateur appartient à plusieurs groupes.
- Trois périodes : **Tout le temps**, **Cette année** et **Ce mois**.
- Cinq catégories comparables : **XP**, **Coasters**, **Parcs**, **Badges** et **Challenges**.
- Podium visuel pour les trois premiers, classement Top 50 et rappel de la position personnelle lorsqu’elle se situe hors du Top 50.
- Bloc personnel affichant en permanence la position de l’utilisateur dans les cinq catégories.
- Affichage croisé des statistiques dans le tableau afin de comprendre pourquoi un membre est mieux classé dans une catégorie.
- Niveau Explorateur global affiché à côté de chaque membre.

## Calculs du classement
- XP : somme des événements XP sur la période choisie.
- Coasters : nombre de coasters différents ridés sur la période.
- Parcs : nombre de parcs différents issus des rides, visites personnelles et participations acceptées à une visite.
- Badges : nombre de succès actifs différents débloqués sur la période.
- Challenges : nombre de challenges terminés sur la période.
- Les rides historiques dont seule l’année est connue sont comptés dans une année donnée mais ne sont volontairement pas inventés dans un mois précis.

## Confidentialité
- Le périmètre Communauté n’affiche que les profils publics, plus le compte connecté lui-même.
- Le périmètre Amis respecte les réglages `private / friends / public`.
- Un classement de groupe n’expose pas automatiquement l’activité privée d’un membre : un membre non ami avec visibilité `friends` reste masqué.
- Les relations de blocage sont appliquées dans les deux sens : un utilisateur bloqué ou bloquant est exclu des classements visibles.
- Seuls les comptes `active` peuvent apparaître.

## Réparation de la chronologie XP / badges
- Correction importante pour les classements mensuels et annuels : la synchronisation rétroactive de la v1.70 pouvait enregistrer l’XP historique à la date du recalcul.
- `SkillProgressService::award()` accepte désormais la date réelle de l’événement.
- Une nouvelle synchronisation met à jour la date des événements XP déjà existants via leur clé de déduplication, **sans recréer ni doubler l’XP**.
- Les dates sont reconstruites depuis les rides, visites, parcs/pays découverts, constructeurs, complétions de parc, Road Trips, challenges et contributions.
- Les badges canoniques non répétables récupèrent également leur vraie date approximative de franchissement du palier.
- Les badges répétables `Parc maîtrisé` sont resynchronisés avec la date de leur événement de complétion.
- Les nouveaux rides historiques utilisent également leur date historique lors de l’attribution Hunter XP.

## Navigation / intégration
- Ajout de `Classements` dans la navigation desktop et mobile.
- Ajout d’un bouton Classements sur le profil privé.
- Ajout d’un accès direct depuis la page Progression.
- Ajout d’un bouton Classements sur chaque page de groupe, ouvrant directement le classement de ce groupe.

## Interface
- Nouvelle page premium responsive avec podium, cartes de position, filtres en pills et tableau horizontalement scrollable sur petit écran.
- Design compatible thèmes clair et sombre.
- Les filtres de catégorie deviennent un slider horizontal sur très petit écran afin d’éviter tout dépassement.
- 45 nouvelles chaînes d’interface dans chacune des langues FR / EN / DE / ES / IT.
- Nouvel asset CSS de production `app-v171-rankings-v2.css`.

## Base de données
- **Aucune nouvelle migration.**
- Aucune nouvelle table.
- La version exploite uniquement les données déjà présentes dans `skill_xp_events`, `rides`, `visits`, `visit_members`, `user_achievements`, `achievements`, `challenge_participants`, `friendships`, `groups`, `group_members`, `user_social_settings` et `user_blocks`.

## Vérifications
- Syntaxe PHP contrôlée sur les fichiers applicatifs, routes, configuration, migrations et traductions.
- Syntaxe Blade contrôlée sur les 57 vues du projet et équilibre des principales directives vérifié.
- JavaScript source et asset de production validés avec `node --check`.
- Cohérence des 45 nouvelles traductions vérifiée dans les 5 langues.
- Route `/rankings` et liens d’interface contrôlés.
- Manifest Vite contrôlé et asset CSS v1.71 présent.
- Aucune migration v1.71 ajoutée.
- Composer et `vendor/` ne sont pas présents dans l’environnement de génération : les tests Artisan runtime n’ont pas pu être exécutés ici.
