From 115c6089be18f4a3b176ee01beec7678eda5d393 Mon Sep 17 00:00:00 2001 From: Oliver Rieger Date: Mon, 31 Aug 2026 16:06:15 +0200 Subject: [PATCH] BODY COUNT: dashes for never, names on the rack, and one seam too many MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A record never set reads as a dash — "BEST GORE RUN 0" looks like a bad run when what it means is that there has not been one. The weapon tiles name their weapon: six unlabelled silhouettes was a guessing game about which one is the flamer. The doubled border was the row rule firing inside the grid: `.fig + .fig` gave cell three a left border hard against the container's own. It is scoped to single-row figure strips now, and the two-up grid draws its own seams. Less padding inside the box, air above it. Co-Authored-By: Claude Fable 5 --- index.html | 12 ++++++++---- src/stats.js | 16 +++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index a553702..02979e2 100644 --- a/index.html +++ b/index.html @@ -265,11 +265,13 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat .figs { display: flex; border: 2px solid var(--line); background: var(--panel); } /* four numbers read better two-up than four-across on a phone — at four the labels wrap and the row becomes a wall of two-line captions */ - .figs.pair { display: grid; grid-template-columns: 1fr 1fr; } + .figs.pair { display: grid; grid-template-columns: 1fr 1fr; margin-top: 14px; } .figs.pair .fig:nth-child(2n) { border-left: 2px solid var(--line); } .figs.pair .fig:nth-child(n+3) { border-top: 2px solid var(--line); } - .fig { flex: 1; min-width: 0; padding: 11px 8px 12px; text-align: center; } - .fig + .fig { border-left: 2px solid var(--line); } + .fig { flex: 1; min-width: 0; padding: 8px 8px 9px; text-align: center; } + /* ...only in a ROW. In the two-up grid the same rule gave cell 3 a left border hard against the + container's own — the doubled line Oliver spotted; the grid draws its own seams below. */ + .figs:not(.pair) .fig + .fig { border-left: 2px solid var(--line); } /* THE NUMBER NEVER MOVES (2026-08-31, Oliver: "manchmal sind die überschriften ein- manchmal zweizeilig, das drückt die zahl runter"). The label gets two lines of room whether it needs them or not, so every figure in a row sits on the same baseline. */ @@ -732,6 +734,8 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat .wtile img { width: 34px; height: 34px; object-fit: contain; display: block; margin: 0 auto 2px; image-rendering: pixelated; } .wtile b { display: block; font: 400 11px Silkscreen, monospace; color: var(--acid); } + .wtile i { display: block; margin-top: 3px; font: 400 7px/1.3 Silkscreen, monospace; + font-style: normal; color: var(--dim); letter-spacing: 0.5px; } .none { margin: 4px 0 0; font: 400 9px Silkscreen, monospace; color: var(--dim); letter-spacing: 1px; text-align: left; } #stFoot { display: flex; justify-content: space-between; align-items: baseline; @@ -1078,6 +1082,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat - + diff --git a/src/stats.js b/src/stats.js index ef96c8c..78a17a5 100644 --- a/src/stats.js +++ b/src/stats.js @@ -297,10 +297,13 @@ export function drawStats(period, v) { const $ = id => document.getElementById(id); // every body you have put down, in any mode — the climb's own record stands beside it, so it // does not need adding twice (its opponents are counted in the same kill tally) - const figs = [['BODIES FELLED', n(all.kills)], - ['BEST GORE RUN', n(gore.best)], - ['DEEPEST CLIMB', n(match.longest)], - ['RUNS', n(all.matches)]]; + // a record never set reads as a DASH, not a zero: "BEST GORE RUN 0" looks like a bad run, when + // what it means is that there has not been one yet + const num = v => v > 0 ? n(v) : '—'; + const figs = [['BODIES FELLED', num(all.kills)], + ['BEST GORE RUN', num(gore.best)], + ['DEEPEST CLIMB', num(match.longest)], + ['RUNS', num(all.matches)]]; $('stFigs').innerHTML = figs.map(([k, val]) => `
${k}${val}
`).join(''); // sorted by count, and only bodies you have actually met — an empty roster of everything would @@ -308,8 +311,11 @@ export function drawStats(period, v) { const rows = Object.entries(all.z).filter(([, c]) => c > 0).sort((a, b) => b[1] - a[1]); roster($('stZ'), rows, v, 'NOTHING YET. GO AND EARN A ROW.'); const ws = Object.entries(all.w).filter(([id, c]) => c > 0 && wIcon(id)).sort((a, b) => b[1] - a[1]); + // ...and a tile NAMES its weapon: six unlabelled icons is a guessing game about which silhouette + // is the flamer and which is the rocket $('stW').innerHTML = ws.length ? ws.map(([id, c]) => - `
${n(c)}
`).join('') + `
${n(c)}` + + `${(WEAPONS[id] && WEAPONS[id].label) || id.toUpperCase()}
`).join('') : '

NO WEAPONS FIRED.

'; }