Compare commits
3 Commits
testing
...
ae5cfdbfc5
| Author | SHA1 | Date | |
|---|---|---|---|
| ae5cfdbfc5 | |||
| b3bb417519 | |||
| fb82a41e4e |
13
README.md
13
README.md
@@ -1,14 +1,3 @@
|
|||||||
# ██████╗ ███████╗ ██████╗██████╗ █████╗ ██████╗ ███████╗██╗
|
|
||||||
# ██╔══██╗██╔════╝██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔════╝██║
|
|
||||||
# ██████╔╝█████╗ ██║ ██████╔╝███████║██████╔╝█████╗ ██║
|
|
||||||
# ██╔══██╗██╔══╝ ██║ ██╔══██╗██╔══██║██╔══██╗██╔══╝ ██║
|
|
||||||
# ██║ ██║███████╗╚██████╗██║ ██║██║ ██║██║ ██║███████╗███████╗
|
|
||||||
# ╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝
|
|
||||||
# ▄▄▄· ▄▄▄· ▄▄▄ ▄▄▄ . ▄▄▄· ▄▄▄· ▄▄▄▄▄ ▄ .▄
|
|
||||||
# ▐█ ▀█ ▐█ ▄█ ▐█ ▀█ ▀▄.▀·▐█ ▀█ ▐█ ▀█ •██ ██▪▐█
|
|
||||||
# ▄█▀▀█ ██▀· ▄█▀▀█ ▐▀▀▪▄▄█▀▀█ ▄█▀▀█ ▐█.▪██▀▐█
|
|
||||||
# ▐█ ▪▐▌▐█▪·•▐█ ▪▐▌▐█▄▄▌▐█ ▪▐▌▐█ ▪▐▌ ▐█▌·██▌▐▀
|
|
||||||
# ▀ ▀ .▀ ▀ ▀ ▀▀▀ ▀ ▀ ▀ ▀ ▀▀▀ ▀▀▀ ·
|
|
||||||
# =====================================================================
|
# =====================================================================
|
||||||
# 🔹 **ТРЕТИЙ ЭШЕЛОН** | СЕКРЕТНЫЙ РЕПОЗИТОРИЙ
|
# 🔹 **ТРЕТИЙ ЭШЕЛОН** | СЕКРЕТНЫЙ РЕПОЗИТОРИЙ
|
||||||
# =====================================================================
|
# =====================================================================
|
||||||
@@ -25,7 +14,7 @@
|
|||||||
# ---
|
# ---
|
||||||
#
|
#
|
||||||
# ## 🎮 3D-интерфейс
|
# ## 🎮 3D-интерфейс
|
||||||
# Для входа в систему визуализации данных откройте [`index.html`](index.html) в корне репозитория.
|
# Для входа в систему визуализации данных откройте [`index.html`](Изначальный.html) в корне репозитория.
|
||||||
# Требуется современный браузер с поддержкой WebGL.
|
# Требуется современный браузер с поддержкой WebGL.
|
||||||
#
|
#
|
||||||
# 
|
# 
|
||||||
|
|||||||
BIN
assets/4444.png
BIN
assets/4444.png
Binary file not shown.
|
Before Width: | Height: | Size: 379 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 379 KiB |
@@ -1,224 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>▮ ТРЕТИЙ ЭШЕЛОН ▮ ДОСТУП ОПЕРАТИВНИКА</title>
|
|
||||||
<style>
|
|
||||||
body { margin: 0; overflow: hidden; font-family: 'Courier New', monospace; }
|
|
||||||
#info {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 30px;
|
|
||||||
left: 30px;
|
|
||||||
color: #0f0;
|
|
||||||
background: rgba(0,0,0,0.7);
|
|
||||||
padding: 15px 25px;
|
|
||||||
border-left: 4px solid #0f0;
|
|
||||||
z-index: 10;
|
|
||||||
text-shadow: 0 0 5px #0f0;
|
|
||||||
pointer-events: none;
|
|
||||||
border-radius: 0 8px 8px 0;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
}
|
|
||||||
#info a {
|
|
||||||
color: #0f0;
|
|
||||||
text-decoration: none;
|
|
||||||
border-bottom: 1px dashed #0f0;
|
|
||||||
}
|
|
||||||
#status {
|
|
||||||
position: absolute;
|
|
||||||
top: 30px;
|
|
||||||
right: 30px;
|
|
||||||
color: #0f0;
|
|
||||||
background: rgba(0,0,0,0.5);
|
|
||||||
padding: 8px 15px;
|
|
||||||
border: 1px solid #0f0;
|
|
||||||
z-index: 10;
|
|
||||||
font-size: 14px;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
}
|
|
||||||
.corner-triangle {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-top: 60px solid #0f0;
|
|
||||||
border-right: 60px solid transparent;
|
|
||||||
z-index: 20;
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
/* Стили для кнопки входа */
|
|
||||||
#login-button {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 30px;
|
|
||||||
right: 30px;
|
|
||||||
z-index: 30;
|
|
||||||
background: transparent;
|
|
||||||
border: 2px solid #0f0;
|
|
||||||
color: #0f0;
|
|
||||||
padding: 12px 30px;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 4px;
|
|
||||||
cursor: pointer;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
background-color: rgba(0, 20, 0, 0.4);
|
|
||||||
box-shadow: 0 0 15px #0f0;
|
|
||||||
transition: 0.3s;
|
|
||||||
text-decoration: none;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
#login-button:hover {
|
|
||||||
background-color: #0f0;
|
|
||||||
color: #000;
|
|
||||||
box-shadow: 0 0 30px #0f0;
|
|
||||||
border-color: #fff;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="corner-triangle"></div>
|
|
||||||
<div id="status">🔒 СЕКРЕТНО // ТОЛЬКО ДЛЯ ОПЕРАТИВНИКОВ</div>
|
|
||||||
<div id="info">
|
|
||||||
⚡ ОПЕРАТИВНИК: <strong>Spirin Evgeniy</strong><br>
|
|
||||||
📡 СВЯЗЬ: <a href="https://t.me/Y0zhyck" target="_blank">Telegram</a><br>
|
|
||||||
<span style="font-size:12px; opacity:0.7;">▸ ДОСТУП РАЗРЕШЁН ТОЛЬКО СОТРУДНИКАМ 3-ГО ЭШЕЛОНА ◂</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Кнопка входа (ведёт на страницу логина Gitea, замени ссылку при необходимости) -->
|
|
||||||
<a href="/user/login" id="login-button">⎈ ВОЙТИ ⎈</a>
|
|
||||||
|
|
||||||
<!-- Подключаем Three.js с CDN -->
|
|
||||||
<script type="importmap">
|
|
||||||
{
|
|
||||||
"imports": {
|
|
||||||
"three": "https://unpkg.com/three@0.128.0/build/three.module.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
import * as THREE from 'three';
|
|
||||||
import { OrbitControls } from 'https://unpkg.com/three@0.128.0/examples/jsm/controls/OrbitControls.js';
|
|
||||||
|
|
||||||
// Инициализация сцены, камеры, рендерера
|
|
||||||
const scene = new THREE.Scene();
|
|
||||||
scene.background = new THREE.Color(0x050510); // тёмно-синий почти чёрный
|
|
||||||
|
|
||||||
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
|
|
||||||
camera.position.set(0, 2, 8);
|
|
||||||
|
|
||||||
const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false });
|
|
||||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
||||||
renderer.shadowMap.enabled = false; // для лёгкости
|
|
||||||
renderer.setPixelRatio(window.devicePixelRatio);
|
|
||||||
document.body.appendChild(renderer.domElement);
|
|
||||||
|
|
||||||
// Освещение
|
|
||||||
const ambientLight = new THREE.AmbientLight(0x404060);
|
|
||||||
scene.add(ambientLight);
|
|
||||||
|
|
||||||
const dirLight = new THREE.DirectionalLight(0xffffff, 1);
|
|
||||||
dirLight.position.set(1, 2, 1);
|
|
||||||
scene.add(dirLight);
|
|
||||||
|
|
||||||
const pointLight = new THREE.PointLight(0x00ff00, 0.5, 10);
|
|
||||||
pointLight.position.set(0, 1, 3);
|
|
||||||
scene.add(pointLight);
|
|
||||||
|
|
||||||
// Создаём логотип "3-й эшелон" из геометрий
|
|
||||||
const group = new THREE.Group();
|
|
||||||
|
|
||||||
// Центральный элемент: буква "III" из цилиндров
|
|
||||||
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00, emissive: 0x003300 });
|
|
||||||
|
|
||||||
const createPillar = (x, y, z, height = 2) => {
|
|
||||||
const geometry = new THREE.CylinderGeometry(0.3, 0.3, height, 16);
|
|
||||||
const pillar = new THREE.Mesh(geometry, material);
|
|
||||||
pillar.position.set(x, y + height/2, z);
|
|
||||||
return pillar;
|
|
||||||
};
|
|
||||||
|
|
||||||
group.add(createPillar(-1.5, 0, 0, 2.2)); // левая
|
|
||||||
group.add(createPillar(0, 0, 0, 2.5)); // центральная
|
|
||||||
group.add(createPillar(1.5, 0, 0, 2.2)); // правая
|
|
||||||
|
|
||||||
// Нижняя перекладина
|
|
||||||
const baseGeo = new THREE.BoxGeometry(4.2, 0.2, 0.6);
|
|
||||||
const baseMat = new THREE.MeshStandardMaterial({ color: 0x00aa00, emissive: 0x002200 });
|
|
||||||
const base = new THREE.Mesh(baseGeo, baseMat);
|
|
||||||
base.position.set(0, 0.1, 0);
|
|
||||||
group.add(base);
|
|
||||||
|
|
||||||
// Верхняя перекладина
|
|
||||||
const topBar = new THREE.Mesh(baseGeo, baseMat);
|
|
||||||
topBar.position.set(0, 2.4, 0);
|
|
||||||
group.add(topBar);
|
|
||||||
|
|
||||||
// Добавляем вращающиеся кольца вокруг
|
|
||||||
const ringMaterial = new THREE.MeshStandardMaterial({ color: 0x00ff00, emissive: 0x002200, wireframe: true });
|
|
||||||
const ringGeo = new THREE.TorusGeometry(2.0, 0.05, 16, 64);
|
|
||||||
const ring = new THREE.Mesh(ringGeo, ringMaterial);
|
|
||||||
ring.rotation.x = Math.PI / 2;
|
|
||||||
ring.rotation.z = Date.now() * 0.001;
|
|
||||||
group.add(ring);
|
|
||||||
|
|
||||||
const ring2 = new THREE.Mesh(new THREE.TorusGeometry(2.3, 0.03, 16, 64), ringMaterial);
|
|
||||||
ring2.rotation.x = Math.PI / 2;
|
|
||||||
ring2.rotation.y = 0.3;
|
|
||||||
group.add(ring2);
|
|
||||||
|
|
||||||
scene.add(group);
|
|
||||||
|
|
||||||
// Добавляем звёзды/частицы для атмосферы
|
|
||||||
const starsGeo = new THREE.BufferGeometry();
|
|
||||||
const starsCount = 800;
|
|
||||||
const positions = new Float32Array(starsCount * 3);
|
|
||||||
for (let i = 0; i < starsCount * 3; i += 3) {
|
|
||||||
positions[i] = (Math.random() - 0.5) * 40;
|
|
||||||
positions[i+1] = (Math.random() - 0.5) * 20;
|
|
||||||
positions[i+2] = (Math.random() - 0.5) * 40 - 10; // распределение вглубь
|
|
||||||
}
|
|
||||||
starsGeo.setAttribute('position', new THREE.BufferAttribute(positions, 3));
|
|
||||||
const starsMat = new THREE.PointsMaterial({ color: 0x226622, size: 0.08 });
|
|
||||||
const stars = new THREE.Points(starsGeo, starsMat);
|
|
||||||
scene.add(stars);
|
|
||||||
|
|
||||||
// Анимация
|
|
||||||
let clock = new THREE.Clock();
|
|
||||||
|
|
||||||
function animate() {
|
|
||||||
requestAnimationFrame(animate);
|
|
||||||
const delta = clock.getDelta();
|
|
||||||
const time = performance.now() * 0.001;
|
|
||||||
|
|
||||||
// Вращаем группу медленно
|
|
||||||
group.rotation.y += 0.002;
|
|
||||||
group.rotation.x = Math.sin(time * 0.2) * 0.1;
|
|
||||||
|
|
||||||
// Вращаем кольца независимо
|
|
||||||
ring.rotation.z += 0.005;
|
|
||||||
ring2.rotation.y += 0.003;
|
|
||||||
|
|
||||||
// Мерцание звёзд (меняем размер)
|
|
||||||
stars.material.size = 0.08 + Math.sin(time * 5) * 0.02;
|
|
||||||
|
|
||||||
renderer.render(scene, camera);
|
|
||||||
}
|
|
||||||
|
|
||||||
animate();
|
|
||||||
|
|
||||||
// Адаптация под ресайз окна
|
|
||||||
window.addEventListener('resize', onWindowResize, false);
|
|
||||||
function onWindowResize() {
|
|
||||||
camera.aspect = window.innerWidth / window.innerHeight;
|
|
||||||
camera.updateProjectionMatrix();
|
|
||||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,148 +0,0 @@
|
|||||||
{{template "base/head" .}}
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
--bg-color: #0f1217;
|
|
||||||
--text-color: #b0ffb0;
|
|
||||||
--accent-color: #4af030;
|
|
||||||
--secondary-color: #2a3a2a;
|
|
||||||
--glow: 0 0 10px rgba(74, 240, 48, 0.5);
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
background-color: var(--bg-color) !important;
|
|
||||||
color: var(--text-color) !important;
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
animation: fadeIn 1.5s ease-in-out; /* плавное появление всей страницы */
|
|
||||||
}
|
|
||||||
.home {
|
|
||||||
background: transparent !important;
|
|
||||||
}
|
|
||||||
.logo {
|
|
||||||
filter: drop-shadow(0 0 20px #4af030);
|
|
||||||
border-radius: 50%;
|
|
||||||
background: #0a0e12;
|
|
||||||
padding: 10px;
|
|
||||||
animation: glowPulse 3s infinite ease-in-out; /* пульсация свечения */
|
|
||||||
}
|
|
||||||
.hero h1, .hero h2 {
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
color: var(--accent-color) !important;
|
|
||||||
text-shadow: var(--glow);
|
|
||||||
}
|
|
||||||
.hero h1 {
|
|
||||||
font-size: 3rem;
|
|
||||||
animation: textFlicker 4s infinite; /* мерцание неона */
|
|
||||||
}
|
|
||||||
.page-grid {
|
|
||||||
border: 1px solid var(--secondary-color);
|
|
||||||
box-shadow: inset 0 0 50px rgba(0,255,0,0.1);
|
|
||||||
padding: 2rem;
|
|
||||||
margin: 1rem 0;
|
|
||||||
background: rgba(0,10,0,0.3);
|
|
||||||
backdrop-filter: blur(2px);
|
|
||||||
animation: slideUp 1s ease-out; /* появление снизу */
|
|
||||||
}
|
|
||||||
.column h1 {
|
|
||||||
color: var(--accent-color) !important;
|
|
||||||
font-size: 1.8rem;
|
|
||||||
border-bottom: 1px dashed var(--secondary-color);
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
.column p {
|
|
||||||
color: #aaa;
|
|
||||||
line-height: 1.8;
|
|
||||||
animation: fadeIn 2s ease-in; /* текст проявляется чуть позже */
|
|
||||||
}
|
|
||||||
.column a {
|
|
||||||
color: var(--accent-color) !important;
|
|
||||||
text-decoration: none;
|
|
||||||
border-bottom: 1px dotted var(--accent-color);
|
|
||||||
transition: text-shadow 0.3s;
|
|
||||||
}
|
|
||||||
.column a:hover {
|
|
||||||
text-shadow: var(--glow);
|
|
||||||
}
|
|
||||||
.footer-cursor {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 2rem;
|
|
||||||
color: var(--accent-color);
|
|
||||||
animation: blink 1s step-end infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ключевые кадры */
|
|
||||||
@keyframes fadeIn {
|
|
||||||
0% { opacity: 0; }
|
|
||||||
100% { opacity: 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes glowPulse {
|
|
||||||
0% { filter: drop-shadow(0 0 15px #4af030); transform: scale(1); }
|
|
||||||
50% { filter: drop-shadow(0 0 30px #4af030); transform: scale(1.02); }
|
|
||||||
100% { filter: drop-shadow(0 0 15px #4af030); transform: scale(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes textFlicker {
|
|
||||||
0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% { opacity: 1; text-shadow: 0 0 5px #4af030, 0 0 15px #4af030; }
|
|
||||||
20%, 24%, 55% { opacity: 0.7; text-shadow: none; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes slideUp {
|
|
||||||
0% { opacity: 0; transform: translateY(30px); }
|
|
||||||
100% { opacity: 1; transform: translateY(0); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blink {
|
|
||||||
0%,100% { opacity: 1; }
|
|
||||||
50% { opacity: 0; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div role="main" aria-label="{{if .IsSigned}}{{ctx.Locale.Tr "dashboard"}}{{else}}{{ctx.Locale.Tr "home"}}{{end}}" class="page-content home">
|
|
||||||
<div class="tw-mb-8 tw-px-8">
|
|
||||||
<div class="center">
|
|
||||||
<img class="logo" width="220" height="220" src="{{AssetUrlPrefix}}/img/logo.png" alt="{{ctx.Locale.Tr "logo"}}">
|
|
||||||
<div class="hero">
|
|
||||||
<h1 class="ui icon header title tw-text-balance">
|
|
||||||
{{if .IsSigned}}АГЕНТ {{.SignedUser.Name}} В СЕТИ{{else}}ТРЕТИЙ ЭШЕЛОН / GIT{{end}}
|
|
||||||
</h1>
|
|
||||||
<h2 class="tw-text-balance">
|
|
||||||
{{if .IsSigned}}Журналы миссий{{else}}Частный репозиторий{{end}}
|
|
||||||
</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="ui stackable middle very relaxed page grid">
|
|
||||||
<div class="eight wide center column">
|
|
||||||
<h1 class="hero ui icon header">
|
|
||||||
{{svg "octicon-flame"}} МИССИЯ: УСТАНОВЛЕН
|
|
||||||
</h1>
|
|
||||||
<p class="large tw-text-balance">
|
|
||||||
Развернут в режиме скрытности.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="eight wide center column">
|
|
||||||
<h1 class="hero ui icon header">
|
|
||||||
{{svg "octicon-device-desktop"}} ОПЕРАЦИОННАЯ ПЛАТФОРМА
|
|
||||||
</h1>
|
|
||||||
<p class="large tw-text-balance">
|
|
||||||
Внедрён в UBUNTU 24 LTS.
|
|
||||||
</p>
|
|
||||||
<p class="large tw-text-balance" style="margin-top: 1rem;">
|
|
||||||
<span style="opacity:0.7;">Оперативник</span> <strong style="color:var(--accent-color);"><a href="https://t.me/Y0zhyck">Yozhyck</a></strong>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="ui stackable middle very relaxed page grid">
|
|
||||||
<div class="eight wide center column">
|
|
||||||
<h1 class="hero ui icon header">
|
|
||||||
{{svg "octicon-rocket"}} СКРЫТЫЕ ОПЕРАЦИИ
|
|
||||||
</h1>
|
|
||||||
<p class="large tw-text-balance">
|
|
||||||
Лёгкий и незаметный. Минимальное воздействие, максимальная производительность. Никаких следов.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer-cursor">_</div>
|
|
||||||
</div>
|
|
||||||
{{template "base/footer" .}}
|
|
||||||
390
ilike.html
390
ilike.html
@@ -1,390 +0,0 @@
|
|||||||
{{template "base/head" .}}
|
|
||||||
|
|
||||||
<style>
|
|
||||||
|
|
||||||
:root{
|
|
||||||
|
|
||||||
--bg:#020304;
|
|
||||||
--green:#4af030;
|
|
||||||
--dark:#0a0f0a;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
body{
|
|
||||||
|
|
||||||
background:black!important;
|
|
||||||
color:var(--green);
|
|
||||||
font-family:Courier New,monospace;
|
|
||||||
overflow:hidden;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* GRID */
|
|
||||||
|
|
||||||
body::before{
|
|
||||||
|
|
||||||
content:"";
|
|
||||||
position:fixed;
|
|
||||||
width:100%;
|
|
||||||
height:100%;
|
|
||||||
|
|
||||||
background-image:
|
|
||||||
|
|
||||||
linear-gradient(rgba(0,255,0,0.06) 1px, transparent 1px),
|
|
||||||
linear-gradient(90deg, rgba(0,255,0,0.06) 1px, transparent 1px);
|
|
||||||
|
|
||||||
background-size:40px 40px;
|
|
||||||
|
|
||||||
pointer-events:none;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* CRT */
|
|
||||||
|
|
||||||
body::after{
|
|
||||||
|
|
||||||
content:"";
|
|
||||||
position:fixed;
|
|
||||||
width:100%;
|
|
||||||
height:100%;
|
|
||||||
|
|
||||||
background:
|
|
||||||
|
|
||||||
linear-gradient(
|
|
||||||
rgba(0,255,0,0.03),
|
|
||||||
rgba(0,255,0,0.03)
|
|
||||||
);
|
|
||||||
|
|
||||||
animation:flicker 0.15s infinite;
|
|
||||||
|
|
||||||
pointer-events:none;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@keyframes flicker{
|
|
||||||
|
|
||||||
0%{opacity:0.9}
|
|
||||||
50%{opacity:1}
|
|
||||||
100%{opacity:0.9}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* CENTER */
|
|
||||||
|
|
||||||
.center{
|
|
||||||
|
|
||||||
position:absolute;
|
|
||||||
|
|
||||||
top:50%;
|
|
||||||
left:50%;
|
|
||||||
|
|
||||||
transform:translate(-50%,-50%);
|
|
||||||
|
|
||||||
text-align:center;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* LOGO */
|
|
||||||
|
|
||||||
#logo3d{
|
|
||||||
|
|
||||||
width:260px;
|
|
||||||
height:260px;
|
|
||||||
margin:auto;
|
|
||||||
|
|
||||||
filter:
|
|
||||||
|
|
||||||
drop-shadow(0 0 20px #4af030)
|
|
||||||
drop-shadow(0 0 60px #4af030);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* TEXT */
|
|
||||||
|
|
||||||
.title{
|
|
||||||
|
|
||||||
font-size:38px;
|
|
||||||
|
|
||||||
margin-top:20px;
|
|
||||||
|
|
||||||
text-shadow:0 0 20px #4af030;
|
|
||||||
|
|
||||||
animation:flickerText 3s infinite;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@keyframes flickerText{
|
|
||||||
|
|
||||||
0%,18%,22%,25%,53%,57%,100%{opacity:1}
|
|
||||||
|
|
||||||
20%,24%,55%{opacity:0.4}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* STATUS */
|
|
||||||
|
|
||||||
.status{
|
|
||||||
|
|
||||||
margin-top:20px;
|
|
||||||
|
|
||||||
font-size:18px;
|
|
||||||
|
|
||||||
opacity:0.8;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* SCANNER */
|
|
||||||
|
|
||||||
.scan{
|
|
||||||
|
|
||||||
position:fixed;
|
|
||||||
|
|
||||||
width:100%;
|
|
||||||
height:3px;
|
|
||||||
|
|
||||||
background:#4af030;
|
|
||||||
|
|
||||||
box-shadow:0 0 20px #4af030;
|
|
||||||
|
|
||||||
animation:scan 4s linear infinite;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@keyframes scan{
|
|
||||||
|
|
||||||
0%{top:0}
|
|
||||||
|
|
||||||
100%{top:100%}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="scan"></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="center">
|
|
||||||
|
|
||||||
|
|
||||||
<div id="logo3d"></div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="title">
|
|
||||||
|
|
||||||
THIRD ECHELON
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="status" id="status">
|
|
||||||
|
|
||||||
INITIALIZING SYSTEM...
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="importmap">
|
|
||||||
{
|
|
||||||
"imports":{
|
|
||||||
"three":
|
|
||||||
"https://unpkg.com/three@0.128.0/build/three.module.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
|
|
||||||
import * as THREE from "three";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const container =
|
|
||||||
document.getElementById("logo3d");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const scene =
|
|
||||||
new THREE.Scene();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const camera =
|
|
||||||
new THREE.PerspectiveCamera(
|
|
||||||
45,
|
|
||||||
1,
|
|
||||||
0.1,
|
|
||||||
1000
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
camera.position.z=3;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const renderer =
|
|
||||||
new THREE.WebGLRenderer({
|
|
||||||
alpha:true,
|
|
||||||
antialias:true
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
renderer.setSize(260,260);
|
|
||||||
|
|
||||||
renderer.setClearColor(0x000000,0);
|
|
||||||
|
|
||||||
|
|
||||||
container.appendChild(
|
|
||||||
renderer.domElement
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* LOGO TEXTURE */
|
|
||||||
|
|
||||||
const texture =
|
|
||||||
new THREE.TextureLoader().load(
|
|
||||||
|
|
||||||
"https://git.grenu4.ru/y0zhyck/templates-for-gitea/media/branch/main/assets/third-echelon-logo.png"
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* LOGO */
|
|
||||||
|
|
||||||
const mesh =
|
|
||||||
new THREE.Mesh(
|
|
||||||
|
|
||||||
new THREE.CircleGeometry(1,64),
|
|
||||||
|
|
||||||
new THREE.MeshBasicMaterial({
|
|
||||||
|
|
||||||
map:texture,
|
|
||||||
transparent:true
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
scene.add(mesh);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* GLOW */
|
|
||||||
|
|
||||||
const glow =
|
|
||||||
new THREE.Mesh(
|
|
||||||
|
|
||||||
new THREE.CircleGeometry(1.2,64),
|
|
||||||
|
|
||||||
new THREE.MeshBasicMaterial({
|
|
||||||
|
|
||||||
color:0x4af030,
|
|
||||||
transparent:true,
|
|
||||||
opacity:0.15
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
scene.add(glow);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function animate(){
|
|
||||||
|
|
||||||
requestAnimationFrame(animate);
|
|
||||||
|
|
||||||
mesh.rotation.y+=0.01;
|
|
||||||
|
|
||||||
glow.rotation.y-=0.005;
|
|
||||||
|
|
||||||
renderer.render(scene,camera);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
animate();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* STATUS TEXT */
|
|
||||||
|
|
||||||
const status =
|
|
||||||
document.getElementById("status");
|
|
||||||
|
|
||||||
|
|
||||||
setTimeout(()=>{
|
|
||||||
|
|
||||||
status.innerHTML="CONNECTING TO NSA...";
|
|
||||||
|
|
||||||
},2000);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
setTimeout(()=>{
|
|
||||||
|
|
||||||
status.innerHTML="AUTHENTICATING OPERATIVE...";
|
|
||||||
|
|
||||||
},4000);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
setTimeout(()=>{
|
|
||||||
|
|
||||||
status.innerHTML="ACCESS GRANTED";
|
|
||||||
|
|
||||||
status.style.color="#7CFF00";
|
|
||||||
|
|
||||||
},6000);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{template "base/footer" .}}
|
|
||||||
260
index.html
Normal file
260
index.html
Normal file
@@ -0,0 +1,260 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>NSA Secure Terminal</title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
body{
|
||||||
|
margin:0;
|
||||||
|
background:#000;
|
||||||
|
font-family:monospace;
|
||||||
|
color:#00ff88;
|
||||||
|
overflow:hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GRID */
|
||||||
|
|
||||||
|
.grid{
|
||||||
|
position:absolute;
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
background:
|
||||||
|
linear-gradient(#00ff8822 1px, transparent 1px),
|
||||||
|
linear-gradient(90deg,#00ff8822 1px, transparent 1px);
|
||||||
|
background-size:40px 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SCAN LINE */
|
||||||
|
|
||||||
|
.scanline{
|
||||||
|
position:absolute;
|
||||||
|
width:100%;
|
||||||
|
height:4px;
|
||||||
|
background:#00ff88;
|
||||||
|
opacity:.2;
|
||||||
|
animation:scan 4s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes scan{
|
||||||
|
0%{top:-10%}
|
||||||
|
100%{top:110%}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MATRIX */
|
||||||
|
|
||||||
|
canvas{
|
||||||
|
position:absolute;
|
||||||
|
top:0;
|
||||||
|
left:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RADAR */
|
||||||
|
|
||||||
|
.radar{
|
||||||
|
position:absolute;
|
||||||
|
right:50px;
|
||||||
|
top:50px;
|
||||||
|
width:150px;
|
||||||
|
height:150px;
|
||||||
|
border:1px solid #00ff88;
|
||||||
|
border-radius:50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radar::after{
|
||||||
|
content:"";
|
||||||
|
position:absolute;
|
||||||
|
width:50%;
|
||||||
|
height:2px;
|
||||||
|
background:#00ff88;
|
||||||
|
top:50%;
|
||||||
|
left:50%;
|
||||||
|
transform-origin:left;
|
||||||
|
animation:radar 3s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes radar{
|
||||||
|
0%{transform:rotate(0deg)}
|
||||||
|
100%{transform:rotate(360deg)}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LOGIN BOX */
|
||||||
|
|
||||||
|
.login{
|
||||||
|
position:absolute;
|
||||||
|
top:50%;
|
||||||
|
left:50%;
|
||||||
|
transform:translate(-50%,-50%);
|
||||||
|
border:1px solid #00ff88;
|
||||||
|
padding:40px;
|
||||||
|
width:350px;
|
||||||
|
background:rgba(0,20,0,.85);
|
||||||
|
box-shadow:0 0 30px #00ff88;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SAM FISHER LIGHTS */
|
||||||
|
|
||||||
|
.goggles{
|
||||||
|
display:flex;
|
||||||
|
justify-content:center;
|
||||||
|
gap:10px;
|
||||||
|
margin-bottom:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.light{
|
||||||
|
width:14px;
|
||||||
|
height:14px;
|
||||||
|
border-radius:50%;
|
||||||
|
background:#00ff88;
|
||||||
|
box-shadow:0 0 15px #00ff88,0 0 30px #00ff88;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* INPUT */
|
||||||
|
|
||||||
|
input{
|
||||||
|
width:100%;
|
||||||
|
margin:10px 0;
|
||||||
|
padding:10px;
|
||||||
|
background:#001a00;
|
||||||
|
border:1px solid #00ff88;
|
||||||
|
color:#00ff88;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* BUTTON */
|
||||||
|
|
||||||
|
button{
|
||||||
|
width:100%;
|
||||||
|
padding:12px;
|
||||||
|
background:#002200;
|
||||||
|
border:1px solid #00ff88;
|
||||||
|
color:#00ff88;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover{
|
||||||
|
background:#00ff88;
|
||||||
|
color:#000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TERMINAL TEXT */
|
||||||
|
|
||||||
|
.terminal{
|
||||||
|
position:absolute;
|
||||||
|
bottom:30px;
|
||||||
|
left:30px;
|
||||||
|
font-size:14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cursor{
|
||||||
|
animation:blink 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink{
|
||||||
|
0%,50%,100%{opacity:1}
|
||||||
|
25%,75%{opacity:0}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GLITCH */
|
||||||
|
|
||||||
|
.glitch{
|
||||||
|
animation:glitch 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes glitch{
|
||||||
|
0%{text-shadow:2px 0 red}
|
||||||
|
20%{text-shadow:-2px 0 blue}
|
||||||
|
40%{text-shadow:2px 0 green}
|
||||||
|
60%{text-shadow:-2px 0 red}
|
||||||
|
80%{text-shadow:2px 0 blue}
|
||||||
|
100%{text-shadow:0 0 5px #00ff88}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid"></div>
|
||||||
|
<div class="scanline"></div>
|
||||||
|
|
||||||
|
<canvas id="matrix"></canvas>
|
||||||
|
|
||||||
|
<div class="radar"></div>
|
||||||
|
|
||||||
|
<div class="login">
|
||||||
|
|
||||||
|
<div class="goggles">
|
||||||
|
<div class="light"></div>
|
||||||
|
<div class="light"></div>
|
||||||
|
<div class="light"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="glitch">NSA SECURE TERMINAL</h2>
|
||||||
|
|
||||||
|
<form action="/user/login" method="post">
|
||||||
|
|
||||||
|
<input type="text" name="user_name" placeholder="username">
|
||||||
|
<input type="password" name="password" placeholder="password">
|
||||||
|
|
||||||
|
<button>ACCESS SYSTEM</button>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="terminal">
|
||||||
|
Initializing secure channel...<br>
|
||||||
|
Scanning user credentials...<br>
|
||||||
|
Access protocol ready<span class="cursor">_</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
/* MATRIX RAIN */
|
||||||
|
|
||||||
|
const canvas=document.getElementById("matrix")
|
||||||
|
const ctx=canvas.getContext("2d")
|
||||||
|
|
||||||
|
canvas.height=window.innerHeight
|
||||||
|
canvas.width=window.innerWidth
|
||||||
|
|
||||||
|
const letters="01GITEA_SECURE_ACCESS"
|
||||||
|
letters.split("")
|
||||||
|
|
||||||
|
const font=14
|
||||||
|
const columns=canvas.width/font
|
||||||
|
const drops=[]
|
||||||
|
|
||||||
|
for(let x=0;x<columns;x++)
|
||||||
|
drops[x]=1
|
||||||
|
|
||||||
|
function draw(){
|
||||||
|
|
||||||
|
ctx.fillStyle="rgba(0,0,0,.05)"
|
||||||
|
ctx.fillRect(0,0,canvas.width,canvas.height)
|
||||||
|
|
||||||
|
ctx.fillStyle="#00ff88"
|
||||||
|
ctx.font=font+"px monospace"
|
||||||
|
|
||||||
|
for(let i=0;i<drops.length;i++){
|
||||||
|
|
||||||
|
const text=letters.charAt(Math.floor(Math.random()*letters.length))
|
||||||
|
|
||||||
|
ctx.fillText(text,i*font,drops[i]*font)
|
||||||
|
|
||||||
|
if(drops[i]*font>canvas.height && Math.random()>0.975)
|
||||||
|
drops[i]=0
|
||||||
|
|
||||||
|
drops[i]++
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(draw,33)
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
139
logoadd.html
139
logoadd.html
@@ -1,139 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>▮ ТРЕТИЙ ЭШЕЛОН ▮ ДОСТУП ОПЕРАТИВНИКА</title>
|
|
||||||
<style>
|
|
||||||
/* все стили остаются без изменений */
|
|
||||||
body { margin: 0; overflow: hidden; font-family: 'Courier New', monospace; }
|
|
||||||
#info {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 30px;
|
|
||||||
left: 30px;
|
|
||||||
color: #0f0;
|
|
||||||
background: rgba(0,0,0,0.7);
|
|
||||||
padding: 15px 25px;
|
|
||||||
border-left: 4px solid #0f0;
|
|
||||||
z-index: 10;
|
|
||||||
text-shadow: 0 0 5px #0f0;
|
|
||||||
pointer-events: none;
|
|
||||||
border-radius: 0 8px 8px 0;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
}
|
|
||||||
#info a {
|
|
||||||
color: #0f0;
|
|
||||||
text-decoration: none;
|
|
||||||
border-bottom: 1px dashed #0f0;
|
|
||||||
}
|
|
||||||
#status {
|
|
||||||
position: absolute;
|
|
||||||
top: 30px;
|
|
||||||
right: 30px;
|
|
||||||
color: #0f0;
|
|
||||||
background: rgba(0,0,0,0.5);
|
|
||||||
padding: 8px 15px;
|
|
||||||
border: 1px solid #0f0;
|
|
||||||
z-index: 10;
|
|
||||||
font-size: 14px;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
}
|
|
||||||
.corner-triangle {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-top: 60px solid #0f0;
|
|
||||||
border-right: 60px solid transparent;
|
|
||||||
z-index: 20;
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
#login-button {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 30px;
|
|
||||||
right: 30px;
|
|
||||||
z-index: 30;
|
|
||||||
background: transparent;
|
|
||||||
border: 2px solid #0f0;
|
|
||||||
color: #0f0;
|
|
||||||
padding: 12px 30px;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 4px;
|
|
||||||
cursor: pointer;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
background-color: rgba(0, 20, 0, 0.4);
|
|
||||||
box-shadow: 0 0 15px #0f0;
|
|
||||||
transition: 0.3s;
|
|
||||||
text-decoration: none;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
#login-button:hover {
|
|
||||||
background-color: #0f0;
|
|
||||||
color: #000;
|
|
||||||
box-shadow: 0 0 30px #0f0;
|
|
||||||
border-color: #fff;
|
|
||||||
}
|
|
||||||
/* Стили для логотипа (способ 1) */
|
|
||||||
#corner-logo {
|
|
||||||
position: absolute;
|
|
||||||
top: 20px;
|
|
||||||
left: 20px;
|
|
||||||
width: 150px;
|
|
||||||
z-index: 30;
|
|
||||||
opacity: 0.9;
|
|
||||||
filter: drop-shadow(0 0 10px #0f0);
|
|
||||||
pointer-events: none; /* чтобы не мешал кликам по кнопке */
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="corner-triangle"></div>
|
|
||||||
<!-- Логотип в углу (способ 1) -->
|
|
||||||
<img src="assets/third-echelon-logo.png" alt="Third Echelon" id="corner-logo">
|
|
||||||
|
|
||||||
<div id="status">🔒 СЕКРЕТНО // ТОЛЬКО ДЛЯ ОПЕРАТИВНИКОВ</div>
|
|
||||||
<div id="info">
|
|
||||||
⚡ ОПЕРАТИВНИК: <strong>Spirin Evgeniy</strong><br>
|
|
||||||
📡 СВЯЗЬ: <a href="https://t.me/Y0zhyck" target="_blank">https://t.me/Y0zhyck</a><br>
|
|
||||||
<span style="font-size:12px; opacity:0.7;">▸ ДОСТУП РАЗРЕШЁН ТОЛЬКО СОТРУДНИКАМ 3-ГО ЭШЕЛОНА ◂</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Кнопка входа -->
|
|
||||||
<a href="/user/login" id="login-button">⎈ ВОЙТИ ⎈</a>
|
|
||||||
|
|
||||||
<!-- Подключаем Three.js -->
|
|
||||||
<script type="importmap">
|
|
||||||
{
|
|
||||||
"imports": {
|
|
||||||
"three": "https://unpkg.com/three@0.128.0/build/three.module.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="module">
|
|
||||||
// Здесь весь твой предыдущий код Three.js (без изменений)
|
|
||||||
import * as THREE from 'three';
|
|
||||||
import { OrbitControls } from 'https://unpkg.com/three@0.128.0/examples/jsm/controls/OrbitControls.js';
|
|
||||||
|
|
||||||
const scene = new THREE.Scene();
|
|
||||||
scene.background = new THREE.Color(0x050510);
|
|
||||||
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
|
|
||||||
camera.position.set(0, 2, 8);
|
|
||||||
const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false });
|
|
||||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
||||||
renderer.shadowMap.enabled = false;
|
|
||||||
renderer.setPixelRatio(window.devicePixelRatio);
|
|
||||||
document.body.appendChild(renderer.domElement);
|
|
||||||
|
|
||||||
// освещение, группа, звёзды и анимация (как у тебя)
|
|
||||||
// ... (полный код из предыдущего сообщения)
|
|
||||||
// Я не копирую его повторно, чтобы не загромождать ответ, но ты вставишь свой полный скрипт сюда.
|
|
||||||
// Убедись, что группа с колоннами и кольцами остаётся, если не заменяешь её спрайтом.
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
/* Дополнительные стили для страницы, если потребуется */
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
}
|
|
||||||
/* Всё остальное уже в index.html */
|
|
||||||
Reference in New Issue
Block a user