Cached rendered widget height in terminal rows, or None if unmeasured.
Measured after layout by _measure_message_heights in app.py and stored
via set_height_hint. Consumed by estimate_height/range_height to size
the transcript spacers and to keep the scroll anchor stable across
hydrate-above/below. When None (not yet measured), estimate_height falls
back to DEFAULT_HEIGHT_HINT. Always >= MIN_HEIGHT_HINT once set.