diff --git a/PROJECT.md b/PROJECT.md
index 5879839..7e1d3a2 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -5485,6 +5485,23 @@ there when the window opened) or `early 40ms`. That was the question his first l
kicks UP. Resetting `ball.g` at the bounce would fix the picture but moves every timing in the
rally (all four planners), so it is a decision to put to him.
+### The dip ends at the bounce: topspin kicks UP (2026-10-14, v369, Oliver: "ja, bau den topspin-fix")
+A shot's extra gravity (quality topspin `spinFactor`, the serve's `serveSpin`) is its DIVE IN FLIGHT,
+and it used to be carried THROUGH the bounce: a "heavy topspin" ball skidded away low and nearly every
+contact in his logs was 0-25 cm off the grass. `gAfter()` hands a ball plain gravity at its bounce
+(tennis modes; gore's balls keep theirs). The kick itself was already `bY`/`bXZ`'s spin factor. Every
+planner that rolls a bounce forward switches at the same moment (physics, `intercept`, `bounceContact`,
+`ringCue`, `matchOutOfReachFlight`); one left on the old gravity would predict a ball that is not there.
+- **Side effect, caught by the probe:** higher bounces fell outside the auto-run's 0.45-1.3 m comfort
+ band, so it found no point behind the line and ran forward to VOLLEY (38-42% volleys). The player
+ now takes a kicking bounce at its top, up to `rallyTop` 1.7 m. Volleys are back to 8-18%.
+- **Measured** (probe, median player contact): rung 1 0.42 -> 1.13 m, rung 6 0.53 m, and against the
+ big hitter still 0.35 m. The cause there is no longer the bounce. A contact fires on the FIRST frame
+ the ball is in reach, so against hard pace it is met as it enters reach, just off the bounce. Waist
+ high contact against pace would need the contact model itself changed: contact at the closest
+ approach, quality by distance from the sweet spot. That is a separate decision. The timed ring still
+ returns 92-98%. 162 tests, nine seeds.
+
# OPEN — leftovers, in rough priority order
Nothing here is broken; these are known gaps and unverified risks.
diff --git a/index.html b/index.html
index 433e52a..796e5c1 100644
--- a/index.html
+++ b/index.html
@@ -1140,6 +1140,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
REC
-
+