To resolve the issue of inconsistent email normalization, we need to ensure that the email is normalized (i.e., converted to lowercase and stripped of any leading/trailing whitespace) in both the `save_user` and `login` functions. Here's a patch plan:

1. Modify the `save_user` function in `store.py` to normalize the email before storing it.
2. Modify the `login` function in `routes.py` to normalize the email before retrieving the stored password hash.

Here are the modified functions:

`store.py`
```python
USERS = {}

def save_user(email, password_hash):
    # Normalize email before storing
    USERS[email.strip().lower()] = password_hash

def get_user(email):
    # No changes needed in this function
    return USERS.get(email)
```

`routes.py`
```python
def login(email, password_hash):
    # Normalize email before retrieving the stored password hash
    stored = get_user(email.strip().lower())
    return stored == password_hash
```

Regression test:

```python
import unittest
from your_app import store, routes

class TestLogin(unittest.TestCase):
    def test_login_with_normalized_email(self):
        store.save_user(" Test@example.com ", "hash123")
        self.assertTrue(routes.login(" Test@example.com ", "hash123"))
        self.assertFalse(routes.login("test@example.com", "wrong_hash"))

if __name__ == '__main__':
    unittest.main()
```

Replace `your_app` with the actual name of the FastAPI application module. This test case ensures that login works correctly with normalized emails and fails for unmatched credentials.