﻿# Lest — Catalogue des 24 badges

> Source : `BadgeCatalog` / `BadgeEvaluator` (app mobile). Les badges se méritent par la progression réelle — messaging landing : « Pas de médailles gratuites ».

## Familles

1. **Distance** (6)
2. **Tonnage** (6)
3. **Régularité** (6)
4. **Dépassement** (6)

## Catalogue

| Code | Famille | Titre | Condition | Cible | Unité | Métrique évaluée |
| --- | --- | --- | --- | --- | --- | --- |
| `distance_5k` | distance | Premier 5 K | ≥ 5 km en **une** séance | 5 | km | plus longue distance d'une séance |
| `distance_10k` | distance | Premier 10 K | ≥ 10 km en une séance | 10 | km | idem |
| `distance_half` | distance | Semi lesté 21,1 km | 21,1 km en une séance | 21.1 | km | idem |
| `distance_marathon` | distance | Marathon lesté 42,2 km | 42,2 km en une séance | 42.2 | km | idem |
| `distance_100km` | distance | 100 km cumulés | cumul toutes séances | 100 | km | distance totale |
| `distance_500km` | distance | 500 km cumulés | cumul | 500 | km | distance totale |
| `tonnage_1t` | tonnage | 1 t | 1 t déplacée | 1 | t | tonnage total |
| `tonnage_10t` | tonnage | 10 t | 10 t | 10 | t | tonnage total |
| `tonnage_50t` | tonnage | 50 t | 50 t | 50 | t | tonnage total |
| `tonnage_100t` | tonnage | 100 t | 100 t | 100 | t | tonnage total |
| `tonnage_500t` | tonnage | 500 t | 500 t | 500 | t | tonnage total |
| `tonnage_1000t` | tonnage | 1 000 t | 1 000 t | 1000 | t | tonnage total |
| `streak_3` | régularité | Série 3 jours | 3 jours consécutifs avec séance | 3 | jours | streak courant |
| `streak_7` | régularité | Série 7 jours | 7 jours | 7 | jours | streak |
| `streak_30` | régularité | Série 30 jours | 30 jours | 30 | jours | streak |
| `sessions_50` | régularité | 50 séances | 50 séances complétées | 50 | séances | compteur séances |
| `sessions_100` | régularité | 100 séances | 100 | 100 | séances | compteur |
| `sessions_365` | régularité | 365 séances | 365 | 365 | séances | compteur |
| `elevation_500` | dépassement | D+ 500 m | 500 m D+ en **une** séance | 500 | m | max D+ d'une séance |
| `elevation_2000` | dépassement | D+ 2 000 m cumulés | 2 000 m D+ cumulés | 2000 | m | D+ total |
| `load_20kg` | dépassement | Première séance 20 kg | séance avec ≥ 20 kg de charge | 20 | kg | max load d'une séance |
| `activities_5` | dépassement | 5 activités différentes | 5 types d'activités distincts | 5 | activités | count distinct |
| `early_bird` | dépassement | Séance avant 7h | commence une séance avant 7h | — | — | booléen |
| `monthly_goal_3` | dépassement | Objectif mensuel ×3 | objectif mensuel 3 mois de suite | 3 | mois | streak objectifs mensuels |

## Évaluation

Après agrégation du contexte utilisateur, chaque badge compare sa métrique à sa cible (`current >= target`), sauf `early_bird` (booléen). Les badges déjà débloqués conservent leur date UTC ; les nouveaux codes déclenchent célébration / partage UI.

## Comment en parler

- Citer le **titre** et la **condition** exacts du tableau.
- Distinguer **meilleure séance** vs **cumul** (ex. 5 K vs 100 km).
- Ne pas inventer d'autres badges ou seuils.
- Si non débloqué : indiquer la métrique manquante, sans inventer la progression utilisateur.