{# The Inbox โ€” the one genuinely new screen (043 C5, ยง1.3). Derived from docs/design/040/web/inbox-items.html, inbox-empty.html and inbox-partial.html. ONE template, three states: which one renders is decided by the composed body (webview/pages_new.py::_inbox_context over core.surfaces.inbox), never by a second copy of the rule. An item is a durable record, for this tenant, blocked on an owner decision, that Rob cannot resolve alone. So: * `items` the decisions. The badge counts these. * `not_blocking` listed, never counted โ€” a late invoice closes itself. * an `unreadable` item is an ENTRY with its own dashed rule. A source that refused is never a silent omission and never a zero, which is why the empty state below is guarded on `inbox_uncertain` as well as on emptiness: "nothing needs you" is only sayable when every source answered. Every word comes from webview/copy/en.py. Every value is a context variable. #} {% extends "shell.html" %} {% block body %}

{{ t('inbox.title') }}

{{ t('inbox.snapshot') }} {{ t('inbox.refresh') }}

{{ pill_words }} {%- if items %}

{{ t('inbox.sub') }}

{%- endif %}
{%- if partial_body %} {%- endif %} {%- if items %}
{%- for item in items %}

{{ item.title }}

{%- if item.unreadable %}

{{ t('inbox.unreadable.body') }}

{%- elif item.body %}

{{ item.body }}

{%- endif %} {%- if item.meta %} {%- endif %} {%- if item.rendered_actions and not read_only %}
{%- for action in item.rendered_actions %} {%- if action.verb %} {%- endif %} {%- endfor %}
{%- endif %}
{%- endfor %}
{%- else %}
{%- if inbox_uncertain %}

{{ t('inbox.unreadable.body') }}

{%- else %}

{{ t('inbox.empty.title') }}

{{ t('inbox.empty.body') }}

{{ t('inbox.empty.checked') }}

{%- endif %}
{%- endif %} {%- if not_blocking %}

{{ t('inbox.not_blocking.title') }}

{{ t('inbox.not_blocking.aside') }}
{%- for item in not_blocking %}

{{ item.title }}

{%- if item.body %}

{{ item.body }}

{%- endif %}
{%- endfor %}
{%- endif %} {%- if read_only and items %} {# Once for the page, not once per card โ€” the same shape the composer uses. A line under every button is the per-control restatement the frame's banner replaced. #}

{{ t('inbox.read_only.decide') }}

{%- endif %}

{{ sources_note }} {{ t('inbox.sources.cites')|safe }}

{%- if not read_only %} {# The buttons above carry only data; this is what makes them decide. No inline script on any 043 template, so the one sentence the script may need that the server never rendered rides on a data attribute. #} {%- endif %} {% endblock %}