{% extends "brickwork/components/_card.html" %} {% load i18n %} {% comment %} Chart card (CHT-001/002/008/009/010): the card chrome around a consumer's own charting engine. EXTENDS _card.html rather than reinventing elevation, radius, density padding or href handling: an extending template that fills only body renders exactly the base card's chrome, and an unfilled region emits nothing (verified against _card.html's own contract). Consumed via {% include %}, matching _card.html and _ranked_list.html's own structural convention, never a tag: geometry here is a fixed box, not a Python computation, so there is nothing a tag would validate that an include cannot already carry. Named blocks (semver-public, BR-BW-TPL-001), in document order: title, actions: from _card.html, NOT redeclared here (ADR-077 SS4 and icvoss/django-brickwork#309): a component prefix on a block name carries no information, since the declaring template is already the scope. "chart_title" and "chart_toolbar" were the spec's original names (CHT-002) and are superseded by #309, which amends the spec to match the 3.4.0 concise-name convention _card.html and _empty_state.html already use. Fill title/actions exactly as any other _card.html caller would; chart_toolbar's role is _card.html's own actions block (CHT-022: the toolbar, e.g. a period selector, is consumer-authored markup, often an htmx swap target). chart_legend: new, declared HERE (the base card does not declare it), so it keeps the chart_ prefix. Empty by default. brickwork styles the legend chrome (see legend_position below); the consumer supplies the swatch+label markup, since only the engine or adapter knows the series list (CHT-003, CHT-014's swatch+text pairing). The filler owns the wrapper element (matching _card.html's own header/title/actions/ body/footer convention), so an unfilled block leaves no empty legend chrome behind: a caller wraps its own swatch+label markup in