2026-09-13 18:43:42 +03:00
|
|
|
<!doctype html>
|
|
|
|
|
<html lang="ru">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8" />
|
2026-09-14 14:32:38 +03:00
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
2026-09-15 21:36:06 +03:00
|
|
|
<meta name="theme-color" content="#282828" />
|
2026-10-05 09:56:09 +03:00
|
|
|
<!-- PWA: <link rel="manifest"> и sw.js подставляет vite-plugin-pwa при сборке.
|
|
|
|
|
Здесь только то, что нужно iOS (у него нет install prompt и он не читает
|
|
|
|
|
часть полей манифеста) и иконки/сплэши для «на экран Домой». -->
|
|
|
|
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
|
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
|
|
|
<meta name="apple-mobile-web-app-title" content="JapLearn" />
|
|
|
|
|
<link rel="icon" href="/icons/favicon-32.png" sizes="32x32" type="image/png" />
|
|
|
|
|
<link rel="apple-touch-icon" href="/icons/apple-touch-icon-180.png" />
|
2026-09-15 21:36:06 +03:00
|
|
|
<link rel="preload" href="/fonts/NotoSansJP-VariableFont_wght.ttf" as="font" type="font/ttf" crossorigin />
|
2026-10-05 09:56:09 +03:00
|
|
|
<!-- Стартовые экраны iOS (иконка + название на фоне --bg).
|
|
|
|
|
Генерируются скриптом tools/gen_pwa_assets.py. -->
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-se.png"
|
|
|
|
|
media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-8-plus.png"
|
|
|
|
|
media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-x.png"
|
|
|
|
|
media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-xr.png"
|
|
|
|
|
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-xs-max.png"
|
|
|
|
|
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-12.png"
|
|
|
|
|
media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-12-pro-max.png"
|
|
|
|
|
media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-14-pro.png"
|
|
|
|
|
media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-14-pro-max.png"
|
|
|
|
|
media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-16-pro.png"
|
|
|
|
|
media="(device-width: 402px) and (device-height: 874px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/iphone-16-pro-max.png"
|
|
|
|
|
media="(device-width: 440px) and (device-height: 956px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/ipad-9-7.png"
|
|
|
|
|
media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/ipad-pro-11.png"
|
|
|
|
|
media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" />
|
|
|
|
|
<link rel="apple-touch-startup-image" href="/splash/ipad-pro-12-9.png"
|
|
|
|
|
media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" />
|
2026-09-13 18:43:42 +03:00
|
|
|
<title>JapLearn — интервальные повторения</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
2026-09-14 14:32:38 +03:00
|
|
|
<div id="app">
|
|
|
|
|
<header class="top-bar">
|
|
|
|
|
<button id="burger-btn" class="burger-btn" type="button" aria-label="Меню" aria-expanded="false" aria-controls="drawer">
|
|
|
|
|
<span></span>
|
|
|
|
|
<span></span>
|
|
|
|
|
<span></span>
|
|
|
|
|
</button>
|
|
|
|
|
<div class="top-bar-title">
|
|
|
|
|
<h1>JapLearn</h1>
|
|
|
|
|
<p id="page-title">Главная</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="top-bar-spacer"></div>
|
2026-09-13 18:43:42 +03:00
|
|
|
</header>
|
|
|
|
|
|
2026-09-14 14:32:38 +03:00
|
|
|
<div id="drawer-overlay" class="drawer-overlay" hidden></div>
|
|
|
|
|
<nav id="drawer" class="drawer" aria-label="Навигация" aria-hidden="true">
|
|
|
|
|
<div class="drawer-header">
|
|
|
|
|
<div class="drawer-logo">JapLearn</div>
|
|
|
|
|
<div class="drawer-subtitle">Интервальные повторения</div>
|
|
|
|
|
</div>
|
2026-09-21 12:00:42 +03:00
|
|
|
<button class="drawer-btn active" data-page="home" type="button">Главная</button>
|
|
|
|
|
<button class="drawer-btn" data-page="decks" type="button">Колоды</button>
|
|
|
|
|
<button class="drawer-btn" data-page="sync" type="button">Синхронизация</button>
|
2026-09-14 14:32:38 +03:00
|
|
|
</nav>
|
2026-09-13 18:43:42 +03:00
|
|
|
|
2026-09-14 14:32:38 +03:00
|
|
|
<div id="page" class="app-content">
|
|
|
|
|
<!-- Страницы рендерятся сюда -->
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-10-05 09:56:09 +03:00
|
|
|
<!-- Баннер PWA (установка / новая версия / офлайн). Логика — src/pwa.ts -->
|
|
|
|
|
<div id="pwa-banner" class="pwa-banner" role="status" aria-live="polite" hidden></div>
|
2026-09-13 18:43:42 +03:00
|
|
|
<script type="module" src="/src/main.ts"></script>
|
|
|
|
|
</body>
|
2026-09-14 14:32:38 +03:00
|
|
|
</html>
|