/** * Phase 17: custom stepper popover for half-step number inputs. * * Activates on any `input[data-stepper]` — opens a small popover next to * the input with −/+ buttons that step by the input's own step attribute * (default 1), and — when both min and max are finite — a range slider * for quick gross moves. Mutations mirror into input.value and dispatch * a bubbling `input` event (so sprint-planner.js live-recomputes); on * popover close we dispatch `change` (so the existing debounced save * pipeline fires). Strict-CSP-clean: loaded as a standard