{% load static %} {% comment %}data-theme="dark" ACTIVATES scitex-ui's dark token set — it is not decoration. theme.css defines --text-primary / --bg-page / --border-default / … twice, once under [data-theme="light"] and once under [data-theme="dark"], and DEFAULTS TO LIGHT when the attribute is absent. Without this every base component on the page silently resolves light values onto a dark surface, which is exactly how scitex-ui 0.12.0's context menu rendered near-invisible on 2026-07-28. Dark is also the standing default (the operator's eyes are sensitive), so this is deliberate, not a preference to be "cleaned up". {% endcomment %} Chat — SciTeX Cards v{{ scitex_cards_version }} {% comment %} No favicon link here: scitex-ui's shell supplies the shared SciTeX brand mark as its default (>=0.7.1). One source, not two copies that drift. Do NOT re-add a local — if the mark is wrong, fix it in scitex-ui, which owns the asset. NB: this MUST be a {% templatetag openblock %} comment {% templatetag closeblock %} block, not Django's single-hash syntax — that one is single-line only, and a multi-line hash block leaks its body into the rendered page. {% endcomment %} {% comment %} Operator↔agent DM view — minimal slice (card fleet-agent-direct-message-board-pane-20260707). Mobile-first: the agent list is a slide-in drawer on narrow screens, a fixed left column on wide ones. All behavior lives in static/scitex_cards/chat/ — chat_diff.js (pure render planning) then chat.js (DOM + network); load order matters, chat.js reads window.ChatDiff. Line-limit discipline: template <1024 lines, js <512; this file is layout + CSS. {% endcomment %} {% comment %} Right-click menu comes from scitex-ui — we do NOT ship our own. The operator's standing rule: anything shareable lives in base and is consumed from there (「共通化できるものは scitex-ui に入れて消費してください」). We were about to write a private one; scitex-ui pointed out base has shipped it since 0.11.0. Two files, in this order, and NO shell adoption is required (scitex-ui confirmed from the source): theme.css is the TOKEN layer only — context-menu.css consumes --bg-secondary / --border-default / --text-primary / --text-secondary. It has hardcoded dark fallbacks, so it renders without theme.css, but then it is permanently dark regardless of the viewer. Linking the tokens is what makes it follow the theme. MINIMUM scitex-ui 0.11.1, not 0.11.0: 0.11.1 adds `font-family: inherit` on __item. Items are

Direct messages

SciTeX Cards v{{ scitex_cards_version }} {% include "scitex_cards/_page_switcher.html" with active="chat" %}
{% comment %} Markup is scitex-ui's contract, verbatim — do not "tidy" it: * items MUST be
{% comment %} Reaction bar and forward picker — both second-level panels the context menu opens in place of itself, so only one thing is ever on screen. The emoji are NOT written here. chat_actions.js owns the palette and chat_menu.js builds the buttons from it, which is what keeps the set the picker offers identical to the set the Python side documents — a hardcoded row here would be a second copy, free to drift. Empty on purpose; both are populated at runtime (the forward list from the agent list chat.js already polls, so the picker cannot disagree with the drawer about who exists). {% endcomment %}
Select an agent to open the thread.
No agent selected.
{% comment %} Declarative mount: emoji_picker.js finds this by the attribute and builds its own toggle + panel here, so the composer's behaviour file (chat.js) gains not one line for this feature. The value is the id of the field the emoji land in. {% endcomment %}
{% comment %} Load order matters and is one-directional: each file reads the ones before it off `window` and never the reverse. chat_diff.js pure render planning (no deps) chat_actions.js pure message-action decisions (no deps) chat_menu.js the message context menu + reaction chips (reads ChatActions) chat_attach.js attachment uploads (no deps) chat.js the page orchestrator (mounts the two modules above) `defer` scripts execute in document order, so this list IS the order. {% endcomment %}