The embers actually show: off the shield's top edge, not across it

They were running the whole time (0.85 opacity, measured) — they were just
flying ACROSS the artwork, where a 3px gold speck disappears into a pixel
shield. They lift off the top edge into the dark above it now, seven per badge
on a shorter delay window: spread over 2.6s the shield stood empty half the
time, which is what "ich sehe kein glimmen" was looking at.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-31 15:54:31 +02:00
1 parent 80eb60d181
commit 87833db095
2 files changed
+14 -10

No files matched your search

+6 -4
View File
@@ -602,10 +602,12 @@ const countUp = (write, target, dur = 700) => {
// leichtes feuer"). CSS keyframes, not a loop: the menu deliberately parks the game loop, and six
// two-pixel sparks per badge have no business waking it. The randomness is baked into each spark's
// own delay, duration and lane at build time, so no two shields burn in step.
const embers = won => !won ? '' : Array.from({ length: 5 }, () =>
`<em style="left:${(14 + Math.random() * 62).toFixed(0)}%;` +
`animation-delay:${(Math.random() * 2.6).toFixed(2)}s;` +
`animation-duration:${(1.9 + Math.random() * 1.5).toFixed(2)}s"></em>`).join('');
const embers = won => !won ? '' : Array.from({ length: 7 }, () =>
`<em style="left:${(16 + Math.random() * 58).toFixed(0)}%;` +
// a SHORT delay window: spread over 2.6s the shield was empty half the time, which is why the
// first cut read as nothing happening at all
`animation-delay:${(Math.random() * 1.7).toFixed(2)}s;` +
`animation-duration:${(1.7 + Math.random() * 1.1).toFixed(2)}s"></em>`).join('');
function buildCard() {
for (const t of cardTimers) clearTimeout(t);