The paywall now opens a prepared order sheet instead of the Apple Pay sheet. These are the states on staging, captured on an iPhone simulator at 402 points wide, plus two desktop captures as a UK visitor for the currency.
Tap through in order. States 2 to 4 open from the same button; the plan she picked decides the box.
Desktop Chrome through a UK geo header on the dev server. The order box redraws from the same table the charge uses, so regular minus saving is always the total.
| Moment | What happens |
|---|---|
| She reaches the price step | The page mints the Stripe session for the selected plan and mounts the wallet button and the card form into the sheet while it sits off-screen. Sessions are cached per plan. |
| She changes plan | The sheet re-prepares for that plan. Switching back reuses the cached session. |
| She taps the button | The sheet slides up fully drawn. No fetch on the tap. The wallet row is pre-selected when Stripe reports Apple Pay or Google Pay on the device; otherwise the card option is selected and the wallet row is hidden. |
| She taps Buy with Apple Pay | The native sheet opens; her confirmation runs the existing confirm path and lands on the welcome page. |
| She closes the Apple Pay sheet | The modal stays open with "Nothing was charged. Your plan starts only when you confirm in the payment sheet, or pay by card below." |
| She closes the modal | ×, backdrop, Escape or the back gesture. Elements stay mounted, so reopening is instant. |
wallet_cta_* events stop; checkout_method_selected and wallet_sheet_cancelled are new; checkout_screen_viewed now carries preloaded and method.