89 lines
4.0 KiB
HTML
89 lines
4.0 KiB
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>{% block title %}DLD Monitor{% endblock %}</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<style>
|
|
body { background: #f4f5f9; }
|
|
.navbar-brand { letter-spacing: .3px; }
|
|
.nav-link.active { font-weight: 600; color: #0d6efd !important; }
|
|
.badge-sale { background: #198754; }
|
|
.badge-rent { background: #0d6efd; }
|
|
.card { border: 1px solid #e9ecef; }
|
|
.listing-card { border-left: 4px solid #dee2e6; }
|
|
.listing-card.removed { border-left-color: #dc3545; opacity: 0.65; }
|
|
.listing-card.active { border-left-color: #198754; }
|
|
.src-pf { color: #d63384; font-weight: 600; }
|
|
.src-bayut { color: #0d6efd; font-weight: 600; }
|
|
.price-up { color: #dc3545; }
|
|
.price-down { color: #198754; }
|
|
pre.permit { display: inline; background: #eee; padding: 2px 6px; border-radius: 4px; }
|
|
.stat-chip { background:#fff; border:1px solid #e9ecef; border-radius:.5rem; padding:.4rem .8rem; }
|
|
.stat-chip .n { font-size:1.25rem; font-weight:700; line-height:1; }
|
|
footer { color:#9aa0a6; font-size:.8rem; }
|
|
/* Mobile tweaks */
|
|
@media (max-width: 575.98px) {
|
|
body { background: #fff; }
|
|
.container { padding-left: .75rem; padding-right: .75rem; }
|
|
h3 { font-size: 1.35rem; }
|
|
.card-body { padding: .75rem; }
|
|
.fs-4 { font-size: 1.1rem !important; }
|
|
}
|
|
</style>
|
|
{% block head %}{% endblock %}
|
|
</head>
|
|
<body>
|
|
<nav class="navbar navbar-expand-lg bg-white border-bottom mb-4">
|
|
<div class="container">
|
|
<a class="navbar-brand fw-bold" href="{{ url_path('/') }}">🏠 DLD Monitor</a>
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
|
|
data-bs-target="#mainnav" aria-controls="mainnav"
|
|
aria-expanded="false" aria-label="Меню">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="mainnav">
|
|
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
|
<li class="nav-item">
|
|
<a href="{{ url_path('/') }}" class="nav-link {{ 'active' if request.url.path == '/' or request.url.path.startswith('/projects') else '' }}">Проекты</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="{{ url_path('/employees') }}" class="nav-link {{ 'active' if request.url.path.startswith('/employees') else '' }}">Сотрудники</a>
|
|
</li>
|
|
</ul>
|
|
<div class="d-flex flex-column flex-lg-row align-items-stretch align-items-lg-center gap-2">
|
|
<a href="{{ url_path('/projects/new') }}" class="btn btn-sm btn-primary">+ Проект</a>
|
|
<span class="vr d-none d-lg-block"></span>
|
|
{% if request.state.is_admin %}
|
|
{% if request.state.admin_configured %}
|
|
<span class="badge bg-success align-self-start align-self-lg-center">🔓 админ</span>
|
|
<form method="post" action="{{ url_path('/admin/logout') }}">
|
|
<input type="hidden" name="next" value="{{ request.url.path }}">
|
|
<button class="btn btn-sm btn-outline-secondary w-100">Выйти</button>
|
|
</form>
|
|
{% else %}
|
|
<span class="badge bg-warning text-dark align-self-start align-self-lg-center" title="ADMIN_PIN не задан в .env — права не ограничены">⚠ без PIN</span>
|
|
{% endif %}
|
|
{% else %}
|
|
<a href="{{ url_path('/admin/login?next=' ~ request.url.path) }}" class="btn btn-sm btn-outline-dark">🔒 Админ</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="container">
|
|
{% if flash %}
|
|
<div class="alert alert-info">{{ flash }}</div>
|
|
{% endif %}
|
|
{% block content %}{% endblock %}
|
|
</div>
|
|
|
|
<footer class="container text-center py-4">DLD Monitor · HOME LIGA REAL ESTATE</footer>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
{% block scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|