@@ -0,0 +1,70 @@
<!doctype html> {% load static %}
< html lang = "ru" >
< head >
< meta charset = "utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< meta name = "description" content = "{% block DESCRIPTION %}SVG-матрицы, блокирующие неокортекс. Алгоритмы мерцания и пульсаций, вводящие в транс. Новая web-технология удержания посетителей. Перед деплоем проконсультируйтесь с нейропсихологом{% endblock %}" / >
< meta name = "keywords" content = "{% block KEYWORDS %}hypn0, svg matrix, hypnotoad, гипножаба, векторный глюко-растр, халфтон генератор, k-means svg, веб-дизайн паттерны, css анимация сетки{% endblock %}" / >
< meta name = "copyright" lang = "ru" content = "Sergei Erjemin{% block META_COPYRIGHT_AUTHOR %}{% endblock %}." / >
< meta name = "robots" content = "{% block ROBOTS %}index,follow{% endblock %}" / >
< meta name = "format-detection" content = "telephone=no" / >
< title > {% block PAGE_TITLE %}hypn0: SVG-matrix of Hypnotoad — инструмент цифрового гипно-маркетинга{% endblock %}< / title >
< meta name = "meta-title" content = "{% block META_TITLE %}hypn0: SVG-matrix of Hypnotoad — инструмент цифрового гипно-маркетинга{% endblock %}" / >
< meta name = "meta-description" content = "{% block META_DESCRIPTION %}SVG-матрицы, блокирующие неокортекс. Алгоритмы мерцания и пульсаций, вводящие в транс. Новая web-технология удержания посетителей. Перед деплоем проконсультируйтесь с нейропсихологом{% endblock %}" / >
< link rel = "canonical" href = "{% block CANONICAL %}{{ request.scheme }}://{{ request.get_host }}{{ request.path }}{% endblock %}" / >
< meta property = "og:site_name" content = "hypn0.xyz" / >
< meta property = "og:locale" content = "ru_RU" / >
< meta property = "og:title" content = "{% block OG_TITLE %}hypn0: SVG-matrix of Hypnotoad — инструмент цифрового гипно-маркетинга{% endblock %}" / >
< meta property = "og:description" content = "{% block OG_DESCRIPTION %}SVG-матрицы, блокирующие неокортекс. Алгоритмы мерцания и пульсаций, вводящие в транс. Новая web-технология удержания посетителей. Перед деплоем проконсультируйтесь с нейропсихологом{% endblock %}" / >
< meta property = "og:url" content = "{% block OG_URL %}{{ request.scheme }}://{{ request.get_host }}{{ request.path }}{% endblock %}" / >
< meta property = "og:type" content = "{% block OG_TYPE %}website{% endblock %}" / >
< meta property = "og:image" content = "{% block OG_IMAGE %}{% static 'img/og-hypn0-default.png' %}{% endblock %}" / >
< meta property = "og:image:alt" content = "{% block OG_IMAGE_ALT %}hypn0: SVG-matrix of Hypnotoad — инструмент цифрового гипно-маркетинга{% endblock %}" / >
< meta name = "twitter:card" content = "{% block TWITTER_CARD %}summary_large_image{% endblock %}" / >
< meta name = "twitter:title" content = "{% block TWITTER_TITLE %}hypn0: SVG-matrix of Hypnotoad — инструмент цифрового гипно-маркетинга{% endblock %}" / >
< meta name = "twitter:description" content = "{% block TWITTER_DESCRIPTION %}SVG-матрицы, блокирующие неокортекс. Алгоритмы мерцания и пульсаций, вводящие в транс. Новая web-технология удержания посетителей. Перед деплоем проконсультируйтесь с нейропсихологом{% endblock %}" / >
< meta name = "twitter:image" content = "{% block TWITTER_IMAGE %}{% static 'img/og-hypn0-default.png' %}{% endblock %}" / >
< meta name = "theme-color" content = "#F5F5F5" / >
{# Шутка #}< meta name = "generator" content = "Microsoft FrontPage 1.0" / >
< link rel = "icon" type = "image/svg+xml" href = "{% static 'img/favicon.svg' %}" / >
< link rel = "icon" type = "image/png" href = "{% static 'img/favicon.png' %}" / >
< link rel = "shortcut icon" type = "image/x-icon" href = "{% static 'img/favicon.ico' %}" / > {% if IS_DEBUG %}{% comment %}
Переключение dev/prod стилей Tailwind CSS происходит
АВТОМАТИЧЕСКИ через переменную IS_DEBUG (см. контексный-процессор
frontend/context_processors.py), DEV: tailwindcss из CDN, компилируется прямо в браузере. Удобно
для разработки (не нужна сборка), но грузит браузер и prod не используется. {% endcomment %}
< script src = "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4" > < / script > {% comment %}
Кастомные @theme/@layer директивы проекта (токены цвета, типовой стиль ссылок)
лежат в css/tailwind-custom.css. @tailwindcss/browser сканирует и компилирует ТОЛЬКО то, что
видит в финальном DOM — то есть только содержимое тегов style с type text/tailwindcss, а не
внешние .css, подключённые через link. Поэтому файл вставляется сюда через include, а не
подключается отдельным link.{% endcomment %}
< style type = "text/tailwindcss" >
{ % i n c l u d e " c s s / t a i l w i n d - c u s t o m . c s s " % }
< / style > {% else %}{% comment %} PROD: заранее собранный Tailwind CLI файл (см.
frontend-assembly/tailwind/input.css и package.json). CLI сканирует шаблоны проекта и генерирует
только реально используемые классы, включая кастомные @theme/@layer директивы из того же самого
файла css/tailwind-custom.css (подключён в input.css через @import).{% endcomment %}
< link rel = "stylesheet" href = "{% static 'css/tailwind.min.css' %}" / > {% endif %}
< script type = "application/ld+json" >
{
"@context" : "https://schema.org" ,
"@type" : "WebSite" ,
"name" : "hypn0.xyz" ,
"url" : "{{ request.scheme }}://{{ request.get_host }}/"
}
< / script > {% block EXTRAHEAD %}{% endblock EXTRAHEAD %}
< link rel = "stylesheet" href = "{% static 'css/hypn0.css' %}" / >
< / head >
< body class = "bg-stone-50 text-emerald-700 dark:bg-zinc-950 dark:text-emerald-100 font-mono" >
{% block ADD_CSS1 %}{% endblock %}{% block ADD_CSS2 %}{% endblock %}{% block ADD_CSS3 %}{% endblock %}{% block BODY %}
{# include "block/header.html" #}
< main id = "main-content" class = "mx-auto min-h-screen max-w-7xl px-4 py-8" >
{% block CONTENT %}{% endblock CONTENT %}
< / main >
{# {% include "blocks/footer.jinja2" %} #}{% endblock BODY %}{% if not ALLOW_TRACKING %}{# Если клиент еще не согласился на отслеживание покажем ему уведомление #}{% include "block/allow-tracking.html" %}{% else %}{# Если согласился -- отслеживаем#}
< script src = "{% static 'js/analytics.js' %}" > < / script > {% endif %}
< script src = "{% static 'js/alpine.min.js' %}" > < / script >
< script src = "{% static 'js/htmx.min.js' %}" > < / script > {% block ADD_JS1 %}{% endblock ADD_JS1 %}{% block ADD_JS2 %}{% endblock ADD_JS2 %}{% block ADD_JS3 %}{% endblock ADD_JS3 %}
< / body >
< / html >