diff --git a/PROJECT.md b/PROJECT.md
index a9166c5..a64be1b 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -491,6 +491,18 @@ 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 walk-on gets its own face (2026-08-29, Oliver: "buried in a wall of text")
+
+The opponent intro carried six kinds of information as one modal line stack. It wears designated
+zones now (`render.drawFoeModal`, driven by `m.foe` from matchOpponent): the MASTHEAD (mugshot
+large on the left, the name in the announcement face, the slogan wrapped beneath — the shared
+wrapText, measured against the space beside the mug), THE MEASURE (a split .figs-language panel:
+ITS LEVEL boxed against YOURS, the number in the modal's hot red while the body outranks you and
+the pick green once it does not), the round/lesson strip, and the blinking tap. Same modal
+machinery throughout — entrance lanes (masthead from the right, the measure from the left), the
+frozen court, dismiss rules. m.title/m.body still carry the same words, so the suite and any
+legacy reader are untouched; the one icon-shaped assertion moved to m.foe.head.
+
## Session log: the look stops lying (2026-08-29, Oliver: "the man with a pink shirt")
After a reload with the women's tour picked, the live-player preview showed THE MAN from behind
diff --git a/index.html b/index.html
index fc07a76..ad355f5 100644
--- a/index.html
+++ b/index.html
@@ -871,6 +871,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
-
+