THE SEASON, phases 1-4: the front door is the fixture, and the club remembers

The tournament is the canonical path, so the game finally says so. The splash's
primary button names the next cup fixture and enters the draw; the poster wall
moved one tap down and deals three named rooms (the season, the training, out of
competition) with the cup at the top. Two profile fields remember every attempt
— rounds ever reached per league, and the body that put you out — so a lost cup
is a line on the board instead of a null event, and the training court offers
that body first, marked. The promotion names what waits in the new league.

Overlays consolidated in the same pass: three modal drawers became one box with
a masthead, hairline-separated rows and a real footer button (any tap still
dismisses), and the run-end summary wears the same box — headline, xp, mark, and
the fixture with ENTER THE DRAW beside PLAY AGAIN. The cup's own exit is a
ceremony now: OUT IN THE QUARTER-FINAL, your best standing beside it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-31 11:14:25 +02:00
1 parent 063b01d2a5
commit 5c7521f867
10 files changed
+603 -204

No files matched your search

+36 -2
View File
@@ -237,6 +237,12 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
hierarchy is carried by colour rather than by art. */
.btn.big { padding: 13px 10px 11px; background: var(--red); border-color: #69201c; color: #f6e7dc;
font: 400 26px Bangers, cursive; letter-spacing: 2px; line-height: 1.15; }
/* THE FIXTURE BUTTON (THE SEASON): the shout stays the shout, and the fixture itself is the
quiet line under it — the same two-register rule the cards follow (Bangers announces, Silkscreen
informs). `b` is not bold here, it IS the announcement face. */
.btn.big b { display: block; font: inherit; }
.btn.big i { display: block; margin-top: 3px; font: 400 9px Silkscreen, monospace;
font-style: normal; letter-spacing: 0.5px; color: #f0cfc4; }
.two { display: flex; gap: 8px; }
.two .btn { margin-bottom: 0; }
.btn.sec i { display: block; margin-top: 4px; font: 400 9px Silkscreen, monospace;
@@ -413,11 +419,21 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
text-align: center; line-height: 1.35; }
#bossList i, #trainList i { font: 400 8px Silkscreen, monospace; color: var(--dim); font-style: normal;
letter-spacing: 1px; }
/* THE REVANCHE TILE (THE SEASON): the one that put you out of the cup, marked and standing
first. Red border and a red line, because it is the only tile on this screen with a reason. */
#trainList button.put { border-color: var(--red); }
#trainList button.put i { color: #e08a7c; }
/* the training picker is 18 rungs deep — the tile carries the HEAD (the same z_*head crop the
draw and the walk-on wear), which reads at a third of the boss portrait's height */
#trainList img { height: 44px; width: auto; display: block; image-rendering: pixelated; }
/* START is genuinely unreachable until the draw has landed — the wait IS the ceremony */
.btn[disabled] { opacity: 0.32; cursor: default; }
/* the fixture line under the new court: the same two registers the plaque uses — the name in
the league's own acid, what it costs you in the quiet face */
#prNext { margin: 12px 0 0; font: 400 10px Silkscreen, monospace; color: var(--acid);
letter-spacing: 1px; line-height: 1.6; }
#prNext u { display: block; margin-top: 3px; font-size: 9px; color: var(--dim);
text-decoration: none; letter-spacing: 0.5px; }
/* a row, not a stacked tile: three 3:2 tiles stacked fill a phone twice over, and the art still
reads at this size. -webkit-tap-highlight-color kills iOS's blue flash over the pixel art. */
/* MODE posters are pure BUTTONS, not selectors (Oliver: the remembered highlight made each one
@@ -439,6 +455,15 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
at cream-on-crowd was the report from the first live look */
#modeList i, #modeSub i { color: #fff; font-size: 10px; margin-bottom: 0;
text-shadow: 0 1px 0 #000, 1px 0 0 #000, -1px 0 0 #000, 0 -1px 0 #000, 0 0 7px #000; }
/* THE GROUP HEADINGS (THE SEASON): what the posters under them are FOR — one path up, a room to
practise in, a room where nothing counts. Deliberately quiet: the posters are the loud objects
on this screen, and a heading competing with them would just be a fourth poster. */
#modeList .mgroup { margin: 16px 0 7px; }
#modeList .mgroup:first-child { margin-top: 2px; }
#modeList .mgroup b { display: block; font: 400 12px Silkscreen, monospace; letter-spacing: 2px;
color: var(--acid); text-shadow: none; }
#modeList .mgroup i { display: block; margin: 3px 0 0; font: 400 9px Silkscreen, monospace;
font-style: normal; font-size: 9px; color: var(--dim); text-shadow: none; }
/* THE SECOND STEP (config.MENU) has its own SCREEN in the wizard: sub-mode cards are
full-height posters centred on their scene, and the difficulty chips are plain acid-outline
buttons stacked tall — art for EASY/MEDIUM/HARD would be forced, and the chip reads faster. */
@@ -632,7 +657,12 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
you can press before the sheets have landed is how you reach the stats screen with half
the zombies missing. Swapped by #splash.busy, see main.js. -->
<div id="boot"><s><i></i></s><u>LOADING</u></div>
<button class="btn big" id="mStart">PLAY MATCH</button>
<!-- THE FRONT DOOR IS THE FIXTURE (2026-08-31, THE SEASON). The primary button used to say
PLAY MATCH and open a wall of posters, which asked the player a question the game
already knows the answer to. It names the next cup fixture now and enters the draw;
everything else lives one tap down, behind OTHER GAMES. -->
<button class="btn big" id="mStart"><b id="msTitle">THE CUP</b><i id="msLine"></i></button>
<button class="btn sec" id="mOther">OTHER GAMES<i>CLIMB · TRAINING · GORE · A FRIEND</i></button>
<div class="two">
<button class="btn sec" id="mStats">STATS<i id="mKills">0 KILLS</i></button>
<button class="btn sec" id="mRanks">RANKINGS<i>WORLD BOARD</i></button>
@@ -730,6 +760,10 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
<p id="prLeague"></p>
<img id="prCourt" alt="">
<p id="prCourtName"></p>
<!-- THE SEASON'S SECOND BEAT (2026-08-31): the promotion is also the season opener, so it
names the fixture waiting in the new league rather than ending on a court tile. No
extra screen — a tap between the player and the court is what we were avoiding. -->
<p id="prNext"></p>
</div>
<div class="foot bare">
<button class="btn big" id="prGo">WALK ON</button>
@@ -871,6 +905,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
</div>
</div>
</div>
<script type="module" src="src/main.js?v=340"></script>
<script type="module" src="src/main.js?v=341"></script>
</body>
</html>