It works fine for me, but I’m not sure it will work for all users unless I add Time.deltaTime. When I do this though, it stops the player almost instantly.
Using Time.deltaTime here is not conceptually correct, but there is a deltaTime issue since you will slow down differently as the frame rate changes. A fix for this problem is to execute the code in FixedUpdate(). Since in FixedUpdate() the frame rate will be constant, it will work the same across all machines/platforms.
The problem when using deltaTime is that it is equal something like 0.02 for 50fps.
Meaning that your velocity is now vel * 0.02 and that is why you almost stop.
What you could do is either to place your deceleration in the FixedUpdate, keeping the input in the update and getting both method to communicate using a boolean.