.duzduz-captcha {
    max-width: 420px;
    font-size: 14px;
}

.duzduz-captcha__instructions {
    margin: 0 0 10px;
    font-weight: 600;
}

.duzduz-captcha__grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
}

.duzduz-captcha__img-wrap {
    position: relative;
    padding: 0;
    margin: 0;
    border: 2px solid #ccc;
    border-radius: 6px;
    background: #f4f4f4;
    cursor: pointer;
    overflow: hidden;
    line-height: 0;
}

.duzduz-captcha__img-wrap:hover,
.duzduz-captcha__img-wrap:focus-visible {
    border-color: #666;
}

.duzduz-captcha__img-wrap img {
    display: block;
    width: 100%;
    height: auto;
    /* el click lo captura el <button> que envuelve, no la imagen — necesario
       para que el evento burbujee hasta el <button> (el propio botón es el
       que tiene el listener). 04/09/2026: el CÁLCULO de escala en
       captcha.js YA NO usa el tamaño del botón (tenía un desajuste real de
       ~2-4px por su borde) — mide siempre la propia imagen vía
       `button.querySelector('img')`, así que este pointer-events:none es
       solo lo que hace falta para que el clic llegue al botón, nada más. */
    pointer-events: none;
}

.duzduz-captcha__label {
    position: absolute;
    top: 4px;
    left: 4px;
    background: rgba(0, 0, 0, 0.6);
    color: #fff;
    font-size: 11px;
    line-height: 1;
    padding: 3px 6px;
    border-radius: 3px;
    pointer-events: none;
}

.duzduz-captcha__status {
    min-height: 18px;
    margin: 10px 0 0;
    font-size: 13px;
}

.duzduz-captcha__status[data-state="ok"] { color: #0a7c2f; }
.duzduz-captcha__status[data-state="fail"] { color: #b32d2e; }
.duzduz-captcha__status[data-state="cooldown"] { color: #996800; }

/* Honeypot — NUNCA display:none ni type="hidden" (ambos, triviales de
   detectar por un bot que solo lee el DOM/CSS de forma superficial):
   posicionado fuera de la pantalla visible Y con opacidad 0 a la vez, más
   tabindex="-1"/autocomplete="off" en el propio <input> (ver
   class-duzduz-captcha-render.php) — un visitante real, tabulando o
   mirando la pantalla, no tiene ninguna forma normal de encontrarlo ni de
   rellenarlo por accidente. */
.duzduz-captcha__hp-wrap {
    position: absolute;
    left: -9999px;
    top: -9999px;
    opacity: 0;
    height: 0;
    overflow: hidden;
}

/* 05/09/2026, NUEVO, pedido explícito — "slide to confirm" tras acertar
   el reto visual, antes de habilitar el login/registro/Google real. Ver
   duzduz_captcha_wire_slide_confirm() en assets/captcha.js para la
   mecánica completa; aquí solo el aspecto visual, mismo lenguaje que el
   resto del reto (bordes/colores ya usados en .duzduz-captcha__img-wrap
   y .duzduz-captcha__status). */
.duzduz-captcha__slide-wrap {
    margin-top: 10px;
}

.duzduz-captcha__slide-track {
    position: relative;
    height: 44px;
    border-radius: 22px;
    background: #f4f4f4;
    border: 2px solid #ccc;
    overflow: hidden;
    cursor: grab;
    /* touch-action:none — SIN esto, un navegador móvil puede interpretar
       el arrastre como un scroll de la página en vez de mover el thumb;
       es lo que hace que el mismo código de arrastre (Pointer Events)
       funcione igual de bien con el dedo que con el ratón, sin
       necesitar dos implementaciones separadas. */
    touch-action: none;
    user-select: none;
}

.duzduz-captcha__slide-track:focus-visible {
    outline: 2px solid #666;
    outline-offset: 2px;
}

.duzduz-captcha__slide-fill {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 0;
    background: #d9ecdf;
    /* la propia transición se DESACTIVA durante el arrastre (ver
       captcha.js, dragging=true quita esta clase) — solo se anima al
       soltar, para que el "vuelve al inicio" o el "termina de completar"
       se vean como un movimiento suave, nunca el arrastre en sí, que
       tiene que seguir al dedo/ratón sin ningún retraso. */
    transition: width 0.25s ease;
}

.duzduz-captcha__slide-track.duzduz-cc-dragging .duzduz-captcha__slide-fill,
.duzduz-captcha__slide-track.duzduz-cc-dragging .duzduz-captcha__slide-thumb {
    transition: none;
}

.duzduz-captcha__slide-thumb {
    position: absolute;
    left: 2px;
    top: 2px;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: #fff;
    border: 2px solid #999;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    transition: left 0.25s ease;
    cursor: grab;
}

.duzduz-captcha__slide-track.duzduz-cc-dragging .duzduz-captcha__slide-thumb {
    cursor: grabbing;
}

.duzduz-captcha__slide-label {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    color: #555;
    pointer-events: none;
}

.duzduz-captcha__slide-track.duzduz-cc-complete .duzduz-captcha__slide-fill {
    background: #b7e4c3;
}

.duzduz-captcha__slide-track.duzduz-cc-complete .duzduz-captcha__slide-label {
    color: #0a7c2f;
    font-weight: 600;
}

/* 03/09/2026, pedido explícito — envoltorio usado por las inserciones
   automáticas (Ajustes → login/registro/unirse a evento,
   class-duzduz-captcha-settings.php) para separar visualmente el reto del
   resto del formulario en el que se inserta — el propio `.duzduz-captcha`
   de arriba (ancho, tipografía, grid...) es idéntico en los dos casos, uso
   manual vía shortcode o inserción automática: esta regla es solo
   espaciado, no un estilo distinto. */
.duzduz-captcha-embed {
    margin: 14px 0;
}
