Why there is always a small gap between NavMesh Agent and NavMesh Surface in runtime?

I cannot make the NavMesh Agent sit right on the NavMesh Surface. There is always a small gap in runtime which make the Agent kind of float…

The NavMesh surface is just an approximation of the game world geometry. Small differences in height are expected to happen due to the size of the voxels used for rasterizing that geometry or due to intentional simplification.
One way to find the exact contact point on the ground surface would be to shoot a physics raycast downwards.

Does altering the “Base Offset” value of the NavMesh Agent not solve this problem for you?