From eb8666ba40207862e35ba2245e488668b0e2978e Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Thu, 21 May 2026 15:04:53 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20my-sea=20drawn=20cards=20no=20longer=20a?= =?UTF-8?q?lways=20render=20levity-coded=20=E2=80=94=20yesterday's=20`feed?= =?UTF-8?q?back=5Fpolarity=5Fmust=5Fagree=5Facross=5Fsurfaces`=20fix=20(f5?= =?UTF-8?q?9c1af)=20added=20`.my-sea-page[data-polarity=3D"..."]`=20to=20t?= =?UTF-8?q?he=20shared=20`.sig-overlay,=20.my-sign-page`=20polarity=20bloc?= =?UTF-8?q?k=20at=20`=5Fcard-deck.scss:919`.=20Worked=20for=20the=20spread?= =?UTF-8?q?-center=20sig=20(`.sea-sig-card`)=20but=20silently=20bled=20int?= =?UTF-8?q?o=20the=20drawn-card=20stage=20modal:=20the=20stage's=20element?= =?UTF-8?q?=20carries=20BOTH=20classes=20`.sig-stage-card=20sea-stage-card?= =?UTF-8?q?`=20(per=20`=5Fsea=5Fstage.html:12`),=20so=20the=20shared=20rul?= =?UTF-8?q?e's=20`.sig-stage-card`=20descendant=20selector=20matched.=20Sp?= =?UTF-8?q?ecificity=20`.my-sea-page[data-polarity=3D"levity"]=20.sig-stag?= =?UTF-8?q?e-card`=20=3D=200,3,0=20silently=20beat=20the=20card-specific?= =?UTF-8?q?=20`.sea-stage--gravity=20.sea-stage-card`=20=3D=200,2,0=20(set?= =?UTF-8?q?=20by=20sea.js's=20`=5FshowStage(isLevity)`=20at=20line=20104-1?= =?UTF-8?q?08)=20=E2=86=92=20every=20drawn=20card=20on=20my-sea=20rendered?= =?UTF-8?q?=20the=20user's-sig=20polarity=20instead=20of=20the=20deck-stac?= =?UTF-8?q?k=20it=20was=20actually=20drawn=20from.=20Room.html=20Sea=20Sel?= =?UTF-8?q?ect=20unaffected=20(no=20`.my-sea-page`=20ancestor=20on=20the?= =?UTF-8?q?=20stage=20there).=20User-reported=202026-05-21=20=E2=80=94=20s?= =?UTF-8?q?ymptom:=20a=20gravity=20card=20opened=20in=20my-sea=20stage=20s?= =?UTF-8?q?hows=20the=20light/cream=20levity=20styling=20even=20though=20t?= =?UTF-8?q?he=20card=20came=20from=20the=20gravity=20deck.=20Fix:=20drop?= =?UTF-8?q?=20`.my-sea-page[data-polarity]`=20from=20the=20shared=20select?= =?UTF-8?q?or=20list=20at=20`=5Fcard-deck.scss:917-919`=20+=20`:972-974`;?= =?UTF-8?q?=20add=20a=20NEW=20dedicated=20rule=20at=20the=20end=20of=20the?= =?UTF-8?q?=20shared=20block=20scoped=20tightly=20to=20`.sig-stage-card.se?= =?UTF-8?q?a-sig-card`=20(0,4,0=20specificity)=20=E2=80=94=20the=20central?= =?UTF-8?q?=20sig=20stays=20page-polarity-driven=20(yesterday's=20`MySeaPo?= =?UTF-8?q?larityMatchesMySignTest`=20still=20pins=20this)=20but=20every?= =?UTF-8?q?=20other=20`.sig-stage-card`=20descendant=20(drawn-card=20stage?= =?UTF-8?q?s,=20future=20spread=20elements)=20is=20free=20to=20follow=20it?= =?UTF-8?q?s=20own=20polarity.=20Gravity=20is=20the=20default=20rendering?= =?UTF-8?q?=20for=20`.sea-sig-card`=20per=20the=20base=20rule=20at=20`:137?= =?UTF-8?q?9`=20so=20only=20the=20levity=20override=20needs=20an=20explici?= =?UTF-8?q?t=20block.=206/6=20existing=20polarity=20+=20picker=20ITs=20gre?= =?UTF-8?q?en;=20visual=20verify=20deferred=20to=20user.=20Trap=20captured?= =?UTF-8?q?:=20[[feedback-page-polarity-scope-trap]]=20=E2=80=94=20multi-c?= =?UTF-8?q?lass=20elements=20(`.A.B`)=20match=20both=20shared=20(`.A`)=20A?= =?UTF-8?q?ND=20scoped=20(`.B`)=20selectors,=20so=20any=20new=20page=20wra?= =?UTF-8?q?pper=20added=20to=20a=20shared=20block=20needs=20an=20audit=20o?= =?UTF-8?q?f=20every=20descendant=20selector=20in=20the=20block=20for=20ne?= =?UTF-8?q?sted=20polarity=20overlap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- src/static_src/scss/_card-deck.scss | 34 +++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/static_src/scss/_card-deck.scss b/src/static_src/scss/_card-deck.scss index 1cb0fee..568456b 100644 --- a/src/static_src/scss/_card-deck.scss +++ b/src/static_src/scss/_card-deck.scss @@ -914,9 +914,17 @@ html:has(.sig-backdrop) { // same polarity-themed colour rules apply to the standalone Game Sign picker. // data-polarity lives on the page wrapper (not on .my-sign-stage) so descendant // `.sig-card` (in the grid, sibling to the stage) inherits the rules. +// NOTE: `.my-sea-page[data-polarity="..."]` deliberately NOT in this shared +// selector list (was bitten 2026-05-21 by drawn-card stage bleed). My-sea's +// drawn cards open into the `.sea-stage` modal whose `.sig-stage-card.sea- +// stage-card` element has BOTH classes — so a `.my-sea-page[data-polarity] +// .sig-stage-card` rule (0,3,0) silently overrides the proper card-specific +// `.sea-stage--levity/--gravity .sea-stage-card` polarity (0,2,0), forcing +// every drawn card's stage to inherit the user's sig polarity. My-sea's own +// page polarity rules live below + target ONLY `.sea-sig-card` (the spread- +// center sig). See [[feedback-page-polarity-scope-trap]]. .sig-overlay[data-polarity="levity"], -.my-sign-page[data-polarity="levity"], -.my-sea-page[data-polarity="levity"] { +.my-sign-page[data-polarity="levity"] { // Mini card: inverted palette. game-kit sets explicit colours on .fan-card-name // and .fan-card-corner that out-specifc the parent color, so re-target them here. .sig-card { @@ -970,8 +978,7 @@ html:has(.sig-backdrop) { // Cursor colours live in .sig-cursor-float[data-role] rules (portal elements) } .sig-overlay[data-polarity="gravity"], -.my-sign-page[data-polarity="gravity"], -.my-sea-page[data-polarity="gravity"] { +.my-sign-page[data-polarity="gravity"] { // Stat block: invert priUser/secUser so gravity gets the same stark contrast as leavened cards .sig-stat-block { background: rgba(var(--secUser), 0.75); @@ -1004,6 +1011,25 @@ html:has(.sig-backdrop) { // Cursor colours live in .sig-cursor-float[data-role] rules (portal elements) } +// ── My-sea page polarity: scoped to `.sea-sig-card` only ────────────────────── +// The user's chosen sig (rendered as `.sig-stage-card.sea-sig-card` in the +// spread-center cell) is the ONLY element on my-sea whose colours track the +// page-level `data-polarity` (= `User.significator_reversed`). Drawn cards +// belong to their own polarity from the deck-stack they were pulled from + +// must NOT inherit the user's sig polarity — see big NOTE above the shared +// `.sig-overlay`/`.my-sign-page` block for the bleed trap that prompted this +// scoping (2026-05-21 bug). +// +// Gravity is the default rendering (`.sig-stage-card.sea-sig-card` base rule +// sets `background: --priUser, color: --secUser` at `_card-deck.scss:1379`) +// so we only need an override for the LEVITY case here — same idea as the +// `.sig-overlay[data-polarity="levity"] .sig-stage-card` block above. +.my-sea-page[data-polarity="levity"] .sig-stage-card.sea-sig-card { + background: rgba(var(--secUser), 1); + border-color: rgba(var(--priUser), 0.6); + color: rgba(var(--priUser), 1); // currentColor propagates to .fan-corner-rank + i +} + // ─── Sig select: landscape overrides ───────────────────────────────────────── // Cascade (each step is a SUPERSET of the prior): // narrow landscape → 6 cols × 2.5rem, row layout (stage beside grid)