What
Add two trackpad widgets to the Button HUD showing left + right trackpad state in real-time: finger position (X, Y), touch active flag, contact area / pressure.
Why
The Steam Controller has two trackpads as primary inputs — they're the main reason people pick the controller. The visualizer body has hasTouchpad: false in its profile and even if true would only show one touchpad like DualSense's single one. A side-by-side widget pair in the HUD (similar style to the existing stick dots) would surface them in both the in-overlay HUD and the popout window.
The driver already parses both trackpads — parsed.touchpad is a 2-element array [{active, id, x, y, area}, ...]. So this is purely visualizer + HUD work, no driver changes needed.
Acceptance criteria
Refs
What
Add two trackpad widgets to the Button HUD showing left + right trackpad state in real-time: finger position (X, Y), touch active flag, contact area / pressure.
Why
The Steam Controller has two trackpads as primary inputs — they're the main reason people pick the controller. The visualizer body has
hasTouchpad: falsein its profile and even iftruewould only show one touchpad like DualSense's single one. A side-by-side widget pair in the HUD (similar style to the existing stick dots) would surface them in both the in-overlay HUD and the popout window.The driver already parses both trackpads —
parsed.touchpadis a 2-element array[{active, id, x, y, area}, ...]. So this is purely visualizer + HUD work, no driver changes needed.Acceptance criteria
active: true, or dot brightness scaled byarea)button-hud-stateIPC channelRefs
apps/overlay/src/js/app.js → updateButtonHudapps/overlay/src/index.html(Button HUD markup)apps/overlay/src/js/button-hud-window.js(popout HUD renderer)