{% load i18n %} {% comment %}Board pane — extracted VERBATIM from board_v3.html so the standalone board and the unified (#dm/#board) page render ONE source. Wrapped in .board-app-pane: board CSS globals are scoped to this wrapper (see 01-filterbar.css), so the DM side of the unified page is untouched.{% endcomment %}
{% if board_header|default_if_none:True %} {% comment %} Standalone-board chrome: the SAME shared title row the DM page renders, plus the SAME tab row beneath it (operator 2026-10-20: title line holds label + version + project selector ONLY; the switcher lives in the tab row, never in the shared line). Both rows sit ABOVE the filterbar as their own stacked rows — never inside .fb-left, whose flex row would lay them out side by side instead of stacked. {% endcomment %} {% include "scitex_cards/_page_header.html" with page_title="SciTeX Cards" %} {% include "scitex_cards/_page_tabs.html" with active="board" %} {% endif %} {% comment %} Filterbar reorg (operator TG, lead a2a `b48f7c2c438b464698183d2e95d3bb04`, 2026-06-12). Three explicit groups end the flex-wrap chaos: .fb-left — identity (title + version + LIVE chip) .fb-center — search (input + autocomplete suggest) .fb-right — operations (Layout | Sort | Filters | Recent count | Group | Add Task | blocking me | overflow controls) Active-filter chips + qualifier hint pills move to a second row `
` shown only when populated. {% endcomment %}
{% comment %} Identity band — kept as a spacer so the search input stays centred. The LIVE chip moved to Details > Board (operator 2026-10-22: View, Span, Layout AND Live all belong in the Details column, so the freed header width goes to the search box). renderLiveRow() paints the live state there; see the details-board section. {% endcomment %}
{# end .fb-center / SEARCH group #}
{% comment %} board UI overhaul part 2 (2026-06-14, operator complaint via lead a2a `d1af161e`) — explicit subgroups in the right band so the controls stop visually colliding: VIEW = Layout + Sort + Group STATUS = recent-count + Reload + hide-project + blocking-me + hidden PRIMARY = + Add Task (separated by a divider, brand-accent) The legacy `.fb-right` keeps its wrap-friendly flex; the new `.stx-cards-filterbar__group--*` wrappers add the breathing room + dividers. NB: this MUST be a `comment` block, not `{# #}` — Django's `{# #}` syntax is single-line only; newlines between `{#` and `#}` are NOT stripped, so the comment leaks as literal text onto the operator's screen. The leak shipped briefly in PR #173 (the header-declutter PR); fix-forward in this PR per lead a2a `f7a5d37930b9479ca7e53a7e316c132d`, 2026-06-14, after the operator reported it live. {% endcomment %} {% comment %} VIEW group RETIRED 2026-10-22 (operator: View, Span, Layout, Live all belong in the Details column). The Layout segmented control moved to Details > Board; its buttons (ids, classes, onclick) are unchanged so onLayoutChange() + the contract tests need no JS-side migration — the test now reads the Details section instead of this band. This group wrapper stays as an (empty) mount point so the contract selector still resolves; the CSS keeps its rules for the Details-hosted control. {% endcomment %}
{# end VIEW group #}
{# end PRIMARY action zone #}
{# end .fb-right #}
{# end .filterbar #} {% comment %} Filterbar second row — active filter chips + qualifier-hint pills. Hidden via CSS when both children are empty so the main filterbar stays at ~50 px on the default state. Populated by renderActiveFilterChips() / renderQualifierHints() in extra_js. {% endcomment %}
{% comment %} STATUS COLOR LEGEND (operator: "add color legends") — decodes the per-status colors used by cards / timeline / mermaid. SINGLE-SOURCED: iterates the SAME `status_colors` template context (views.board_v3_page → handlers.graph._status_colors → _diagram.STATUS_STYLE) in STATUS_STYLE order, so adding/removing a status updates the legend automatically — no hardcoded status list or hex colors here. Each chip references the first-paint `--status-fill-` / `--status-stroke-` / `--status-border-` CSS vars (rendered by #status-color-vars) so the swatch matches the cards exactly, including `deferred`'s dashed border. `data-legend-status` per chip keeps the test robust. Mobile declutter (card cards-mobile-declutter-20261007): the legend lives inside a
disclosure, closed by default, so the phone board opens on cards instead of a two-line chip wrap. Same chips, same single-sourcing — only the disclosure wrapper is new. {% endcomment %}
{% translate "Legend" %}
{% for s, c in status_colors.items %} {{ s }} {% endfor %}
{% comment %} BLOCKING-YOU 360 px aside REMOVED (P12, lead a2a 2026-06-12). The operator-decision queue was folded into the Column layout's synthetic `user` lane — which itself went away with the Column layout on 2026-07-13. The "🚧 blocking me" filterbar toggle (#t-block) is the surviving entry point: it's a FILTER, so it narrows whichever layout is active (Timeline / Wall / Graph). {% endcomment %}
{% comment %} DM/chat LEFT pane REMOVED (operator CCT4612 separation, 2026-10-19): the Board shows boards only, DM lives on its own route/view (/dm, /chat, and root). The aside went with its pane assets and node pins — the tab switcher above is the crossing now. Deliberately a removal note rather than silent deletion, so a future reader knows the pane was withdrawn on instruction, not lost. {% endcomment %}
{% comment %} Open-first skeleton: the server paints placeholder cards + a spinner BEFORE /graph resolves, so first paint carries feedback even when the store rebuild takes seconds. loadGraph()'s render() and the boardStates painters replace this wholesale and flip aria-busy to false the moment data — or a named empty/error state — lands. Pure markup + 18-skeleton.css: no JS needed to show it. {% endcomment %}

{% translate "Loading board…" %}

{# end .board-area #} {% comment %} RIGHT-HAND DETAILS COLUMN (operator TG 2026-07-13: "右の方に details カラムを作ってそこにもっと使いやすい形でのフィルタを用意すればよい" + "Legend と対応させて Details の方に Stats を用意して、可視化してください。 タイムスケールも分けられるようにして … (d/w/m)"). Convention borrowed from scitex-writer's Details pane (aside + accordion sections + localStorage open-set) so the two products look like one system rather than two bespoke boards. The three sections are exactly the things that used to shout from the header: STATS (incl. the "N new/24h" counter), FILTERS (the six dropdowns from the old popover, plus show-done + blocking-me as ordinary filter rows) and HIDDEN cards. {% endcomment %}
{% if cards_internal_chrome_enabled %}
{# Dev strings hide behind info (operator mandate CCT 3877): the ADR refs #} {# and store path stay in the DOM (pinned) but render only on expand. #}
ⓘ v3 LIVE · real data · operator schema (ADR-0007) · GUI→code (ADR-0006) …
{% endif %}

Route — how this card was handled (newest last)

…
Posts to comments[]; visible to the owning agent.

{% translate "+ Add Task" %}