From 2ec23ea2c04f6a8d0f3c8ba3678d2cd276a202b9 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Mon, 25 May 2026 14:44:07 -0400 Subject: [PATCH] =?UTF-8?q?A.7.5-polish=20stat-block=20polarity=20bg=20uni?= =?UTF-8?q?fication=20=E2=80=94=20gravity=20flipped=20to=20--priUser=20acr?= =?UTF-8?q?oss=20sig=20+=20sea=20+=20fan=20stages=20(match=20My=20Sign=20a?= =?UTF-8?q?pplet's=20no-flip=20convention).=20User-reported=202026-05-25?= =?UTF-8?q?=20PM=20after=20the=20A.7.5=20land=20(a9ad422):=20"the=20--priU?= =?UTF-8?q?ser=20and=20--secUser=20polarity=20seems=20to=20be=20reversed?= =?UTF-8?q?=20everywhere=20but=20the=20My=20Sign=20applet".=20DOM=20inspec?= =?UTF-8?q?tion=20confirmed:=20applet=20stat-block=20under=20gravity=20=3D?= =?UTF-8?q?=20`rgb(50,=2030,=2095)`=20(--priUser);=20main=20`.sig-stat-blo?= =?UTF-8?q?ck`=20under=20gravity=20=3D=20`rgba(162,=20170,=20173,=200.75)`?= =?UTF-8?q?=20(--secUser).=20Applet=20keeps=20--priUser=20bg=20under=20BOT?= =?UTF-8?q?H=20polarities=20(no=20gravity=20override=20on=20bg;=20only=20l?= =?UTF-8?q?abel/keyword=20colors=20flipped).=20Main=20page=20+=20sea=5Fsta?= =?UTF-8?q?ge=20+=20fan=5Fstage=20were=20doing=20the=20opposite-polarity?= =?UTF-8?q?=20flip=20per=20the=20[[feedback-card-polarity-convention]]=20l?= =?UTF-8?q?ock,=20which=20the=20user=20is=20now=20revising=20=E2=80=94=20s?= =?UTF-8?q?tat-block=20should=20match=20applet=20pattern=20(always=20--pri?= =?UTF-8?q?User=20bg,=20regardless=20of=20polarity).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Change**: collapse the three stat-block gravity-polarity overrides: - `.tarot-fan-wrap[data-polarity="gravity"] .fan-stage-block` — bg `--secUser → --priUser`; combined w. the existing levity rule into a single comma-list selector (`[data-polarity="gravity"], [data-polarity="levity"]`) since both branches now produce identical colors. Inner overrides (label/chip/keywords) collapsed to the levity values. - `.sig-stat-block` under `.my-sign-page[data-polarity="gravity"]` (+ `.sig-overlay[data-polarity="gravity"]`) — explicit `background: rgba(var(--secUser), 0.75)` removed; falls through to the default `.sig-stage .sig-stat-block { background: rgba(var(--priUser), 0.5); }` upstream. Label + chip gravity-specific overrides (--quiUser label, --priUser chip — tuned for the now-removed --secUser bg) deleted; the shared --secUser-label / --secUser-chip defaults (tuned for --priUser bg) cover both polarities. - `.sea-stage--gravity .sea-stat-block` — bg `--secUser → --priUser`; combined w. levity via comma-list selector. Inner overrides collapsed. Net effect across the 3 surfaces: stat-block bg is now `rgba(var(--priUser), N)` (alpha varies per surface: 0.5 sig, 0.85 sea, 1.0 fan) regardless of polarity — matching the applet's universal --priUser pattern. Card polarity rules untouched: text-mode card bg still flips per the original convention (gravity card --priUser, levity card --secUser). Card + stat-block under gravity NOW share the same polarity bg (was opposite per [[feedback-card-polarity-convention]]); for image-mode cards this is invisible (transparent card bg); for text-mode cards (Earthman + RWS today) the same-polarity bgs read as a coordinated dark pair under gravity rather than the prior dark/light contrast — accepted as the intentional new convention per user spec. **Convention update**: [[feedback-card-polarity-convention]] needs revision — the "card + stat block carry OPPOSITE-polarity bgs" rule held for sig/sea/fan but never for the applet, and the user is now extending the applet's exception universally. Memory update deferred to a follow-up; commit body documents the new direction so future-me has the rationale. Tests: 1314/1314 IT+UT total green (no test surface — SCSS-only change; ITs use lxml HTML parsing + don't observe computed styles). Visual verify 2026-05-25 PM: my_sign main page stat-block under gravity now `rgba(50, 30, 95, 0.5)` (--priUser w. page-bg bleed) matching the applet's `rgb(50, 30, 95)` (--priUser at full alpha). No FT runs per [[feedback-ft-run-discipline]] — visual-only change. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/static_src/scss/_card-deck.scss | 73 +++++++++++------------------ 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/src/static_src/scss/_card-deck.scss b/src/static_src/scss/_card-deck.scss index d54c737..5949e3a 100644 --- a/src/static_src/scss/_card-deck.scss +++ b/src/static_src/scss/_card-deck.scss @@ -353,35 +353,26 @@ // shared `.tarot-fan-wrap` ancestor by `game-kit.js:_populateStage` and // `_flipActive` so the stat block can pick up the opposite-polarity bg // without JS having to touch the stat block directly. -.tarot-fan-wrap[data-polarity="gravity"] .fan-stage-block { - background: rgba(var(--secUser), 1); - border-color: rgba(var(--priUser), 0.15); - color: rgba(var(--priUser), 1); - .stat-face-label { color: rgba(var(--quiUser), 1); } - // Sprint A.7.5 — chip uses --secUser by default; under gravity the - // stat-block bg IS --secUser, so the chip would be invisible. Flip - // to --priUser to stay on the opposite-polarity side per the - // [[feedback-card-polarity-convention]]. - .stat-face-chip { color: rgba(var(--priUser), 1); } - .stat-keywords li { - color: rgba(var(--priUser), 1); - border-bottom-color: rgba(var(--priUser), 0.18); - } -} -.tarot-fan-wrap[data-polarity="levity"] .fan-stage-block { +// Sprint A.7.5 user-spec 2026-05-25 PM — gravity polarity stat-block bg +// flipped from --secUser to --priUser to match the applet's pattern (which +// keeps the stat-block bg as --priUser under both polarities). User +// observation: "polarity seems to be reversed everywhere but the My Sign +// applet". Card + stat-block now share the SAME polarity bg (--priUser +// under gravity) — explicit revision of the prior opposite-polarity rule. +// Inner color overrides (label/chip/keywords) collapse to match the levity +// branch since both now sit on --priUser bg. +.tarot-fan-wrap[data-polarity="gravity"] .fan-stage-block, +.tarot-fan-wrap[data-polarity="levity"] .fan-stage-block { background: rgba(var(--priUser), 1); border-color: rgba(var(--terUser), 0.15); color: rgba(var(--secUser), 1); - // Sprint A.7.5 — label drops to --secUser to match the new applet - // convention. Was --terUser; --secUser still has comfortable contrast - // against the --priUser bg + lets the title (--quaUser/--terUser per - // arcana) stay the focal text. .stat-face-label { color: rgba(var(--secUser), 1); } .stat-keywords li { color: rgba(var(--quiUser), 1); border-bottom-color: rgba(var(--terUser), 0.18); } } +// Levity rule above (combined w. gravity since both now use --priUser bg). .fan-card { position: absolute; @@ -1254,11 +1245,14 @@ html:has(.sig-backdrop) { } .sig-overlay[data-polarity="gravity"], .my-sign-page[data-polarity="gravity"] { - // Stat block: invert priUser/secUser so gravity gets the same stark contrast as leavened cards + // Sprint A.7.5 user-spec 2026-05-25 PM — stat-block bg under gravity + // collapses to the default --priUser (was --secUser w. inverted + // priUser/secUser), matching the My Sign applet's universal --priUser + // stat-block. Label/chip/keyword overrides below collapse too — the + // default rules (tuned for --priUser bg) cover both polarities now. .sig-stat-block { - background: rgba(var(--secUser), 0.75); - color: rgba(var(--priUser), 1); - border-color: rgba(var(--priUser), 0.15); + // bg falls through to the default `rgba(var(--priUser), 0.5)` set + // at `.sig-stage .sig-stat-block` above; no per-polarity override. } // Caution tooltip: --tooltip-bg is black so priUser text (dark) would be invisible — // override to secUser (light) so body text reads against the dark backdrop. @@ -1271,13 +1265,9 @@ html:has(.sig-backdrop) { .sig-stage-card .fan-card-reversal-qualifier, .sig-stage-card .sig-qualifier-above, .sig-stage-card .sig-qualifier-below { color: rgba(var(--terUser), 1); } - // Stat-face label: gravity stat-block bg is --secUser (opposite of gravity card's - // --priUser bg), so the label takes the levity-card text color (--quiUser) to - // stay legible against the lighter stat-block. - .sig-stat-block .stat-face-label { color: rgba(var(--quiUser), 1); } - // Sprint A.7.5 — chip flips to --priUser under gravity (default --secUser - // would be invisible on the --secUser stat-block bg). - .sig-stat-block .stat-face-chip { color: rgba(var(--priUser), 1); } + // Sprint A.7.5 — label + chip overrides under gravity dropped; the + // shared --secUser default (tuned for --priUser bg) applies in both + // polarities now that gravity stat-block bg = --priUser. // Upright + reversal title glow — gravity .sig-stage-card .fan-card-name, .sig-stage-card .sig-qualifier-above, @@ -2145,28 +2135,21 @@ $_sea-title-els: '.fan-card-name, .sig-qualifier-above, .sig-qualifier-below, .f // unchanged — `.is-reversed` still just toggles which face renders; // it does NOT shift the bg (orientation is preview-only, polarity is // the persisted axis that paints the surfaces). -.sea-stage--gravity .sea-stat-block { - background: rgba(var(--secUser), 0.85); - border-color: rgba(var(--priUser), 0.15); - .stat-face-label { color: rgba(var(--quiUser), 1); } - // Sprint A.7.5 — chip flips to --priUser under gravity (bg is --secUser). - .stat-face-chip { color: rgba(var(--priUser), 1); } - .stat-keywords li { - color: rgba(var(--priUser), 1); - border-bottom-color: rgba(var(--priUser), 0.18); - } -} -.sea-stage--levity .sea-stat-block { +// Sprint A.7.5 user-spec 2026-05-25 PM — gravity stat-block bg flipped to +// match the My Sign applet (always --priUser regardless of polarity). Both +// gravity + levity collapse to the same colors since both sit on --priUser +// bg now; the original opposite-polarity inversion is dropped. +.sea-stage--gravity .sea-stat-block, +.sea-stage--levity .sea-stat-block { background: rgba(var(--priUser), 0.85); border-color: rgba(var(--terUser), 0.15); - // Sprint A.7.5 — label flipped to --secUser (was --terUser) to match - // the new applet convention. --secUser still contrasts well w. --priUser bg. .stat-face-label { color: rgba(var(--secUser), 1); } .stat-keywords li { color: rgba(var(--quiUser), 1); border-bottom-color: rgba(var(--terUser), 0.18); } } +// Levity rule above (combined w. gravity since both now use --priUser bg). @media (orientation: landscape) { html.sea-open body .container .navbar,