isValidTileUrlTemplate
Whether a tile URL template is one we are willing to request.
Hand-parsed rather than handed to a URL type, because there is no URL parser in common code and the rules here are narrow: a scheme we accept, a host, no credentials, no fragment, and every placeholder accounted for. The template belongs to the user, so the checks exist to keep a typo from being sent to a server as though it were a real request, not to defend against the person who typed it.
A private/link-local host blocklist is intentionally omitted: the user supplies the tile endpoint, requests carry no Meshtastic-held credentials, and client-side tile GETs make that SSRF shape an accepted low-risk case.