initial site

This commit is contained in:
merrow committed 2026-10-11 22:24:54 +05:00
commit da5b259d06
167 files changed
+34157

No files matched your search

+118
View File
@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>НЕОН CRM — панель управления</title>
<meta name="description" content="CRM кальянного лаунжа НЕОН: стоп-лист табаков и меню, управление заказами.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='14' fill='%230A0A0F'/%3E%3Ctext x='32' y='45' font-family='Arial Black, Arial' font-size='34' font-weight='900' text-anchor='middle' fill='%2300F0FF'%3EН%3C/text%3E%3C/svg%3E">
<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=Manrope:wght@400;500;600;700;800&family=Unbounded:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<!-- ЭКРАН ВХОДА -->
<section class="login" id="loginScreen">
<div class="glow glow-cyan"></div>
<div class="glow glow-purple"></div>
<div class="login-card">
<div class="login-logo">
<span class="logo-neon">Н</span>
<div>
<h1>НЕОН <em>CRM</em></h1>
<p>Панель управления лаунджем · Нягань</p>
</div>
</div>
<form id="loginForm" autocomplete="off">
<label class="field">
<span>Логин</span>
<input type="text" id="loginUser" placeholder="admin" value="" autocomplete="username">
</label>
<label class="field">
<span>Пароль</span>
<input type="password" id="loginPass" placeholder="••••••••" value="" autocomplete="current-password">
</label>
<button class="btn btn-neon btn-block" type="submit">Войти</button>
</form>
<p class="login-error hidden" id="loginError" role="alert"></p>
</div>
<p class="login-foot">neon-bar86.ru · внутренняя система</p>
</section>
<!-- ПРИЛОЖЕНИЕ -->
<div class="app hidden" id="app">
<aside class="sidebar">
<div class="side-top">
<div class="brand">
<span class="logo-neon">Н</span>
<div class="brand-txt">
<strong>НЕОН <em>CRM</em></strong>
<small id="brandRole">—</small>
</div>
</div>
<!-- карточка аккаунта перед списком вкладок: имя, роль и выход всегда сверху -->
<div class="user-card">
<span class="avatar" id="userAvatar">М</span>
<div>
<strong id="userName">—</strong>
<small id="userRole">—</small>
</div>
<button class="icon-btn" id="passwordBtn" title="Сменить пароль" type="button">🔑</button>
<button class="icon-btn" id="logoutBtn" title="Выйти" type="button">✕</button>
</div>
<nav class="nav" id="nav"></nav>
</div>
<div class="side-bottom">
<button class="btn btn-ghost btn-sm btn-block offline-retry hidden" id="offlineRetry" type="button">⟳ Переподключиться</button>
</div>
</aside>
<main class="main">
<header class="topbar">
<div>
<h2 id="pageTitle">—</h2>
<p id="pageSub">—</p>
</div>
<div class="topbar-right">
<span class="shift" id="shift">—</span>
<span class="topbar-actions" id="shiftActions"></span>
<button class="icon-btn bell" id="bellBtn" title="Новые заказы" type="button">
🔔<span class="bell-count hidden" id="bellCount">0</span>
</button>
<span class="clock" id="clock">--:--</span>
</div>
</header>
<div class="view" id="viewRoot"></div>
</main>
<!-- автопрокрутка страницы: появляется, когда список не влезает в экран -->
<div class="scroll-nav hidden" id="scrollNav">
<button class="scroll-btn" id="scrollUp" title="Прокрутить вверх" type="button">▲</button>
<button class="scroll-btn" id="scrollDown" title="Прокрутить вниз" type="button">▼</button>
</div>
</div>
<div class="toast-wrap" id="toasts" role="status" aria-live="polite"></div>
<!-- модальные окна подтверждения и ввода: живут вне viewRoot, чтобы
перерисовка (опрос заказов каждые 10 с) не закрывала открытое окно -->
<div class="modal-overlay hidden" id="modalOverlay">
<div class="modal" id="modalBox" role="dialog" aria-modal="true"></div>
</div>
<!-- скрытый выбор фото позиции: живёт вне viewRoot, чтобы перерисовка
списка (опрос заказов каждые 10 с) не отваливала элемент во время
открытого диалога выбора файла -->
<input type="file" id="photoInput" accept="image/avif,image/jpeg,image/png,image/webp,image/gif" style="display:none">
<script src="js/app.js"></script>
</body>
</html>