Answer the first question:
IntelliJ's development environments use the following color scheme:
- White - tracked files that have not changed since the last commit
- Blue - tracked files that have been modified since the last commit. Regardless of whether they were indexed or not.
- Green — Untracked files that have been indexed (git add). Including if they have changed since the moment of indexation.
- Red - untraceable files that have not been indexed.
- Gray - ignored files

As you can see, the development environment does not distinguish between two states:
- The file was indexed and did not change after that.
- The file has been indexed and changed after
These states are well distinguished in the console:
➜ git-coloring-example git:(master) ✗ git status -s M tracked-and-changed.py A untracked-and-indexed.py ?? .idea/ ?? untracked-and-not-indexed.py
The first character indicates the status of the file in the index, the second - in the workspace. Here we indexed the first file:
➜ git-coloring-example git:(master) ✗ git add tracked-and-changed.py ➜ git-coloring-example git:(master) ✗ git status -s M tracked-and-changed.py A untracked-and-indexed.py ?? .idea/ ?? untracked-and-not-indexed.py
And now we will change the second
➜ git-coloring-example git:(master) ✗ echo change > untracked-and-indexed.py ➜ git-coloring-example git:(master) ✗ git status -s M tracked-and-changed.py AM untracked-and-indexed.py ?? .idea/ ?? untracked-and-not-indexed.py