diff --git a/PROJECT.md b/PROJECT.md
index 6b2c281..d964f03 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -597,6 +597,24 @@ The suite pins the direction guarantee and the knob relationship (`aimTrust·aim
under a committed swipe's worst-case aim). Whether placement should also BEAT an unwounded body
more often (`aiRead` on wide balls — "dial 2") is open, awaiting the phone verdict on this one.
+**...and the flick aims RELATIVE TO THE PLAYER** (2026-08-20, third round, and this was the core
+all along: *"when the opponent and the player are both standing in the left service box it is
+virtually impossible to flick the ball into the left out. no matter how hard/good I flick"*). The
+lane was ABSOLUTE — a full flick asked for `flickWidth` off the court's CENTRE — so the gesture
+saturated near a sideline: from x −2 a perfect left flick moved the ball under 2 m and could never
+pass the line (by design, 3.95 vs 4.115 — and the better the timing, the firmer the cap, because
+scatter was the only thing that could cross). The felt "left is impossible / right works" was
+never left-vs-right: it was toward-the-near-sideline vs across-the-court. **`TUNE.aimAnchor`**:
+the aim's anchor slides from the court centre to the player's own x as the swipe commits
+(`anchor = ch.x · |sway| · aimAnchor`), so a flat tap is exactly what it always was and a full
+flick is a full ±flickWidth sweep FROM WHERE YOU STAND — including past the line. **Out-by-aim
+exists now and is a choice** (his explicit direction: *"not about the possibility of the ball
+going out but rather the aiming itself"*); the placement ring already turns red for it. 0 restores
+the old absolute lane, blendable, panel-tunable for live A/B. Player rally lanes only — the
+opponent's lanes and the pOut invariants are stated from centre and unchanged there. Verified in
+his exact scene (both bodies in their left boxes): full left flick lands −5 (the alley), half
+swipe −3.07 (hunting the line, in), full right +1.93 (a full sweep measured from him).
+
**The umpire and the boy.** `aside()` refused during any interlude and the match runs on a permanent
one, so he was silently muted for the entire mode — the one mode that is literally a tennis match he
is sitting over (`G.interlude && !G.match` now, the same shape as `sendBoy`). Six dry lines: two on
diff --git a/index.html b/index.html
index 738a0e0..cd01c6f 100644
--- a/index.html
+++ b/index.html
@@ -659,6 +659,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
-
+