/* ============================================================================ TURNSTILE - Cloudflare's bot check on the public forms ---------------------------------------------------------------------------- Rendered INSIDE a
: the widget injects a hidden `cf-turnstile-response` input into its container, so the token travels with the other fields and the route's action checks it with `verifyTurnstile` (~/lib/turnstile.server). The site key is read off the root loader. Without one the component renders nothing and the server skips the check, so an unconfigured deploy keeps working exactly as before. EXPLICIT RENDERING, NOT THE `cf-turnstile` CLASS Implicit rendering scans the DOM once, when api.js loads - a form reached by a client-side navigation would never get a widget. Rendering from an effect ties the widget to the component instead, and `remove` on unmount keeps Cloudflare's iframes from piling up across navigations. THE SCRIPT AND THE CSP api.js is appended from here, once per page, the first time a form mounts - so pages without a form never load it. The CSP (entry.server.tsx) admits it through 'strict-dynamic', because the bundle that appends it is nonced; the widget's iframe needs `frame-src https://challenges.cloudflare.com`. SCRIPTING OFF The check cannot run without JavaScript, so the forms that otherwise work as plain posts cannot pass it. The