So, if any of you set flex-grow on any of your elements and were puzzled as to why it wasn’t working outside of the editor, I have an explanation. When you call Instantiate on your UXML asset and add it to the root, Unity wraps your entire UXML in another VisualElement and hands that to you. That VisualElement wrapper does not have flex-grow on it, so Unity happily renders the wrapper container with your stuff in it using the minimum required space and leaves the rest of the window space underneath your markup as empty space. Here’s a thread that discusses it: https://forum.unity.com/threads/visualelements-wont-grow-to-fill-space-for-some-reason.759725/#post-5101916
And the solution, which I have not tried implementing yet, seems to be to loop through the children of the wrapper that you get from Instantiate() and manually add those elements to your root, bypassing the wrapper altogether, rather than adding the VisualElement returned from Instantiate directly.