108 lines
7.6 KiB
HTML
108 lines
7.6 KiB
HTML
{% load static %}<!doctype html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
{# --- SEO & Meta Tags --- #}<title>{% block title %}ETPGRF — единая типографика для веба{% endblock %}</title>
|
||
<meta name="description" content="{% block description %}Бесплатный онлайн-типограф для подготовки текстов к публикации в вебе. Расставка неразрывных пробелов, правильных кавычек («ёлочки»), тире, спецсимволы, отбивка, компоновка, висячая пунктуация. Идеально для верстки сайтов, статей и постов.{% endblock %}">
|
||
<meta name="keywords" content="{% block keywords %}типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев{% endblock %}">
|
||
<meta name="author" content="Sergei Erjemin">
|
||
{# --- Open Graph (Facebook, VK, LinkedIn, Telegram) --- #}<meta property="og:type" content="website" />
|
||
<meta property="og:site_name" content="ETPGRF" />
|
||
<meta property="og:url" content="{{ request.build_absolute_uri }}" />
|
||
<meta property="og:title" content="{% block og_title %}ETPGRF — единая типографика для веба{% endblock %}" />
|
||
<meta property="og:description" content="{% block og_description %}Сделайте ваш текст профессиональным и готовым к публикации в интернете за один клик. Умная типографика для веб-дизайнеров, редакторов и контент-менеджеров.{% endblock %}" />
|
||
<meta property="og:image" content="{% block og_image %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endblock %}" />
|
||
<meta property="og:image:width" content="1200" />
|
||
<meta property="og:image:height" content="630" />
|
||
{# --- Twitter Cards (X) --- #}<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:title" content="{% block twitter_title %}ETPGRF — единая типографика для веба{% endblock %}" />
|
||
<meta name="twitter:description" content="{% block twitter_description %}Сделайте ваш текст профессиональным и готовым к публикации в интернете за один клик.{% endblock %}" />
|
||
<meta name="twitter:image" content="{% block twitter_image %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endblock %}" />
|
||
{# --- Favicons --- #}<link rel="icon" href="{{ request.scheme }}://{{ request.get_host }}{% static 'favicon.ico' %}" type="image/x-icon" />
|
||
<link rel="icon" type="image/png" href="{% static 'favicon-96x96.png' %}" />
|
||
<link rel="icon" href="{% static 'favicon-light.svg' %}" type="image/svg+xml" media="(prefers-color-scheme: light)" />
|
||
<link rel="icon" href="{% static 'favicon-dark.svg' %}" type="image/svg+xml" media="(prefers-color-scheme: dark)" />
|
||
<link rel="icon" type="image/svg+xml" href="{% static 'favicon.svg' %}" />
|
||
<link rel="apple-touch-icon" sizes="180x180" href="{% static 'apple-touch-icon.png' %}" />
|
||
<link rel="manifest" href="{% static 'site.webmanifest' %}" />
|
||
{# Bootstrap 5 CSS #}<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
|
||
{# Bootstrap Icons #}<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"/>
|
||
<style>
|
||
:root {
|
||
--bg-image-text: url("{% static 'svg/logo-etpgrf-site-light-txt.svg' %}");
|
||
--bg-image-logo: url("{% static 'svg/logo-etpgrf-site-light-compact.svg' %}");
|
||
}
|
||
|
||
@media (prefers-color-scheme: dark) {
|
||
:root {
|
||
--bg-image-text: url("{% static 'svg/logo-etpgrf-site-dark-txt.svg' %}");
|
||
--bg-image-logo: url("{% static 'svg/logo-etpgrf-site-dark-compact.svg' %}");
|
||
}
|
||
}
|
||
</style>
|
||
{# Custom CSS #}<link href="{% static 'css/etpgrf.css' %}" rel="stylesheet"/>
|
||
{# HTMX #}<script src="https://unpkg.com/htmx.org@1.9.10"></script>
|
||
{# Alpine.js #}<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
||
</head>
|
||
<body>
|
||
|
||
{# ШАПКА с логотипом и главное меню #}<nav id="main-navbar" class="navbar navbar-expand-lg mb-4">
|
||
<div id="logo" class="container logo-big" style="background-image: var(--bg-image-logo);">
|
||
<a class="navbar-brand" href="/" style="background-image: var(--bg-image-text);"
|
||
title="ETPGRF — единая типографика для веба">
|
||
</a>
|
||
|
||
{# Кнопка-бургер для мобильных #}
|
||
<button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
|
||
{# Меню #}
|
||
<div class="collapse navbar-collapse justify-content-end text-end" id="navbarNav">
|
||
<ul class="navbar-nav">
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if '/blog/' in request.path %}active fw-bold{% endif %}" href="{% url 'blog:post_list' %}">Блог</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.path == '/donate/' %}active fw-bold{% endif %}" href="/donate/">Поддержать</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
{# Контент #}<div id="content-container" class="container">
|
||
{% block content %}{% endblock %}
|
||
</div>
|
||
|
||
{# Футер #}<footer class="footer mt-auto py-2 mt-4">
|
||
<div class="container d-flex justify-content-between align-items-center">
|
||
<span class="text-muted small nowrap me-2">© Sergei Erjemin, 2025–{% now 'Y' %}.</span>
|
||
<nobr class="text-muted small mx-2"><i class="bi bi-tags me-1" title="Версия библиотеки etpgrf / Версия сайта"></i><a href="/changelog">v0.1.4 / v0.2.2</a></nobr>
|
||
{# Сводная статистика (HTMX) #}<span class="text-muted small ms-2" hx-get="{% url 'stats_summary' %}" hx-trigger="load">
|
||
...
|
||
</span>
|
||
</div>
|
||
</footer>
|
||
|
||
{# Плашка о куках #}
|
||
<div id="cookie-banner" class="fixed-bottom p-4 fs-5" style="display: none;">
|
||
<div class="container d-flex justify-content-between align-items-center">
|
||
<p class="mb-0 pe-5">
|
||
В соответствии с <abbr title="General Data Protection Regulation">GDPR</abbr>
|
||
и 152-<abbr title="Федеральный закон">ФЗ</abbr>, уведомляем вас, что настоящий сайт использует файлы cookie
|
||
для сбора данных о поведении пользо­вателей, с целью аналитики и улучшения своей работы.
|
||
Оставаясь на сайте, вы соглашаетесь с нашей
|
||
<a href="/privacy-policy">политикой конфи­денциаль­ности</a>.
|
||
</p>
|
||
<button id="cookie-accept" class="btn btn-lg ms-3">Принять</button>
|
||
</div>
|
||
</div>
|
||
|
||
{# Bootstrap JS #}<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||
{# Custom JS #}<script src="{% static 'js/base.js' %}" defer></script>
|
||
{% block scripts %}{% endblock %}
|
||
</body>
|
||
</html>
|