feat(mobile): implement iOS Safari responsive layout, bottom tab bar, and mobile bottom sheet

This commit is contained in:
Antigravity committed 2026-10-05 16:08:05 +03:00
1 parent d5e9354016
commit c0fdcd776b
4 files changed
+707 -50

No files matched your search

+56 -3
View File
@@ -2,10 +2,10 @@
<html lang="ru" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<title>Notes — Персональный тренажер и словарь английского языка</title>
<meta name="description" content="Защищённый персональный тренажёр и словарь английского языка с интервальными повторениями SRS SM-2, контекстным поиском и озвучкой">
<link rel="stylesheet" href="/static/css/style.css?v=3.0">
<link rel="stylesheet" href="/static/css/style.css?v=3.1">
<!-- PWA meta and icons -->
<link rel="manifest" href="/manifest.json">
@@ -82,6 +82,7 @@
<span>📤 Экспорт</span>
</button>
<button id="theme-toggle" class="icon-btn" title="Переключить тему">🌓</button>
<button id="mobile-menu-toggle-btn" class="icon-btn mobile-only-btn" title="Меню профиля и настроек">⚙️</button>
<div class="user-profile">
<span id="user-display-name" class="user-badge">user</span>
<button id="change-pwd-open-btn" class="btn btn-sm btn-outline" title="Сменить пароль">🔑 Пароль</button>
@@ -599,6 +600,57 @@
<button id="batch-cancel-btn" class="btn btn-sm btn-ghost">✕ Отмена</button>
</div>
</div>
<!-- Mobile Bottom Navigation Tab Bar (iOS style) -->
<nav class="mobile-tab-bar" id="mobile-tab-bar">
<button class="tab-item active" data-view="dictionary-view" id="tab-nav-dict">
<span class="tab-icon">📖</span>
<span class="tab-label">Словарь</span>
</button>
<button class="tab-item" data-view="srs-view" id="tab-nav-srs">
<span class="tab-icon">🎓</span>
<span class="tab-label">Тренажёр</span>
<span id="tab-srs-badge" class="tab-badge hidden">0</span>
</button>
<button class="tab-item" data-view="reader-view" id="tab-nav-reader">
<span class="tab-icon">📚</span>
<span class="tab-label">Читалка</span>
</button>
<button class="tab-item" id="tab-nav-stats">
<span class="tab-icon">📊</span>
<span class="tab-label">Прогресс</span>
</button>
<button class="tab-item" id="tab-nav-menu">
<span class="tab-icon">⚙️</span>
<span class="tab-label">Меню</span>
</button>
</nav>
</div>
<!-- Mobile Menu / Profile Sheet Modal -->
<div id="mobile-menu-modal" class="modal-backdrop hidden">
<div class="modal-window mobile-sheet-window">
<div class="modal-header">
<h3>⚙️ Профиль & Меню</h3>
<button class="modal-close-btn" id="mobile-menu-close-btn">✕</button>
</div>
<div class="modal-body mobile-menu-body">
<div class="mobile-user-card">
<span class="mobile-user-avatar">👤</span>
<div class="mobile-user-info">
<strong id="mobile-user-name">user</strong>
<p class="subtitle">Личный словарь English Lexicon</p>
</div>
</div>
<div class="mobile-menu-actions">
<button id="mobile-stats-btn" class="btn btn-outline btn-block">📊 Статистика & Календарь</button>
<button id="mobile-export-btn" class="btn btn-outline btn-block">📤 Экспорт словаря</button>
<button id="mobile-pwd-btn" class="btn btn-outline btn-block">🔑 Сменить пароль</button>
<button id="mobile-theme-btn" class="btn btn-outline btn-block">🌓 Переключить тему</button>
<button id="mobile-logout-btn" class="btn btn-danger btn-block">Выйти из аккаунта</button>
</div>
</div>
</div>
</div>
<!-- Analytics & Activity Heatmap Modal -->
@@ -902,6 +954,7 @@
<!-- Interactive Click-to-Translate Popup (Mounted at body root to prevent scroll clipping) -->
<div id="reader-word-popup" class="reader-word-popup hidden">
<div class="sheet-drag-handle mobile-only"></div>
<div class="popup-header">
<div class="popup-term-wrap">
<strong id="popup-term" class="popup-term">word</strong>
@@ -928,7 +981,7 @@
<!-- Audio Element for native streaming -->
<audio id="global-audio-player" preload="none"></audio>
<script src="/static/js/app.js?v=3.0"></script>
<script src="/static/js/app.js?v=3.1"></script>
</body>
</html>