806f2bdb1b
devops-tools/wrapped/wrapped-build/pipeline/head There was a failure building this commit
Добавлены Share/QR PNG, zip all, size meter, PWA-manifest, системная тема и haptic на copy; улучшены success/unwrap и статистика админки (EN/RU).
56 lines
3.0 KiB
HTML
56 lines
3.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ru" data-theme="dark">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>{{ title }} · Wrapped</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
<link rel="stylesheet" href="{{ static_url('css/app.css') }}" />
|
|
<link rel="icon" href="{{ static_url('favicon.svg') }}" type="image/svg+xml" />
|
|
<link rel="icon" href="{{ static_url('favicon.ico') }}" sizes="any" />
|
|
<link rel="apple-touch-icon" href="{{ static_url('apple-touch-icon.png') }}" />
|
|
<link rel="manifest" href="{{ static_url('manifest.webmanifest') }}" />
|
|
<meta name="theme-color" content="#0b1020" />
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
|
</head>
|
|
<body class="admin-body">
|
|
<div class="bg-grid" aria-hidden="true"></div>
|
|
<div class="top-actions admin-login-toggles">
|
|
<button type="button" class="icon-btn" id="lang-toggle" title="Language" aria-label="Language">
|
|
<span id="lang-label">RU</span>
|
|
</button>
|
|
<button type="button" class="icon-btn" id="theme-toggle" title="Theme" aria-label="Theme">
|
|
<svg id="theme-icon-sun" class="icon hidden" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>
|
|
<svg id="theme-icon-moon" class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M21 14.5A8.5 8.5 0 1 1 9.5 3a7 7 0 0 0 11.5 11.5z"/></svg>
|
|
</button>
|
|
</div>
|
|
<main class="admin-login-shell">
|
|
<form class="admin-card login-card" method="post" action="/admin/login">
|
|
<div class="login-head">
|
|
<span class="brand-mark" aria-hidden="true">
|
|
<i class="fa-solid fa-shield-halved"></i>
|
|
</span>
|
|
<div>
|
|
<div class="brand-name">Wrapped</div>
|
|
<div class="login-sub" data-i18n="admin.login.sub">Admin</div>
|
|
</div>
|
|
</div>
|
|
{% if error %}<p class="error login-error" {% if error_key %}data-i18n="{{ error_key }}"{% endif %}>{{ error }}</p>{% endif %}
|
|
<label>
|
|
<span data-i18n="admin.login.username">Username</span>
|
|
<input name="username" autocomplete="username" required autofocus />
|
|
</label>
|
|
<label>
|
|
<span data-i18n="admin.login.password">Password</span>
|
|
<input name="password" type="password" autocomplete="current-password" required />
|
|
</label>
|
|
<button class="btn primary" type="submit" data-i18n="admin.login.submit">Sign in</button>
|
|
</form>
|
|
</main>
|
|
<script src="{{ static_url('js/i18n.js') }}"></script>
|
|
<script src="{{ static_url('js/theme.js') }}"></script>
|
|
</body>
|
|
</html>
|