Spaces:
Running
Running
| <html lang="ru"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Авитор: AI-прогноз фаз игры Авиатор</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.5; } | |
| } | |
| .pulse-animation { | |
| animation: pulse 2s infinite; | |
| } | |
| .phase-chart { | |
| height: 200px; | |
| } | |
| .tooltip { | |
| position: relative; | |
| display: inline-block; | |
| } | |
| .tooltip .tooltip-text { | |
| visibility: hidden; | |
| width: 200px; | |
| background-color: #1F2937; | |
| color: #fff; | |
| text-align: center; | |
| border-radius: 6px; | |
| padding: 5px; | |
| position: absolute; | |
| z-index: 1; | |
| bottom: 125%; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| opacity: 0; | |
| transition: opacity 0.3s; | |
| } | |
| .tooltip:hover .tooltip-text { | |
| visibility: visible; | |
| opacity: 1; | |
| } | |
| .slide-fade-enter-active { | |
| transition: all 0.3s ease; | |
| } | |
| .slide-fade-leave-active { | |
| transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1); | |
| } | |
| .slide-fade-enter, .slide-fade-leave-to { | |
| transform: translateY(10px); | |
| opacity: 0; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-900 text-gray-100 font-sans"> | |
| <div class="container mx-auto px-4 py-8 max-w-4xl" id="app"> | |
| <!-- Header --> | |
| <header class="flex justify-between items-center mb-8"> | |
| <div class="flex items-center"> | |
| <div class="bg-blue-600 text-white p-3 rounded-lg mr-3"> | |
| <i class="fas fa-chart-line text-xl"></i> | |
| </div> | |
| <div> | |
| <h1 class="text-2xl font-bold">Авитор</h1> | |
| <p class="text-gray-400 text-sm">AI-прогноз фаз игры Авиатор</p> | |
| </div> | |
| </div> | |
| <div> | |
| <button v-if="!user" @click="showAuthModal = true" class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition"> | |
| Войти / Регистрация | |
| </button> | |
| <div v-else class="flex items-center"> | |
| <span class="mr-3">Баланс: ${{ user.balance.toFixed(2) }}</span> | |
| <button @click="showSubModal = true" class="bg-green-600 hover:bg-green-700 text-white px-3 py-1 rounded-lg text-sm transition"> | |
| Подписка | |
| </button> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Main Content --> | |
| <main> | |
| <!-- Game Info --> | |
| <div class="bg-gray-800 rounded-xl p-6 mb-6"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h2 class="text-xl font-semibold flex items-center"> | |
| <i class="fas fa-plane mr-2"></i> Авиатор | |
| </h2> | |
| <div class="flex items-center"> | |
| <span class="text-sm mr-2">Статус:</span> | |
| <span class="px-2 py-1 rounded text-xs" :class="{ | |
| 'bg-green-900 text-green-300': gameStatus === 'active', | |
| 'bg-gray-700 text-gray-300': gameStatus !== 'active' | |
| }"> | |
| {{ gameStatus === 'active' ? 'Игра активна' : 'Ожидание' }} | |
| </span> | |
| </div> | |
| </div> | |
| <!-- Current Phase --> | |
| <div class="bg-gray-700 rounded-lg p-4 mb-6"> | |
| <div class="flex justify-between items-center mb-3"> | |
| <div class="flex items-center"> | |
| <div class="w-8 h-8 rounded-full flex items-center justify-center mr-3" :class="{ | |
| 'bg-green-500': currentPhase.type === 'hot', | |
| 'bg-yellow-500': currentPhase.type === 'neutral', | |
| 'bg-red-500': currentPhase.type === 'drain' | |
| }"> | |
| <i v-if="currentPhase.type === 'hot'" class="fas fa-fire text-white"></i> | |
| <i v-if="currentPhase.type === 'neutral'" class="fas fa-pause text-white"></i> | |
| <i v-if="currentPhase.type === 'drain'" class="fas fa-tint text-white"></i> | |
| </div> | |
| <h3 class="font-medium">{{ currentPhase.title }}</h3> | |
| </div> | |
| <div class="flex items-center"> | |
| <span class="text-sm mr-2">AI Уверенность:</span> | |
| <span class="font-bold" :class="{ | |
| 'text-green-400': currentPhase.confidence >= 70, | |
| 'text-yellow-400': currentPhase.confidence >= 30 && currentPhase.confidence < 70, | |
| 'text-red-400': currentPhase.confidence < 30 | |
| }">{{ currentPhase.confidence }}%</span> | |
| </div> | |
| </div> | |
| <p class="text-gray-300 mb-4">{{ currentPhase.description }}</p> | |
| <div class="flex flex-wrap gap-3 mb-4"> | |
| <div class="bg-gray-600 rounded px-3 py-1 text-sm"> | |
| <span class="text-gray-400">Прогноз:</span> {{ currentPhase.prediction }} | |
| </div> | |
| <div class="bg-gray-600 rounded px-3 py-1 text-sm"> | |
| <span class="text-gray-400">Вероятность x20+:</span> {{ currentPhase.probability }}% | |
| </div> | |
| <div class="bg-gray-600 rounded px-3 py-1 text-sm"> | |
| <span class="text-gray-400">Длительность фазы:</span> {{ currentPhase.duration }} игр | |
| </div> | |
| </div> | |
| <!-- Action Button --> | |
| <button @click="showExplanation = !showExplanation" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-3 rounded-lg font-medium mb-3 transition flex items-center justify-center"> | |
| <span v-if="currentPhase.recommendation === 'bet'">🔥 Ставь сейчас!</span> | |
| <span v-else>⏳ Подожди — фаза нестабильна</span> | |
| </button> | |
| <!-- Explanation --> | |
| <div v-if="showExplanation" class="bg-gray-600 rounded-lg p-4 mt-3"> | |
| <h4 class="font-medium mb-2">Почему {{ currentPhase.recommendation === 'bet' ? 'выгодно ставить' : 'лучше подождать' }}?</h4> | |
| <p class="text-gray-300 text-sm">{{ currentPhase.explanation }}</p> | |
| <div v-if="currentPhase.similarCase" class="mt-3 bg-gray-700 rounded p-3 text-sm"> | |
| <p class="text-yellow-400 mb-1">Похожая ситуация была {{ currentPhase.similarCase.date }}:</p> | |
| <p>{{ currentPhase.similarCase.description }}</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Phase Chart --> | |
| <div class="bg-gray-700 rounded-lg p-4 mb-6"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="font-medium">График фаз за последние 30 игр</h3> | |
| <div class="flex"> | |
| <button @click="changeTimeFrame('30')" class="px-3 py-1 text-sm rounded-l" :class="{ | |
| 'bg-blue-600 text-white': timeFrame === '30', | |
| 'bg-gray-600 text-gray-300': timeFrame !== '30' | |
| }">30</button> | |
| <button @click="changeTimeFrame('50')" class="px-3 py-1 text-sm border-l border-r border-gray-600" :class="{ | |
| 'bg-blue-600 text-white': timeFrame === '50', | |
| 'bg-gray-600 text-gray-300': timeFrame !== '50' | |
| }">50</button> | |
| <button @click="changeTimeFrame('100')" class="px-3 py-1 text-sm rounded-r" :class="{ | |
| 'bg-blue-600 text-white': timeFrame === '100', | |
| 'bg-gray-600 text-gray-300': timeFrame !== '100' | |
| }">100</button> | |
| </div> | |
| </div> | |
| <div class="phase-chart bg-gray-800 rounded p-2"> | |
| <canvas id="phaseChart"></canvas> | |
| </div> | |
| </div> | |
| <!-- Notifications --> | |
| <div class="bg-gray-700 rounded-lg p-4"> | |
| <h3 class="font-medium mb-3">Уведомления о фазах</h3> | |
| <div class="flex flex-col sm:flex-row gap-3"> | |
| <button @click="toggleNotification('hot')" class="flex-1 bg-gray-600 hover:bg-gray-500 rounded-lg p-3 transition flex items-center justify-between"> | |
| <div class="flex items-center"> | |
| <div class="w-6 h-6 rounded-full bg-green-500 mr-3 flex items-center justify-center"> | |
| <i class="fas fa-fire text-white text-xs"></i> | |
| </div> | |
| <span>Горячие фазы</span> | |
| </div> | |
| <i class="fas" :class="{ | |
| 'fa-toggle-on text-green-400': notifications.hot, | |
| 'fa-toggle-off text-gray-400': !notifications.hot | |
| }"></i> | |
| </button> | |
| <button @click="toggleNotification('drain')" class="flex-1 bg-gray-600 hover:bg-gray-500 rounded-lg p-3 transition flex items-center justify-between"> | |
| <div class="flex items-center"> | |
| <div class="w-6 h-6 rounded-full bg-red-500 mr-3 flex items-center justify-center"> | |
| <i class="fas fa-tint text-white text-xs"></i> | |
| </div> | |
| <span>Сливные фазы</span> | |
| </div> | |
| <i class="fas" :class="{ | |
| 'fa-toggle-on text-green-400': notifications.drain, | |
| 'fa-toggle-off text-gray-400': !notifications.drain | |
| }"></i> | |
| </button> | |
| <button @click="toggleNotification('anomaly')" class="flex-1 bg-gray-600 hover:bg-gray-500 rounded-lg p-3 transition flex items-center justify-between"> | |
| <div class="flex items-center"> | |
| <div class="w-6 h-6 rounded-full bg-purple-500 mr-3 flex items-center justify-center"> | |
| <i class="fas fa-bolt text-white text-xs"></i> | |
| </div> | |
| <span>Аномалии</span> | |
| </div> | |
| <i class="fas" :class="{ | |
| 'fa-toggle-on text-green-400': notifications.anomaly, | |
| 'fa-toggle-off text-gray-400': !notifications.anomaly | |
| }"></i> | |
| </button> | |
| </div> | |
| <div class="mt-4"> | |
| <button @click="showTelegramConnect = true" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-2 rounded-lg transition flex items-center justify-center"> | |
| <i class="fab fa-telegram mr-2"></i> Подключить Telegram-уведомления | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- History & Community --> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6"> | |
| <!-- Phase History --> | |
| <div class="bg-gray-800 rounded-xl p-6"> | |
| <h3 class="font-medium mb-4 flex items-center"> | |
| <i class="fas fa-history mr-2"></i> История фаз | |
| </h3> | |
| <div class="space-y-3"> | |
| <div v-for="(phase, index) in phaseHistory" :key="index" class="bg-gray-700 rounded-lg p-3"> | |
| <div class="flex justify-between items-center mb-1"> | |
| <div class="flex items-center"> | |
| <div class="w-5 h-5 rounded-full mr-2" :class="{ | |
| 'bg-green-500': phase.type === 'hot', | |
| 'bg-yellow-500': phase.type === 'neutral', | |
| 'bg-red-500': phase.type === 'drain' | |
| }"></div> | |
| <span class="text-sm">{{ phase.time }}</span> | |
| </div> | |
| <span class="text-xs bg-gray-600 px-2 py-1 rounded">{{ phase.duration }} игр</span> | |
| </div> | |
| <p class="text-sm text-gray-300">{{ phase.description }}</p> | |
| <div v-if="phase.result" class="mt-2 text-xs"> | |
| <span class="font-medium" :class="{ | |
| 'text-green-400': phase.result === 'success', | |
| 'text-red-400': phase.result === 'fail' | |
| }"> | |
| {{ phase.result === 'success' ? '✅ Успешный прогноз' : '❌ Прогноз не сработал' }} | |
| </span> | |
| <span v-if="phase.resultValue" class="ml-2 text-gray-400">({{ phase.resultValue }})</span> | |
| </div> | |
| </div> | |
| </div> | |
| <button class="w-full mt-4 bg-gray-700 hover:bg-gray-600 text-gray-300 py-2 rounded-lg transition text-sm"> | |
| Показать больше | |
| </button> | |
| </div> | |
| <!-- Community Trust --> | |
| <div class="bg-gray-800 rounded-xl p-6"> | |
| <h3 class="font-medium mb-4 flex items-center"> | |
| <i class="fas fa-users mr-2"></i> Рейтинг доверия | |
| </h3> | |
| <div class="space-y-4"> | |
| <div> | |
| <div class="flex justify-between text-sm mb-1"> | |
| <span>Горячие фазы</span> | |
| <span class="font-medium">87%</span> | |
| </div> | |
| <div class="w-full bg-gray-700 rounded-full h-2"> | |
| <div class="bg-green-500 h-2 rounded-full" style="width: 87%"></div> | |
| </div> | |
| </div> | |
| <div> | |
| <div class="flex justify-between text-sm mb-1"> | |
| <span>Сливные фазы</span> | |
| <span class="font-medium">76%</span> | |
| </div> | |
| <div class="w-full bg-gray-700 rounded-full h-2"> | |
| <div class="bg-red-500 h-2 rounded-full" style="width: 76%"></div> | |
| </div> | |
| </div> | |
| <div> | |
| <div class="flex justify-between text-sm mb-1"> | |
| <span>Аномалии</span> | |
| <span class="font-medium">68%</span> | |
| </div> | |
| <div class="w-full bg-gray-700 rounded-full h-2"> | |
| <div class="bg-purple-500 h-2 rounded-full" style="width: 68%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="mt-6"> | |
| <h4 class="text-sm font-medium mb-2">Последние успешные прогнозы</h4> | |
| <div class="space-y-3"> | |
| <div v-for="(success, index) in successStories" :key="index" class="bg-gray-700 rounded-lg p-3 text-sm"> | |
| <div class="flex justify-between items-start mb-1"> | |
| <span class="font-medium">{{ success.user }}</span> | |
| <span class="bg-green-900 text-green-300 px-2 py-1 rounded text-xs">+{{ success.amount }}</span> | |
| </div> | |
| <p class="text-gray-300">{{ success.story }}</p> | |
| <div class="flex justify-between items-center mt-2 text-xs text-gray-400"> | |
| <span>{{ success.time }}</span> | |
| <div class="flex items-center"> | |
| <i class="fas fa-thumbs-up mr-1"></i> | |
| <span>{{ success.likes }}</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Demo Warning --> | |
| <div v-if="!user" class="bg-yellow-900 bg-opacity-30 border border-yellow-700 rounded-xl p-6 mb-6"> | |
| <div class="flex items-start"> | |
| <div class="bg-yellow-600 text-white p-2 rounded-full mr-4"> | |
| <i class="fas fa-exclamation-circle"></i> | |
| </div> | |
| <div> | |
| <h3 class="font-medium mb-2">Вы используете демо-режим</h3> | |
| <p class="text-gray-300 mb-4">Этот прогноз обновляется только 1 раз в день. Для доступа к реальным данным и мгновенным уведомлениям о фазах, зарегистрируйтесь или купите подписку.</p> | |
| <button @click="showAuthModal = true" class="bg-yellow-600 hover:bg-yellow-700 text-white px-4 py-2 rounded-lg transition"> | |
| Получить полный доступ | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <!-- Modals --> | |
| <!-- Auth Modal --> | |
| <div v-if="showAuthModal" class="fixed inset-0 bg-black bg-opacity-70 flex items-center justify-center z-50 p-4"> | |
| <div class="bg-gray-800 rounded-xl p-6 w-full max-w-md"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-xl font-medium">Вход / Регистрация</h3> | |
| <button @click="showAuthModal = false" class="text-gray-400 hover:text-white"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="mb-4"> | |
| <label class="block text-gray-400 text-sm mb-2">Email</label> | |
| <input type="email" class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| <div class="mb-6"> | |
| <label class="block text-gray-400 text-sm mb-2">Пароль</label> | |
| <input type="password" class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"> | |
| </div> | |
| <button @click="loginUser" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-3 rounded-lg font-medium mb-3 transition"> | |
| Войти | |
| </button> | |
| <div class="text-center text-sm text-gray-400"> | |
| Нет аккаунта? <a href="#" class="text-blue-400 hover:text-blue-300">Зарегистрироваться</a> | |
| </div> | |
| <div class="mt-4 pt-4 border-t border-gray-700"> | |
| <button class="w-full bg-gray-700 hover:bg-gray-600 text-white py-2 rounded-lg transition flex items-center justify-center"> | |
| <i class="fab fa-google mr-2"></i> Продолжить с Google | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Subscription Modal --> | |
| <div v-if="showSubModal" class="fixed inset-0 bg-black bg-opacity-70 flex items-center justify-center z-50 p-4"> | |
| <div class="bg-gray-800 rounded-xl p-6 w-full max-w-md"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-xl font-medium">Подписка на Авитор</h3> | |
| <button @click="showSubModal = false" class="text-gray-400 hover:text-white"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="mb-6"> | |
| <div class="bg-gray-700 rounded-lg p-4 mb-4"> | |
| <div class="flex justify-between items-center mb-2"> | |
| <h4 class="font-medium">Премиум доступ</h4> | |
| <span class="bg-blue-600 text-white px-2 py-1 rounded text-xs">Популярный</span> | |
| </div> | |
| <p class="text-gray-300 text-sm mb-4">Полный доступ ко всем функциям прогнозирования и уведомлениям</p> | |
| <div class="flex justify-between items-end"> | |
| <div> | |
| <span class="text-2xl font-bold">$29.90</span> | |
| <span class="text-gray-400 text-sm">/ месяц</span> | |
| </div> | |
| <span class="text-green-400 text-sm">Экономия 50%</span> | |
| </div> | |
| </div> | |
| <div class="bg-gray-700 rounded-lg p-4 mb-2"> | |
| <div class="flex justify-between items-center mb-2"> | |
| <h4 class="font-medium">Тестовый день</h4> | |
| </div> | |
| <p class="text-gray-300 text-sm mb-4">Попробуйте все функции на 24 часа</p> | |
| <div class="flex justify-between items-end"> | |
| <div> | |
| <span class="text-2xl font-bold">$1.00</span> | |
| <span class="text-gray-400 text-sm">/ 1 день</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <button @click="buySubscription('premium')" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-3 rounded-lg font-medium mb-3 transition"> | |
| Купить премиум доступ | |
| </button> | |
| <button @click="buySubscription('trial')" class="w-full bg-gray-700 hover:bg-gray-600 text-white py-2 rounded-lg transition"> | |
| Попробовать за $1 | |
| </button> | |
| <div class="mt-4 pt-4 border-t border-gray-700"> | |
| <div class="flex items-start mb-2"> | |
| <i class="fas fa-check text-green-400 mt-1 mr-2"></i> | |
| <span class="text-sm text-gray-300">90% пользователей получили 1+ вывод за первый день</span> | |
| </div> | |
| <div class="flex items-start mb-2"> | |
| <i class="fas fa-check text-green-400 mt-1 mr-2"></i> | |
| <span class="text-sm text-gray-300">AI фиксирует горячие фазы точнее, чем ты угадаешь</span> | |
| </div> | |
| <div class="flex items-start"> | |
| <i class="fas fa-check text-green-400 mt-1 mr-2"></i> | |
| <span class="text-sm text-gray-300">Секретные фазы, которые видны только с подпиской</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Telegram Connect Modal --> | |
| <div v-if="showTelegramConnect" class="fixed inset-0 bg-black bg-opacity-70 flex items-center justify-center z-50 p-4"> | |
| <div class="bg-gray-800 rounded-xl p-6 w-full max-w-md"> | |
| <div class="flex justify-between items-center mb-4"> | |
| <h3 class="text-xl font-medium">Telegram-уведомления</h3> | |
| <button @click="showTelegramConnect = false" class="text-gray-400 hover:text-white"> | |
| <i class="fas fa-times"></i> | |
| </button> | |
| </div> | |
| <div class="mb-6"> | |
| <p class="text-gray-300 mb-4">Подключите Telegram-бота, чтобы получать мгновенные уведомления о важных фазах игры прямо в мессенджер.</p> | |
| <div class="bg-gray-700 rounded-lg p-4 mb-4"> | |
| <div class="flex items-center mb-3"> | |
| <i class="fas fa-bell text-yellow-400 mr-3"></i> | |
| <span class="font-medium">Пример уведомления:</span> | |
| </div> | |
| <div class="bg-gray-800 rounded-lg p-3 text-sm"> | |
| <div class="flex items-center mb-2"> | |
| <span class="bg-green-500 text-white px-2 py-1 rounded-full text-xs mr-2">🔥</span> | |
| <span class="font-medium">Горячая фаза!</span> | |
| </div> | |
| <p class="text-gray-300">AI обнаружил накопление — вероятность x20+ в течение 3 игр составляет 72%</p> | |
| <div class="mt-2 text-xs text-gray-400">Нажмите для быстрой ставки →</div> | |
| </div> | |
| </div> | |
| <div class="flex items-center bg-gray-700 rounded-lg p-4"> | |
| <div class="bg-blue-500 text-white p-3 rounded-full mr-4"> | |
| <i class="fab fa-telegram text-xl"></i> | |
| </div> | |
| <div> | |
| <h4 class="font-medium mb-1">Avitor Alerts Bot</h4> | |
| <p class="text-gray-300 text-sm">@AvitorAlertsBot</p> | |
| </div> | |
| </div> | |
| </div> | |
| <button class="w-full bg-blue-500 hover:bg-blue-600 text-white py-3 rounded-lg font-medium transition flex items-center justify-center"> | |
| <i class="fab fa-telegram mr-2"></i> Перейти в Telegram | |
| </button> | |
| <button class="w-full mt-3 bg-gray-700 hover:bg-gray-600 text-white py-2 rounded-lg transition"> | |
| Скопировать ссылку | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/vue@3.2.47/dist/vue.global.min.js"></script> | |
| <script> | |
| const { createApp, ref, onMounted } = Vue; | |
| createApp({ | |
| setup() { | |
| // User state | |
| const user = ref(null); | |
| const gameStatus = ref('active'); | |
| const showAuthModal = ref(false); | |
| const showSubModal = ref(false); | |
| const showTelegramConnect = ref(false); | |
| const showExplanation = ref(false); | |
| const timeFrame = ref('30'); | |
| const notifications = ref({ | |
| hot: false, | |
| drain: false, | |
| anomaly: false | |
| }); | |
| // Current phase data | |
| const currentPhase = ref({ | |
| type: 'hot', | |
| title: 'Горячая фаза', | |
| description: 'Последние 8 игр слились. Высока вероятность отскока!', | |
| confidence: 81, | |
| prediction: 'Вероятность крупного кэфа в течение 3 игр — 72%', | |
| probability: '72', | |
| duration: '8', | |
| recommendation: 'bet', | |
| explanation: 'После длительного слива (8 игр подряд с коэффициентом ниже 1.5x) система фиксирует накопление для отскока. Исторические данные показывают, что в 72% случаев после такого паттерна в течение 3 игр выпадает коэффициент выше 20x.', | |
| similarCase: { | |
| date: '2 дня назад', | |
| description: 'После 7 сливных игр выпал коэффициент 47x на 3-й игре новой фазы.' | |
| } | |
| }); | |
| // Phase history | |
| const phaseHistory = ref([ | |
| { | |
| time: '5 минут назад', | |
| type: 'hot', | |
| duration: '5', | |
| description: 'Горячая фаза с вероятностью x20+ 68%', | |
| result: 'success', | |
| resultValue: 'x34 на 2-й игре' | |
| }, | |
| { | |
| time: '27 минут назад', | |
| type: 'neutral', | |
| duration: '12', | |
| description: 'Нейтральная фаза без явных паттернов', | |
| result: 'fail', | |
| resultValue: 'макс. x8' | |
| }, | |
| { | |
| time: '1 час назад', | |
| type: 'drain', | |
| duration: '9', | |
| description: 'Сливная фаза с низкими коэффициентами', | |
| result: 'success', | |
| resultValue: 'макс. x3.2' | |
| }, | |
| { | |
| time: '2 часа назад', | |
| type: 'hot', | |
| duration: '4', | |
| description: 'Короткая горячая фаза', | |
| result: 'success', | |
| resultValue: 'x52 на 4-й игре' | |
| } | |
| ]); | |
| // Success stories | |
| const successStories = ref([ | |
| { | |
| user: 'Алексей К.', | |
| amount: '17.400 ₽', | |
| story: 'Поставил 500 ₽ на прогноз горячей фазы — выпал x34.8', | |
| time: '15 минут назад', | |
| likes: '24' | |
| }, | |
| { | |
| user: 'Мария С.', | |
| amount: '8.900 ₽', | |
| story: 'Использовала сигнал о сливной фазе — не ставила 7 игр, затем на 8-й поймала x21', | |
| time: '1 час назад', | |
| likes: '18' | |
| }, | |
| { | |
| user: 'Дмитрий П.', | |
| amount: '23.100 ₽', | |
| story: 'Дождался аномалии по прогнозу AI — поставил 1000 ₽ и получил x23.1', | |
| time: '3 часа назад', | |
| likes: '42' | |
| } | |
| ]); | |
| // Chart reference | |
| let phaseChart = null; | |
| // Methods | |
| const loginUser = () => { | |
| user.value = { | |
| email: 'demo@user.com', | |
| balance: 100.00, | |
| subscription: null | |
| }; | |
| showAuthModal.value = false; | |
| }; | |
| const buySubscription = (type) => { | |
| if (!user.value) { | |
| showAuthModal.value = true; | |
| showSubModal.value = false; | |
| return; | |
| } | |
| if (type === 'premium') { | |
| user.value.subscription = 'premium'; | |
| user.value.balance -= 29.90; | |
| } else { | |
| user.value.subscription = 'trial'; | |
| user.value.balance -= 1.00; | |
| } | |
| showSubModal.value = false; | |
| // Update current phase with premium data | |
| currentPhase.value = { | |
| type: 'hot', | |
| title: 'Горячая фаза (премиум)', | |
| description: 'Система обнаружила паттерн "Тройной отскок" — последние 8 игр слились, но 3 из них имели аномальные показатели.', | |
| confidence: 89, | |
| prediction: 'Вероятность крупного кэфа в течение 2 игр — 82%', | |
| probability: '82', | |
| duration: '8', | |
| recommendation: 'bet', | |
| explanation: 'Премиум-анализ показывает комбинацию двух факторов: 1) накопление после слива, 2) аномальные значения в 3 из 8 игр (что указывает на подготовку системы к крупному выигрышу). Исторически такие комбинации дают x50+ в 82% случаев.', | |
| similarCase: { | |
| date: 'вчера', | |
| description: 'Аналогичный паттерн дал x63 на 2-й игре новой фазы.' | |
| } | |
| }; | |
| }; | |
| const toggleNotification = (type) => { | |
| notifications.value[type] = !notifications.value[type]; | |
| }; | |
| const changeTimeFrame = (tf) => { | |
| timeFrame.value = tf; | |
| updateChart(); | |
| }; | |
| const updateChart = () => { | |
| const ctx = document.getElementById('phaseChart').getContext('2d'); | |
| // Destroy previous chart if exists | |
| if (phaseChart) { | |
| phaseChart.destroy(); | |
| } | |
| // Sample data for chart | |
| const labels = Array.from({length: parseInt(timeFrame.value)}, (_, i) => `Игра ${i+1}`); | |
| const data = Array.from({length: parseInt(timeFrame.value)}, () => Math.floor(Math.random() * 100) + 1); | |
| // Create gradient | |
| const gradient = ctx.createLinearGradient(0, 0, 0, 200); | |
| gradient.addColorStop(0, 'rgba(59, 130, 246, 0.8)'); | |
| gradient.addColorStop(1, 'rgba(59, 130, 246, 0.1)'); | |
| phaseChart = new Chart(ctx, { | |
| type: 'line', | |
| data: { | |
| labels: labels, | |
| datasets: [ | |
| { | |
| label: 'Коэффициент', | |
| data: data, | |
| borderColor: '#3B82F6', | |
| backgroundColor: gradient, | |
| fill: true, | |
| tension: 0.4, | |
| pointRadius: 0 | |
| }, | |
| { | |
| label: 'Среднее', | |
| data: Array(parseInt(timeFrame.value)).fill(50), | |
| borderColor: '#6B7280', | |
| borderWidth: 1, | |
| borderDash: [5, 5], | |
| pointRadius: 0 | |
| } | |
| ] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| display: false | |
| }, | |
| tooltip: { | |
| mode: 'index', | |
| intersect: false | |
| } | |
| }, | |
| scales: { | |
| x: { | |
| grid: { | |
| display: false | |
| }, | |
| ticks: { | |
| maxRotation: 0, | |
| autoSkip: true, | |
| maxTicksLimit: 10 | |
| } | |
| }, | |
| y: { | |
| min: 0, | |
| max: 100, | |
| ticks: { | |
| callback: function(value) { | |
| return value + 'x'; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| }; | |
| // Lifecycle hooks | |
| onMounted(() => { | |
| updateChart(); | |
| // Simulate game status changes | |
| setInterval(() => { | |
| gameStatus.value = gameStatus.value === 'active' ? 'waiting' : 'active'; | |
| }, 10000); | |
| }); | |
| return { | |
| user, | |
| gameStatus, | |
| currentPhase, | |
| phaseHistory, | |
| successStories, | |
| showAuthModal, | |
| showSubModal, | |
| showTelegramConnect, | |
| showExplanation, | |
| timeFrame, | |
| notifications, | |
| loginUser, | |
| buySubscription, | |
| toggleNotification, | |
| changeTimeFrame | |
| }; | |
| } | |
| }).mount('#app'); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=timoon811/aviatorpre" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |