The old _fit_to_content was width-anchored with an asymmetric height clamp, so every portrait nav back-derived a smaller width and P>L>P loops progressively shrunk landscape. Replaced with a viewport-keyed compute (long_side + center), symmetric across aspect flips. The non-Hyprland branch now uses setGeometry instead of self.resize() to stop top-left drift.