Task
📝 **Task:** Implement `is_321_compliant(backups, primary_site)` returning `(ok: bool, reasons: list[str])`. Reasons come from `{'need_3_copies', 'need_2_media', 'need_off_site'}`, sorted alphabetically.
📋 Implement the function above. Tests run automatically.
💡 **Hint:** Re-read the theory if you get stuck.