Stage 17 (contour round 4a): quick fixes
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 8s
CI / integration (pull_request) Successful in 12s
CI / ui (pull_request) Successful in 27s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m6s

- #4 bag label: '{n} in the bag' / 'Bag is empty' (was 'Bag {n}')
- #6 allow a single trailing dot in display names (backend + UI regex + tests)
- #1 double-tap zooms toward the tapped cell, not the top-left
- #8 shuffle fires a short multi-pulse haptic
- #11 highlighted/flashing tiles darken their bottom edge too (shadow joins the flash)
- #13 toast slides up from the bottom and fades out
- #7 hide the logout button (kept wired behind `hidden`)
- #16 admin game seats: left-align numeric columns, clarify the 'Hints used' header
This commit is contained in:
Ilia Denisov
2026-06-06 14:08:40 +02:00
parent f6bffd1f57
commit b15fd30c4f
12 changed files with 61 additions and 32 deletions
+7 -2
View File
@@ -33,7 +33,7 @@
locale: Locale;
focus: { row: number; col: number } | null;
oncell: (row: number, col: number) => void;
ontogglezoom: () => void;
ontogglezoom: (row: number, col: number) => void;
} = $props();
const Z = 1.85;
@@ -65,7 +65,7 @@
function onTap(row: number, col: number) {
const now = Date.now();
if (now - lastTap < 300) {
ontogglezoom();
ontogglezoom(row, col); // zoom toward the double-tapped cell, not the top-left
lastTap = 0;
return;
}
@@ -172,6 +172,9 @@
}
.cell.hl {
background: var(--tile-recent);
/* The bottom edge goes darker than the highlighted fill (not lighter, as the plain
--tile-edge would), so the tile still reads as raised. */
box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.32);
}
.cell.flash {
/* Two flashes to draw the eye, then settle back to normal so it does not distract. */
@@ -181,9 +184,11 @@
0%,
100% {
background: var(--tile-bg);
box-shadow: inset 0 -2px 0 var(--tile-edge);
}
50% {
background: var(--tile-recent);
box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.32);
}
}
/* cqw fonts are sized against the fixed viewport, so labels stay a constant size as