component Captcha { props { provider = "self-hosted" siteKey = "" type = "alphanumeric" action = "form-submit" presentation = "visual" difficulty = "normal" disturbance = 50 imageStyle = "random" allowedStyles = "" excludedStyles = "" randomizeStyle = false locale = "en" size = "normal" color = "primary" class = "" id = "" name = "wrn-captcha-response" endpoint = "/__wrnexus/captcha/challenge" verifyEndpoint = "/__wrnexus/captcha/verify" responseField = "wrn-captcha-response" label = "Security verification" description = "Complete the challenge to continue." helpText = "" requiredMessage = "Please complete the security check." incorrectMessage = "That answer was not correct. Try again." expiredMessage = "This challenge expired. Load a new one." networkMessage = "The verification service is unavailable. Try again." autoLoad = true autoVerify = false showVerify = true showRefresh = true showAudio = true showListen = true showStatus = true disabled = false required = true resetOnError = true compact = false layout = "vertical" @event ready = function @event challenge = function @event input = function @event verify = function @event success = function @event failure = function @event expired = function @event refresh = function @event audioStart = function @event audioEnd = function @event error = function } view {

{label}

{description}

{helpText}

Protected by WRNexus CAPTCHA. Server-side verification is required.

} style { /* * Compact image challenges read as a single sequence: challenge, * secondary actions, answer, then verification. Flattening the footer * lets Listen/New challenge move directly beneath the image without * changing the DOM or the client runtime selectors. */ [data-wrn-captcha]:is([data-captcha-compact="true"], [data-captcha-size="compact"])[data-captcha-layout="horizontal"] { grid-template-columns: minmax(0, 1fr); } [data-wrn-captcha]:is([data-captcha-compact="true"], [data-captcha-size="compact"]) [data-captcha-response-panel] [data-captcha-footer] { display: contents; } [data-wrn-captcha]:is([data-captcha-compact="true"], [data-captcha-size="compact"]) [data-captcha-footer] > div:first-child { order: -1; justify-content: flex-start; } [data-wrn-captcha]:is([data-captcha-compact="true"], [data-captcha-size="compact"]) [data-captcha-verify] { align-self: flex-start; } } }