diff --git a/PROJECT.md b/PROJECT.md
index 7694b03..dddaf49 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -491,6 +491,27 @@ zombie (now an occasional opponent, `TUNE.racketEvery`, not the every-game fixtu
`RETURNED`, `DOUBLE KILL`) is a footnote to something you already watched happen. Sharing the loud
FACE with the milestone cards is right; sharing their SIZE made every footnote read as a milestone.
+## Session log: THE LEVEL IS YOU, IN THE LEAGUE — legs and window (2026-08-29, after the merge)
+
+Oliver's deep-test question ("wie wirkt sich mein level aus? werde ich schneller, genauer?")
+exposed two honest gaps: the level's buffs were defensive-only (the plan's serve/accuracy dials
+never landed) and linearly spread over 49 levels — imperceptible where he actually plays
+(level 20, league 4: "autorun schlicht zu langsam, das timing wird zu tight"). His directive:
+gore aside, the league must reward xp SUBTLY but really; level 1 stays the untouchable baseline.
+
+- **profile.bonus() is FRONT-LOADED now**: sqrt of the level fraction (the xp curve's own
+ fast-early logic). Level 20 carries ~0.62 of each cap value; linear gave 0.39.
+- **THE LEAGUE PAIR**, league modes only (`G.match && !G.net` — classic keeps its picker,
+ netplay stays a fair human match, gore untouched): `run` (cap +15%) multiplies INSIDE
+ `assistK()`, so the mover's legs and intercept's reachability can never disagree (the
+ rzChaseSpeed rule, player-side); `window` (cap +20%) widens trySwing's player contact window
+ AND the update() swing-clock expiry that would otherwise close over it — and since quality is
+ centre-normalised, the same millisecond error also scores HIGHER: quicker to the ball, cleaner
+ when there. At level 20 that is ~+9% legs, ~+12% window.
+- Suite 125: level-1 identity, cap bounds, the front-load ratio, the league/netplay/classic
+ gating — and freshSplatter zeroes xp now, because the level feeds real dials and accumulated
+ test awards would silently buff every later test.
+
## THE LEAGUES LAND ON MAIN (2026-08-29, end of the build day)
Oliver's phone verdict after the full staging day: "super — sehr gute session. bitte merge nach
diff --git a/index.html b/index.html
index 54a1faa..4a198bb 100644
--- a/index.html
+++ b/index.html
@@ -864,6 +864,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
-
+