tarot card icons + ranks; sig fallback for pre-sync Characters; DECKS label sizing — TDD

- migration 0011: The Nomad (0) → fa-hat-cowboy; The Schizo (1) → fa-hat-wizard
- corner_rank: non-MAJOR pip card 1 → 'A' (Ace); court unchanged (M/J/Q/K); TDD
- 17 unit model tests for corner_rank + suit_icon
- _role_select_context: my_tray_sig falls back to seat.significator when
  confirmed_char.significator is None (Characters created before natus_save sync)
- _card-deck.scss: DECKS label bigger (1rem, 0.32em letter-spacing) to fill
  stack height; sea-stack-name: opacity 0.6, scaleY(1.5), margin-top -0.4rem
  partially under face; sea-stack-face z-index:1

Code architected by Disco DeDisco <discodedisco@outlook.com>
Git commit message Co-Authored-By:
Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-04-29 00:20:55 -04:00
parent 6d75b9541f
commit 2af59b3a7f
6 changed files with 147 additions and 7 deletions

View File

@@ -285,7 +285,9 @@ class TarotCard(models.Model):
if self.arcana == self.MAJOR:
return self._to_roman(self.number)
court = {11: 'M', 12: 'J', 13: 'Q', 14: 'K'}
return court.get(self.number, str(self.number))
if self.number in court:
return court[self.number]
return 'A' if self.number == 1 else str(self.number)
def emanation_for(self, polarity):
"""Return the upright title for a given polarity ('levity' or 'gravity').