const H = canvas.clientHeight;
          for (let i = state.words.length - 1; i >= 0; i--) {
            const w = state.words[i];
            w.y += (w.speed + state.level * 2) * (dt / 1000);
            if (w.y > H - 80) {
              state.words.splice(i, 1);
              state.lives -= 1;
              state.buffer = '';
              state.targetId = null;
              if (state.lives <= 0) { updateHUD(); gameOver(); return; }
            }
          }

          missFlashT = Math.max(0, missFlashT