{# Тему ставим ДО отрисовки: иначе при выбранной ночной страница успевает мигнуть белым — на секунду, но в глаза бьёт каждый раз. #} {% include "_tokens.html" %} {% block head %}{% endblock %}
puntavia. {# Разделов в полосе нет: сводка — это главная (марка puntavia. ведёт на неё), а сотрудники, машины и доступ живут под настройками — решение владельца 15.08: «зачем кнопка Сводка, если сводка и есть главный экран». Остались адрес-крошка и инструменты. #} {# Адрес текущего места — крошкой сразу за разделами: страница говорит, где ты, в той же строке, а не второй пилюлей (см. .crumb). #} {% block crumb %}{% endblock %}
{% if me and plan[0] == 'trial' %} {# демо — тихой пилюлей, а не полосой на всю ширину: состояние обычное #} {{ tr('демо') }} {{ plan[1] }} {{ tr('дн') }} {% endif %} {% if me %} {# Свёрнут в лупу: постоянного поля правый кластер не заслужил — им пользуются вспышками. Клик или «/» раскрывают поле, пустой Esc/blur сворачивают обратно; в сложенном виде ширина кластера постоянна. #} {% endif %} {# Копилот — иконкой в правом кластере (владелец, 05.09). Сам чат прежний, переехала только кнопка: плавающая пилюля закрывала содержимое. Блок nav_ask из страниц Jinja молча игнорирует: в скелете его нет. #} {% if me and request.path != '/ask' %} {% endif %} {# Глобуса в кабинете больше нет (владелец, 05.09: «разве нужно на главной менять язык интерфейса — он же в настройках должен меняться»). Язык человека живёт в его учётке (/me), язык компании — в настройках. На витрине глобус остаётся: гостю больше негде. #} {% if me %} {# Кто вошёл: кружок-аватар и имя — видно с первого взгляда, а не после нажатия. Компания и переключение между ними — внутри. #} {% from "_ava.html" import ava with context %}
{{ ava(me.name or me.email, me.avatar) }} {{ me.name or me.email }} {{ org_now.name if org_now else '' }} ▾
{{ me.email }}
{{ tr('учётка и пароль') }}
{% if my_orgs and my_orgs|length > 1 %}
{% for o in my_orgs %}
{% endfor %} {% endif %}
{% endif %} {# Поиск — в ПРАВОМ кластере, а не за крошкой: крошка на каждой странице своя (или её нет), и стоящий за ней поиск прыгал при каждом переходе. Правая половина шапки не двигается никогда. Клавиша «/» ставит курсор сюда — привычка из всех рабочих инструментов. #} {# Лампочки живого обновления в шапке больше нет (владелец, 20.08: «зачем?») — обновление работает молча, liveMark() в JS терпит отсутствие элемента. #} {# Тема — ОДНА кнопка на три состояния: как в системе → день → ночь. Значок — состоянию: полукруг/солнце/луна, рисованы линией, как всё. #} {% if can('manage_settings') %} {% endif %} {% if me %} {# выход — иконкой, как в Голове; в меню учётки он тоже остаётся #}
{% endif %}
{# Состояние компании — полоской над содержимым, а не карточкой на сводке: человек, у которого кончается демо, должен видеть это на любой странице, в том числе на той, где ему как раз показывают ценность. #} {# Почта не подтверждена — той же тихой полоской, что и состояние компании. Показывается только при настроенном SMTP: без него письмо некому отправить, и баннер было бы нечем погасить. #} {% if me and mail_ready and not me.email_verified %}
{{ tr('Подтвердите почту: письмо ушло на {email}.').format(email=me.email) }}
{% endif %} {# Полоса — только когда случилось ПЛОХОЕ (демо кончилось, приём остановлен): живому демо хватает тихой пилюли в шапке (владелец, 20.08: «зачем синяя полоса» — обычное состояние не должно кричать на каждой странице). #} {% if plan[0] in ('expired', 'blocked') %} {# Не тонкая полоса, а стена во всю ширину: тонкую не видно, стоит прокрутить страницу на экран вниз, и человек решает, что продукт сломался после обновления (живой случай, 28.08). Данные под ней остаются видимыми намеренно — увидеть свою неделю и есть причина оплатить; выключено ровно то, что стоит денег. #}
{% if plan[0] == 'expired' %} {{ tr('Демо кончилось — доступ приостановлен') }}

{{ tr('Разбор ИИ и скриншоты выключены, отчёты за прошлые дни остаются на месте.') }} {{ tr('Замеры с машин ещё принимаются {n} дн. — если оплатить за это время, история не разорвётся.').format(n=plan[1]) }}

{% else %} {{ tr('Доступ остановлен — нужна оплата') }}

{{ tr('Замеры больше не принимаются: машины копят их у себя и отправят всё разом, как только компания снова заработает.') }}

{% endif %}
{% if plan_info %}
{% if pay_sent %} {{ tr('Счёт запрошен — пришлём его на почту.') }} {% else %} €{{ plan_info.eur }}/{{ tr('мес') }} {{ tr('до {n} человек').format(n=plan_info.seats) }} {% if pay_card and can('billing') %} {# Оплата картой — сразу формой на Stripe, без промежуточной модалки: лишний экран между «хочу заплатить» и оплатой не объясняет ничего. #}
{% else %} {% endif %} {% endif %}
{% endif %}
{% if plan_info and not pay_sent and not (pay_card and can('billing')) %}
{{ tr('Оплата') }}

{{ tr('Тариф «{name}»: €{eur} в месяц, до {n} человек.').format(name=plan_info.id|upper, eur=plan_info.eur, n=plan_info.seats) }}

{{ tr('Карты пока нет — платим по счёту. Нажмите кнопку: мы вышлем счёт на почту компании и включим всё обратно, как только оплата дойдёт.') }}

{% endif %} {% endif %}
{% block content %}{% endblock %}
{# Подвал с припиской про данные снят (владелец, 18.08): обещания о приватности живут на витрине и в настройках, кабинету они мешали. #} {% if me and request.path != '/ask' %} {# Копилот-виджет: кнопка и панель живут вне живой зоны. Тема разговора хранится на сервере и помнится в браузере (tl.cop.chat) — продолжается с любой страницы. На /ask не показывается: там он и так целиком. #} {% endif %} {% block scripts %}{% endblock %}