{# Finite State Console Shell — layout chrome + dense panel/table/KPI classes ported from the Operations Console mockup. Every color flows through design tokens in tokens.css (included via _design_system.html → _tokens_inline.html), so dark/light switching is automatic. Usage (include pattern — console is NOT a full-document template like _briefing_shell.html; recipes own their //): {% if render_mode != 'fragment' %} {% include "_design_system.html" %} {% include "_console_shell.html" %} {% include "_echarts_ready.html" %} (or _chart_ready.html) {% endif %} ...content... {% if render_mode != 'fragment' %} {% endif %} Include order matters: _design_system.html supplies tokens + the shared class library; this shell adds the console-specific layout on top. Then _console_macros.html (imported, not included) for chrome macros (topbar, status_bar, panel_head, kpi_cell). See triage_prioritization.html for a full example. Templates can include this even if they aren't using every section — the classes are independent. Inter + JetBrains Mono fonts are loaded here so templates don't need to add a separate Google Fonts link tag. Fragment-mode contract (T0b § item 3): - Console recipes own the {% if render_mode != 'fragment' %} wrapper around their full document chrome (shown above). This is the CRA pattern (cra_compliance.html). The wrapper strips DOCTYPE// in fragment mode so the fragment_extractor can scope styles + the compound assembler can supply chrome at bundle level. - Chart container IDs use {{ fragment_scope_class }} as a prefix:
fragment_scope_class is set by HTMLRenderer._prepare_template_data for EVERY render mode (T0b), so the same ID scheme works in standalone HTML, PDF, and fragment-mode renders. - Chart init code does direct getElementById: document.getElementById('{{ fragment_scope_class }}-bandDistribution') The namespaced ID is globally unique within a compound document, so no wrapper-scoped queries are needed. - No global JS state; chart init wrapped in IIFEs or section-scoped functions so two console recipes can coexist in one compound bundle. #}