Prevent duplicate screenshot runs by introducing an ownership hook token and reusing active workflow runs. The workflow input now includes domainId and registers an ownership hook (getScreenshotWorkflowToken) to detect conflicts. API route: check for an active hook before starting, return no-store cache headers, and map workflow errors (including cancelled vs unavailable runs) and rate limits more clearly. Client: rewrite useScreenshot to a react-query based implementation with robust parsing, polling/backoff, reloadable image UI and placeholders. Added tests for the API and component behavior.