WASD movement mostly working, but S jumps in the air?

Essentially, I have my WASD movement implemented based off of the camera angle and rotation.
Example of what I want to do:
Have it so if I press w, my player moves forward based on the camera’s rotation, not based upon the gameobject’s orientation.

I was able to do this as follows for all input movements except for ‘S’:

Rigidbody rb = GetComponent<Rigidbody>();
if(Input.GetKey(KeyCode.W))
        {
            target.transform.rotation = localPlayerCam.transform.rotation;
            rb.MovePosition(rb.position + target.transform.rotation * Vector3.forward * speed * Time.deltaTime);
        }

        if(Input.GetKey(KeyCode.S))
        {
            Quaternion temp = localPlayerCam.transform.rotation;
            //temp.SetLookRotation();
            //target.transform.rotation = localPlayerCam.transform.rotation;
            rb.MovePosition(rb.position + new Quaternion(localPlayerCam.transform.rotation.x, localPlayerCam.transform.rotation.y, 0, 0) * Vector3.back * speed * Time.deltaTime);
        }

        if(Input.GetKey(KeyCode.D))
        {
            target.transform.rotation = localPlayerCam.transform.rotation;
            rb.MovePosition(rb.position + target.transform.rotation * Vector3.right * speed * Time.deltaTime);
        }

        if(Input.GetKey(KeyCode.A))
        {
            target.transform.rotation = localPlayerCam.transform.rotation;
            rb.MovePosition(rb.position + target.transform.rotation * Vector3.left * speed * Time.deltaTime);
        }

As you can see, I was messing around with the S because it “jumps” into the air, but no other key press does. I was able to figure out that this was due to the angle of the camera (in which a quaternion is returned)…
Essentially, if my camera angle is pretty horizontal, it won’t jump at all, but when I have my camera oriented down at my player in a bird’s eye view fashion, pressing S causes the player to jump into the air (and move backward - which is partially what I want). So what I started to try and do was base it on an empty Gameobject’s rotation (which I have named as “target”)… I failed to realize that this still would give me a quaternion and the same problem would result. (I left my code as is so each line that updates target’s rotation to the camer’s rotation is redundant at the moment)…

I know keycode S should look something like this:
rb.MovePosition(rb.position + new Vector3(1,1,0)* Vector3.back * speed * Time.deltaTime);
This is not valid since i can’t multiply these vector 3’s together…

Is there any sort of way around this!??! All I really want to do is base my movement off of x and y, with a z value of 0. If some of this doesn’t make sense, please let me know and I’ll try to clarify.

Screenshot - c108b103ef8a403ce0b6494467eba4ab - Gyazo The “horizontal view”
Screenshot - 86b861dabbbc5006fc93e500762971df - Gyazo A slight “bird’s eye view” that causes the S press down to jump into the air.

Bump… Still having issues with this and I haven’t been able to find a work around! Does anyone have an idea on how to get wasd movement based on a 2D XY plane oriented facing the camera direction? Z axis doesn’t matter…