{"id":21371,"date":"2026-10-13T11:26:33","date_gmt":"2026-10-13T09:26:33","guid":{"rendered":"https:\/\/friendlycaptcha.com\/?page_id=21371"},"modified":"2026-10-13T16:20:09","modified_gmt":"2026-10-13T14:20:09","slug":"captcha-test","status":"publish","type":"page","link":"https:\/\/friendlycaptcha.com\/pt\/captcha-test\/","title":{"rendered":"Formul\u00e1rio de amostra interativo com CAPTCHA teste"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"21371\" class=\"elementor elementor-21371\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc2c8bb e-flex e-con-boxed e-con e-parent\" data-id=\"fc2c8bb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-7564b7e e-con-full e-flex e-con e-child\" data-id=\"7564b7e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-592f85e elementor-widget elementor-widget-heading\" data-id=\"592f85e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Interactive Sample Form with CAPTCHA Demo<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0191fa elementor-widget elementor-widget-heading\" data-id=\"a0191fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><h1 class=\"captcha-demo__heading elementor-heading-title elementor-size-default\" style=\"padding-bottom: 1rem\">CAPTCHA Test<\/h1><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c1d6519 elementor-widget elementor-widget-text-editor\" data-id=\"c1d6519\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This CAPTCHA test will check the function of different CAPTCHA types in a real-world form. Select a CAPTCHA for a demo, complete the form and submit it \u2013 just like your users would. Try all four traditional CAPTCHAs, then submit the same message with invisible Friendly Captcha to compare how much time each check takes your users.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d69693d e-con-full e-flex e-con e-child\" data-id=\"d69693d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-20ed016 elementor-widget elementor-widget-html\" data-id=\"20ed016\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- CAPTCHA demo \u00b7 chooser. The CAPTCHA type buttons.\n     Needs the \"assets\" embed somewhere on the same page. -->\n<div class=\"captcha-demo\" data-cd-part=\"chooser\">\n  <div class=\"chooser\">\n    <div class=\"chooser-label\">Protect this form with<\/div>\n    <div class=\"chooser-opts\" role=\"group\" aria-label=\"CAPTCHA type\">\n      <div class=\"swopt-wrap\"><button class=\"swopt active\" data-mode=\"image\"><span class=\"swopt-label\">Image\n            CAPTCHA <em>reCAPTCHA<\/em><\/span><span class=\"done-dot\">\u25cf<\/span><\/button>\n        <div class=\"result-envelope\" aria-live=\"polite\"><span class=\"envelope-flap\"\n            aria-hidden=\"true\"><\/span><span class=\"envelope-body\"><\/span><\/div>\n      <\/div>\n      <div class=\"swopt-wrap\"><button class=\"swopt\" data-mode=\"hcaptcha\"><span class=\"swopt-label\">Labelling\n            CAPTCHA <em>hCaptcha<\/em><\/span><span class=\"done-dot\">\u25cf<\/span><\/button>\n        <div class=\"result-envelope\" aria-live=\"polite\"><span class=\"envelope-flap\"\n            aria-hidden=\"true\"><\/span><span class=\"envelope-body\"><\/span><\/div>\n      <\/div>\n      <div class=\"swopt-wrap\"><button class=\"swopt\" data-mode=\"text\"><span class=\"swopt-label\">Text CAPTCHA\n            <em>MTCaptcha<\/em><\/span><span class=\"done-dot\">\u25cf<\/span><\/button>\n        <div class=\"result-envelope\" aria-live=\"polite\"><span class=\"envelope-flap\"\n            aria-hidden=\"true\"><\/span><span class=\"envelope-body\"><\/span><\/div>\n      <\/div>\n      <div class=\"swopt-wrap\"><button class=\"swopt\" data-mode=\"slide\"><span class=\"swopt-label\">Slider CAPTCHA\n            <em>DataDome<\/em><\/span><span class=\"done-dot\">\u25cf<\/span><\/button>\n        <div class=\"result-envelope\" aria-live=\"polite\"><span class=\"envelope-flap\"\n            aria-hidden=\"true\"><\/span><span class=\"envelope-body\"><\/span><\/div>\n      <\/div>\n      <div class=\"swopt-wrap\"><button class=\"swopt frc\" data-mode=\"friendly\"><span class=\"swopt-label\">Invisible CAPTCHA\n            <em>Friendly Captcha<\/em><\/span><span class=\"done-dot\">\u25cf<\/span><\/button>\n        <div class=\"result-envelope\" aria-live=\"polite\"><span class=\"envelope-flap\"\n            aria-hidden=\"true\"><\/span><span class=\"envelope-body\"><\/span><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Text the script shows. It is translated with the rest of the page;\n       keep {placeholders} exactly as they are. -->\n  <div class=\"cd-strings\" hidden>\n    <span data-cd-text=\"label-image\">Image CAPTCHA<\/span>\n    <span data-cd-text=\"label-hcaptcha\">Labelling CAPTCHA<\/span>\n    <span data-cd-text=\"label-text\">Text CAPTCHA<\/span>\n    <span data-cd-text=\"label-slide\">Slider CAPTCHA<\/span>\n    <span data-cd-text=\"label-friendly\">Invisible CAPTCHA<\/span>\n    <span data-cd-text=\"chooser-value\">{seconds}s - {clicks}<\/span>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6be7758 elementor-widget elementor-widget-html\" data-id=\"6be7758\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- CAPTCHA demo \u00b7 form. The test form and its CAPTCHA challenges.\n     Needs the \"assets\" embed somewhere on the same page. -->\n<div class=\"captcha-demo\" data-cd-part=\"form\">\n  <div class=\"form-card\">\n    <div id=\"formView\">\n      <div class=\"captcha-demo__heading-widget elementor-element elementor-element-07680dd elementor-widget elementor-widget-heading\"><div class=\"elementor-widget-container\"><h2 class=\"captcha-demo__heading elementor-heading-title elementor-size-default\">Try it live<\/h2><\/div><\/div>\n      <p class=\"sub\" id=\"formSub\">Solve the image CAPTCHA below.<\/p>\n\n      <form id=\"testForm\" novalidate>\n        <div class=\"field\">\n          <label for=\"message\">Test Message<\/label>\n          <textarea id=\"message\" placeholder=\"Anything you like.\"><\/textarea>\n        <\/div>\n\n        <div class=\"chal-box\" id=\"chalBox\">\n          <div class=\"chal-head\">\n            <span class=\"chal-title\" id=\"chalTitle\">Select all images with traffic lights<\/span>\n            <span class=\"chal-provider\" id=\"chalProvider\">as used by reCAPTCHA and hCaptcha<\/span>\n          <\/div>\n          <div class=\"chal-mount\" id=\"chalMount\"><\/div>\n          <div class=\"status\" id=\"chalStatus\"><\/div>\n        <\/div>\n\n        <div class=\"cap-box\" id=\"capBox\" style=\"display:none\">\n          <span class=\"cap-dots\">\u2022\u2022\u2022<\/span>\n          <div class=\"cap-row\">\n            <button class=\"cap-check\" aria-label=\"Verify that you are human\">\n              <svg viewBox=\"0 0 24 24\">\n                <path d=\"M4 13l5 5L20 6\" \/>\n              <\/svg>\n            <\/button>\n            <span class=\"cap-label\" id=\"capLabel\">I am human<\/span>\n          <\/div>\n          <div class=\"cap-progress\" id=\"capProgress\" style=\"display:none\"><i><\/i><\/div>\n          <span class=\"cap-brand plain\" id=\"capBrand\">Friendly Captcha \u00b7 simulation<\/span>\n        <\/div>\n\n        <!-- the real Friendly Captcha widget -->\n        <div id=\"frcReal\" style=\"display:none;margin-bottom:22px\">\n          <div id=\"frcMount\" class=\"frc-captcha\"><\/div>\n        <\/div>\n\n      <\/form>\n    <\/div>\n\n    <div class=\"sent\" id=\"sentView\">\n      <div class=\"mark\"><svg viewBox=\"0 0 24 24\">\n          <path d=\"M4 13l5 5L20 6\" \/>\n        <\/svg><\/div>\n      <div class=\"captcha-demo__heading-widget elementor-widget-heading\"><div class=\"elementor-widget-container\"><h3 class=\"captcha-demo__heading elementor-heading-title elementor-size-default\">CAPTCHA test complete<\/h3><\/div><\/div>\n      <p class=\"cost\" id=\"sentCost\"><\/p>\n      <div class=\"again\">\n        <button class=\"btn\" id=\"againBtn\"><\/button>\n        <button class=\"btn secondary small\" id=\"resetBtn\">Back to the form<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Text the script shows. It is translated with the rest of the page;\n       keep {placeholders} exactly as they are. -->\n  <div class=\"cd-strings\" hidden>\n    <span data-cd-text=\"sub-image\">Solve the image CAPTCHA below.<\/span>\n    <span data-cd-text=\"sub-hcaptcha\">Solve the labelling CAPTCHA below.<\/span>\n    <span data-cd-text=\"sub-text\">Solve the text CAPTCHA below.<\/span>\n    <span data-cd-text=\"sub-slide\">Solve the slider CAPTCHA below.<\/span>\n    <span data-cd-text=\"sub-friendly\">Friendly Captcha is verifying you in the background. There is nothing to solve.<\/span>\n    <span data-cd-text=\"title-image\">Select all images with crosswalks<\/span>\n    <span data-cd-text=\"title-hcaptcha\">Click each image containing a chicken on a tree<\/span>\n    <span data-cd-text=\"title-text\">Type the characters you see<\/span>\n    <span data-cd-text=\"title-slide\">Slide the piece into place<\/span>\n    <span data-cd-text=\"provider-image\">as used by reCAPTCHA v2<\/span>\n    <span data-cd-text=\"provider-hcaptcha\">as used by hCaptcha<\/span>\n    <span data-cd-text=\"provider-text\">as used by MTCaptcha<\/span>\n    <span data-cd-text=\"provider-slide\">as used by DataDome<\/span>\n    <span data-cd-text=\"cap-human\">I am human<\/span>\n    <span data-cd-text=\"cap-verifying\">Verifying\u2026<\/span>\n    <span data-cd-text=\"cap-brand\">Friendly Captcha<\/span>\n    <span data-cd-text=\"sent-image\">The image CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.<\/span>\n    <span data-cd-text=\"sent-hcaptcha\">The labelling CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.<\/span>\n    <span data-cd-text=\"sent-text\">The text CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.<\/span>\n    <span data-cd-text=\"sent-slide\">The slider CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.<\/span>\n    <span data-cd-text=\"sent-friendly\">Friendly Captcha verified you in the background in <b>{seconds}<\/b>, with <b>no extra clicks<\/b>.<\/span>\n    <span data-cd-text=\"second-one\">{n} second<\/span>\n    <span data-cd-text=\"second-other\">{n} seconds<\/span>\n    <span data-cd-text=\"click-one\">{n} click<\/span>\n    <span data-cd-text=\"click-other\">{n} clicks<\/span>\n    <span data-cd-text=\"try-image\">Try an image CAPTCHA<\/span>\n    <span data-cd-text=\"try-hcaptcha\">Try a labelling CAPTCHA<\/span>\n    <span data-cd-text=\"try-text\">Try a text CAPTCHA<\/span>\n    <span data-cd-text=\"try-slide\">Try a slider CAPTCHA<\/span>\n    <span data-cd-text=\"try-friendly\">Try an invisible CAPTCHA<\/span>\n    <span data-cd-text=\"brand-sub\">simulation<\/span>\n    <span data-cd-text=\"try-again\">Please try again.<\/span>\n    <span data-cd-text=\"verified\">Verified<\/span>\n    <span data-cd-text=\"rc-checkbox\">I'm not a robot<\/span>\n    <span data-cd-text=\"rc-brand\">Image<br>CAPTCHA<\/span>\n    <span data-cd-text=\"rc-pick-l1\">Select all images with<\/span>\n    <span data-cd-text=\"rc-square-l1\">Select all squares with<\/span>\n    <span data-cd-text=\"rc-target\">crosswalks<\/span>\n    <span data-cd-text=\"rc-square-l3\">If there are none, click skip<\/span>\n    <span data-cd-text=\"rc-dynamic-l3\">Click verify once there are none left<\/span>\n    <span data-cd-text=\"rc-verify\">VERIFY<\/span>\n    <span data-cd-text=\"rc-skip\">SKIP<\/span>\n    <span data-cd-text=\"rc-reload\">Get a new challenge<\/span>\n    <span data-cd-text=\"rc-select-all\">Please select all matching images.<\/span>\n    <span data-cd-text=\"hc-checkbox\">I am human<\/span>\n    <span data-cd-text=\"hc-brand\">Image<br>labelling<\/span>\n    <span data-cd-text=\"hc-ask\">Please click each image containing a <b>chicken on a tree<\/b><\/span>\n    <span data-cd-text=\"hc-sub\">If there are None, click Skip<\/span>\n    <span data-cd-text=\"hc-example\">Example<\/span>\n    <span data-cd-text=\"hc-verify\">Verify<\/span>\n    <span data-cd-text=\"hc-skip\">Skip<\/span>\n    <span data-cd-text=\"mt-canvas\">Distorted text in an image<\/span>\n    <span data-cd-text=\"mt-input\">Enter text from image<\/span>\n    <span data-cd-text=\"mt-reload\">Get a new image<\/span>\n    <span data-cd-text=\"mt-mismatch\">That didn't match \u2014 here is a new image.<\/span>\n    <span data-cd-text=\"dd-reload\">Get a new puzzle<\/span>\n    <span data-cd-text=\"dd-hint\">Slide right to complete the puzzle.<\/span>\n    <span data-cd-text=\"dd-handle\">Slide the piece into the gap<\/span>\n    <span data-cd-text=\"dd-bot\">That movement looked automated. Please slide it by hand.<\/span>\n    <span data-cd-text=\"dd-off\">The piece is not in the gap yet. Please try again.<\/span>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bd54268 e-flex e-con-boxed e-con e-parent\" data-id=\"bd54268\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f3e5bc elementor-widget elementor-widget-heading\" data-id=\"8f3e5bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Compare CAPTCHA Test Completion Times<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-784ea43 elementor-widget elementor-widget-text-editor\" data-id=\"784ea43\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>For this CAPTCHA test, we measured the time from when you clicked Submit until your message was accepted, as well as the number of clicks needed to complete the CAPTCHA.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e12936 elementor-widget elementor-widget-html\" data-id=\"3e12936\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- CAPTCHA demo \u00b7 results. The comparison bars.\n     Needs the \"assets\" embed somewhere on the same page. -->\n<div class=\"captcha-demo\" data-cd-part=\"results\">\n  <div class=\"bars\">\n    <div class=\"bar-row pending\" data-row=\"image\">\n      <div class=\"bar-name\">Image CAPTCHA <span style=\"color:#8A929C\">\u00b7 reCAPTCHA<\/span><\/div>\n      <div class=\"bar-track\"><i><\/i><em class=\"bar-val\">not tried yet<\/em><\/div>\n    <\/div>\n    <div class=\"bar-row pending\" data-row=\"hcaptcha\">\n      <div class=\"bar-name\">Image labelling CAPTCHA <span style=\"color:#8A929C\">\u00b7 hCaptcha<\/span><\/div>\n      <div class=\"bar-track\"><i><\/i><em class=\"bar-val\">not tried yet<\/em><\/div>\n    <\/div>\n    <div class=\"bar-row pending\" data-row=\"text\">\n      <div class=\"bar-name\">Text CAPTCHA <span style=\"color:#8A929C\">\u00b7 MTCaptcha<\/span><\/div>\n      <div class=\"bar-track\"><i><\/i><em class=\"bar-val\">not tried yet<\/em><\/div>\n    <\/div>\n    <div class=\"bar-row pending\" data-row=\"slide\">\n      <div class=\"bar-name\">Slider CAPTCHA <span style=\"color:#8A929C\">\u00b7 DataDome<\/span><\/div>\n      <div class=\"bar-track\"><i><\/i><em class=\"bar-val\">not tried yet<\/em><\/div>\n    <\/div>\n    <div class=\"bar-row good pending\" data-row=\"friendly\">\n      <div class=\"bar-name\">Invisible CAPTCHA <span style=\"color:#8A929C\">\u00b7 Friendly Captcha<\/span><\/div>\n      <div class=\"bar-track\"><i><\/i><em class=\"bar-val\">not tried yet<\/em><\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Text the script shows. It is translated with the rest of the page;\n       keep {placeholders} exactly as they are. -->\n  <div class=\"cd-strings\" hidden>\n    <span data-cd-text=\"bar-pending\">not tried yet<\/span>\n    <span data-cd-text=\"bar-value\">{seconds} s \u00b7 {clicks}<\/span>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-178f162 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"178f162\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dcf8176\" data-id=\"dcf8176\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-16c2bce elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"16c2bce\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-7d1788f\" data-id=\"7d1788f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ae5d7ca elementor-widget elementor-widget-heading\" data-id=\"ae5d7ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Why CAPTCHA Friction Matters<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e553072 elementor-widget elementor-widget-heading\" data-id=\"e553072\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Conversion Impact<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed13795 elementor-widget elementor-widget-text-editor\" data-id=\"ed13795\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Testing different CAPTCHAs, every extra step asks users to spend more time and effort. Traditional CAPTCHA challenges such as selecting images, deciphering text, or moving a slider can interrupt the path to signing up, getting in touch or completing a purchase. That added friction can lead to form abandonment and fewer completed conversions.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-beae0f5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"beae0f5\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a1e8ec0\" data-id=\"a1e8ec0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f038d76 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f038d76\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-49dddbf\" data-id=\"49dddbf\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-25219aa elementor-widget elementor-widget-heading\" data-id=\"25219aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Ready to Leave Traditional. <br>CAPTCHAs Behind?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6da42fb elementor-widget elementor-widget-text-editor\" data-id=\"6da42fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Friendly Captcha verifies users invisibly in the background \u2013 no image puzzles, no text to decipher, and no slider. Add Friendly Captcha to your forms with just a few lines of code.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-83a29d1 elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"83a29d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/signup\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-right\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Start now<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-899e533 elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"899e533\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/docs\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-right\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Read the docs<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e9d297 elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"7e9d297\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/integrations\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-right\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Check integrations<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-d346705\" data-id=\"d346705\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9a43c60 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9a43c60\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2cccf8f\" data-id=\"2cccf8f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9d5b7b8 elementor-widget elementor-widget-heading\" data-id=\"9d5b7b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">FAQ<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea3ac97 elementor-widget elementor-widget-accordion\" data-id=\"ea3ac97\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2451\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2451\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">What is a CAPTCHA test?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2451\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2451\"><p>In general, a\u00a0<a href=\"https:\/\/friendlycaptcha.com\/insights\/what-is-captcha\/\">CAPTCHA<\/a>\u00a0test is\u00a0a security challenge used by websites to tell whether a user is a real human or an automated computer program.\u00a0The name stands for\u00a0Completely\u00a0Automated\u00a0Public\u00a0Turing test to tell\u00a0Computers and\u00a0Humans\u00a0Apart.<\/p>\n<p>This test CAPTCHA site serves as an educational tool to explain the mechanisms of traditional CAPTCHA challenges in contrast to modern Friendly Captcha. The CAPTCHA demo offers significant benefits by providing insights into how CAPTCHA types work and demonstrating their usability.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2452\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-2452\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">How do I pass a CAPTCHA test?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2452\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-2452\"><p>To pass a traditional CAPTCHA test as a human,\u00a0use a standard browser, move your mouse naturally, and clear triggers like shared VPNs. <a class=\"notion-link-token notion-focusable-token notion-enable-hover\" tabindex=\"0\" href=\"https:\/\/friendlycaptcha.com\/\" rel=\"noopener noreferrer\" data-token-index=\"1\"><span class=\"link-annotation-unknown-block-id--742384813\">Friendly Captcha<\/span><\/a> works differently: its Proof-of-Work check runs in the background, so there&#8217;s no puzzle for humans to solve.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2453\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-2453\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Does Friendly Captcha show users a challenge?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2453\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-2453\"><p>No, Friendly Captcha does not show users a visual, audio, or checkbox challenge. Friendly Captcha is a truly <a class=\"notion-link-token notion-focusable-token notion-enable-hover\" tabindex=\"0\" href=\"https:\/\/friendlycaptcha.com\/insights\/invisible-captcha\/\" rel=\"noopener noreferrer\" data-token-index=\"1\"><span class=\"link-annotation-unknown-block-id-1704439053\">invisible CAPTCHA<\/span><\/a>.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2454\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-2454\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Can AI pass CAPTCHA tests?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2454\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-2454\"><p>Yes, AI can pass traditional puzzle, slider, and image-grid CAPTCHAs, often matching or beating human accuracy, as detailed in reports like\u00a0<a class=\"notion-link-token notion-focusable-token notion-enable-hover\" tabindex=\"0\" href=\"https:\/\/www.newscientist.com\/article\/2448687-an-ai-can-beat-captcha-tests-100-per-cent-of-the-time\/\" rel=\"noopener noreferrer\" data-token-index=\"1\"><span class=\"link-annotation-unknown-block-id--491815702\">New Scientist<\/span><\/a><span class=\"notion-enable-hover\" data-token-index=\"2\">. Modern PoW CAPTCHAs such as Friendly Captcha are not meant to be un-crackable. They are designed to change the financial math for attackers.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-4e4c9a7 e-flex e-con-boxed e-con e-parent\" data-id=\"4e4c9a7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d054fe2 elementor-widget elementor-widget-html\" data-id=\"d054fe2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- CAPTCHA demo \u00b7 assets: the styles and the script for the chooser, form and\n     results embeds. Put this once, anywhere on the page. -->\n  <style>\/* ---------- Friendly Captcha design tokens ---------- *\/\n    .captcha-demo{\n      --accent: #0F62FE;\n      --accent-dark: #0043CE;\n      --yellow: #FFC400;\n      --orange: #FF6D00;\n      --lime: #A7E000;\n      --heading: #212121;\n      --text: #545454;\n      --bg-soft: #F6F8FC;\n      --white: #FFFFFF;\n      --border: #DADBDE;\n      --radius: 8px;\n      --pill: 200px;\n      --container: 1080px;\n    }.captcha-demo *{\n      box-sizing: border-box\n    }.captcha-demo .cd-strings{\n      display: none !important\n    }.captcha-demo{\n      scroll-behavior: smooth\n    }.captcha-demo{\n      margin: 0;\n      font-family: inherit;\n      font-size: inherit;\n      line-height: 1.5;\n      color: inherit;\n      background: transparent;\n      -webkit-font-smoothing: antialiased\n    }.captcha-demo h1:not(.elementor-heading-title),.captcha-demo h2:not(.elementor-heading-title),.captcha-demo h3:not(.elementor-heading-title){\n      color: var(--heading);\n      font-weight: 700;\n      margin: 0\n    }.captcha-demo h1:not(.elementor-heading-title){\n      font-size: 56px;\n      line-height: 1.2\n    }.captcha-demo h2:not(.elementor-heading-title){\n      font-size: 26px;\n      line-height: 1.3\n    }.captcha-demo h3:not(.elementor-heading-title){\n      font-size: 22px;\n      line-height: 1.3\n    }.captcha-demo .btn{\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      gap: 6px;\n      font-family: inherit;\n      font-size: 15px;\n      font-weight: 700;\n      line-height: 1.5;\n      background: var(--accent);\n      color: #fff;\n      border: 1px solid var(--accent);\n      border-radius: var(--pill);\n      padding: 9px 20px;\n      cursor: pointer;\n      transition: all .3s\n    }.captcha-demo .btn:hover,.captcha-demo .btn:focus{\n      background: var(--accent-dark);\n      border-color: var(--accent-dark);\n      color: #fff\n    }.captcha-demo .btn:focus-visible{\n      outline: none;\n      box-shadow: 0 0 0 4px rgba(41, 121, 255, .3)\n    }.captcha-demo .btn.secondary{\n      background: transparent;\n      color: var(--accent)\n    }.captcha-demo .btn.secondary:hover{\n      background: transparent;\n      color: var(--heading);\n      border-color: var(--heading)\n    }.captcha-demo .btn.small{\n      font-size: 14px;\n      padding: 7px 16px\n    }.captcha-demo .chev{\n      font-size: 12px;\n      line-height: 1\n    }\/* ---------- Form card ---------- *\/\n    @media(max-width:1000px) {.captcha-demo .form-card{\n        padding: 32px 20px\n      }\n    }\/* type chooser *\/\n    .captcha-demo .chooser{\n      margin-bottom: 16px\n    }.captcha-demo .chooser-label{\n      font-size: 14px;\n      font-weight: 700;\n      color: var(--heading);\n      margin-bottom: 8px\n    }.captcha-demo .chooser-opts{\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n      gap: 10px 8px;\n      align-items: start\n    }.captcha-demo .swopt-wrap{\n      display: flex;\n      flex-direction: column;\n      align-items: stretch;\n      min-width: 0;\n      position: relative\n    }.captcha-demo .swopt{\n      position: relative;\n      z-index: 2;\n      isolation: isolate;\n      overflow: hidden;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      min-height: 40px;\n      height: auto;\n      border: 1px solid #E4E9F2;\n      background: #fff;\n      font-family: inherit;\n      font-size: 14px;\n      font-weight: 700;\n      color: var(--text);\n      padding: 8px 18px;\n      border-radius: var(--pill);\n      cursor: pointer;\n      transition: all .3s;\n      min-width: 0;\n      width: 100%\n    }.captcha-demo .swopt:hover{\n      border-color: var(--accent);\n      color: var(--accent)\n    }.captcha-demo .swopt.active{\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff\n    }.captcha-demo .swopt.has-result{\n      background: #fff;\n      border-color: var(--button-fill, var(--accent));\n      color: var(--heading)\n    }.captcha-demo .swopt.has-result.friendly-result{\n      --button-fill: var(--lime);\n      --on-fill: var(--heading)\n    }\n    \/* The fill is a second copy of the label laid over the button in the fill colour and\n       cut off where the fill ends, so every letter reads well on its own background:\n       light on the blue fill, dark on white and on the lime one. *\/\n    .captcha-demo .swopt-fill{\n      position: absolute;\n      inset: 0;\n      z-index: 2;\n      display: none;\n      align-items: center;\n      justify-content: center;\n      padding: inherit;\n      text-align: center;\n      background: var(--button-fill, var(--accent));\n      color: var(--on-fill, #fff);\n      clip-path: inset(0 calc(100% - var(--button-fill-percent, 0%)) 0 0);\n      transition: clip-path .7s cubic-bezier(.2,.7,.3,1);\n      pointer-events: none\n    }.captcha-demo .swopt.has-result .swopt-fill{\n      display: flex\n    }.captcha-demo .swopt-fill em{\n      opacity: .85\n    }.captcha-demo .swopt:focus-visible{\n      outline: none;\n      box-shadow: 0 0 0 4px rgba(41, 121, 255, .3)\n    }.captcha-demo .swopt .done-dot{\n      display: none;\n      margin-left: 6px;\n      color: var(--lime)\n    }.captcha-demo .swopt.solved .done-dot{\n      display: inline\n    }.captcha-demo .swopt-label{\n      position: relative;\n      z-index: 1\n    }.captcha-demo .result-envelope{\n      position: relative;\n      z-index: 1;\n      display: none;\n      margin: -10px auto 0;\n      width: calc(100% - 18px);\n      min-height: 44px;\n      border: 1px solid #D7E1F5;\n      border-top: 0;\n      border-radius: 0 0 4px 4px;\n      background: #F7FAFF;\n      box-shadow: 0 3px 8px rgba(20, 56, 82, .08);\n      overflow: hidden;\n      transform-origin: top center\n    }.captcha-demo .swopt.has-result+.result-envelope{\n      display: block;\n      animation: envelopeOpen .48s cubic-bezier(.2, .75, .25, 1) both\n    }.captcha-demo .envelope-flap{\n      position: absolute;\n      z-index: 2;\n      inset: 0 0 auto;\n      height: 10px;\n      background: #E7EEFF;\n      clip-path: polygon(0 0, 50% 100%, 100% 0);\n      transform-origin: top center;\n      animation: flapOpen .48s .08s cubic-bezier(.2, .75, .25, 1) both\n    }.captcha-demo .envelope-body{\n      display: block;\n      padding-top: 16px;\n      color: var(--accent);\n      font-size: 11px;\n      font-weight: 700;\n      line-height: 14px;\n      text-align: center;\n      font-variant-numeric: tabular-nums;\n      white-space: nowrap;\n      opacity: 0;\n      transform: translateY(-4px);\n      animation: letterIn .28s .28s ease-out forwards\n    }\n\n    @keyframes envelopeOpen {\n      from {\n        opacity: 0;\n        transform: translateY(-5px) scaleY(.35)\n      }\n\n      to {\n        opacity: 1;\n        transform: none\n      }\n    }\n\n    @keyframes spin {\n      to {\n        transform: rotate(360deg)\n      }\n    }\n\n    @keyframes flapOpen {\n      from {\n        transform: rotateX(0)\n      }\n\n      to {\n        transform: rotateX(180deg)\n      }\n    }\n\n    @keyframes letterIn {\n      to {\n        opacity: 1;\n        transform: none\n      }\n    }\n\n    @media(max-width:900px) {.captcha-demo .chooser-opts{\n        grid-template-columns: repeat(3, minmax(0, 1fr))\n      }\n    }\n\n    @media(max-width:560px) {.captcha-demo .chooser-opts{\n        grid-template-columns: repeat(2, minmax(0, 1fr))\n      }.captcha-demo .swopt{\n        padding-left: 10px;\n        padding-right: 10px\n      }.captcha-demo .result-envelope{\n        width: calc(100% - 10px)\n      }\n    }.captcha-demo .form-card{\n      background: #fff;\n      border-radius: var(--radius);\n      box-shadow: 0 8px 30px rgba(20, 56, 82, .10);\n      padding: 48px\n    }.captcha-demo .form-card h2:not(.elementor-heading-title){\n      font-size: 34px\n    }.captcha-demo .form-card .sub{\n      margin: 12px 0 28px;\n      font-size: 18px\n    }.captcha-demo label{\n      display: block;\n      font-size: 15px;\n      font-weight: 700;\n      color: var(--heading);\n      line-height: 1.6;\n      margin-bottom: 6px\n    }.captcha-demo .field{\n      margin-bottom: 22px\n    }.captcha-demo input[type=text],.captcha-demo textarea{\n      width: 100%;\n      font-family: inherit;\n      font-size: 16px;\n      line-height: 1.6;\n      color: var(--heading);\n      background: #fff;\n      border: 1px solid var(--border);\n      border-radius: 4px;\n      padding: 12px 14px\n    }.captcha-demo textarea{\n      min-height: 120px;\n      resize: vertical\n    }.captcha-demo input[type=text]:focus,.captcha-demo textarea:focus{\n      outline: none;\n      box-shadow: 0 0 0 4px rgba(41, 121, 255, .3)\n    }\/* Captcha widget in the form *\/\n    .captcha-demo .cap-box{\n      position: relative;\n      border: 1px solid #E6E6E6;\n      background: #FAFAFA;\n      border-radius: 4px;\n      padding: 16px;\n      margin-bottom: 22px;\n      min-height: 88px\n    }.captcha-demo .cap-row{\n      display: flex;\n      align-items: center;\n      gap: 16px\n    }.captcha-demo .cap-check{\n      width: 38px;\n      height: 38px;\n      flex: 0 0 38px;\n      border: 2px solid #BDBDBD;\n      border-radius: 4px;\n      background: #fff;\n      display: grid;\n      place-items: center;\n      cursor: pointer;\n      padding: 0\n    }.captcha-demo .cap-check:focus-visible{\n      outline: none;\n      box-shadow: 0 0 0 4px rgba(41, 121, 255, .3)\n    }.captcha-demo .cap-check svg{\n      width: 20px;\n      height: 20px;\n      stroke: var(--accent);\n      stroke-width: 3.4;\n      fill: none;\n      opacity: 0\n    }.captcha-demo .cap-box.verified .cap-check{\n      border-color: var(--accent)\n    }.captcha-demo .cap-box.verified .cap-check svg{\n      opacity: 1\n    }.captcha-demo .cap-box.friendly.verified .cap-check{\n      background: var(--lime);\n      border-color: #93C900\n    }.captcha-demo .cap-box.friendly.verified .cap-check svg{\n      stroke: #2B3A00\n    }.captcha-demo .cap-label{\n      font-size: 17px;\n      color: var(--heading)\n    }.captcha-demo .cap-dots{\n      position: absolute;\n      top: 12px;\n      right: 14px;\n      color: #9AA1AB;\n      letter-spacing: 2px;\n      font-size: 13px\n    }.captcha-demo .cap-brand{\n      position: absolute;\n      bottom: 10px;\n      right: 14px;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--accent);\n      text-decoration: underline\n    }.captcha-demo .cap-brand.plain{\n      color: #9AA1AB;\n      text-decoration: none;\n      font-weight: 400\n    }.captcha-demo .cap-progress{\n      height: 3px;\n      background: #E9EAEE;\n      border-radius: var(--pill);\n      margin-top: 14px;\n      overflow: hidden\n    }.captcha-demo .cap-progress i{\n      display: block;\n      height: 100%;\n      width: 0;\n      background: var(--accent);\n      border-radius: var(--pill)\n    }.captcha-demo .cap-box.friendly.verified .cap-progress i{\n      background: var(--lime)\n    }.captcha-demo #frcReal .frc-captcha{\n      width: 100%;\n      max-width: none\n    }\/* inline challenge box *\/\n    .captcha-demo .chal-box{\n      border: 1px solid #E6E6E6;\n      background: #FAFAFA;\n      border-radius: 4px;\n      padding: 16px;\n      margin-bottom: 22px\n    }.captcha-demo .chal-head{\n      display: flex;\n      flex-wrap: wrap;\n      align-items: baseline;\n      gap: 4px 10px;\n      margin-bottom: 12px\n    }.captcha-demo .chal-title{\n      font-size: 16px;\n      font-weight: 700;\n      color: var(--heading)\n    }.captcha-demo .chal-provider{\n      font-size: 13px;\n      color: #8A929C\n    }.captcha-demo .chal-mount{\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 12px\n    }.captcha-demo .swopt em{\n      font-style: normal;\n      font-weight: 400;\n      opacity: .7;\n      font-size: 12px;\n      display: block;\n      line-height: 1.2\n    }.captcha-demo .swopt.active em{\n      opacity: .85\n    }\/* Sent state *\/\n    .captcha-demo .sent{\n      display: none;\n      text-align: center;\n      padding: 14px 0\n    }.captcha-demo .sent.show{\n      display: block\n    }.captcha-demo .sent .mark{\n      width: 64px;\n      height: 64px;\n      border-radius: 50%;\n      background: var(--lime);\n      display: grid;\n      place-items: center;\n      margin: 0 auto 18px\n    }.captcha-demo .sent .mark svg{\n      width: 30px;\n      height: 30px;\n      stroke: #2B3A00;\n      stroke-width: 3.4;\n      fill: none\n    }.captcha-demo .sent h3{\n      margin-bottom: 8px\n    }.captcha-demo .sent .cost{\n      font-size: 17px;\n      margin-bottom: 22px\n    }.captcha-demo .sent .cost b{\n      color: var(--heading)\n    }.captcha-demo .sent .again{\n      display: flex;\n      flex-direction: column;\n      gap: 10px;\n      align-items: center\n    }\/* ---------- Modal ---------- *\/\n    .captcha-demo .status{\n      font-size: 14px;\n      min-height: 20px;\n      text-align: center\n    }.captcha-demo .status.err{\n      color: var(--orange);\n      font-weight: 700\n    }\/* ---------- reCAPTCHA v2 replica (anchor widget + image challenge) ---------- *\/\n    .captcha-demo .chal-box.bare{\n      border: 0;\n      background: transparent;\n      padding: 0\n    }.captcha-demo .chal-box.bare .chal-title{\n      display: none\n    }.captcha-demo .chal-box.bare .chal-head{\n      margin-bottom: 10px\n    }.captcha-demo .chal-box.bare .chal-mount{\n      align-items: flex-start;\n      gap: 6px\n    }.captcha-demo .chal-box.bare .status{\n      text-align: left\n    }.captcha-demo .rc{\n      position: relative;\n      width: 304px;\n      max-width: 100%;\n      font-family: inherit;\n      color: #000\n    }.captcha-demo .rc *{\n      box-sizing: border-box\n    }\/* the \"I'm not a robot\" anchor *\/\n    .captcha-demo .rc-anchor{\n      display: flex;\n      align-items: center;\n      height: 74px;\n      background: #f9f9f9;\n      border: 1px solid #d3d3d3;\n      border-radius: 3px;\n      box-shadow: 0 0 4px 1px rgba(0, 0, 0, .08)\n    }.captcha-demo .rc-cb-holder{\n      flex: 0 0 28px;\n      width: 28px;\n      height: 28px;\n      margin: 0 12px;\n      display: grid;\n      place-items: center\n    }.captcha-demo .rc-cb{\n      width: 28px;\n      height: 28px;\n      border: 2px solid #c1c1c1;\n      border-radius: 2px;\n      background: #fcfcfc;\n      padding: 0;\n      cursor: pointer;\n      display: block\n    }.captcha-demo .rc-cb:hover{\n      border-color: #b2b2b2\n    }.captcha-demo .rc-cb:focus-visible{\n      outline: 2px solid #4d90fe;\n      outline-offset: 2px\n    }.captcha-demo .rc-spin{\n      display: none;\n      width: 28px;\n      height: 28px;\n      border: 3px solid #dcdcdc;\n      border-top-color: #4a90e2;\n      border-radius: 50%;\n      animation: spin .8s linear infinite\n    }.captcha-demo .rc-tick{\n      display: none;\n      width: 30px;\n      height: 30px;\n      stroke: #0f9d58;\n      stroke-width: 4;\n      fill: none\n    }.captcha-demo .rc-cb-holder.busy .rc-cb,.captcha-demo .rc-cb-holder.done .rc-cb{\n      display: none\n    }.captcha-demo .rc-cb-holder.busy .rc-spin{\n      display: block\n    }.captcha-demo .rc-cb-holder.done .rc-tick{\n      display: block\n    }.captcha-demo .rc-label{\n      flex: 1;\n      font-size: 14px;\n      line-height: 17px;\n      color: #000\n    }.captcha-demo .rc-brand{\n      flex: 0 0 74px;\n      width: 74px;\n      padding: 8px 6px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      text-align: center\n    }.captcha-demo .rc-brand .nm{\n      font-size: 10px;\n      line-height: 13px;\n      color: #9b9b9b\n    }.captcha-demo .rc-brand .pt{\n      font-size: 8px;\n      line-height: 11px;\n      color: #b5b5b5;\n      margin-top: 2px\n    }\/* the challenge bubble *\/\n    .captcha-demo .rc-bubble{\n      position: absolute;\n      left: 0;\n      top: 84px;\n      z-index: 70;\n      width: 400px;\n      max-width: calc(100vw - 48px);\n      background: #fff;\n      border: 1px solid #d3d3d3;\n      box-shadow: 0 0 10px rgba(0, 0, 0, .35);\n      display: none\n    }.captcha-demo .rc-bubble.open{\n      display: block;\n      animation: rcIn .15s ease-out\n    }\n\n    @keyframes rcIn {\n      from {\n        opacity: 0;\n        transform: translateY(-6px)\n      }\n    }.captcha-demo .rc-bubble:before,.captcha-demo .rc-bubble:after{\n      content: \"\";\n      position: absolute;\n      left: 22px;\n      width: 0;\n      height: 0;\n      border-left: 11px solid transparent;\n      border-right: 11px solid transparent\n    }.captcha-demo .rc-bubble:before{\n      top: -12px;\n      border-bottom: 12px solid #d3d3d3\n    }.captcha-demo .rc-bubble:after{\n      top: -11px;\n      border-bottom: 11px solid #1a73e8\n    }.captcha-demo .rc-head{\n      background: #1a73e8;\n      color: #fff;\n      padding: 12px 16px 14px\n    }.captcha-demo .rc-head .l1{\n      font-size: 14px;\n      line-height: 18px\n    }.captcha-demo .rc-head .l2{\n      font-size: 26px;\n      font-weight: 400;\n      line-height: 32px;\n      margin: 1px 0 4px\n    }.captcha-demo .rc-head .l3{\n      font-size: 12px;\n      line-height: 15px\n    }.captcha-demo .rc-body{\n      position: relative\n    }.captcha-demo .rc-load{\n      position: absolute;\n      inset: 0;\n      display: none;\n      place-items: center;\n      background: rgba(255, 255, 255, .82)\n    }.captcha-demo .rc-load i{\n      display: block;\n      width: 34px;\n      height: 34px;\n      border: 3px solid #dcdcdc;\n      border-top-color: #1a73e8;\n      border-radius: 50%;\n      animation: spin .8s linear infinite\n    }.captcha-demo .rc.busy .rc-load{\n      display: grid\n    }.captcha-demo .rc-grid{\n      display: grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 4px;\n      padding: 10px\n    }.captcha-demo .rc-grid.sq{\n      grid-template-columns: repeat(4, 1fr);\n      gap: 2px\n    }.captcha-demo .rc-grid.sq .chk{\n      width: 21px;\n      height: 21px;\n      left: 6px;\n      top: 6px\n    }.captcha-demo .rc-grid.sq .chk svg{\n      width: 12px;\n      height: 12px\n    }.captcha-demo .rc-tile{\n      position: relative;\n      aspect-ratio: 1;\n      display: block;\n      padding: 0;\n      border: 0;\n      border-radius: 0;\n      background: #fff;\n      overflow: hidden;\n      cursor: pointer\n    }.captcha-demo .rc-tile:hover,.captcha-demo .rc-tile:focus{\n      background-color: #fff\n    }.captcha-demo .rc-tile:focus-visible{\n      outline: 3px solid #1a73e8;\n      outline-offset: -3px\n    }.captcha-demo .rc-tile .shot{\n      position: absolute;\n      inset: 0;\n      overflow: hidden;\n      transition: transform .25s ease, opacity .4s ease\n    }.captcha-demo .rc-tile .shot img{\n      position: absolute;\n      display: block;\n      max-width: none;\n      height: auto;\n      border-radius: 0;\n      pointer-events: none;\n      -webkit-user-drag: none\n    }.captcha-demo .rc-tile.sel .shot{\n      transform: scale(.76)\n    }.captcha-demo .rc-tile.blank .shot{\n      opacity: 0\n    }.captcha-demo .rc-tile .chk{\n      position: absolute;\n      left: 9px;\n      top: 9px;\n      width: 26px;\n      height: 26px;\n      border-radius: 50%;\n      background: #1a73e8;\n      display: grid;\n      place-items: center;\n      opacity: 0;\n      transform: scale(.4);\n      transition: opacity .15s ease, transform .15s ease\n    }.captcha-demo .rc-tile.sel .chk{\n      opacity: 1;\n      transform: none\n    }.captcha-demo .rc-tile .chk svg{\n      width: 14px;\n      height: 14px;\n      stroke: #fff;\n      stroke-width: 3.2;\n      fill: none\n    }.captcha-demo .rc-err{\n      min-height: 16px;\n      padding: 0 12px;\n      color: #d93025;\n      font-size: 13px;\n      line-height: 16px;\n      font-weight: 400\n    }.captcha-demo .rc-foot{\n      display: flex;\n      align-items: center;\n      gap: 2px;\n      padding: 6px 10px 10px\n    }.captcha-demo .rc-ic{\n      width: 36px;\n      height: 36px;\n      padding: 0;\n      border: 0;\n      background: none;\n      border-radius: 2px;\n      color: #9b9b9b;\n      display: grid;\n      place-items: center;\n      cursor: pointer\n    }.captcha-demo .rc-ic:hover{\n      background: #f1f1f1;\n      color: #666\n    }.captcha-demo .rc-ic svg{\n      width: 22px;\n      height: 22px;\n      fill: currentColor\n    }.captcha-demo .rc-verify{\n      margin-left: auto;\n      background: #1a73e8;\n      color: #fff;\n      border: 0;\n      border-radius: 2px;\n      font-family: inherit;\n      font-size: 14px;\n      font-weight: 400;\n      letter-spacing: .3px;\n      padding: 10px 20px;\n      cursor: pointer\n    }.captcha-demo .rc-verify:hover{\n      background: #1765cc\n    }.captcha-demo .rc-verify:disabled{\n      opacity: .55;\n      cursor: default\n    }.captcha-demo .rc-verify:focus-visible{\n      outline: 2px solid #1a73e8;\n      outline-offset: 2px\n    }\n\n    @media(max-width:520px) {.captcha-demo .rc-bubble{\n        width: calc(100vw - 52px);\n        left: -6px\n      }.captcha-demo .rc-head .l2{\n        font-size: 22px;\n        line-height: 27px\n      }\n    }\/* ---------- hCaptcha-style image labelling ---------- *\/\n    .captcha-demo .hc{\n      position: relative;\n      width: 304px;\n      max-width: 100%;\n      font-family: \"Inter\", Arial, sans-serif;\n      color: #3d3d3d\n    }.captcha-demo .hc *{\n      box-sizing: border-box\n    }.captcha-demo .hc-anchor{\n      display: flex;\n      align-items: center;\n      height: 74px;\n      background: #fafafa;\n      border: 1px solid #e0e0e0;\n      border-radius: 4px;\n      box-shadow: 0 0 4px 1px rgba(0, 0, 0, .06)\n    }.captcha-demo .hc-cb-holder{\n      flex: 0 0 28px;\n      width: 28px;\n      height: 28px;\n      margin: 0 14px;\n      display: grid;\n      place-items: center\n    }.captcha-demo .hc-cb{\n      width: 28px;\n      height: 28px;\n      border: 1px solid #b3b3b3;\n      border-radius: 2px;\n      background: #fff;\n      padding: 0;\n      cursor: pointer;\n      display: block\n    }.captcha-demo .hc-cb:hover{\n      border-color: #8c8c8c\n    }.captcha-demo .hc-cb:focus-visible{\n      outline: 2px solid #158e98;\n      outline-offset: 2px\n    }.captcha-demo .hc-spin{\n      display: none;\n      width: 28px;\n      height: 28px;\n      border: 3px solid #e2e2e2;\n      border-top-color: #158e98;\n      border-radius: 50%;\n      animation: spin .8s linear infinite\n    }.captcha-demo .hc-tick{\n      display: none;\n      width: 30px;\n      height: 30px;\n      stroke: #158e98;\n      stroke-width: 4;\n      fill: none\n    }.captcha-demo .hc-cb-holder.busy .hc-cb,.captcha-demo .hc-cb-holder.done .hc-cb{\n      display: none\n    }.captcha-demo .hc-cb-holder.busy .hc-spin{\n      display: block\n    }.captcha-demo .hc-cb-holder.done .hc-tick{\n      display: block\n    }.captcha-demo .hc-label{\n      flex: 1;\n      font-size: 14px;\n      line-height: 17px\n    }.captcha-demo .hc-brand{\n      flex: 0 0 78px;\n      width: 78px;\n      padding: 8px 6px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      text-align: center\n    }.captcha-demo .hc-brand .nm{\n      font-size: 10px;\n      line-height: 13px;\n      color: #9b9b9b\n    }.captcha-demo .hc-brand .pt{\n      font-size: 8px;\n      line-height: 11px;\n      color: #b5b5b5;\n      margin-top: 2px\n    }.captcha-demo .hc-panel{\n      position: absolute;\n      left: 0;\n      top: 84px;\n      z-index: 70;\n      width: 400px;\n      max-width: calc(100vw - 48px);\n      background: #fff;\n      border: 1px solid #d3d3d3;\n      box-shadow: 0 0 10px rgba(0, 0, 0, .32);\n      display: none\n    }.captcha-demo .hc-panel.open{\n      display: block;\n      animation: rcIn .15s ease-out\n    }.captcha-demo .hc-panel:before,.captcha-demo .hc-panel:after{\n      content: \"\";\n      position: absolute;\n      left: 22px;\n      width: 0;\n      height: 0;\n      border-left: 11px solid transparent;\n      border-right: 11px solid transparent\n    }.captcha-demo .hc-panel:before{\n      top: -12px;\n      border-bottom: 12px solid #d3d3d3\n    }.captcha-demo .hc-panel:after{\n      top: -11px;\n      border-bottom: 11px solid #158e98\n    }.captcha-demo .hc-head{\n      background: #158e98;\n      color: #fff;\n      padding: 14px 14px 16px;\n      display: flex;\n      gap: 12px;\n      align-items: flex-start\n    }.captcha-demo .hc-ask{\n      flex: 1;\n      min-width: 0\n    }.captcha-demo .hc-ask .q{\n      font-size: 16px;\n      line-height: 1.32\n    }.captcha-demo .hc-ask .q b{\n      font-weight: 700\n    }.captcha-demo .hc-sub{\n      font-size: 12px;\n      line-height: 15px;\n      margin-top: 12px\n    }.captcha-demo .hc-example{\n      position: relative;\n      flex: 0 0 86px;\n      width: 86px\n    }.captcha-demo .hc-example img{\n      width: 86px;\n      height: 86px;\n      object-fit: cover;\n      border-radius: 3px;\n      display: block\n    }.captcha-demo .hc-example i{\n      position: absolute;\n      left: -11px;\n      top: 31px;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background: #fff;\n      color: #158e98;\n      font-style: normal;\n      font-size: 17px;\n      font-weight: 700;\n      line-height: 23px;\n      text-align: center;\n      box-shadow: 0 1px 3px rgba(0, 0, 0, .35)\n    }.captcha-demo .hc-body{\n      position: relative\n    }.captcha-demo .hc-load{\n      position: absolute;\n      inset: 0;\n      display: none;\n      place-items: center;\n      background: rgba(255, 255, 255, .82)\n    }.captcha-demo .hc-load i{\n      display: block;\n      width: 34px;\n      height: 34px;\n      border: 3px solid #dce4e5;\n      border-top-color: #158e98;\n      border-radius: 50%;\n      animation: spin .8s linear infinite\n    }.captcha-demo .hc.busy .hc-load{\n      display: grid\n    }.captcha-demo .hc-grid{\n      display: grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 5px;\n      padding: 6px\n    }.captcha-demo .hc-tile{\n      position: relative;\n      aspect-ratio: 1;\n      overflow: hidden;\n      padding: 0;\n      border: 0;\n      border-radius: 0;\n      background: #ededed;\n      cursor: pointer\n    }.captcha-demo .hc-tile:hover,.captcha-demo .hc-tile:focus{\n      background-color: #ededed\n    }.captcha-demo .hc-tile img{\n      position: absolute;\n      display: block;\n      max-width: none;\n      height: auto;\n      border-radius: 0;\n      pointer-events: none\n    }.captcha-demo .hc-tile:focus-visible{\n      outline: 3px solid #158e98;\n      outline-offset: -3px\n    }.captcha-demo .hc-tile.sel:after{\n      content: \"\";\n      position: absolute;\n      inset: 0;\n      border: 5px solid #158e98;\n      background: rgba(21, 142, 152, .14)\n    }.captcha-demo .hc-chk{\n      position: absolute;\n      left: 6px;\n      top: 6px;\n      z-index: 2;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background: #158e98;\n      display: grid;\n      place-items: center;\n      opacity: 0;\n      transform: scale(.4);\n      transition: opacity .15s ease, transform .15s ease\n    }.captcha-demo .hc-tile.sel .hc-chk{\n      opacity: 1;\n      transform: none\n    }.captcha-demo .hc-chk svg{\n      width: 13px;\n      height: 13px;\n      stroke: #fff;\n      stroke-width: 3.2;\n      fill: none\n    }.captcha-demo .hc-foot{\n      display: flex;\n      align-items: center;\n      gap: 10px;\n      padding: 9px 10px;\n      border-top: 1px solid #ececec\n    }.captcha-demo .hc-err{\n      flex: 1;\n      font-size: 12px;\n      line-height: 16px;\n      font-weight: 400;\n      color: #d93025\n    }.captcha-demo .hc-btn{\n      background: #158e98;\n      color: #fff;\n      border: 0;\n      border-radius: 3px;\n      font-family: inherit;\n      font-size: 14px;\n      font-weight: 700;\n      padding: 9px 22px;\n      cursor: pointer\n    }.captcha-demo .hc-btn:hover{\n      background: #0f7780\n    }.captcha-demo .hc-btn:disabled{\n      opacity: .55;\n      cursor: default\n    }.captcha-demo .hc-btn:focus-visible{\n      outline: 2px solid #158e98;\n      outline-offset: 2px\n    }\n\n    @media(max-width:520px) {.captcha-demo .hc-panel{\n        width: calc(100vw - 52px);\n        left: -6px\n      }.captcha-demo .hc-ask .q{\n        font-size: 15px\n      }.captcha-demo .hc-example{\n        flex: 0 0 76px;\n        width: 76px\n      }.captcha-demo .hc-example img{\n        width: 76px;\n        height: 76px\n      }\n    }\/* ---------- Text challenge: MTCaptcha-style widget ---------- *\/\n    .captcha-demo .mt{\n      width: 100%;\n      max-width: 380px;\n      background: #fff;\n      border: 1px solid #d9dde4;\n      border-radius: 6px;\n      padding: 10px\n    }.captcha-demo .mt-img{\n      position: relative;\n      height: 124px;\n      border-radius: 4px;\n      overflow: hidden;\n      background: #eef1f5\n    }.captcha-demo .mt-wash{\n      position: absolute;\n      inset: -18px;\n      filter: blur(9px) saturate(1.75) contrast(1.05)\n    }.captcha-demo .mt-img canvas{\n      position: absolute;\n      inset: 0;\n      width: 100%;\n      height: 100%;\n      display: block\n    }.captcha-demo .mt-busy{\n      position: absolute;\n      inset: 0;\n      display: none;\n      place-items: center;\n      background: rgba(255, 255, 255, .9)\n    }.captcha-demo .mt.busy .mt-busy{\n      display: grid\n    }.captcha-demo .mt-busy i{\n      display: block;\n      width: 30px;\n      height: 30px;\n      border: 3px solid #dfe3ea;\n      border-top-color: #1b7a48;\n      border-radius: 50%;\n      animation: spin .7s linear infinite\n    }.captcha-demo .mt-done{\n      position: absolute;\n      inset: 0;\n      display: none;\n      place-items: center;\n      align-content: center;\n      gap: 4px;\n      background: rgba(255, 255, 255, .9);\n      color: #1b7a48;\n      font-size: 15px;\n      font-weight: 700\n    }.captcha-demo .mt-done svg{\n      width: 34px;\n      height: 34px;\n      stroke: #1b7a48;\n      stroke-width: 3;\n      fill: none\n    }.captcha-demo .mt.ok .mt-done{\n      display: grid\n    }.captcha-demo .mt-row{\n      display: flex;\n      align-items: stretch;\n      margin-top: 10px;\n      border: 1px solid #d9dde4;\n      border-radius: 4px;\n      background: #fff;\n      overflow: hidden;\n      transition: border-color .2s\n    }.captcha-demo .mt-row input[type=text]{\n      flex: 1;\n      min-width: 0;\n      width: auto;\n      background: transparent;\n      border: 0;\n      border-radius: 0;\n      color: #212121;\n      font-family: inherit;\n      font-size: 17px;\n      letter-spacing: .06em;\n      padding: 13px 14px\n    }.captcha-demo .mt-row input[type=text]::placeholder{\n      color: #9aa1ab;\n      letter-spacing: 0\n    }.captcha-demo .mt-row input[type=text]:focus{\n      outline: none;\n      box-shadow: none\n    }.captcha-demo .mt-reload{\n      width: 56px;\n      padding: 0;\n      border: 0;\n      border-left: 1px solid #d9dde4;\n      background: transparent;\n      color: #5f6773;\n      display: grid;\n      place-items: center;\n      cursor: pointer\n    }.captcha-demo .mt-reload:hover{\n      color: #212121;\n      background: #f4f6f9\n    }.captcha-demo .mt-reload svg{\n      width: 24px;\n      height: 24px;\n      fill: currentColor\n    }.captcha-demo .mt.bad .mt-row{\n      border-color: #e05a4c\n    }.captcha-demo .mt.ok .mt-row{\n      border-color: #2f8f5b\n    }.captcha-demo .mt-note{\n      min-height: 18px;\n      margin-top: 6px;\n      font-size: 12px;\n      line-height: 18px;\n      color: #8a929c\n    }.captcha-demo .mt-note.err{\n      color: var(--orange)\n    }\/* ---------- Slider challenge: DataDome-style puzzle ---------- *\/\n    .captcha-demo .dd{\n      width: 100%;\n      max-width: 380px;\n      background: #fff;\n      border: 1px solid #e3e5e9;\n      border-radius: 8px;\n      box-shadow: 0 1px 3px rgba(16, 24, 40, .09);\n      overflow: hidden\n    }.captcha-demo .dd-bar{\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 10px 12px;\n      background: #f7f8fa;\n      border-bottom: 1px solid #eceef1\n    }.captcha-demo .dd-mode{\n      width: 46px;\n      height: 32px;\n      border: 1px solid #2f6fed;\n      border-radius: 6px;\n      background: #fff;\n      color: #2f6fed;\n      display: grid;\n      place-items: center\n    }.captcha-demo .dd-mode svg{\n      width: 20px;\n      height: 20px;\n      fill: currentColor\n    }.captcha-demo .dd-refresh{\n      width: 32px;\n      height: 32px;\n      padding: 0;\n      border: 0;\n      border-radius: 6px;\n      background: none;\n      color: #5f6773;\n      display: grid;\n      place-items: center;\n      cursor: pointer\n    }.captcha-demo .dd-refresh:hover{\n      background: #eceef1;\n      color: #212121\n    }.captcha-demo .dd-refresh svg{\n      width: 22px;\n      height: 22px;\n      fill: currentColor\n    }.captcha-demo .dd-stage{\n      position: relative;\n      aspect-ratio: 600\/320;\n      margin: 14px;\n      border-radius: 3px;\n      overflow: hidden;\n      background: #dfe3e8\n    }.captcha-demo .dd-stage svg{\n      position: absolute;\n      inset: 0;\n      width: 100%;\n      height: 100%;\n      display: block\n    }.captcha-demo .dd-hole{\n      fill: rgba(196, 201, 210, .82);\n      stroke: rgba(255, 255, 255, .55);\n      stroke-width: 2\n    }.captcha-demo .dd-edge{\n      fill: none;\n      stroke: #f2b035;\n      stroke-width: 3.5\n    }.captcha-demo .dd.ok .dd-edge{\n      stroke: #3fbf7f\n    }.captcha-demo .dd-piece{\n      filter: drop-shadow(0 2px 4px rgba(0, 0, 0, .45))\n    }.captcha-demo .dd-foot{\n      background: #f7f8fa;\n      border-top: 1px solid #eceef1;\n      padding: 14px 16px 16px\n    }.captcha-demo .dd-hint{\n      text-align: center;\n      font-size: 15px;\n      line-height: 22px;\n      color: #3c4350;\n      margin-bottom: 12px\n    }.captcha-demo .dd.ok .dd-hint{\n      color: #1b7a48;\n      font-weight: 700\n    }.captcha-demo .dd-track{\n      position: relative;\n      height: 48px;\n      border: 1px solid #d7dae0;\n      border-radius: 6px;\n      background: #fff;\n      touch-action: none\n    }.captcha-demo .dd-handle{\n      position: absolute;\n      left: 0;\n      top: -1px;\n      width: 72px;\n      height: 48px;\n      border: 1px solid #9aa1ab;\n      border-radius: 6px;\n      background: #fff;\n      color: #3c4350;\n      display: grid;\n      place-items: center;\n      cursor: grab;\n      box-shadow: 0 1px 2px rgba(16, 24, 40, .14);\n      touch-action: none\n    }.captcha-demo .dd-handle:active{\n      cursor: grabbing\n    }.captcha-demo .dd-handle:focus-visible{\n      outline: none;\n      border-color: #2f6fed;\n      box-shadow: 0 0 0 4px rgba(47, 111, 237, .25)\n    }.captcha-demo .dd-handle svg{\n      width: 22px;\n      height: 22px\n    }.captcha-demo .dd.ok .dd-handle{\n      border-color: #2f8f5b;\n      color: #1b7a48;\n      cursor: default\n    }.captcha-demo .dd.bad .dd-track{\n      border-color: #e05a4c\n    }.captcha-demo .dd-note{\n      min-height: 18px;\n      margin-top: 8px;\n      font-size: 12px;\n      line-height: 18px;\n      text-align: center;\n      color: #8a929c\n    }.captcha-demo .dd-note.err{\n      color: var(--orange)\n    }.captcha-demo .shake{\n      animation: shake .32s ease\n    }\n\n    @keyframes shake {\n      25% {\n        transform: translateX(-7px)\n      }\n\n      75% {\n        transform: translateX(7px)\n      }\n    }\n\n    @media(max-width:767px) {.captcha-demo .form-card{\n        padding: 32px 20px\n      }\n    }\/* ---------- Results bars ---------- *\/\n    .captcha-demo .bars{\n      width: 100%;\n      max-width: none;\n      display: grid;\n      gap: 16px;\n      margin-top: 32px;\n      max-width: 820px\n    }.captcha-demo .bar-row{\n      width: 100%;\n      display: grid;\n      grid-template-columns: minmax(140px, 230px) 1fr;\n      gap: 16px;\n      align-items: center\n    }.captcha-demo .bar-name{\n      font-size: 16px;\n      font-weight: 400;\n      color: var(--heading)\n    }.captcha-demo .bar-track{\n      width: 100%;\n      position: relative;\n      height: 38px;\n      background: var(--bg-soft);\n      border-radius: 4px;\n      overflow: hidden\n    }.captcha-demo .bar-track i{\n      position: absolute;\n      inset: 0 auto 0 0;\n      width: var(--fill, 0%);\n      background: var(--accent);\n      transition: width .7s cubic-bezier(.2,.7,.3,1)\n    }.captcha-demo .bar-row.good .bar-track i{\n      background: var(--lime)\n    }.captcha-demo .bar-val{\n      position: absolute;\n      right: 12px;\n      top: 50%;\n      transform: translateY(-50%);\n      font-size: 14px;\n      color: var(--heading);\n      font-variant-numeric: tabular-nums\n    }.captcha-demo .bar-row.pending .bar-val{\n      color: #8A929C\n    }\n    \/* the same value again in the fill colour, shown only over the filled part *\/\n    .captcha-demo .bar-track .bar-val--on{\n      inset: 0;\n      transform: none;\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      padding-right: 12px;\n      clip-path: inset(0 calc(100% - var(--fill, 0%)) 0 0);\n      transition: clip-path .7s cubic-bezier(.2,.7,.3,1);\n      pointer-events: none\n    }.captcha-demo .bar-track .bar-val.bar-val--on{\n      color: #fff\n    }.captcha-demo .bar-row.good .bar-track .bar-val.bar-val--on{\n      color: var(--heading)\n    }\n    \/* The takeaway lines are native Elementor widgets with the CSS class cd-takeaway.\n       The script shows the one that fits; the Elementor editor shows all of them. *\/\n    .cd-takeaway{\n      border-left: 4px solid #FFC400;\n      padding-left: 18px\n    }.cd-takeaway:not(.is-active){\n      display: none\n    }body.elementor-editor-active .cd-takeaway:not(.is-active){\n      display: block;\n      opacity: .6\n    }\n    @media(max-width:560px) {.captcha-demo .bar-row{\n        grid-template-columns: 1fr;\n        gap: 6px\n      }\n    }\n\n    @media (prefers-reduced-motion:reduce) {.captcha-demo *{\n        animation-duration: .001ms !important;\n        transition-duration: .001ms !important\n      }.captcha-demo{\n        scroll-behavior: auto\n      }\n    }\n    .captcha-demo .sent h3.captcha-demo__heading{\n      font-family: var(--e-global-typography-primary-font-family, inherit);\n      font-size: var(--e-global-typography-primary-font-size, 20px);\n      font-weight: var(--e-global-typography-primary-font-weight, 700);\n      line-height: var(--e-global-typography-primary-line-height, 1.3);\n      color: var(--heading);\n    }.captcha-demo .chooser-label,\n    .captcha-demo .form-card .sub,\n    .captcha-demo label,\n    .captcha-demo .bar-name,\n    .captcha-demo .bar-val,\n    .captcha-demo .cost,\n    .captcha-demo .cap-label,\n    .captcha-demo .chal-title,\n    .captcha-demo .chal-provider{\n      font-family: var(--e-global-typography-text-font-family, inherit);\n      font-size: var(--e-global-typography-text-font-size, 16px);\n      font-weight: var(--e-global-typography-text-font-weight, 400);\n      line-height: var(--e-global-typography-text-line-height, 1.5);\n      color: var(--e-global-color-text, var(--text));\n    }.captcha-demo .btn,\n    .captcha-demo .swopt,\n    .captcha-demo input,\n    .captcha-demo textarea{\n      font-family: var(--e-global-typography-text-font-family, inherit);\n    }.captcha-demo{\n      width: 100%;\n      max-width: none;\n      overflow: visible;\n    }.captcha-demo .elementor-element-07680dd > .elementor-widget-container{\n      margin: 0 0 -10px 0;\n    }.captcha-demo .elementor-element-07680dd .elementor-heading-title{\n      font-family: var(--e-global-typography-secondary-font-family, inherit);\n      font-size: var(--e-global-typography-secondary-font-size, 20px);\n      font-weight: var(--e-global-typography-secondary-font-weight, 700);\n      line-height: var(--e-global-typography-secondary-line-height, 1.3);\n    }\n    @media(max-width:1024px){\n      .captcha-demo .elementor-element-07680dd .elementor-heading-title{\n        font-size: var(--e-global-typography-secondary-font-size, 20px);\n        line-height: var(--e-global-typography-secondary-line-height, 1.3);\n      }\n    }\n  <\/style>\n  <script type=\"module\">\n    import { FriendlyCaptchaSDK } from \"https:\/\/cdn.jsdelivr.net\/npm\/@friendlycaptcha\/sdk@0.1\/+esm\";\n\n    const mount = document.getElementById(\"frcMount\");\n    if (mount && !window.frcWidget) try {\n      const sdk = new FriendlyCaptchaSDK();\n      const widget = sdk.createWidget({\n        element: mount,\n        sitekey: \"FCMGEMUD2M567T8G\",   \/\/ same application as the widget on the homepage\n        apiEndpoint: \"eu\",             \/\/ homepage widget uses the dedicated EU endpoint\n        theme: \"light\",\n        startMode: \"none\"              \/\/ we call start() ourselves on the first click\n      });\n\n      window.frcWidget = widget;\n      window.dispatchEvent(new Event(\"frc:ready\"));\n    } catch (err) {\n      console.error(\"Friendly Captcha widget could not be created:\", err);\n    }\n  <\/script>\n  <script>\n    (function () {\n      \"use strict\";\n\n      \/* one copy only, even if this embed ends up on the page twice *\/\n      if (window.CaptchaDemo) return;\n      window.CaptchaDemo = { started: true };\n\n      \/* WP Rocket can delay this script until after the page has loaded, so don't\n         count on DOMContentLoaded still being ahead of us *\/\n      if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\n      else boot();\n\n      function boot() {\n\n        var el = function (id) { return document.getElementById(id); };\n        if (!el(\"testForm\")) return;          \/* no form embed on this page *\/\n        el(\"testForm\").addEventListener(\"submit\", function (e) { e.preventDefault(); });\n\n        \/* ---------- text ---------- *\/\n        \/* Every string the script shows lives in the embeds' HTML as\n           <span data-cd-text=\"key\">, so TranslatePress translates it with the rest of\n           the page. The English here is only the fallback for a string missing there.\n           {name} placeholders are filled in by the script. *\/\n        var TEXT = {\n          \"sub-image\": \"Solve the image CAPTCHA below.\",\n          \"sub-hcaptcha\": \"Solve the labelling CAPTCHA below.\",\n          \"sub-text\": \"Solve the text CAPTCHA below.\",\n          \"sub-slide\": \"Solve the slider CAPTCHA below.\",\n          \"sub-friendly\": \"Friendly Captcha is verifying you in the background. There is nothing to solve.\",\n          \"title-image\": \"Select all images with crosswalks\",\n          \"title-hcaptcha\": \"Click each image containing a chicken on a tree\",\n          \"title-text\": \"Type the characters you see\",\n          \"title-slide\": \"Slide the piece into place\",\n          \"provider-image\": \"as used by reCAPTCHA v2\",\n          \"provider-hcaptcha\": \"as used by hCaptcha\",\n          \"provider-text\": \"as used by MTCaptcha\",\n          \"provider-slide\": \"as used by DataDome\",\n          \"cap-human\": \"I am human\",\n          \"cap-verifying\": \"Verifying\u2026\",\n          \"cap-brand\": \"Friendly Captcha\",\n          \"sent-image\": \"The image CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.\",\n          \"sent-hcaptcha\": \"The labelling CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.\",\n          \"sent-text\": \"The text CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.\",\n          \"sent-slide\": \"The slider CAPTCHA took <b>{seconds}<\/b> and <b>{clicks}<\/b> to solve.\",\n          \"sent-friendly\": \"Friendly Captcha verified you in the background in <b>{seconds}<\/b>, with <b>no extra clicks<\/b>.\",\n          \"second-one\": \"{n} second\",\n          \"second-other\": \"{n} seconds\",\n          \"click-one\": \"{n} click\",\n          \"click-other\": \"{n} clicks\",\n          \"try-image\": \"Try an image CAPTCHA\",\n          \"try-hcaptcha\": \"Try a labelling CAPTCHA\",\n          \"try-text\": \"Try a text CAPTCHA\",\n          \"try-slide\": \"Try a slider CAPTCHA\",\n          \"try-friendly\": \"Try an invisible CAPTCHA\",\n          \"brand-sub\": \"simulation\",\n          \"try-again\": \"Please try again.\",\n          \"verified\": \"Verified\",\n          \"rc-checkbox\": \"I'm not a robot\",\n          \"rc-brand\": \"Image<br>CAPTCHA\",\n          \"rc-pick-l1\": \"Select all images with\",\n          \"rc-square-l1\": \"Select all squares with\",\n          \"rc-target\": \"crosswalks\",\n          \"rc-square-l3\": \"If there are none, click skip\",\n          \"rc-dynamic-l3\": \"Click verify once there are none left\",\n          \"rc-verify\": \"VERIFY\",\n          \"rc-skip\": \"SKIP\",\n          \"rc-reload\": \"Get a new challenge\",\n          \"rc-select-all\": \"Please select all matching images.\",\n          \"hc-checkbox\": \"I am human\",\n          \"hc-brand\": \"Image<br>labelling\",\n          \"hc-ask\": \"Please click each image containing a <b>chicken on a tree<\/b>\",\n          \"hc-sub\": \"If there are None, click Skip\",\n          \"hc-example\": \"Example\",\n          \"hc-verify\": \"Verify\",\n          \"hc-skip\": \"Skip\",\n          \"mt-canvas\": \"Distorted text in an image\",\n          \"mt-input\": \"Enter text from image\",\n          \"mt-reload\": \"Get a new image\",\n          \"mt-mismatch\": \"That didn't match \u2014 here is a new image.\",\n          \"dd-reload\": \"Get a new puzzle\",\n          \"dd-hint\": \"Slide right to complete the puzzle.\",\n          \"dd-handle\": \"Slide the piece into the gap\",\n          \"dd-bot\": \"That movement looked automated. Please slide it by hand.\",\n          \"dd-off\": \"The piece is not in the gap yet. Please try again.\",\n          \"label-image\": \"Image CAPTCHA\",\n          \"label-hcaptcha\": \"Labelling CAPTCHA\",\n          \"label-text\": \"Text CAPTCHA\",\n          \"label-slide\": \"Slider CAPTCHA\",\n          \"label-friendly\": \"Invisible CAPTCHA\",\n          \"chooser-value\": \"{seconds}s - {clicks}\",\n          \"bar-pending\": \"not tried yet\",\n          \"bar-value\": \"{seconds} s \u00b7 {clicks}\"\n        };\n        var STR = {};\n        document.querySelectorAll(\".captcha-demo [data-cd-text]\").forEach(function (n) {\n          STR[n.getAttribute(\"data-cd-text\")] = n.innerHTML.trim();\n        });\n        function fillIn(s, vars) {\n          return s.replace(\/\\{(\\w+)\\}\/g, function (m, k) { return vars && k in vars ? vars[k] : m; });\n        }\n        \/* t() gives markup for innerHTML, tx() plain text for textContent and attributes *\/\n        function t(key, vars) { return fillIn(key in STR ? STR[key] : (TEXT[key] || \"\"), vars); }\n        function tx(key, vars) { var d = document.createElement(\"div\"); d.innerHTML = t(key, vars); return d.textContent; }\n        function esc(s) { return String(s).replace(\/&\/g, \"&amp;\").replace(\/\"\/g, \"&quot;\").replace(\/<\/g, \"&lt;\"); }\n\n        var ORDER = [\"image\", \"hcaptcha\", \"text\", \"slide\", \"friendly\"];\n\n        var mode = \"image\";\n        var results = {};\n\n        var capBox = el(\"capBox\"), capLabel = el(\"capLabel\"),\n          capBrand = el(\"capBrand\"), capProgress = el(\"capProgress\"),\n          capBar = capProgress.querySelector(\"i\");\n\n        var chalBox = el(\"chalBox\"), chalMount = el(\"chalMount\"),\n          chalTitle = el(\"chalTitle\"), chalProvider = el(\"chalProvider\"),\n          chalStatus = el(\"chalStatus\");\n\n        \/* One timed attempt, covering the CAPTCHA only, never the form around it.\n           Traditional CAPTCHAs: from the first touch of the CAPTCHA until it is solved.\n           Friendly Captcha: from when it is picked until it has verified the visitor in\n           the background (it needs nothing from the visitor). *\/\n        var run = { t0: 0, clicks: 0, active: false, done: false };\n        var frc = { started: false, done: false };\n        var runSeq = 0;          \/* bumped on every reset, so a late result can't land on a new attempt *\/\n\n        \/* ---------- type chooser ---------- *\/\n        var opts = document.querySelectorAll(\".captcha-demo .swopt\");\n        opts.forEach(function (b) {\n          b.addEventListener(\"click\", function () { setMode(b.dataset.mode); });\n        });\n\n        \/* The light text over a fill is a second copy, cut off where the fill ends\n           (see .swopt-fill and .bar-val--on). Screen readers skip the copies. *\/\n        opts.forEach(function (b) {\n          var layer = document.createElement(\"span\");\n          layer.className = \"swopt-fill\";\n          layer.setAttribute(\"aria-hidden\", \"true\");\n          b.querySelectorAll(\".swopt-label, .done-dot\").forEach(function (n) { layer.appendChild(n.cloneNode(true)); });\n          b.appendChild(layer);\n        });\n        document.querySelectorAll(\".captcha-demo .bar-track\").forEach(function (track) {\n          var on = document.createElement(\"em\");\n          on.className = \"bar-val bar-val--on\";\n          on.setAttribute(\"aria-hidden\", \"true\");\n          track.appendChild(on);\n        });\n\n        \/* picking a type: the chooser, \"Try a \u2026\", or setCaptchaMode *\/\n        function setMode(next) {\n          mode = next;\n          if (window.onCaptchaMode) window.onCaptchaMode(next);\n          opts.forEach(function (b) {\n            b.classList.toggle(\"active\", b.dataset.mode === next);\n            b.classList.toggle(\"solved\", !!results[b.dataset.mode]);\n          });\n          drawBars();\n          resetForm(true);\n        }\n\n        \/* a fresh attempt at the current type. picked: the visitor chose it, which is\n           what sets Friendly Captcha going; the type pre-selected on page load wasn't. *\/\n        function resetForm(picked) {\n          el(\"formView\").style.display = \"\";\n          el(\"sentView\").classList.remove(\"show\");\n          runSeq++;\n          run = { t0: 0, clicks: 0, active: false, done: false };\n          el(\"message\").value = \"\";\n          capBox.classList.remove(\"verified\");\n          capBox.classList.toggle(\"friendly\", mode === \"friendly\");\n          frc = { started: false, done: false };\n          capBar.style.width = \"0%\";\n          if (window.frcWidget && window.frcWidget.reset) {\n            try { window.frcWidget.reset(); } catch (err) { }\n          }\n\n          if (mode === \"friendly\") {\n            chalBox.style.display = \"none\";\n            showFriendly(frcRealAvailable());\n            el(\"formSub\").textContent = tx(\"sub-friendly\");\n          } else {\n            capBox.style.display = \"none\";\n            el(\"frcReal\").style.display = \"none\";\n            el(\"formSub\").textContent = tx(\"sub-\" + mode);\n          }\n          mountChallenge();\n          if (picked && mode === \"friendly\") {\n            run = { t0: performance.now(), clicks: 0, active: true, done: false };\n            startFriendly();\n          }\n        }\n\n        \/* ---------- the real widget, with the simulation as fallback ---------- *\/\n        \/* The widget only mounts on a domain registered for this sitekey. Anywhere else\n           (local file, staging without the domain) we fall back to the simulated box. *\/\n        var realFailed = false;\n        function frcRealAvailable() {\n          return !!window.frcWidget && !realFailed;\n        }\n        function showFriendly(real) {\n          capBox.style.display = real ? \"none\" : \"\";\n          el(\"frcReal\").style.display = real ? \"\" : \"none\";\n          if (real) return;\n          capLabel.textContent = tx(\"cap-human\");\n          capBrand.textContent = tx(\"cap-brand\");\n          capBrand.className = \"cap-brand\";\n          capProgress.style.display = \"\";\n        }\n\n        \/* Friendly Captcha starts verifying the moment its type is picked; the clock\n           stops when it is done *\/\n        function startFriendly() {\n          frc.started = true;\n          if (frcRealAvailable()) {\n            try { window.frcWidget.start(); return; } catch (err) { console.error(err); realFailed = true; }\n          }\n          showFriendly(false);\n          simulateFriendly();\n        }\n\n        \/* the stand-in for the real widget: a short progress bar, then verified *\/\n        function simulateFriendly() {\n          var seq = runSeq, t0 = performance.now(), dur = 1900;\n          capLabel.textContent = tx(\"cap-verifying\");\n          (function step() {\n            if (seq !== runSeq) return;              \/* a new attempt has begun *\/\n            var p = Math.min(1, (performance.now() - t0) \/ dur);\n            capBar.style.width = (p * 100) + \"%\";\n            if (p < 1) { requestAnimationFrame(step); return; }\n            frc.done = true;\n            capBox.classList.add(\"verified\");\n            capLabel.textContent = tx(\"cap-human\");\n            finishRun();\n          })();\n        }\n\n        \/* if the real widget can't verify here at all (e.g. a domain the sitekey\n           doesn't know), the simulation takes over without restarting the clock *\/\n        var hooked = false;\n        function hookWidget() {\n          var w = window.frcWidget;\n          if (!w || hooked || !w.addEventListener) return;\n          hooked = true;\n          w.addEventListener(\"frc:widget.complete\", function () {\n            if (mode !== \"friendly\" || !frc.started || frc.done) return;\n            frc.done = true;\n            finishRun();\n          });\n          w.addEventListener(\"frc:widget.error\", function () {\n            if (realFailed) return;\n            realFailed = true;\n            if (mode === \"friendly\" && frc.started && !frc.done) {\n              showFriendly(false);\n              simulateFriendly();\n            }\n          });\n        }\n        \/* the SDK can arrive after the script; show the real widget once it is there,\n           unless an attempt with the simulation is already under way *\/\n        function refreshFriendly() {\n          hookWidget();\n          if (mode === \"friendly\" && !frc.started) showFriendly(frcRealAvailable());\n        }\n        window.addEventListener(\"frc:ready\", refreshFriendly);\n        setTimeout(refreshFriendly, 1500);\n        hookWidget();\n\n        \/* ---------- the challenge sits in the form ---------- *\/\n        function mountChallenge() {\n          chalMount.innerHTML = \"\";\n          chalStatus.textContent = \"\";\n          chalStatus.className = \"status\";\n          if (mode === \"friendly\") {\n            chalBox.style.display = \"none\";\n            return;\n          }\n          chalBox.style.display = \"\";\n          chalBox.classList.toggle(\"bare\", mode !== \"friendly\");\n          if (mode === \"image\") buildRecaptcha();\n          if (mode === \"hcaptcha\") buildHcaptcha();\n          if (mode === \"text\") buildText();\n          if (mode === \"slide\") buildSlide();\n          chalTitle.textContent = tx(\"title-\" + mode);\n          chalProvider.textContent = tx(\"provider-\" + mode);\n        }\n\n        \/* A traditional CAPTCHA's clock starts with the first touch of the CAPTCHA\n           itself (a click, or tabbing into it), so time spent on the form doesn't count.\n           Every click on the CAPTCHA counts; clicks elsewhere don't. *\/\n        function startClock() {\n          if (mode === \"friendly\" || run.active || run.done) return;\n          run = { t0: performance.now(), clicks: 0, active: true, done: false };\n        }\n        chalBox.addEventListener(\"focusin\", startClock);\n        chalBox.addEventListener(\"pointerdown\", function () {\n          startClock();\n          if (run.active) run.clicks++;\n        });\n\n        \/* the challenges call this the moment they are solved; one that has been\n           swapped out in the meantime (another type picked) no longer counts *\/\n        function challengeSolved(widget) {\n          if (mode !== \"friendly\" && widget.isConnected) finishRun();\n        }\n\n        \/* ---------- Image challenge: reCAPTCHA v2 look-alike ---------- *\/\n        \/* Everything is cut out of one photo (captcha-test-crosswalk.png, 1536x1024). A tile shows a\n           square window of that photo, given in source pixels: {x,y,s}.\n           hit 1 = has to be selected, 0 = must not be, 2 = the crossing only clips the\n           edge of that square, so selecting it or leaving it is both accepted. *\/\n        var RC_SRC = \"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2026\/10\/captcha-test-crosswalk.png.webp\", RC_W = 1536, RC_H = 1024;\n\n        \/* windows without a crosswalk \u2014 fa\u00e7ades, pavement, the street above the crossing *\/\n        var RC_MISS = [\n          { x: 0, y: 0, s: 300 }, { x: 180, y: 0, s: 280 }, { x: 600, y: 250, s: 260 },\n          { x: 940, y: 320, s: 260 }, { x: 1150, y: 0, s: 320 }, { x: 1280, y: 150, s: 250 },\n          { x: 0, y: 380, s: 280 }, { x: 380, y: 480, s: 220 }, { x: 750, y: 0, s: 300 },\n          { x: 1000, y: 100, s: 260 }, { x: 0, y: 430, s: 260 }, { x: 430, y: 150, s: 280 }\n        ];\n        \/* windows that clearly show the zebra crossing *\/\n        var RC_HIT = [\n          { x: 250, y: 700, s: 260 }, { x: 520, y: 720, s: 260 }, { x: 800, y: 700, s: 260 },\n          { x: 1050, y: 690, s: 260 }, { x: 1250, y: 700, s: 280 }, { x: 150, y: 780, s: 240 },\n          { x: 650, y: 800, s: 220 }, { x: 900, y: 720, s: 240 }\n        ];\n        \/* the 4x4 board: one photo behind a grid. The top half is the street and the\n           buildings, row 3 is where the crossing begins, row 4 is the crossing. *\/\n        var RC_BOARD = { x: 256, y: 0, s: 1024 };\n        var RC_BOARD_HITS = [0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1];\n\n        \/* the three challenges Google hands out, in turn *\/\n        var RC_KINDS = [\"pick\", \"square\", \"dynamic\"], rcTurn = 0;\n\n        var RC_ICONS =\n          '<button class=\"rc-ic\" type=\"button\" title=\"' + esc(tx(\"rc-reload\")) + '\" aria-label=\"' + esc(tx(\"rc-reload\")) + '\" data-act=\"reload\">' +\n          '<svg viewBox=\"0 0 24 24\"><path d=\"M17.65 6.35A7.96 7.96 0 0 0 12 4a8 8 0 1 0 7.73 10h-2.08A6 6 0 1 1 12 6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"\/><\/svg>' +\n          '<\/button>';\n\n        function rcShuffle(list) {\n          var a = list.slice();\n          for (var i = a.length - 1; i > 0; i--) {\n            var j = Math.floor(Math.random() * (i + 1)), t = a[i];\n            a[i] = a[j]; a[j] = t;\n          }\n          return a;\n        }\n\n        function buildRecaptcha() {\n          var wrap = document.createElement(\"div\");\n          wrap.className = \"rc\";\n          wrap.innerHTML =\n            '<div class=\"rc-anchor\">' +\n            '<div class=\"rc-cb-holder\">' +\n            '<button class=\"rc-cb\" type=\"button\" role=\"checkbox\" aria-checked=\"false\" aria-label=\"' + esc(tx(\"rc-checkbox\")) + '\"><\/button>' +\n            '<div class=\"rc-spin\"><\/div>' +\n            '<svg class=\"rc-tick\" viewBox=\"0 0 24 24\"><path d=\"M4 13l5 5L20 6\"\/><\/svg>' +\n            '<\/div>' +\n            '<span class=\"rc-label\">' + t(\"rc-checkbox\") + '<\/span>' +\n            '<div class=\"rc-brand\">' +\n            '<div class=\"nm\">' + t(\"rc-brand\") + '<\/div>' +\n            '<div class=\"pt\">' + t(\"brand-sub\") + '<\/div>' +\n            '<\/div>' +\n            '<\/div>' +\n            '<div class=\"rc-bubble\">' +\n            '<div class=\"rc-head\">' +\n            '<div class=\"l1\">' + t(\"rc-pick-l1\") + '<\/div>' +\n            '<div class=\"l2\">' + t(\"rc-target\") + '<\/div>' +\n            '<div class=\"l3\"><\/div>' +\n            '<\/div>' +\n            '<div class=\"rc-body\"><div class=\"rc-grid\"><\/div><div class=\"rc-load\"><i><\/i><\/div><\/div>' +\n            '<div class=\"rc-err\" role=\"alert\"><\/div>' +\n            '<div class=\"rc-foot\">' + RC_ICONS + '<button class=\"rc-verify\" type=\"button\">' + t(\"rc-verify\") + '<\/button><\/div>' +\n            '<\/div>';\n          chalMount.appendChild(wrap);\n\n          var holder = wrap.querySelector(\".rc-cb-holder\"),\n            cb = wrap.querySelector(\".rc-cb\"),\n            bubble = wrap.querySelector(\".rc-bubble\"),\n            l1 = wrap.querySelector(\".rc-head .l1\"),\n            l3 = wrap.querySelector(\".rc-head .l3\"),\n            grid = wrap.querySelector(\".rc-grid\"),\n            errLine = wrap.querySelector(\".rc-err\"),\n            verify = wrap.querySelector(\".rc-verify\");\n\n          var tiles = [], kind = \"pick\", solved = false, busy = false;\n\n          function place(img, win) {\n            img.style.width = (RC_W \/ win.s * 100) + \"%\";\n            img.style.left = (-win.x \/ win.s * 100) + \"%\";\n            img.style.top = (-win.y \/ win.s * 100) + \"%\";\n          }\n\n          function tile(win, hit) {\n            var b = document.createElement(\"button\");\n            b.type = \"button\";\n            b.className = \"rc-tile\";\n            b.setAttribute(\"aria-pressed\", \"false\");\n            b.dataset.hit = String(hit);\n            b.win = win;\n            \/* width and height give the photo its shape before it has loaded. Without them\n             Safari's lazy loading sees a zero-height image outside the tile and never loads it. *\/\n          b.innerHTML = '<span class=\"shot\"><img title=\"Interactive Sample Form with CAPTCHA Test 1\" decoding=\"async\" src=\"' + RC_SRC + '\" alt=\"&#039; + RC SRC + &#039;\" loading=\"lazy\" width=\"' + RC_W + '\" height=\"' + RC_H + '\"><\/span>' +\n              '<span class=\"chk\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 13l5 5L20 6\"\/><\/svg><\/span>';\n            place(b.querySelector(\"img\"), win);\n            b.addEventListener(\"click\", function () {\n              if (busy || solved) return;\n              b.setAttribute(\"aria-pressed\", b.classList.toggle(\"sel\") ? \"true\" : \"false\");\n              syncButton();\n            });\n            return b;\n          }\n\n          \/* nine separate photos, three or four of them showing the crossing *\/\n          function fillPhotos() {\n            grid.innerHTML = \"\"; tiles = [];\n            var n = 3 + Math.floor(Math.random() * 2), cards = [];\n            rcShuffle(RC_HIT).slice(0, n).forEach(function (w) { cards.push({ w: w, hit: 1 }); });\n            rcShuffle(RC_MISS).slice(0, 9 - n).forEach(function (w) { cards.push({ w: w, hit: 0 }); });\n            rcShuffle(cards).forEach(function (c) {\n              var t = tile(c.w, c.hit);\n              grid.appendChild(t); tiles.push(t);\n            });\n          }\n\n          \/* one photo behind a 4x4 grid *\/\n          function fillBoard() {\n            grid.innerHTML = \"\"; tiles = [];\n            var s = RC_BOARD.s \/ 4;\n            for (var i = 0; i < 16; i++) {\n              var t = tile({ x: RC_BOARD.x + (i % 4) * s, y: RC_BOARD.y + Math.floor(i \/ 4) * s, s: s },\n                RC_BOARD_HITS[i]);\n              grid.appendChild(t); tiles.push(t);\n            }\n          }\n\n          \/* the dynamic one: solved tiles fade out and photos without a crossing fade\n             in, so the next VERIFY \u2014 with nothing left to select \u2014 finishes it *\/\n          function refill(picked) {\n            busy = true;\n            var shown = tiles.map(function (t) { return t.win; }),\n              pool = rcShuffle(RC_MISS.filter(function (w) { return shown.indexOf(w) === -1; }));\n            picked.forEach(function (t) {\n              t.classList.remove(\"sel\");\n              t.classList.add(\"blank\");\n              t.setAttribute(\"aria-pressed\", \"false\");\n            });\n            setTimeout(function () {\n              picked.forEach(function (t, i) {\n                var w = pool[i % pool.length];\n                place(t.querySelector(\"img\"), w);\n                t.win = w;\n                t.dataset.hit = \"0\";\n              });\n              setTimeout(function () {\n                picked.forEach(function (t) { t.classList.remove(\"blank\"); });\n                busy = false;\n              }, 40);\n            }, 420);\n          }\n\n          function setKind(next) {\n            kind = next;\n            l1.textContent = tx(kind === \"square\" ? \"rc-square-l1\" : \"rc-pick-l1\");\n            l3.textContent = kind === \"square\" ? tx(\"rc-square-l3\") :\n              kind === \"dynamic\" ? tx(\"rc-dynamic-l3\") : \"\";\n            l3.style.display = l3.textContent ? \"\" : \"none\";\n            grid.className = \"rc-grid\" + (kind === \"square\" ? \" sq\" : \"\");\n            errLine.textContent = \"\";\n            if (kind === \"square\") fillBoard(); else fillPhotos();\n            syncButton();\n          }\n\n          function selected() { return tiles.filter(function (t) { return t.classList.contains(\"sel\"); }); }\n          function pending() { return tiles.filter(function (t) { return t.dataset.hit === \"1\" && !t.classList.contains(\"sel\"); }); }\n\n          \/* the 4x4 challenge offers SKIP until something is selected *\/\n          function syncButton() {\n            verify.textContent = tx((kind === \"square\" && !selected().length) ? \"rc-skip\" : \"rc-verify\");\n          }\n\n          function done() {\n            solved = true;\n            errLine.textContent = \"\";\n            bubble.classList.remove(\"open\");\n            holder.classList.add(\"done\");\n            cb.setAttribute(\"aria-checked\", \"true\");\n            chalStatus.className = \"status\";\n            chalStatus.textContent = \"\";\n            challengeSolved(wrap);\n          }\n\n          function open() {\n            if (solved || bubble.classList.contains(\"open\")) return;\n            holder.classList.add(\"busy\");\n            setTimeout(function () {\n              holder.classList.remove(\"busy\");\n              bubble.classList.add(\"open\");\n            }, 700);\n          }\n\n          cb.addEventListener(\"click\", open);\n\n          \/* clicking anywhere else on the page puts the bubble away again *\/\n          document.addEventListener(\"pointerdown\", function (e) {\n            if (!wrap.isConnected) return;\n            if (!wrap.contains(e.target)) bubble.classList.remove(\"open\");\n          });\n\n          \/* the answer goes off to be checked before anything happens *\/\n          verify.addEventListener(\"click\", function () {\n            if (busy || solved) return;\n            busy = true;\n            wrap.classList.add(\"busy\");\n            verify.disabled = true;\n            errLine.textContent = \"\";\n            setTimeout(function () {\n              busy = false;\n              wrap.classList.remove(\"busy\");\n              verify.disabled = false;\n              var picked = selected();\n              if (picked.some(function (t) { return t.dataset.hit === \"0\"; })) {\n                errLine.textContent = tx(\"try-again\");\n                setKind(kind);\n                return;\n              }\n              if (pending().length) {\n                errLine.textContent = tx(\"rc-select-all\");\n                return;\n              }\n              if (kind === \"dynamic\" && picked.length) { refill(picked); syncButton(); return; }\n              done();\n            }, 750);\n          });\n\n          wrap.querySelectorAll(\".rc-ic\").forEach(function (b) {\n            b.addEventListener(\"click\", function () {\n              \/* a new challenge \u2014 Google hands out another type here too *\/\n              if (b.dataset.act === \"reload\") setKind(RC_KINDS[rcTurn++ % RC_KINDS.length]);\n            });\n          });\n\n          setKind(RC_KINDS[rcTurn++ % RC_KINDS.length]);\n        }\n\n        \/* ---------- hCaptcha-style image labelling ---------- *\/\n        \/* The challenge sheets are the generated mock-ups in this folder: one header\n           plus a 3x3 grid of photos. Each tile is cut out of its sheet by position.\n           \"flags\" grades the nine tiles, reading left to right, top to bottom:\n             1 = a chicken on a tree, has to be selected\n             0 = not a chicken at all (penguin, blue tit, chickadee, duck) \u2014 wrong\n             2 = a chicken, but on a roof, a fence or the ground. Whether you count\n                 those is a judgement call, so either answer is accepted. *\/\n        var HC_EXAMPLE = \"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2026\/10\/captcha-test-chicken.png.webp\";\n        var HC_SHEETS = [\n          { src: \"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2026\/10\/captcha-test-chicken2.png.webp\", flags: \"102010021\" },\n          { src: \"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2026\/10\/captcha-test-chicken3.png.webp\", flags: \"102101021\" },\n          { src: \"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2026\/10\/captcha-test-chicken4.png.webp\", flags: \"102010200\" },\n          { src: \"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2026\/10\/captcha-test-chicken5.png.webp\", flags: \"100210001\" }\n        ];\n        \/* where the nine photos sit inside a 1122x1402 sheet *\/\n        var HC_W = 1122, HC_H = 1402, HC_CELL = 300, HC_X = [49, 410, 773], HC_Y = [333, 675, 1026];\n        var hcTurn = Math.floor(Math.random() * HC_SHEETS.length);\n\n        function buildHcaptcha() {\n          var wrap = document.createElement(\"div\");\n          wrap.className = \"hc\";\n          wrap.innerHTML =\n            '<div class=\"hc-anchor\">' +\n            '<div class=\"hc-cb-holder\">' +\n            '<button class=\"hc-cb\" type=\"button\" role=\"checkbox\" aria-checked=\"false\" aria-label=\"' + esc(tx(\"hc-checkbox\")) + '\"><\/button>' +\n            '<div class=\"hc-spin\"><\/div>' +\n            '<svg class=\"hc-tick\" viewBox=\"0 0 24 24\"><path d=\"M4 13l5 5L20 6\"\/><\/svg>' +\n            '<\/div>' +\n            '<span class=\"hc-label\">' + t(\"hc-checkbox\") + '<\/span>' +\n            '<div class=\"hc-brand\"><div class=\"nm\">' + t(\"hc-brand\") + '<\/div><div class=\"pt\">' + t(\"brand-sub\") + '<\/div><\/div>' +\n            '<\/div>' +\n            '<div class=\"hc-panel\">' +\n            '<div class=\"hc-head\">' +\n            '<div class=\"hc-ask\">' +\n            '<div class=\"q\">' + t(\"hc-ask\") + '<\/div>' +\n            '<div class=\"hc-sub\">' + t(\"hc-sub\") + '<\/div>' +\n            '<\/div>' +\n            '<div class=\"hc-example\"><img alt=\"' + esc(tx(\"hc-example\")) + '\" loading=\"lazy\"><i>+<\/i><\/div>' +\n            '<\/div>' +\n            '<div class=\"hc-body\"><div class=\"hc-grid\"><\/div><div class=\"hc-load\"><i><\/i><\/div><\/div>' +\n            '<div class=\"hc-foot\">' +\n            '<span class=\"hc-err\" role=\"alert\"><\/span>' +\n            '<button class=\"hc-btn\" type=\"button\">' + t(\"hc-skip\") + '<\/button>' +\n            '<\/div>' +\n            '<\/div>';\n          chalMount.appendChild(wrap);\n\n          var holder = wrap.querySelector(\".hc-cb-holder\"),\n            cb = wrap.querySelector(\".hc-cb\"),\n            panel = wrap.querySelector(\".hc-panel\"),\n            grid = wrap.querySelector(\".hc-grid\"),\n            errLine = wrap.querySelector(\".hc-err\"),\n            btn = wrap.querySelector(\".hc-btn\");\n\n          wrap.querySelector(\".hc-example img\").src = HC_EXAMPLE;\n\n          var tiles = [], solved = false, busy = false;\n\n          function syncButton() {\n            btn.textContent = tx(tiles.some(function (t) { return t.classList.contains(\"sel\"); }) ? \"hc-verify\" : \"hc-skip\");\n          }\n\n          function fill() {\n            var sheet = HC_SHEETS[hcTurn++ % HC_SHEETS.length];\n            grid.innerHTML = \"\"; tiles = [];\n            for (var i = 0; i < 9; i++) {\n              var x = HC_X[i % 3], y = HC_Y[Math.floor(i \/ 3)];\n              var b = document.createElement(\"button\");\n              b.type = \"button\";\n              b.className = \"hc-tile\";\n              b.setAttribute(\"aria-pressed\", \"false\");\n              b.dataset.hit = sheet.flags.charAt(i);\n              b.innerHTML = '<img alt=\"\" loading=\"lazy\" width=\"' + HC_W + '\" height=\"' + HC_H + '\"><span class=\"hc-chk\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 13l5 5L20 6\"\/><\/svg><\/span>';\n              var img = b.querySelector(\"img\");\n              img.src = sheet.src;\n              img.style.width = (HC_W \/ HC_CELL * 100) + \"%\";\n              img.style.left = (-x \/ HC_CELL * 100) + \"%\";\n              img.style.top = (-y \/ HC_CELL * 100) + \"%\";\n              b.addEventListener(\"click\", function () {\n                if (solved || busy) return;\n                this.setAttribute(\"aria-pressed\", this.classList.toggle(\"sel\") ? \"true\" : \"false\");\n                syncButton();\n              });\n              grid.appendChild(b); tiles.push(b);\n            }\n            syncButton();\n          }\n\n          function done() {\n            solved = true;\n            errLine.textContent = \"\";\n            panel.classList.remove(\"open\");\n            holder.classList.add(\"done\");\n            cb.setAttribute(\"aria-checked\", \"true\");\n            chalStatus.className = \"status\";\n            chalStatus.textContent = \"\";\n            challengeSolved(wrap);\n          }\n\n          function open() {\n            if (solved || panel.classList.contains(\"open\")) return;\n            holder.classList.add(\"busy\");\n            setTimeout(function () {\n              holder.classList.remove(\"busy\");\n              panel.classList.add(\"open\");\n            }, 700);\n          }\n\n          cb.addEventListener(\"click\", open);\n\n          \/* clicking anywhere else on the page puts the panel away again *\/\n          document.addEventListener(\"pointerdown\", function (e) {\n            if (!wrap.isConnected) return;\n            if (!wrap.contains(e.target)) panel.classList.remove(\"open\");\n          });\n\n          \/* the answer goes off to be checked before anything happens *\/\n          btn.addEventListener(\"click\", function () {\n            if (solved || busy) return;\n            busy = true;\n            wrap.classList.add(\"busy\");\n            btn.disabled = true;\n            errLine.textContent = \"\";\n            setTimeout(function () {\n              busy = false;\n              wrap.classList.remove(\"busy\");\n              btn.disabled = false;\n              var wrong = tiles.some(function (t) { return t.classList.contains(\"sel\") && t.dataset.hit === \"0\"; }),\n                missing = tiles.some(function (t) { return t.dataset.hit === \"1\" && !t.classList.contains(\"sel\"); });\n              if (wrong || missing) {\n                errLine.textContent = tx(\"try-again\");\n                fill();\n                return;\n              }\n              done();\n            }, 750);\n          });\n\n          fill();\n        }\n\n        \/* ---------- Text challenge: MTCaptcha-style widget ---------- *\/\n        \/* A white card: a blurred watercolour wash behind big overlapping serif\n           letters, the text field with the reload button underneath. The letters sit\n           on a transparent canvas so the wash shows through them. *\/\n        var MT_CHARS = \"abcdefghjkmnpqrstuvwxyz23456789\";\n        var MT_WASH = [\"#ef9f3c\", \"#f3cf4a\", \"#a9d550\", \"#5cc79c\", \"#5fbfe4\", \"#8ed3f2\", \"#e98b6b\", \"#c9a5e0\"];\n\n        function buildText() {\n          var box = document.createElement(\"div\");\n          box.className = \"mt\";\n          box.innerHTML =\n            '<div class=\"mt-img\">' +\n            '<div class=\"mt-wash\"><\/div>' +\n            '<canvas width=\"600\" height=\"200\" aria-label=\"' + esc(tx(\"mt-canvas\")) + '\"><\/canvas>' +\n            '<div class=\"mt-busy\"><i><\/i><\/div>' +\n            '<div class=\"mt-done\"><svg viewBox=\"0 0 24 24\"><path d=\"M4 13l5 5L20 6\"\/><\/svg><span>' + t(\"verified\") + '<\/span><\/div>' +\n            '<\/div>' +\n            '<div class=\"mt-row\">' +\n            '<input type=\"text\" placeholder=\"' + esc(tx(\"mt-input\")) + '\" autocomplete=\"off\" spellcheck=\"false\" maxlength=\"5\" aria-label=\"' + esc(tx(\"mt-input\")) + '\">' +\n            '<button class=\"mt-reload\" type=\"button\" title=\"' + esc(tx(\"mt-reload\")) + '\" aria-label=\"' + esc(tx(\"mt-reload\")) + '\">' +\n            '<svg viewBox=\"0 0 24 24\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46A7.93 7.93 0 0 0 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74A7.93 7.93 0 0 0 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"\/><\/svg>' +\n            '<\/button>' +\n            '<\/div>' +\n            '<div class=\"mt-note\"><\/div>';\n          chalMount.appendChild(box);\n\n          var wash = box.querySelector(\".mt-wash\"),\n            canvas = box.querySelector(\"canvas\"), ctx = canvas.getContext(\"2d\"),\n            input = box.querySelector(\"input\"),\n            note = box.querySelector(\".mt-note\");\n\n          var code = \"\", solved = false, timer = null, W = canvas.width, H = canvas.height;\n\n          \/* the blurred colour wash behind the letters *\/\n          function paintWash() {\n            var start = Math.floor(Math.random() * MT_WASH.length), band = [], spots = [];\n            for (var i = 0; i < MT_WASH.length; i++) band.push(MT_WASH[(start + i) % MT_WASH.length]);\n            for (var b = 0; b < 3; b++) {\n              spots.push(\"radial-gradient(circle at \" + Math.round(Math.random() * 100) + \"% \" +\n                Math.round(Math.random() * 100) + \"%, \" + band[b] + \"99 0 14%, transparent 60%)\");\n            }\n            wash.style.backgroundImage = spots.join(\",\") + \",linear-gradient(\" +\n              Math.round(88 + Math.random() * 14) + \"deg,\" + band.join(\",\") + \")\";\n          }\n\n          \/* the dark disc that sits across the middle of the word *\/\n          function disc(from, to) {\n            ctx.save();\n            ctx.beginPath();\n            ctx.ellipse(from + Math.random() * (to - from), H * 0.52,\n              54 + Math.random() * 18, 50 + Math.random() * 16,\n              Math.random() * Math.PI, 0, Math.PI * 2);\n            ctx.fillStyle = \"rgba(34,44,14,\" + (0.45 + Math.random() * 0.2) + \")\";\n            ctx.fill();\n            ctx.restore();\n          }\n\n          function draw() {\n            code = \"\";\n            solved = false;\n            clearTimeout(timer);\n            box.classList.remove(\"ok\", \"bad\", \"busy\");\n            input.readOnly = false;\n            input.value = \"\";\n            note.className = \"mt-note\";\n            note.textContent = \"\";\n\n            paintWash();\n\n            ctx.setTransform(1, 0, 0, 1, 0, 0);\n            ctx.clearRect(0, 0, W, H);\n\n            var n = 5 + Math.floor(Math.random() * 2), size = 124,\n              step = size * 0.6,\n              left = (W - step * (n - 1)) \/ 2, x = left;\n\n            for (var i = 0; i < n; i++) {\n              var ch = MT_CHARS[Math.floor(Math.random() * MT_CHARS.length)];\n              if (Math.random() < 0.35) ch = ch.toUpperCase();\n              code += ch;\n              ctx.save();\n              ctx.translate(x, H * 0.66 + (Math.random() * 26 - 13));\n              ctx.rotate(Math.random() * 0.3 - 0.15);\n              ctx.transform(1, Math.random() * .12 - .06, Math.random() * .22 - .11, 1, 0, 0);\n              ctx.font = \"700 \" + Math.round(size * (0.88 + Math.random() * 0.26)) + 'px Georgia, \"Times New Roman\", serif';\n              ctx.fillStyle = \"hsl(\" + Math.round(6 + Math.random() * 20) + \",\" +\n                Math.round(52 + Math.random() * 20) + \"%,\" +\n                Math.round(25 + Math.random() * 11) + \"%)\";\n              ctx.shadowColor = \"rgba(0,0,0,.3)\";\n              ctx.shadowBlur = 5;\n              ctx.shadowOffsetY = 2;\n              if (ctx.filter !== undefined) ctx.filter = \"blur(\" + (Math.random() * 0.7).toFixed(2) + \"px)\";\n              ctx.textAlign = \"center\";\n              ctx.fillText(ch, 0, 0);\n              ctx.restore();\n              x += step;\n            }\n            if (ctx.filter !== undefined) ctx.filter = \"none\";\n            disc(left + step * 0.6, left + step * (n - 1.6));\n            input.maxLength = n;\n          }\n\n          function settle() {\n            if (input.value.trim().toUpperCase() === code.toUpperCase()) {\n              solved = true;\n              box.classList.remove(\"bad\");\n              box.classList.add(\"busy\");\n              input.readOnly = true;\n              note.className = \"mt-note\";\n              note.textContent = \"\";\n              clearTimeout(timer);\n              timer = setTimeout(function () {\n                box.classList.remove(\"busy\");\n                box.classList.add(\"ok\");\n                challengeSolved(box);\n              }, 750);\n              return true;\n            }\n            box.classList.add(\"bad\");\n            note.className = \"mt-note err\";\n            note.textContent = tx(\"mt-mismatch\");\n            clearTimeout(timer);\n            timer = setTimeout(function () {\n              var msg = note.textContent;\n              draw();\n              note.className = \"mt-note err\";\n              note.textContent = msg;\n              input.focus();\n            }, 850);\n            return false;\n          }\n\n          draw();\n\n          input.addEventListener(\"input\", function () {\n            box.classList.remove(\"bad\");\n            if (!solved && input.value.trim().length >= code.length) settle();\n          });\n          \/* Enter checks what has been typed so far *\/\n          input.addEventListener(\"keydown\", function (e) {\n            if (e.key !== \"Enter\") return;\n            e.preventDefault();\n            if (!solved && input.value.trim()) settle();\n          });\n          box.querySelector(\".mt-reload\").addEventListener(\"click\", function () { draw(); input.focus(); });\n        }\n\n        \/* ---------- Slider challenge: DataDome-style puzzle ---------- *\/\n        \/* A piece is cut out of the photo; you push it back into its gap with the\n           slider. Everything lives in one 600x320 SVG user space, so the widget\n           scales to any width without the maths changing. *\/\n        var DD_W = 600, DD_H = 320, DD_S = 88, DD_PAD = 18, DD_SEQ = 0;\n\n        \/* a jigsaw outline: knob on top, socket on the right, knob on the left *\/\n        function ddPath(S) {\n          var k = S * 0.22, m = S \/ 2;\n          return \"M0,0\" +\n            \"H\" + (m - k) +\n            \"C\" + (m - k * 1.3) + \",\" + (-k * 0.85) + \" \" + (m + k * 1.3) + \",\" + (-k * 0.85) + \" \" + (m + k) + \",0\" +\n            \"H\" + S +\n            \"V\" + (m - k) +\n            \"C\" + (S - k * 1.3) + \",\" + (m - k * 1.3) + \" \" + (S - k * 1.3) + \",\" + (m + k * 1.3) + \" \" + S + \",\" + (m + k) +\n            \"V\" + S +\n            \"H0\" +\n            \"V\" + (m + k) +\n            \"C\" + (-k * 1.3) + \",\" + (m + k * 1.3) + \" \" + (-k * 1.3) + \",\" + (m - k * 1.3) + \" 0,\" + (m - k) +\n            \"Z\";\n        }\n\n        function buildSlide() {\n          var clip = \"ddclip\" + (++DD_SEQ), path = ddPath(DD_S);\n          var box = document.createElement(\"div\");\n          box.className = \"dd\";\n          box.innerHTML =\n            '<div class=\"dd-bar\">' +\n            '<span class=\"dd-mode\" aria-hidden=\"true\">' +\n            '<svg viewBox=\"0 0 24 24\"><path d=\"M21 19V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"\/><\/svg>' +\n            '<\/span>' +\n            '<button class=\"dd-refresh\" type=\"button\" title=\"' + esc(tx(\"dd-reload\")) + '\" aria-label=\"' + esc(tx(\"dd-reload\")) + '\">' +\n            '<svg viewBox=\"0 0 24 24\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46A7.93 7.93 0 0 0 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74A7.93 7.93 0 0 0 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"\/><\/svg>' +\n            '<\/button>' +\n            '<\/div>' +\n            '<div class=\"dd-stage\">' +\n            '<svg viewBox=\"0 0 ' + DD_W + ' ' + DD_H + '\" preserveAspectRatio=\"none\">' +\n            '<defs><clipPath id=\"' + clip + '\"><path class=\"dd-cut\" d=\"' + path + '\"\/><\/clipPath><\/defs>' +\n            '<image class=\"dd-bg\" href=\"' + RC_SRC + '\" preserveAspectRatio=\"xMidYMid slice\"\/>' +\n            '<path class=\"dd-hole\" d=\"' + path + '\"\/>' +\n            '<g class=\"dd-piece\">' +\n            '<g clip-path=\"url(#' + clip + ')\">' +\n            '<image class=\"dd-cutimg\" href=\"' + RC_SRC + '\" preserveAspectRatio=\"xMidYMid slice\"\/>' +\n            '<\/g>' +\n            '<path class=\"dd-edge\" d=\"' + path + '\"\/>' +\n            '<\/g>' +\n            '<\/svg>' +\n            '<\/div>' +\n            '<div class=\"dd-foot\">' +\n            '<div class=\"dd-hint\">' + t(\"dd-hint\") + '<\/div>' +\n            '<div class=\"dd-track\">' +\n            '<div class=\"dd-handle\" role=\"slider\" tabindex=\"0\" aria-label=\"' + esc(tx(\"dd-handle\")) + '\"' +\n            ' aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"0\">' +\n            '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 12h14M13 6l6 6-6 6\"\/><\/svg>' +\n            '<\/div>' +\n            '<\/div>' +\n            '<div class=\"dd-note\"><\/div>' +\n            '<\/div>';\n          chalMount.appendChild(box);\n\n          var stage = box.querySelector(\".dd-stage\"),\n            bg = box.querySelector(\".dd-bg\"),\n            cutimg = box.querySelector(\".dd-cutimg\"),\n            cut = box.querySelector(\".dd-cut\"),\n            hole = box.querySelector(\".dd-hole\"),\n            piece = box.querySelector(\".dd-piece\"),\n            hint = box.querySelector(\".dd-hint\"),\n            track = box.querySelector(\".dd-track\"),\n            handle = box.querySelector(\".dd-handle\"),\n            note = box.querySelector(\".dd-note\");\n\n          var minX = DD_PAD + DD_S * 0.3, maxX = DD_W - DD_S - DD_PAD,\n            holeX = 0, holeY = 0, p = 0, solved = false,\n            move = { steps: 0, t0: 0, on: false };\n\n          function pieceX() { return minX + p * (maxX - minX); }\n\n          function render() {\n            piece.setAttribute(\"transform\", \"translate(\" + (pieceX() - holeX) + \",0)\");\n            handle.style.left = (p * (track.clientWidth - handle.offsetWidth)) + \"px\";\n            handle.setAttribute(\"aria-valuenow\", Math.round(p * 100));\n          }\n\n          function place() {\n            solved = false;\n            box.classList.remove(\"ok\", \"bad\");\n            note.className = \"dd-note\";\n            note.textContent = \"\";\n            hint.textContent = tx(\"dd-hint\");\n\n            \/* a different crop of the photo for every puzzle *\/\n            var zoom = 1 + Math.random() * 0.5,\n              w = DD_W * zoom, h = DD_H * zoom,\n              ox = -Math.random() * (w - DD_W), oy = -Math.random() * (h - DD_H);\n            [bg, cutimg].forEach(function (img) {\n              img.setAttribute(\"x\", ox); img.setAttribute(\"y\", oy);\n              img.setAttribute(\"width\", w); img.setAttribute(\"height\", h);\n            });\n\n            holeX = minX + (0.45 + Math.random() * 0.55) * (maxX - minX);\n            holeY = DD_PAD + DD_S * 0.25 + Math.random() * (DD_H - DD_S - DD_PAD * 2 - DD_S * 0.25);\n            var at = \"translate(\" + holeX + \",\" + holeY + \")\";\n            hole.setAttribute(\"transform\", at);\n            cut.setAttribute(\"transform\", at);\n            box.querySelector(\".dd-edge\").setAttribute(\"transform\", at);\n\n            p = 0;\n            move = { steps: 0, t0: 0, on: false };\n            render();\n          }\n\n          function settle() {\n            var off = Math.abs(pieceX() - holeX), dur = performance.now() - move.t0;\n\n            if (move.steps < 3 || dur < 150) {\n              return fail(tx(\"dd-bot\"));\n            }\n            if (off > DD_S * 0.14) {\n              return fail(tx(\"dd-off\"));\n            }\n\n            solved = true;\n            p = (holeX - minX) \/ (maxX - minX);           \/* snap it home *\/\n            render();\n            box.classList.remove(\"bad\");\n            box.classList.add(\"ok\");\n            hint.textContent = tx(\"verified\");\n            note.textContent = \"\";\n            chalStatus.className = \"status\";\n            chalStatus.textContent = \"\";\n            challengeSolved(box);\n            return true;\n          }\n\n          function fail(msg) {\n            box.classList.add(\"bad\");\n            note.className = \"dd-note err\";\n            note.textContent = msg;\n            stage.classList.add(\"shake\");\n            setTimeout(function () {\n              stage.classList.remove(\"shake\");\n              box.classList.remove(\"bad\");\n              p = 0;\n              move = { steps: 0, t0: 0, on: false };\n              render();\n            }, 340);\n            return false;\n          }\n\n          \/* dragging the handle *\/\n          function from(e) {\n            var r = track.getBoundingClientRect(), span = r.width - handle.offsetWidth;\n            return Math.max(0, Math.min(1, (e.clientX - r.left - handle.offsetWidth \/ 2) \/ span));\n          }\n          function onMove(e) {\n            if (!move.on || solved) return;\n            p = from(e); move.steps++;\n            render();\n          }\n          function drop() {\n            if (!move.on) return;\n            move.on = false;\n            window.removeEventListener(\"pointermove\", onMove);\n            window.removeEventListener(\"pointerup\", drop);\n            window.removeEventListener(\"pointercancel\", drop);\n            settle();\n          }\n          handle.addEventListener(\"pointerdown\", function (e) {\n            if (solved) return;\n            move = { steps: 0, t0: performance.now(), on: true };\n            window.addEventListener(\"pointermove\", onMove);\n            window.addEventListener(\"pointerup\", drop);\n            window.addEventListener(\"pointercancel\", drop);\n            e.preventDefault();\n          });\n\n          \/* and the same thing from the keyboard *\/\n          handle.addEventListener(\"keydown\", function (e) {\n            if (solved) return;\n            var d = e.key === \"ArrowRight\" ? 0.02 : e.key === \"ArrowLeft\" ? -0.02 : 0;\n            if (!d) return;\n            e.preventDefault();\n            if (!move.t0) move.t0 = performance.now();\n            p = Math.max(0, Math.min(1, p + d));\n            move.steps++;\n            render();\n            if (Math.abs(pieceX() - holeX) <= DD_S * 0.14 && move.steps >= 3) settle();\n          });\n\n          box.querySelector(\".dd-refresh\").addEventListener(\"click\", place);\n          window.addEventListener(\"resize\", render);\n\n          place();\n          requestAnimationFrame(render);     \/* the track has a width once it is laid out *\/\n        }\n\n        \/* ---------- result ---------- *\/\n        \/* Times are reported in whole seconds, rounded to the nearest one (1.4 s is\n           1 second, 1.6 s is 2), and written the way the page's language writes numbers. *\/\n        var LANG = document.documentElement.lang || undefined, NUM = null, PLURAL = null;\n        try { NUM = new Intl.NumberFormat(LANG, { maximumFractionDigits: 0 }); } catch (err) { }\n        try { PLURAL = new Intl.PluralRules(LANG); } catch (err) { }\n        function secs(ms) { return Math.round(ms \/ 1000); }\n        function num(n) { return NUM ? NUM.format(n) : String(n); }\n        \/* \"1 second\" \/ \"2 seconds\": unit-one, unit-other \u2026 picked by the language's plural\n           rules; a form the page has no text for falls back to unit-other *\/\n        function count(unit, n) {\n          var key = unit + \"-\" + (PLURAL ? PLURAL.select(n) : (n === 1 ? \"one\" : \"other\"));\n          if (!(key in STR) && !(key in TEXT)) key = unit + \"-other\";\n          return t(key, { n: num(n) });\n        }\n\n        function nextUntried() {\n          for (var i = 0; i < ORDER.length; i++) { if (!results[ORDER[i]]) return ORDER[i]; }\n          return null;\n        }\n\n        \/* the CAPTCHA is done: note the time, then show the result a moment later so the\n           solved challenge stays in view long enough to be seen *\/\n        function finishRun() {\n          if (!run.active) return;\n          var ms = performance.now() - run.t0, m = mode, seq = runSeq;\n          run.active = false;\n          run.done = true;\n          results[m] = { ms: ms, secs: secs(ms), clicks: m === \"friendly\" ? 0 : run.clicks };\n          opts.forEach(function (b) { b.classList.toggle(\"solved\", !!results[b.dataset.mode]); });\n          drawBars();\n          setTimeout(function () { if (seq === runSeq) showResult(m); }, 900);\n        }\n\n        function showResult(m) {\n          var r = results[m];\n          el(\"formView\").style.display = \"none\";\n          el(\"sentView\").classList.add(\"show\");\n          el(\"sentCost\").innerHTML = t(\"sent-\" + m, { seconds: count(\"second\", r.secs), clicks: count(\"click\", r.clicks) });\n\n          var next = nextUntried(), btn = el(\"againBtn\");\n          if (next) {\n            btn.style.display = \"\";\n            btn.innerHTML = t(\"try-\" + next) + ' <span class=\"chev\">\u203a<\/span>';\n            btn.onclick = function () { setMode(next); };\n          } else {\n            btn.style.display = \"none\";\n          }\n        }\n\n        \/* \"Back to the form\" is a fresh try at the same type *\/\n        el(\"resetBtn\").addEventListener(\"click\", function () { resetForm(true); });\n\n        function drawBars() {\n          if (window.onCaptchaResults) window.onCaptchaResults(results);\n\n          var max = 1;\n          ORDER.forEach(function (k) {\n            if (results[k]) max = Math.max(max, results[k].ms);\n          });\n\n          ORDER.forEach(function (k) {\n            var r = results[k], row = document.querySelector('.captcha-demo [data-row=\"' + k + '\"]');\n            if (!row) return;\n            var track = row.querySelector(\".bar-track\"),\n              value = r ? tx(\"bar-value\", { seconds: num(r.secs), clicks: count(\"click\", r.clicks) }) : tx(\"bar-pending\");\n            row.classList.toggle(\"pending\", !r);\n            track.style.setProperty(\"--fill\", r ? Math.max(5, (r.ms \/ max) * 100) + \"%\" : \"0%\");\n            row.querySelectorAll(\".bar-val\").forEach(function (n) { n.textContent = value; });\n          });\n\n          \/* The takeaway lines are native Elementor widgets: cd-takeaway plus\n             cd-takeaway--compare, --try-friendly or --try-legacy. This only shows the\n             one that fits and fills its {placeholders} in. *\/\n          var legacy = [\"image\", \"hcaptcha\", \"text\", \"slide\"].filter(function (k) { return results[k]; });\n          var which = \"\", vars = {};\n          if (legacy.length && results.friendly) {\n            \/* the sum of the rounded times, so it matches the bars above *\/\n            var sum = 0, clicks = 0;\n            legacy.forEach(function (k) { sum += results[k].secs; clicks += results[k].clicks; });\n            which = \"compare\";\n            vars = {\n              legacy_time: count(\"second\", sum), legacy_clicks: count(\"click\", clicks),\n              friendly_time: count(\"second\", results.friendly.secs)\n            };\n          } else if (legacy.length) {\n            which = \"try-friendly\";\n          } else if (results.friendly) {\n            which = \"try-legacy\";\n          }\n          document.querySelectorAll(\".cd-takeaway\").forEach(function (n) {\n            if (n.cdTemplate === undefined) n.cdTemplate = n.innerHTML;\n            var on = !!which && n.classList.contains(\"cd-takeaway--\" + which);\n            n.classList.toggle(\"is-active\", on);\n            n.innerHTML = on ? fillIn(n.cdTemplate, vars) : n.cdTemplate;\n          });\n\n          opts.forEach(function (b) {\n            var r = results[b.dataset.mode];\n            var result = b.nextElementSibling && b.nextElementSibling.querySelector(\".envelope-body\");\n            if (!r) {\n              b.classList.remove(\"solved\", \"has-result\", \"friendly-result\");\n              b.style.removeProperty(\"--button-fill-percent\");\n              b.removeAttribute(\"aria-label\");\n              if (result) result.textContent = \"\";\n              return;\n            }\n\n            var text = tx(\"chooser-value\", { seconds: num(r.secs), clicks: count(\"click\", r.clicks) });\n            var fillPercent = Math.min(100, Math.max(5, (r.ms \/ max) * 100));\n            b.style.setProperty(\"--button-fill-percent\", fillPercent + \"%\");\n            b.classList.add(\"solved\", \"has-result\");\n            b.classList.toggle(\"friendly-result\", b.dataset.mode === \"friendly\");\n            b.setAttribute(\"aria-label\", tx(\"label-\" + b.dataset.mode) + \": \" + text);\n            if (result) result.textContent = text;\n          });\n        }\n\n        \/* everything above is defined now \u2014 show the first challenge *\/\n        window.setCaptchaMode = setMode;\n        if (window.onCaptchaMode) window.onCaptchaMode(mode);\n        resetForm(false);\n\n      }\n    })();\n  <\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Interactive Sample Form with CAPTCHA Demo CAPTCHA Test This CAPTCHA test will check the function of different CAPTCHA types in a real-world form. Select a CAPTCHA for a demo, complete the form and submit it \u2013 just like your users would. Try all four traditional CAPTCHAs, then submit the same message with invisible Friendly Captcha [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"_thinkrank_schema_form_data":"","_thinkrank_selected_schema_type":"","_thinkrank_additional_schemas":"","_thinkrank_canonical_url":"https:\/\/friendlycaptcha.com\/captcha-test\/","_thinkrank_og_title":"","_thinkrank_og_description":"","_thinkrank_og_image":"","_thinkrank_twitter_title":"","_thinkrank_twitter_description":"","_thinkrank_twitter_image":"","_thinkrank_imported_from":"rankmath","_thinkrank_focus_keywords":["captcha test"],"_thinkrank_focus_keyword":"captcha test","_thinkrank_robots_meta_enabled":0,"_thinkrank_robots_meta":"[]","_thinkrank_advanced_robots_meta":"[]","_thinkrank_exclude_from_search":0,"_thinkrank_exclude_from_archives":0,"_thinkrank_primary_category":0,"footnotes":""},"class_list":["post-21371","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/pages\/21371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/comments?post=21371"}],"version-history":[{"count":23,"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/pages\/21371\/revisions"}],"predecessor-version":[{"id":21453,"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/pages\/21371\/revisions\/21453"}],"wp:attachment":[{"href":"https:\/\/friendlycaptcha.com\/pt\/wp-json\/wp\/v2\/media?parent=21371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}