The real interceptor was the 'cutout' mesh, not the hitbox: it's a 1m-deep CSG helper whose front face sits 0.5m proud of the glass, and current three.js raycasts invisible meshes — so every paint/hover ray resolved to 'cutout' (no slotId → role null). Disable its raycast; combined with the hitbox noop, paint/hover rays now land on the tagged frame/glass (panel/glass) children. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>