900k reads from 200 visitors is roughly 4,500 reads each, which means you are reading the whole collection repeatedly rather than once.
Two things cause this together in v0 output. First, onSnapshot on the entire trails collection instead of getDocs, so every write by anyone re-delivers every document to every open tab. Second, the subscription sits in a component body or an effect without a dependency array, so each render tears down and re-establishes it, and a fresh listener bills a full read of the result set.
For a list that changes a few times a day, use getDocs with a limit(20) and paginate with startAfter. Keep onSnapshot for the one document a user is actually editing.