add: шаблон для ошибки (2) 404
This commit is contained in:
@@ -1434,7 +1434,7 @@ class BlogPostModelAndAdminTests(BaseMediaTestCase):
|
|||||||
self.assertContains(response, "Гипноузел не обнаружен", status_code=404)
|
self.assertContains(response, "Гипноузел не обнаружен", status_code=404)
|
||||||
self.assertContains(response, "СБОЙ МАТРИЦЫ // КОД? 404", status_code=404)
|
self.assertContains(response, "СБОЙ МАТРИЦЫ // КОД? 404", status_code=404)
|
||||||
self.assertContains(response, "return-btn", status_code=404)
|
self.assertContains(response, "return-btn", status_code=404)
|
||||||
self.assertContains(response, "Стираем остатки несуществующей страницы", status_code=404)
|
self.assertContains(response, "Стираем остатки несущес­твующей страницы", status_code=404)
|
||||||
|
|
||||||
@override_settings(DEBUG=True)
|
@override_settings(DEBUG=True)
|
||||||
def test_debug_error_preview_routing(self):
|
def test_debug_error_preview_routing(self):
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>404 — Векторная реальность не найдена | HypnoSVG</title>
|
<title>404 — Векторная реальность не найдена | HypnoSVG</title>
|
||||||
<meta name="description" content="Ошибка 404: Запрашиваемая страница не существует или стёрта волей Гипножабы." />
|
<meta name="description" content="Ошибка 404: Запрашиваемая страница HypnoSVG не существует или стёрта волей Гипножабы." />
|
||||||
<meta name="robots" content="noindex, follow" />
|
<meta name="robots" content="noindex, follow" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/static/img/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/static/img/favicon.svg" />
|
||||||
<link rel="shortcut icon" href="/static/img/favicon.ico" />
|
<link rel="shortcut icon" href="/static/img/favicon.ico" />
|
||||||
@@ -29,12 +29,10 @@
|
|||||||
--text-dim: #9ca3af;
|
--text-dim: #9ca3af;
|
||||||
--border-color: #d1d5db;
|
--border-color: #d1d5db;
|
||||||
--accent-color: #059669;
|
--accent-color: #059669;
|
||||||
--accent-hover: #047857;
|
|
||||||
--accent-bg: #ecfdf5;
|
--accent-bg: #ecfdf5;
|
||||||
--btn-bg: #059669;
|
--btn-bg: #059669;
|
||||||
--btn-text: #ffffff;
|
--btn-text: #ffffff;
|
||||||
--btn-hover: #047857;
|
--btn-hover: #047857;
|
||||||
--glitch-color: #dc2626;
|
|
||||||
--progress-bg: #e5e7eb;
|
--progress-bg: #e5e7eb;
|
||||||
--progress-fill: #059669;
|
--progress-fill: #059669;
|
||||||
}
|
}
|
||||||
@@ -48,12 +46,10 @@
|
|||||||
--text-dim: #71717a;
|
--text-dim: #71717a;
|
||||||
--border-color: #27272a;
|
--border-color: #27272a;
|
||||||
--accent-color: #a3e635;
|
--accent-color: #a3e635;
|
||||||
--accent-hover: #bef264;
|
|
||||||
--accent-bg: #14280f;
|
--accent-bg: #14280f;
|
||||||
--btn-bg: #a3e635;
|
--btn-bg: #a3e635;
|
||||||
--btn-text: #09090b;
|
--btn-text: #09090b;
|
||||||
--btn-hover: #bef264;
|
--btn-hover: #bef264;
|
||||||
--glitch-color: #f87171;
|
|
||||||
--progress-bg: #27272a;
|
--progress-bg: #27272a;
|
||||||
--progress-fill: #a3e635;
|
--progress-fill: #a3e635;
|
||||||
}
|
}
|
||||||
@@ -149,23 +145,28 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.error-art {
|
.error-art {
|
||||||
width: 300px;
|
width: min(300px, 100%);
|
||||||
height: 300px;
|
height: 300px;
|
||||||
margin: 0 auto 1.5rem;
|
margin: 0 auto 1.5rem;
|
||||||
display: flex;
|
|
||||||
/* align-items: center;
|
|
||||||
justify-content: center; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.error-art img, .error-art svg {
|
.error-art img, .error-art svg {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
|
animation: spin-spiral 40s linear infinite;
|
||||||
|
transform-origin: center center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes pulse-art {
|
@keyframes spin-spiral {
|
||||||
0%, 100% { transform: scale(1) rotate(0deg); }
|
from { transform: rotate(0deg); }
|
||||||
50% { transform: scale(1.05) rotate(-2deg); }
|
to { transform: rotate(-360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.error-art img, .error-art svg {
|
||||||
|
animation: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.error-code-badge {
|
.error-code-badge {
|
||||||
@@ -240,7 +241,7 @@
|
|||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
min-width: 16rem;
|
min-width: min(16rem, 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
@@ -408,7 +409,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<div class="ascii-grid">░▒▓█ HYPNO-SVG // ERROR 404 NOT FOUND █▓▒░</div>
|
<div class="ascii-grid">░▒▓█ ERROR 404 NOT FOUND █▓▒░</div>
|
||||||
<div>Hypn0.xyz (HypnoSVG) © 2026. Слава Гипножабе. Все права подчинены.</div>
|
<div>Hypn0.xyz (HypnoSVG) © 2026. Слава Гипножабе. Все права подчинены.</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
@@ -437,10 +438,10 @@
|
|||||||
var isCalibrating = false;
|
var isCalibrating = false;
|
||||||
|
|
||||||
var phrases = [
|
var phrases = [
|
||||||
{ at: 0, text: "✦ Фаза 1/4: Стираем остатки несуществующей страницы из подсознания…" },
|
{ at: 0, text: "✦ Фаза 1/4: Стираем остатки несущес­твующей страницы из подсознания…" },
|
||||||
{ at: 25, text: "✦ Фаза 2/4: Бюрократ 24-го уровня заверяет протокол 404…" },
|
{ at: 25, text: "✦ Фаза 2/4: Бюрократ 24-го уровня заверяет протокол 404…" },
|
||||||
{ at: 55, text: "✦ Фаза 3/4: Синхронизируем частоту мерцания с перцепторным полем…" },
|
{ at: 55, text: "✦ Фаза 3/4: Синхронизируем частоту мерцания с перцеп­торным полем…" },
|
||||||
{ at: 85, text: "✦ Фаза 4/4: Внушение принято! Телепортация на главную…" }
|
{ at: 85, text: "✦ Фаза 4/4: Внушение принято! Телепор­тация на главную…" }
|
||||||
];
|
];
|
||||||
|
|
||||||
returnBtn.addEventListener('click', function() {
|
returnBtn.addEventListener('click', function() {
|
||||||
@@ -464,7 +465,7 @@
|
|||||||
// Подбираем актуальную смешную фразу
|
// Подбираем актуальную смешную фразу
|
||||||
for (var i = phrases.length - 1; i >= 0; i--) {
|
for (var i = phrases.length - 1; i >= 0; i--) {
|
||||||
if (progress >= phrases[i].at) {
|
if (progress >= phrases[i].at) {
|
||||||
calibStatus.textContent = phrases[i].text;
|
calibStatus.innerHTML = phrases[i].text;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user