diff --git a/PROJECT.md b/PROJECT.md
index c18a8ad..abcef37 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -681,9 +681,15 @@ What that cost each screen:
**The walk-on's two levels are ONE face at ONE size** (Oliver): a comparison drawn at two sizes is
a headline with a footnote. Only the colour differs, and only where it means something.
-Deliberately NOT taken from the handoff: nothing. Two small deviations — the meters' legend reads
-`PACE · BOUNCE` (the order the bars are actually drawn in), and the `18 RUNGS` chip sits under LAST
-rather than beside it on the one poster that can wear both.
+Deliberately NOT taken from the handoff: **the wall's corner chips**. Both went the same evening
+(Oliver: "sinnlos") — LAST remembered what you played last time, which a gallery of six posters does
+not need to do for you, and 18 RUNGS was a number about a mode on the screen where you choose
+BETWEEN modes. The LAST chip survives on the DIFFICULTY chips, where it is the only thing that says
+what you last set. One other deviation: the meters' legend reads `PACE · BOUNCE`, the order the bars
+are actually drawn in.
+
+With the chips went the last caller of the second step's poster branch (`buildSub`'s `t.kids` loop):
+no MENU row has fanned out into sub-posters since the cup left that pocket, so it is gone too.
## THE SEASON — the tournament is the story (2026-08-31, AGREED in discussion; PHASES 1-4 BUILT ON STAGING — see the log above)
diff --git a/index.html b/index.html
index 5ed8b61..257b0eb 100644
--- a/index.html
+++ b/index.html
@@ -549,10 +549,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
#modeList .mgroup.hero .cb b { font: 400 32px/0.95 Bangers, cursive; letter-spacing: 1px; }
/* ...and the hero's second line is the fixture, the only strap left on the wall */
#modeList .mgroup.hero .cb i { color: #f0cfc4; font-size: 10px; margin-top: 3px; }
- /* a fact that changes what a mode IS, not a description of it. Top right like LAST, and UNDER
- it on the one poster that could wear both (the chip is appended after LAST in main.banner) */
- #modeList .last.chip { top: 7px; }
- #modeList .last + .last.chip { top: 30px; }
/* text-align rides down from the card, which centres everything on these screens — the section
header is a header, and headers on this screen are left-aligned (the .hdr title, the posters'
own captions) */
diff --git a/src/main.js b/src/main.js
index 014535e..096a2c3 100644
--- a/src/main.js
+++ b/src/main.js
@@ -124,9 +124,11 @@ const modeSub = document.getElementById('modeSub');
// checkbox and a button combined"). Every poster is full-bright and equal — all of them are live
// answers — and the only memory shown is the LAST tag, an indicator rather than a selection. The
// select-and-confirm border lives solely on the final screen, where SERVE UP actually confirms.
-// `opts.line` is the ONE second line the wall still carries (the fixture, under the hero's name);
-// `opts.chip` is a fact that changes what a mode IS rather than describing it (18 RUNGS).
-const banner = (card, cls, last, opts = {}) => {
+// `opts.line` is the ONE second line the wall still carries: the fixture, under the hero's name.
+// The corner chips are gone (2026-08-31, Oliver: "sinnlos") — LAST told you what you played last
+// time, which the wall does not need to remember for you, and 18 RUNGS was a number about a mode
+// on a screen for choosing between modes.
+const banner = (card, cls, opts = {}) => {
const b = document.createElement('button');
b.className = cls;
// JUST THE ART. The scrim used to ride in this background stack as a hard linear-gradient; the
@@ -137,8 +139,6 @@ const banner = (card, cls, last, opts = {}) => {
// under every name on the wall — sixty words to make one choice. The rules live in the modal
// that opens with the mode; MODES.sub is still their source, it just no longer prints here.
b.innerHTML = `${card.name}${opts.line ? `${opts.line}` : ''}`
- + (last ? 'LAST' : '')
- + (opts.chip ? `${opts.chip}` : '')
// the standing answer to "how do I advance", worn by the poster it is true of (config MODES)
+ (card.tag ? `${card.tag}` : '');
return b;
@@ -167,14 +167,6 @@ function buildSub(top) {
});
modeSub.appendChild(b);
});
- else if (t.kids) for (const id of t.kids) {
- const b = banner(modeOf(id), 'mode', id === pickedMode);
- b.addEventListener('click', () => {
- pickMode(id);
- go('setup');
- });
- modeSub.appendChild(b);
- }
}
// the top posters are rebuilt on every visit so the LAST tag follows what was actually played
function buildTops() {
@@ -193,11 +185,9 @@ function buildTops() {
continue;
}
const fx = cupFixture(profile.prof.lg, profile.prof.ch);
- const b = banner(t.mode ? modeOf(t.mode) : t, 'mode', topOf(pickedMode) === t,
- // the fixture is the hero and carries the only second line on the wall; the training court
- // carries the one fact that is not a description — how much of the club it holds
- { line: t.mode === 'cup' ? 'LEAGUE ' + fx.lg + ' · ' + fx.line : null,
- chip: t.mode === 'train' ? LADDER + ' RUNGS' : null });
+ // the fixture is the hero and carries the only second line on the wall
+ const b = banner(t.mode ? modeOf(t.mode) : t, 'mode',
+ { line: t.mode === 'cup' ? 'LEAGUE ' + fx.lg + ' · ' + fx.line : null });
b.addEventListener('click', () => {
// the netplay poster opens THE LOBBY and never touches pickedMode — it is not a run mode
// the stats screen or the summary could name, and the lobby starts the game itself