CursorPreviewCanvas reuses the same backend pattern as the editor
canvas (CSS fallback / Wisp asset / runtime unavailable) so a pixel-
accurate Wisp preview can drop in later without changing the
component contract. CursorAppearancePanel composes UI-18 inspector
primitives into APPEARANCE / CLICK EFFECT / MOTION / BEHAVIOR
sections with a footer (Reset / Apply).
The appearance panel ships with disabled: true on the halo
strength slider when halo_enabled == false — a small touch that
prevents the parent from worrying about how to disable individual
controls inline.