/* Puzzle anti-robot */
.captcha-box { border-radius: 10px; border: 0; }
.captcha-help { color: #5B6B82; margin-bottom: .75rem; }
.captcha-stage { position: relative; width: 100%; max-width: 320px; margin: 0 auto; border-radius: 6px; overflow: hidden; background: #DFE6EF; aspect-ratio: 320 / 180; user-select: none; touch-action: none; }
.captcha-bg { width: 100%; display: block; pointer-events: none; }
.captcha-piece { position: absolute; left: 0; pointer-events: none; filter: drop-shadow(0 2px 4px rgba(0,0,0,.45)); }
.captcha-status { position: absolute; left: 0; right: 0; bottom: 0; padding: .3rem; text-align: center; font-weight: 700; font-size: .9rem; color: #fff; background: transparent; transition: background .2s; }
.captcha-status.ok { background: rgba(21,128,61,.9); }
.captcha-status.ko { background: rgba(185,28,28,.85); }
.captcha-track { position: relative; max-width: 320px; height: 46px; margin: .75rem auto 0; background: #F1F5F9; border: 1px solid #DFE6EF; border-radius: 23px; overflow: hidden; touch-action: none; }
.captcha-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: rgba(246,127,23,.18); }
.captcha-handle { position: absolute; left: 0; top: 0; width: 46px; height: 44px; border: 0; border-radius: 22px; background: #F67F17; color: #061C40; font-size: 1.2rem; display: grid; place-items: center; cursor: grab; touch-action: none; z-index: 2; box-shadow: 0 2px 6px rgba(6,28,64,.25); }
.captcha-handle:active { cursor: grabbing; }
.captcha-handle:focus-visible { outline: 3px solid #0A3375; outline-offset: 2px; }
.captcha-hint { position: absolute; inset: 0; display: grid; place-items: center; color: #5B6B82; font-size: .9rem; pointer-events: none; transition: opacity .2s; }
.captcha-refresh { display: block; margin: .5rem auto 0; color: #0A3375; }
.done .captcha-handle { background: #15803D; color: #fff; }
.shake { animation: captcha-shake .4s; }
@keyframes captcha-shake { 25% { transform: translateX(-6px); } 50% { transform: translateX(6px); } 75% { transform: translateX(-3px); } }
@media (prefers-reduced-motion: reduce) { .shake { animation: none; } }
