diff --git a/PROJECT.md b/PROJECT.md
index 39f3901..d7c2b8a 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -405,6 +405,28 @@ 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 far court, without spending the lens (2026-08-13)
+
+Oliver: the far-side opponent is barely visible in portrait, and the lens (camZ/camF, already at its
+measured ceiling — see fitViewport) and world height were the only knobs he knew. Two new ones, both
+AWAITING HIS PHONE VERDICT — nothing here is settled yet:
+
+- **`TUNE.farK` — bodies draw off a flattened scale curve, the court projects true.** The 16-bit
+ tennis trick: `s' = s·(sNear/s)^farK`, anchored at the player's deepest stance (he is untouched),
+ clamped so nothing nearer ever shrinks. At 0.25 the far-baseline opponent draws ~20% bigger
+ (31 → 38 logical px) and the court gives up nothing. Applied in render.js `farB(z)` to every body
+ AND to every anchor that hangs off a body height (flames, boss HP, muzzle glow, drill chevron,
+ umpire) — boosting only the sprite left the HP bar sitting on the boss's hat. Known residual: the
+ ball keeps the true projection, so at the far baseline it meets a boosted racket ~5px off. 0
+ restores pure projection.
+- **`TUNE.farCamY`/`farCamZ` — a broadcast lean while the ball is on the far half** (tennis + match
+ only; the gore modes would pump). Eased like aimCam, and pivoted about the player's deepest stance
+ via `fOff` in render.js — without that pivot 0.35m of camY slides his feet 14px toward the rack,
+ and the apron math promised that room. Measured in-pane: far court rises ~14px and grows ~1.3%,
+ player feet drift ≤2.3px and return exactly. The backdrop cache repaints while the camera eases
+ (~0.35ms/frame desktop, settled key at both ends) — if the phone stutters in rallies, zero these
+ two before touching anything else.
+
## Session log: nothing arrives unannounced (2026-08-11, same day)
Oliver's retest: *"the horde is not announced anymore"* and *"bosses are just there now"*. Both were
diff --git a/index.html b/index.html
index 102820f..747d021 100644
--- a/index.html
+++ b/index.html
@@ -431,6 +431,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
-
+