<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/neyro-mafiya</id>
  <link href="https://www.pandoraburo.ru/neyro-mafiya.xml" rel="self"/>
  <title/>
  <subtitle type="html">
&lt;style&gt;
  /* Изолируем игру и разрешаем горизонтальный скролл, если сайт слишком узкий */
  #neuro-mafia-wrapper {
    all: initial !important;
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif !important;
    background: linear-gradient(135deg, #0a0e27 0%, #1a1f3a 100%) !important;
    color: #e0e6ff !important;
    display: block !important;
    width: 100% !important;
    min-height: 80vh !important;
    padding: 15px !important;
    box-sizing: border-box !important;
    overflow-x: auto !important; /* Защита: если сайт узкий, появится скролл, но ничего не сплющится */
  }

  #neuro-mafia-wrapper * {
    box-sizing: border-box !important;
    font-family: inherit !important;
  }

  /* КОМПАКТНАЯ СЕТКА: 220px + центр + 280px = 500px фиксированной ширины. Поместится даже в 600px! */
  #neuro-mafia-wrapper .game-container {
    display: grid !important;
    grid-template-columns: 220px 1fr 280px !important;
    gap: 10px !important;
    width: 100% !important;
    min-width: 600px !important; /* Минимальная ширина для корректного отображения */
    margin: 0 auto !important;
    height: 75vh !important;
  }

  /* Принудительные стили панелей */
  #neuro-mafia-wrapper .players-panel,
  #neuro-mafia-wrapper .interrogation-room,
  #neuro-mafia-wrapper .bayes-log {
    background: #1a1f3a !important;
    border: 1px solid #3d4470 !important;
    border-radius: 10px !important;
    padding: 12px !important;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3) !important;
    color: #e0e6ff !important;
  }

  #neuro-mafia-wrapper .players-panel { overflow-y: auto !important; }
  #neuro-mafia-wrapper .players-panel h2, 
  #neuro-mafia-wrapper .bayes-log h2 { 
    font-size: 14px !important; 
    margin-bottom: 12px !important; 
    text-transform: uppercase !important; 
    letter-spacing: 1px !important;
    color: #3742fa !important; 
  }
  #neuro-mafia-wrapper .bayes-log h2 { color: #2ed573 !important; }

  #neuro-mafia-wrapper .player-card {
    background: #252b4a !important;
    border: 1px solid #3d4470 !important;
    border-radius: 6px !important;
    padding: 10px !important;
    margin-bottom: 10px !important;
  }
  #neuro-mafia-wrapper .player-name {
    font-weight: bold !important;
    font-size: 14px !important;
    margin-bottom: 5px !important;
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    white-space: nowrap !important;
    color: #e0e6ff !important;
  }
  #neuro-mafia-wrapper .player-role-icon { font-size: 18px !important; line-height: 1 !important; }
  
  #neuro-mafia-wrapper .probability-bar { height: 5px !important; background: #0a0e27 !important; border-radius: 3px !important; overflow: hidden !important; margin-top: 5px !important; }
  #neuro-mafia-wrapper .probability-fill { height: 100% !important; background: linear-gradient(90deg, #2ed573, #ffa502, #ff4757) !important; transition: width 0.5s ease !important; }
  #neuro-mafia-wrapper .probability-text { font-size: 10px !important; color: #8b95c9 !important; margin-top: 3px !important; display: flex !important; justify-content: space-between !important; }

  #neuro-mafia-wrapper .interrogation-room { display: flex !important; flex-direction: column !important; }
  #neuro-mafia-wrapper .room-header { border-bottom: 1px solid #3d4470 !important; padding-bottom: 8px !important; margin-bottom: 8px !important; }
  #neuro-mafia-wrapper .room-header h2 { font-size: 16px !important; color: #ff4757 !important; margin: 0 !important; }
  
  #neuro-mafia-wrapper .chat-container { 
    flex: 1 !important; 
    overflow-y: auto !important; 
    padding: 10px !important; 
    background: #0a0e27 !important; 
    border-radius: 6px !important; 
    margin-bottom: 10px !important; 
  }
  
  #neuro-mafia-wrapper .chat-message { 
    margin-bottom: 10px !important; 
    padding: 8px !important; 
    background: #252b4a !important; 
    border-radius: 6px !important; 
    border-left: 3px solid #3742fa !important; 
  }
  #neuro-mafia-wrapper .chat-message.system { border-left-color: #ffa502 !important; background: rgba(255, 165, 2, 0.1) !important; }
  #neuro-mafia-wrapper .message-author { font-weight: bold !important; font-size: 12px !important; margin-bottom: 3px !important; color: #3742fa !important; }
  #neuro-mafia-wrapper .message-text { font-size: 13px !important; line-height: 1.3 !important; color: #e0e6ff !important; }
  
  #neuro-mafia-wrapper .action-buttons { display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 6px !important; }
  #neuro-mafia-wrapper .action-btn {
    padding: 8px 4px !important; 
    background: #252b4a !important; 
    border: 1px solid #3d4470 !important; 
    border-radius: 5px !important;
    color: #e0e6ff !important; 
    font-size: 11px !important; 
    cursor: pointer !important; 
    transition: all 0.2s ease !important; 
    text-transform: uppercase !important; 
    white-space: nowrap !important;
  }
  #neuro-mafia-wrapper .action-btn:hover { background: #3742fa !important; border-color: #3742fa !important; }
  #neuro-mafia-wrapper .action-btn.danger { background: #ff4757 !important; border-color: #ff4757 !important; }
  #neuro-mafia-wrapper .action-btn.danger:hover { background: #ff6b7a !important; }

  #neuro-mafia-wrapper .bayes-log { overflow-y: auto !important; display: flex !important; flex-direction: column !important; }
  #neuro-mafia-wrapper .log-entry {
    background: #252b4a !important;
    border-radius: 5px !important;
    padding: 8px !important;
    margin-bottom: 6px !important;
    border-left: 3px solid #2ed573 !important;
    font-size: 11px !important;
  }
  #neuro-mafia-wrapper .log-entry.warning { border-left-color: #ffa502 !important; }
  #neuro-mafia-wrapper .log-timestamp { font-size: 9px !important; color: #8b95c9 !important; margin-bottom: 2px !important; font-family: 'Courier New', monospace !important; }
  #neuro-mafia-wrapper .log-text { color: #e0e6ff !important; line-height: 1.2 !important; }

  /* Скроллбар */
  #neuro-mafia-wrapper ::-webkit-scrollbar { width: 5px !important; height: 5px !important; }
  #neuro-mafia-wrapper ::-webkit-scrollbar-track { background: #0a0e27 !important; }
  #neuro-mafia-wrapper ::-webkit-scrollbar-thumb { background: #3d4470 !important; border-radius: 3px !important; }
&lt;/style&gt;

&lt;div id="neuro-mafia-wrapper"&gt;
  &lt;div class="game-container"&gt;
    
    &lt;aside class="players-panel"&gt;
      &lt;h2&gt;? Подозреваемые&lt;/h2&gt;
      &lt;div class="player-card" data-player="alice"&gt;
        &lt;div class="player-name"&gt;&lt;span class="player-role-icon"&gt;?&lt;/span&gt;&lt;span&gt;Алиса&lt;/span&gt;&lt;/div&gt;
        &lt;div class="probability-bar"&gt;&lt;div class="probability-fill" style="width: 33%"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div class="probability-text"&gt;&lt;span&gt;Мафия&lt;/span&gt;&lt;span class="prob-value"&gt;33%&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="player-card" data-player="bob"&gt;
        &lt;div class="player-name"&gt;&lt;span class="player-role-icon"&gt;?&lt;/span&gt;&lt;span&gt;Боб&lt;/span&gt;&lt;/div&gt;
        &lt;div class="probability-bar"&gt;&lt;div class="probability-fill" style="width: 33%"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div class="probability-text"&gt;&lt;span&gt;Мафия&lt;/span&gt;&lt;span class="prob-value"&gt;33%&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="player-card" data-player="clara"&gt;
        &lt;div class="player-name"&gt;&lt;span class="player-role-icon"&gt;?‍♀️&lt;/span&gt;&lt;span&gt;Клара&lt;/span&gt;&lt;/div&gt;
        &lt;div class="probability-bar"&gt;&lt;div class="probability-fill" style="width: 33%"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div class="probability-text"&gt;&lt;span&gt;Мафия&lt;/span&gt;&lt;span class="prob-value"&gt;33%&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="player-card" data-player="dmitry"&gt;
        &lt;div class="player-name"&gt;&lt;span class="player-role-icon"&gt;?‍?&lt;/span&gt;&lt;span&gt;Дмитрий&lt;/span&gt;&lt;/div&gt;
        &lt;div class="probability-bar"&gt;&lt;div class="probability-fill" style="width: 33%"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div class="probability-text"&gt;&lt;span&gt;Мафия&lt;/span&gt;&lt;span class="prob-value"&gt;33%&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="player-card" data-player="elena"&gt;
        &lt;div class="player-name"&gt;&lt;span class="player-role-icon"&gt;?&lt;/span&gt;&lt;span&gt;Елена&lt;/span&gt;&lt;/div&gt;
        &lt;div class="probability-bar"&gt;&lt;div class="probability-fill" style="width: 33%"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div class="probability-text"&gt;&lt;span&gt;Мафия&lt;/span&gt;&lt;span class="prob-value"&gt;33%&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="player-card" data-player="frank"&gt;
        &lt;div class="player-name"&gt;&lt;span class="player-role-icon"&gt;?&lt;/span&gt;&lt;span&gt;Фрэнк&lt;/span&gt;&lt;/div&gt;
        &lt;div class="probability-bar"&gt;&lt;div class="probability-fill" style="width: 33%"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div class="probability-text"&gt;&lt;span&gt;Мафия&lt;/span&gt;&lt;span class="prob-value"&gt;33%&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/aside&gt;

    
    &lt;main class="interrogation-room"&gt;
      &lt;div class="room-header"&gt;&lt;h2&gt;? Допрос: День 1&lt;/h2&gt;&lt;/div&gt;
      &lt;div class="chat-container" id="chat"&gt;
        &lt;div class="chat-message system"&gt;
          &lt;div class="message-author"&gt;⚙️ СИСТЕМА&lt;/div&gt;
          &lt;div class="message-text"&gt;Город просыпается. Ночь прошла тихо. Обсуждение начинается.&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="chat-message"&gt;
          &lt;div class="message-author"&gt;? Алиса&lt;/div&gt;
          &lt;div class="message-text"&gt;Кто-то из нас точно Мафия. Давайте начнём с вас.&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="action-buttons"&gt;
        &lt;button class="action-btn" onclick="game.action('accuse')"&gt;? Обвинить&lt;/button&gt;
        &lt;button class="action-btn" onclick="game.action('defend')"&gt;?️ Защитить&lt;/button&gt;
        &lt;button class="action-btn danger" onclick="game.action('vote')"&gt;⚖️ Голос&lt;/button&gt;
        &lt;button class="action-btn" onclick="game.action('interrogate')"&gt;? Допрос&lt;/button&gt;
        &lt;button class="action-btn" onclick="game.action('evidence')"&gt;? Улика&lt;/button&gt;
        &lt;button class="action-btn danger" onclick="game.action('bayesianStrike')"&gt;⚡ Удар&lt;/button&gt;
      &lt;/div&gt;
    &lt;/main&gt;

    
    &lt;aside class="bayes-log"&gt;
      &lt;h2&gt;? Лог Байеса&lt;/h2&gt;
      &lt;div class="log-entry"&gt;
        &lt;div class="log-timestamp"&gt;[00:00:01]&lt;/div&gt;
        &lt;div class="log-text"&gt;Сеть инициализирована. Все = 33%&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="log-entry warning"&gt;
        &lt;div class="log-timestamp"&gt;[00:00:15]&lt;/div&gt;
        &lt;div class="log-text"&gt;Алиса активна. P(Мафия) = 38%&lt;/div&gt;
      &lt;/div&gt;
    &lt;/aside&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
const GAME_DATA = {
  players: [
    { id: 'alice', name: 'Алиса', role: 'mafia', suspicion: 33 },
    { id: 'bob', name: 'Боб', role: 'detective', suspicion: 33 },
    { id: 'clara', name: 'Клара', role: 'civilian', suspicion: 33 },
    { id: 'dmitry', name: 'Дмитрий', role: 'civilian', suspicion: 33 },
    { id: 'elena', name: 'Елена', role: 'civilian', suspicion: 33 },
    { id: 'frank', name: 'Фрэнк', role: 'civilian', suspicion: 33 }
  ]
};

const game = {
  action: function(actionType) {
    const chat = document.getElementById('chat');
    const newMsg = document.createElement('div');
    newMsg.className = 'chat-message system';
    newMsg.innerHTML = `&lt;div class="message-author"&gt;⚙️ ДЕЙСТВИЕ&lt;/div&gt;&lt;div class="message-text"&gt;Вы выбрали: "${actionType}". Логика будет добавлена далее.&lt;/div&gt;`;
    chat.appendChild(newMsg);
    chat.scrollTop = chat.scrollHeight;
    
    const log = document.querySelector('.bayes-log');
    const newLog = document.createElement('div');
    newLog.className = 'log-entry';
    newLog.innerHTML = `&lt;div class="log-timestamp"&gt;[${new Date().toLocaleTimeString('ru-RU')}]&lt;/div&gt;&lt;div class="log-text"&gt;Действие: ${actionType}. Ожидание реакции сети...&lt;/div&gt;`;
    log.appendChild(newLog);
    log.scrollTop = log.scrollHeight;
  }
};
console.log('✅ Компактный блок загружен успешно!');
&lt;/script&gt;

&lt;script&gt;
// === БАЙЕСОВСКАЯ СЕТЬ (ЯДРО ИГРЫ) ===
const BayesEngine = {
  // Базовые веса действий (как сеть реагирует на действия игрока)
  weights: {
    accuse: { base: -5, chaos: 10 },      // Обвинение: снижает подозрение, если цель уже подозрительна
    defend: { base: 15, chaos: 5 },       // Защита: резко повышает подозрение, если защищаешь "красную" зону
    interrogate: { base: -2, chaos: 8 },  // Допрос: небольшой риск, но может дать информацию
    evidence: { base: -10, chaos: 20 },   // Улика: сильно меняет расклад, но может быть фантомной
    bayesianStrike: { base: -25, chaos: 5 } // Байес-удар: мощное давление, сильно снижает подозрение к тебе
  },

  // Главная функция пересчета вероятностей
  processAction: function(actionType, targetId = null) {
    const player = GAME_DATA.players.find(p =&gt; p.id === targetId);
    const logEntries = [];
    const time = new Date().toLocaleTimeString('ru-RU');

    // 1. Анализируем действие и меняем подозрение (suspicion)
    if (targetId &amp;&amp; player) {
      const currentSuspicion = player.suspicion;
      let change = 0;
      let reason = "";

      if (actionType === 'accuse') {
        // Если обвиняешь того, кто уже подозрителен (&gt;50%), ты выглядишь умно (подозрение на тебя падает)
        // Если обвиняешь невиновного (&lt;30%), ты выглядишь хаотично (подозрение растет)
        if (currentSuspicion &gt; 50) {
          change = -8;
          reason = `Логичное обвинение. Вы указали на подозрительную цель (${player.name}).`;
        } else {
          change = 12;
          reason = `Необоснованная агрессия. Вы атакуете ${player.name} без веских причин.`;
        }
      } 
      else if (actionType === 'defend') {
        // Защита подозрительного лица = ты с ним в сговоре
        if (currentSuspicion &gt; 40) {
          change = 18;
          reason = `КРИТИЧЕСКАЯ ОШИБКА: Вы защищаете ${player.name} с высоким рейтингом подозрения. Сеть фиксирует возможный сговор.`;
        } else {
          change = -5;
          reason = `Вы защитили ${player.name}. Это выглядит как солидарность мирных жителей.`;
        }
      }
      else if (actionType === 'bayesianStrike') {
        change = -15;
        reason = `Байес-удар применен к ${player.name}. Давление выявило несоответствия в его речи.`;
        // Увеличиваем подозрение цели, так как она нервничает
        player.suspicion = Math.min(100, player.suspicion + 10);
      }

      // Применяем изменение к игроку (тебе), но не даем уйти в минус или выше 100
      // (В данной упрощенной модели мы меняем подозрение на цель, а не на игрока, для наглядности)
      player.suspicion = Math.max(0, Math.min(100, player.suspicion + change));
      
      // Добавляем запись в лог
      logEntries.push({
        time: time,
        text: `${reason} P(Мафия|${player.name}) обновлена: ${player.suspicion}%`,
        type: change &gt; 0 ? 'warning' : (change &lt; -10 ? 'error' : '')
      });
    } else {
      // Действие без цели (например, просто поиск улик)
      logEntries.push({
        time: time,
        text: `Действие "${actionType}" выполнено. Сеть собирает косвенные данные...`,
        type: ''
      });
    }

    // 2. Обновляем интерфейс
    this.updateUI();
    
    // 3. Возвращаем логи для добавления в чат/панель
    return logEntries;
  },

  // Функция отрисовки обновленных вероятностей в DOM
  updateUI: function() {
    GAME_DATA.players.forEach(player =&gt; {
      // Находим карточку игрока
      const card = document.querySelector(`.player-card[data-player="${player.id}"]`);
      if (card) {
        // Обновляем полоску
        const fill = card.querySelector('.probability-fill');
        fill.style.width = `${player.suspicion}%`;
        
        // Обновляем текст
        const text = card.querySelector('.prob-value');
        text.textContent = `${player.suspicion}%`;
        
        // Меняем цвет текста в зависимости от уровня опасности
        if (player.suspicion &gt; 70) {
          text.style.color = '#ff4757'; // Красный
          text.style.fontWeight = 'bold';
        } else if (player.suspicion &gt; 40) {
          text.style.color = '#ffa502'; // Желтый
        } else {
          text.style.color = '#2ed573'; // Зеленый
        }
      }
    });
  },

  // Добавление записи в правый лог
  addLog: function(entry) {
    const logContainer = document.querySelector('.bayes-log');
    const newLog = document.createElement('div');
    newLog.className = `log-entry ${entry.type}`;
    newLog.innerHTML = `
      &lt;div class="log-timestamp"&gt;[${entry.time}]&lt;/div&gt;
      &lt;div class="log-text"&gt;${entry.text}&lt;/div&gt;
    `;
    logContainer.appendChild(newLog);
    logContainer.scrollTop = logContainer.scrollHeight; // Автопрокрутка вниз
  }
};

// === МОДИФИКАЦИЯ ОБЪЕКТА GAME ДЛЯ ИНТЕГРАЦИИ С БАЙЕСОМ ===
game.action = function(actionType) {
  // Для демонстрации выберем случайную цель, если действие требует цели
  // В полной версии здесь будет всплывающее окно выбора цели
  const targets = ['alice', 'bob', 'clara', 'dmitry', 'elena', 'frank'];
  const randomTarget = targets[Math.floor(Math.random() * targets.length)];
  
  // 1. Запускаем байесовский расчет
  const logs = BayesEngine.processAction(actionType, randomTarget);
  
  // 2. Добавляем логи в правую панель
  logs.forEach(log =&gt; BayesEngine.addLog(log));
  
  // 3. Пишем в чат для игрока
  const chat = document.getElementById('chat');
  const targetName = GAME_DATA.players.find(p =&gt; p.id === randomTarget)?.name || 'Неизвестный';
  
  const newMsg = document.createElement('div');
  newMsg.className = 'chat-message system';
  newMsg.innerHTML = `
    &lt;div class="message-author"&gt;⚙️ РЕАКЦИЯ СЕТИ&lt;/div&gt;
    &lt;div class="message-text"&gt;Вы применили "${actionType}" к игроку &lt;b&gt;${targetName}&lt;/b&gt;. Байесовская сеть пересчитала вероятности. Проверьте правую панель!&lt;/div&gt;
  `;
  chat.appendChild(newMsg);
  chat.scrollTop = chat.scrollHeight;

  // 4. Имитация ответа бота через 1 секунду
  setTimeout(() =&gt; {
    const botResponse = document.createElement('div');
    botResponse.className = 'chat-message';
    const bot = GAME_DATA.players.find(p =&gt; p.id === randomTarget);
    botResponse.innerHTML = `
      &lt;div class="message-author"&gt;${bot.icon} ${bot.name}&lt;/div&gt;
      &lt;div class="message-text"&gt;Интересный ход. Но мои данные говорят об обратном. Продолжайте наблюдать.&lt;/div&gt;
    `;
    chat.appendChild(botResponse);
    chat.scrollTop = chat.scrollHeight;
  }, 1000);
};

console.log('✅ Байесовская сеть (Блок 5) успешно подключена и готова к расчетам!');
&lt;/script&gt;</subtitle>
  <updated>2026-08-22T11:41:37Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/4b/bcd80a9d3e11f18b98ed4e8ec7cd6a/-/1787302250.png</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
