I once spent an afternoon cutting a click handler from 80ms down to 18ms. Clean, fast, properly debounced. The INP score didn't move. The handler wasn't the problem. The browser couldn't even start the handler for 190ms after the click — a long task was running at exactly the wrong moment. All that optimization was irrelevant. INP splits an interaction into three phases. Most React developers know one of them. The three-phase model Every INP interaction goes through: Input delay — the time from when the user interacts to when the browser can start processing the event. This is blocked by whatever is already running on the main thread. Processing time — the time your event handlers actually execute. Presentation delay — the time from when handlers finish to when the browser renders the visual update. This is where React's reconciliation and paint happen. The total of these three is what INP measures for each interaction. The worst interaction in a session becomes the score.…