REAL LiDAR fix — Lit marker corruption from imperative textContent (#210)
Safari console finally gave it up. Every slider drag triggered:
TypeError: null is not an object (evaluating 'this._$AA.nextSibling.data=ae')
The LiDAR opacity slider's @input handler did span.textContent = "${Math.round(v)}%" to skip a re-render. textContent = removes every child of the span, including the marker comments Lit places around ${pct}% interpolations to anchor its updates. Once the markers were gone, the next Lit render crashed inside performUpdate, which aborted updated() partway through. updated() never reached _handleCardModeChange, which is the function that fires exitLidarView. So clicking Layer / Weather flipped _cardMode (mode-bar visual updated, that path doesn't go through Lit's template) but the LiDAR exit never ran → the dot cloud kept drawing forever.
The "icon spinning instead of spinner" symptom was the same crash hitting mid-render: is-spinning class applied but the icon attribute never swapped to mdi:loading.
Fix: removed the imperative textContent write. _onLidarOpacityChange now calls this.requestUpdate() so the picker re-renders through Lit's normal text-node pipeline with the markers intact. rAF coalescing keeps the cost at one render per frame max during drag.