<script>
(()=>{
// Настройки защиты
const COOLDOWN_MS = 2500; // Задержка между ответами (2.5 сек)
let lastActionTime = 0;
let isLocked = false;
// Селекторы интерактивных элементов, по которым обычно кликают наугад
const TARGET_SELECTORS = [
'.dko', // Карточки выбора (миссии 3, 14, 16, 20, 21, 28, 30)
'#swYes', '#swNo', // Правда / Миф (миссия 4)
'.rq .vote button', // Блиц-опросы (миссия 5)
'.gtopts button', // Угадай свойство (миссия 9)
'.htile', // Лестница размеров (миссия 11)
'.q .opts button', // Тест в лаборатории (миссия 13)
'.nestbtns button', // Матрёшка Box Model (миссия 15)
'.pool button', // Сборка правил (миссия 22)
'#mkCheck', // Проверка карточки (миссия 23)
'.bugcode .b' // Охота на баги (миссия 25)
].join(',');
const SYSTEM_ERRORS = [
"⚠️ Ошибка рендеринга (DOM Paint Busy): браузер применяет стили. Подождите пару секунд...",
"⏳ CSS Parser Timeout: буфер переполнен. Идёт синхронизация стилей с HTML-деревом...",
"⚠️ Layout Warning: движок перегружен частыми изменениями свойств. Идёт пересчёт геометрии..."
];
function showSystemToast(text) {
const toast = document.querySelector('#toast');
if (!toast) return;
// Временно стилизуем тост под предупреждение/ошибку
const prevBg = toast.style.background;
const prevColor = toast.style.color;
toast.style.background = '#FF6F61'; // Системный кораллово-красный
toast.style.color = '#000';
toast.textContent = text;
toast.classList.add('show');
setTimeout(() => {
toast.classList.remove('show');
setTimeout(() => {
toast.style.background = prevBg;
toast.style.color = prevColor;
}, 500);
}, 2200);
}
// Перехватываем клик на фазе Capture (до того, как сработает код квеста)
document.addEventListener('click', (e) => {
const btn = e.target.closest(TARGET_SELECTORS);
if (!btn) return;
const now = Date.now();
// Если кликнули во время кулдауна
if (isLocked || (now - lastActionTime < COOLDOWN_MS)) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
// Звук системной ошибки (глухой щелчок)
try {
const ctx = new (window.AudioContext || window.webkitAudioContext)();
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.frequency.value = 140;
osc.connect(gain);
gain.connect(ctx.destination);
gain.gain.setValueAtTime(0.1, ctx.currentTime);
gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.2);
osc.start();
osc.stop(ctx.currentTime + 0.2);
} catch {}
const msg = SYSTEM_ERRORS[Math.floor(Math.random() * SYSTEM_ERRORS.length)];
showSystemToast(msg);
return;
}
// Фиксируем действие и ставим блокировку
lastActionTime = now;
isLocked = true;
setTimeout(() => {
isLocked = false;
}, COOLDOWN_MS);
}, true); // true = capture phase!
})();
</script>