Colors are stored only on root-level tags. DocumentService now calls TagService.resolveEffectiveColors() before returning search results and single-document responses, so child tags carry their parent's color when serialised to JSON. Parent tags are batch-loaded in a single query. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>