This is the routine I use for every move across the Arbitrum Bridge. It is for someone who has bridged once or twice and wants the order that does not stall.
The first attempt goes wrong by treating the bridge as one action. For a token, it is two: an approval, then the deposit. The approval only gives permission. The deposit does the move. I set the approval to 1.5x the amount I expect to send, so the same approval covers the real transfer plus a retry without another signature.
Then I send a test amount first: 0.05 ETH. It is a size I can lose. The test goes through the full bridge, including the same wait and the same confirmation. Only after it is visible on the other side do I send the real amount. That one habit removes most failed crossings because it removes the urgency.
The second habit is the wait. Wait for the approval to confirm, then wait for the deposit hash to appear on the other side. Most pauses are not the problem. They are the chain doing what a bridge needs it to do.
If I want to resend after twenty minutes, I do the only check that helps: read the Arbitrum Bridge transaction, not the wallet. The pending state is not an error. The bridge confirms on its own timeline; the work is the setup before you click. Once the test is through, the move is done. My part ends at the confirmation line.
The trip back to Ethereum gets the same discipline in reverse. Same approval, same test amount, same wait. I keep the destination receipt from the first small transfer and use it to place the rest. That is the whole setup: one sequence, one test, one confirmation.