Well played Ela.
You win because your opponents execution ("shuffle control") is meh.
It's not always easy to spot this from your side of the table, but let's take a closer look at his shuffles:
I respect his opening plan, but it doesn't work out at all.
On turn 4, he draws copper, potion, 2x estate, Warehouse.
One more copper and he could have just not played the warehouse, but now he has to.
As a result, his new scrying pool and the potion miss the shuffle and he is already half a turn behind.
This is really bad luck for your opponent, but it would not happen with your opening buys.
On turn 6, he draws 2x copper, warehouse, herald, estate.
He now (correctly) plays the warehouse first, to keep his options open.
He draws copper-potion-estate, and should now discard 2xestate and herald, buy scrying pool.
In stead, he plays the herald (triggers shuffle) and then buys a scrying pool.
This is a huge mistake that costs him more then one full turn.
On turn 8, he is back to just bad luck again having a terrible draw.
From here on it snowballs... Your Mint buy is nice and so is the stonemason.
With both herald and scrying pool around, the action density is really important.
He may have the better trasher but it's too little too late by then.