{# Табло смены — главная по направлению, выбранному владельцем 07.09 после критики Impeccable: одна строка на человека во всю ширину, состояние словом, начало, конец, работа, перерывы, ход дня и неделя у правого края. Строки растут с экраном (--bd-h), на 27" четыре человека занимают лист, на телефоне это компактный список из состояния, имени, работы и недели. Это настоящая таблица: подписи колонок связаны с ячейками, состояние — слово, а не только цвет точки; скринридер читает то же, что и глаз. Тихий день — те же строки: «молчит 3 дн. → Что делать», «на паузе → Снять паузу», «не начинал». Прошлый день — без колонки состояния. Парк — строки по группам с заголовком группы. Легенда цветов — только когда в дне больше одной категории (при выключенном ИИ все отрезки одного цвета). #} {% set b = card.data %}

{{ tr(b.title_key).format(**b.title_params) }}

{# часы дня живут в строке «Итого» (одно число в одном месте); здесь — дата и с какого часа идёт день #}

{{ b.date }}{% if b.today_view and b.n_work %} · {{ tr('день идёт с {t}').format(t=b.since) }}{% elif b.n_started %} · {{ tr('с {a} до {b}').format(a=b.since, b=b.until) }}{% elif b.today_view %} · {{ b.time }}{% if b.yesterday_human %} · {{ tr('вчера') }} {{ b.yesterday_human }}{% endif %}{% endif %}

{# листание дней — стрелки и дата; окна оси живут на странице дня #} {% if b.next %} {% else %}{% endif %}
{% if b.rows %} {% if b.today_view %}{% endif %} {% if not b.lean %} {% endif %} {% for grp in (b.groups if b.groups else [{'rows': b.rows}]) %} {% if b.groups %} {# заголовок группы — теми же колонками, без colspan: объединённая ячейка через скрытые на телефоне колонки ломала фиксированную сетку #} {% if not b.lean %} {% endif %} {% endif %} {% for r in grp.rows %} {% if b.today_view %} {% endif %} {% if not b.lean %} {% endif %} {# ритм недели: семь столбиков в общем масштабе и итог — то, что было в плитках машин первой версии; в день без работы строка живая #} {% endfor %} {% endfor %} {% if b.today_view %}{% endif %} {% if not b.lean %} {% else %}{% endif %} {% endif %}
{{ tr('Состояние') }}{{ tr('Сотрудник') }}{{ tr('Начало') }} {{ tr('Конец') }} {{ tr('Работа') }} {{ tr('Перерывы') }} {{ tr('Ход дня') }}{{ tr('Неделя') }}
{% if grp.work_n %}{{ tr('{n} в работе').format(n=grp.work_n) }}{% endif %} {{ grp.name or tr('Без группы') }} · {{ grp.n }}{% if grp.work_n %}{{ tr('{n} в работе').format(n=grp.work_n) }}{% endif %} {{ grp.work_human if grp.work_sec }} {{ grp.week_human if grp.week_sec }}
{{ tr(r.skey).format(**r.sparams) }}{% if r.action %} {{ tr(r.action) }}{% endif %}{{ r.name }}{% if r.machines > 1 %} {{ tr('{n} машины').format(n=r.machines) }}{% elif not r.assigned %} {{ tr('машина') }}{% endif %} {# на телефоне колонки состояния нет — слово состояния и дверь встают под именем, чтобы строка осталась строкой #} {% if b.today_view %}{{ tr(r.skey).format(**r.sparams) }}{% if r.action %} · {{ tr(r.action) }}{% endif %}{% endif %}{{ r.first if r.first_ts }} {{ r.last if r.last_ts }} {{ r.work_human if r.work_sec }} {{ r.break_human if r.break_sec }} {% if r.sec %} {% endif %} {{ r.week_human if r.week_sec }}
{{ tr('Итого') }} · {{ tr('{n} чел.').format(n=b.people) }} {{ b.work_human if b.n_started }} {{ b.break_human if b.break_human != '—' }} {% if b.multi_cat %}{% with legend_note = (tr('штриховка — работа идёт прямо сейчас') if b.is_today) %}{% include "_legend.html" %}{% endwith %}{{ b.week_human if b.week_human != '—' }}
{% endif %} {% if b.unassigned %}

{{ tr('Строки без сотрудника — это машины, которые ещё никому не закреплены.') }} {{ tr('Закрепить →') }}

{% endif %} {% if b.ai_off and can_settings %}

{{ tr('ИИ-разбор выключен — саммари собираются по названиям приложений') }} · {{ tr('включить в настройках →') }}

{% endif %}