Each team's roster is aggregated to per-category season totals, the outgoing players are subtracted and the incoming players added, and the post-trade totals are z-scored against the league pool. The verdict is the per-category delta between the post-trade and pre-trade z-scores, summed into one comparable number per side.
The categories are the standard nine: PTS, REB, AST, STL, BLK, 3PM, TO, FG%, FT%. Turnovers are the only category where fewer is better by default.
With no league linked, the players you give and get are each priced inside a full roster of league-average players, so shooting percentages move the way they would on a real team. An uneven trade charges the side receiving more players for the replacement-level player it drops to make room.
A synced league's own signed category weights outrank the default list: a category your league scores negatively is valued negatively, whatever the default says.
A weight of exactly zero is a punt, not a negative. A punted category is still shown with its raw movement, and it contributes nothing to the verdict.