To start with, if I’m not much mistaken, a TextNode is set up such that a z-coordinate of “0” corresponds to the baseline of the text–the line on which its letters rest, excluding any bits that hang down (such as the tail of a “g” or a “y”). Thus, when you set up your CardMaker’s frame to have a lowest extent of “0”, it starts at the baseline, rather than the bottom-most extent of the text.
Furthermore, I think that the height returned by “getHeight()” gives the total height of the text–including bits that hang down. And since the text has such bits, the total height is greater than the distance from its baseline to the top of the text.
As a result, your card ends up starting from the baseline, and rising up further than the top of the text.
Finally I found that text.get_left/get_right,get_bottom,get_top() give me the exact size of the textnode card and I will go with that. I tried with getTightBounds too but it gaves me the size of… something else .