Files
Marker689 dea9e0a6e4 a11y: Web Interface Guidelines — 19 правок доступности и семантики
- base.html: lang динамический, meta theme-color, skip-link, убран дубль Dashboard
- Фильтры: labels на search/select, type=search, placeholder с …, autocomplete=off
- llm-retry: <span> → <button> во всех шаблонах (_llm_report, scan, package)
- sortable th: tabindex=0, role=button через JS + keyboard handler
- sort-icon: aria-hidden=true
- style.css: color-scheme:dark, prefers-reduced-motion, tabular-nums, touch-action
- app.js: clipboard fallback для не-HTTPS
2026-05-10 11:45:41 +03:00

33 lines
1.5 KiB
HTML

<!DOCTYPE html>
<html lang="{{ request.state.lang }}" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#13171f">
<title>{% block title %}GuardDog Nexus{% endblock %}</title>
<link rel="stylesheet" href="/static/pico.min.css">
<script src="/static/htmx.min.js"></script>
<link rel="stylesheet" href="/static/style.css">
<script src="/static/app.js"></script>
</head>
<body>
<a href="#main-content" style="position:absolute;left:-9999px;top:0;z-index:999;padding:0.5rem 1rem;background:#2a3140;color:#fff;">Skip to content</a>
<main class="container" id="main-content">
<nav class="sticky">
<ul><li><strong><a href="/">{{ t('nav_dashboard', request.state.lang) }}</a></strong></li></ul>
<ul>
<li><a href="/scans">{{ t('nav_scans', request.state.lang) }}</a></li>
<li><a href="/packages">{{ t('nav_packages', request.state.lang) }}</a></li>
<li style="margin-left: 1rem;">
{% set next = 'ru' if request.state.lang == 'en' else 'en' %}
<small><a href="?lang={{ next }}" style="font-size: 0.8rem; opacity: 0.6;">{{ 'RU' if next == 'ru' else 'EN' }}</a></small>
</li>
</ul>
</nav>
{% block breadcrumbs %}{% endblock %}
{% block content %}{% endblock %}
</main>
{% block scripts %}{% endblock %}
</body>
</html>