diff --git a/PROJECT.md b/PROJECT.md
index cc3bbd0..3b5a965 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -524,10 +524,23 @@ depth only and holding your own artillery lane is the point.
**THE AIM IS DRAWN WHILE THE THUMB IS STILL MOVING.** Oliver asked to *"visualize the strength of my
flick at flick-time"*, and he was asking for the half the placement ring cannot give: the ring is a
RECEIPT, it arrives with the ball already gone. `G.swipe` (set by input.js during the drag, cleared
-on release) draws the same target ring live, plus a RAY from the player's feet — the ring alone sits
-deep in perspective and 300 ms is not long enough to go looking for it. Cream while the ask is safe,
-`UI.hot` once the sway crosses that derived threshold: the colour is the answer to "was I too hard".
-Only inside the window where a release would still BE a flick (`FLICK_MS`/`TUNE.flickMin`, the same
+on release) marks where the ball is being ASKED to land.
+
+**It is a cloud, not a diagram.** The first cut was a ring on a ray from the player's feet and it
+was rejected on sight (*"pretty bare bones... the line from the player to the indicator must go
+away, it is distracting"*): a line drawn across the court is a HUD element laid over the game.
+What is there now is a soft stain on the ground in the same procedural register as the dust and the
+blood — it GROWS with the length of the swipe and it WARMS as that ask approaches the width no
+timing can keep in. Three things were learned making it read, all of them the hard way:
+* **metres, not pixels** — sized off `p.s` so perspective shrinks it with distance. A pixel radius
+ looked fine at the baseline and was an 8-px smudge at the far corner, which is where it lives.
+* **a stain, not a glow** — `globalCompositeOperation = 'lighter'` turned the red end YELLOW over
+ green grass, and the hue is the entire message.
+* **the ramp is pale lime -> gold -> red, not green -> red** — green on green is invisible, so the
+ obvious ramp showed nothing across the whole safe half of its range. The cool end carries its
+ contrast in LIGHTNESS, which is what makes it read on grass, clay and slab alike.
+The threshold is not a flip: the colour is already gold before you reach it, so "too hard" is
+something you watch coming. Only inside the window where a release would still BE a flick (`FLICK_MS`/`TUNE.flickMin`, the same
gate `endTouch` uses) — past that the gesture is a run and a target hanging off it would be a lie.
Rally modes only (`rallyFeel`); gore's flick free-aims at a body, not at a lane. The placement ring
turns `UI.bad` when the shot really is out, so the two rings together ARE the lesson: what you asked
diff --git a/index.html b/index.html
index dd97f0f..0d22d60 100644
--- a/index.html
+++ b/index.html
@@ -659,6 +659,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
-
+