fix(space-card): nothing in the static schematic is hit-testable (#664)

The stage is pointer-events:none, but that is not an inherited ban: the
shared marker styles opt the 44 px floor (.dev::before) and the painted
capsule (.device-shell-frame) back in for the interactive plan (#564).
The static card imports them whole, so since v1.76.0-beta.2 it showed a
hand cursor over every marker and swallowed clicks that do nothing.

The card now closes every descendant opt-in (.hp-static-stage *, ::before,
::after). smoke_space_card asserts the browser hit test itself
(elementFromPoint over the marker and a 9x9 grid across the stage) and
the cursor, not the stage computed style that stayed green through the
regression. Mutant static-card-descendants-hit-testable.

Screenshots: 11 frames pixel-identical, fingerprint only
(npm run docs:accept -- --identical).

Issue: #664
User-Visible: yes
This commit is contained in:
Claude
2026-09-26 13:02:51 +03:00
parent 6cdcb1ea47
commit 40b73cc599
7 changed files with 95 additions and 14 deletions
+11
View File
@@ -3391,6 +3391,17 @@ const MUTANT_DEFINITIONS = [
replace: "",
}],
},
{
id: 'static-card-descendants-hit-testable',
guard: 'node demo/smoke_space_card.mjs',
because: '#664: pointer-events:none on the stage does not stop a descendant that opts back in; '
+ 'without the subtree rule the shared #564 capsule shows a pointer cursor and swallows clicks',
patches: [{
file: 'src/space-card.ts',
find: " .hp-static-stage *,\n .hp-static-stage *::before,\n .hp-static-stage *::after {\n pointer-events: none;\n }\n",
replace: "",
}],
},
{
id: 'fit-house-hidden-walls-vote',
guard: 'node demo/smoke_space_card.mjs',