diff --git a/PROJECT.md b/PROJECT.md
index b6f5e4d..33fbe4b 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -816,6 +816,43 @@ walking with no kills.
them back. The teacher steps in exactly when you demonstrably need it and out when you don't,
and `drillMark: 0` still kills them outright.
+**THIRTEENTH PASS — ZOMBIE TENNIS, and the drill steps aside.** Oliver on triage: *"i think the
+normal player does not grasp this"* — the lesson across four drill designs being that **every
+invented rule needs teaching, and the only rules that don't are the ones the scene already implies**.
+Brainstormed again; he picked the dark horse: real tennis against the dead. One game per opponent,
+blood only. *"i can live simple tapping and timing"* — the tap-and-timing scheme, not the slingshot.
+
+**MATCH TEST in the back room (`#match`).** Built ON TOP of the duel machinery, deliberately:
+`G.match` runs a PERMANENT interlude — which is already what makes serving tennis-like, hides the
+rack, quiets the spawn director and wakes `racketAI`. The one change is in `resolveInterlude`: a
+settled point feeds `matchPoint` instead of ending anything. ~90 lines in beats.js for a whole mode,
+because the deepest system in the repo (swings, volleys, lanes, the AI) was already built.
+
+- **The score IS the body**: a quarter of the pool per point won, floored at 1 — a love game walks
+ the racket zombie through every wound stage and the game point fells it (`explode` at the body).
+ The scoreboard and the corpse agree all the way down. `matchOppHp` 4 + 2 per opponent felled.
+- **Its points draw your blood**: `G.hp--`, eaten at zero, the ordinary channel. Four clean points
+ against you IS the run — `matchHeal` 2 per game won is how you last.
+- **Regicide inherited free**: smashing the ball into the body still wounds it, killing it outright
+ wins the game early (killZombie -> resolveInterlude('P') lands with the court empty; the game is
+ banked BY HAND there, since advancePoint never saw a game point).
+- **THE TIMING IS DRAWN** — his ask: *"what is the possible tap window what is the sweet spot"*.
+ Two cues riding the mechanics' own numbers so the picture cannot lie: the APPROACH RING (a ring
+ around the incoming ball that kisses a fixed inner ring exactly at `matchRingSweet` 2.7 m — the
+ centre of the tapped-points benchmark's window — gold inside `matchRingBand`), and the APEX BAND
+ (a guide beside the toss, gold across serveApexY ± the same 0.12 m keyPressed scores as perfect,
+ a white tick riding the live ball). Match-only for now; they would serve plain tennis and the
+ duel too if Oliver wants them there.
+- Verified by autopilot in the browser: 7 games in 90 simulated seconds, opponents 1..8, pools
+ 4/6/8/10, wounds tracking points exactly, heal capping at hpMax.
+- **One harness trap that cost a round**: startMatch queues TWO first-sight modals (EXHIBITION
+ MATCH, then the racket zombie's own) — and a dismiss during a modal's entrance (`m.in < 1`) is
+ swallowed BY DESIGN. A scripted playtest must clear `G.modal` AND `G.modalQ`, or the world is
+ frozen and sixty seconds of stepping measures nothing.
+
+**The drill stays in the back room beside it** — triage is a decent idea that failed the
+grasp-in-five-seconds test, and the match is now the lead candidate for the middle mode.
+
**Open, and every one of them is Oliver's call after he plays it:**
1. ~~**A ball that carries through the lane can complete two steps at once.**~~ Largely CLOSED by
the slice removal (seventh pass) — a cut ball picking its own next victim was the main way this
diff --git a/index.html b/index.html
index b2d001f..90dbbaa 100644
--- a/index.html
+++ b/index.html
@@ -374,6 +374,7 @@
+