From 559bdc2de774b79acae20444dc224c5a93f5d5fd Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Mon, 18 May 2026 23:58:39 -0400 Subject: [PATCH] =?UTF-8?q?My=20Sign=20picker:=20stage=20visible=20on=20lo?= =?UTF-8?q?ad,=20FYI=20panel,=20SPIN/FLIP=20split=20w.=20perspective-flip?= =?UTF-8?q?=20animation=20=E2=80=94=20Sprint=204a-cont?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-driven polish on the Sprint 4a picker so it's usable parity-w-room-sig-select (per the Schizo-screenshot reference). My initial pass collapsed SPIN + FLIP into one button — user clarified the correct architecture: **SPIN** stays in the `.sig-stat-block` (room pattern, btn-reverse, toggles orientation 180° + reveals reversal_qualifier), while **FLIP** lives at the bottom-left of the stage card as a `.btn-reveal` (game-kit fan carousel pattern, toggles polarity gravity↔levity w. a horizontal-perspective Y-axis rotation animation). Gravity is the default upright polarity per user — significator_reversed=False → gravity, True → levity ; **template changes** (my_sign.html): (a) `.sig-stage-card` no longer carries inline `display:none` — stage frame visible on page load, before any card click; (b) `.sig-stage` carries `.sig-stage--frozen` modifier from the start so the stat-block shows alongside the stage card (room CSS gates `.sig-stat-block { display: block }` behind this class); (c) stat-block btn relabeled "FLIP" → "SPIN" + restored to btn-reverse / orientation-toggle semantics; (d) new `` outside the stat-block at .sig-stage scope, positioned absolute via new SCSS (bottom-left of stage card, mirroring game_kit.html's #id_fan_flip placement); (e) FYI btn + `_sig_fyi_panel.html` partial included alongside SPIN in stat-block — pinned w. id_my_sign_fyi_panel; (f) all 18 card data-* attrs filled (data-levity-qualifier / data-gravity-qualifier / data-levity-emanation / data-gravity-emanation / data-levity-reversal / data-gravity-reversal / data-energies / data-operations / data-italic-word / data-correspondence) so StageCard.populateCard has everything it needs to render qualifiers + reversal-face text per polarity; (g) data-polarity on .my-sign-stage drives populator polarity arg + (future) polarity-themed styling, initialised from `current_significator_reversed` (False=gravity, True=levity) ; **JS changes** (inline script in my_sign.html, includes apps/epic/stage-card.js): (a) on card click → StageCard.fromDataset → populateCard(stageCard, card, _polarity()) + populateKeywords on stat-block + buildInfoData/renderFyi on FYI panel + sig-focused class on grid cell; (b) FYI btn click toggles `.fyi-open` on stat-block (room pattern — CSS reveals the .sig-info panel + PRV/NXT); (c) PRV/NXT cycle thru _fyiData; (d) SPIN click toggles `.stage-card--reversed` + `.is-reversed` on stat-block (orientation, preview-only — not persisted); (e) FLIP click runs `_flipPolarityAnimated()` — 500ms Y-axis rotateY(90deg) midpoint animation lifted from game-kit.js's `_flipActive`, swaps polarity at offset 0.5 so the new face shows through the 2nd half-rotation, preserves SPIN orientation by including ' rotate(180deg)' in both keyframes when stage-card--reversed is on, in-flight `dataset.flipping` flag prevents re-triggering mid-animation; (f) on-load: if user has a saved sig (`.my-sign-page[data-current-card-id]`), find that grid card + auto-select it so stage shows the persisted choice ; **SCSS** (_card-deck.scss): new `.my-sign-flip-btn` rule positioning the btn absolute z-index:25 bottom:0.4rem left:calc(1.5rem + 0.4rem) — accounts for .sig-stage's padding-left:1.5rem so the btn lands at the visual bottom-left of the stage card; .btn-reveal styling (magenta/cyan) inherited from existing _button-pad.scss; no animation SCSS (the 500ms rotateY is in JS via element.animate()) ; **deferred**: `.sig-overlay[data-polarity="levity"]` / `[data-polarity="gravity"]` themed color overrides at _card-deck.scss:805-885 are scoped to `.sig-overlay` and won't apply to `.my-sign-stage[data-polarity]` until those selectors are extended (or duplicated under a .my-sign-stage sibling). User flagged the visual delta but the picker is functionally complete w.o the polarity-themed colors — followup sub-sprint ; **regression**: 7 FTs in test_bill_my_sign green in 57s; no IT/UT changes needed (only template + SCSS). User-pre-staged rootvars.scss tweak picked up Code architected by Disco DeDisco Git commit message Co-Authored-By: Claude Sonnet 4.6 --- src/static_src/scss/_card-deck.scss | 16 ++ src/static_src/scss/rootvars.scss | 4 +- src/templates/apps/billboard/my_sign.html | 177 +++++++++++++++++++--- 3 files changed, 177 insertions(+), 20 deletions(-) diff --git a/src/static_src/scss/_card-deck.scss b/src/static_src/scss/_card-deck.scss index 61c0577..d331469 100644 --- a/src/static_src/scss/_card-deck.scss +++ b/src/static_src/scss/_card-deck.scss @@ -615,6 +615,22 @@ html:has(.sig-backdrop) { } } +// ─── My Sign picker — FLIP btn (polarity toggle) ────────────────────────────── +// Bottom-left corner of the stage card, mirroring game_kit.html's +// `.fan-flip-btn` placement convention (per [[sprint-my-sign-picker-may18h]]). +// SPIN (orientation 180° rotation) stays in `.sig-stat-block` — the FLIP btn +// here toggles polarity (data-polarity attr + persisted significator_reversed). +.my-sign-flip-btn { + position: absolute; + z-index: 25; + bottom: 0.4rem; + // .sig-stage has padding-left: 1.5rem; this offset places the btn just + // inside the stage card's bottom-left corner (the card sits flex-end / + // flex-start, anchored to the stage's left padding). + left: calc(1.5rem + 0.4rem); + margin: 0; +} + // ─── Mini card grid ─────────────────────────────────────────────────────────── // flex: 0 0 auto — shrinks to card content; no background (backdrop blur). // align-content: start prevents CSS grid from distributing extra height between rows. diff --git a/src/static_src/scss/rootvars.scss b/src/static_src/scss/rootvars.scss index e528363..288a9f7 100644 --- a/src/static_src/scss/rootvars.scss +++ b/src/static_src/scss/rootvars.scss @@ -458,8 +458,8 @@ .palette-maryland { --priUser: var(--quiBlt); --secUser: var(--sixBlt); - --terUser: var(--terYl); - --quaUser: var(--priBlt); + --terUser: var(--secBlt); + --quaUser: var(--priYl); --quiUser: var(--octBlt); --sixUser: var(--quiBlt); --sepUser: var(--quiBlt); diff --git a/src/templates/apps/billboard/my_sign.html b/src/templates/apps/billboard/my_sign.html index ae16808..17248bb 100644 --- a/src/templates/apps/billboard/my_sign.html +++ b/src/templates/apps/billboard/my_sign.html @@ -16,8 +16,15 @@ {% if current_significator %}data-current-card-id="{{ current_significator.id }}"{% endif %} data-current-reversed="{{ current_significator_reversed|yesno:'true,false' }}"> -
-