My Sign

{% if request.user.significator %} {% with card=request.user.significator %} {# Mirrors the my_sign.html `.sig-stage-card` layout — corner #} {# top-left, name + polarity qualifier in the face, mirror #} {# corner bottom-right (pre-rotated). Sized to fill the #} {# applet's vertical aperture via container queries in #} {# `_billboard.scss`. `significator_reversed` is the POLARITY #} {# axis (True ↔ levity), so the saved sig is always upright #} {# in its polarity — no `.stage-card--reversed` rotation. #}
{% if card.deck_variant.has_card_images %} {% comment %} Sprint A.6 — image-mode render mirrors my_sign.html's .sig-stage-card--image treatment. Shares the SCSS rule (comma-list selector) so the contour stroke + tray-card silhouette black depth shadow + arcana stroke-color come for free. {% endcomment %} {{ card.name }} {% if not card.deck_variant.is_polarized %} {% comment %} Non-polarized image deck: back-img element renders the deck-back PNG that FLIP toggles to. Back-img stays gated (back-img is meaningless for polarized decks or text-mode); the FLIP btn itself moved OUT of this gate in polish-6 so it renders for every card (per user-spec "allow the FLIP btn everywhere"). The JS click handler is a no-op when no back-img sibling exists. {% endcomment %} {% endif %} {% else %}
{{ card.corner_rank }} {% if card.suit_icon %}{% endif %}
{% comment %} `request.user.sig_face` is the rendering payload from `TarotCard.applet_face()` — mirrors `populateCard` in `stage-card.js:135-144`: • Polarity-split (cards 48-49, trumps 19-21): single-line title, qualifier blank. • Major + qualifier: title carries a trailing comma + qualifier renders BELOW. • Non-Major (middle court, Schizo / Nomad w. no qualifier): qualifier renders ABOVE the title. {% endcomment %} {% with face=request.user.sig_face %} {% if face.qualifier_first %}

{{ face.qualifier }}

{{ face.title }}

{% else %}

{{ face.title }}

{{ face.qualifier }}

{% endif %} {% endwith %}

{{ card.get_arcana_display }}

{{ card.corner_rank }} {% if card.suit_icon %}{% endif %}
{% endif %} {% comment %} Polish-6 — FLIP btn rendered UNCONDITIONALLY (was gated on `has_card_images and not is_polarized`). Per user-spec 2026-05-25 PM "just allow the FLIP btn everywhere". JS handler below picks behavior by sibling existence: back-img present → flip-to-back animation; absent → no-op. {% endcomment %}
{# Stat block — same shape as my_sign.html's `.sig-stat-block` #} {# (Emanation face label + keyword list) but no SPIN/FYI btns #} {# since the applet is a read-only preview. Saved sigs persist #} {# only the polarity axis (FLIP), never the orientation axis #} {# (SPIN), so always render the upright/emanation face. #}
{% comment %} DRY stat-face — see `core/_partials/_stat_face.html`. The applet is the only server-render consumer (no SPIN, single emanation face); passes `card` so chip + title + arcana + keywords are filled from `card.*` at render time. {% endcomment %} {% include "core/_partials/_stat_face.html" with face_modifier="upright" label_text="Emanation" card=card %}
{% comment %} Polish-6 — applet FLIP btn handler. Mirrors my_sign.html's `_flipToBackAnimated()` (rotateY 0→90→0 over 500ms, class toggle at halfway, `data-flipping` attr for SCSS to hide the btn during animation). Script is now UNGATED (was conditional on `has_card_images and not is_polarized` like the FLIP btn itself); per user-spec "allow the FLIP btn everywhere", the handler always wires + gracefully no-ops when there's no `.sig-stage-card-back-img` sibling to toggle. {% endcomment %} {% endwith %} {% else %}

No sign chosen yet.

{% endif %}