{# Card Components Macros: stat_card, info_card, simple_card, loading_card, metric_row #} {% macro stat_card(label, value, icon="", color="blue", change="", change_type="") %} {# Stats card with large number, label, optional icon and change indicator #}
{{ value }}
{{ label }}
{% if change %}
{% if change_type == 'up' %}+{% elif change_type == 'down' %}-{% endif %}{{ change }}
{% endif %}
{% if icon %}
{% endif %}
{% endmacro %} {% macro info_card(title, icon="", actions="") %} {# Card with header and content area #}
{% if icon %} {% endif %}

{{ title }}

{% if actions %}
{{ actions }}
{% endif %}
{{ caller() }}
{% endmacro %} {% macro simple_card(padding="p-4") %} {# Plain card wrapper #}
{{ caller() }}
{% endmacro %} {% macro loading_card(message="Loading...") %} {# Card with loading spinner #}
{{ message }}
{% endmacro %} {% macro metric_row(items) %} {# Row of stat cards for metrics #}
{% for item in items %} {{ stat_card( label=item.label, value=item.value, icon=item.icon | default(""), color=item.color | default("blue"), change=item.change | default(""), change_type=item.change_type | default("") ) }} {% endfor %}
{% endmacro %}