The wall drops its corner chips

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
for choosing between modes. Both gone. The difficulty screen keeps its LAST —
there it is the only thing saying what you last set.

The dead sub-poster branch in buildSub went with them: nothing has fanned out
into sub-posters since the cup left the ZOMBIE TENNIS pocket.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-31 15:17:19 +02:00
1 parent cb3074f99d
commit e09ce992e2
3 files changed
+17 -25

No files matched your search

+9 -3
View File
@@ -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)
-4
View File
@@ -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) */
+8 -18
View File
@@ -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 = `<span class="cb"><b>${card.name}</b>${opts.line ? `<i>${opts.line}</i>` : ''}</span>`
+ (last ? '<u class="last">LAST</u>' : '')
+ (opts.chip ? `<u class="last chip">${opts.chip}</u>` : '')
// the standing answer to "how do I advance", worn by the poster it is true of (config MODES)
+ (card.tag ? `<u class="way">${card.tag}</u>` : '');
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