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