{% from "_macros.html" import cover %} {# Portfolio card list fragment (ARG-154). Rendered inside portfolio.html for both the "새 신호 있음" (active) and "조용함" (quiet) sections. Shares the cover() macro with the feed so the favicon-chip / og-image / glyph branch stays identical (a bare favicon is never stretched across the cover). #}
{% for asset in items %} {% set cat = (asset.category.value if asset.category else 'none')|lower %}
{# Card taps open the in-app reader (ARG-138) keyed on the tech_item id; "원문 보기" on the detail page handles the external source_url redirect. #} {{ cover(asset.image_url, asset.category, "/item/" ~ asset.tech_id, asset.source_url) }}

{% if asset.category %} {{ asset.category.value }} {% endif %} {{ asset.source_url | domain }} {% if asset.signal_count > 0 %}🔭 {{ asset.signal_count }}{% endif %} {% if asset.lineage_count > 0 %}🧬 {{ asset.lineage_count }}{% endif %}

{{ asset.title }}

Keep {{ asset.kept_since.strftime('%Y-%m-%d') }} {% if asset.last_signal_at %} · 마지막 신호 {{ asset.last_signal_at.strftime('%Y-%m-%d') }} {% endif %}

{# Untrack archives the asset; the route returns an empty body so this outerHTML swap removes the card from the Keep-only portfolio. #}
{% endfor %}