Загрузка данных


<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>