detail
DoughCalc v30 deployed (backed up first). USR369 confirmed using our in-app Print button specifically and still getting the raw-fields printout even after v29's beforeprint hook - ruled out wrong-trigger theory. Real cause: classic print-timing race - window.print() was called immediately after setting display:none, and on this mobile print pipeline the snapshot was grabbed before the browser actually repainted with the hidden elements gone. Fixed with a double requestAnimationFrame before calling window.print(), forcing a real paint of the hidden state first. All element IDs in PRINT_HIDE_IDS reconfirmed matching actual DOM ids.