{{-- reCAPTCHA v3: el script de Google y el listener que le pide el token. ⚠️ **Va en `@assets` y este archivo se incluye desde las 8 blades que lo usan** — NO desde un layout. Antes vivía en tres layouts (`guest/general`, `guest/preview-admin` y `purchase-and-sale/general-form-tickets`) con un `@once` que no servía de nada: el `@once` se evalúa en el layout, que se renderiza siempre, así que el script salía en TODO el sitio guest. Medido: 9 de 12 páginas públicas lo cargaban sin tener un solo formulario que lo usara. ⚠️ **El `@assets` tiene que vivir en ESTE archivo, no copiado en las 8 blades.** Livewire deduplica por `crc32()` de la ruta del archivo que compila la directiva (`SupportScriptsAndAssets::getUniqueBladeCompileTimeKey()`), así que 8 blades serían 8 claves distintas y el script se cargaría 8 veces en una página con varios formularios. Un solo archivo incluido ocho veces = una sola clave = una sola carga. ⚠️ **Y tiene que ser `@assets`, no `@push`.** Cuatro de los ocho son pasos de wizard de Spatie (`RegisterStepForm`, `UsedMachineIntakeStepForm`, `MediaStepForm`, `PurchaseTicketStepForm`): el paso 2 y el 3 llegan POR AJAX, y un `@push` solo alcanza el render inicial — el botón se quedaría sin listener al avanzar de paso. `@assets` viaja en el payload de la respuesta. Quién lo incluye: los 4 formularios de contacto y los 4 pasos de wizard, todos con el trait `App\Livewire\Traits\Captcha\WithRecaptcha`. Si agregás un noveno, incluí este partial. --}} @assets @endassets