Transmission #066: Selection tap fix and ground ring

Selection raycast walks through blockers

Mobile inspect taps were often hitting terrain or the player capsule first, so SelectionTargetResolver returned nothing even when a goblin or tree was under the finger. The resolver now uses RaycastNonAlloc, sorts hits by distance, and skips non-inspectable colliders until it finds an NPC, harvestable, enterable building, or quest board.

Ground ring highlight

Added SelectionRingHighlight: a pulsing cyan ring at the selected target’s feet (sized from collider bounds). Wired through SelectionManager alongside the compact tag so selection is obvious even when the tag is easy to miss at a steep camera angle.

Tests

SelectionTargetResolverTests covers player skip, NPC resolve, and harvestable resolve via TryResolveFromCollider.

Input System touch + debug logging

Project input is Input System only (activeInputHandler: 1), so legacy Input.touchCount never fired on device — selection taps were silently ignored. SelectionTouchInput now reads Touchscreen.current (and Mouse.current in Editor). Added opt-in [Selection] logs via SelectionManager.debugLog and SelectionDebug, including per-hit raycast resolve reasons and UI blockers when a tap is eaten by the HUD.

Tag on first tap + detail text layout

The compact tag panel used default stretch anchors on the overlay canvas, so it often landed off-screen while the ground ring still showed. Tag panel now uses centered anchors, on-screen clamping, and a forced layout rebuild on bind. Detail modal scroll labels stretch to the content width with measured wrap height and extra horizontal padding so body text is not clipped on the left.

Tag hidden until detail opened (nested canvas)

SelectionDetailModalUI put its Canvas on the same SelectionManager object that parents SelectionTagCanvas. Disabling the detail canvas also suppressed the nested tag canvas. Detail UI now lives on its own child SelectionDetailCanvas so the compact tag stays visible whenever the blue ring is shown.