Shop

{% for item in shop_items %}
{% if item.badge_text %} {{ item.badge_text }} {% endif %}
{# DRY-reuses the Tokens row's 4-slot tooltip pattern — same #} {# `.tt-title/.tt-description/.tt-shoptalk/.tt-expiry` SCSS #} {# classes so shop + token tooltips render as the same widget.#} {# Price lives inside the h4 (which already has flex space- #} {# between for `.token-count`-style chips) so it pins top- #} {# right opposite the name — `.tt-price` styled --priGn. #}

{{ item.name }} {{ item.price_display }}

{{ item.description }}

{% if item.shoptalk %}

{{ item.shoptalk }}

{% endif %}

{{ item.tooltip_expiry }}

{% comment %} Sibling-of-.tt microtooltip — mirrors Game Kit's Equipped/Unequipped/In-Use mini portal pattern. wallet.js's tooltip handler clones this into #id_mini_tooltip_portal on hover; staying separate keeps the BUY-ITEM btn visually distinct from the main name+price card. {% endcomment %}
{% if item.available %} {% else %} {# Capped item — no BUY btn at all (parity w. Game Kit's #} {# 'In-Use: X' / 'Equipped' microtext pattern, which never #} {# pairs status text w. a disabled action btn). #} Already owned {% endif %}
{% endfor %} {% comment %} Free decks (RWS + Minchiate Fiorentine) — $0 shop items that grant a DeckVariant instead of a token. They reuse the DECK's own Game Kit tooltip prose (name / card-count / description / stock-version line) rather than the ShopItem tooltip, plus a `.tt-price` of "$0". The micro carries a `.tt-free-btn` (claim) or the same `.tt-already-owned` pill once unlocked. wallet-shop.js POSTs the claim to /shop/claim, which adds the deck to `unlocked_decks` (→ Game Kit on /gameboard/). {% endcomment %} {% for deck in free_decks %}
{% include "apps/gameboard/_partials/_deck_stack_icon.html" %}

{{ deck.name }} $0

{{ deck.card_count }}-card Tarot deck{% if deck.is_polarized %} (×2){% endif %}

{% if deck.description %}

{{ deck.description }}

{% endif %}

Stock version (0 substitutions)

{% if deck.owned %} Already owned {% else %} {% endif %}
{% endfor %}