Basically I'm designing a Shopify website for a client, we agreed to have them pay me in three installments and the site would be done in 21 days. With the last installment paid when the project is finished. However there is some content she hasn't provided yet (pictures) and may not have them for a little while. The deadline has passed and I don't mind that much, but I'm wondering if I should ask for the last installment (she's paid two already) since the deadline has passed.
If the text of the agreement is as you describe, then what we have here is a contract loophole.
Both of you agreed that the site will be complete in 21 days.
Both of you agreed that final payment will be made when the site is complete.
So you can ask for final payment, but be prepared for your client to say "but the site isn't finished yet."
It would have been preferable to include in the agreement that if the client is the reason the deadline is missed, the final payment will be paid on day 21.
This is all part of the process in learning how to structure and qualify agreements. The larger your projects get, the more useful it might be to consult an attorney.