Map<String, dynamic> get effectiveAttributes { final parentAttrs = parent?.effectiveAttributes ?? {}; return {...parentAttrs, ...attributes}; }