mod: localized English version of README and UI texts, enhanced accessibility and internationalization features
HYPN0 Build and Push Docker Image / build-and-push (push) Successful in 51s

This commit is contained in:
2026-09-27 19:19:59 +03:00
parent ebf78c2c48
commit 1c846f7912
38 changed files with 1360 additions and 1091 deletions
@@ -1,10 +1,10 @@
<!doctype html>
<html lang="ru">
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Реконструкция матрицы | HypnoSVG</title>
<meta name="description" content="Сектор временно закрыт на квантовую реконструкцию и модернизацию алгоритмов HypnoSVG." />
<title>Under Reconstruction — Reality Rebuilding | HypnoSVG</title>
<meta name="description" content="This brain sector of HypnoSVG is undergoing reconstruction. All Glory to the Hypnotoad." />
<meta name="robots" content="noindex, follow" />
<link rel="icon" type="image/svg+xml" href="/media/_error/favicon.svg" />
<link rel="shortcut icon" href="/media/_error/favicon.ico" />
@@ -353,10 +353,10 @@
<body>
<header>
<div class="header-inner">
<a href="/" class="logo-link" title="HypnoSVG (hypn0) — На главную">
<a href="/" class="logo-link" title="HypnoSVG (hypn0) — Home">
<img src="/static/img/logo-hypn0.svg" onerror="this.onerror=null; this.src='/media/_error/logo-hypn0.svg';" alt="HypnoSVG" class="logo-img" />
</a>
<button type="button" class="theme-toggle" id="theme-btn" aria-label="Переключить тему" title="Переключить тему">
<button type="button" class="theme-toggle" id="theme-btn" aria-label="Toggle theme" title="Toggle theme">
<span id="theme-icon">●</span>
</button>
</div>
@@ -368,40 +368,40 @@
<img src="/static/img/thinking.svg" onerror="this.onerror=null; this.src='/media/_error/thinking.svg';" alt="Under Reconstruction Slug" />
</div>
<div class="error-code-badge">РЕКОНСТРУКЦИЯ ИНТРОСПЕКЦИИ</div>
<div class="error-code-badge">INTROSPECTION RECONSTRUCTION</div>
<h1 class="error-title">Отдел мозга на&nbsp;реконструкции</h1>
<h1 class="error-title">Brain Sector Under Reconstruction</h1>
<p class="error-desc">
Узел ментальной матрицы перестраивается по&nbsp;бредо-чертежам Гипножабы. Бри-Гады мозговых слизней под&nbsp;контролем Мозгоклюя разворачивают новый слой интроспекций. Скоро здесь появится нечто гипнотически непознаваемое.
This mental matrix node is being refitted according to the visionary blueprints of the Hypnotoad. Brain Slug brigades, supervised by the Brainpicker, are unrolling a brand-new layer of introspections. Soon something hypnotically unknowable will emerge here.
</p>
<div class="hypno-quote">
<big>Справка бюрократа 24-го уровня:</big><br/>&nbsp;<br/>
<span style="margin-left: -0.49em;">«</span><em>Ведутся строительно-монтажные работы по&nbsp;укладке новых векторных силовых линий. Проход без&nbsp;мантальной каски и&nbsp;без вживленного мозгового слизня ограничен даже гражданам в&nbsp;глубоком&nbsp;трансе.</em>»
<big>Grade 24 Bureaucrat Notice:</big><br/>&nbsp;<br/>
<span style="margin-left: -0.49em;">“</span><em>Construction work in progress: laying new vector flux lines. Entry without a psychic hard hat and an implanted Brain Slug is strictly prohibited, even for citizens in a deep trance.</em>”
</div>
<div class="actions-box">
<div class="btn-group">
<button type="button" class="btn btn-primary" id="return-btn">
<span>● Попытка вынырнуть из&nbsp;интроспекции</span>
<span>● Emerge from Introspection</span>
</button>
<button type="button" class="btn btn-secondary" onclick="window.history.length > 1 ? window.history.back() : window.location.href='/'">
<span>← На&nbsp;шаг назад</span>
<span>← Go Back</span>
</button>
</div>
<!-- Панель калибровки с задержкой и смешными фразами -->
<!-- Calibration panel with delay and witty messages -->
<div class="calibration-panel" id="calibration-panel">
<div class="calibration-status" id="calibration-status">
Инициа&shy;лизация перемещения из зоны работ…
Initializing egress from construction sector…
</div>
<div class="progress-bar-container">
<div class="progress-bar-fill" id="progress-bar"></div>
</div>
<div class="calibration-subtext">
<span>Снижение ментальной нагрузки на&nbsp;кластер</span>
<a href="/" class="instant-link" id="skip-link">Пройти гипноз мгновенно&nbsp;→</a>
<span>Reducing mental load on&nbsp;cluster</span>
<a href="/" class="instant-link" id="skip-link">Instant Hypnosis&nbsp;→</a>
</div>
</div>
</div>
@@ -410,11 +410,11 @@
<footer>
<div class="ascii-grid">░▒▓█ UNDER RECONSTRUCTION █▓▒░</div>
<div>Hypn0.xyz (HypnoSVG) © 2026. Слава Гипножабе. Все права подчинены.</div>
<div>Hypn0.xyz (HypnoSVG) ©&nbsp;2026. All Glory to&nbsp;the&nbsp;Hypnotoad. All minds subjugated.</div>
</footer>
<script>
// 1. Управление темой оформления (Light / Dark)
// 1. Theme switcher (Light / Dark)
var themeBtn = document.getElementById('theme-btn');
var themeIcon = document.getElementById('theme-icon');
@@ -430,7 +430,7 @@
updateThemeIcon();
});
// 2. Умная кнопка с задержкой и смешными сообщениями перекалибровки
// 2. Smart button with delay and humorous recalibration messages
var returnBtn = document.getElementById('return-btn');
var calibPanel = document.getElementById('calibration-panel');
var calibStatus = document.getElementById('calibration-status');
@@ -438,10 +438,10 @@
var isCalibrating = false;
var phrases = [
{ at: 0, text: "✦ Фаза 1/4: Закладываем квантовый фундамент новой функциональности&hellip;" },
{ at: 25, text: "✦ Фаза 2/4: Монтируем передовые генераторы векторных паттернов&hellip;" },
{ at: 55, text: "✦ Фаза 3/4: Бюрократ 24-го уровня согласует счет-фактуру&hellip;" },
{ at: 85, text: "✦ Фаза 4/4: Акт согласования готов! Это не поможет, но возвращаемся в&nbsp;активную зону сайта&hellip;" }
{ at: 0, text: "✦ Phase 1/4: Pouring quantum foundation for next-gen features&hellip;" },
{ at: 25, text: "✦ Phase 2/4: Mounting high-voltage vector pattern generators&hellip;" },
{ at: 55, text: "✦ Phase 3/4: Grade 24 Bureaucrat approves preliminary construction invoice&hellip;" },
{ at: 85, text: "✦ Phase 4/4: Bureaucratic approval signed! It won't help, but warping to active sector&hellip;" }
];
returnBtn.addEventListener('click', function() {
@@ -450,7 +450,7 @@
returnBtn.disabled = true;
returnBtn.style.opacity = '0.7';
returnBtn.innerHTML = '<span>Выполняется внушение…</span>';
returnBtn.innerHTML = '<span>Transmitting hypnotic command…</span>';
calibPanel.style.display = 'block';
var duration = 12000;
@@ -462,7 +462,7 @@
progressBar.style.width = progress + '%';
// Подбираем актуальную смешную фразу
// Select the active phrase
for (var i = phrases.length - 1; i >= 0; i--) {
if (progress >= phrases[i].at) {
calibStatus.innerHTML = phrases[i].text;