The whites take a wash, the friend brings their own colours, and the menu shows the man

Three things off the back of the picker.

THE LIVE PLAYER on the setup screen is the real sprite through the real tint, not
a mock-up of the pick — so the menu cannot promise a colour the court will not
keep. It redraws on every tap of a tour, a kit or a skin.

THE WOMEN'S TOUR IS NO LONGER SAT OUT. Her set is drawn head to toe in whites, so
there was no hue to rotate — the answer is not a dye but a WASH: the pick laid
over her whites at a low saturation with the lightness kept, which is how you dye
a white kit in life and gives rose, powder blue, mint, lilac. Her hair and skin
fall out of it on lightness alone, which is exactly what a dye could not manage.

THE FRIEND ACROSS THE NET now wears what they picked on their own phone. Their
look crosses on pairing, and since the opponent art is red rather than blue the
kit rides its own hue arc — safe there for the one reason it would not be on the
player's own sheets: the opponent sprites carry no drawn blood. An older build
simply never sends it and the opponent draws as before; the match still plays.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-15 15:23:34 +02:00
1 parent 1daa3e9d6a
commit b5838b2b24
6 files changed
+194 -64

No files matched your search

+9 -3
View File
@@ -230,9 +230,12 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
.swrow button { flex: 1; aspect-ratio: 1; min-width: 0; padding: 0; border: 2px solid var(--line);
cursor: pointer; -webkit-tap-highlight-color: transparent; }
.swrow button.on { border-color: var(--acid); box-shadow: inset 0 0 0 2px var(--ink); }
/* a tour played in whites has nothing to dye — the row stays visible so the screen does not jump,
but it reads as unavailable and the header says why */
.swrow.dead { opacity: 0.32; pointer-events: none; filter: saturate(0.25); }
/* The live player, sitting between the tour tiles and the colours it answers to. `position: static`
is not decoration: the bare `canvas` rule above is the COURT — fixed, full-bleed, 100dvh — and it
catches any canvas in the document, so this one flew to the top-left corner of the screen until
it was told otherwise. Every geometry property that rule sets has to be undone here. */
#look { position: static; display: block; margin: 12px auto 0;
width: auto; height: 150px; touch-action: auto; image-rendering: pixelated; }
/* THE BOSS PICKER (back room). Two columns of portraits, because you pick a boss by looking at
him — the tile is mostly art. Same plate as the tour tiles above; the grid is what makes ten
of them fit on a phone. */
@@ -466,6 +469,9 @@ if (location.hostname !== 'splatter-tennis.wuwi.one') {
<div class="hdr"><button class="chev" id="sBack">&lsaquo;</button><h2>MATCH SETUP</h2></div>
<h3>01 · PLAYER</h3>
<div id="tours"></div>
<!-- THE LIVE PLAYER. Not an illustration of the pick — the actual sprite the court will draw,
through the actual tint, so the menu can never promise a colour the match does not keep. -->
<canvas id="look" width="112" height="150"></canvas>
<!-- KIT and SKIN. Both rows are built in main.js from config.KITS/SKINS, so a colour added
there needs no markup — the same rule the tour tiles and the court rows follow. -->
<h3>02 · KIT<span id="kitName"></span></h3>