<?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/igrovoy-modul-proekta-pando-tycoon</id>
  <link href="https://www.pandoraburo.ru/igrovoy-modul-proekta-pando-tycoon.xml" rel="self"/>
  <title>Игровой модуль Проекта  PANDO Tycoon</title>
  <subtitle type="html">
&lt;html lang="ru"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;PANDO Tycoon — блокчейн-песочница · Фаза 2 (игра)&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com" /&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin" /&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@600;800&amp;amp;family=Manrope:wght@400;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap" rel="stylesheet" /&gt;
&lt;/head&gt;
&lt;body&gt;


&lt;div id="pt-gate" class="pt-gate" hidden="hidden"&gt;
  &lt;div class="pt-gate-box"&gt;
    &lt;div class="pt-gate-ico"&gt;⚠️&lt;/div&gt;
    &lt;h2&gt;Это игра. Тренировочная модель.&lt;/h2&gt;
    &lt;p&gt;&lt;b&gt;PANDO Tycoon&lt;/b&gt; — развлекательная игра и образовательный симулятор блокчейн-экономики.&lt;/p&gt;
    &lt;ul class="pt-gate-list"&gt;
      &lt;li&gt;Все активы, монеты PDC и сделки — &lt;b&gt;виртуальные игровые объекты без денежной стоимости&lt;/b&gt;.&lt;/li&gt;
      &lt;li&gt;Их &lt;b&gt;нельзя обменять&lt;/b&gt; на реальные деньги или имущество.&lt;/li&gt;
      &lt;li&gt;Игра &lt;b&gt;не является&lt;/b&gt; финансовой услугой, инвестицией или средством платежа.&lt;/li&gt;
      &lt;li&gt;«Другие игроки» в Фазе 2 — симуляция (NPC), не реальные люди.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p class="pt-gate-small"&gt;Продолжая, вы подтверждаете, что понимаете: это игра. 18+&lt;/p&gt;
    &lt;button class="pt-btn pt-btn-acc pt-gate-btn" id="pt-gate-accept"&gt;Я понимаю, это игра — начать&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div id="pt-legal-banner" class="pt-legal-banner" hidden="hidden"&gt;
  ? Это игра и учебный симулятор. Все активы и PDC — виртуальные, без реальной стоимости. Не финансовая услуга. 18+
  &lt;button class="pt-banner-x" id="pt-banner-more" title="Подробнее"&gt;?&lt;/button&gt;
&lt;/div&gt;

&lt;div id="pt-app"&gt;
  &lt;header class="pt-head"&gt;
    &lt;div class="pt-head-in"&gt;
      &lt;span class="pt-logo"&gt;PANDO&lt;em&gt;◆&lt;/em&gt;TYCOON&lt;/span&gt;
      &lt;span class="pt-logo-sub"&gt;блокчейн-песочница · Фаза 2&lt;/span&gt;
      &lt;div class="pt-head-stats"&gt;
        &lt;div class="pt-stat"&gt;&lt;span class="pt-stat-l"&gt;PDC&lt;/span&gt;&lt;b id="pt-pdc"&gt;0&lt;/b&gt;&lt;/div&gt;
        &lt;div class="pt-stat"&gt;&lt;span class="pt-stat-l"&gt;Уровень&lt;/span&gt;&lt;b id="pt-level"&gt;1&lt;/b&gt;&lt;/div&gt;
        &lt;div class="pt-stat"&gt;&lt;span class="pt-stat-l"&gt;Репутация&lt;/span&gt;&lt;b id="pt-rep"&gt;0&lt;/b&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;button class="pt-btn pt-btn-sm" id="pt-reset"&gt;Сброс&lt;/button&gt;
    &lt;/div&gt;
  &lt;/header&gt;

  &lt;nav class="pt-nav"&gt;
    &lt;button class="pt-tab act" data-t="dash"&gt;? Империя&lt;/button&gt;
    &lt;button class="pt-tab" data-t="shop"&gt;? Магазин&lt;/button&gt;
    &lt;button class="pt-tab" data-t="ledger"&gt;⛓️ Реестр&lt;/button&gt;
    &lt;button class="pt-tab" data-t="quests"&gt;? Квесты&lt;/button&gt;
    &lt;button class="pt-tab" data-t="contracts"&gt;? Договоры&lt;/button&gt;
    &lt;button class="pt-tab" data-t="mp"&gt;? Мультиплеер&lt;/button&gt;
  &lt;/nav&gt;

  &lt;main class="pt-main"&gt;

    
    &lt;section class="pt-sec act" id="pt-dash"&gt;
      &lt;div class="pt-sec-head"&gt;&lt;h2&gt;Моя империя&lt;/h2&gt;&lt;button class="pt-btn pt-btn-acc" id="pt-collect-all"&gt;? Собрать весь доход&lt;/button&gt;&lt;/div&gt;
      &lt;div class="pt-summary"&gt;
        &lt;div class="pt-sum-card"&gt;&lt;span&gt;Активов&lt;/span&gt;&lt;b id="pt-assets-count"&gt;0&lt;/b&gt;&lt;/div&gt;
        &lt;div class="pt-sum-card"&gt;&lt;span&gt;Доход / цикл&lt;/span&gt;&lt;b id="pt-income-rate"&gt;0 PDC&lt;/b&gt;&lt;/div&gt;
        &lt;div class="pt-sum-card"&gt;&lt;span&gt;Заработано всего&lt;/span&gt;&lt;b id="pt-total-earned"&gt;0 PDC&lt;/b&gt;&lt;/div&gt;
        &lt;div class="pt-sum-card"&gt;&lt;span&gt;Готово к сбору&lt;/span&gt;&lt;b id="pt-ready-count" class="pt-accent"&gt;0&lt;/b&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;div id="pt-my-assets" class="pt-assets"&gt;&lt;div class="pt-empty"&gt;Пока пусто. Купите первый актив в «Магазине» →&lt;/div&gt;&lt;/div&gt;
    &lt;/section&gt;

    
    &lt;section class="pt-sec" id="pt-shop"&gt;
      &lt;div class="pt-sec-head"&gt;&lt;h2&gt;Магазин активов&lt;/h2&gt;
        &lt;div class="pt-filters" id="pt-filters"&gt;
          &lt;button class="pt-chip act" data-cat="all"&gt;Все&lt;/button&gt;
          &lt;button class="pt-chip" data-cat="Производство"&gt;? Производство&lt;/button&gt;
          &lt;button class="pt-chip" data-cat="Транспорт"&gt;? Транспорт&lt;/button&gt;
          &lt;button class="pt-chip" data-cat="Недвижимость"&gt;? Недвижимость&lt;/button&gt;
          &lt;button class="pt-chip" data-cat="Бизнес"&gt;? Бизнес&lt;/button&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div id="pt-catalog" class="pt-assets"&gt;&lt;/div&gt;
      &lt;p class="pt-note"&gt;Покупка за виртуальные PDC. Редкие активы — на аукционах во вкладке «Мультиплеер».&lt;/p&gt;
    &lt;/section&gt;

    
    &lt;section class="pt-sec" id="pt-ledger"&gt;
      &lt;div class="pt-sec-head"&gt;&lt;h2&gt;Игровой реестр&lt;/h2&gt;
        &lt;div class="pt-ledger-actions"&gt;
          &lt;button class="pt-btn pt-btn-acc" id="pt-mine-btn"&gt;⛏️ Добыть блок&lt;/button&gt;
          &lt;button class="pt-btn" id="pt-verify-btn"&gt;? Проверить цепь&lt;/button&gt;
          &lt;button class="pt-btn pt-btn-warn" id="pt-attack-btn"&gt;? Подделать блок&lt;/button&gt;
          &lt;button class="pt-btn" id="pt-repair-btn"&gt;? Восстановить&lt;/button&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="pt-summary" id="pt-ledger-stats"&gt;&lt;/div&gt;
      &lt;div class="pt-mine-box"&gt;
        &lt;span class="pt-mine-label"&gt;Поиск nonce · proof-of-work · правило: хеш должен начинаться с «0»&lt;/span&gt;
        &lt;code class="pt-mine-display" id="pt-mine-display"&gt;нажмите «Добыть блок»…&lt;/code&gt;
      &lt;/div&gt;
      &lt;div class="pt-ledger-cols"&gt;
        &lt;div&gt;&lt;h3 class="pt-subhead"&gt;⛓️ Цепь блоков&lt;/h3&gt;&lt;div id="pt-chain" class="pt-chain"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div&gt;&lt;h3 class="pt-subhead"&gt;? Последние транзакции&lt;/h3&gt;&lt;div id="pt-txs" class="pt-txs"&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;p class="pt-note"&gt;Учебная имитация блокчейна внутри игры. Подделка любого блока сразу видна. Никакой реальной криптовалюты.&lt;/p&gt;
    &lt;/section&gt;

    
    &lt;section class="pt-sec" id="pt-quests"&gt;
      &lt;div class="pt-sec-head"&gt;&lt;h2&gt;Квесты&lt;/h2&gt;&lt;div class="pt-quest-summary" id="pt-quest-summary"&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;p class="pt-note"&gt;Выполняйте квесты, чтобы освоить механику блокчейн-экономики и получить награды в PDC. Прогресс сохраняется.&lt;/p&gt;
      &lt;div id="pt-quest-list" class="pt-quest-list"&gt;&lt;/div&gt;
    &lt;/section&gt;

    
    &lt;section class="pt-sec" id="pt-contracts"&gt;
      &lt;div class="pt-sec-head"&gt;&lt;h2&gt;Смарт-договоры&lt;/h2&gt;&lt;/div&gt;
      &lt;p class="pt-note"&gt;Смарт-договор автоматически исполняет условия сделки. Соберите «КОГДА → ТОГДА → ИНАЧЕ», разверните в реестре (газ 5 PDC) и исполните. Всё внутри игры.&lt;/p&gt;
      &lt;div class="pt-templates"&gt;
        &lt;span class="pt-templates-label"&gt;Шаблоны:&lt;/span&gt;
        &lt;button class="pt-chip" data-tpl="escrow"&gt;? Эскроу-сделка&lt;/button&gt;
        &lt;button class="pt-chip" data-tpl="rent"&gt;? Авто-аренда&lt;/button&gt;
        &lt;button class="pt-chip" data-tpl="buy"&gt;? Условная покупка&lt;/button&gt;
      &lt;/div&gt;
      &lt;div class="pt-constructor"&gt;
        &lt;div class="pt-constr-row"&gt;&lt;span class="pt-constr-kw pt-kw-when"&gt;КОГДА&lt;/span&gt;&lt;select id="pt-c-when" class="pt-select"&gt;&lt;/select&gt;&lt;/div&gt;
        &lt;div class="pt-constr-row"&gt;&lt;span class="pt-constr-kw pt-kw-then"&gt;ТОГДА&lt;/span&gt;&lt;select id="pt-c-then" class="pt-select"&gt;&lt;/select&gt;&lt;/div&gt;
        &lt;div class="pt-constr-row"&gt;&lt;span class="pt-constr-kw pt-kw-else"&gt;ИНАЧЕ&lt;/span&gt;&lt;select id="pt-c-else" class="pt-select"&gt;&lt;/select&gt;&lt;/div&gt;
        &lt;div class="pt-constr-actions"&gt;&lt;button class="pt-btn pt-btn-acc" id="pt-c-deploy"&gt;? Развернуть договор · газ 5 PDC&lt;/button&gt;&lt;/div&gt;
      &lt;/div&gt;
      &lt;pre class="pt-code" id="pt-c-code"&gt;&lt;/pre&gt;
      &lt;h3 class="pt-subhead"&gt;? Развёрнутые договоры&lt;/h3&gt;
      &lt;div id="pt-c-list" class="pt-c-list"&gt;&lt;/div&gt;
    &lt;/section&gt;

    
    &lt;section class="pt-sec" id="pt-mp"&gt;
      &lt;div class="pt-sec-head"&gt;&lt;h2&gt;Мультиплеер&lt;/h2&gt;&lt;/div&gt;
      &lt;p class="pt-note"&gt;Симуляция онлайн-игры: другие игроки делают ставки, вступают в корпорации — их действия видны в «Эфире». В реальной версии здесь будут настоящие игроки. Всё внутри игры, никакой реальной криптовалюты.&lt;/p&gt;

      &lt;h3 class="pt-subhead"&gt;? Эфир активности&lt;/h3&gt;
      &lt;div id="pt-feed" class="pt-feed"&gt;&lt;/div&gt;

      &lt;h3 class="pt-subhead"&gt;? Аукционы редких активов&lt;/h3&gt;
      &lt;div id="pt-auctions" class="pt-auctions"&gt;&lt;/div&gt;

      &lt;h3 class="pt-subhead"&gt;?️ Корпорации&lt;/h3&gt;
      &lt;div id="pt-corps" class="pt-corps"&gt;&lt;/div&gt;
    &lt;/section&gt;

  &lt;/main&gt;

  &lt;footer class="pt-foot"&gt;
    &lt;p&gt;&lt;b&gt;PANDO Tycoon&lt;/b&gt; — развлекательная игра и образовательный симулятор. Все активы, валюта PDC и сделки — виртуальные игровые объекты без денежной стоимости. Не является финансовой услугой, инвестиционным инструментом или средством платежа. «Другие игроки» — симуляция. 18+&lt;/p&gt;
    &lt;p class="pt-foot-small"&gt;Тренировочная модель до легализации. После изменения законодательства возможна миграция на реальный протокол PANDO.&lt;/p&gt;
  &lt;/footer&gt;
&lt;/div&gt;

&lt;style&gt;
:root{--pt-bg:#070A0F;--pt-panel:#121A26;--pt-panel2:#0e1520;--pt-txt:#E7EDF5;--pt-dim:#8D99AC;--pt-line:rgba(160,180,220,.14);--pt-green:#3DDC84;--pt-gold:#F5B301;--pt-red:#FF5C5C;}
body{margin:0;background:radial-gradient(900px 500px at 80% -10%,rgba(61,220,132,.07),transparent 60%),var(--pt-bg);color:var(--pt-txt);font-family:'Manrope',sans-serif}
*{box-sizing:border-box}

/* Фикс: hidden должен работать поверх display:flex */
#pt-gate[hidden],#pt-legal-banner[hidden]{display:none !important;}

.pt-gate{position:fixed;inset:0;z-index:1000;background:rgba(4,7,12,.96);display:flex;align-items:center;justify-content:center;padding:20px}
.pt-gate-box{max-width:560px;background:var(--pt-panel);border:2px solid var(--pt-green);border-radius:16px;padding:32px;box-shadow:0 0 60px rgba(61,220,132,.25)}
.pt-gate-ico{font-size:40px;margin-bottom:12px}
.pt-gate-box h2{font-family:'Unbounded';font-size:1.5rem;margin:0 0 12px;color:var(--pt-green)}
.pt-gate-box p{color:var(--pt-dim);line-height:1.5;margin:8px 0}
.pt-gate-list{color:var(--pt-dim);line-height:1.6;padding-left:20px;margin:12px 0}
.pt-gate-list b{color:var(--pt-txt)}
.pt-gate-small{font-size:.8rem;color:var(--pt-dim)}
.pt-gate-btn{width:100%;margin-top:16px;padding:14px}
.pt-legal-banner{position:sticky;top:0;z-index:900;background:rgba(245,181,1,.12);border-bottom:1px solid rgba(245,181,1,.4);color:#FFD98A;font-size:.75rem;padding:8px 16px;display:flex;align-items:center;gap:10px;text-align:left}
.pt-banner-x{margin-left:auto;background:none;border:1px solid rgba(245,181,1,.5);color:#FFD98A;width:20px;height:20px;border-radius:50%;cursor:pointer;font-size:11px}
.pt-head{border-bottom:1px solid var(--pt-line);padding:14px 20px}
.pt-head-in{max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.pt-logo{font-family:'Unbounded';font-weight:800;font-size:1.2rem;letter-spacing:.05em}
.pt-logo em{font-style:normal;color:var(--pt-green);margin:0 6px}
.pt-logo-sub{font-size:.65rem;color:var(--pt-dim);text-transform:uppercase;letter-spacing:.15em}
.pt-head-stats{margin-left:auto;display:flex;gap:14px}
.pt-stat{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:10px;padding:6px 14px;text-align:center}
.pt-stat-l{display:block;font-size:.6rem;color:var(--pt-dim);text-transform:uppercase;letter-spacing:.1em}
.pt-stat b{font-size:1.05rem;color:var(--pt-gold)}
.pt-stat:nth-child(2) b{color:var(--pt-green)}
.pt-stat:nth-child(3) b{color:#7AB8FF}
.pt-btn{font-family:'Manrope';font-weight:700;background:var(--pt-panel);color:var(--pt-txt);border:1px solid var(--pt-line);border-radius:10px;padding:9px 16px;cursor:pointer;transition:.2s;font-size:.85rem}
.pt-btn:hover{border-color:var(--pt-green);transform:translateY(-1px)}
.pt-btn-acc{background:var(--pt-green);color:#05261a;border-color:var(--pt-green)}
.pt-btn-acc:hover{box-shadow:0 0 18px rgba(61,220,132,.5)}
.pt-btn-sm{padding:6px 12px;font-size:.75rem}
.pt-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.pt-btn-warn{background:transparent;border:1px solid var(--pt-red);color:var(--pt-red)}
.pt-btn-warn:hover{background:rgba(255,92,92,.12);box-shadow:0 0 14px rgba(255,92,92,.3)}
.pt-nav{max-width:1100px;margin:16px auto 0;padding:0 20px;display:flex;gap:8px;flex-wrap:wrap}
.pt-tab{background:var(--pt-panel);border:1px solid var(--pt-line);color:var(--pt-dim);border-radius:10px;padding:10px 18px;cursor:pointer;font-weight:600;font-size:.85rem;transition:.2s}
.pt-tab.act{color:var(--pt-green);border-color:var(--pt-green)}
.pt-main{max-width:1100px;margin:0 auto;padding:20px}
.pt-sec{display:none;animation:pt-fade .3s ease}
.pt-sec.act{display:block}
@keyframes pt-fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.pt-sec-head{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.pt-sec-head h2{font-family:'Unbounded';font-size:1.2rem;margin:0}
.pt-subhead{font-family:'Unbounded';font-size:.9rem;margin:18px 0 12px}
.pt-note{font-size:.7rem;color:var(--pt-dim);margin-top:12px;text-align:center}
.pt-ok{color:var(--pt-green)}.pt-bad{color:var(--pt-red)}
.pt-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:20px}
.pt-sum-card{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:12px;padding:14px;text-align:center}
.pt-sum-card span{display:block;font-size:.65rem;color:var(--pt-dim);text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px}
.pt-sum-card b{font-size:1.3rem;color:var(--pt-txt)}
.pt-sum-card b.pt-accent{color:var(--pt-green)}
.pt-assets{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}
.pt-asset{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:14px;padding:16px;transition:.2s;display:flex;flex-direction:column;gap:8px}
.pt-asset:hover{transform:translateY(-3px);border-color:var(--pt-green);box-shadow:0 8px 24px rgba(0,0,0,.4)}
.pt-asset-top{display:flex;align-items:center;gap:10px}
.pt-asset-ico{font-size:28px}
.pt-asset-name{font-weight:700;font-size:.95rem}
.pt-asset-cat{font-size:.6rem;color:var(--pt-dim);text-transform:uppercase;letter-spacing:.1em}
.pt-asset-desc{font-size:.78rem;color:var(--pt-dim);line-height:1.4;flex:1}
.pt-asset-meta{display:flex;justify-content:space-between;align-items:center;font-size:.8rem}
.pt-asset-income{color:var(--pt-green);font-weight:700}
.pt-asset-cost{color:var(--pt-gold);font-weight:700}
.pt-asset .pt-btn{width:100%}
.pt-empty{grid-column:1/-1;text-align:center;color:var(--pt-dim);padding:40px;background:var(--pt-panel);border:1px dashed var(--pt-line);border-radius:14px}
.pt-filters{display:flex;gap:8px;flex-wrap:wrap}
.pt-chip{background:var(--pt-panel);border:1px solid var(--pt-line);color:var(--pt-dim);border-radius:999px;padding:6px 14px;cursor:pointer;font-size:.75rem;font-weight:600;transition:.2s}
.pt-chip.act{color:#05261a;background:var(--pt-green);border-color:var(--pt-green)}
.pt-cd{height:6px;background:var(--pt-panel2);border-radius:3px;overflow:hidden;margin-top:4px}
.pt-cd i{display:block;height:100%;background:var(--pt-gold);width:0%;transition:width .5s linear}
.pt-toast{position:fixed;bottom:24px;right:24px;z-index:950;background:var(--pt-panel);border:1px solid var(--pt-green);border-left:4px solid var(--pt-green);color:var(--pt-txt);padding:12px 18px;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.5);font-size:.85rem;max-width:320px;animation:pt-toast .3s ease}
.pt-toast.err{border-color:var(--pt-red);border-left-color:var(--pt-red)}
@keyframes pt-toast{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:none}}
.pt-foot{border-top:1px solid var(--pt-line);margin-top:30px;padding:20px;text-align:center}
.pt-foot p{max-width:800px;margin:0 auto 8px;font-size:.7rem;color:var(--pt-dim);line-height:1.5}
.pt-foot-small{font-size:.62rem;opacity:.7}
.pt-ledger-actions{display:flex;gap:8px;flex-wrap:wrap}
.pt-mine-box{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:12px;padding:14px;margin-bottom:18px}
.pt-mine-label{display:block;font-size:.7rem;color:var(--pt-dim);margin-bottom:8px;text-transform:uppercase;letter-spacing:.08em}
.pt-mine-display{display:block;font-family:'JetBrains Mono',monospace;font-size:.8rem;color:var(--pt-green);word-break:break-all;min-height:1.2em}
.pt-ledger-cols{display:grid;grid-template-columns:1.2fr 1fr;gap:20px}
.pt-chain{display:flex;flex-direction:column;max-height:520px;overflow-y:auto;padding-right:6px}
.pt-block{background:var(--pt-panel);border:1px solid var(--pt-line);border-left:3px solid var(--pt-green);border-radius:10px;padding:12px}
.pt-block-bad{border-left-color:var(--pt-red);background:rgba(255,92,92,.06)}
.pt-block-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.pt-block-head b{font-size:.9rem}
.pt-block-badge{font-size:.62rem;padding:2px 8px;border-radius:999px;font-weight:700}
.pt-block-badge.ok{background:rgba(61,220,132,.15);color:var(--pt-green)}
.pt-block-badge.bad{background:rgba(255,92,92,.15);color:var(--pt-red)}
.pt-block-row{display:flex;justify-content:space-between;gap:10px;font-size:.7rem;margin:3px 0}
.pt-block-row span{color:var(--pt-dim);flex:0 0 42px}
.pt-block-row code{font-family:'JetBrains Mono',monospace;color:var(--pt-txt);word-break:break-all;text-align:right}
.pt-link{text-align:center;color:var(--pt-green);font-size:.9rem;line-height:1;padding:2px 0}
.pt-txs{display:flex;flex-direction:column;gap:8px;max-height:520px;overflow-y:auto}
.pt-tx{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:4px}
.pt-tx-type{font-size:.6rem;color:var(--pt-gold);text-transform:uppercase;letter-spacing:.1em}
.pt-tx-main{font-size:.78rem}
.pt-tx-amt{font-size:.8rem;color:var(--pt-green);font-weight:700}
.pt-quest-summary{display:flex;align-items:baseline;gap:8px}
.pt-quest-count{font-family:'Unbounded';font-size:1.15rem;color:var(--pt-green)}
.pt-quest-label{font-size:.68rem;color:var(--pt-dim);text-transform:uppercase;letter-spacing:.1em}
.pt-quest-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.pt-quest{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:12px;padding:16px;display:flex;gap:12px;transition:.2s}
.pt-quest:hover{transform:translateY(-2px)}
.pt-quest.done{border-color:var(--pt-green);background:rgba(61,220,132,.06)}
.pt-quest-ico{font-size:26px;flex:0 0 auto;line-height:1.2}
.pt-quest-body{flex:1;display:flex;flex-direction:column;gap:5px}
.pt-quest-top{display:flex;justify-content:space-between;align-items:center;gap:8px}
.pt-quest-top b{font-size:.9rem}
.pt-quest-reward{font-size:.72rem;color:var(--pt-gold);font-weight:700;white-space:nowrap}
.pt-quest-desc{font-size:.75rem;color:var(--pt-dim);line-height:1.4}
.pt-quest-bar{height:6px;background:var(--pt-panel2);border-radius:3px;overflow:hidden;margin-top:6px}
.pt-quest-bar i{display:block;height:100%;background:var(--pt-green);border-radius:3px;transition:width .4s}
.pt-quest-prog{font-size:.66rem;color:var(--pt-dim);text-align:right;margin-top:2px}
.pt-quest.done .pt-quest-prog{color:var(--pt-green);font-weight:700}
.pt-templates{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.pt-templates-label{font-size:.7rem;color:var(--pt-dim);text-transform:uppercase;letter-spacing:.1em}
.pt-constructor{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:12px;padding:18px;margin-bottom:14px;display:flex;flex-direction:column;gap:12px}
.pt-constr-row{display:flex;align-items:center;gap:12px}
.pt-constr-kw{font-family:'Unbounded';font-size:.75rem;font-weight:700;flex:0 0 70px;text-align:right}
.pt-kw-when{color:#7AB8FF}.pt-kw-then{color:var(--pt-green)}.pt-kw-else{color:var(--pt-gold)}
.pt-select{flex:1;background:var(--pt-panel2);border:1px solid var(--pt-line);color:var(--pt-txt);padding:10px;border-radius:8px;font-size:.85rem;outline:none}
.pt-select:focus{border-color:var(--pt-green)}
.pt-constr-actions{display:flex;justify-content:flex-end}
.pt-code{background:#0a0e14;border:1px solid var(--pt-line);border-radius:10px;padding:14px;font-family:'JetBrains Mono',monospace;font-size:.78rem;color:#9fd8b0;white-space:pre-wrap;margin:0 0 20px;overflow-x:auto}
.pt-c-list{display:flex;flex-direction:column;gap:12px}
.pt-contract{background:var(--pt-panel);border:1px solid var(--pt-line);border-left:3px solid #7AB8FF;border-radius:10px;padding:14px}
.pt-contract.done{border-left-color:var(--pt-green)}
.pt-contract-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;gap:10px}
.pt-contract-head code{font-family:'JetBrains Mono',monospace;font-size:.75rem;color:var(--pt-dim)}
.pt-contract-status{font-size:.7rem;color:var(--pt-green);font-weight:700}
.pt-contract-line{font-size:.8rem;margin:4px 0;line-height:1.45}
.pt-contract-line .pt-kw-when,.pt-contract-line .pt-kw-then,.pt-contract-line .pt-kw-else{font-family:'Unbounded';font-size:.62rem;font-weight:700;margin-right:6px}

/* ── БЛОК 6: Мультиплеер ── */
.pt-feed{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:12px;padding:12px;max-height:200px;overflow-y:auto;margin-bottom:8px;display:flex;flex-direction:column;gap:6px}
.pt-feed-item{display:flex;gap:10px;font-size:.78rem;color:var(--pt-dim);padding:6px 8px;background:var(--pt-panel2);border-radius:6px;animation:pt-fade .3s ease}
.pt-feed-time{color:var(--pt-green);font-family:'JetBrains Mono',monospace;font-size:.68rem;flex:0 0 auto}
.pt-auctions{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;margin-bottom:8px}
.pt-auction{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:10px}
.pt-auction.done{opacity:.75}
.pt-auction-top{display:flex;align-items:center;gap:10px}
.pt-auction-ico{font-size:26px}
.pt-auction-name{font-weight:700;font-size:.95rem}
.pt-auction-cat{font-size:.62rem;color:var(--pt-dim)}
.pt-auction-timer{margin-left:auto;font-family:'JetBrains Mono',monospace;color:var(--pt-gold);font-size:.8rem;white-space:nowrap}
.pt-auction-meta{display:flex;justify-content:space-between;font-size:.75rem;color:var(--pt-dim);flex-wrap:wrap;gap:6px}
.pt-auction-meta b{color:var(--pt-gold)}
.pt-auction-bidrow{display:flex;gap:8px}
.pt-auction-in{flex:1;background:var(--pt-panel2);border:1px solid var(--pt-line);color:var(--pt-txt);padding:8px;border-radius:8px;font-size:.85rem;outline:none;min-width:0}
.pt-auction-status{font-size:.8rem;color:var(--pt-green);font-weight:700;text-align:center;padding:8px}
.pt-corps{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.pt-corp{background:var(--pt-panel);border:1px solid var(--pt-line);border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:10px}
.pt-corp.member{border-color:var(--pt-green)}
.pt-corp.own{border-color:var(--pt-gold)}
.pt-corp-top{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.pt-corp-top b{font-size:.95rem}
.pt-corp-status{font-size:.72rem;color:var(--pt-green);font-weight:700}
.pt-corp-meta{display:flex;flex-direction:column;gap:4px;font-size:.75rem;color:var(--pt-dim)}
.pt-corp-create{display:flex;gap:8px}
.pt-corp-name{flex:1;background:var(--pt-panel2);border:1px solid var(--pt-line);color:var(--pt-txt);padding:8px;border-radius:8px;font-size:.85rem;outline:none;min-width:0}

@media(max-width:820px){.pt-ledger-cols{grid-template-columns:1fr}}
@media(max-width:640px){.pt-head-stats{margin-left:0;width:100%;justify-content:space-between}.pt-summary{grid-template-columns:1fr 1fr}}
&lt;/style&gt;


&lt;script&gt;
window.PT=(function(){
  var KEY='pt_state_v1';var COLLECT_CD=20000;
  var state={accepted:false,pdc:1000,level:1,xp:0,rep:0,assets:[],txs:[],blocks:[],quests:{},totalEarned:0};
  var CATALOG=[
    {id:'shop1',cat:'Бизнес',icon:'?',name:'Магазин у дома',cost:300,income:3,desc:'Розничная торговля у дома.'},
    {id:'farm1',cat:'Производство',icon:'?',name:'Ферма',cost:400,income:4,desc:'Выращивает урожай каждый цикл.'},
    {id:'factory1',cat:'Производство',icon:'?',name:'Мини-завод',cost:500,income:5,desc:'Производит детали на продажу.'},
    {id:'land1',cat:'Недвижимость',icon:'?️',name:'Земельный участок',cost:600,income:6,desc:'Земля, которая приносит аренду.'},
    {id:'ship1',cat:'Транспорт',icon:'?',name:'Пароход «Пионер»',cost:800,income:9,desc:'Перевозит грузы по реке.'},
    {id:'mine1',cat:'Производство',icon:'⛏️',name:'Шахта',cost:1000,income:12,desc:'Добывает руду круглосуточно.'},
    {id:'estate1',cat:'Недвижимость',icon:'?',name:'Офис-центр',cost:1200,income:14,desc:'Сдаётся в аренду компаниям.'},
    {id:'plane1',cat:'Транспорт',icon:'✈️',name:'Грузовой самолёт',cost:1500,income:18,desc:'Быстрые авиаперевозки.'}
  ];
  function save(){try{localStorage.setItem(KEY,JSON.stringify(state));}catch(e){}}
  function load(){try{var raw=localStorage.getItem(KEY);if(raw){var s=JSON.parse(raw);for(var k in s){if(state.hasOwnProperty(k))state[k]=s[k];}}}catch(e){}}
  function hash(str){var h=0x811c9dc5;for(var i=0;i&lt;str.length;i++){h^=str.charCodeAt(i);h=Math.imul(h,0x01000193);}var hex=('0000000'+(h&gt;&gt;&gt;0).toString(16)).slice(-8);return (hex+hex+hex+hex+hex).slice(0,40);}
  function addTx(from,to,amount,type){
    var tx={id:state.txs.length+1,from:from,to:to,amount:amount,type:type,ts:Date.now()};
    state.txs.unshift(tx);if(state.txs.length&gt;50)state.txs.pop();
    if(state.txs.length%3===0){
      var prev=state.blocks.length?state.blocks[0].hash:hash('genesis');
      var b={height:state.blocks.length+1,prevHash:prev,hash:hash(prev+tx.id+Date.now()),txCount:3,ts:Date.now()};
      state.blocks.unshift(b);if(state.blocks.length&gt;30)state.blocks.pop();
    }
    save();return tx;
  }
  function addXP(n){state.xp+=n;state.level=1+Math.floor(state.xp/100);save();}
  load();
  return {state:state,CATALOG:CATALOG,COLLECT_CD:COLLECT_CD,save:save,load:load,addTx:addTx,addXP:addXP,hash:hash,
    reset:function(){if(confirm('Сбросить весь прогресс игры?')){localStorage.removeItem(KEY);localStorage.removeItem('pt_contracts_v1');localStorage.removeItem('pt_corp_v1');location.reload();}}};
})();
&lt;/script&gt;


&lt;script&gt;
(function(){
  var PT=window.PT,S=PT.state;
  function $(id){return document.getElementById(id);}
  function fmt(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n));}
  function toast(msg,isErr){
    var old=document.querySelector('.pt-toast');if(old)old.remove();
    var t=document.createElement('div');t.className='pt-toast'+(isErr?' err':'');t.textContent=msg;
    document.body.appendChild(t);setTimeout(function(){t.remove();},2600);
  }
  function showGate(){$('pt-gate').hidden=false;$('pt-legal-banner').hidden=false;}
  function hideGate(){$('pt-gate').hidden=true;$('pt-legal-banner').hidden=false;}
  $('pt-gate-accept').onclick=function(){S.accepted=true;PT.save();hideGate();toast('Добро пожаловать в PANDO Tycoon! Это игра ?');};
  $('pt-banner-more').onclick=function(){showGate();};
  if(!S.accepted){showGate();}else{$('pt-legal-banner').hidden=false;}

  document.querySelectorAll('.pt-tab').forEach(function(t){
    t.onclick=function(){
      document.querySelectorAll('.pt-tab').forEach(function(x){x.classList.remove('act');});
      document.querySelectorAll('.pt-sec').forEach(function(x){x.classList.remove('act');});
      t.classList.add('act');
      var map={dash:'pt-dash',shop:'pt-shop',ledger:'pt-ledger',quests:'pt-quests',contracts:'pt-contracts',mp:'pt-mp'};
      $(map[t.dataset.t]).classList.add('act');
    };
  });

  function totalAssets(){return S.assets.reduce(function(n,a){return n+a.count;},0);}
  function incomeRate(){return S.assets.reduce(function(r,a){return r+a.income*a.count;},0);}
  function readyCount(){var now=Date.now();return S.assets.filter(function(a){return now-a.lastCollect&gt;=PT.COLLECT_CD;}).length;}
  function renderHead(){
    $('pt-pdc').textContent=fmt(S.pdc);
    $('pt-level').textContent=S.level;
    $('pt-rep').textContent=S.rep;
    $('pt-assets-count').textContent=totalAssets();
    $('pt-income-rate').textContent=fmt(incomeRate())+' PDC';
    $('pt-total-earned').textContent=fmt(S.totalEarned)+' PDC';
    $('pt-ready-count').textContent=readyCount();
  }
  function renderMyAssets(){
    var box=$('pt-my-assets');
    if(!S.assets.length){box.innerHTML='&lt;div class="pt-empty"&gt;Пока пусто. Купите первый актив в «Магазине» →&lt;/div&gt;';return;}
    box.innerHTML='';
    S.assets.forEach(function(a,idx){
      var now=Date.now(),ready=now-a.lastCollect&gt;=PT.COLLECT_CD,left=Math.max(0,PT.COLLECT_CD-(now-a.lastCollect));
      var pct=ready?100:Math.round((1-left/PT.COLLECT_CD)*100);
      var el=document.createElement('div');el.className='pt-asset';
      el.innerHTML='&lt;div class="pt-asset-top"&gt;&lt;span class="pt-asset-ico"&gt;'+a.icon+'&lt;/span&gt;&lt;div&gt;&lt;div class="pt-asset-name"&gt;'+a.name+'&lt;/div&gt;&lt;div class="pt-asset-cat"&gt;'+a.cat+'&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;'
        +'&lt;div class="pt-asset-desc"&gt;'+a.desc+'&lt;/div&gt;'
        +'&lt;div class="pt-asset-meta"&gt;&lt;span class="pt-asset-income"&gt;+'+(a.income*a.count)+' PDC&lt;/span&gt;&lt;span&gt;'+a.count+' шт.&lt;/span&gt;&lt;/div&gt;'
        +'&lt;div class="pt-cd"&gt;&lt;i style="width:'+pct+'%"&gt;&lt;/i&gt;&lt;/div&gt;'
        +'&lt;button class="pt-btn '+(ready?'pt-btn-acc':'')+'" data-i="'+idx+'" '+(ready?'':'disabled')+'&gt;Собрать '+(ready?a.income*a.count+' PDC':Math.ceil(left/1000)+' сек')+'&lt;/button&gt;';
      box.appendChild(el);
    });
    box.querySelectorAll('button[data-i]').forEach(function(b){b.onclick=function(){collect(+b.dataset.i);};});
  }
  function collect(i){
    var a=S.assets[i];if(!a)return;
    var now=Date.now();if(now-a.lastCollect&lt;PT.COLLECT_CD)return;
    var gain=a.income*a.count;
    S.pdc+=gain;S.totalEarned+=gain;a.lastCollect=now;
    PT.addXP(gain);PT.addTx('Актив «'+a.name+'»','Вы',gain,'доход');
    PT.save();renderAll();toast('+'+fmt(gain)+' PDC с «'+a.name+'» ?');
  }
  $('pt-collect-all').onclick=function(){
    var now=Date.now(),total=0,any=false;
    S.assets.forEach(function(a){if(now-a.lastCollect&gt;=PT.COLLECT_CD){var g=a.income*a.count;S.pdc+=g;S.totalEarned+=g;a.lastCollect=now;total+=g;PT.addXP(g);any=true;}});
    if(any){PT.addTx('Активы','Вы',total,'доход');PT.save();renderAll();toast('Собрано '+fmt(total)+' PDC со всех активов ?');}
    else toast('Пока ничего не готово к сбору',true);
  };
  var curCat='all';
  function renderCatalog(){
    var box=$('pt-catalog');box.innerHTML='';
    PT.CATALOG.filter(function(c){return curCat==='all'||c.cat===curCat;}).forEach(function(c){
      var owned=0;S.assets.forEach(function(a){if(a.id===c.id)owned=a.count;});
      var can=S.pdc&gt;=c.cost;
      var el=document.createElement('div');el.className='pt-asset';
      el.innerHTML='&lt;div class="pt-asset-top"&gt;&lt;span class="pt-asset-ico"&gt;'+c.icon+'&lt;/span&gt;&lt;div&gt;&lt;div class="pt-asset-name"&gt;'+c.name+'&lt;/div&gt;&lt;div class="pt-asset-cat"&gt;'+c.cat+'&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;'
        +'&lt;div class="pt-asset-desc"&gt;'+c.desc+'&lt;/div&gt;'
        +'&lt;div class="pt-asset-meta"&gt;&lt;span class="pt-asset-income"&gt;+'+c.income+' PDC/цикл&lt;/span&gt;&lt;span class="pt-asset-cost"&gt;'+fmt(c.cost)+' PDC&lt;/span&gt;&lt;/div&gt;'
        +'&lt;button class="pt-btn pt-btn-acc" data-id="'+c.id+'" '+(can?'':'disabled')+'&gt;'+((owned?'Ещё один · ':'Купить · ')+fmt(c.cost)+' PDC')+'&lt;/button&gt;';
      box.appendChild(el);
    });
    box.querySelectorAll('button[data-id]').forEach(function(b){b.onclick=function(){buy(b.dataset.id);};});
  }
  function buy(id){
    var c=null;PT.CATALOG.forEach(function(x){if(x.id===id)c=x;});
    if(!c||S.pdc&lt;c.cost){toast('Недостаточно PDC',true);return;}
    S.pdc-=c.cost;
    var found=null;S.assets.forEach(function(a){if(a.id===id)found=a;});
    if(found){found.count++;}else{S.assets.push({id:c.id,name:c.name,icon:c.icon,cat:c.cat,income:c.income,desc:c.desc,count:1,lastCollect:Date.now()});}
    PT.addXP(Math.round(c.cost/10));S.rep++;PT.addTx('Вы','Магазин',c.cost,'покупка:'+c.name);
    PT.save();renderAll();toast('Куплено: '+c.name+' ? (игровая сделка)');
  }
  $('pt-filters').querySelectorAll('.pt-chip').forEach(function(ch){
    ch.onclick=function(){
      $('pt-filters').querySelectorAll('.pt-chip').forEach(function(x){x.classList.remove('act');});
      ch.classList.add('act');curCat=ch.dataset.cat;renderCatalog();
    };
  });
  $('pt-reset').onclick=PT.reset;
  function renderAll(){renderHead();renderMyAssets();renderCatalog();}
  renderAll();
  setInterval(function(){if(S.accepted){renderHead();renderMyAssets();}},1000);
})();
&lt;/script&gt;


&lt;script&gt;
(function(){
  var PT=window.PT,S=PT.state;
  function $(id){return document.getElementById(id);}
  function fmt(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n));}
  var mining=false;
  function toastLedger(msg,isErr){
    var old=document.querySelector('.pt-toast');if(old)old.remove();
    var t=document.createElement('div');t.className='pt-toast'+(isErr?' err':'');t.textContent=msg;
    document.body.appendChild(t);setTimeout(function(){t.remove();},2600);
  }
  function verifyChain(){
    var res=[];
    for(var i=0;i&lt;S.blocks.length;i++){
      var b=S.blocks[i];
      if(i===S.blocks.length-1){res[i]=(b.prevHash===PT.hash('genesis'));}
      else{res[i]=(b.prevHash===S.blocks[i+1].hash);}
    }
    return res;
  }
  function renderLedger(){
    var results=verifyChain();
    var allValid=results.length===0||results.every(function(r){return r;});
    $('pt-ledger-stats').innerHTML=
      '&lt;div class="pt-sum-card"&gt;&lt;span&gt;Высота цепи&lt;/span&gt;&lt;b&gt;'+S.blocks.length+'&lt;/b&gt;&lt;/div&gt;'+
      '&lt;div class="pt-sum-card"&gt;&lt;span&gt;Транзакций&lt;/span&gt;&lt;b&gt;'+S.txs.length+'&lt;/b&gt;&lt;/div&gt;'+
      '&lt;div class="pt-sum-card"&gt;&lt;span&gt;Награда за блок&lt;/span&gt;&lt;b&gt;25 PDC&lt;/b&gt;&lt;/div&gt;'+
      '&lt;div class="pt-sum-card"&gt;&lt;span&gt;Статус цепи&lt;/span&gt;&lt;b class="'+(allValid?'pt-ok':'pt-bad')+'"&gt;'+(allValid?'Целостна ✓':'Нарушена ✗')+'&lt;/b&gt;&lt;/div&gt;';
    var chain=$('pt-chain');
    if(!S.blocks.length){chain.innerHTML='&lt;div class="pt-empty"&gt;Цепь пуста. Нажмите «⛏️ Добыть блок».&lt;/div&gt;';}
    else{
      chain.innerHTML='';
      S.blocks.forEach(function(b,i){
        var bad=(results[i]===false)||b._orig;
        var el=document.createElement('div');el.className='pt-block'+(bad?' pt-block-bad':'');
        var rows='&lt;div class="pt-block-row"&gt;&lt;span&gt;hash&lt;/span&gt;&lt;code&gt;'+b.hash.slice(0,20)+'…&lt;/code&gt;&lt;/div&gt;'
          +'&lt;div class="pt-block-row"&gt;&lt;span&gt;prev&lt;/span&gt;&lt;code&gt;'+(b.prevHash?b.prevHash.slice(0,20)+'…':'GENESIS')+'&lt;/code&gt;&lt;/div&gt;';
        if(b.nonce!==undefined)rows+='&lt;div class="pt-block-row"&gt;&lt;span&gt;nonce&lt;/span&gt;&lt;code&gt;'+b.nonce+'&lt;/code&gt;&lt;/div&gt;';
        rows+='&lt;div class="pt-block-row"&gt;&lt;span&gt;время&lt;/span&gt;&lt;code&gt;'+new Date(b.ts).toLocaleTimeString('ru-RU')+'&lt;/code&gt;&lt;/div&gt;';
        el.innerHTML='&lt;div class="pt-block-head"&gt;&lt;b&gt;Блок #'+b.height+'&lt;/b&gt;&lt;span class="pt-block-badge '+(bad?'bad':'ok')+'"&gt;'+(bad?'✗ разрыв':'✓ связан')+'&lt;/span&gt;&lt;/div&gt;'+rows;
        chain.appendChild(el);
        if(i&lt;S.blocks.length-1){var lk=document.createElement('div');lk.className='pt-link';lk.textContent='⬆';chain.appendChild(lk);}
      });
    }
    var txs=$('pt-txs');
    if(!S.txs.length){txs.innerHTML='&lt;div class="pt-empty"&gt;Транзакций пока нет.&lt;/div&gt;';}
    else{
      txs.innerHTML='';
      S.txs.slice(0,12).forEach(function(t){
        var el=document.createElement('div');el.className='pt-tx';
        el.innerHTML='&lt;span class="pt-tx-type"&gt;'+t.type+'&lt;/span&gt;&lt;span class="pt-tx-main"&gt;&lt;b&gt;'+t.from+'&lt;/b&gt; → &lt;b&gt;'+t.to+'&lt;/b&gt;&lt;/span&gt;&lt;span class="pt-tx-amt"&gt;+'+t.amount+' PDC&lt;/span&gt;';
        txs.appendChild(el);
      });
    }
  }
  $('pt-mine-btn').onclick=function(){
    if(mining)return;mining=true;
    var reward=25;
    var prev=S.blocks.length?S.blocks[0].hash:PT.hash('genesis');
    var height=S.blocks.length+1;
    S.txs.unshift({id:S.txs.length+1,from:'Сеть (эмиссия)',to:'Майнер',amount:reward,type:'награда за блок',ts:Date.now()});
    if(S.txs.length&gt;50)S.txs.pop();
    var txData=S.txs.slice(0,3).map(function(t){return t.id;}).join(',');
    var nonce=0,display=$('pt-mine-display');
    var timer=setInterval(function(){
      for(var b=0;b&lt;15;b++){
        var h=PT.hash(prev+'|'+txData+'|'+height+'|'+nonce);
        display.textContent='nonce '+nonce+'  →  '+h;
        if(h.charAt(0)==='0'){
          clearInterval(timer);
          S.blocks.unshift({height:height,prevHash:prev,hash:h,nonce:nonce,txCount:3,ts:Date.now()});
          if(S.blocks.length&gt;30)S.blocks.pop();
          S.pdc+=reward;PT.save();
          var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
          mining=false;renderLedger();
          toastLedger('Блок #'+height+' найден! nonce='+nonce+', награда +'+reward+' PDC ⛏️');
          return;
        }
        nonce++;
      }
    },40);
  };
  $('pt-verify-btn').onclick=function(){
    renderLedger();
    var res=verifyChain();
    if(res.length===0){toastLedger('Цепь пуста — нечего проверять');return;}
    var ok=res.every(function(r){return r;});
    toastLedger(ok?'Цепь целостна: все блоки связаны ✓':'Обнаружен разрыв цепи! См. красные блоки ✗',!ok);
  };
  $('pt-attack-btn').onclick=function(){
    if(S.blocks.length&lt;2){toastLedger('Нужно минимум 2 блока',true);return;}
    var idx=S.blocks.length-2,b=S.blocks[idx];
    if(!b._orig)b._orig=b.hash;
    b.hash=PT.hash('TAMPERED'+Date.now());
    PT.save();renderLedger();
    toastLedger('Блок #'+b.height+' подделан. Нажмите «Проверить цепь» ?',true);
  };
  $('pt-repair-btn').onclick=function(){
    var changed=false;
    S.blocks.forEach(function(b){if(b._orig){b.hash=b._orig;delete b._orig;changed=true;}});
    if(changed){PT.save();renderLedger();toastLedger('Цепь восстановлена ✓');}
    else toastLedger('Подделанных блоков нет');
  };
  var tab=document.querySelector('.pt-tab[data-t="ledger"]');
  if(tab)tab.addEventListener('click',renderLedger);
  renderLedger();
})();
&lt;/script&gt;


&lt;script&gt;
(function(){
  var PT=window.PT,S=PT.state;
  function $(id){return document.getElementById(id);}
  function fmt(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n));}
  if(!S.quests)S.quests={};
  function totalAssets(){return S.assets.reduce(function(n,a){return n+a.count;},0);}
  function totalCats(){var c={};S.assets.forEach(function(a){c[a.cat]=1;});return Object.keys(c).length;}
  var QUESTS=[
    {id:'first_asset',icon:'?',name:'Первый актив',desc:'Купите свой первый актив',reward:50,check:function(){var n=totalAssets();return{done:n&gt;=1,cur:n,goal:1};}},
    {id:'first_income',icon:'?',name:'Первый доход',desc:'Соберите первый доход',reward:50,check:function(){var n=S.totalEarned&gt;=1?1:0;return{done:S.totalEarned&gt;=1,cur:n,goal:1};}},
    {id:'tycoon',icon:'?️',name:'Магнат',desc:'Владейте 3 активами',reward:100,check:function(){var n=totalAssets();return{done:n&gt;=3,cur:n,goal:3};}},
    {id:'empire',icon:'?',name:'Империя',desc:'Владейте 6 активами',reward:200,check:function(){var n=totalAssets();return{done:n&gt;=6,cur:n,goal:6};}},
    {id:'diversify',icon:'?',name:'Диверсификация',desc:'Активы в 3 категориях',reward:100,check:function(){var n=totalCats();return{done:n&gt;=3,cur:n,goal:3};}},
    {id:'first_block',icon:'⛏️',name:'Первый блок',desc:'Добудьте первый блок',reward:75,check:function(){var n=S.blocks.length;return{done:n&gt;=1,cur:n,goal:1};}},
    {id:'chain3',icon:'⛓️',name:'Цепочка',desc:'Цепь из 3 блоков',reward:100,check:function(){var n=S.blocks.length;return{done:n&gt;=3,cur:n,goal:3};}},
    {id:'rep3',icon:'⭐',name:'Репутация',desc:'3 очка репутации',reward:75,check:function(){var n=S.rep;return{done:n&gt;=3,cur:n,goal:3};}},
    {id:'saver',icon:'?',name:'Накопитель',desc:'Накопите 2 000 PDC',reward:100,check:function(){var n=Math.floor(S.pdc);return{done:S.pdc&gt;=2000,cur:n,goal:2000};}},
    {id:'level3',icon:'?',name:'Опытный',desc:'Достигните 3 уровня',reward:150,check:function(){var n=S.level;return{done:n&gt;=3,cur:n,goal:3};}}
  ];
  function toastQuest(msg){
    var old=document.querySelector('.pt-toast');if(old)old.remove();
    var t=document.createElement('div');t.className='pt-toast';t.textContent=msg;
    document.body.appendChild(t);setTimeout(function(){t.remove();},2800);
  }
  function renderQuests(){
    var list=$('pt-quest-list');list.innerHTML='';
    var doneCount=0;
    QUESTS.forEach(function(q){
      var done=!!S.quests[q.id];if(done)doneCount++;
      var r=q.check();
      var pct=Math.min(100,Math.round((r.cur/r.goal)*100));
      var el=document.createElement('div');el.className='pt-quest'+(done?' done':'');
      el.innerHTML='&lt;div class="pt-quest-ico"&gt;'+q.icon+'&lt;/div&gt;'
        +'&lt;div class="pt-quest-body"&gt;'
        +'&lt;div class="pt-quest-top"&gt;&lt;b&gt;'+q.name+'&lt;/b&gt;&lt;span class="pt-quest-reward"&gt;+'+q.reward+' PDC&lt;/span&gt;&lt;/div&gt;'
        +'&lt;div class="pt-quest-desc"&gt;'+q.desc+'&lt;/div&gt;'
        +'&lt;div class="pt-quest-bar"&gt;&lt;i style="width:'+(done?100:pct)+'%"&gt;&lt;/i&gt;&lt;/div&gt;'
        +'&lt;div class="pt-quest-prog"&gt;'+(done?'Выполнено ✓':fmt(r.cur)+' / '+fmt(r.goal))+'&lt;/div&gt;'
        +'&lt;/div&gt;';
      list.appendChild(el);
    });
    $('pt-quest-summary').innerHTML='&lt;span class="pt-quest-count"&gt;'+doneCount+' / '+QUESTS.length+'&lt;/span&gt;&lt;span class="pt-quest-label"&gt;выполнено&lt;/span&gt;';
  }
  function update(){
    var newly=[];
    QUESTS.forEach(function(q){
      if(S.quests[q.id])return;
      if(q.check().done){S.quests[q.id]=true;S.pdc+=q.reward;PT.addXP(q.reward);newly.push(q);}
    });
    if(newly.length){
      PT.save();
      var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
      var lvlEl=$('pt-level');if(lvlEl)lvlEl.textContent=S.level;
      newly.forEach(function(q){toastQuest(q.icon+' Квест выполнен: '+q.name+' · +'+q.reward+' PDC');});
    }
    renderQuests();
  }
  var qtab=document.querySelector('.pt-tab[data-t="quests"]');
  if(qtab)qtab.addEventListener('click',renderQuests);
  update();
  setInterval(function(){if(S.accepted)update();},1500);
})();
&lt;/script&gt;


&lt;script&gt;
(function(){
  var PT=window.PT,S=PT.state;
  function $(id){return document.getElementById(id);}
  function fmt(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n));}
  var CKEY='pt_contracts_v1',contracts=[];
  function loadC(){try{var raw=localStorage.getItem(CKEY);if(raw)contracts=JSON.parse(raw);}catch(e){contracts=[];}}
  function saveC(){try{localStorage.setItem(CKEY,JSON.stringify(contracts));}catch(e){}}
  loadC();
  var WHEN_OPTS=['баланс достиг 500 PDC','игрок владеет 3 активами','добыт новый блок','наступил срок платежа','покупатель перевёл 100 PDC в эскроу'];
  var THEN_OPTS=['перевести 100 PDC продавцу и раскрыть эскроу','начислить бонус 25 PDC','автоматически купить актив «Ферма»','разделить прибыль 50/50 между партнёрами','передать актив покупателю'];
  var ELSE_OPTS=['вернуть средства покупателю','ждать следующего цикла','начислить пеню 1 PDC','отменить сделку и уведомить стороны'];
  var TPL={
    escrow:{when:'покупатель перевёл 100 PDC в эскроу',then:'передать актив покупателю',otherwise:'вернуть средства покупателю'},
    rent:{when:'наступил срок платежа',then:'разделить прибыль 50/50 между партнёрами',otherwise:'начислить пеню 1 PDC'},
    buy:{when:'баланс достиг 500 PDC',then:'автоматически купить актив «Ферма»',otherwise:'ждать следующего цикла'}
  };
  function fill(id,opts){var el=$(id);el.innerHTML='';opts.forEach(function(o){var op=document.createElement('option');op.value=o;op.textContent=o;el.appendChild(op);});}
  fill('pt-c-when',WHEN_OPTS);fill('pt-c-then',THEN_OPTS);fill('pt-c-else',ELSE_OPTS);
  function toastC(msg,isErr){
    var old=document.querySelector('.pt-toast');if(old)old.remove();
    var t=document.createElement('div');t.className='pt-toast'+(isErr?' err':'');t.textContent=msg;
    document.body.appendChild(t);setTimeout(function(){t.remove();},2800);
  }
  function renderCode(){
    var w=$('pt-c-when').value,t=$('pt-c-then').value,o=$('pt-c-else').value;
    $('pt-c-code').textContent='contract PandoDeal {\n  when  : '+w+'\n  then  : '+t+'\n  else  : '+o+'\n  // автоисполнение в игровом реестре PANDO\n}';
  }
  ['pt-c-when','pt-c-then','pt-c-else'].forEach(function(id){$(id).addEventListener('change',renderCode);});
  renderCode();
  document.querySelectorAll('.pt-chip[data-tpl]').forEach(function(ch){
    ch.onclick=function(){
      var t=TPL[ch.dataset.tpl];
      $('pt-c-when').value=t.when;$('pt-c-then').value=t.then;$('pt-c-else').value=t.otherwise;
      renderCode();
    };
  });
  function renderList(){
    var box=$('pt-c-list');
    if(!contracts.length){box.innerHTML='&lt;div class="pt-empty"&gt;Развёрнутых договоров пока нет. Соберите договор выше.&lt;/div&gt;';return;}
    box.innerHTML='';
    contracts.forEach(function(c){
      var el=document.createElement('div');el.className='pt-contract'+(c.status==='executed'?' done':'');
      var btn=c.status==='executed'
        ?'&lt;span class="pt-contract-status"&gt;✓ исполнен автоматически&lt;/span&gt;'
        :'&lt;button class="pt-btn pt-btn-acc pt-btn-sm" data-h="'+c.hash+'"&gt;▶ Исполнить&lt;/button&gt;';
      el.innerHTML='&lt;div class="pt-contract-head"&gt;&lt;code&gt;'+c.hash.slice(0,18)+'…&lt;/code&gt;'+btn+'&lt;/div&gt;'
        +'&lt;div class="pt-contract-line"&gt;&lt;span class="pt-kw-when"&gt;КОГДА&lt;/span&gt;'+c.when+'&lt;/div&gt;'
        +'&lt;div class="pt-contract-line"&gt;&lt;span class="pt-kw-then"&gt;ТОГДА&lt;/span&gt;'+c.then+'&lt;/div&gt;'
        +'&lt;div class="pt-contract-line"&gt;&lt;span class="pt-kw-else"&gt;ИНАЧЕ&lt;/span&gt;'+c.otherwise+'&lt;/div&gt;';
      box.appendChild(el);
    });
    box.querySelectorAll('button[data-h]').forEach(function(b){b.onclick=function(){execute(b.dataset.h);};});
  }
  $('pt-c-deploy').onclick=function(){
    if(S.pdc&lt;5){toastC('Недостаточно PDC для газа (нужно 5 PDC)',true);return;}
    var w=$('pt-c-when').value,t=$('pt-c-then').value,o=$('pt-c-else').value;
    var hash=PT.hash('contract|'+w+'|'+t+'|'+o+'|'+Date.now());
    contracts.unshift({hash:hash,when:w,then:t,otherwise:o,ts:Date.now(),status:'deployed'});
    saveC();
    S.pdc-=5;PT.save();
    var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
    PT.addTx('Игрок','Реестр',5,'газ: развёртывание '+hash.slice(0,8));
    renderList();
    toastC('Договор развёрнут в реестре (газ 5 PDC): '+hash.slice(0,10)+'… ?');
  };
  function execute(hash){
    var c=null;contracts.forEach(function(x){if(x.hash===hash)c=x;});
    if(!c||c.status==='executed')return;
    c.status='executed';c.execTs=Date.now();
    saveC();
    S.pdc+=10;PT.save();
    var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
    PT.addTx('Смарт-контракт','Игрок',10,'исполнение '+hash.slice(0,8));
    renderList();
    toastC('Договор исполнен автоматически ✓ ТОГДА: '+c.then+' · +10 PDC');
  }
  renderList();
})();
&lt;/script&gt;


&lt;script&gt;
(function(){
  var PT=window.PT,S=PT.state;
  function $(id){return document.getElementById(id);}
  function fmt(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n));}
  function rnd(n){return Math.floor(Math.random()*n);}
  function pick(arr){return arr[rnd(arr.length)];}
  var NPCS=['Neo_77','Kira_X','Volna','Magnat_01','Orbita','Zarya','Atom_9','Titan_HQ'];

  function toastMP(msg,isErr){
    var old=document.querySelector('.pt-toast');if(old)old.remove();
    var t=document.createElement('div');t.className='pt-toast'+(isErr?' err':'');t.textContent=msg;
    document.body.appendChild(t);setTimeout(function(){t.remove();},2800);
  }

  /* ── Эфир активности ── */
  var feed=[];
  function pushFeed(text){
    feed.unshift({t:Date.now(),text:text});
    if(feed.length&gt;12)feed.pop();
    renderFeed();
  }
  function renderFeed(){
    var box=$('pt-feed');
    if(!feed.length){box.innerHTML='&lt;div class="pt-empty"&gt;Эфир пуст. Действия других игроков появятся здесь.&lt;/div&gt;';return;}
    box.innerHTML='';
    feed.forEach(function(f){
      var el=document.createElement('div');el.className='pt-feed-item';
      el.innerHTML='&lt;span class="pt-feed-time"&gt;'+new Date(f.t).toLocaleTimeString('ru-RU')+'&lt;/span&gt;&lt;span&gt;'+f.text+'&lt;/span&gt;';
      box.appendChild(el);
    });
  }
  var AMBIENT=['{n} купил актив «Ферма»','{n} добыл блок в реестре','{n} развернул смарт-договор','{n} пополнил казну корпорации','{n} выполнил квест «Магнат»','{n} сделал ставку на аукционе'];
  function ambientTick(){pushFeed(pick(AMBIENT).replace('{n}',pick(NPCS)));}

  /* ── Аукционы ── */
  var AUCTIONS=[
    {id:'gold_mine',icon:'⚜️',name:'Золотая шахта',cat:'Производство',income:40,start:2000,minInc:50,dur:90},
    {id:'sky_port',icon:'?',name:'Космопорт',cat:'Транспорт',income:55,start:3000,minInc:100,dur:120},
    {id:'tower',icon:'?️',name:'Небоскрёб «Пандора»',cat:'Недвижимость',income:70,start:5000,minInc:150,dur:150}
  ];
  var auctionState={};
  function initAuctions(){
    AUCTIONS.forEach(function(a){
      auctionState[a.id]={bid:a.start,bidder:null,endsAt:Date.now()+a.dur*1000,playerBid:0,closed:false};
    });
  }
  function renderAuctions(){
    var box=$('pt-auctions');box.innerHTML='';
    AUCTIONS.forEach(function(a){
      var st=auctionState[a.id];
      var left=Math.max(0,Math.ceil((st.endsAt-Date.now())/1000));
      var el=document.createElement('div');el.className='pt-auction'+(st.closed?' done':'');
      var btnHtml=st.closed
        ?'&lt;span class="pt-auction-status"&gt;'+(st.bidder==='Вы'?'✓ Вы выиграли!':'Выиграл '+(st.bidder||'никто'))+'&lt;/span&gt;'
        :'&lt;div class="pt-auction-bidrow"&gt;&lt;input type="number" class="pt-auction-in" id="pt-bid-'+a.id+'" min="'+(st.bid+a.minInc)+'" step="'+a.minInc+'" placeholder="'+(st.bid+a.minInc)+'"&gt;&lt;button class="pt-btn pt-btn-acc pt-btn-sm" data-bid="'+a.id+'"&gt;Ставка&lt;/button&gt;&lt;/div&gt;';
      el.innerHTML='&lt;div class="pt-auction-top"&gt;&lt;span class="pt-auction-ico"&gt;'+a.icon+'&lt;/span&gt;&lt;div&gt;&lt;div class="pt-auction-name"&gt;'+a.name+'&lt;/div&gt;&lt;div class="pt-auction-cat"&gt;'+a.cat+' · доход +'+a.income+' PDC/цикл&lt;/div&gt;&lt;/div&gt;&lt;span class="pt-auction-timer"&gt;'+(st.closed?'завершён':left+' сек')+'&lt;/span&gt;&lt;/div&gt;'
        +'&lt;div class="pt-auction-meta"&gt;&lt;span&gt;Ставка: &lt;b&gt;'+fmt(st.bid)+' PDC&lt;/b&gt;&lt;/span&gt;&lt;span&gt;'+(st.bidder?('Лидер: '+st.bidder):'Ставок нет')+'&lt;/span&gt;&lt;/div&gt;'
        +btnHtml;
      box.appendChild(el);
    });
    box.querySelectorAll('button[data-bid]').forEach(function(b){b.onclick=function(){placeBid(b.dataset.bid);};});
  }
  function placeBid(id){
    var a=null;AUCTIONS.forEach(function(x){if(x.id===id)a=x;});
    var st=auctionState[id];
    if(!a||st.closed)return;
    var inp=$('pt-bid-'+id);
    var amt=parseInt(inp.value,10);
    if(isNaN(amt))amt=st.bid+a.minInc;
    if(amt&lt;st.bid+a.minInc){toastMP('Минимальная ставка: '+fmt(st.bid+a.minInc)+' PDC',true);return;}
    if(S.pdc&lt;amt){toastMP('Недостаточно PDC',true);return;}
    if(st.playerBid&gt;0){S.pdc+=st.playerBid;}
    S.pdc-=amt;
    st.playerBid=amt;st.bid=amt;st.bidder='Вы';
    PT.save();
    var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
    pushFeed('Вы сделали ставку '+fmt(amt)+' PDC на «'+a.name+'»');
    renderAuctions();
    toastMP('Ставка принята: '+fmt(amt)+' PDC на «'+a.name+'»');
  }
  function auctionTick(){
    var now=Date.now();var changed=false;
    AUCTIONS.forEach(function(a){
      var st=auctionState[a.id];
      if(st.closed)return;
      var left=st.endsAt-now;
      if(left&lt;=0){
        st.closed=true;changed=true;
        if(st.bidder==='Вы'){
          S.assets.push({id:a.id,name:a.name,icon:a.icon,cat:a.cat,income:a.income,desc:'Редкий актив с аукциона',count:1,lastCollect:Date.now()});
          PT.save();
          pushFeed('? Вы выиграли аукцион «'+a.name+'» за '+fmt(st.bid)+' PDC!');
          toastMP('Вы выиграли «'+a.name+'»! Актив добавлен в империю ?');
        } else if(st.bidder){
          pushFeed('? '+st.bidder+' выиграл аукцион «'+a.name+'» за '+fmt(st.bid)+' PDC');
          if(st.playerBid&gt;0){S.pdc+=st.playerBid;st.playerBid=0;PT.save();}
        } else {
          pushFeed('Аукцион «'+a.name+'» завершился без ставок');
        }
      } else {
        if(Math.random()&lt;0.12){
          var npc=pick(NPCS);
          var npcAmt=st.bid+a.minInc*(1+rnd(2));
          if(st.bidder==='Вы'&amp;&amp;st.playerBid&gt;0){S.pdc+=st.playerBid;st.playerBid=0;PT.save();}
          st.bid=npcAmt;st.bidder=npc;changed=true;
          pushFeed(npc+' сделал ставку '+fmt(npcAmt)+' PDC на «'+a.name+'»');
        }
      }
    });
    if(changed){renderAuctions();var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);}
    else{
      AUCTIONS.forEach(function(a){
        var st=auctionState[a.id];if(st.closed)return;
        var left=Math.max(0,Math.ceil((st.endsAt-Date.now())/1000));
        var box=$('pt-auctions');
        var timerEl=box.querySelector('.pt-auction .pt-auction-timer');
      });
      renderAuctionsTimers();
    }
  }
  function renderAuctionsTimers(){
    var box=$('pt-auctions');
    var items=box.querySelectorAll('.pt-auction');
    items.forEach(function(el,i){
      var a=AUCTIONS[i];if(!a)return;
      var st=auctionState[a.id];if(st.closed)return;
      var left=Math.max(0,Math.ceil((st.endsAt-Date.now())/1000));
      var tEl=el.querySelector('.pt-auction-timer');
      if(tEl)tEl.textContent=left+' сек';
    });
  }

  /* ── Корпорации ── */
  var CORPS=[
    {id:'titan',name:'Корпорация «Титан»',members:12,treasury:15000,income:800,joinCost:500},
    {id:'orbita',name:'Корпорация «Орбита»',members:8,treasury:9000,income:500,joinCost:300}
  ];
  var corpKey='pt_corp_v1';
  var corpState={type:null,npcId:null,ownName:'',ownMembers:1,ownTreasury:0,ownIncome:100};
  function loadCorp(){try{var raw=localStorage.getItem(corpKey);if(raw)corpState=JSON.parse(raw);}catch(e){}}
  function saveCorp(){try{localStorage.setItem(corpKey,JSON.stringify(corpState));}catch(e){}}
  loadCorp();
  function renderCorps(){
    var box=$('pt-corps');box.innerHTML='';
    CORPS.forEach(function(c){
      var isMember=corpState.type==='npc'&amp;&amp;corpState.npcId===c.id;
      var dividend=Math.floor(c.income/c.members);
      var el=document.createElement('div');el.className='pt-corp'+(isMember?' member':'');
      var btn=isMember?'&lt;span class="pt-corp-status"&gt;✓ Вы участник · +'+dividend+' PDC/цикл&lt;/span&gt;'
        :(corpState.type?'&lt;span class="pt-corp-status" style="color:var(--pt-dim)"&gt;Вы в другой корпорации&lt;/span&gt;'
        :'&lt;button class="pt-btn pt-btn-acc pt-btn-sm" data-join="'+c.id+'"&gt;Вступить · '+c.joinCost+' PDC&lt;/button&gt;');
      el.innerHTML='&lt;div class="pt-corp-top"&gt;&lt;b&gt;'+c.name+'&lt;/b&gt;'+btn+'&lt;/div&gt;'
        +'&lt;div class="pt-corp-meta"&gt;&lt;span&gt;? '+c.members+' участников&lt;/span&gt;&lt;span&gt;? Казна '+fmt(c.treasury)+' PDC&lt;/span&gt;&lt;span&gt;? Доход '+fmt(c.income)+' PDC/цикл&lt;/span&gt;&lt;/div&gt;';
      box.appendChild(el);
    });
    if(corpState.type==='own'){
      var div=Math.floor(corpState.ownIncome/Math.max(1,corpState.ownMembers));
      var el2=document.createElement('div');el2.className='pt-corp member own';
      el2.innerHTML='&lt;div class="pt-corp-top"&gt;&lt;b&gt;'+corpState.ownName+' (ваша)&lt;/b&gt;&lt;span class="pt-corp-status"&gt;✓ Вы — CEO · +'+div+' PDC/цикл&lt;/span&gt;&lt;/div&gt;'
        +'&lt;div class="pt-corp-meta"&gt;&lt;span&gt;? '+corpState.ownMembers+' участников&lt;/span&gt;&lt;span&gt;? Казна '+fmt(corpState.ownTreasury)+' PDC&lt;/span&gt;&lt;span&gt;? Доход '+fmt(corpState.ownIncome)+' PDC/цикл&lt;/span&gt;&lt;/div&gt;';
      box.appendChild(el2);
    } else if(!corpState.type){
      var el3=document.createElement('div');el3.className='pt-corp create';
      el3.innerHTML='&lt;div class="pt-corp-top"&gt;&lt;b&gt;Основать свою корпорацию&lt;/b&gt;&lt;/div&gt;'
        +'&lt;div class="pt-corp-create"&gt;&lt;input type="text" class="pt-corp-name" id="pt-corp-name" placeholder="Название корпорации"&gt;&lt;button class="pt-btn pt-btn-acc pt-btn-sm" id="pt-corp-create"&gt;Основать · 1000 PDC&lt;/button&gt;&lt;/div&gt;'
        +'&lt;div class="pt-corp-meta"&gt;&lt;span&gt;Станьте CEO, привлекайте участников, получайте дивиденды&lt;/span&gt;&lt;/div&gt;';
      box.appendChild(el3);
      var cbtn=$('pt-corp-create');if(cbtn)cbtn.onclick=createCorp;
    }
    box.querySelectorAll('button[data-join]').forEach(function(b){b.onclick=function(){joinCorp(b.dataset.join);};});
  }
  function joinCorp(id){
    if(corpState.type){toastMP('Вы уже в корпорации',true);return;}
    var c=null;CORPS.forEach(function(x){if(x.id===id)c=x;});
    if(!c)return;
    if(S.pdc&lt;c.joinCost){toastMP('Недостаточно PDC',true);return;}
    S.pdc-=c.joinCost;PT.save();
    corpState.type='npc';corpState.npcId=id;saveCorp();
    var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
    pushFeed('Вы вступили в '+c.name);
    toastMP('Вы вступили в '+c.name+'! Дивиденды начнут приходить.');
    renderCorps();
  }
  function createCorp(){
    if(corpState.type){toastMP('Вы уже в корпорации',true);return;}
    var name=$('pt-corp-name').value.trim();
    if(!name){toastMP('Введите название корпорации',true);return;}
    if(S.pdc&lt;1000){toastMP('Нужно 1000 PDC для основания',true);return;}
    S.pdc-=1000;PT.save();
    corpState.type='own';corpState.ownName=name;corpState.ownMembers=1;corpState.ownTreasury=0;corpState.ownIncome=100;saveCorp();
    var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);
    pushFeed('Вы основали корпорацию «'+name+'»');
    toastMP('Корпорация «'+name+'» основана! Вы — CEO.');
    renderCorps();
  }
  function corpTick(){
    var changed=false;
    if(corpState.type==='own'){
      if(Math.random()&lt;0.2&amp;&amp;corpState.ownMembers&lt;20){
        corpState.ownMembers++;corpState.ownIncome+=50+rnd(50);corpState.ownTreasury+=100+rnd(100);
        pushFeed(pick(NPCS)+' вступил в вашу корпорацию «'+corpState.ownName+'»');
        changed=true;saveCorp();
      }
    }
    if(changed)renderCorps();
  }
  function dividendTick(){
    if(corpState.type==='npc'){
      var c=null;CORPS.forEach(function(x){if(x.id===corpState.npcId)c=x;});
      if(c){
        var div=Math.floor(c.income/c.members);
        if(div&gt;0){S.pdc+=div;PT.save();var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);pushFeed('? '+c.name+' выплатила дивиденд +'+div+' PDC');}
      }
    } else if(corpState.type==='own'){
      var div2=Math.floor(corpState.ownIncome/Math.max(1,corpState.ownMembers));
      if(div2&gt;0){S.pdc+=div2;PT.save();var pdcEl=$('pt-pdc');if(pdcEl)pdcEl.textContent=fmt(S.pdc);pushFeed('? Ваша корпорация «'+corpState.ownName+'» выплатила дивиденд +'+div2+' PDC');}
    }
  }

  var mptab=document.querySelector('.pt-tab[data-t="mp"]');
  if(mptab)mptab.addEventListener('click',function(){renderFeed();renderAuctions();renderCorps();});

  initAuctions();
  renderFeed();renderAuctions();renderCorps();
  pushFeed('Эфир запущен. Добро пожаловать в PANDO Tycoon!');
  setInterval(function(){if(S.accepted)auctionTick();},1000);
  setInterval(function(){if(S.accepted)corpTick();},5000);
  setInterval(function(){if(S.accepted)dividendTick();},20000);
  setInterval(function(){if(S.accepted)ambientTick();},8000);
})();
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-08-19T10:15:06Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/f1/ddc6349a4311f19817f9045e951988/-/logo.png</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
