{% extends "base.html" %} {% import "_empty.html" as empty %} {% import "_icon.html" as ico %} {% block title %}{% if chat %}{{ chat.title }} · Messages{% else %}Messages{% endif %}{% endblock %} {# Messages, as chats. A 280px list of who the conversations are with, in four sections, beside a pane showing one of them with every thread merged into one time line. One template for both states: below 900px the stylesheet shows the list alone at /mesh/messages and the pane alone at a chat's address, so a phone gets two pages and the server renders one. A teammate's words stay a quoted block (.msg-quote): visibly not the app speaking, the same shape the agent hooks show them in. Yours are plain. #} {% block topbar_back %} {% if chat %}{% endif %} {% endblock %} {% block topbar_main %}
{{ chats.message }}
{% endcall %}{{ preview.body }}
Press j then Enter, or pick a chat.
{% endcall %} {% elif chats.muted_unread %} {# The rail badge counts these, so the pane must not call them nothing. #} {% call empty.state('clear', 'Nothing unread, except from muted senders') %}{{ chats.muted_unread }} unread from someone you muted. It stays in their chat, and never interrupts.
{% endcall %} {% else %} {% call empty.state('clear', 'Nothing unread') %}Messages from your team land here, and in Claude Code or Codex if you use them.
{% endcall %} {% endif %} {% else %}{%- if chat.kind == 'ws' %}Everyone in {{ chat.workspace }} · {{ chat.people | length }} {{ 'teammate' if chat.people | length == 1 else 'teammates' }} {%- elif chat.kind == 'dm' %}{{ chat.people[0].name or chat.people[0].user_id }} · {{ handle(chat.people[0]) }} {%- else %}{% for p in chat.people %}{{ p.name or handle(p) }}{% if not loop.last %}, {% endif %}{% endfor %}{% endif -%}
Earlier messages in this thread are not on this device.
{% endif %}{{ m.body }}
{% else %}{{ m.body }}{% endif %} {% if m.refs %}
Not delivered to {{ who(d.user) }}: {{ d.message }}
{% endfor %} {% else %}{% endif %}Whatever you write below is previewed before it is sent.
{% endcall %} {% endfor %}