Is this team generator fair?
Yes. Every shuffle uses your browser's cryptographic random numbers (crypto.getRandomValues) and a Fisher-Yates shuffle, so every order of names is equally likely. Names are then dealt round the teams one at a time, so leftover people are spread one per team and sizes never differ by more than one.
Leaders marked with a * are dealt first, one per team. Keep-apart pairs are honoured by reshuffling until no pair shares a team. Nothing is weighted, and nothing about you is stored anywhere but this device.