<td valign="middle">
worked flawlessly.Of course maybe there is some good explanation... I certainly never contributed to the CSS spec.
The flex-box approach is the most intuitive in my opinion. The flex display-type basically means you want to distribute the area of a box among its immediate child elements, and control how the children and aligned relative to the container and each other. Centering is naturally part of this.
Using grid is IMHO less intuitive, since a grid with a single cell seem just as much a hack as a table with a single cell.
While it's a ton of markup, tables are build upon a few easy-to-remember concepts and you can do anything (including vertically align without googling!). I'm still constantly looking up flex and grid rules.
That said, I did move on.
foo { display: table-cell; vertical-align: middle; }
And it has also worked a lot longer than the flex-approach. But now when flex is available it seem the more appropriate tool for the job.