b87d877270
Low-severity review nits, no behaviour change to the happy path: - CloseModals() now also resets the leftover _*ModalIsNew / parent-id fields (area ClusterId, line AreaId, equipment LineId, tag/vtag) for symmetry — harmless today (always set before a modal opens) but consistent. - HandleAddChild / HandleAddVirtualTag / HandleEdit gain a _modalBusy guard (try/finally) so a rapid double-action can't race two service loads into the same modal state. The switch bodies are re-indented under the try block. - VirtualTagModal DataType is now an InputSelect over the standard OPC UA type list (the same set TagModal uses) instead of free-text InputText. - RefreshEquipmentChildrenAsync documents that callers own StateHasChanged() and the full-reload fallback is spelled out as a block with a comment. Build clean; AdminUI.Tests 216/216.