{% extends "core/base.html" %} {% load static %} {% block title_text %}Game Sign{% endblock title_text %} {% block header_text %}GameSign{% endblock header_text %} {% block content %} {% comment %} Two-phase picker. Landing renders the DRY table hex (1-chair) w. a central SCAN SIGN btn; the stage frame above previews the user's saved sig if any. Clicking SCAN SIGN swaps to picker phase: the hex hides, the card grid appears below the stage. Selection is a two-step click on the thumbnail itself (matching room sig-select): click thumb → OK btn appears; click OK → lock (stat block + FLIP + SAVE SIGN enable + NVM appears for deselect). "Significator" is preserved at the storage layer (User.significator); this billboard surface re-brands to "Sign". {% endcomment %}
{# Stage frame — always reserved at the top of the page; SAVE SIGN + #} {# NVM ride along to its right (sig-select-style). The stage card #} {# itself starts hidden + appears on hover/preview or saved-sig #} {# preview; .sig-stage--frozen is added on OK confirm + cleared by #} {# NVM. data-polarity lives on .my-sign-page so descendant .sig-card #} {# / .sig-stage-card both pick up polarity-themed CSS rules. #}
{# Sprint A.7-polish-3 — stat-block info per [[project-image-based- #} {# deck-face-rendering]]'s locked Q3 spec: underlined Emanation / #} {# Reversal label + title + arcana + keywords. Title color keyed #} {# off `data-arcana-key` on the stage card via parent selector; #} {# `.stat-face-title` + `.stat-face-arcana` empty by default, #} {# populated by stage-card.js `populateStatBlock` from the card #} {# data flow on focus / save. #} {% comment %} DRY stat-face — see `core/_partials/_stat_face.html` for the header (chip + EMANATION/REVERSAL label) + title + arcana + keywords structure. JS-populated surface; no `card` arg, no `keywords_ul_id` arg — stage-card.js's populateStatExtras + populateKeywords fill the empty placeholders at runtime. {% endcomment %} {% include "core/_partials/_stat_face.html" with face_modifier="upright" label_text="Emanation" %} {% include "core/_partials/_stat_face.html" with face_modifier="reversed" label_text="Reversal" %} {% include "apps/gameboard/_partials/_sig_fyi_panel.html" with panel_id="id_my_sign_fyi_panel" %}
{# SAVE SIGN + NVM form lives inside the stage so the layout #} {# matches the room's sig-select: btn sits adjacent to the stat #} {# block. Disabled until a card is OK-confirmed. #}
{% csrf_token %}
{# Landing phase — DRY table hex w. a single chair + central SCAN #} {# SIGN btn. Reuses the room's hex shell (.room-shell > .room-table #} {# > .room-table-scene > .table-hex-border > .table-hex > #} {# .table-center) + room.js's scaleTable() for viewport-fluid sizing. #}
{# Hex + chair only when the user has no saved sig — once a sig is #} {# locked in, the stage-card preview + stat block above are the page #} {# content; the user must DEL their saved sig before drawing a new #} {# one. SCAN SIGN has no meaning while a sig is committed. #} {% if not current_significator %}
{# Single founder chair — solo-coded but extensible to the #} {# 6-chair friend-invite plan in [[project-my-sea-roadmap]]. #}
{% endif %} {# CLEAR SIGN — only when a sig is already saved. POST to clear_sign #} {# wipes User.significator + significator_reversed + reloads back to #} {# the no-sig landing. Sprint 4b-adjacent. #} {% if current_significator %}
{% csrf_token %}
{% endif %}
{# Picker phase — card grid, hidden until SCAN SIGN click. Each #} {# .sig-card gets .sig-card-actions w. OK + NVM buttons (CSS gates #} {# visibility via .sig-focused → OK / .sig-reserved--own → NVM). #} {# Picker JS — phase swap (landing → picker), hover preview, two-step #} {# OK/NVM-on-thumbnail selection cycle, FLIP polarity animation lifted #} {# from game-kit.js's _flipActive, SPIN orientation toggle. data- #} {# polarity moved to the page wrapper so descendant .sig-card + #} {# .sig-stage-card both pick up the polarity-themed CSS rules. #} {# Brief intro banner — Default deck warning. See sprint-4a-follow. #} {% if show_backup_intro_banner %} {% endif %}
{% endblock content %}