Help
RSS
API
Feed
Maltego
Contact
Domain > akimspace.online
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2026-02-26
104.21.54.58
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Thu, 26 Feb 2026 20:49:55 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveAccept-Ranges: bytesReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sCGQPodEFSWRUvjA7%2FKGN7d86BHsX%2FBnpgNX6AmWzl%2FL2qiiJkxA05ZFlskp%2FaZ8Wj4lNYzh9pVCRVSzN8N%2FSfZ%2BBscGaQB07ZWGsRMSp}}last-modified: Thu, 13 Nov 2025 09:47:14 GMTServer: cloudflarecf-cache-status: DYNAMICNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}CF-RAY: 9d424fceecb6dabf-PDX !DOCTYPE html>html langru>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0, user-scalableno> title>Аналитический Центр/title> !-- Подключаем Plotly для спидометров --> script srchttps://cdn.plot.ly/plotly-2.29.1.min.js charsetutf-8>/script> !-- Подключаем JS нашего виджета --> script srccomponents/main-gauges-widget/gauges-widget.js>/script> link relstylesheet hrefcomponents/main-gauges-widget/gauges-widget.css> style> body { background-color: #181818; background-image: url(./IMG_0195.JPG); background-size: cover; background-repeat: no-repeat; background-attachment: fixed; background-position: center; display: flex; flex-direction: column; align-items: center; padding: 10px; font-family: sans-serif; } .dashboard-container { width: 100%; max-width: 400px; /* !!! ВОЗВРАЩАЕМ ЖЕСТКОЕ СООТНОШЕНИЕ СТОРОН !!! */ aspect-ratio: 9 / 15; background-color: rgba(34, 34, 34, 0); border: 1px solid white; border-radius: 15px; padding: 15px; box-sizing: border-box; display: flex; flex-direction: column; gap: 15px; /* Оставляем gap, он лучше чем justify-content для этой задачи */ } .title-placeholder { width: 100%; height: 40px; text-align: center; color: white; font-size: 20px; font-weight: bold; flex-shrink: 0; } /* --- НОВЫЕ СТИЛИ ДЛЯ КОМПОНОВКИ 20/80 --- */ .symbol-link-container { width: 100%; /* padding будет взят из класса .plot-placeholder, но можно и оставить свой: padding: 10px 15px; */ display: flex; align-items: center; justify-content: space-between; color: #f0f0f0; text-decoration: none; } /* Блок для имени символа (20%) */ .symbol-name { flex: 0 0 25%; font-size: 22px; /* -- Немного уменьшили для баланса */ padding-right: 10px; /* --- Стили, перенесенные из symbol.html --- */ font-family: Orbitron, sans-serif; text-transform: uppercase; font-weight: 500; letter-spacing: 2px; /* -- Немного уменьшили для компактности */ text-shadow: 0 0 8px rgba(0, 191, 255, 0.8), 0 0 2px rgba(255, 255, 255, 1); color: #00bfff; } /* 1. Делаем .symbol-name контейнером для уголков */ .symbol-name { position: relative; /* Добавляем отступ слева, чтобы текст не налезал на уголки */ padding-left: 20px; box-sizing: border-box; /* Гарантирует, что padding не увеличит ширину блока */ /* Выравниваем текст по центру внутри его зоны (полезно для коротких тикеров) */ display: flex; align-items: center; justify-content: flex-start; /* Текст будет начинаться слева */ } /* 2. Рисуем верхний левый уголок */ .symbol-name::before { content: ; position: absolute; top: 50%; /* Начинаем от центра */ left: 0; width: 15px; height: 50%; /* Занимает половину высоты родителя */ border-color: rgba(0, 191, 255, 0.7); border-style: solid; border-width: 2px 0 0 2px; transform: translateY(-100%); /* Сдвигаем вверх на свою высоту */ } /* 3. Рисуем нижний левый уголок */ .symbol-name::after { content: ; position: absolute; top: 50%; /* Начинаем от центра */ left: 0; width: 15px; height: 50%; /* Занимает половину высоты родителя */ border-color: rgba(0, 191, 255, 0.7); border-style: solid; border-width: 0 0 2px 2px; /* transform не нужен, так как он уже в правильной позиции */ } /* Блок-обертка для спидометров (80%) */ .gauges-wrapper { flex: 1; /* Занимает все оставшееся место */ /* --- ГЛАВНОЕ ИЗМЕНЕНИЕ --- */ /* Превращаем саму обертку во flex-контейнер для 3-х спидометров */ display: flex; justify-content: center; align-items: center; /* Выравниваем по центру по вертикали */ gap: 10px; /* Небольшой отступ между ними */ } #status-message { color: #aaa; text-align: center; margin-top: 20px; } .gauges-wrapper { } /* 2. Применяем магию к самим ячейкам внутри обертки */ .gauges-wrapper .gauge-cell { flex-basis: 33%; /* Каждая ячейка хочет занимать треть пространства */ min-width: 0; /* !!! КЛЮЧЕВОЕ ПРАВИЛО: Разрешаем ячейке сжиматься до нуля */ } @property --angle { syntax: angle>; initial-value: 0deg; inherits: false; } /* Анимация вращения для градиентного свечения */ @keyframes rotate-glow { to { --angle: 360deg; } } .plot-placeholder { width: 100%; position: relative; /* Необходимо для псевдо-элементов */ background-color: rgba(30, 40, 60, 0.3); /* Темно-синяя стеклянная подложка */ border-radius: 12px; padding: 10px; box-sizing: border-box; border: 1px solid rgba(150, 180, 255, 0.2); /* Тонкая рамка-контур */ box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 0.2), /* Верхний левый блик */ inset -1px -1px 2px rgba(0, 0, 0, 0.5), /* Нижняя правая тень */ 0 0 25px rgba(0, 0, 0, 0.5); /* Внешняя тень для отрыва от фона */ transition: transform 0.1s linear, box-shadow 0.4s ease; transform-style: preserve-3d; /* Включаем 3D-контекст для наклона */ } .plot-placeholder::before { content: ; position: absolute; top: -2px; left: -2px; /* Позиционируем точно по рамке */ width: calc(100% + 4px); height: calc(100% + 4px); border-radius: 12px; z-index: -1; /* Размещаем свечение ПОД панелью */ background: conic-gradient( from var(--angle), transparent 0%, transparent 50%, #00bfff 90%, /* Яркий голубой прожектор */ transparent 100% ); filter: blur(10px); /* Размываем градиент для мягкого свечения */ opacity: 0.5; transition: opacity 0.4s ease; animation: rotate-glow 8s linear infinite; } .plot-placeholder:hover { box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px -1px 2px rgba(0, 0, 0, 0.5), 0 0 35px rgba(0, 191, 255, 0.5); /* -- Усиливаем внешнюю тень */ } .plot-placeholder:hover::before { opacity: 1; /* Делаем градиентное свечение ярче */ } /style>/head>body> div classdashboard-container> !-- Блок с заголовком был здесь, теперь он удален --> div idsymbol-list-container styledisplay: contents;> p idstatus-message>Загрузка данных с моделей.../p> /div> /div> script> const PLOTLY_CONFIG { displayModeBar: false, responsive: true }; async function buildSymbolList() { const listContainer document.getElementById(symbol-list-container); const statusMessage document.getElementById(status-message); // --- НАЧАЛО ИЗМЕНЕНИЙ --- const token localStorage.getItem(accessToken); if (!token) { statusMessage.textContent Ошибка: Вы не авторизованы. Пожалуйста, зайдите в Профиль.; // Можно сделать редирект на страницу профиля // window.location.href /profile.html; return; } try { // 1. Добавляем заголовок Authorization к запросу const response await fetch(/api/hub_data, { headers: { Authorization: `Bearer ${token}` } }); // --- КОНЕЦ ИЗМЕНЕНИЙ --- if (response.status 401) { // Если токен устарел или неверный statusMessage.textContent Ваша сессия истекла. Пожалуйста, авторизуйтесь заново через Профиль.; localStorage.removeItem(accessToken); // Удаляем невалидный токен return; } if (!response.ok) throw new Error(`Ошибка сети: ${response.status}`); const hubData await response.json(); if (hubData && hubData.length > 0) { statusMessage.remove(); // 2. В цикле создаем сложные блоки hubData.forEach(item > { const symbol item.symbol; const probabilities item.probabilities; // Создаем главный элемент-ссылку a> const linkElement document.createElement(a); linkElement.className symbol-link-container plot-placeholder; linkElement.href `/symbol.html?name${symbol}`; // Создаем div для имени символа const nameDiv document.createElement(div); nameDiv.className symbol-name; nameDiv.textContent symbol; // Создаем div-обертку для спидометров const gaugesWrapper document.createElement(div); gaugesWrapper.className gauges-wrapper; // Даем ему УНИКАЛЬНЫЙ ID, чтобы Plotly знал, где рисовать const gaugeId `gauge-container-${symbol}`; gaugesWrapper.id gaugeId; // Собираем наш бутерброд linkElement.appendChild(nameDiv); linkElement.appendChild(gaugesWrapper); listContainer.appendChild(linkElement); // 3. Рисуем спидометры в созданном контейнере if (probabilities) { const gauges new MainGaugesWidget(gaugeId, PLOTLY_CONFIG); const widgetData { all_probabilities: probabilities }; // --- НОВЫЙ ОБЪЕКТ С ОПЦИЯМИ ДЛЯ КОМПАКТНОГО РЕЖИМА --- const compactOptions { showMainTitle: false, // Главный подзаголовок по-прежнему скрываем showGaugeTitles: true, // !!! ВОЗВРАЩАЕМ ПОДПИСИ LONG, AUTO, SHORT gaugeHeight: 65, // Оптимальная высота для компактного вида numberFontSize: 11, // Уменьшаем шрифт процентов titleFontSize: 11 // Уменьшаем шрифт подписей (LONG и т.д.) }; // --- КОНЕЦ НОВОГО БЛОКА --- // Вызываем update, передавая новый объект с опциями gauges.update(widgetData, () > {}, compactOptions); } }); // !!! ВЫЗЫВАЕМ ФУНКЦИЮ ИНИЦИАЛИЗАЦИИ 3D-ЭФФЕКТА !!! initHoloPanels(); } else { statusMessage.textContent Нет доступных символов для анализа.; } } catch (error) { console.error(Не удалось загрузить данные для хаба:, error); statusMessage.textContent Ошибка загрузки данных.; } } document.addEventListener(DOMContentLoaded, buildSymbolList); function initHoloPanels() { const holoPanels document.querySelectorAll(.plot-placeholder); const maxRotation 8; holoPanels.forEach(panel > { panel.addEventListener(mousemove, (e) > { const rect panel.getBoundingClientRect(); const x e.clientX - rect.left; const y e.clientY - rect.top; const { width, height } rect; const rotateY (x / width - 0.5) * 2 * maxRotation; const rotateX -(y / height - 0.5) * 2 * maxRotation; panel.style.transform `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale3d(1.02, 1.02, 1.02)`; }); panel.addEventListener(mouseleave, () > { panel.style.transform perspective(1000px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1); }); }); } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]