Splashui Captcha?ap=1 -
const modeBadgeSpan = document.getElementById('modeBadge'); const dynamicContainer = document.getElementById('dynamicContent');
.grid-item.selected { border-color: #4c7aff; background: #2d3f60; transform: scale(0.97); box-shadow: 0 0 0 2px rgba(76, 122, 255, 0.4); }
// ----- INTERACTIVE MODE UI (full splash captcha) ----- function buildInteractiveUI() { // challenge description: select all images with a bus (classic captcha style) const items = [ { emoji: '🚗', label: 'car', isTarget: false }, { emoji: '🚌', label: 'bus', isTarget: true }, { emoji: '🚲', label: 'bicycle', isTarget: false }, { emoji: '🚌', label: 'bus', isTarget: true }, { emoji: '✈️', label: 'plane', isTarget: false }, { emoji: '🚛', label: 'truck', isTarget: false } ]; splashui captcha?ap=1
hr { margin: 1rem 0; border-color: rgba(255,255,255,0.1); }
// simulate async captcha validation (like server-side token exchange) setTimeout(() => { const statusDiv = document.getElementById('apiStatusMsg'); if (statusDiv) { // emulate a signed response token (standard for splash captcha) const fakeToken = "splash_captcha_token_" + Math.random().toString(36).substring(2, 12) + "_ap1_valid"; statusDiv.innerHTML = `✅ [API MODE] CAPTCHA resolved successfully.<br> <span style="font-family:monospace; font-size:0.7rem; display:block; margin-top:6px;">token: ${fakeToken}</span><br> <span style="color:#a0f0b0;">👉 Use this token in your API request body.</span>`; statusDiv.style.color = '#c0ffd0'; statusDiv.style.background = '#102a1c'; } // additional dispatch for api-consumer: const apiEvent = new CustomEvent('splashCaptchaResolved', { detail: { success: true, mode: 'ap=1', token: fakeToken, timestamp: Date.now() } }); window.dispatchEvent(apiEvent); console.log('[SplashUI] ap=1 mode — captcha resolved, token emitted'); }, 800); } const modeBadgeSpan = document
/* verification row */ .verify-row { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; margin-top: 0.5rem; }
items.forEach((item, idx) => { const tile = document.createElement('div'); tile.className = 'grid-item'; if (selectedIndices.has(idx)) tile.classList.add('selected'); tile.textContent = item.emoji; tile.style.fontSize = '2.5rem'; tile.style.display = 'flex'; tile.style.alignItems = 'center'; tile.style.justifyContent = 'center'; tile.addEventListener('click', (e) => { e.stopPropagation(); if (selectedIndices.has(idx)) { selectedIndices.delete(idx); } else { selectedIndices.add(idx); } renderGrid(); // re-render }); gridContainer.appendChild(tile); }); return gridContainer; } const modeBadgeSpan = document.getElementById('modeBadge')
// render grid & logic function renderGrid() { const gridContainer = document.createElement('div'); gridContainer.className = 'captcha-grid';