@memberjunction/ng-dashboards 5.34.1 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
  235. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  236. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  237. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  239. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  241. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.js +420 -393
  243. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  244. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  245. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  249. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  251. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  252. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  253. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  255. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  256. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  257. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.js +587 -608
  259. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  260. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  261. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  263. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  264. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  265. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  266. package/dist/Testing/components/testing-review.component.js +310 -274
  267. package/dist/Testing/components/testing-review.component.js.map +1 -1
  268. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  269. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  271. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  272. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  273. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.js +307 -273
  275. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  276. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  277. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.js +107 -93
  279. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  280. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  281. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  282. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  283. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  285. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  287. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  288. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  289. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  290. package/dist/actions-dashboards.module.d.ts +15 -16
  291. package/dist/actions-dashboards.module.d.ts.map +1 -1
  292. package/dist/actions-dashboards.module.js +34 -11
  293. package/dist/actions-dashboards.module.js.map +1 -1
  294. package/dist/ai-dashboards.module.d.ts +45 -48
  295. package/dist/ai-dashboards.module.d.ts.map +1 -1
  296. package/dist/ai-dashboards.module.js +36 -10
  297. package/dist/ai-dashboards.module.js.map +1 -1
  298. package/dist/archiving-dashboards.module.d.ts +2 -1
  299. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  300. package/dist/archiving-dashboards.module.js +12 -2
  301. package/dist/archiving-dashboards.module.js.map +1 -1
  302. package/dist/communication-dashboards.module.d.ts +2 -1
  303. package/dist/communication-dashboards.module.d.ts.map +1 -1
  304. package/dist/communication-dashboards.module.js +24 -3
  305. package/dist/communication-dashboards.module.js.map +1 -1
  306. package/dist/core-dashboards.module.d.ts +1 -1
  307. package/dist/core-dashboards.module.d.ts.map +1 -1
  308. package/dist/core-dashboards.module.js +31 -1
  309. package/dist/core-dashboards.module.js.map +1 -1
  310. package/dist/credentials-dashboards.module.d.ts +1 -1
  311. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  312. package/dist/credentials-dashboards.module.js +28 -1
  313. package/dist/credentials-dashboards.module.js.map +1 -1
  314. package/dist/lists-dashboards.module.d.ts +1 -1
  315. package/dist/lists-dashboards.module.d.ts.map +1 -1
  316. package/dist/lists-dashboards.module.js +28 -1
  317. package/dist/lists-dashboards.module.js.map +1 -1
  318. package/dist/public-api.d.ts +2 -2
  319. package/dist/public-api.d.ts.map +1 -1
  320. package/dist/public-api.js +3 -3
  321. package/dist/public-api.js.map +1 -1
  322. package/dist/scheduling-dashboards.module.d.ts +1 -1
  323. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  324. package/dist/scheduling-dashboards.module.js +31 -1
  325. package/dist/scheduling-dashboards.module.js.map +1 -1
  326. package/dist/testing-dashboards.module.d.ts +8 -7
  327. package/dist/testing-dashboards.module.d.ts.map +1 -1
  328. package/dist/testing-dashboards.module.js +30 -0
  329. package/dist/testing-dashboards.module.js.map +1 -1
  330. package/package.json +52 -52
  331. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  332. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  333. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  334. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  335. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  336. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  339. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  340. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  342. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  343. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  344. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  346. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -46,8 +46,16 @@ const _forTrack2 = ($index, $item) => $item.SourceName;
46
46
  const _forTrack3 = ($index, $item) => $item.ID;
47
47
  const _forTrack4 = ($index, $item) => $item.Label;
48
48
  const _forTrack5 = ($index, $item) => $item.When;
49
- function TagsResourceComponent_For_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "span", 13);
49
+ function TagsResourceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelement(0, "i", 11);
51
+ i0.ɵɵtext(1, " Running\u2026 ");
52
+ } }
53
+ function TagsResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵelement(0, "i", 12);
55
+ i0.ɵɵtext(1, " Run Tag Health ");
56
+ } }
57
+ function TagsResourceComponent_For_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "span", 15);
51
59
  i0.ɵɵtext(1);
52
60
  i0.ɵɵelementEnd();
53
61
  } if (rf & 2) {
@@ -56,13 +64,13 @@ function TagsResourceComponent_For_8_Conditional_3_Template(rf, ctx) { if (rf &
56
64
  i0.ɵɵadvance();
57
65
  i0.ɵɵtextInterpolate(item_r2.BadgeText);
58
66
  } }
59
- function TagsResourceComponent_For_8_Template(rf, ctx) { if (rf & 1) {
67
+ function TagsResourceComponent_For_11_Template(rf, ctx) { if (rf & 1) {
60
68
  const _r1 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "div", 11);
62
- i0.ɵɵlistener("click", function TagsResourceComponent_For_8_Template_div_click_0_listener() { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SwitchTab(item_r2.Tab)); });
69
+ i0.ɵɵelementStart(0, "div", 13);
70
+ i0.ɵɵlistener("click", function TagsResourceComponent_For_11_Template_div_click_0_listener() { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SwitchTab(item_r2.Tab)); });
63
71
  i0.ɵɵelement(1, "i");
64
72
  i0.ɵɵtext(2);
65
- i0.ɵɵconditionalCreate(3, TagsResourceComponent_For_8_Conditional_3_Template, 2, 3, "span", 12);
73
+ i0.ɵɵconditionalCreate(3, TagsResourceComponent_For_11_Conditional_3_Template, 2, 3, "span", 14);
66
74
  i0.ɵɵelementEnd();
67
75
  } if (rf & 2) {
68
76
  const item_r2 = ctx.$implicit;
@@ -75,23 +83,15 @@ function TagsResourceComponent_For_8_Template(rf, ctx) { if (rf & 1) {
75
83
  i0.ɵɵadvance();
76
84
  i0.ɵɵconditional(item_r2.BadgeText ? 3 : -1);
77
85
  } }
78
- function TagsResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
79
- i0.ɵɵelement(0, "i", 14);
80
- i0.ɵɵtext(1, " Running\u2026 ");
81
- } }
82
- function TagsResourceComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
83
- i0.ɵɵelement(0, "i", 15);
84
- i0.ɵɵtext(1, " Run Tag Health ");
85
- } }
86
- function TagsResourceComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
86
+ function TagsResourceComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
87
87
  i0.ɵɵelementStart(0, "div", 9);
88
88
  i0.ɵɵelement(1, "mj-loading", 16);
89
89
  i0.ɵɵelementEnd();
90
90
  } }
91
- function TagsResourceComponent_Conditional_15_Conditional_0_For_30_Template(rf, ctx) { if (rf & 1) {
91
+ function TagsResourceComponent_Conditional_14_Conditional_0_For_30_Template(rf, ctx) { if (rf & 1) {
92
92
  const _r5 = i0.ɵɵgetCurrentView();
93
93
  i0.ɵɵelementStart(0, "tr", 41);
94
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_0_For_30_Template_tr_click_0_listener() { const row_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DrillDownTag(row_r6.Tag)); });
94
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_0_For_30_Template_tr_click_0_listener() { const row_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DrillDownTag(row_r6.Tag)); });
95
95
  i0.ɵɵelementStart(1, "td", 42);
96
96
  i0.ɵɵtext(2);
97
97
  i0.ɵɵelementEnd();
@@ -133,15 +133,15 @@ function TagsResourceComponent_Conditional_15_Conditional_0_For_30_Template(rf,
133
133
  i0.ɵɵadvance(2);
134
134
  i0.ɵɵtextInterpolate(row_r6.FirstSeen);
135
135
  } }
136
- function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_8_Template(rf, ctx) { if (rf & 1) {
136
+ function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_8_Template(rf, ctx) { if (rf & 1) {
137
137
  i0.ɵɵelementStart(0, "div", 55)(1, "p");
138
138
  i0.ɵɵtext(2, "No content items found for this tag.");
139
139
  i0.ɵɵelementEnd()();
140
140
  } }
141
- function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_9_For_13_Template(rf, ctx) { if (rf & 1) {
141
+ function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_9_For_13_Template(rf, ctx) { if (rf & 1) {
142
142
  const _r8 = i0.ɵɵgetCurrentView();
143
143
  i0.ɵɵelementStart(0, "tr", 41);
144
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_9_For_13_Template_tr_click_0_listener() { const di_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenItemDetailByID(di_r9.ID)); });
144
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_9_For_13_Template_tr_click_0_listener() { const di_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenItemDetailByID(di_r9.ID)); });
145
145
  i0.ɵɵelementStart(1, "td");
146
146
  i0.ɵɵtext(2);
147
147
  i0.ɵɵelementEnd();
@@ -166,7 +166,7 @@ function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Condi
166
166
  i0.ɵɵadvance(2);
167
167
  i0.ɵɵtextInterpolate(di_r9.UpdatedAt);
168
168
  } }
169
- function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_9_Template(rf, ctx) { if (rf & 1) {
169
+ function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_9_Template(rf, ctx) { if (rf & 1) {
170
170
  i0.ɵɵelementStart(0, "table", 27)(1, "thead")(2, "tr")(3, "th");
171
171
  i0.ɵɵtext(4, "Name");
172
172
  i0.ɵɵelementEnd();
@@ -180,25 +180,25 @@ function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Condi
180
180
  i0.ɵɵtext(10, "Updated");
181
181
  i0.ɵɵelementEnd()()();
182
182
  i0.ɵɵelementStart(11, "tbody");
183
- i0.ɵɵrepeaterCreate(12, TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_9_For_13_Template, 9, 4, "tr", 56, _forTrack3);
183
+ i0.ɵɵrepeaterCreate(12, TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_9_For_13_Template, 9, 4, "tr", 56, _forTrack3);
184
184
  i0.ɵɵelementEnd()();
185
185
  } if (rf & 2) {
186
186
  const ctx_r2 = i0.ɵɵnextContext(4);
187
187
  i0.ɵɵadvance(12);
188
188
  i0.ɵɵrepeater(ctx_r2.TagDrillDownItems);
189
189
  } }
190
- function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
190
+ function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
191
191
  const _r7 = i0.ɵɵgetCurrentView();
192
192
  i0.ɵɵelementStart(0, "div", 29)(1, "div", 49)(2, "span", 50);
193
193
  i0.ɵɵelement(3, "i", 51);
194
194
  i0.ɵɵtext(4);
195
195
  i0.ɵɵelementEnd();
196
196
  i0.ɵɵelementStart(5, "button", 52);
197
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDownTag()); });
197
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDownTag()); });
198
198
  i0.ɵɵelement(6, "i", 53);
199
199
  i0.ɵɵelementEnd()();
200
200
  i0.ɵɵelementStart(7, "div", 54);
201
- i0.ɵɵconditionalCreate(8, TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_8_Template, 3, 0, "div", 55)(9, TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Conditional_9_Template, 14, 0, "table", 27);
201
+ i0.ɵɵconditionalCreate(8, TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_8_Template, 3, 0, "div", 55)(9, TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Conditional_9_Template, 14, 0, "table", 27);
202
202
  i0.ɵɵelementEnd()();
203
203
  } if (rf & 2) {
204
204
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -207,18 +207,18 @@ function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Templ
207
207
  i0.ɵɵadvance(4);
208
208
  i0.ɵɵconditional(ctx_r2.TagDrillDownItems.length === 0 ? 8 : 9);
209
209
  } }
210
- function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
210
+ function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
211
211
  i0.ɵɵelement(0, "mj-word-cloud", 34);
212
212
  } if (rf & 2) {
213
213
  const ctx_r2 = i0.ɵɵnextContext(3);
214
214
  i0.ɵɵproperty("Items", ctx_r2.TagCloudWordItems)("MaxFontSize", 40)("MinFontSize", 12)("MaxItems", 20)("Interactive", true)("Animate", true);
215
215
  } }
216
- function TagsResourceComponent_Conditional_15_Conditional_0_Conditional_38_Template(rf, ctx) { if (rf & 1) {
216
+ function TagsResourceComponent_Conditional_14_Conditional_0_Conditional_38_Template(rf, ctx) { if (rf & 1) {
217
217
  i0.ɵɵelementStart(0, "div", 35);
218
218
  i0.ɵɵtext(1, "No tags yet");
219
219
  i0.ɵɵelementEnd();
220
220
  } }
221
- function TagsResourceComponent_Conditional_15_Conditional_0_For_45_Template(rf, ctx) { if (rf & 1) {
221
+ function TagsResourceComponent_Conditional_14_Conditional_0_For_45_Template(rf, ctx) { if (rf & 1) {
222
222
  i0.ɵɵelementStart(0, "div", 40)(1, "span");
223
223
  i0.ɵɵtext(2);
224
224
  i0.ɵɵelementEnd();
@@ -232,7 +232,7 @@ function TagsResourceComponent_Conditional_15_Conditional_0_For_45_Template(rf,
232
232
  i0.ɵɵadvance(2);
233
233
  i0.ɵɵtextInterpolate(s_r10.Count);
234
234
  } }
235
- function TagsResourceComponent_Conditional_15_Conditional_0_Template(rf, ctx) { if (rf & 1) {
235
+ function TagsResourceComponent_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
236
236
  const _r4 = i0.ɵɵgetCurrentView();
237
237
  i0.ɵɵelementStart(0, "div", 17)(1, "div")(2, "div", 18);
238
238
  i0.ɵɵtext(3, "Overview");
@@ -241,8 +241,8 @@ function TagsResourceComponent_Conditional_15_Conditional_0_Template(rf, ctx) {
241
241
  i0.ɵɵtext(5);
242
242
  i0.ɵɵelementEnd()();
243
243
  i0.ɵɵelementStart(6, "div", 20)(7, "input", 21);
244
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_0_Template_input_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.TagSearchQuery, $event) || (ctx_r2.TagSearchQuery = $event); return i0.ɵɵresetView($event); });
245
- i0.ɵɵlistener("input", function TagsResourceComponent_Conditional_15_Conditional_0_Template_input_input_7_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.FilterTags()); });
244
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_0_Template_input_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.TagSearchQuery, $event) || (ctx_r2.TagSearchQuery = $event); return i0.ɵɵresetView($event); });
245
+ i0.ɵɵlistener("input", function TagsResourceComponent_Conditional_14_Conditional_0_Template_input_input_7_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.FilterTags()); });
246
246
  i0.ɵɵelementEnd()()();
247
247
  i0.ɵɵelementStart(8, "div", 22)(9, "div", 23)(10, "div", 24)(11, "div", 25)(12, "div", 26)(13, "table", 27)(14, "thead")(15, "tr")(16, "th");
248
248
  i0.ɵɵtext(17, "Tag");
@@ -263,22 +263,22 @@ function TagsResourceComponent_Conditional_15_Conditional_0_Template(rf, ctx) {
263
263
  i0.ɵɵtext(27, "First Seen");
264
264
  i0.ɵɵelementEnd()()();
265
265
  i0.ɵɵelementStart(28, "tbody");
266
- i0.ɵɵrepeaterCreate(29, TagsResourceComponent_Conditional_15_Conditional_0_For_30_Template, 18, 17, "tr", 28, _forTrack1);
266
+ i0.ɵɵrepeaterCreate(29, TagsResourceComponent_Conditional_14_Conditional_0_For_30_Template, 18, 17, "tr", 28, _forTrack1);
267
267
  i0.ɵɵelementEnd()()()();
268
- i0.ɵɵconditionalCreate(31, TagsResourceComponent_Conditional_15_Conditional_0_Conditional_31_Template, 10, 3, "div", 29);
268
+ i0.ɵɵconditionalCreate(31, TagsResourceComponent_Conditional_14_Conditional_0_Conditional_31_Template, 10, 3, "div", 29);
269
269
  i0.ɵɵelementEnd();
270
270
  i0.ɵɵelementStart(32, "div", 30)(33, "div", 31)(34, "div", 32);
271
271
  i0.ɵɵelement(35, "i", 33);
272
272
  i0.ɵɵtext(36, " Tag Cloud");
273
273
  i0.ɵɵelementEnd();
274
- i0.ɵɵconditionalCreate(37, TagsResourceComponent_Conditional_15_Conditional_0_Conditional_37_Template, 1, 6, "mj-word-cloud", 34)(38, TagsResourceComponent_Conditional_15_Conditional_0_Conditional_38_Template, 2, 0, "div", 35);
274
+ i0.ɵɵconditionalCreate(37, TagsResourceComponent_Conditional_14_Conditional_0_Conditional_37_Template, 1, 6, "mj-word-cloud", 34)(38, TagsResourceComponent_Conditional_14_Conditional_0_Conditional_38_Template, 2, 0, "div", 35);
275
275
  i0.ɵɵelementEnd();
276
276
  i0.ɵɵelementStart(39, "div", 36)(40, "div", 37);
277
277
  i0.ɵɵelement(41, "i", 38);
278
278
  i0.ɵɵtext(42, " By Source");
279
279
  i0.ɵɵelementEnd();
280
280
  i0.ɵɵelementStart(43, "div", 39);
281
- i0.ɵɵrepeaterCreate(44, TagsResourceComponent_Conditional_15_Conditional_0_For_45_Template, 5, 2, "div", 40, _forTrack2);
281
+ i0.ɵɵrepeaterCreate(44, TagsResourceComponent_Conditional_14_Conditional_0_For_45_Template, 5, 2, "div", 40, _forTrack2);
282
282
  i0.ɵɵelementEnd()()()()();
283
283
  } if (rf & 2) {
284
284
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -295,8 +295,8 @@ function TagsResourceComponent_Conditional_15_Conditional_0_Template(rf, ctx) {
295
295
  i0.ɵɵadvance(7);
296
296
  i0.ɵɵrepeater(ctx_r2.TagsBySource);
297
297
  } }
298
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
299
- i0.ɵɵelementStart(0, "span", 62);
298
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
299
+ i0.ɵɵelementStart(0, "span", 63);
300
300
  i0.ɵɵtext(1);
301
301
  i0.ɵɵelementEnd();
302
302
  } if (rf & 2) {
@@ -304,8 +304,8 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_19_Templ
304
304
  i0.ɵɵadvance();
305
305
  i0.ɵɵtextInterpolate(ctx_r2.TaxDuplicates.length);
306
306
  } }
307
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
308
- i0.ɵɵelementStart(0, "span", 64);
307
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
308
+ i0.ɵɵelementStart(0, "span", 65);
309
309
  i0.ɵɵtext(1);
310
310
  i0.ɵɵelementEnd();
311
311
  } if (rf & 2) {
@@ -313,41 +313,41 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_23_Templ
313
313
  i0.ɵɵadvance();
314
314
  i0.ɵɵtextInterpolate(ctx_r2.TaxOrphans.length);
315
315
  } }
316
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_9_Template(rf, ctx) { if (rf & 1) {
316
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_9_Template(rf, ctx) { if (rf & 1) {
317
317
  i0.ɵɵelementStart(0, "div", 55);
318
- i0.ɵɵelement(1, "i", 3);
318
+ i0.ɵɵelement(1, "i", 61);
319
319
  i0.ɵɵelementStart(2, "p");
320
320
  i0.ɵɵtext(3, "No tags found");
321
321
  i0.ɵɵelementEnd()();
322
322
  } }
323
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
323
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
324
324
  const _r15 = i0.ɵɵgetCurrentView();
325
- i0.ɵɵelementStart(0, "input", 101);
326
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Conditional_1_Template_input_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const node_r14 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleNodeSelection(node_r14, $event)); });
325
+ i0.ɵɵelementStart(0, "input", 102);
326
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Conditional_1_Template_input_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const node_r14 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleNodeSelection(node_r14, $event)); });
327
327
  i0.ɵɵelementEnd();
328
328
  } if (rf & 2) {
329
329
  const node_r14 = i0.ɵɵnextContext().$implicit;
330
330
  const ctx_r2 = i0.ɵɵnextContext(4);
331
331
  i0.ɵɵproperty("checked", ctx_r2.IsNodeMultiSelected(node_r14.ID));
332
332
  } }
333
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template(rf, ctx) { if (rf & 1) {
333
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template(rf, ctx) { if (rf & 1) {
334
334
  const _r13 = i0.ɵɵgetCurrentView();
335
- i0.ɵɵelementStart(0, "div", 94);
336
- i0.ɵɵlistener("dragstart", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_div_dragstart_0_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnTreeNodeDragStart($event, node_r14)); })("dragover", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_div_dragover_0_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnTreeNodeDragOver($event, node_r14)); })("dragleave", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_div_dragleave_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnTreeNodeDragLeave()); })("drop", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_div_drop_0_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.OnTreeNodeDrop($event, node_r14); return i0.ɵɵresetView($event.stopPropagation()); })("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_div_click_0_listener() { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectTaxNode(node_r14)); });
337
- i0.ɵɵconditionalCreate(1, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Conditional_1_Template, 1, 1, "input", 95);
338
- i0.ɵɵelementStart(2, "span", 96);
339
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_span_click_2_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.ToggleTaxNode(node_r14); return i0.ɵɵresetView($event.stopPropagation()); });
340
- i0.ɵɵelementEnd();
341
- i0.ɵɵelement(3, "span", 97);
342
- i0.ɵɵelementStart(4, "span", 98);
335
+ i0.ɵɵelementStart(0, "div", 95);
336
+ i0.ɵɵlistener("dragstart", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_div_dragstart_0_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnTreeNodeDragStart($event, node_r14)); })("dragover", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_div_dragover_0_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnTreeNodeDragOver($event, node_r14)); })("dragleave", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_div_dragleave_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnTreeNodeDragLeave()); })("drop", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_div_drop_0_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.OnTreeNodeDrop($event, node_r14); return i0.ɵɵresetView($event.stopPropagation()); })("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_div_click_0_listener() { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectTaxNode(node_r14)); });
337
+ i0.ɵɵconditionalCreate(1, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Conditional_1_Template, 1, 1, "input", 96);
338
+ i0.ɵɵelementStart(2, "span", 97);
339
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_span_click_2_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.ToggleTaxNode(node_r14); return i0.ɵɵresetView($event.stopPropagation()); });
340
+ i0.ɵɵelementEnd();
341
+ i0.ɵɵelement(3, "span", 98);
342
+ i0.ɵɵelementStart(4, "span", 99);
343
343
  i0.ɵɵtext(5);
344
344
  i0.ɵɵelementEnd();
345
- i0.ɵɵelementStart(6, "span", 99);
345
+ i0.ɵɵelementStart(6, "span", 100);
346
346
  i0.ɵɵtext(7);
347
347
  i0.ɵɵelementEnd();
348
- i0.ɵɵelementStart(8, "span", 100);
349
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template_span_click_8_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.OpenCreateChildTagFor(node_r14); return i0.ɵɵresetView($event.stopPropagation()); });
350
- i0.ɵɵelement(9, "i", 72);
348
+ i0.ɵɵelementStart(8, "span", 101);
349
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template_span_click_8_listener($event) { const node_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.OpenCreateChildTagFor(node_r14); return i0.ɵɵresetView($event.stopPropagation()); });
350
+ i0.ɵɵelement(9, "i", 73);
351
351
  i0.ɵɵelementEnd()();
352
352
  } if (rf & 2) {
353
353
  const node_r14 = ctx.$implicit;
@@ -368,18 +368,18 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_1
368
368
  i0.ɵɵadvance(2);
369
369
  i0.ɵɵtextInterpolate1("(", node_r14.ItemCount, ")");
370
370
  } }
371
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_12_Template(rf, ctx) { if (rf & 1) {
372
- i0.ɵɵelementStart(0, "div", 77);
373
- i0.ɵɵelement(1, "mj-loading", 102);
371
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_12_Template(rf, ctx) { if (rf & 1) {
372
+ i0.ɵɵelementStart(0, "div", 78);
373
+ i0.ɵɵelement(1, "mj-loading", 103);
374
374
  i0.ɵɵelementEnd();
375
375
  } }
376
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_For_3_Template(rf, ctx) { if (rf & 1) {
376
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_For_3_Template(rf, ctx) { if (rf & 1) {
377
377
  const _r16 = i0.ɵɵgetCurrentView();
378
- i0.ɵɵelementStart(0, "span", 114);
379
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_For_3_Template_span_click_0_listener() { const bc_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToBreadcrumb(bc_r17.ID)); });
378
+ i0.ɵɵelementStart(0, "span", 115);
379
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_For_3_Template_span_click_0_listener() { const bc_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToBreadcrumb(bc_r17.ID)); });
380
380
  i0.ɵɵtext(1);
381
381
  i0.ɵɵelementEnd();
382
- i0.ɵɵelementStart(2, "span", 115);
382
+ i0.ɵɵelementStart(2, "span", 116);
383
383
  i0.ɵɵtext(3, "\u203A");
384
384
  i0.ɵɵelementEnd();
385
385
  } if (rf & 2) {
@@ -387,8 +387,8 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
387
387
  i0.ɵɵadvance();
388
388
  i0.ɵɵtextInterpolate(bc_r17.Name);
389
389
  } }
390
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
391
- i0.ɵɵelementStart(0, "div", 119);
390
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
391
+ i0.ɵɵelementStart(0, "div", 120);
392
392
  i0.ɵɵtext(1);
393
393
  i0.ɵɵelementEnd();
394
394
  } if (rf & 2) {
@@ -396,15 +396,15 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
396
396
  i0.ɵɵadvance();
397
397
  i0.ɵɵtextInterpolate(ctx_r2.TaxSelectedNode.Description);
398
398
  } }
399
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Template(rf, ctx) { if (rf & 1) {
399
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Template(rf, ctx) { if (rf & 1) {
400
400
  const _r18 = i0.ɵɵgetCurrentView();
401
- i0.ɵɵelementStart(0, "div", 116);
401
+ i0.ɵɵelementStart(0, "div", 117);
402
402
  i0.ɵɵtext(1);
403
- i0.ɵɵelementStart(2, "span", 117);
404
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Template_span_click_2_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.StartEditTag()); });
405
- i0.ɵɵelement(3, "i", 118);
403
+ i0.ɵɵelementStart(2, "span", 118);
404
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Template_span_click_2_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.StartEditTag()); });
405
+ i0.ɵɵelement(3, "i", 119);
406
406
  i0.ɵɵelementEnd()();
407
- i0.ɵɵconditionalCreate(4, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Conditional_4_Template, 2, 1, "div", 119);
407
+ i0.ɵɵconditionalCreate(4, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Conditional_4_Template, 2, 1, "div", 120);
408
408
  } if (rf & 2) {
409
409
  const ctx_r2 = i0.ɵɵnextContext(5);
410
410
  i0.ɵɵadvance();
@@ -412,26 +412,26 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
412
412
  i0.ɵɵadvance(3);
413
413
  i0.ɵɵconditional(ctx_r2.TaxSelectedNode.Description ? 4 : -1);
414
414
  } }
415
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
415
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
416
416
  const _r19 = i0.ɵɵgetCurrentView();
417
- i0.ɵɵelementStart(0, "div", 106)(1, "div", 120)(2, "label", 121);
417
+ i0.ɵɵelementStart(0, "div", 107)(1, "div", 121)(2, "label", 122);
418
418
  i0.ɵɵtext(3, "Name");
419
419
  i0.ɵɵelementEnd();
420
- i0.ɵɵelementStart(4, "input", 122);
421
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.TaxEditName, $event) || (ctx_r2.TaxEditName = $event); return i0.ɵɵresetView($event); });
420
+ i0.ɵɵelementStart(4, "input", 123);
421
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.TaxEditName, $event) || (ctx_r2.TaxEditName = $event); return i0.ɵɵresetView($event); });
422
422
  i0.ɵɵelementEnd()();
423
- i0.ɵɵelementStart(5, "div", 120)(6, "label", 121);
423
+ i0.ɵɵelementStart(5, "div", 121)(6, "label", 122);
424
424
  i0.ɵɵtext(7, "Description");
425
425
  i0.ɵɵelementEnd();
426
- i0.ɵɵelementStart(8, "textarea", 123);
427
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_textarea_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.TaxEditDescription, $event) || (ctx_r2.TaxEditDescription = $event); return i0.ɵɵresetView($event); });
426
+ i0.ɵɵelementStart(8, "textarea", 124);
427
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_textarea_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.TaxEditDescription, $event) || (ctx_r2.TaxEditDescription = $event); return i0.ɵɵresetView($event); });
428
428
  i0.ɵɵelementEnd()();
429
- i0.ɵɵelementStart(9, "div", 124)(10, "button", 125);
430
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveEditTag()); });
429
+ i0.ɵɵelementStart(9, "div", 125)(10, "button", 126);
430
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveEditTag()); });
431
431
  i0.ɵɵtext(11, "Save");
432
432
  i0.ɵɵelementEnd();
433
433
  i0.ɵɵelementStart(12, "button", 57);
434
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.CancelEditTag()); });
434
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.CancelEditTag()); });
435
435
  i0.ɵɵtext(13, "Cancel");
436
436
  i0.ɵɵelementEnd()()();
437
437
  } if (rf & 2) {
@@ -441,45 +441,45 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
441
441
  i0.ɵɵadvance(4);
442
442
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.TaxEditDescription);
443
443
  } }
444
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template(rf, ctx) { if (rf & 1) {
444
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template(rf, ctx) { if (rf & 1) {
445
445
  const _r20 = i0.ɵɵgetCurrentView();
446
- i0.ɵɵelementStart(0, "div", 112)(1, "button", 126);
447
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenCreateChildTag()); });
448
- i0.ɵɵelement(2, "i", 72);
446
+ i0.ɵɵelementStart(0, "div", 113)(1, "button", 127);
447
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenCreateChildTag()); });
448
+ i0.ɵɵelement(2, "i", 73);
449
449
  i0.ɵɵtext(3, " Add Child");
450
450
  i0.ɵɵelementEnd();
451
- i0.ɵɵelementStart(4, "button", 126);
452
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.StartEditTag()); });
453
- i0.ɵɵelement(5, "i", 118);
451
+ i0.ɵɵelementStart(4, "button", 127);
452
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.StartEditTag()); });
453
+ i0.ɵɵelement(5, "i", 119);
454
454
  i0.ɵɵtext(6, " Rename");
455
455
  i0.ɵɵelementEnd();
456
- i0.ɵɵelementStart(7, "button", 126);
457
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenMoveDialog(ctx_r2.TaxSelectedNode)); });
458
- i0.ɵɵelement(8, "i", 127);
456
+ i0.ɵɵelementStart(7, "button", 127);
457
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenMoveDialog(ctx_r2.TaxSelectedNode)); });
458
+ i0.ɵɵelement(8, "i", 128);
459
459
  i0.ɵɵtext(9, " Move");
460
460
  i0.ɵɵelementEnd();
461
- i0.ɵɵelementStart(10, "button", 126);
462
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenMergeIntoDialog(ctx_r2.TaxSelectedNode)); });
463
- i0.ɵɵelement(11, "i", 128);
461
+ i0.ɵɵelementStart(10, "button", 127);
462
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenMergeIntoDialog(ctx_r2.TaxSelectedNode)); });
463
+ i0.ɵɵelement(11, "i", 129);
464
464
  i0.ɵɵtext(12, " Merge Into...");
465
465
  i0.ɵɵelementEnd();
466
- i0.ɵɵelementStart(13, "button", 126);
467
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenSplitDialog(ctx_r2.TaxSelectedNode)); });
468
- i0.ɵɵelement(14, "i", 129);
466
+ i0.ɵɵelementStart(13, "button", 127);
467
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenSplitDialog(ctx_r2.TaxSelectedNode)); });
468
+ i0.ɵɵelement(14, "i", 130);
469
469
  i0.ɵɵtext(15, " Split");
470
470
  i0.ɵɵelementEnd();
471
- i0.ɵɵelementStart(16, "button", 130);
472
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.DeleteTag(ctx_r2.TaxSelectedNode)); });
473
- i0.ɵɵelement(17, "i", 131);
471
+ i0.ɵɵelementStart(16, "button", 131);
472
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.DeleteTag(ctx_r2.TaxSelectedNode)); });
473
+ i0.ɵɵelement(17, "i", 132);
474
474
  i0.ɵɵtext(18, " Delete");
475
475
  i0.ɵɵelementEnd()();
476
476
  } }
477
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_35_For_5_Template(rf, ctx) { if (rf & 1) {
477
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_35_For_5_Template(rf, ctx) { if (rf & 1) {
478
478
  const _r21 = i0.ɵɵgetCurrentView();
479
- i0.ɵɵelementStart(0, "span", 135);
480
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_35_For_5_Template_span_click_0_listener() { const child_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.SelectTaxNode(child_r22)); });
479
+ i0.ɵɵelementStart(0, "span", 136);
480
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_35_For_5_Template_span_click_0_listener() { const child_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.SelectTaxNode(child_r22)); });
481
481
  i0.ɵɵtext(1);
482
- i0.ɵɵelementStart(2, "span", 136);
482
+ i0.ɵɵelementStart(2, "span", 137);
483
483
  i0.ɵɵtext(3);
484
484
  i0.ɵɵelementEnd()();
485
485
  } if (rf & 2) {
@@ -489,29 +489,29 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
489
489
  i0.ɵɵadvance(2);
490
490
  i0.ɵɵtextInterpolate(child_r22.ItemCount);
491
491
  } }
492
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_35_Template(rf, ctx) { if (rf & 1) {
493
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 132);
492
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_35_Template(rf, ctx) { if (rf & 1) {
493
+ i0.ɵɵelementStart(0, "div", 114)(1, "div", 133);
494
494
  i0.ɵɵtext(2, "Child Tags");
495
495
  i0.ɵɵelementEnd();
496
- i0.ɵɵelementStart(3, "div", 133);
497
- i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_35_For_5_Template, 4, 2, "span", 134, _forTrack3);
496
+ i0.ɵɵelementStart(3, "div", 134);
497
+ i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_35_For_5_Template, 4, 2, "span", 135, _forTrack3);
498
498
  i0.ɵɵelementEnd()();
499
499
  } if (rf & 2) {
500
500
  const ctx_r2 = i0.ɵɵnextContext(5);
501
501
  i0.ɵɵadvance(4);
502
502
  i0.ɵɵrepeater(ctx_r2.TaxSelectedNode.Children);
503
503
  } }
504
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_36_For_5_Template(rf, ctx) { if (rf & 1) {
505
- i0.ɵɵelementStart(0, "div", 138)(1, "div", 139);
504
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_36_For_5_Template(rf, ctx) { if (rf & 1) {
505
+ i0.ɵɵelementStart(0, "div", 139)(1, "div", 140);
506
506
  i0.ɵɵelement(2, "i");
507
507
  i0.ɵɵelementEnd();
508
- i0.ɵɵelementStart(3, "div", 140);
508
+ i0.ɵɵelementStart(3, "div", 141);
509
509
  i0.ɵɵtext(4);
510
510
  i0.ɵɵelementEnd();
511
- i0.ɵɵelementStart(5, "div", 141);
511
+ i0.ɵɵelementStart(5, "div", 142);
512
512
  i0.ɵɵtext(6);
513
513
  i0.ɵɵelementEnd();
514
- i0.ɵɵelementStart(7, "div", 142);
514
+ i0.ɵɵelementStart(7, "div", 143);
515
515
  i0.ɵɵtext(8);
516
516
  i0.ɵɵelementEnd()();
517
517
  } if (rf & 2) {
@@ -525,25 +525,25 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
525
525
  i0.ɵɵadvance(2);
526
526
  i0.ɵɵtextInterpolate(item_r23.Date);
527
527
  } }
528
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_36_Template(rf, ctx) { if (rf & 1) {
529
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 132);
528
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_36_Template(rf, ctx) { if (rf & 1) {
529
+ i0.ɵɵelementStart(0, "div", 114)(1, "div", 133);
530
530
  i0.ɵɵtext(2, "Recently Tagged Items");
531
531
  i0.ɵɵelementEnd();
532
- i0.ɵɵelementStart(3, "div", 137);
533
- i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_36_For_5_Template, 9, 5, "div", 138, i0.ɵɵrepeaterTrackByIndex);
532
+ i0.ɵɵelementStart(3, "div", 138);
533
+ i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_36_For_5_Template, 9, 5, "div", 139, i0.ɵɵrepeaterTrackByIndex);
534
534
  i0.ɵɵelementEnd()();
535
535
  } if (rf & 2) {
536
536
  const ctx_r2 = i0.ɵɵnextContext(5);
537
537
  i0.ɵɵadvance(4);
538
538
  i0.ɵɵrepeater(ctx_r2.TaxRecentItems);
539
539
  } }
540
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_52_Template(rf, ctx) { if (rf & 1) {
540
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_52_Template(rf, ctx) { if (rf & 1) {
541
541
  i0.ɵɵelementStart(0, "strong");
542
542
  i0.ɵɵtext(1, "Locked while scope rows exist.");
543
543
  i0.ɵɵelementEnd();
544
544
  } }
545
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_For_56_Template(rf, ctx) { if (rf & 1) {
546
- i0.ɵɵelementStart(0, "span", 154);
545
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_For_56_Template(rf, ctx) { if (rf & 1) {
546
+ i0.ɵɵelementStart(0, "span", 155);
547
547
  i0.ɵɵtext(1);
548
548
  i0.ɵɵelementEnd();
549
549
  } if (rf & 2) {
@@ -551,8 +551,8 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
551
551
  i0.ɵɵadvance();
552
552
  i0.ɵɵtextInterpolate2("", s_r25.EntityName, " \u00B7 ", s_r25.DisplayName);
553
553
  } }
554
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_57_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "span", 155);
554
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_57_Template(rf, ctx) { if (rf & 1) {
555
+ i0.ɵɵelementStart(0, "span", 156);
556
556
  i0.ɵɵtext(1);
557
557
  i0.ɵɵelementEnd();
558
558
  } if (rf & 2) {
@@ -560,22 +560,22 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
560
560
  i0.ɵɵadvance();
561
561
  i0.ɵɵtextInterpolate1(" No scope rows. ", ctx_r2.SelectedTagFull.IsGlobal ? "Tag is global." : "Tag is non-global with no scope \u2014 currently unreachable.", " ");
562
562
  } }
563
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_80_Template(rf, ctx) { if (rf & 1) {
564
- i0.ɵɵelementStart(0, "div", 155);
563
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_80_Template(rf, ctx) { if (rf & 1) {
564
+ i0.ɵɵelementStart(0, "div", 156);
565
565
  i0.ɵɵtext(1, "No synonyms yet.");
566
566
  i0.ɵɵelementEnd();
567
567
  } }
568
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_For_1_Template(rf, ctx) { if (rf & 1) {
568
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_For_1_Template(rf, ctx) { if (rf & 1) {
569
569
  const _r26 = i0.ɵɵgetCurrentView();
570
- i0.ɵɵelementStart(0, "div", 169)(1, "div", 170);
570
+ i0.ɵɵelementStart(0, "div", 170)(1, "div", 171);
571
571
  i0.ɵɵtext(2);
572
572
  i0.ɵɵelementEnd();
573
573
  i0.ɵɵelementStart(3, "span");
574
574
  i0.ɵɵtext(4);
575
575
  i0.ɵɵelementEnd();
576
- i0.ɵɵelementStart(5, "span", 171);
577
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_For_1_Template_span_click_5_listener() { const s_r27 = i0.ɵɵrestoreView(_r26).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.RemoveSynonym(s_r27)); });
578
- i0.ɵɵelement(6, "i", 172);
576
+ i0.ɵɵelementStart(5, "span", 172);
577
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_For_1_Template_span_click_5_listener() { const s_r27 = i0.ɵɵrestoreView(_r26).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.RemoveSynonym(s_r27)); });
578
+ i0.ɵɵelement(6, "i", 173);
579
579
  i0.ɵɵelementEnd()();
580
580
  } if (rf & 2) {
581
581
  const s_r27 = ctx.$implicit;
@@ -587,122 +587,122 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
587
587
  i0.ɵɵadvance();
588
588
  i0.ɵɵtextInterpolate(s_r27.Source);
589
589
  } }
590
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_Template(rf, ctx) { if (rf & 1) {
591
- i0.ɵɵrepeaterCreate(0, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_For_1_Template, 7, 7, "div", 168, _forTrack3);
590
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_Template(rf, ctx) { if (rf & 1) {
591
+ i0.ɵɵrepeaterCreate(0, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_For_1_Template, 7, 7, "div", 169, _forTrack3);
592
592
  } if (rf & 2) {
593
593
  const ctx_r2 = i0.ɵɵnextContext(6);
594
594
  i0.ɵɵrepeater(ctx_r2.SelectedTagSynonyms);
595
595
  } }
596
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template(rf, ctx) { if (rf & 1) {
596
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template(rf, ctx) { if (rf & 1) {
597
597
  const _r24 = i0.ɵɵgetCurrentView();
598
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 132);
598
+ i0.ɵɵelementStart(0, "div", 114)(1, "div", 133);
599
599
  i0.ɵɵtext(2, "Governance \u2014 how the autotagger may grow this subtree");
600
600
  i0.ɵɵelementEnd();
601
- i0.ɵɵelementStart(3, "div", 143)(4, "div", 144)(5, "span", 145);
601
+ i0.ɵɵelementStart(3, "div", 144)(4, "div", 145)(5, "span", 146);
602
602
  i0.ɵɵtext(6, "Allow auto-grow under this tag");
603
603
  i0.ɵɵelementEnd();
604
- i0.ɵɵelementStart(7, "span", 146);
604
+ i0.ɵɵelementStart(7, "span", 147);
605
605
  i0.ɵɵtext(8, "Lets the classifier create child tags below this one. Off = constrained subtree.");
606
606
  i0.ɵɵelementEnd()();
607
- i0.ɵɵelementStart(9, "div", 147);
608
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_9_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("AllowAutoGrow")); });
607
+ i0.ɵɵelementStart(9, "div", 148);
608
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_9_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("AllowAutoGrow")); });
609
609
  i0.ɵɵelementEnd()();
610
- i0.ɵɵelementStart(10, "div", 143)(11, "div", 144)(12, "span", 145);
610
+ i0.ɵɵelementStart(10, "div", 144)(11, "div", 145)(12, "span", 146);
611
611
  i0.ɵɵtext(13, "Freeze this subtree");
612
612
  i0.ɵɵelementEnd();
613
- i0.ɵɵelementStart(14, "span", 146);
613
+ i0.ɵɵelementStart(14, "span", 147);
614
614
  i0.ɵɵtext(15, "Locks this entire subtree against auto-creation, regardless of mode.");
615
615
  i0.ɵɵelementEnd()();
616
- i0.ɵɵelementStart(16, "div", 147);
617
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("IsFrozen")); });
616
+ i0.ɵɵelementStart(16, "div", 148);
617
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("IsFrozen")); });
618
618
  i0.ɵɵelementEnd()();
619
- i0.ɵɵelementStart(17, "div", 143)(18, "div", 144)(19, "span", 145);
619
+ i0.ɵɵelementStart(17, "div", 144)(18, "div", 145)(19, "span", 146);
620
620
  i0.ɵɵtext(20, "Requires review for matches");
621
621
  i0.ɵɵelementEnd();
622
- i0.ɵɵelementStart(21, "span", 146);
622
+ i0.ɵɵelementStart(21, "span", 147);
623
623
  i0.ɵɵtext(22, "High-confidence matches against this tag are routed to the suggestion queue first.");
624
624
  i0.ɵɵelementEnd()();
625
- i0.ɵɵelementStart(23, "div", 147);
626
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_23_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("RequiresReview")); });
625
+ i0.ɵɵelementStart(23, "div", 148);
626
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_23_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("RequiresReview")); });
627
627
  i0.ɵɵelementEnd()();
628
- i0.ɵɵelementStart(24, "div", 148)(25, "div", 149)(26, "label");
628
+ i0.ɵɵelementStart(24, "div", 149)(25, "div", 150)(26, "label");
629
629
  i0.ɵɵtext(27, "Max children");
630
630
  i0.ɵɵelementEnd();
631
- i0.ɵɵelementStart(28, "input", 150);
632
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_change_28_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveSelectedTagNumber("MaxChildren", $event.target.value)); });
631
+ i0.ɵɵelementStart(28, "input", 151);
632
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_change_28_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveSelectedTagNumber("MaxChildren", $event.target.value)); });
633
633
  i0.ɵɵelementEnd();
634
- i0.ɵɵelementStart(29, "span", 151);
634
+ i0.ɵɵelementStart(29, "span", 152);
635
635
  i0.ɵɵtext(30, "Hard cap on direct children. Blank = unlimited.");
636
636
  i0.ɵɵelementEnd()();
637
- i0.ɵɵelementStart(31, "div", 149)(32, "label");
637
+ i0.ɵɵelementStart(31, "div", 150)(32, "label");
638
638
  i0.ɵɵtext(33, "Max descendant depth");
639
639
  i0.ɵɵelementEnd();
640
- i0.ɵɵelementStart(34, "input", 150);
641
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_change_34_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveSelectedTagNumber("MaxDescendantDepth", $event.target.value)); });
640
+ i0.ɵɵelementStart(34, "input", 151);
641
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_change_34_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveSelectedTagNumber("MaxDescendantDepth", $event.target.value)); });
642
642
  i0.ɵɵelementEnd();
643
- i0.ɵɵelementStart(35, "span", 151);
643
+ i0.ɵɵelementStart(35, "span", 152);
644
644
  i0.ɵɵtext(36, "From this node down. 0 = leaf-only.");
645
645
  i0.ɵɵelementEnd()();
646
- i0.ɵɵelementStart(37, "div", 149)(38, "label");
646
+ i0.ɵɵelementStart(37, "div", 150)(38, "label");
647
647
  i0.ɵɵtext(39, "Min confidence");
648
648
  i0.ɵɵelementEnd();
649
- i0.ɵɵelementStart(40, "input", 152);
650
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_change_40_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveSelectedTagNumber("MinWeight", $event.target.value)); });
649
+ i0.ɵɵelementStart(40, "input", 153);
650
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_change_40_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.SaveSelectedTagNumber("MinWeight", $event.target.value)); });
651
651
  i0.ɵɵelementEnd();
652
- i0.ɵɵelementStart(41, "span", 151);
652
+ i0.ɵɵelementStart(41, "span", 152);
653
653
  i0.ɵɵtext(42, "Floor for matches against this tag.");
654
654
  i0.ɵɵelementEnd()()()();
655
- i0.ɵɵelementStart(43, "div", 113)(44, "div", 132);
655
+ i0.ɵɵelementStart(43, "div", 114)(44, "div", 133);
656
656
  i0.ɵɵtext(45, "Scope \u2014 who can see and tag with this");
657
657
  i0.ɵɵelementEnd();
658
- i0.ɵɵelementStart(46, "div", 143)(47, "div", 144)(48, "span", 145);
658
+ i0.ɵɵelementStart(46, "div", 144)(47, "div", 145)(48, "span", 146);
659
659
  i0.ɵɵtext(49, "Global tag (visible to all tenants)");
660
660
  i0.ɵɵelementEnd();
661
- i0.ɵɵelementStart(50, "span", 146);
661
+ i0.ɵɵelementStart(50, "span", 147);
662
662
  i0.ɵɵtext(51, " Off = restricted to the scope rows below. ");
663
- i0.ɵɵconditionalCreate(52, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_52_Template, 2, 0, "strong");
663
+ i0.ɵɵconditionalCreate(52, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_52_Template, 2, 0, "strong");
664
664
  i0.ɵɵelementEnd()();
665
- i0.ɵɵelementStart(53, "div", 147);
666
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_53_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("IsGlobal")); });
665
+ i0.ɵɵelementStart(53, "div", 148);
666
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_div_click_53_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.ToggleGovernanceFlag("IsGlobal")); });
667
667
  i0.ɵɵelementEnd()();
668
- i0.ɵɵelementStart(54, "div", 153);
669
- i0.ɵɵrepeaterCreate(55, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_For_56_Template, 2, 2, "span", 154, _forTrack3);
670
- i0.ɵɵconditionalCreate(57, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_57_Template, 2, 1, "span", 155);
671
- i0.ɵɵelementStart(58, "button", 156);
672
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_button_click_58_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenScopeDialog()); });
673
- i0.ɵɵelement(59, "i", 157);
668
+ i0.ɵɵelementStart(54, "div", 154);
669
+ i0.ɵɵrepeaterCreate(55, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_For_56_Template, 2, 2, "span", 155, _forTrack3);
670
+ i0.ɵɵconditionalCreate(57, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_57_Template, 2, 1, "span", 156);
671
+ i0.ɵɵelementStart(58, "button", 157);
672
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_button_click_58_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenScopeDialog()); });
673
+ i0.ɵɵelement(59, "i", 158);
674
674
  i0.ɵɵtext(60, " Edit scope\u2026 ");
675
675
  i0.ɵɵelementEnd()();
676
- i0.ɵɵelementStart(61, "div", 158);
677
- i0.ɵɵelement(62, "i", 159);
676
+ i0.ɵɵelementStart(61, "div", 159);
677
+ i0.ɵɵelement(62, "i", 160);
678
678
  i0.ɵɵtext(63, " Children inherit this scope automatically. Promotion to global requires admin approval. ");
679
679
  i0.ɵɵelementEnd()();
680
- i0.ɵɵelementStart(64, "div", 113)(65, "div", 132);
680
+ i0.ɵɵelementStart(64, "div", 114)(65, "div", 133);
681
681
  i0.ɵɵtext(66, "Synonyms \u2014 alternate names that resolve to this tag");
682
682
  i0.ɵɵelementEnd();
683
- i0.ɵɵelementStart(67, "div", 160)(68, "input", 161);
684
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_ngModelChange_68_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.NewSynonymName, $event) || (ctx_r2.NewSynonymName = $event); return i0.ɵɵresetView($event); });
685
- i0.ɵɵlistener("keyup.enter", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_keyup_enter_68_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.AddSynonym()); });
683
+ i0.ɵɵelementStart(67, "div", 161)(68, "input", 162);
684
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_ngModelChange_68_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.NewSynonymName, $event) || (ctx_r2.NewSynonymName = $event); return i0.ɵɵresetView($event); });
685
+ i0.ɵɵlistener("keyup.enter", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_input_keyup_enter_68_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.AddSynonym()); });
686
686
  i0.ɵɵelementEnd();
687
- i0.ɵɵelementStart(69, "select", 162);
688
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_select_ngModelChange_69_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.NewSynonymSource, $event) || (ctx_r2.NewSynonymSource = $event); return i0.ɵɵresetView($event); });
689
- i0.ɵɵelementStart(70, "option", 163);
687
+ i0.ɵɵelementStart(69, "select", 163);
688
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_select_ngModelChange_69_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r2.NewSynonymSource, $event) || (ctx_r2.NewSynonymSource = $event); return i0.ɵɵresetView($event); });
689
+ i0.ɵɵelementStart(70, "option", 164);
690
690
  i0.ɵɵtext(71, "Manual");
691
691
  i0.ɵɵelementEnd();
692
- i0.ɵɵelementStart(72, "option", 164);
692
+ i0.ɵɵelementStart(72, "option", 165);
693
693
  i0.ɵɵtext(73, "Imported");
694
694
  i0.ɵɵelementEnd();
695
- i0.ɵɵelementStart(74, "option", 165);
695
+ i0.ɵɵelementStart(74, "option", 166);
696
696
  i0.ɵɵtext(75, "Merged");
697
697
  i0.ɵɵelementEnd();
698
- i0.ɵɵelementStart(76, "option", 166);
698
+ i0.ɵɵelementStart(76, "option", 167);
699
699
  i0.ɵɵtext(77, "LLM");
700
700
  i0.ɵɵelementEnd()();
701
- i0.ɵɵelementStart(78, "button", 167);
702
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_button_click_78_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.AddSynonym()); });
701
+ i0.ɵɵelementStart(78, "button", 168);
702
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template_button_click_78_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.AddSynonym()); });
703
703
  i0.ɵɵtext(79, "+ Add");
704
704
  i0.ɵɵelementEnd()();
705
- i0.ɵɵconditionalCreate(80, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_80_Template, 2, 0, "div", 155)(81, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_Template, 2, 0);
705
+ i0.ɵɵconditionalCreate(80, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_80_Template, 2, 0, "div", 156)(81, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Conditional_81_Template, 2, 0);
706
706
  i0.ɵɵelementEnd();
707
707
  } if (rf & 2) {
708
708
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -735,48 +735,48 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
735
735
  i0.ɵɵadvance(2);
736
736
  i0.ɵɵconditional(ctx_r2.SelectedTagSynonyms.length === 0 ? 80 : 81);
737
737
  } }
738
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Template(rf, ctx) { if (rf & 1) {
739
- i0.ɵɵelementStart(0, "div", 103)(1, "div", 104);
740
- i0.ɵɵrepeaterCreate(2, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_For_3_Template, 4, 1, null, null, _forTrack3);
741
- i0.ɵɵelementStart(4, "span", 105);
738
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Template(rf, ctx) { if (rf & 1) {
739
+ i0.ɵɵelementStart(0, "div", 104)(1, "div", 105);
740
+ i0.ɵɵrepeaterCreate(2, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_For_3_Template, 4, 1, null, null, _forTrack3);
741
+ i0.ɵɵelementStart(4, "span", 106);
742
742
  i0.ɵɵtext(5);
743
743
  i0.ɵɵelementEnd()();
744
- i0.ɵɵconditionalCreate(6, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Template, 5, 2)(7, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template, 14, 2, "div", 106);
744
+ i0.ɵɵconditionalCreate(6, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_6_Template, 5, 2)(7, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_7_Template, 14, 2, "div", 107);
745
745
  i0.ɵɵelementEnd();
746
- i0.ɵɵelementStart(8, "div", 107)(9, "div", 108)(10, "div", 109);
746
+ i0.ɵɵelementStart(8, "div", 108)(9, "div", 109)(10, "div", 110);
747
747
  i0.ɵɵtext(11);
748
748
  i0.ɵɵelementEnd();
749
- i0.ɵɵelementStart(12, "div", 110);
749
+ i0.ɵɵelementStart(12, "div", 111);
750
750
  i0.ɵɵtext(13, "Items Tagged");
751
751
  i0.ɵɵelementEnd()();
752
- i0.ɵɵelementStart(14, "div", 108)(15, "div", 109);
752
+ i0.ɵɵelementStart(14, "div", 109)(15, "div", 110);
753
753
  i0.ɵɵtext(16);
754
754
  i0.ɵɵelementEnd();
755
- i0.ɵɵelementStart(17, "div", 110);
755
+ i0.ɵɵelementStart(17, "div", 111);
756
756
  i0.ɵɵtext(18, "Avg Weight");
757
757
  i0.ɵɵelementEnd()();
758
- i0.ɵɵelementStart(19, "div", 108)(20, "div", 109);
758
+ i0.ɵɵelementStart(19, "div", 109)(20, "div", 110);
759
759
  i0.ɵɵtext(21);
760
760
  i0.ɵɵelementEnd();
761
- i0.ɵɵelementStart(22, "div", 110);
761
+ i0.ɵɵelementStart(22, "div", 111);
762
762
  i0.ɵɵtext(23, "Children");
763
763
  i0.ɵɵelementEnd()();
764
- i0.ɵɵelementStart(24, "div", 108)(25, "div", 109);
764
+ i0.ɵɵelementStart(24, "div", 109)(25, "div", 110);
765
765
  i0.ɵɵtext(26);
766
766
  i0.ɵɵelementEnd();
767
- i0.ɵɵelementStart(27, "div", 110);
767
+ i0.ɵɵelementStart(27, "div", 111);
768
768
  i0.ɵɵtext(28, "Depth");
769
769
  i0.ɵɵelementEnd()();
770
- i0.ɵɵelementStart(29, "div", 108)(30, "div", 111);
770
+ i0.ɵɵelementStart(29, "div", 109)(30, "div", 112);
771
771
  i0.ɵɵtext(31);
772
772
  i0.ɵɵelementEnd();
773
- i0.ɵɵelementStart(32, "div", 110);
773
+ i0.ɵɵelementStart(32, "div", 111);
774
774
  i0.ɵɵtext(33, "First Seen");
775
775
  i0.ɵɵelementEnd()()();
776
- i0.ɵɵconditionalCreate(34, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template, 19, 0, "div", 112);
777
- i0.ɵɵconditionalCreate(35, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_35_Template, 6, 0, "div", 113);
778
- i0.ɵɵconditionalCreate(36, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_36_Template, 6, 0, "div", 113);
779
- i0.ɵɵconditionalCreate(37, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template, 82, 25);
776
+ i0.ɵɵconditionalCreate(34, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_34_Template, 19, 0, "div", 113);
777
+ i0.ɵɵconditionalCreate(35, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_35_Template, 6, 0, "div", 114);
778
+ i0.ɵɵconditionalCreate(36, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_36_Template, 6, 0, "div", 114);
779
+ i0.ɵɵconditionalCreate(37, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Conditional_37_Template, 82, 25);
780
780
  } if (rf & 2) {
781
781
  const ctx_r2 = i0.ɵɵnextContext(4);
782
782
  i0.ɵɵadvance(2);
@@ -804,78 +804,78 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Condi
804
804
  i0.ɵɵadvance();
805
805
  i0.ɵɵconditional(ctx_r2.SelectedTagFull ? 37 : -1);
806
806
  } }
807
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
808
- i0.ɵɵelementStart(0, "div", 79);
809
- i0.ɵɵelement(1, "i", 173);
807
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
808
+ i0.ɵɵelementStart(0, "div", 80);
809
+ i0.ɵɵelement(1, "i", 174);
810
810
  i0.ɵɵelementStart(2, "p");
811
811
  i0.ɵɵtext(3, "Select a tag from the tree to view details");
812
812
  i0.ɵɵelementEnd()();
813
813
  } }
814
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template(rf, ctx) { if (rf & 1) {
814
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template(rf, ctx) { if (rf & 1) {
815
815
  const _r12 = i0.ɵɵgetCurrentView();
816
- i0.ɵɵelementStart(0, "div", 67)(1, "div", 68)(2, "div", 69)(3, "input", 70);
817
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.TaxTreeSearch, $event) || (ctx_r2.TaxTreeSearch = $event); return i0.ɵɵresetView($event); });
818
- i0.ɵɵlistener("input", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template_input_input_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.FilterTaxTree()); });
816
+ i0.ɵɵelementStart(0, "div", 68)(1, "div", 69)(2, "div", 70)(3, "input", 71);
817
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.TaxTreeSearch, $event) || (ctx_r2.TaxTreeSearch = $event); return i0.ɵɵresetView($event); });
818
+ i0.ɵɵlistener("input", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template_input_input_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.FilterTaxTree()); });
819
819
  i0.ɵɵelementEnd();
820
- i0.ɵɵelementStart(4, "button", 71);
821
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenCreateRootTag()); });
822
- i0.ɵɵelement(5, "i", 72);
820
+ i0.ɵɵelementStart(4, "button", 72);
821
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenCreateRootTag()); });
822
+ i0.ɵɵelement(5, "i", 73);
823
823
  i0.ɵɵelementEnd();
824
- i0.ɵɵelementStart(6, "button", 73);
825
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleMultiSelectMode()); });
826
- i0.ɵɵelement(7, "i", 74);
824
+ i0.ɵɵelementStart(6, "button", 74);
825
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleMultiSelectMode()); });
826
+ i0.ɵɵelement(7, "i", 75);
827
827
  i0.ɵɵelementEnd()();
828
- i0.ɵɵelementStart(8, "div", 75);
829
- i0.ɵɵlistener("dragover", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template_div_dragover_8_listener($event) { i0.ɵɵrestoreView(_r12); return i0.ɵɵresetView($event.preventDefault()); })("drop", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template_div_drop_8_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnDropToRoot($event)); });
830
- i0.ɵɵconditionalCreate(9, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_9_Template, 4, 0, "div", 55);
831
- i0.ɵɵrepeaterCreate(10, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_For_11_Template, 10, 22, "div", 76, _forTrack3);
828
+ i0.ɵɵelementStart(8, "div", 76);
829
+ i0.ɵɵlistener("dragover", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template_div_dragover_8_listener($event) { i0.ɵɵrestoreView(_r12); return i0.ɵɵresetView($event.preventDefault()); })("drop", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template_div_drop_8_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnDropToRoot($event)); });
830
+ i0.ɵɵconditionalCreate(9, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_9_Template, 4, 0, "div", 55);
831
+ i0.ɵɵrepeaterCreate(10, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_For_11_Template, 10, 22, "div", 77, _forTrack3);
832
832
  i0.ɵɵelementEnd();
833
- i0.ɵɵconditionalCreate(12, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_12_Template, 2, 0, "div", 77);
833
+ i0.ɵɵconditionalCreate(12, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_12_Template, 2, 0, "div", 78);
834
834
  i0.ɵɵelementEnd();
835
- i0.ɵɵelementStart(13, "div", 78);
836
- i0.ɵɵconditionalCreate(14, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_14_Template, 38, 11)(15, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Conditional_15_Template, 4, 0, "div", 79);
835
+ i0.ɵɵelementStart(13, "div", 79);
836
+ i0.ɵɵconditionalCreate(14, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_14_Template, 38, 11)(15, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Conditional_15_Template, 4, 0, "div", 80);
837
837
  i0.ɵɵelementEnd()();
838
- i0.ɵɵelementStart(16, "div", 80)(17, "span", 81);
838
+ i0.ɵɵelementStart(16, "div", 81)(17, "span", 82);
839
839
  i0.ɵɵtext(18, "Taxonomy Health");
840
840
  i0.ɵɵelementEnd();
841
- i0.ɵɵelementStart(19, "div", 82);
842
- i0.ɵɵelement(20, "span", 83);
843
- i0.ɵɵelementStart(21, "span", 84);
841
+ i0.ɵɵelementStart(19, "div", 83);
842
+ i0.ɵɵelement(20, "span", 84);
843
+ i0.ɵɵelementStart(21, "span", 85);
844
844
  i0.ɵɵtext(22);
845
845
  i0.ɵɵelementEnd();
846
- i0.ɵɵelementStart(23, "span", 85);
846
+ i0.ɵɵelementStart(23, "span", 86);
847
847
  i0.ɵɵtext(24, "Total");
848
848
  i0.ɵɵelementEnd()();
849
- i0.ɵɵelementStart(25, "div", 82);
850
- i0.ɵɵelement(26, "span", 86);
851
- i0.ɵɵelementStart(27, "span", 87);
849
+ i0.ɵɵelementStart(25, "div", 83);
850
+ i0.ɵɵelement(26, "span", 87);
851
+ i0.ɵɵelementStart(27, "span", 88);
852
852
  i0.ɵɵtext(28);
853
853
  i0.ɵɵelementEnd();
854
- i0.ɵɵelementStart(29, "span", 85);
854
+ i0.ɵɵelementStart(29, "span", 86);
855
855
  i0.ɵɵtext(30, "Healthy");
856
856
  i0.ɵɵelementEnd()();
857
- i0.ɵɵelementStart(31, "div", 82);
858
- i0.ɵɵelement(32, "span", 88);
859
- i0.ɵɵelementStart(33, "span", 89);
857
+ i0.ɵɵelementStart(31, "div", 83);
858
+ i0.ɵɵelement(32, "span", 89);
859
+ i0.ɵɵelementStart(33, "span", 90);
860
860
  i0.ɵɵtext(34);
861
861
  i0.ɵɵelementEnd();
862
- i0.ɵɵelementStart(35, "span", 85);
862
+ i0.ɵɵelementStart(35, "span", 86);
863
863
  i0.ɵɵtext(36, "Need Attention");
864
864
  i0.ɵɵelementEnd()();
865
- i0.ɵɵelementStart(37, "div", 82);
866
- i0.ɵɵelement(38, "span", 90);
867
- i0.ɵɵelementStart(39, "span", 91);
865
+ i0.ɵɵelementStart(37, "div", 83);
866
+ i0.ɵɵelement(38, "span", 91);
867
+ i0.ɵɵelementStart(39, "span", 92);
868
868
  i0.ɵɵtext(40);
869
869
  i0.ɵɵelementEnd();
870
- i0.ɵɵelementStart(41, "span", 85);
870
+ i0.ɵɵelementStart(41, "span", 86);
871
871
  i0.ɵɵtext(42, "Orphaned");
872
872
  i0.ɵɵelementEnd()();
873
- i0.ɵɵelementStart(43, "div", 82);
874
- i0.ɵɵelement(44, "span", 92);
875
- i0.ɵɵelementStart(45, "span", 93);
873
+ i0.ɵɵelementStart(43, "div", 83);
874
+ i0.ɵɵelement(44, "span", 93);
875
+ i0.ɵɵelementStart(45, "span", 94);
876
876
  i0.ɵɵtext(46);
877
877
  i0.ɵɵelementEnd();
878
- i0.ɵɵelementStart(47, "span", 85);
878
+ i0.ɵɵelementStart(47, "span", 86);
879
879
  i0.ɵɵtext(48, "Duplicate Candidates");
880
880
  i0.ɵɵelementEnd()()();
881
881
  } if (rf & 2) {
@@ -903,35 +903,35 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Templ
903
903
  i0.ɵɵadvance(6);
904
904
  i0.ɵɵtextInterpolate(ctx_r2.TaxHealth.Duplicates);
905
905
  } }
906
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_Conditional_13_Template(rf, ctx) { if (rf & 1) {
906
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_Conditional_13_Template(rf, ctx) { if (rf & 1) {
907
907
  i0.ɵɵelementStart(0, "div", 55);
908
- i0.ɵɵelement(1, "i", 180);
908
+ i0.ɵɵelement(1, "i", 181);
909
909
  i0.ɵɵelementStart(2, "p");
910
910
  i0.ɵɵtext(3, "No duplicate tags detected");
911
911
  i0.ɵɵelementEnd()();
912
912
  } }
913
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
914
- i0.ɵɵelement(0, "i", 14);
913
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
914
+ i0.ɵɵelement(0, "i", 11);
915
915
  i0.ɵɵtext(1, " Merging... ");
916
916
  } }
917
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
917
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
918
918
  i0.ɵɵtext(0, " Merge ");
919
919
  } }
920
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
920
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
921
921
  const _r28 = i0.ɵɵgetCurrentView();
922
- i0.ɵɵelementStart(0, "div", 182);
922
+ i0.ɵɵelementStart(0, "div", 183);
923
923
  i0.ɵɵtext(1);
924
924
  i0.ɵɵelementEnd();
925
- i0.ɵɵelementStart(2, "div", 183)(3, "span", 184);
926
- i0.ɵɵelement(4, "i", 185);
925
+ i0.ɵɵelementStart(2, "div", 184)(3, "span", 185);
926
+ i0.ɵɵelement(4, "i", 186);
927
927
  i0.ɵɵtext(5);
928
928
  i0.ɵɵelementEnd()();
929
- i0.ɵɵelementStart(6, "div", 186)(7, "button", 187);
930
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r28); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.MergeTags(pair_r29.TagAID, pair_r29.TagBID, pair_r29.TagA, pair_r29.TagB)); });
931
- i0.ɵɵconditionalCreate(8, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_8_Template, 2, 0)(9, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_9_Template, 1, 0);
929
+ i0.ɵɵelementStart(6, "div", 187)(7, "button", 188);
930
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r28); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.MergeTags(pair_r29.TagAID, pair_r29.TagBID, pair_r29.TagA, pair_r29.TagB)); });
931
+ i0.ɵɵconditionalCreate(8, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_8_Template, 2, 0)(9, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Conditional_9_Template, 1, 0);
932
932
  i0.ɵɵelementEnd();
933
- i0.ɵɵelementStart(10, "button", 188);
934
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r28); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DismissDuplicate(pair_r29)); });
933
+ i0.ɵɵelementStart(10, "button", 189);
934
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r28); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DismissDuplicate(pair_r29)); });
935
935
  i0.ɵɵtext(11, "Dismiss");
936
936
  i0.ɵɵelementEnd()();
937
937
  } if (rf & 2) {
@@ -946,43 +946,43 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_1
946
946
  i0.ɵɵadvance();
947
947
  i0.ɵɵconditional(ctx_r2.IsMerging ? 8 : 9);
948
948
  } }
949
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
950
- i0.ɵɵelement(0, "i", 14);
949
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
950
+ i0.ɵɵelement(0, "i", 11);
951
951
  i0.ɵɵtext(1, " Merging... ");
952
952
  } }
953
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
953
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
954
954
  i0.ɵɵtext(0, " Merge ");
955
955
  } }
956
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
956
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
957
957
  const _r30 = i0.ɵɵgetCurrentView();
958
- i0.ɵɵelementStart(0, "div", 182);
958
+ i0.ɵɵelementStart(0, "div", 183);
959
959
  i0.ɵɵtext(1);
960
960
  i0.ɵɵelementEnd();
961
- i0.ɵɵelementStart(2, "div", 189);
962
- i0.ɵɵelement(3, "i", 190);
961
+ i0.ɵɵelementStart(2, "div", 190);
962
+ i0.ɵɵelement(3, "i", 191);
963
963
  i0.ɵɵelementEnd();
964
- i0.ɵɵelementStart(4, "div", 183)(5, "div", 191);
965
- i0.ɵɵelement(6, "div", 192);
964
+ i0.ɵɵelementStart(4, "div", 184)(5, "div", 192);
965
+ i0.ɵɵelement(6, "div", 193);
966
966
  i0.ɵɵelementEnd();
967
- i0.ɵɵelementStart(7, "span", 193);
967
+ i0.ɵɵelementStart(7, "span", 194);
968
968
  i0.ɵɵtext(8);
969
969
  i0.ɵɵelementEnd()();
970
- i0.ɵɵelementStart(9, "div", 189);
971
- i0.ɵɵelement(10, "i", 190);
970
+ i0.ɵɵelementStart(9, "div", 190);
971
+ i0.ɵɵelement(10, "i", 191);
972
972
  i0.ɵɵelementEnd();
973
- i0.ɵɵelementStart(11, "div", 182);
973
+ i0.ɵɵelementStart(11, "div", 183);
974
974
  i0.ɵɵtext(12);
975
975
  i0.ɵɵelementEnd();
976
- i0.ɵɵelementStart(13, "div", 186)(14, "button", 187);
977
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r30); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.MergeTags(pair_r29.TagAID, pair_r29.TagBID, pair_r29.TagA, pair_r29.TagB)); });
978
- i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_15_Template, 2, 0)(16, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_16_Template, 1, 0);
976
+ i0.ɵɵelementStart(13, "div", 187)(14, "button", 188);
977
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r30); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.MergeTags(pair_r29.TagAID, pair_r29.TagBID, pair_r29.TagA, pair_r29.TagB)); });
978
+ i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_15_Template, 2, 0)(16, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Conditional_16_Template, 1, 0);
979
979
  i0.ɵɵelementEnd();
980
- i0.ɵɵelementStart(17, "button", 188);
981
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r30); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.MakeChildTag(pair_r29.TagAID, pair_r29.TagBID)); });
980
+ i0.ɵɵelementStart(17, "button", 189);
981
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r30); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.MakeChildTag(pair_r29.TagAID, pair_r29.TagBID)); });
982
982
  i0.ɵɵtext(18, "Make Child");
983
983
  i0.ɵɵelementEnd();
984
- i0.ɵɵelementStart(19, "button", 188);
985
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r30); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DismissDuplicate(pair_r29)); });
984
+ i0.ɵɵelementStart(19, "button", 189);
985
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r30); const pair_r29 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DismissDuplicate(pair_r29)); });
986
986
  i0.ɵɵtext(20, "Dismiss");
987
987
  i0.ɵɵelementEnd()();
988
988
  } if (rf & 2) {
@@ -1004,9 +1004,9 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_1
1004
1004
  i0.ɵɵadvance();
1005
1005
  i0.ɵɵconditional(ctx_r2.IsMerging ? 15 : 16);
1006
1006
  } }
1007
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Template(rf, ctx) { if (rf & 1) {
1008
- i0.ɵɵelementStart(0, "div", 181);
1009
- i0.ɵɵconditionalCreate(1, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_1_Template, 12, 4)(2, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Conditional_2_Template, 21, 11);
1007
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Template(rf, ctx) { if (rf & 1) {
1008
+ i0.ɵɵelementStart(0, "div", 182);
1009
+ i0.ɵɵconditionalCreate(1, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_1_Template, 12, 4)(2, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Conditional_2_Template, 21, 11);
1010
1010
  i0.ɵɵelementEnd();
1011
1011
  } if (rf & 2) {
1012
1012
  const pair_r29 = ctx.$implicit;
@@ -1014,25 +1014,25 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_1
1014
1014
  i0.ɵɵadvance();
1015
1015
  i0.ɵɵconditional(pair_r29.IsExactDuplicate ? 1 : 2);
1016
1016
  } }
1017
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
1018
- i0.ɵɵelementStart(0, "div", 174)(1, "div", 175)(2, "strong");
1017
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
1018
+ i0.ɵɵelementStart(0, "div", 175)(1, "div", 176)(2, "strong");
1019
1019
  i0.ɵɵtext(3);
1020
1020
  i0.ɵɵelementEnd();
1021
1021
  i0.ɵɵtext(4, " candidates found");
1022
1022
  i0.ɵɵelementEnd();
1023
- i0.ɵɵelementStart(5, "div", 176)(6, "strong");
1023
+ i0.ɵɵelementStart(5, "div", 177)(6, "strong");
1024
1024
  i0.ɵɵtext(7);
1025
1025
  i0.ɵɵelementEnd();
1026
1026
  i0.ɵɵtext(8, " high confidence (>85%)");
1027
1027
  i0.ɵɵelementEnd();
1028
- i0.ɵɵelementStart(9, "div", 177)(10, "strong");
1028
+ i0.ɵɵelementStart(9, "div", 178)(10, "strong");
1029
1029
  i0.ɵɵtext(11);
1030
1030
  i0.ɵɵelementEnd();
1031
1031
  i0.ɵɵtext(12, " moderate (70-85%)");
1032
1032
  i0.ɵɵelementEnd()();
1033
- i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_Conditional_13_Template, 4, 0, "div", 55);
1034
- i0.ɵɵelementStart(14, "div", 178);
1035
- i0.ɵɵrepeaterCreate(15, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_For_16_Template, 3, 5, "div", 179, i0.ɵɵrepeaterTrackByIndex);
1033
+ i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_Conditional_13_Template, 4, 0, "div", 55);
1034
+ i0.ɵɵelementStart(14, "div", 179);
1035
+ i0.ɵɵrepeaterCreate(15, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_For_16_Template, 3, 5, "div", 180, i0.ɵɵrepeaterTrackByIndex);
1036
1036
  i0.ɵɵelementEnd();
1037
1037
  } if (rf & 2) {
1038
1038
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1047,28 +1047,28 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_Templ
1047
1047
  i0.ɵɵadvance(2);
1048
1048
  i0.ɵɵrepeater(ctx_r2.TaxDuplicates);
1049
1049
  } }
1050
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1051
- i0.ɵɵelement(0, "i", 199);
1052
- } }
1053
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1050
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1054
1051
  i0.ɵɵelement(0, "i", 200);
1055
1052
  } }
1056
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1053
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1054
+ i0.ɵɵelement(0, "i", 201);
1055
+ } }
1056
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1057
1057
  i0.ɵɵelementStart(0, "div", 55);
1058
- i0.ɵɵelement(1, "i", 180);
1058
+ i0.ɵɵelement(1, "i", 181);
1059
1059
  i0.ɵɵelementStart(2, "p");
1060
1060
  i0.ɵɵtext(3, "No orphaned tags");
1061
1061
  i0.ɵɵelementEnd()();
1062
1062
  } }
1063
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_19_Template(rf, ctx) { if (rf & 1) {
1063
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_For_19_Template(rf, ctx) { if (rf & 1) {
1064
1064
  const _r32 = i0.ɵɵgetCurrentView();
1065
- i0.ɵɵelementStart(0, "div", 204)(1, "div", 205)(2, "span", 206);
1065
+ i0.ɵɵelementStart(0, "div", 205)(1, "div", 206)(2, "span", 207);
1066
1066
  i0.ɵɵtext(3);
1067
1067
  i0.ɵɵelementEnd();
1068
- i0.ɵɵelementStart(4, "input", 207);
1069
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_19_Template_input_change_4_listener() { const orphan_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleOrphanSelection(orphan_r33)); })("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_19_Template_input_click_4_listener($event) { i0.ɵɵrestoreView(_r32); return i0.ɵɵresetView($event.stopPropagation()); });
1068
+ i0.ɵɵelementStart(4, "input", 208);
1069
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_For_19_Template_input_change_4_listener() { const orphan_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleOrphanSelection(orphan_r33)); })("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_For_19_Template_input_click_4_listener($event) { i0.ɵɵrestoreView(_r32); return i0.ɵɵresetView($event.stopPropagation()); });
1070
1070
  i0.ɵɵelementEnd()();
1071
- i0.ɵɵelementStart(5, "div", 208)(6, "span");
1071
+ i0.ɵɵelementStart(5, "div", 209)(6, "span");
1072
1072
  i0.ɵɵtext(7, "Usage: ");
1073
1073
  i0.ɵɵelementStart(8, "strong");
1074
1074
  i0.ɵɵtext(9);
@@ -1078,17 +1078,17 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_1
1078
1078
  i0.ɵɵelementStart(12, "strong");
1079
1079
  i0.ɵɵtext(13);
1080
1080
  i0.ɵɵelementEnd()()();
1081
- i0.ɵɵelementStart(14, "div", 209)(15, "span");
1081
+ i0.ɵɵelementStart(14, "div", 210)(15, "span");
1082
1082
  i0.ɵɵtext(16);
1083
1083
  i0.ɵɵelementEnd();
1084
1084
  i0.ɵɵelementStart(17, "span");
1085
1085
  i0.ɵɵtext(18);
1086
1086
  i0.ɵɵelementEnd()();
1087
- i0.ɵɵelementStart(19, "div", 210)(20, "button", 211);
1088
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_19_Template_button_click_20_listener() { const orphan_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DeleteOrphan(orphan_r33)); });
1087
+ i0.ɵɵelementStart(19, "div", 211)(20, "button", 212);
1088
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_For_19_Template_button_click_20_listener() { const orphan_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DeleteOrphan(orphan_r33)); });
1089
1089
  i0.ɵɵtext(21, "Delete");
1090
1090
  i0.ɵɵelementEnd();
1091
- i0.ɵɵelementStart(22, "button", 212);
1091
+ i0.ɵɵelementStart(22, "button", 213);
1092
1092
  i0.ɵɵtext(23, "Ignore");
1093
1093
  i0.ɵɵelementEnd()()();
1094
1094
  } if (rf & 2) {
@@ -1106,32 +1106,32 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_1
1106
1106
  i0.ɵɵadvance(2);
1107
1107
  i0.ɵɵtextInterpolate1("Last: ", orphan_r33.LastSeen);
1108
1108
  } }
1109
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Template(rf, ctx) { if (rf & 1) {
1109
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Template(rf, ctx) { if (rf & 1) {
1110
1110
  const _r31 = i0.ɵɵgetCurrentView();
1111
- i0.ɵɵelementStart(0, "div", 194)(1, "span", 195);
1111
+ i0.ɵɵelementStart(0, "div", 195)(1, "span", 196);
1112
1112
  i0.ɵɵtext(2);
1113
1113
  i0.ɵɵelementEnd();
1114
- i0.ɵɵelementStart(3, "span", 196);
1114
+ i0.ɵɵelementStart(3, "span", 197);
1115
1115
  i0.ɵɵtext(4, "\u2014 no parent, no children, low usage");
1116
1116
  i0.ɵɵelementEnd();
1117
- i0.ɵɵelementStart(5, "div", 197)(6, "button", 198);
1118
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r31); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleAllOrphans()); });
1119
- i0.ɵɵconditionalCreate(7, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Conditional_7_Template, 1, 0, "i", 199)(8, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Conditional_8_Template, 1, 0, "i", 200);
1117
+ i0.ɵɵelementStart(5, "div", 198)(6, "button", 199);
1118
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r31); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleAllOrphans()); });
1119
+ i0.ɵɵconditionalCreate(7, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Conditional_7_Template, 1, 0, "i", 200)(8, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Conditional_8_Template, 1, 0, "i", 201);
1120
1120
  i0.ɵɵtext(9, " Select All ");
1121
1121
  i0.ɵɵelementEnd();
1122
- i0.ɵɵelementStart(10, "button", 201);
1123
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r31); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.BulkDeleteOrphans()); });
1124
- i0.ɵɵelement(11, "i", 131);
1122
+ i0.ɵɵelementStart(10, "button", 202);
1123
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r31); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.BulkDeleteOrphans()); });
1124
+ i0.ɵɵelement(11, "i", 132);
1125
1125
  i0.ɵɵtext(12, " Bulk Delete ");
1126
1126
  i0.ɵɵelementEnd();
1127
- i0.ɵɵelementStart(13, "button", 201);
1128
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r31); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DeleteAllOrphans()); });
1129
- i0.ɵɵelement(14, "i", 202);
1127
+ i0.ɵɵelementStart(13, "button", 202);
1128
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r31); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DeleteAllOrphans()); });
1129
+ i0.ɵɵelement(14, "i", 203);
1130
1130
  i0.ɵɵtext(15);
1131
1131
  i0.ɵɵelementEnd()()();
1132
- i0.ɵɵconditionalCreate(16, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Conditional_16_Template, 4, 0, "div", 55);
1133
- i0.ɵɵelementStart(17, "div", 203);
1134
- i0.ɵɵrepeaterCreate(18, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_For_19_Template, 24, 6, "div", 204, _forTrack3);
1132
+ i0.ɵɵconditionalCreate(16, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Conditional_16_Template, 4, 0, "div", 55);
1133
+ i0.ɵɵelementStart(17, "div", 204);
1134
+ i0.ɵɵrepeaterCreate(18, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_For_19_Template, 24, 6, "div", 205, _forTrack3);
1135
1135
  i0.ɵɵelementEnd();
1136
1136
  } if (rf & 2) {
1137
1137
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1146,11 +1146,11 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Templ
1146
1146
  i0.ɵɵadvance(2);
1147
1147
  i0.ɵɵrepeater(ctx_r2.TaxOrphans);
1148
1148
  } }
1149
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_For_2_Template(rf, ctx) { if (rf & 1) {
1150
- i0.ɵɵelementStart(0, "div", 214)(1, "div", 217);
1149
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_For_2_Template(rf, ctx) { if (rf & 1) {
1150
+ i0.ɵɵelementStart(0, "div", 215)(1, "div", 218);
1151
1151
  i0.ɵɵtext(2);
1152
1152
  i0.ɵɵelementEnd();
1153
- i0.ɵɵelementStart(3, "div", 218);
1153
+ i0.ɵɵelementStart(3, "div", 219);
1154
1154
  i0.ɵɵtext(4);
1155
1155
  i0.ɵɵelementEnd()();
1156
1156
  } if (rf & 2) {
@@ -1160,21 +1160,21 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_For_2
1160
1160
  i0.ɵɵadvance(2);
1161
1161
  i0.ɵɵtextInterpolate(kpi_r34.Label);
1162
1162
  } }
1163
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1163
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1164
1164
  i0.ɵɵelementStart(0, "div", 55);
1165
- i0.ɵɵelement(1, "i", 65);
1165
+ i0.ɵɵelement(1, "i", 66);
1166
1166
  i0.ɵɵelementStart(2, "p");
1167
1167
  i0.ɵɵtext(3, "No taxonomy data to visualize");
1168
1168
  i0.ɵɵelementEnd()();
1169
1169
  } }
1170
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
1170
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
1171
1171
  const _r35 = i0.ɵɵgetCurrentView();
1172
- i0.ɵɵelementStart(0, "div", 220);
1173
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_4_For_2_Template_div_click_0_listener() { const cell_r36 = i0.ɵɵrestoreView(_r35).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenTreemapDrillIn(cell_r36)); });
1174
- i0.ɵɵelementStart(1, "span", 221);
1172
+ i0.ɵɵelementStart(0, "div", 221);
1173
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_4_For_2_Template_div_click_0_listener() { const cell_r36 = i0.ɵɵrestoreView(_r35).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenTreemapDrillIn(cell_r36)); });
1174
+ i0.ɵɵelementStart(1, "span", 222);
1175
1175
  i0.ɵɵtext(2);
1176
1176
  i0.ɵɵelementEnd();
1177
- i0.ɵɵelementStart(3, "span", 222);
1177
+ i0.ɵɵelementStart(3, "span", 223);
1178
1178
  i0.ɵɵtext(4);
1179
1179
  i0.ɵɵelementEnd()();
1180
1180
  } if (rf & 2) {
@@ -1186,19 +1186,19 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Condi
1186
1186
  i0.ɵɵadvance(2);
1187
1187
  i0.ɵɵtextInterpolate1("", cell_r36.ItemCount, " items");
1188
1188
  } }
1189
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1190
- i0.ɵɵelementStart(0, "div", 215);
1191
- i0.ɵɵrepeaterCreate(1, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_4_For_2_Template, 5, 6, "div", 219, i0.ɵɵrepeaterTrackByIndex);
1189
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1190
+ i0.ɵɵelementStart(0, "div", 216);
1191
+ i0.ɵɵrepeaterCreate(1, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_4_For_2_Template, 5, 6, "div", 220, i0.ɵɵrepeaterTrackByIndex);
1192
1192
  i0.ɵɵelementEnd();
1193
1193
  } if (rf & 2) {
1194
1194
  const ctx_r2 = i0.ɵɵnextContext(4);
1195
1195
  i0.ɵɵadvance();
1196
1196
  i0.ɵɵrepeater(ctx_r2.TaxTreemapCells);
1197
1197
  } }
1198
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_25_For_5_Template(rf, ctx) { if (rf & 1) {
1199
- i0.ɵɵelementStart(0, "span", 134);
1198
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_25_For_5_Template(rf, ctx) { if (rf & 1) {
1199
+ i0.ɵɵelementStart(0, "span", 135);
1200
1200
  i0.ɵɵtext(1);
1201
- i0.ɵɵelementStart(2, "span", 136);
1201
+ i0.ɵɵelementStart(2, "span", 137);
1202
1202
  i0.ɵɵtext(3);
1203
1203
  i0.ɵɵelementEnd()();
1204
1204
  } if (rf & 2) {
@@ -1208,29 +1208,29 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Condi
1208
1208
  i0.ɵɵadvance(2);
1209
1209
  i0.ɵɵtextInterpolate(child_r38.ItemCount);
1210
1210
  } }
1211
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1212
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 132);
1211
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1212
+ i0.ɵɵelementStart(0, "div", 114)(1, "div", 133);
1213
1213
  i0.ɵɵtext(2, "Child Tags");
1214
1214
  i0.ɵɵelementEnd();
1215
- i0.ɵɵelementStart(3, "div", 133);
1216
- i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_25_For_5_Template, 4, 2, "span", 134, _forTrack3);
1215
+ i0.ɵɵelementStart(3, "div", 134);
1216
+ i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_25_For_5_Template, 4, 2, "span", 135, _forTrack3);
1217
1217
  i0.ɵɵelementEnd()();
1218
1218
  } if (rf & 2) {
1219
1219
  const ctx_r2 = i0.ɵɵnextContext(5);
1220
1220
  i0.ɵɵadvance(4);
1221
1221
  i0.ɵɵrepeater(ctx_r2.TreemapDrillInNode.Children);
1222
1222
  } }
1223
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_26_For_5_Template(rf, ctx) { if (rf & 1) {
1224
- i0.ɵɵelementStart(0, "div", 138)(1, "div", 139);
1223
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_26_For_5_Template(rf, ctx) { if (rf & 1) {
1224
+ i0.ɵɵelementStart(0, "div", 139)(1, "div", 140);
1225
1225
  i0.ɵɵelement(2, "i");
1226
1226
  i0.ɵɵelementEnd();
1227
- i0.ɵɵelementStart(3, "div", 140);
1227
+ i0.ɵɵelementStart(3, "div", 141);
1228
1228
  i0.ɵɵtext(4);
1229
1229
  i0.ɵɵelementEnd();
1230
- i0.ɵɵelementStart(5, "div", 141);
1230
+ i0.ɵɵelementStart(5, "div", 142);
1231
1231
  i0.ɵɵtext(6);
1232
1232
  i0.ɵɵelementEnd();
1233
- i0.ɵɵelementStart(7, "div", 142);
1233
+ i0.ɵɵelementStart(7, "div", 143);
1234
1234
  i0.ɵɵtext(8);
1235
1235
  i0.ɵɵelementEnd()();
1236
1236
  } if (rf & 2) {
@@ -1244,56 +1244,56 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Condi
1244
1244
  i0.ɵɵadvance(2);
1245
1245
  i0.ɵɵtextInterpolate(item_r39.Date);
1246
1246
  } }
1247
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_26_Template(rf, ctx) { if (rf & 1) {
1248
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 132);
1247
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_26_Template(rf, ctx) { if (rf & 1) {
1248
+ i0.ɵɵelementStart(0, "div", 114)(1, "div", 133);
1249
1249
  i0.ɵɵtext(2, "Recently Tagged Items");
1250
1250
  i0.ɵɵelementEnd();
1251
- i0.ɵɵelementStart(3, "div", 137);
1252
- i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_26_For_5_Template, 9, 5, "div", 138, i0.ɵɵrepeaterTrackByIndex);
1251
+ i0.ɵɵelementStart(3, "div", 138);
1252
+ i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_26_For_5_Template, 9, 5, "div", 139, i0.ɵɵrepeaterTrackByIndex);
1253
1253
  i0.ɵɵelementEnd()();
1254
1254
  } if (rf & 2) {
1255
1255
  const ctx_r2 = i0.ɵɵnextContext(5);
1256
1256
  i0.ɵɵadvance(4);
1257
1257
  i0.ɵɵrepeater(ctx_r2.TaxRecentItems);
1258
1258
  } }
1259
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1259
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1260
1260
  const _r37 = i0.ɵɵgetCurrentView();
1261
- i0.ɵɵelementStart(0, "div", 223);
1262
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.CloseTreemapDrillIn()); });
1263
- i0.ɵɵelementStart(1, "div", 224);
1264
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r37); return i0.ɵɵresetView($event.stopPropagation()); });
1265
- i0.ɵɵelementStart(2, "div", 225)(3, "h3");
1261
+ i0.ɵɵelementStart(0, "div", 224);
1262
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.CloseTreemapDrillIn()); });
1263
+ i0.ɵɵelementStart(1, "div", 225);
1264
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r37); return i0.ɵɵresetView($event.stopPropagation()); });
1265
+ i0.ɵɵelementStart(2, "div", 226)(3, "h3");
1266
1266
  i0.ɵɵelement(4, "i", 51);
1267
1267
  i0.ɵɵtext(5);
1268
1268
  i0.ɵɵelementEnd();
1269
- i0.ɵɵelementStart(6, "button", 226);
1270
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.CloseTreemapDrillIn()); });
1269
+ i0.ɵɵelementStart(6, "button", 227);
1270
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.CloseTreemapDrillIn()); });
1271
1271
  i0.ɵɵelement(7, "i", 53);
1272
1272
  i0.ɵɵelementEnd()();
1273
- i0.ɵɵelementStart(8, "div", 227)(9, "div", 107)(10, "div", 108)(11, "div", 109);
1273
+ i0.ɵɵelementStart(8, "div", 228)(9, "div", 108)(10, "div", 109)(11, "div", 110);
1274
1274
  i0.ɵɵtext(12);
1275
1275
  i0.ɵɵelementEnd();
1276
- i0.ɵɵelementStart(13, "div", 110);
1276
+ i0.ɵɵelementStart(13, "div", 111);
1277
1277
  i0.ɵɵtext(14, "Items Tagged");
1278
1278
  i0.ɵɵelementEnd()();
1279
- i0.ɵɵelementStart(15, "div", 108)(16, "div", 109);
1279
+ i0.ɵɵelementStart(15, "div", 109)(16, "div", 110);
1280
1280
  i0.ɵɵtext(17);
1281
1281
  i0.ɵɵelementEnd();
1282
- i0.ɵɵelementStart(18, "div", 110);
1282
+ i0.ɵɵelementStart(18, "div", 111);
1283
1283
  i0.ɵɵtext(19, "Avg Weight");
1284
1284
  i0.ɵɵelementEnd()();
1285
- i0.ɵɵelementStart(20, "div", 108)(21, "div", 109);
1285
+ i0.ɵɵelementStart(20, "div", 109)(21, "div", 110);
1286
1286
  i0.ɵɵtext(22);
1287
1287
  i0.ɵɵelementEnd();
1288
- i0.ɵɵelementStart(23, "div", 110);
1288
+ i0.ɵɵelementStart(23, "div", 111);
1289
1289
  i0.ɵɵtext(24, "Children");
1290
1290
  i0.ɵɵelementEnd()()();
1291
- i0.ɵɵconditionalCreate(25, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_25_Template, 6, 0, "div", 113);
1292
- i0.ɵɵconditionalCreate(26, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Conditional_26_Template, 6, 0, "div", 113);
1291
+ i0.ɵɵconditionalCreate(25, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_25_Template, 6, 0, "div", 114);
1292
+ i0.ɵɵconditionalCreate(26, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Conditional_26_Template, 6, 0, "div", 114);
1293
1293
  i0.ɵɵelementEnd();
1294
- i0.ɵɵelementStart(27, "div", 228)(28, "button", 57);
1295
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DrillInToTreeView(ctx_r2.TreemapDrillInNode)); });
1296
- i0.ɵɵelement(29, "i", 3);
1294
+ i0.ɵɵelementStart(27, "div", 229)(28, "button", 57);
1295
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DrillInToTreeView(ctx_r2.TreemapDrillInNode)); });
1296
+ i0.ɵɵelement(29, "i", 61);
1297
1297
  i0.ɵɵtext(30, " View in Tree ");
1298
1298
  i0.ɵɵelementEnd()()()();
1299
1299
  } if (rf & 2) {
@@ -1311,12 +1311,12 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Condi
1311
1311
  i0.ɵɵadvance();
1312
1312
  i0.ɵɵconditional(ctx_r2.TaxRecentItems.length > 0 ? 26 : -1);
1313
1313
  } }
1314
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
1315
- i0.ɵɵelementStart(0, "div", 213);
1316
- i0.ɵɵrepeaterCreate(1, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_For_2_Template, 5, 2, "div", 214, _forTrack4);
1314
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
1315
+ i0.ɵɵelementStart(0, "div", 214);
1316
+ i0.ɵɵrepeaterCreate(1, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_For_2_Template, 5, 2, "div", 215, _forTrack4);
1317
1317
  i0.ɵɵelementEnd();
1318
- i0.ɵɵconditionalCreate(3, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_3_Template, 4, 0, "div", 55)(4, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_4_Template, 3, 0, "div", 215);
1319
- i0.ɵɵconditionalCreate(5, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Conditional_5_Template, 31, 6, "div", 216);
1318
+ i0.ɵɵconditionalCreate(3, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_3_Template, 4, 0, "div", 55)(4, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_4_Template, 3, 0, "div", 216);
1319
+ i0.ɵɵconditionalCreate(5, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Conditional_5_Template, 31, 6, "div", 217);
1320
1320
  } if (rf & 2) {
1321
1321
  const ctx_r2 = i0.ɵɵnextContext(3);
1322
1322
  i0.ɵɵadvance();
@@ -1326,23 +1326,23 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Templ
1326
1326
  i0.ɵɵadvance(2);
1327
1327
  i0.ɵɵconditional(ctx_r2.ShowTreemapDrillIn && ctx_r2.TreemapDrillInNode ? 5 : -1);
1328
1328
  } }
1329
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Conditional_28_Template(rf, ctx) { if (rf & 1) {
1329
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Conditional_28_Template(rf, ctx) { if (rf & 1) {
1330
1330
  i0.ɵɵelementStart(0, "div", 55);
1331
- i0.ɵɵelement(1, "i", 66);
1331
+ i0.ɵɵelement(1, "i", 67);
1332
1332
  i0.ɵɵelementStart(2, "p");
1333
1333
  i0.ɵɵtext(3, "No audit events match the current filters");
1334
1334
  i0.ɵɵelementEnd()();
1335
1335
  } }
1336
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_For_31_Template(rf, ctx) { if (rf & 1) {
1337
- i0.ɵɵelementStart(0, "div", 235)(1, "div", 236);
1336
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_For_31_Template(rf, ctx) { if (rf & 1) {
1337
+ i0.ɵɵelementStart(0, "div", 236)(1, "div", 237);
1338
1338
  i0.ɵɵelement(2, "i");
1339
1339
  i0.ɵɵelementEnd();
1340
- i0.ɵɵelementStart(3, "div", 237)(4, "div", 238);
1340
+ i0.ɵɵelementStart(3, "div", 238)(4, "div", 239);
1341
1341
  i0.ɵɵtext(5);
1342
- i0.ɵɵelementStart(6, "span", 239);
1342
+ i0.ɵɵelementStart(6, "span", 240);
1343
1343
  i0.ɵɵtext(7);
1344
1344
  i0.ɵɵelementEnd()();
1345
- i0.ɵɵelementStart(8, "div", 240)(9, "span");
1345
+ i0.ɵɵelementStart(8, "div", 241)(9, "span");
1346
1346
  i0.ɵɵtext(10);
1347
1347
  i0.ɵɵelementEnd();
1348
1348
  i0.ɵɵelementStart(11, "span");
@@ -1364,54 +1364,54 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_For_3
1364
1364
  i0.ɵɵadvance(2);
1365
1365
  i0.ɵɵtextInterpolate(event_r41.Timestamp);
1366
1366
  } }
1367
- function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template(rf, ctx) { if (rf & 1) {
1367
+ function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template(rf, ctx) { if (rf & 1) {
1368
1368
  const _r40 = i0.ɵɵgetCurrentView();
1369
- i0.ɵɵelementStart(0, "div", 229)(1, "span", 230);
1369
+ i0.ɵɵelementStart(0, "div", 230)(1, "span", 231);
1370
1370
  i0.ɵɵtext(2, "Filter");
1371
1371
  i0.ɵɵelementEnd();
1372
- i0.ɵɵelementStart(3, "div", 231)(4, "label", 232)(5, "input", 233);
1373
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_5_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("created")); });
1372
+ i0.ɵɵelementStart(3, "div", 232)(4, "label", 233)(5, "input", 234);
1373
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_5_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("created")); });
1374
1374
  i0.ɵɵelementEnd();
1375
1375
  i0.ɵɵtext(6, " Created ");
1376
1376
  i0.ɵɵelementEnd();
1377
- i0.ɵɵelementStart(7, "label", 232)(8, "input", 233);
1378
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_8_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("merged")); });
1377
+ i0.ɵɵelementStart(7, "label", 233)(8, "input", 234);
1378
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_8_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("merged")); });
1379
1379
  i0.ɵɵelementEnd();
1380
1380
  i0.ɵɵtext(9, " Merged ");
1381
1381
  i0.ɵɵelementEnd();
1382
- i0.ɵɵelementStart(10, "label", 232)(11, "input", 233);
1383
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_11_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("moved")); });
1382
+ i0.ɵɵelementStart(10, "label", 233)(11, "input", 234);
1383
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_11_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("moved")); });
1384
1384
  i0.ɵɵelementEnd();
1385
1385
  i0.ɵɵtext(12, " Moved ");
1386
1386
  i0.ɵɵelementEnd();
1387
- i0.ɵɵelementStart(13, "label", 232)(14, "input", 233);
1388
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_14_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("deleted")); });
1387
+ i0.ɵɵelementStart(13, "label", 233)(14, "input", 234);
1388
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_14_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("deleted")); });
1389
1389
  i0.ɵɵelementEnd();
1390
1390
  i0.ɵɵtext(15, " Deleted ");
1391
1391
  i0.ɵɵelementEnd();
1392
- i0.ɵɵelementStart(16, "label", 232)(17, "input", 233);
1393
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_17_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("renamed")); });
1392
+ i0.ɵɵelementStart(16, "label", 233)(17, "input", 234);
1393
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_17_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("renamed")); });
1394
1394
  i0.ɵɵelementEnd();
1395
1395
  i0.ɵɵtext(18, " Renamed ");
1396
1396
  i0.ɵɵelementEnd();
1397
- i0.ɵɵelementStart(19, "label", 232)(20, "input", 233);
1398
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_20_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("deprecated")); });
1397
+ i0.ɵɵelementStart(19, "label", 233)(20, "input", 234);
1398
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_20_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("deprecated")); });
1399
1399
  i0.ɵɵelementEnd();
1400
1400
  i0.ɵɵtext(21, " Deprecated ");
1401
1401
  i0.ɵɵelementEnd();
1402
- i0.ɵɵelementStart(22, "label", 232)(23, "input", 233);
1403
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_23_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("split")); });
1402
+ i0.ɵɵelementStart(22, "label", 233)(23, "input", 234);
1403
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_23_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("split")); });
1404
1404
  i0.ɵɵelementEnd();
1405
1405
  i0.ɵɵtext(24, " Split ");
1406
1406
  i0.ɵɵelementEnd();
1407
- i0.ɵɵelementStart(25, "label", 232)(26, "input", 233);
1408
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template_input_change_26_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("reactivated")); });
1407
+ i0.ɵɵelementStart(25, "label", 233)(26, "input", 234);
1408
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template_input_change_26_listener() { i0.ɵɵrestoreView(_r40); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleTaxAuditFilter("reactivated")); });
1409
1409
  i0.ɵɵelementEnd();
1410
1410
  i0.ɵɵtext(27, " Reactivated ");
1411
1411
  i0.ɵɵelementEnd()()();
1412
- i0.ɵɵconditionalCreate(28, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Conditional_28_Template, 4, 0, "div", 55);
1413
- i0.ɵɵelementStart(29, "div", 234);
1414
- i0.ɵɵrepeaterCreate(30, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_For_31_Template, 13, 8, "div", 235, i0.ɵɵrepeaterTrackByIndex);
1412
+ i0.ɵɵconditionalCreate(28, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Conditional_28_Template, 4, 0, "div", 55);
1413
+ i0.ɵɵelementStart(29, "div", 235);
1414
+ i0.ɵɵrepeaterCreate(30, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_For_31_Template, 13, 8, "div", 236, i0.ɵɵrepeaterTrackByIndex);
1415
1415
  i0.ɵɵelementEnd();
1416
1416
  } if (rf & 2) {
1417
1417
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1436,7 +1436,7 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Templ
1436
1436
  i0.ɵɵadvance(2);
1437
1437
  i0.ɵɵrepeater(ctx_r2.GetFilteredAuditEvents());
1438
1438
  } }
1439
- function TagsResourceComponent_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1439
+ function TagsResourceComponent_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1440
1440
  const _r11 = i0.ɵɵgetCurrentView();
1441
1441
  i0.ɵɵelementStart(0, "div", 17)(1, "div")(2, "div", 18);
1442
1442
  i0.ɵɵtext(3, "Taxonomy Governance");
@@ -1447,43 +1447,43 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Template(rf, ctx) {
1447
1447
  i0.ɵɵtext(7);
1448
1448
  i0.ɵɵelementEnd()()();
1449
1449
  i0.ɵɵelementStart(8, "div", 20)(9, "button", 57);
1450
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RefreshTaxonomyData()); });
1450
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RefreshTaxonomyData()); });
1451
1451
  i0.ɵɵelement(10, "i", 58);
1452
1452
  i0.ɵɵtext(11, " Refresh ");
1453
1453
  i0.ɵɵelementEnd()()();
1454
1454
  i0.ɵɵelementStart(12, "div", 59)(13, "div", 60);
1455
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Template_div_click_13_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("tree")); });
1456
- i0.ɵɵelement(14, "i", 3);
1455
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Template_div_click_13_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("tree")); });
1456
+ i0.ɵɵelement(14, "i", 61);
1457
1457
  i0.ɵɵtext(15, " Tree View ");
1458
1458
  i0.ɵɵelementEnd();
1459
1459
  i0.ɵɵelementStart(16, "div", 60);
1460
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("duplicates")); });
1461
- i0.ɵɵelement(17, "i", 61);
1460
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("duplicates")); });
1461
+ i0.ɵɵelement(17, "i", 62);
1462
1462
  i0.ɵɵtext(18, " Duplicates ");
1463
- i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_19_Template, 2, 1, "span", 62);
1463
+ i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_19_Template, 2, 1, "span", 63);
1464
1464
  i0.ɵɵelementEnd();
1465
1465
  i0.ɵɵelementStart(20, "div", 60);
1466
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Template_div_click_20_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("orphans")); });
1467
- i0.ɵɵelement(21, "i", 63);
1466
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Template_div_click_20_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("orphans")); });
1467
+ i0.ɵɵelement(21, "i", 64);
1468
1468
  i0.ɵɵtext(22, " Orphans ");
1469
- i0.ɵɵconditionalCreate(23, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_23_Template, 2, 1, "span", 64);
1469
+ i0.ɵɵconditionalCreate(23, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_23_Template, 2, 1, "span", 65);
1470
1470
  i0.ɵɵelementEnd();
1471
1471
  i0.ɵɵelementStart(24, "div", 60);
1472
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("treemap")); });
1473
- i0.ɵɵelement(25, "i", 65);
1472
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("treemap")); });
1473
+ i0.ɵɵelement(25, "i", 66);
1474
1474
  i0.ɵɵtext(26, " Treemap ");
1475
1475
  i0.ɵɵelementEnd();
1476
1476
  i0.ɵɵelementStart(27, "div", 60);
1477
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_1_Template_div_click_27_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("audit")); });
1478
- i0.ɵɵelement(28, "i", 66);
1477
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_1_Template_div_click_27_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SwitchTaxSubTab("audit")); });
1478
+ i0.ɵɵelement(28, "i", 67);
1479
1479
  i0.ɵɵtext(29, " Audit Log ");
1480
1480
  i0.ɵɵelementEnd()();
1481
1481
  i0.ɵɵelementStart(30, "div", 22);
1482
- i0.ɵɵconditionalCreate(31, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_31_Template, 49, 11);
1483
- i0.ɵɵconditionalCreate(32, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_32_Template, 17, 4);
1484
- i0.ɵɵconditionalCreate(33, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_33_Template, 20, 4);
1485
- i0.ɵɵconditionalCreate(34, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_34_Template, 6, 2);
1486
- i0.ɵɵconditionalCreate(35, TagsResourceComponent_Conditional_15_Conditional_1_Conditional_35_Template, 32, 9);
1482
+ i0.ɵɵconditionalCreate(31, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_31_Template, 49, 11);
1483
+ i0.ɵɵconditionalCreate(32, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_32_Template, 17, 4);
1484
+ i0.ɵɵconditionalCreate(33, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_33_Template, 20, 4);
1485
+ i0.ɵɵconditionalCreate(34, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_34_Template, 6, 2);
1486
+ i0.ɵɵconditionalCreate(35, TagsResourceComponent_Conditional_14_Conditional_1_Conditional_35_Template, 32, 9);
1487
1487
  i0.ɵɵelementEnd();
1488
1488
  } if (rf & 2) {
1489
1489
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -1514,16 +1514,16 @@ function TagsResourceComponent_Conditional_15_Conditional_1_Template(rf, ctx) {
1514
1514
  i0.ɵɵadvance();
1515
1515
  i0.ɵɵconditional(ctx_r2.TaxSubTab === "audit" ? 35 : -1);
1516
1516
  } }
1517
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1518
- i0.ɵɵelement(0, "i", 14);
1517
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1518
+ i0.ɵɵelement(0, "i", 11);
1519
1519
  i0.ɵɵtext(1, " Running\u2026 ");
1520
1520
  } }
1521
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1522
- i0.ɵɵelement(0, "i", 15);
1521
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1522
+ i0.ɵɵelement(0, "i", 12);
1523
1523
  i0.ɵɵtext(1, " Run Tag Health ");
1524
1524
  } }
1525
- function TagsResourceComponent_Conditional_15_Conditional_2_For_22_Template(rf, ctx) { if (rf & 1) {
1526
- i0.ɵɵelementStart(0, "option", 247);
1525
+ function TagsResourceComponent_Conditional_14_Conditional_2_For_22_Template(rf, ctx) { if (rf & 1) {
1526
+ i0.ɵɵelementStart(0, "option", 248);
1527
1527
  i0.ɵɵtext(1);
1528
1528
  i0.ɵɵelementEnd();
1529
1529
  } if (rf & 2) {
@@ -1532,20 +1532,20 @@ function TagsResourceComponent_Conditional_15_Conditional_2_For_22_Template(rf,
1532
1532
  i0.ɵɵadvance();
1533
1533
  i0.ɵɵtextInterpolate(r_r43);
1534
1534
  } }
1535
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
1535
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
1536
1536
  const _r44 = i0.ɵɵgetCurrentView();
1537
- i0.ɵɵelementStart(0, "div", 251)(1, "strong");
1537
+ i0.ɵɵelementStart(0, "div", 252)(1, "strong");
1538
1538
  i0.ɵɵtext(2);
1539
1539
  i0.ɵɵelementEnd();
1540
- i0.ɵɵelement(3, "span", 249);
1541
- i0.ɵɵelementStart(4, "button", 255);
1542
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_29_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.BulkApprove()); });
1543
- i0.ɵɵelement(5, "i", 256);
1540
+ i0.ɵɵelement(3, "span", 250);
1541
+ i0.ɵɵelementStart(4, "button", 256);
1542
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_29_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.BulkApprove()); });
1543
+ i0.ɵɵelement(5, "i", 257);
1544
1544
  i0.ɵɵtext(6, " Approve all (auto-pick best) ");
1545
1545
  i0.ɵɵelementEnd();
1546
- i0.ɵɵelementStart(7, "button", 257);
1547
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_29_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.BulkReject()); });
1548
- i0.ɵɵelement(8, "i", 172);
1546
+ i0.ɵɵelementStart(7, "button", 258);
1547
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_29_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.BulkReject()); });
1548
+ i0.ɵɵelement(8, "i", 173);
1549
1549
  i0.ɵɵtext(9, " Reject ");
1550
1550
  i0.ɵɵelementEnd()();
1551
1551
  } if (rf & 2) {
@@ -1557,16 +1557,16 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_29_Templ
1557
1557
  i0.ɵɵadvance(3);
1558
1558
  i0.ɵɵproperty("disabled", ctx_r2.SuggestionBulkInProgress);
1559
1559
  } }
1560
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1560
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1561
1561
  i0.ɵɵelementStart(0, "div", 55);
1562
- i0.ɵɵelement(1, "i", 258);
1562
+ i0.ɵɵelement(1, "i", 259);
1563
1563
  i0.ɵɵelementStart(2, "p");
1564
1564
  i0.ɵɵtext(3, "No pending suggestions.");
1565
1565
  i0.ɵɵelementEnd()();
1566
1566
  } }
1567
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1567
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1568
1568
  i0.ɵɵtext(0);
1569
- i0.ɵɵelementStart(1, "span", 265);
1569
+ i0.ɵɵelementStart(1, "span", 266);
1570
1570
  i0.ɵɵtext(2);
1571
1571
  i0.ɵɵelementEnd();
1572
1572
  } if (rf & 2) {
@@ -1575,13 +1575,13 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_1
1575
1575
  i0.ɵɵadvance(2);
1576
1576
  i0.ɵɵtextInterpolate(row_r47.BestMatchPath);
1577
1577
  } }
1578
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1579
- i0.ɵɵelementStart(0, "span", 263);
1578
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1579
+ i0.ɵɵelementStart(0, "span", 264);
1580
1580
  i0.ɵɵtext(1, "\u2014 no match \u2014");
1581
1581
  i0.ɵɵelementEnd();
1582
1582
  } }
1583
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1584
- i0.ɵɵelementStart(0, "span", 267);
1583
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1584
+ i0.ɵɵelementStart(0, "span", 268);
1585
1585
  i0.ɵɵelement(1, "span");
1586
1586
  i0.ɵɵelementEnd();
1587
1587
  i0.ɵɵtext(2);
@@ -1593,14 +1593,14 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_1
1593
1593
  i0.ɵɵadvance();
1594
1594
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 3, row_r47.BestMatchScore, "1.3-3"), " ");
1595
1595
  } }
1596
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1597
- i0.ɵɵelementStart(0, "span", 263);
1596
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1597
+ i0.ɵɵelementStart(0, "span", 264);
1598
1598
  i0.ɵɵtext(1, "\u2014");
1599
1599
  i0.ɵɵelementEnd();
1600
1600
  } }
1601
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1602
- i0.ɵɵelementStart(0, "span", 265);
1603
- i0.ɵɵelement(1, "i", 14);
1601
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1602
+ i0.ɵɵelementStart(0, "span", 266);
1603
+ i0.ɵɵelement(1, "i", 11);
1604
1604
  i0.ɵɵtext(2);
1605
1605
  i0.ɵɵelementEnd();
1606
1606
  } if (rf & 2) {
@@ -1608,35 +1608,35 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_1
1608
1608
  i0.ɵɵadvance(2);
1609
1609
  i0.ɵɵtextInterpolate1(" ", row_r47.dispositionInProgress, "\u2026 ");
1610
1610
  } }
1611
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1611
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1612
1612
  const _r49 = i0.ɵɵgetCurrentView();
1613
- i0.ɵɵelementStart(0, "button", 271);
1614
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Conditional_3_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r49); const row_r47 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.DispositionSuggestion(row_r47, "merge"); return i0.ɵɵresetView($event.stopPropagation()); });
1615
- i0.ɵɵelement(1, "i", 272);
1613
+ i0.ɵɵelementStart(0, "button", 272);
1614
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Conditional_3_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r49); const row_r47 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.DispositionSuggestion(row_r47, "merge"); return i0.ɵɵresetView($event.stopPropagation()); });
1615
+ i0.ɵɵelement(1, "i", 273);
1616
1616
  i0.ɵɵelementEnd();
1617
1617
  } }
1618
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1618
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1619
1619
  const _r48 = i0.ɵɵgetCurrentView();
1620
- i0.ɵɵelementStart(0, "div", 266)(1, "button", 268);
1621
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r48); const row_r47 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.DispositionSuggestion(row_r47, "create-new"); return i0.ɵɵresetView($event.stopPropagation()); });
1622
- i0.ɵɵelement(2, "i", 72);
1623
- i0.ɵɵelementEnd();
1624
- i0.ɵɵconditionalCreate(3, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Conditional_3_Template, 2, 0, "button", 269);
1625
- i0.ɵɵelementStart(4, "button", 270);
1626
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r48); const row_r47 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.DispositionSuggestion(row_r47, "reject"); return i0.ɵɵresetView($event.stopPropagation()); });
1627
- i0.ɵɵelement(5, "i", 172);
1620
+ i0.ɵɵelementStart(0, "div", 267)(1, "button", 269);
1621
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r48); const row_r47 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.DispositionSuggestion(row_r47, "create-new"); return i0.ɵɵresetView($event.stopPropagation()); });
1622
+ i0.ɵɵelement(2, "i", 73);
1623
+ i0.ɵɵelementEnd();
1624
+ i0.ɵɵconditionalCreate(3, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Conditional_3_Template, 2, 0, "button", 270);
1625
+ i0.ɵɵelementStart(4, "button", 271);
1626
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r48); const row_r47 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.DispositionSuggestion(row_r47, "reject"); return i0.ɵɵresetView($event.stopPropagation()); });
1627
+ i0.ɵɵelement(5, "i", 173);
1628
1628
  i0.ɵɵelementEnd()();
1629
1629
  } if (rf & 2) {
1630
1630
  const row_r47 = i0.ɵɵnextContext().$implicit;
1631
1631
  i0.ɵɵadvance(3);
1632
1632
  i0.ɵɵconditional(row_r47.BestMatchTagID ? 3 : -1);
1633
1633
  } }
1634
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Template(rf, ctx) { if (rf & 1) {
1634
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Template(rf, ctx) { if (rf & 1) {
1635
1635
  const _r46 = i0.ɵɵgetCurrentView();
1636
- i0.ɵɵelementStart(0, "tr", 261);
1637
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Template_tr_click_0_listener() { const row_r47 = i0.ɵɵrestoreView(_r46).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectSuggestion(row_r47)); });
1638
- i0.ɵɵelementStart(1, "td")(2, "input", 262);
1639
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Template_input_click_2_listener($event) { const row_r47 = i0.ɵɵrestoreView(_r46).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleSuggestionSelected(row_r47, $event)); });
1636
+ i0.ɵɵelementStart(0, "tr", 262);
1637
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Template_tr_click_0_listener() { const row_r47 = i0.ɵɵrestoreView(_r46).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectSuggestion(row_r47)); });
1638
+ i0.ɵɵelementStart(1, "td")(2, "input", 263);
1639
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Template_input_click_2_listener($event) { const row_r47 = i0.ɵɵrestoreView(_r46).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleSuggestionSelected(row_r47, $event)); });
1640
1640
  i0.ɵɵelementEnd()();
1641
1641
  i0.ɵɵelementStart(3, "td")(4, "strong");
1642
1642
  i0.ɵɵtext(5);
@@ -1645,17 +1645,17 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_1
1645
1645
  i0.ɵɵtext(8);
1646
1646
  i0.ɵɵelementEnd()();
1647
1647
  i0.ɵɵelementStart(9, "td");
1648
- i0.ɵɵconditionalCreate(10, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_10_Template, 3, 2)(11, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_11_Template, 2, 0, "span", 263);
1648
+ i0.ɵɵconditionalCreate(10, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_10_Template, 3, 2)(11, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_11_Template, 2, 0, "span", 264);
1649
1649
  i0.ɵɵelementEnd();
1650
- i0.ɵɵelementStart(12, "td", 264);
1651
- i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_13_Template, 4, 6)(14, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_14_Template, 2, 0, "span", 263);
1650
+ i0.ɵɵelementStart(12, "td", 265);
1651
+ i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_13_Template, 4, 6)(14, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_14_Template, 2, 0, "span", 264);
1652
1652
  i0.ɵɵelementEnd();
1653
- i0.ɵɵelementStart(15, "td", 263);
1653
+ i0.ɵɵelementStart(15, "td", 264);
1654
1654
  i0.ɵɵtext(16);
1655
1655
  i0.ɵɵpipe(17, "date");
1656
1656
  i0.ɵɵelementEnd();
1657
1657
  i0.ɵɵelementStart(18, "td");
1658
- i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_19_Template, 3, 1, "span", 265)(20, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Conditional_20_Template, 6, 1, "div", 266);
1658
+ i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_19_Template, 3, 1, "span", 266)(20, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Conditional_20_Template, 6, 1, "div", 267);
1659
1659
  i0.ɵɵelementEnd()();
1660
1660
  } if (rf & 2) {
1661
1661
  const row_r47 = ctx.$implicit;
@@ -1678,10 +1678,10 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_1
1678
1678
  i0.ɵɵadvance(3);
1679
1679
  i0.ɵɵconditional(row_r47.dispositionInProgress ? 19 : 20);
1680
1680
  } }
1681
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
1681
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
1682
1682
  const _r45 = i0.ɵɵgetCurrentView();
1683
- i0.ɵɵelementStart(0, "table", 253)(1, "thead")(2, "tr")(3, "th", 259)(4, "input", 233);
1684
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r45); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleAllSuggestions($event.target.checked)); });
1683
+ i0.ɵɵelementStart(0, "table", 254)(1, "thead")(2, "tr")(3, "th", 260)(4, "input", 234);
1684
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r45); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleAllSuggestions($event.target.checked)); });
1685
1685
  i0.ɵɵelementEnd()();
1686
1686
  i0.ɵɵelementStart(5, "th");
1687
1687
  i0.ɵɵtext(6, "Proposed name");
@@ -1701,7 +1701,7 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_Templ
1701
1701
  i0.ɵɵelement(15, "th");
1702
1702
  i0.ɵɵelementEnd()();
1703
1703
  i0.ɵɵelementStart(16, "tbody");
1704
- i0.ɵɵrepeaterCreate(17, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_For_18_Template, 21, 17, "tr", 260, _forTrack3);
1704
+ i0.ɵɵrepeaterCreate(17, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_For_18_Template, 21, 17, "tr", 261, _forTrack3);
1705
1705
  i0.ɵɵelementEnd()();
1706
1706
  } if (rf & 2) {
1707
1707
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1710,21 +1710,21 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_Templ
1710
1710
  i0.ɵɵadvance(13);
1711
1711
  i0.ɵɵrepeater(ctx_r2.SuggestionRowsFiltered);
1712
1712
  } }
1713
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1713
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1714
1714
  i0.ɵɵtext(0);
1715
1715
  i0.ɵɵpipe(1, "number");
1716
1716
  } if (rf & 2) {
1717
1717
  const ctx_r2 = i0.ɵɵnextContext(4);
1718
1718
  i0.ɵɵtextInterpolate1(" \u00B7 ", i0.ɵɵpipeBind2(1, 1, ctx_r2.SuggestionSelected.BestMatchScore, "1.3-3"), " ");
1719
1719
  } }
1720
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1720
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1721
1721
  i0.ɵɵelementStart(0, "h4");
1722
1722
  i0.ɵɵtext(1, "Proposes merge into");
1723
1723
  i0.ɵɵelementEnd();
1724
- i0.ɵɵelementStart(2, "div", 282)(3, "div", 249)(4, "div", 274);
1724
+ i0.ɵɵelementStart(2, "div", 283)(3, "div", 250)(4, "div", 275);
1725
1725
  i0.ɵɵtext(5);
1726
1726
  i0.ɵɵelementEnd();
1727
- i0.ɵɵelementStart(6, "div", 265);
1727
+ i0.ɵɵelementStart(6, "div", 266);
1728
1728
  i0.ɵɵtext(7);
1729
1729
  i0.ɵɵelementEnd()()();
1730
1730
  } if (rf & 2) {
@@ -1734,11 +1734,11 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Condi
1734
1734
  i0.ɵɵadvance(2);
1735
1735
  i0.ɵɵtextInterpolate(ctx_r2.SuggestionSelected.BestMatchPath);
1736
1736
  } }
1737
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1737
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1738
1738
  i0.ɵɵelementStart(0, "h4");
1739
1739
  i0.ɵɵtext(1, "Source text");
1740
1740
  i0.ɵɵelementEnd();
1741
- i0.ɵɵelementStart(2, "p", 277);
1741
+ i0.ɵɵelementStart(2, "p", 278);
1742
1742
  i0.ɵɵtext(3);
1743
1743
  i0.ɵɵelementEnd();
1744
1744
  } if (rf & 2) {
@@ -1746,7 +1746,7 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Condi
1746
1746
  i0.ɵɵadvance(3);
1747
1747
  i0.ɵɵtextInterpolate1("\"", ctx_r2.SuggestionSelected.SourceText, "\"");
1748
1748
  } }
1749
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1749
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1750
1750
  i0.ɵɵtext(0, " Re-point any free-text ContentItemTag rows whose Tag matches \"");
1751
1751
  i0.ɵɵelementStart(1, "strong");
1752
1752
  i0.ɵɵtext(2);
@@ -1763,7 +1763,7 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Condi
1763
1763
  i0.ɵɵadvance(3);
1764
1764
  i0.ɵɵtextInterpolate(ctx_r2.SuggestionSelected.BestMatchName);
1765
1765
  } }
1766
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1766
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1767
1767
  i0.ɵɵtext(0, " Create a new tag named \"");
1768
1768
  i0.ɵɵelementStart(1, "strong");
1769
1769
  i0.ɵɵtext(2);
@@ -1774,52 +1774,52 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Condi
1774
1774
  i0.ɵɵadvance(2);
1775
1775
  i0.ɵɵtextInterpolate(ctx_r2.SuggestionSelected.ProposedName);
1776
1776
  } }
1777
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1777
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1778
1778
  const _r51 = i0.ɵɵgetCurrentView();
1779
- i0.ɵɵelementStart(0, "button", 167);
1780
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_22_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r51); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DispositionSuggestion(ctx_r2.SuggestionSelected, "merge")); });
1781
- i0.ɵɵelement(1, "i", 272);
1779
+ i0.ɵɵelementStart(0, "button", 168);
1780
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_22_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r51); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DispositionSuggestion(ctx_r2.SuggestionSelected, "merge")); });
1781
+ i0.ɵɵelement(1, "i", 273);
1782
1782
  i0.ɵɵtext(2, " Merge ");
1783
1783
  i0.ɵɵelementEnd();
1784
1784
  } if (rf & 2) {
1785
1785
  const ctx_r2 = i0.ɵɵnextContext(4);
1786
1786
  i0.ɵɵproperty("disabled", !!ctx_r2.SuggestionSelected.dispositionInProgress);
1787
1787
  } }
1788
- function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
1788
+ function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
1789
1789
  const _r50 = i0.ɵɵgetCurrentView();
1790
- i0.ɵɵelementStart(0, "aside", 254)(1, "div", 273)(2, "div")(3, "div", 274);
1790
+ i0.ɵɵelementStart(0, "aside", 255)(1, "div", 274)(2, "div")(3, "div", 275);
1791
1791
  i0.ɵɵtext(4);
1792
1792
  i0.ɵɵelementEnd();
1793
- i0.ɵɵelementStart(5, "div", 265);
1793
+ i0.ɵɵelementStart(5, "div", 266);
1794
1794
  i0.ɵɵtext(6);
1795
1795
  i0.ɵɵpipe(7, "date");
1796
1796
  i0.ɵɵelementEnd()();
1797
- i0.ɵɵelementStart(8, "button", 275);
1798
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r50); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrawer()); });
1799
- i0.ɵɵelement(9, "i", 172);
1797
+ i0.ɵɵelementStart(8, "button", 276);
1798
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r50); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrawer()); });
1799
+ i0.ɵɵelement(9, "i", 173);
1800
1800
  i0.ɵɵelementEnd()();
1801
- i0.ɵɵelementStart(10, "div", 276)(11, "span");
1801
+ i0.ɵɵelementStart(10, "div", 277)(11, "span");
1802
1802
  i0.ɵɵtext(12);
1803
- i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_13_Template, 2, 4);
1803
+ i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_13_Template, 2, 4);
1804
1804
  i0.ɵɵelementEnd();
1805
- i0.ɵɵconditionalCreate(14, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_14_Template, 8, 2);
1806
- i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_15_Template, 4, 1);
1805
+ i0.ɵɵconditionalCreate(14, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_14_Template, 8, 2);
1806
+ i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_15_Template, 4, 1);
1807
1807
  i0.ɵɵelementStart(16, "h4");
1808
1808
  i0.ɵɵtext(17, "If approved");
1809
1809
  i0.ɵɵelementEnd();
1810
- i0.ɵɵelementStart(18, "p", 277);
1811
- i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_19_Template, 7, 2)(20, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_20_Template, 4, 1);
1810
+ i0.ɵɵelementStart(18, "p", 278);
1811
+ i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_19_Template, 7, 2)(20, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_20_Template, 4, 1);
1812
1812
  i0.ɵɵelementEnd()();
1813
- i0.ɵɵelementStart(21, "div", 278);
1814
- i0.ɵɵconditionalCreate(22, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Conditional_22_Template, 3, 1, "button", 279);
1815
- i0.ɵɵelementStart(23, "button", 280);
1816
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r50); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DispositionSuggestion(ctx_r2.SuggestionSelected, "create-new")); });
1817
- i0.ɵɵelement(24, "i", 72);
1813
+ i0.ɵɵelementStart(21, "div", 279);
1814
+ i0.ɵɵconditionalCreate(22, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_22_Template, 3, 1, "button", 280);
1815
+ i0.ɵɵelementStart(23, "button", 281);
1816
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r50); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DispositionSuggestion(ctx_r2.SuggestionSelected, "create-new")); });
1817
+ i0.ɵɵelement(24, "i", 73);
1818
1818
  i0.ɵɵtext(25, " Create as new ");
1819
1819
  i0.ɵɵelementEnd();
1820
- i0.ɵɵelementStart(26, "button", 281);
1821
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r50); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DispositionSuggestion(ctx_r2.SuggestionSelected, "reject")); });
1822
- i0.ɵɵelement(27, "i", 172);
1820
+ i0.ɵɵelementStart(26, "button", 282);
1821
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r50); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DispositionSuggestion(ctx_r2.SuggestionSelected, "reject")); });
1822
+ i0.ɵɵelement(27, "i", 173);
1823
1823
  i0.ɵɵtext(28, " Reject ");
1824
1824
  i0.ɵɵelementEnd()()();
1825
1825
  } if (rf & 2) {
@@ -1847,7 +1847,7 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Templ
1847
1847
  i0.ɵɵadvance(3);
1848
1848
  i0.ɵɵproperty("disabled", !!ctx_r2.SuggestionSelected.dispositionInProgress);
1849
1849
  } }
1850
- function TagsResourceComponent_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1850
+ function TagsResourceComponent_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1851
1851
  const _r42 = i0.ɵɵgetCurrentView();
1852
1852
  i0.ɵɵelementStart(0, "div", 17)(1, "div")(2, "div", 18);
1853
1853
  i0.ɵɵtext(3, "Suggestions Inbox");
@@ -1856,40 +1856,40 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Template(rf, ctx) {
1856
1856
  i0.ɵɵtext(5);
1857
1857
  i0.ɵɵelementEnd()();
1858
1858
  i0.ɵɵelementStart(6, "div", 20)(7, "button", 57);
1859
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.loadSuggestions()); });
1859
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.loadSuggestions()); });
1860
1860
  i0.ɵɵelement(8, "i", 58);
1861
1861
  i0.ɵɵtext(9, " Refresh");
1862
1862
  i0.ɵɵelementEnd();
1863
- i0.ɵɵelementStart(10, "button", 167);
1864
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_2_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RunHealthNow()); });
1865
- i0.ɵɵconditionalCreate(11, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_11_Template, 2, 0)(12, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_12_Template, 2, 0);
1863
+ i0.ɵɵelementStart(10, "button", 168);
1864
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_2_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RunHealthNow()); });
1865
+ i0.ɵɵconditionalCreate(11, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_11_Template, 2, 0)(12, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_12_Template, 2, 0);
1866
1866
  i0.ɵɵelementEnd()()();
1867
- i0.ɵɵelementStart(13, "div", 22)(14, "div", 241)(15, "div", 242)(16, "div", 243)(17, "input", 244);
1868
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_2_Template_input_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.SuggestionSearch, $event) || (ctx_r2.SuggestionSearch = $event); return i0.ɵɵresetView($event); });
1869
- i0.ɵɵlistener("input", function TagsResourceComponent_Conditional_15_Conditional_2_Template_input_input_17_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
1870
- i0.ɵɵelementEnd();
1871
- i0.ɵɵelementStart(18, "select", 245);
1872
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_2_Template_select_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.SuggestionFilterReason, $event) || (ctx_r2.SuggestionFilterReason = $event); return i0.ɵɵresetView($event); });
1873
- i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_15_Conditional_2_Template_select_change_18_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
1874
- i0.ɵɵelementStart(19, "option", 246);
1867
+ i0.ɵɵelementStart(13, "div", 22)(14, "div", 242)(15, "div", 243)(16, "div", 244)(17, "input", 245);
1868
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_2_Template_input_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.SuggestionSearch, $event) || (ctx_r2.SuggestionSearch = $event); return i0.ɵɵresetView($event); });
1869
+ i0.ɵɵlistener("input", function TagsResourceComponent_Conditional_14_Conditional_2_Template_input_input_17_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
1870
+ i0.ɵɵelementEnd();
1871
+ i0.ɵɵelementStart(18, "select", 246);
1872
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_2_Template_select_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.SuggestionFilterReason, $event) || (ctx_r2.SuggestionFilterReason = $event); return i0.ɵɵresetView($event); });
1873
+ i0.ɵɵlistener("change", function TagsResourceComponent_Conditional_14_Conditional_2_Template_select_change_18_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
1874
+ i0.ɵɵelementStart(19, "option", 247);
1875
1875
  i0.ɵɵtext(20, "All reasons");
1876
1876
  i0.ɵɵelementEnd();
1877
- i0.ɵɵrepeaterCreate(21, TagsResourceComponent_Conditional_15_Conditional_2_For_22_Template, 2, 2, "option", 247, i0.ɵɵrepeaterTrackByIdentity);
1877
+ i0.ɵɵrepeaterCreate(21, TagsResourceComponent_Conditional_14_Conditional_2_For_22_Template, 2, 2, "option", 248, i0.ɵɵrepeaterTrackByIdentity);
1878
1878
  i0.ɵɵelementEnd();
1879
- i0.ɵɵelementStart(23, "input", 248);
1880
- i0.ɵɵlistener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_2_Template_input_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnMinScoreChange($event)); });
1879
+ i0.ɵɵelementStart(23, "input", 249);
1880
+ i0.ɵɵlistener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_2_Template_input_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnMinScoreChange($event)); });
1881
1881
  i0.ɵɵelementEnd();
1882
- i0.ɵɵelement(24, "span", 249);
1883
- i0.ɵɵelementStart(25, "span", 250);
1882
+ i0.ɵɵelement(24, "span", 250);
1883
+ i0.ɵɵelementStart(25, "span", 251);
1884
1884
  i0.ɵɵtext(26, " Showing ");
1885
1885
  i0.ɵɵelementStart(27, "strong");
1886
1886
  i0.ɵɵtext(28);
1887
1887
  i0.ɵɵelementEnd()()();
1888
- i0.ɵɵconditionalCreate(29, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_29_Template, 10, 3, "div", 251);
1889
- i0.ɵɵelementStart(30, "div", 252);
1890
- i0.ɵɵconditionalCreate(31, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_31_Template, 4, 0, "div", 55)(32, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_32_Template, 19, 1, "table", 253);
1888
+ i0.ɵɵconditionalCreate(29, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_29_Template, 10, 3, "div", 252);
1889
+ i0.ɵɵelementStart(30, "div", 253);
1890
+ i0.ɵɵconditionalCreate(31, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_31_Template, 4, 0, "div", 55)(32, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_32_Template, 19, 1, "table", 254);
1891
1891
  i0.ɵɵelementEnd()();
1892
- i0.ɵɵconditionalCreate(33, TagsResourceComponent_Conditional_15_Conditional_2_Conditional_33_Template, 29, 16, "aside", 254);
1892
+ i0.ɵɵconditionalCreate(33, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Template, 29, 16, "aside", 255);
1893
1893
  i0.ɵɵelementEnd()();
1894
1894
  } if (rf & 2) {
1895
1895
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -1916,31 +1916,31 @@ function TagsResourceComponent_Conditional_15_Conditional_2_Template(rf, ctx) {
1916
1916
  i0.ɵɵadvance(2);
1917
1917
  i0.ɵɵconditional(ctx_r2.SuggestionSelected ? 33 : -1);
1918
1918
  } }
1919
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1920
- i0.ɵɵelement(0, "i", 14);
1919
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1920
+ i0.ɵɵelement(0, "i", 11);
1921
1921
  i0.ɵɵtext(1, " Rebuilding\u2026 ");
1922
1922
  } }
1923
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1924
- i0.ɵɵelement(0, "i", 313);
1923
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1924
+ i0.ɵɵelement(0, "i", 314);
1925
1925
  i0.ɵɵtext(1, " Rebuild stale embeddings ");
1926
1926
  } }
1927
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1928
- i0.ɵɵelement(0, "i", 14);
1927
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1928
+ i0.ɵɵelement(0, "i", 11);
1929
1929
  i0.ɵɵtext(1, " Running\u2026 ");
1930
1930
  } }
1931
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1932
- i0.ɵɵelement(0, "i", 314);
1931
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1932
+ i0.ɵɵelement(0, "i", 315);
1933
1933
  i0.ɵɵtext(1, " Run now ");
1934
1934
  } }
1935
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_130_Template(rf, ctx) { if (rf & 1) {
1936
- i0.ɵɵelementStart(0, "div", 312);
1937
- i0.ɵɵelement(1, "i", 315);
1935
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_130_Template(rf, ctx) { if (rf & 1) {
1936
+ i0.ɵɵelementStart(0, "div", 313);
1937
+ i0.ɵɵelement(1, "i", 316);
1938
1938
  i0.ɵɵelementStart(2, "p");
1939
1939
  i0.ɵɵtext(3, "No runs yet.");
1940
1940
  i0.ɵɵelementEnd()();
1941
1941
  } }
1942
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_131_For_21_Template(rf, ctx) { if (rf & 1) {
1943
- i0.ɵɵelementStart(0, "tr")(1, "td", 263);
1942
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_131_For_21_Template(rf, ctx) { if (rf & 1) {
1943
+ i0.ɵɵelementStart(0, "tr")(1, "td", 264);
1944
1944
  i0.ɵɵtext(2);
1945
1945
  i0.ɵɵpipe(3, "date");
1946
1946
  i0.ɵɵelementEnd();
@@ -1984,7 +1984,7 @@ function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_131_For_
1984
1984
  i0.ɵɵadvance(2);
1985
1985
  i0.ɵɵtextInterpolate1("", run_r53.DurationMs, "ms");
1986
1986
  } }
1987
- function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_131_Template(rf, ctx) { if (rf & 1) {
1987
+ function TagsResourceComponent_Conditional_14_Conditional_3_Conditional_131_Template(rf, ctx) { if (rf & 1) {
1988
1988
  i0.ɵɵelementStart(0, "table")(1, "thead")(2, "tr")(3, "th");
1989
1989
  i0.ɵɵtext(4, "When");
1990
1990
  i0.ɵɵelementEnd();
@@ -2010,14 +2010,14 @@ function TagsResourceComponent_Conditional_15_Conditional_3_Conditional_131_Temp
2010
2010
  i0.ɵɵtext(18, "Duration");
2011
2011
  i0.ɵɵelementEnd()()();
2012
2012
  i0.ɵɵelementStart(19, "tbody");
2013
- i0.ɵɵrepeaterCreate(20, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_131_For_21_Template, 19, 11, "tr", null, _forTrack5);
2013
+ i0.ɵɵrepeaterCreate(20, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_131_For_21_Template, 19, 11, "tr", null, _forTrack5);
2014
2014
  i0.ɵɵelementEnd()();
2015
2015
  } if (rf & 2) {
2016
2016
  const ctx_r2 = i0.ɵɵnextContext(3);
2017
2017
  i0.ɵɵadvance(20);
2018
2018
  i0.ɵɵrepeater(ctx_r2.HealthRunHistory);
2019
2019
  } }
2020
- function TagsResourceComponent_Conditional_15_Conditional_3_Template(rf, ctx) { if (rf & 1) {
2020
+ function TagsResourceComponent_Conditional_14_Conditional_3_Template(rf, ctx) { if (rf & 1) {
2021
2021
  const _r52 = i0.ɵɵgetCurrentView();
2022
2022
  i0.ɵɵelementStart(0, "div", 17)(1, "div")(2, "div", 18);
2023
2023
  i0.ɵɵtext(3, "Tag Health");
@@ -2025,156 +2025,156 @@ function TagsResourceComponent_Conditional_15_Conditional_3_Template(rf, ctx) {
2025
2025
  i0.ɵɵelementStart(4, "div", 19);
2026
2026
  i0.ɵɵtext(5, "Automated signals about taxonomy quality");
2027
2027
  i0.ɵɵelementEnd()();
2028
- i0.ɵɵelementStart(6, "div", 20)(7, "button", 283);
2029
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_3_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RebuildEmbeddings()); });
2030
- i0.ɵɵconditionalCreate(8, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_8_Template, 2, 0)(9, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_9_Template, 2, 0);
2028
+ i0.ɵɵelementStart(6, "div", 20)(7, "button", 284);
2029
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_3_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RebuildEmbeddings()); });
2030
+ i0.ɵɵconditionalCreate(8, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_8_Template, 2, 0)(9, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_9_Template, 2, 0);
2031
2031
  i0.ɵɵelementEnd();
2032
- i0.ɵɵelementStart(10, "button", 167);
2033
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RunHealthNow()); });
2034
- i0.ɵɵconditionalCreate(11, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_11_Template, 2, 0)(12, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_12_Template, 2, 0);
2032
+ i0.ɵɵelementStart(10, "button", 168);
2033
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RunHealthNow()); });
2034
+ i0.ɵɵconditionalCreate(11, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_11_Template, 2, 0)(12, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_12_Template, 2, 0);
2035
2035
  i0.ɵɵelementEnd()()();
2036
- i0.ɵɵelementStart(13, "div", 284)(14, "div", 285)(15, "div", 286)(16, "div", 287);
2036
+ i0.ɵɵelementStart(13, "div", 285)(14, "div", 286)(15, "div", 287)(16, "div", 288);
2037
2037
  i0.ɵɵtext(17, "Last run");
2038
2038
  i0.ɵɵelementEnd();
2039
- i0.ɵɵelementStart(18, "div", 288);
2039
+ i0.ɵɵelementStart(18, "div", 289);
2040
2040
  i0.ɵɵtext(19);
2041
2041
  i0.ɵɵpipe(20, "date");
2042
2042
  i0.ɵɵelementEnd()();
2043
- i0.ɵɵelementStart(21, "div", 286)(22, "div", 287);
2043
+ i0.ɵɵelementStart(21, "div", 287)(22, "div", 288);
2044
2044
  i0.ɵɵtext(23, "Tags scanned");
2045
2045
  i0.ɵɵelementEnd();
2046
- i0.ɵɵelementStart(24, "div", 288);
2046
+ i0.ɵɵelementStart(24, "div", 289);
2047
2047
  i0.ɵɵtext(25);
2048
2048
  i0.ɵɵelementEnd()();
2049
- i0.ɵɵelementStart(26, "div", 286)(27, "div", 287);
2049
+ i0.ɵɵelementStart(26, "div", 287)(27, "div", 288);
2050
2050
  i0.ɵɵtext(28, "Issues enqueued (last run)");
2051
2051
  i0.ɵɵelementEnd();
2052
- i0.ɵɵelementStart(29, "div", 288);
2052
+ i0.ɵɵelementStart(29, "div", 289);
2053
2053
  i0.ɵɵtext(30);
2054
2054
  i0.ɵɵelementEnd()();
2055
- i0.ɵɵelementStart(31, "div", 286)(32, "div", 287);
2055
+ i0.ɵɵelementStart(31, "div", 287)(32, "div", 288);
2056
2056
  i0.ɵɵtext(33, "Pending suggestions");
2057
2057
  i0.ɵɵelementEnd();
2058
- i0.ɵɵelementStart(34, "div", 288);
2058
+ i0.ɵɵelementStart(34, "div", 289);
2059
2059
  i0.ɵɵtext(35);
2060
2060
  i0.ɵɵelementEnd()();
2061
- i0.ɵɵelement(36, "span", 289);
2062
- i0.ɵɵelementStart(37, "div", 286)(38, "div", 287);
2061
+ i0.ɵɵelement(36, "span", 290);
2062
+ i0.ɵɵelementStart(37, "div", 287)(38, "div", 288);
2063
2063
  i0.ɵɵtext(39, "Last duration");
2064
2064
  i0.ɵɵelementEnd();
2065
- i0.ɵɵelementStart(40, "div", 288);
2065
+ i0.ɵɵelementStart(40, "div", 289);
2066
2066
  i0.ɵɵtext(41);
2067
2067
  i0.ɵɵelementEnd()()();
2068
- i0.ɵɵelementStart(42, "div", 290)(43, "div", 291)(44, "div", 292)(45, "div", 293);
2069
- i0.ɵɵelement(46, "i", 272);
2068
+ i0.ɵɵelementStart(42, "div", 291)(43, "div", 292)(44, "div", 293)(45, "div", 294);
2069
+ i0.ɵɵelement(46, "i", 273);
2070
2070
  i0.ɵɵelementEnd();
2071
- i0.ɵɵelementStart(47, "div")(48, "div", 294);
2071
+ i0.ɵɵelementStart(47, "div")(48, "div", 295);
2072
2072
  i0.ɵɵtext(49, "Merge candidates");
2073
2073
  i0.ɵɵelementEnd();
2074
2074
  i0.ɵɵelementStart(50, "h3");
2075
2075
  i0.ɵɵtext(51, "Likely duplicate tags");
2076
2076
  i0.ɵɵelementEnd()()();
2077
- i0.ɵɵelementStart(52, "div", 295);
2077
+ i0.ɵɵelementStart(52, "div", 296);
2078
2078
  i0.ɵɵtext(53);
2079
2079
  i0.ɵɵelementEnd();
2080
- i0.ɵɵelementStart(54, "p", 296);
2080
+ i0.ɵɵelementStart(54, "p", 297);
2081
2081
  i0.ɵɵtext(55, "Pairs with high embedding cosine + name similarity. Approving merges the source into the target and re-points existing ContentItemTag rows.");
2082
2082
  i0.ɵɵelementEnd();
2083
- i0.ɵɵelementStart(56, "div", 297)(57, "button", 298);
2084
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_3_Template_button_click_57_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.SwitchTab("suggestions"); ctx_r2.SuggestionFilterReason = "MergeCandidate"; return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
2083
+ i0.ɵɵelementStart(56, "div", 298)(57, "button", 299);
2084
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_3_Template_button_click_57_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.SwitchTab("suggestions"); ctx_r2.SuggestionFilterReason = "MergeCandidate"; return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
2085
2085
  i0.ɵɵtext(58, " Open in Suggestions ");
2086
2086
  i0.ɵɵelementEnd()()();
2087
- i0.ɵɵelementStart(59, "div", 299)(60, "div", 292)(61, "div", 293);
2088
- i0.ɵɵelement(62, "i", 300);
2087
+ i0.ɵɵelementStart(59, "div", 300)(60, "div", 293)(61, "div", 294);
2088
+ i0.ɵɵelement(62, "i", 301);
2089
2089
  i0.ɵɵelementEnd();
2090
- i0.ɵɵelementStart(63, "div")(64, "div", 294);
2090
+ i0.ɵɵelementStart(63, "div")(64, "div", 295);
2091
2091
  i0.ɵɵtext(65, "Low usage");
2092
2092
  i0.ɵɵelementEnd();
2093
2093
  i0.ɵɵelementStart(66, "h3");
2094
2094
  i0.ɵɵtext(67, "Deprecation candidates");
2095
2095
  i0.ɵɵelementEnd()()();
2096
- i0.ɵɵelementStart(68, "div", 295);
2096
+ i0.ɵɵelementStart(68, "div", 296);
2097
2097
  i0.ɵɵtext(69);
2098
2098
  i0.ɵɵelementEnd();
2099
- i0.ɵɵelementStart(70, "p", 296);
2099
+ i0.ɵɵelementStart(70, "p", 297);
2100
2100
  i0.ɵɵtext(71, "Active tags used fewer than the threshold over the lookback window. Often abandoned imports or finished-project tags.");
2101
2101
  i0.ɵɵelementEnd();
2102
- i0.ɵɵelementStart(72, "div", 297)(73, "button", 298);
2103
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_3_Template_button_click_73_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.SwitchTab("suggestions"); ctx_r2.SuggestionFilterReason = "LowUsage"; return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
2102
+ i0.ɵɵelementStart(72, "div", 298)(73, "button", 299);
2103
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_3_Template_button_click_73_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.SwitchTab("suggestions"); ctx_r2.SuggestionFilterReason = "LowUsage"; return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
2104
2104
  i0.ɵɵtext(74, " Review ");
2105
2105
  i0.ɵɵelementEnd()()();
2106
- i0.ɵɵelementStart(75, "div", 301)(76, "div", 292)(77, "div", 293);
2107
- i0.ɵɵelement(78, "i", 302);
2106
+ i0.ɵɵelementStart(75, "div", 302)(76, "div", 293)(77, "div", 294);
2107
+ i0.ɵɵelement(78, "i", 303);
2108
2108
  i0.ɵɵelementEnd();
2109
- i0.ɵɵelementStart(79, "div")(80, "div", 294);
2109
+ i0.ɵɵelementStart(79, "div")(80, "div", 295);
2110
2110
  i0.ɵɵtext(81, "Wide nodes");
2111
2111
  i0.ɵɵelementEnd();
2112
2112
  i0.ɵɵelementStart(82, "h3");
2113
2113
  i0.ɵɵtext(83, "Parents with too many children");
2114
2114
  i0.ɵɵelementEnd()()();
2115
- i0.ɵɵelementStart(84, "div", 295);
2115
+ i0.ɵɵelementStart(84, "div", 296);
2116
2116
  i0.ɵɵtext(85);
2117
2117
  i0.ɵɵelementEnd();
2118
- i0.ɵɵelementStart(86, "p", 296);
2118
+ i0.ɵɵelementStart(86, "p", 297);
2119
2119
  i0.ɵɵtext(87, "Parents whose direct-child count exceeds ");
2120
2120
  i0.ɵɵelementStart(88, "strong");
2121
2121
  i0.ɵɵtext(89, "MaxChildren");
2122
2122
  i0.ɵɵelementEnd();
2123
2123
  i0.ɵɵtext(90);
2124
2124
  i0.ɵɵelementEnd();
2125
- i0.ɵɵelementStart(91, "div", 297)(92, "button", 298);
2126
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Conditional_3_Template_button_click_92_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.SwitchTab("suggestions"); ctx_r2.SuggestionFilterReason = "WideNode"; return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
2125
+ i0.ɵɵelementStart(91, "div", 298)(92, "button", 299);
2126
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_14_Conditional_3_Template_button_click_92_listener() { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.SwitchTab("suggestions"); ctx_r2.SuggestionFilterReason = "WideNode"; return i0.ɵɵresetView(ctx_r2.applySuggestionFilters()); });
2127
2127
  i0.ɵɵtext(93, " Review ");
2128
2128
  i0.ɵɵelementEnd()()()();
2129
- i0.ɵɵelementStart(94, "div", 303)(95, "h3");
2129
+ i0.ɵɵelementStart(94, "div", 304)(95, "h3");
2130
2130
  i0.ɵɵtext(96, "Health-job thresholds");
2131
2131
  i0.ɵɵelementEnd();
2132
- i0.ɵɵelementStart(97, "div", 304)(98, "div", 305)(99, "label");
2132
+ i0.ɵɵelementStart(97, "div", 305)(98, "div", 306)(99, "label");
2133
2133
  i0.ɵɵtext(100, "Merge: min co-occurrence");
2134
2134
  i0.ɵɵelementEnd();
2135
- i0.ɵɵelementStart(101, "input", 306);
2136
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_3_Template_input_ngModelChange_101_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.minCoOccurrence, $event) || (ctx_r2.HealthThresholds.minCoOccurrence = $event); return i0.ɵɵresetView($event); });
2135
+ i0.ɵɵelementStart(101, "input", 307);
2136
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_3_Template_input_ngModelChange_101_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.minCoOccurrence, $event) || (ctx_r2.HealthThresholds.minCoOccurrence = $event); return i0.ɵɵresetView($event); });
2137
2137
  i0.ɵɵelementEnd();
2138
- i0.ɵɵelementStart(102, "span", 307);
2138
+ i0.ɵɵelementStart(102, "span", 308);
2139
2139
  i0.ɵɵtext(103, "Pairs must appear together in \u2265 this many items.");
2140
2140
  i0.ɵɵelementEnd()();
2141
- i0.ɵɵelementStart(104, "div", 305)(105, "label");
2141
+ i0.ɵɵelementStart(104, "div", 306)(105, "label");
2142
2142
  i0.ɵɵtext(106, "Merge: min embedding cosine");
2143
2143
  i0.ɵɵelementEnd();
2144
- i0.ɵɵelementStart(107, "input", 308);
2145
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_3_Template_input_ngModelChange_107_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.minEmbeddingSimilarity, $event) || (ctx_r2.HealthThresholds.minEmbeddingSimilarity = $event); return i0.ɵɵresetView($event); });
2144
+ i0.ɵɵelementStart(107, "input", 309);
2145
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_3_Template_input_ngModelChange_107_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.minEmbeddingSimilarity, $event) || (ctx_r2.HealthThresholds.minEmbeddingSimilarity = $event); return i0.ɵɵresetView($event); });
2146
2146
  i0.ɵɵelementEnd()();
2147
- i0.ɵɵelementStart(108, "div", 305)(109, "label");
2147
+ i0.ɵɵelementStart(108, "div", 306)(109, "label");
2148
2148
  i0.ɵɵtext(110, "Merge: min name similarity");
2149
2149
  i0.ɵɵelementEnd();
2150
- i0.ɵɵelementStart(111, "input", 309);
2151
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_3_Template_input_ngModelChange_111_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.minNameSimilarity, $event) || (ctx_r2.HealthThresholds.minNameSimilarity = $event); return i0.ɵɵresetView($event); });
2150
+ i0.ɵɵelementStart(111, "input", 310);
2151
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_3_Template_input_ngModelChange_111_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.minNameSimilarity, $event) || (ctx_r2.HealthThresholds.minNameSimilarity = $event); return i0.ɵɵresetView($event); });
2152
2152
  i0.ɵɵelementEnd();
2153
- i0.ɵɵelementStart(112, "span", 307);
2153
+ i0.ɵɵelementStart(112, "span", 308);
2154
2154
  i0.ɵɵtext(113, "Dice's-coefficient bigram similarity.");
2155
2155
  i0.ɵɵelementEnd()();
2156
- i0.ɵɵelementStart(114, "div", 305)(115, "label");
2156
+ i0.ɵɵelementStart(114, "div", 306)(115, "label");
2157
2157
  i0.ɵɵtext(116, "Low usage: max usage");
2158
2158
  i0.ɵɵelementEnd();
2159
- i0.ɵɵelementStart(117, "input", 306);
2160
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_3_Template_input_ngModelChange_117_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.maxUsage, $event) || (ctx_r2.HealthThresholds.maxUsage = $event); return i0.ɵɵresetView($event); });
2159
+ i0.ɵɵelementStart(117, "input", 307);
2160
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_3_Template_input_ngModelChange_117_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.maxUsage, $event) || (ctx_r2.HealthThresholds.maxUsage = $event); return i0.ɵɵresetView($event); });
2161
2161
  i0.ɵɵelementEnd()();
2162
- i0.ɵɵelementStart(118, "div", 305)(119, "label");
2162
+ i0.ɵɵelementStart(118, "div", 306)(119, "label");
2163
2163
  i0.ɵɵtext(120, "Wide node: max implicit children");
2164
2164
  i0.ɵɵelementEnd();
2165
- i0.ɵɵelementStart(121, "input", 306);
2166
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_15_Conditional_3_Template_input_ngModelChange_121_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.maxImplicitChildren, $event) || (ctx_r2.HealthThresholds.maxImplicitChildren = $event); return i0.ɵɵresetView($event); });
2165
+ i0.ɵɵelementStart(121, "input", 307);
2166
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_14_Conditional_3_Template_input_ngModelChange_121_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.HealthThresholds.maxImplicitChildren, $event) || (ctx_r2.HealthThresholds.maxImplicitChildren = $event); return i0.ɵɵresetView($event); });
2167
2167
  i0.ɵɵelementEnd();
2168
- i0.ɵɵelementStart(122, "span", 307);
2168
+ i0.ɵɵelementStart(122, "span", 308);
2169
2169
  i0.ɵɵtext(123, "Used when a tag has no explicit MaxChildren cap.");
2170
2170
  i0.ɵɵelementEnd()()()();
2171
- i0.ɵɵelementStart(124, "div", 310)(125, "div", 311)(126, "h3");
2171
+ i0.ɵɵelementStart(124, "div", 311)(125, "div", 312)(126, "h3");
2172
2172
  i0.ɵɵtext(127, "Run history");
2173
2173
  i0.ɵɵelementEnd();
2174
- i0.ɵɵelementStart(128, "span", 265);
2174
+ i0.ɵɵelementStart(128, "span", 266);
2175
2175
  i0.ɵɵtext(129);
2176
2176
  i0.ɵɵelementEnd()();
2177
- i0.ɵɵconditionalCreate(130, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_130_Template, 4, 0, "div", 312)(131, TagsResourceComponent_Conditional_15_Conditional_3_Conditional_131_Template, 22, 0, "table");
2177
+ i0.ɵɵconditionalCreate(130, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_130_Template, 4, 0, "div", 313)(131, TagsResourceComponent_Conditional_14_Conditional_3_Conditional_131_Template, 22, 0, "table");
2178
2178
  i0.ɵɵelementEnd()();
2179
2179
  } if (rf & 2) {
2180
2180
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2219,11 +2219,11 @@ function TagsResourceComponent_Conditional_15_Conditional_3_Template(rf, ctx) {
2219
2219
  i0.ɵɵadvance();
2220
2220
  i0.ɵɵconditional(ctx_r2.HealthRunHistory.length === 0 ? 130 : 131);
2221
2221
  } }
2222
- function TagsResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
2223
- i0.ɵɵconditionalCreate(0, TagsResourceComponent_Conditional_15_Conditional_0_Template, 46, 4);
2224
- i0.ɵɵconditionalCreate(1, TagsResourceComponent_Conditional_15_Conditional_1_Template, 36, 18);
2225
- i0.ɵɵconditionalCreate(2, TagsResourceComponent_Conditional_15_Conditional_2_Template, 34, 11);
2226
- i0.ɵɵconditionalCreate(3, TagsResourceComponent_Conditional_15_Conditional_3_Template, 132, 23);
2222
+ function TagsResourceComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
2223
+ i0.ɵɵconditionalCreate(0, TagsResourceComponent_Conditional_14_Conditional_0_Template, 46, 4);
2224
+ i0.ɵɵconditionalCreate(1, TagsResourceComponent_Conditional_14_Conditional_1_Template, 36, 18);
2225
+ i0.ɵɵconditionalCreate(2, TagsResourceComponent_Conditional_14_Conditional_2_Template, 34, 11);
2226
+ i0.ɵɵconditionalCreate(3, TagsResourceComponent_Conditional_14_Conditional_3_Template, 132, 23);
2227
2227
  } if (rf & 2) {
2228
2228
  const ctx_r2 = i0.ɵɵnextContext();
2229
2229
  i0.ɵɵconditional(ctx_r2.ActiveTab === "tags" ? 0 : -1);
@@ -2234,9 +2234,9 @@ function TagsResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
2234
2234
  i0.ɵɵadvance();
2235
2235
  i0.ɵɵconditional(ctx_r2.ActiveTab === "health" ? 3 : -1);
2236
2236
  } }
2237
- function TagsResourceComponent_Conditional_16_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
2238
- i0.ɵɵelementStart(0, "span", 337);
2239
- i0.ɵɵelement(1, "i", 338);
2237
+ function TagsResourceComponent_Conditional_15_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
2238
+ i0.ɵɵelementStart(0, "span", 338);
2239
+ i0.ɵɵelement(1, "i", 339);
2240
2240
  i0.ɵɵtext(2);
2241
2241
  i0.ɵɵelementEnd();
2242
2242
  } if (rf & 2) {
@@ -2244,11 +2244,11 @@ function TagsResourceComponent_Conditional_16_Conditional_15_Conditional_2_Templ
2244
2244
  i0.ɵɵadvance(2);
2245
2245
  i0.ɵɵtextInterpolate1(" ", ctx_r2.SelectedFeedItem.FileTypeName);
2246
2246
  } }
2247
- function TagsResourceComponent_Conditional_16_Conditional_15_Template(rf, ctx) { if (rf & 1) {
2248
- i0.ɵɵelementStart(0, "span", 336);
2247
+ function TagsResourceComponent_Conditional_15_Conditional_15_Template(rf, ctx) { if (rf & 1) {
2248
+ i0.ɵɵelementStart(0, "span", 337);
2249
2249
  i0.ɵɵtext(1);
2250
2250
  i0.ɵɵelementEnd();
2251
- i0.ɵɵconditionalCreate(2, TagsResourceComponent_Conditional_16_Conditional_15_Conditional_2_Template, 3, 1, "span", 337);
2251
+ i0.ɵɵconditionalCreate(2, TagsResourceComponent_Conditional_15_Conditional_15_Conditional_2_Template, 3, 1, "span", 338);
2252
2252
  } if (rf & 2) {
2253
2253
  const ctx_r2 = i0.ɵɵnextContext(2);
2254
2254
  i0.ɵɵadvance();
@@ -2256,13 +2256,13 @@ function TagsResourceComponent_Conditional_16_Conditional_15_Template(rf, ctx) {
2256
2256
  i0.ɵɵadvance();
2257
2257
  i0.ɵɵconditional(ctx_r2.SelectedFeedItem.FileTypeName ? 2 : -1);
2258
2258
  } }
2259
- function TagsResourceComponent_Conditional_16_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2260
- i0.ɵɵelementStart(0, "div", 326)(1, "div", 327);
2259
+ function TagsResourceComponent_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2260
+ i0.ɵɵelementStart(0, "div", 327)(1, "div", 328);
2261
2261
  i0.ɵɵtext(2, "URL");
2262
2262
  i0.ɵɵelementEnd();
2263
- i0.ɵɵelementStart(3, "a", 339);
2263
+ i0.ɵɵelementStart(3, "a", 340);
2264
2264
  i0.ɵɵtext(4);
2265
- i0.ɵɵelement(5, "i", 340);
2265
+ i0.ɵɵelement(5, "i", 341);
2266
2266
  i0.ɵɵelementEnd()();
2267
2267
  } if (rf & 2) {
2268
2268
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2271,11 +2271,11 @@ function TagsResourceComponent_Conditional_16_Conditional_16_Template(rf, ctx) {
2271
2271
  i0.ɵɵadvance();
2272
2272
  i0.ɵɵtextInterpolate1(" ", ctx_r2.SelectedFeedItem.URL, " ");
2273
2273
  } }
2274
- function TagsResourceComponent_Conditional_16_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2275
- i0.ɵɵelementStart(0, "div", 326)(1, "div", 327);
2274
+ function TagsResourceComponent_Conditional_15_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2275
+ i0.ɵɵelementStart(0, "div", 327)(1, "div", 328);
2276
2276
  i0.ɵɵtext(2, "Content Preview");
2277
2277
  i0.ɵɵelementEnd();
2278
- i0.ɵɵelementStart(3, "div", 341);
2278
+ i0.ɵɵelementStart(3, "div", 342);
2279
2279
  i0.ɵɵtext(4);
2280
2280
  i0.ɵɵelementEnd()();
2281
2281
  } if (rf & 2) {
@@ -2283,10 +2283,10 @@ function TagsResourceComponent_Conditional_16_Conditional_17_Template(rf, ctx) {
2283
2283
  i0.ɵɵadvance(4);
2284
2284
  i0.ɵɵtextInterpolate(ctx_r2.SelectedFeedItem.TextContent);
2285
2285
  } }
2286
- function TagsResourceComponent_Conditional_16_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
2287
- i0.ɵɵelementStart(0, "span", 344);
2286
+ function TagsResourceComponent_Conditional_15_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
2287
+ i0.ɵɵelementStart(0, "span", 345);
2288
2288
  i0.ɵɵtext(1);
2289
- i0.ɵɵelementStart(2, "span", 345);
2289
+ i0.ɵɵelementStart(2, "span", 346);
2290
2290
  i0.ɵɵtext(3);
2291
2291
  i0.ɵɵelementEnd()();
2292
2292
  } if (rf & 2) {
@@ -2298,12 +2298,12 @@ function TagsResourceComponent_Conditional_16_Conditional_18_For_5_Template(rf,
2298
2298
  i0.ɵɵadvance(2);
2299
2299
  i0.ɵɵtextInterpolate(ctx_r2.FormatWeight(wt_r55.Weight));
2300
2300
  } }
2301
- function TagsResourceComponent_Conditional_16_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2302
- i0.ɵɵelementStart(0, "div", 326)(1, "div", 327);
2301
+ function TagsResourceComponent_Conditional_15_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2302
+ i0.ɵɵelementStart(0, "div", 327)(1, "div", 328);
2303
2303
  i0.ɵɵtext(2);
2304
2304
  i0.ɵɵelementEnd();
2305
- i0.ɵɵelementStart(3, "div", 342);
2306
- i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_16_Conditional_18_For_5_Template, 4, 4, "span", 343, _forTrack1);
2305
+ i0.ɵɵelementStart(3, "div", 343);
2306
+ i0.ɵɵrepeaterCreate(4, TagsResourceComponent_Conditional_15_Conditional_18_For_5_Template, 4, 4, "span", 344, _forTrack1);
2307
2307
  i0.ɵɵelementEnd()();
2308
2308
  } if (rf & 2) {
2309
2309
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2312,11 +2312,11 @@ function TagsResourceComponent_Conditional_16_Conditional_18_Template(rf, ctx) {
2312
2312
  i0.ɵɵadvance(2);
2313
2313
  i0.ɵɵrepeater(ctx_r2.SelectedFeedItem.Tags);
2314
2314
  } }
2315
- function TagsResourceComponent_Conditional_16_Conditional_23_Template(rf, ctx) { if (rf & 1) {
2316
- i0.ɵɵelementStart(0, "div", 329)(1, "span", 330);
2315
+ function TagsResourceComponent_Conditional_15_Conditional_23_Template(rf, ctx) { if (rf & 1) {
2316
+ i0.ɵɵelementStart(0, "div", 330)(1, "span", 331);
2317
2317
  i0.ɵɵtext(2, "Checksum");
2318
2318
  i0.ɵɵelementEnd();
2319
- i0.ɵɵelementStart(3, "span", 346);
2319
+ i0.ɵɵelementStart(3, "span", 347);
2320
2320
  i0.ɵɵtext(4);
2321
2321
  i0.ɵɵelementEnd()();
2322
2322
  } if (rf & 2) {
@@ -2324,54 +2324,54 @@ function TagsResourceComponent_Conditional_16_Conditional_23_Template(rf, ctx) {
2324
2324
  i0.ɵɵadvance(4);
2325
2325
  i0.ɵɵtextInterpolate(ctx_r2.SelectedFeedItem.Checksum);
2326
2326
  } }
2327
- function TagsResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2327
+ function TagsResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
2328
2328
  const _r54 = i0.ɵɵgetCurrentView();
2329
- i0.ɵɵelementStart(0, "div", 316);
2330
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseItemDetail()); });
2329
+ i0.ɵɵelementStart(0, "div", 317);
2330
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseItemDetail()); });
2331
2331
  i0.ɵɵelementEnd();
2332
- i0.ɵɵelementStart(1, "div", 317)(2, "div", 318)(3, "h3");
2333
- i0.ɵɵelement(4, "i", 319);
2332
+ i0.ɵɵelementStart(1, "div", 318)(2, "div", 319)(3, "h3");
2333
+ i0.ɵɵelement(4, "i", 320);
2334
2334
  i0.ɵɵtext(5, " Content Item");
2335
2335
  i0.ɵɵelementEnd();
2336
- i0.ɵɵelementStart(6, "button", 320);
2337
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseItemDetail()); });
2336
+ i0.ɵɵelementStart(6, "button", 321);
2337
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseItemDetail()); });
2338
2338
  i0.ɵɵelement(7, "i", 53);
2339
2339
  i0.ɵɵelementEnd()();
2340
- i0.ɵɵelementStart(8, "div", 321)(9, "div", 322)(10, "h4", 323);
2340
+ i0.ɵɵelementStart(8, "div", 322)(9, "div", 323)(10, "h4", 324);
2341
2341
  i0.ɵɵtext(11);
2342
2342
  i0.ɵɵelementEnd();
2343
- i0.ɵɵelementStart(12, "div", 324)(13, "span", 325);
2343
+ i0.ɵɵelementStart(12, "div", 325)(13, "span", 326);
2344
2344
  i0.ɵɵtext(14);
2345
2345
  i0.ɵɵelementEnd();
2346
- i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_16_Conditional_15_Template, 3, 2);
2346
+ i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_15_Conditional_15_Template, 3, 2);
2347
2347
  i0.ɵɵelementEnd()();
2348
- i0.ɵɵconditionalCreate(16, TagsResourceComponent_Conditional_16_Conditional_16_Template, 6, 2, "div", 326);
2349
- i0.ɵɵconditionalCreate(17, TagsResourceComponent_Conditional_16_Conditional_17_Template, 5, 1, "div", 326);
2350
- i0.ɵɵconditionalCreate(18, TagsResourceComponent_Conditional_16_Conditional_18_Template, 6, 1, "div", 326);
2351
- i0.ɵɵelementStart(19, "div", 326)(20, "div", 327);
2348
+ i0.ɵɵconditionalCreate(16, TagsResourceComponent_Conditional_15_Conditional_16_Template, 6, 2, "div", 327);
2349
+ i0.ɵɵconditionalCreate(17, TagsResourceComponent_Conditional_15_Conditional_17_Template, 5, 1, "div", 327);
2350
+ i0.ɵɵconditionalCreate(18, TagsResourceComponent_Conditional_15_Conditional_18_Template, 6, 1, "div", 327);
2351
+ i0.ɵɵelementStart(19, "div", 327)(20, "div", 328);
2352
2352
  i0.ɵɵtext(21, "Metadata");
2353
2353
  i0.ɵɵelementEnd();
2354
- i0.ɵɵelementStart(22, "div", 328);
2355
- i0.ɵɵconditionalCreate(23, TagsResourceComponent_Conditional_16_Conditional_23_Template, 5, 1, "div", 329);
2356
- i0.ɵɵelementStart(24, "div", 329)(25, "span", 330);
2354
+ i0.ɵɵelementStart(22, "div", 329);
2355
+ i0.ɵɵconditionalCreate(23, TagsResourceComponent_Conditional_15_Conditional_23_Template, 5, 1, "div", 330);
2356
+ i0.ɵɵelementStart(24, "div", 330)(25, "span", 331);
2357
2357
  i0.ɵɵtext(26, "Created");
2358
2358
  i0.ɵɵelementEnd();
2359
- i0.ɵɵelementStart(27, "span", 331);
2359
+ i0.ɵɵelementStart(27, "span", 332);
2360
2360
  i0.ɵɵtext(28);
2361
2361
  i0.ɵɵelementEnd()();
2362
- i0.ɵɵelementStart(29, "div", 329)(30, "span", 330);
2362
+ i0.ɵɵelementStart(29, "div", 330)(30, "span", 331);
2363
2363
  i0.ɵɵtext(31, "Updated");
2364
2364
  i0.ɵɵelementEnd();
2365
- i0.ɵɵelementStart(32, "span", 331);
2365
+ i0.ɵɵelementStart(32, "span", 332);
2366
2366
  i0.ɵɵtext(33);
2367
2367
  i0.ɵɵelementEnd()()()();
2368
- i0.ɵɵelementStart(34, "div", 332)(35, "button", 125);
2369
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenRecordFromItem(ctx_r2.SelectedFeedItem)); });
2370
- i0.ɵɵelement(36, "i", 333);
2368
+ i0.ɵɵelementStart(34, "div", 333)(35, "button", 126);
2369
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_15_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenRecordFromItem(ctx_r2.SelectedFeedItem)); });
2370
+ i0.ɵɵelement(36, "i", 334);
2371
2371
  i0.ɵɵtext(37, " Open Record ");
2372
2372
  i0.ɵɵelementEnd();
2373
- i0.ɵɵelementStart(38, "button", 334);
2374
- i0.ɵɵelement(39, "i", 335);
2373
+ i0.ɵɵelementStart(38, "button", 335);
2374
+ i0.ɵɵelement(39, "i", 336);
2375
2375
  i0.ɵɵtext(40, " See Similar Items ");
2376
2376
  i0.ɵɵelementEnd()()()();
2377
2377
  } if (rf & 2) {
@@ -2395,30 +2395,30 @@ function TagsResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2395
2395
  i0.ɵɵadvance(5);
2396
2396
  i0.ɵɵtextInterpolate(ctx_r2.SelectedFeedItem.UpdatedAt);
2397
2397
  } }
2398
- function TagsResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2398
+ function TagsResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2399
2399
  const _r56 = i0.ɵɵgetCurrentView();
2400
- i0.ɵɵelementStart(0, "div", 347);
2401
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogCancel()); });
2402
- i0.ɵɵelementStart(1, "div", 348);
2403
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r56); return i0.ɵɵresetView($event.stopPropagation()); });
2404
- i0.ɵɵelementStart(2, "div", 349)(3, "h3");
2405
- i0.ɵɵelement(4, "i", 350);
2400
+ i0.ɵɵelementStart(0, "div", 348);
2401
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogCancel()); });
2402
+ i0.ɵɵelementStart(1, "div", 349);
2403
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r56); return i0.ɵɵresetView($event.stopPropagation()); });
2404
+ i0.ɵɵelementStart(2, "div", 350)(3, "h3");
2405
+ i0.ɵɵelement(4, "i", 351);
2406
2406
  i0.ɵɵtext(5);
2407
2407
  i0.ɵɵelementEnd();
2408
- i0.ɵɵelementStart(6, "button", 226);
2409
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogCancel()); });
2408
+ i0.ɵɵelementStart(6, "button", 227);
2409
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogCancel()); });
2410
2410
  i0.ɵɵelement(7, "i", 53);
2411
2411
  i0.ɵɵelementEnd()();
2412
- i0.ɵɵelementStart(8, "div", 351)(9, "p", 352);
2412
+ i0.ɵɵelementStart(8, "div", 352)(9, "p", 353);
2413
2413
  i0.ɵɵtext(10);
2414
2414
  i0.ɵɵelementEnd()();
2415
- i0.ɵɵelementStart(11, "div", 353)(12, "button", 354);
2416
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogAccept()); });
2417
- i0.ɵɵelement(13, "i", 256);
2415
+ i0.ɵɵelementStart(11, "div", 354)(12, "button", 355);
2416
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogAccept()); });
2417
+ i0.ɵɵelement(13, "i", 257);
2418
2418
  i0.ɵɵtext(14, " Confirm ");
2419
2419
  i0.ɵɵelementEnd();
2420
2420
  i0.ɵɵelementStart(15, "button", 57);
2421
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogCancel()); });
2421
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_16_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConfirmDialogCancel()); });
2422
2422
  i0.ɵɵtext(16, "Cancel");
2423
2423
  i0.ɵɵelementEnd()()()();
2424
2424
  } if (rf & 2) {
@@ -2428,36 +2428,36 @@ function TagsResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2428
2428
  i0.ɵɵadvance(5);
2429
2429
  i0.ɵɵtextInterpolate(ctx_r2.ConfirmDialogMessage);
2430
2430
  } }
2431
- function TagsResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2431
+ function TagsResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2432
2432
  const _r57 = i0.ɵɵgetCurrentView();
2433
- i0.ɵɵelementStart(0, "div", 347);
2434
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSplitDialog()); });
2435
- i0.ɵɵelementStart(1, "div", 348);
2436
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r57); return i0.ɵɵresetView($event.stopPropagation()); });
2437
- i0.ɵɵelementStart(2, "div", 349)(3, "h3");
2438
- i0.ɵɵelement(4, "i", 129);
2433
+ i0.ɵɵelementStart(0, "div", 348);
2434
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSplitDialog()); });
2435
+ i0.ɵɵelementStart(1, "div", 349);
2436
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r57); return i0.ɵɵresetView($event.stopPropagation()); });
2437
+ i0.ɵɵelementStart(2, "div", 350)(3, "h3");
2438
+ i0.ɵɵelement(4, "i", 130);
2439
2439
  i0.ɵɵtext(5, " Split Tag");
2440
2440
  i0.ɵɵelementEnd();
2441
- i0.ɵɵelementStart(6, "button", 226);
2442
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSplitDialog()); });
2441
+ i0.ɵɵelementStart(6, "button", 227);
2442
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSplitDialog()); });
2443
2443
  i0.ɵɵelement(7, "i", 53);
2444
2444
  i0.ɵɵelementEnd()();
2445
- i0.ɵɵelementStart(8, "div", 351)(9, "div", 355)(10, "label");
2445
+ i0.ɵɵelementStart(8, "div", 352)(9, "div", 356)(10, "label");
2446
2446
  i0.ɵɵtext(11, "New tag names (comma-separated)");
2447
2447
  i0.ɵɵelementEnd();
2448
- i0.ɵɵelementStart(12, "input", 356);
2449
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_18_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.SplitChildNames, $event) || (ctx_r2.SplitChildNames = $event); return i0.ɵɵresetView($event); });
2448
+ i0.ɵɵelementStart(12, "input", 357);
2449
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_17_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.SplitChildNames, $event) || (ctx_r2.SplitChildNames = $event); return i0.ɵɵresetView($event); });
2450
2450
  i0.ɵɵelementEnd()();
2451
- i0.ɵɵelementStart(13, "p", 352);
2451
+ i0.ɵɵelementStart(13, "p", 353);
2452
2452
  i0.ɵɵtext(14, "New tags will be created as siblings of the original tag under the same parent.");
2453
2453
  i0.ɵɵelementEnd()();
2454
- i0.ɵɵelementStart(15, "div", 353)(16, "button", 167);
2455
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ExecuteSplit()); });
2456
- i0.ɵɵelement(17, "i", 129);
2454
+ i0.ɵɵelementStart(15, "div", 354)(16, "button", 168);
2455
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ExecuteSplit()); });
2456
+ i0.ɵɵelement(17, "i", 130);
2457
2457
  i0.ɵɵtext(18, " Create Tags ");
2458
2458
  i0.ɵɵelementEnd();
2459
2459
  i0.ɵɵelementStart(19, "button", 57);
2460
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSplitDialog()); });
2460
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_17_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSplitDialog()); });
2461
2461
  i0.ɵɵtext(20, "Cancel");
2462
2462
  i0.ɵɵelementEnd()()()();
2463
2463
  } if (rf & 2) {
@@ -2467,43 +2467,43 @@ function TagsResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2467
2467
  i0.ɵɵadvance(4);
2468
2468
  i0.ɵɵproperty("disabled", !ctx_r2.SplitChildNames.trim());
2469
2469
  } }
2470
- function TagsResourceComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
2470
+ function TagsResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2471
2471
  const _r58 = i0.ɵɵgetCurrentView();
2472
- i0.ɵɵelementStart(0, "div", 347);
2473
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseCreateTagDialog()); });
2474
- i0.ɵɵelementStart(1, "div", 348);
2475
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r58); return i0.ɵɵresetView($event.stopPropagation()); });
2476
- i0.ɵɵelementStart(2, "div", 349)(3, "h3");
2477
- i0.ɵɵelement(4, "i", 72);
2472
+ i0.ɵɵelementStart(0, "div", 348);
2473
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseCreateTagDialog()); });
2474
+ i0.ɵɵelementStart(1, "div", 349);
2475
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r58); return i0.ɵɵresetView($event.stopPropagation()); });
2476
+ i0.ɵɵelementStart(2, "div", 350)(3, "h3");
2477
+ i0.ɵɵelement(4, "i", 73);
2478
2478
  i0.ɵɵtext(5, " Create Tag");
2479
2479
  i0.ɵɵelementEnd();
2480
- i0.ɵɵelementStart(6, "button", 226);
2481
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseCreateTagDialog()); });
2480
+ i0.ɵɵelementStart(6, "button", 227);
2481
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseCreateTagDialog()); });
2482
2482
  i0.ɵɵelement(7, "i", 53);
2483
2483
  i0.ɵɵelementEnd()();
2484
- i0.ɵɵelementStart(8, "div", 351)(9, "div", 357);
2484
+ i0.ɵɵelementStart(8, "div", 352)(9, "div", 358);
2485
2485
  i0.ɵɵtext(10);
2486
2486
  i0.ɵɵelementEnd();
2487
- i0.ɵɵelementStart(11, "div", 355)(12, "label");
2487
+ i0.ɵɵelementStart(11, "div", 356)(12, "label");
2488
2488
  i0.ɵɵtext(13, "Name");
2489
2489
  i0.ɵɵelementEnd();
2490
- i0.ɵɵelementStart(14, "input", 358);
2491
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_19_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.CreateTagName, $event) || (ctx_r2.CreateTagName = $event); return i0.ɵɵresetView($event); });
2492
- i0.ɵɵlistener("keydown.enter", function TagsResourceComponent_Conditional_19_Template_input_keydown_enter_14_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SaveNewTag()); });
2490
+ i0.ɵɵelementStart(14, "input", 359);
2491
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_18_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.CreateTagName, $event) || (ctx_r2.CreateTagName = $event); return i0.ɵɵresetView($event); });
2492
+ i0.ɵɵlistener("keydown.enter", function TagsResourceComponent_Conditional_18_Template_input_keydown_enter_14_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SaveNewTag()); });
2493
2493
  i0.ɵɵelementEnd()();
2494
- i0.ɵɵelementStart(15, "div", 355)(16, "label");
2494
+ i0.ɵɵelementStart(15, "div", 356)(16, "label");
2495
2495
  i0.ɵɵtext(17, "Description (optional)");
2496
2496
  i0.ɵɵelementEnd();
2497
- i0.ɵɵelementStart(18, "textarea", 359);
2498
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_19_Template_textarea_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.CreateTagDescription, $event) || (ctx_r2.CreateTagDescription = $event); return i0.ɵɵresetView($event); });
2497
+ i0.ɵɵelementStart(18, "textarea", 360);
2498
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_18_Template_textarea_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.CreateTagDescription, $event) || (ctx_r2.CreateTagDescription = $event); return i0.ɵɵresetView($event); });
2499
2499
  i0.ɵɵelementEnd()()();
2500
- i0.ɵɵelementStart(19, "div", 353)(20, "button", 167);
2501
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SaveNewTag()); });
2502
- i0.ɵɵelement(21, "i", 256);
2500
+ i0.ɵɵelementStart(19, "div", 354)(20, "button", 168);
2501
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SaveNewTag()); });
2502
+ i0.ɵɵelement(21, "i", 257);
2503
2503
  i0.ɵɵtext(22, " Create ");
2504
2504
  i0.ɵɵelementEnd();
2505
2505
  i0.ɵɵelementStart(23, "button", 57);
2506
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseCreateTagDialog()); });
2506
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_18_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r58); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseCreateTagDialog()); });
2507
2507
  i0.ɵɵtext(24, "Cancel");
2508
2508
  i0.ɵɵelementEnd()()()();
2509
2509
  } if (rf & 2) {
@@ -2517,8 +2517,8 @@ function TagsResourceComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
2517
2517
  i0.ɵɵadvance(2);
2518
2518
  i0.ɵɵproperty("disabled", !ctx_r2.CreateTagName.trim());
2519
2519
  } }
2520
- function TagsResourceComponent_Conditional_20_For_16_Template(rf, ctx) { if (rf & 1) {
2521
- i0.ɵɵelementStart(0, "option", 361);
2520
+ function TagsResourceComponent_Conditional_19_For_16_Template(rf, ctx) { if (rf & 1) {
2521
+ i0.ɵɵelementStart(0, "option", 362);
2522
2522
  i0.ɵɵtext(1);
2523
2523
  i0.ɵɵelementEnd();
2524
2524
  } if (rf & 2) {
@@ -2527,37 +2527,37 @@ function TagsResourceComponent_Conditional_20_For_16_Template(rf, ctx) { if (rf
2527
2527
  i0.ɵɵadvance();
2528
2528
  i0.ɵɵtextInterpolate2("", "\u00A0\u00A0".repeat(opt_r60.Depth), "", opt_r60.Name);
2529
2529
  } }
2530
- function TagsResourceComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
2530
+ function TagsResourceComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
2531
2531
  const _r59 = i0.ɵɵgetCurrentView();
2532
- i0.ɵɵelementStart(0, "div", 347);
2533
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMoveDialog()); });
2534
- i0.ɵɵelementStart(1, "div", 348);
2535
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r59); return i0.ɵɵresetView($event.stopPropagation()); });
2536
- i0.ɵɵelementStart(2, "div", 349)(3, "h3");
2537
- i0.ɵɵelement(4, "i", 127);
2532
+ i0.ɵɵelementStart(0, "div", 348);
2533
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMoveDialog()); });
2534
+ i0.ɵɵelementStart(1, "div", 349);
2535
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r59); return i0.ɵɵresetView($event.stopPropagation()); });
2536
+ i0.ɵɵelementStart(2, "div", 350)(3, "h3");
2537
+ i0.ɵɵelement(4, "i", 128);
2538
2538
  i0.ɵɵtext(5, " Move Tag");
2539
2539
  i0.ɵɵelementEnd();
2540
- i0.ɵɵelementStart(6, "button", 226);
2541
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMoveDialog()); });
2540
+ i0.ɵɵelementStart(6, "button", 227);
2541
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMoveDialog()); });
2542
2542
  i0.ɵɵelement(7, "i", 53);
2543
2543
  i0.ɵɵelementEnd()();
2544
- i0.ɵɵelementStart(8, "div", 351)(9, "div", 355)(10, "label");
2544
+ i0.ɵɵelementStart(8, "div", 352)(9, "div", 356)(10, "label");
2545
2545
  i0.ɵɵtext(11, "New parent tag");
2546
2546
  i0.ɵɵelementEnd();
2547
- i0.ɵɵelementStart(12, "select", 360);
2548
- i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_20_Template_select_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.MoveNewParentID, $event) || (ctx_r2.MoveNewParentID = $event); return i0.ɵɵresetView($event); });
2549
- i0.ɵɵelementStart(13, "option", 361);
2547
+ i0.ɵɵelementStart(12, "select", 361);
2548
+ i0.ɵɵtwoWayListener("ngModelChange", function TagsResourceComponent_Conditional_19_Template_select_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.MoveNewParentID, $event) || (ctx_r2.MoveNewParentID = $event); return i0.ɵɵresetView($event); });
2549
+ i0.ɵɵelementStart(13, "option", 362);
2550
2550
  i0.ɵɵtext(14, "(Root level \u2014 no parent)");
2551
2551
  i0.ɵɵelementEnd();
2552
- i0.ɵɵrepeaterCreate(15, TagsResourceComponent_Conditional_20_For_16_Template, 2, 3, "option", 361, _forTrack3);
2552
+ i0.ɵɵrepeaterCreate(15, TagsResourceComponent_Conditional_19_For_16_Template, 2, 3, "option", 362, _forTrack3);
2553
2553
  i0.ɵɵelementEnd()()();
2554
- i0.ɵɵelementStart(17, "div", 353)(18, "button", 125);
2555
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ExecuteMove()); });
2556
- i0.ɵɵelement(19, "i", 256);
2554
+ i0.ɵɵelementStart(17, "div", 354)(18, "button", 126);
2555
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ExecuteMove()); });
2556
+ i0.ɵɵelement(19, "i", 257);
2557
2557
  i0.ɵɵtext(20, " Move ");
2558
2558
  i0.ɵɵelementEnd();
2559
2559
  i0.ɵɵelementStart(21, "button", 57);
2560
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMoveDialog()); });
2560
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_19_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMoveDialog()); });
2561
2561
  i0.ɵɵtext(22, "Cancel");
2562
2562
  i0.ɵɵelementEnd()()()();
2563
2563
  } if (rf & 2) {
@@ -2569,43 +2569,43 @@ function TagsResourceComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
2569
2569
  i0.ɵɵadvance(2);
2570
2570
  i0.ɵɵrepeater(ctx_r2.GetMoveTargetOptions());
2571
2571
  } }
2572
- function TagsResourceComponent_Conditional_21_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2573
- i0.ɵɵelement(0, "i", 14);
2572
+ function TagsResourceComponent_Conditional_20_Conditional_17_Template(rf, ctx) { if (rf & 1) {
2573
+ i0.ɵɵelement(0, "i", 11);
2574
2574
  i0.ɵɵtext(1, " Merging... ");
2575
2575
  } }
2576
- function TagsResourceComponent_Conditional_21_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2577
- i0.ɵɵelement(0, "i", 128);
2576
+ function TagsResourceComponent_Conditional_20_Conditional_18_Template(rf, ctx) { if (rf & 1) {
2577
+ i0.ɵɵelement(0, "i", 129);
2578
2578
  i0.ɵɵtext(1, " Merge ");
2579
2579
  } }
2580
- function TagsResourceComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
2580
+ function TagsResourceComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
2581
2581
  const _r61 = i0.ɵɵgetCurrentView();
2582
- i0.ɵɵelementStart(0, "div", 347);
2583
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_21_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMergeIntoDialog()); });
2584
- i0.ɵɵelementStart(1, "div", 348);
2585
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_21_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r61); return i0.ɵɵresetView($event.stopPropagation()); });
2586
- i0.ɵɵelementStart(2, "div", 349)(3, "h3");
2587
- i0.ɵɵelement(4, "i", 128);
2582
+ i0.ɵɵelementStart(0, "div", 348);
2583
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMergeIntoDialog()); });
2584
+ i0.ɵɵelementStart(1, "div", 349);
2585
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r61); return i0.ɵɵresetView($event.stopPropagation()); });
2586
+ i0.ɵɵelementStart(2, "div", 350)(3, "h3");
2587
+ i0.ɵɵelement(4, "i", 129);
2588
2588
  i0.ɵɵtext(5);
2589
2589
  i0.ɵɵelementEnd();
2590
- i0.ɵɵelementStart(6, "button", 226);
2591
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_21_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMergeIntoDialog()); });
2590
+ i0.ɵɵelementStart(6, "button", 227);
2591
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMergeIntoDialog()); });
2592
2592
  i0.ɵɵelement(7, "i", 53);
2593
2593
  i0.ɵɵelementEnd()();
2594
- i0.ɵɵelementStart(8, "div", 351)(9, "p", 362);
2594
+ i0.ɵɵelementStart(8, "div", 352)(9, "p", 363);
2595
2595
  i0.ɵɵtext(10);
2596
2596
  i0.ɵɵelementEnd();
2597
- i0.ɵɵelementStart(11, "div", 355)(12, "label");
2597
+ i0.ɵɵelementStart(11, "div", 356)(12, "label");
2598
2598
  i0.ɵɵtext(13, "Merge into");
2599
2599
  i0.ɵɵelementEnd();
2600
- i0.ɵɵelementStart(14, "mj-combobox", 363);
2601
- i0.ɵɵlistener("ValueChange", function TagsResourceComponent_Conditional_21_Template_mj_combobox_ValueChange_14_listener($event) { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnMergeTargetSelected($event)); });
2600
+ i0.ɵɵelementStart(14, "mj-combobox", 364);
2601
+ i0.ɵɵlistener("ValueChange", function TagsResourceComponent_Conditional_20_Template_mj_combobox_ValueChange_14_listener($event) { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnMergeTargetSelected($event)); });
2602
2602
  i0.ɵɵelementEnd()()();
2603
- i0.ɵɵelementStart(15, "div", 353)(16, "button", 167);
2604
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_21_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ExecuteMergeInto()); });
2605
- i0.ɵɵconditionalCreate(17, TagsResourceComponent_Conditional_21_Conditional_17_Template, 2, 0)(18, TagsResourceComponent_Conditional_21_Conditional_18_Template, 2, 0);
2603
+ i0.ɵɵelementStart(15, "div", 354)(16, "button", 168);
2604
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ExecuteMergeInto()); });
2605
+ i0.ɵɵconditionalCreate(17, TagsResourceComponent_Conditional_20_Conditional_17_Template, 2, 0)(18, TagsResourceComponent_Conditional_20_Conditional_18_Template, 2, 0);
2606
2606
  i0.ɵɵelementEnd();
2607
2607
  i0.ɵɵelementStart(19, "button", 57);
2608
- i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_21_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMergeIntoDialog()); });
2608
+ i0.ɵɵlistener("click", function TagsResourceComponent_Conditional_20_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseMergeIntoDialog()); });
2609
2609
  i0.ɵɵtext(20, "Cancel");
2610
2610
  i0.ɵɵelementEnd()()()();
2611
2611
  } if (rf & 2) {
@@ -7319,53 +7319,51 @@ let TagsResourceComponent = class TagsResourceComponent extends BaseResourceComp
7319
7319
  }
7320
7320
  }
7321
7321
  static ɵfac = /*@__PURE__*/ (() => { let ɵTagsResourceComponent_BaseFactory; return function TagsResourceComponent_Factory(__ngFactoryType__) { return (ɵTagsResourceComponent_BaseFactory || (ɵTagsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(TagsResourceComponent)))(__ngFactoryType__ || TagsResourceComponent); }; })();
7322
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TagsResourceComponent, selectors: [["mj-tags-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 22, vars: 10, consts: [[1, "at-dashboard"], [1, "at-left-nav"], [1, "at-left-nav-header"], [1, "fa-solid", "fa-sitemap"], [1, "at-left-nav-items"], [1, "at-nav-item", 3, "active"], [1, "at-left-nav-footer"], [1, "at-run-pipeline-btn", 3, "click", "disabled"], [1, "at-main-area"], [1, "at-loading-overlay"], [1, "at-schedule-overlay"], [1, "at-nav-item", 3, "click"], [1, "at-nav-badge", 3, "at-nav-badge-live"], [1, "at-nav-badge"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-heart-pulse"], ["text", "Loading tag data\u2026"], [1, "at-page-header"], [1, "at-page-title"], [1, "at-page-subtitle"], [1, "at-page-actions"], ["type", "text", "placeholder", "Search tags...", 1, "at-search-input", 3, "ngModelChange", "input", "ngModel"], [1, "at-page-body"], [1, "at-tag-lib-layout"], [1, "at-tag-lib-main"], [1, "at-card"], [1, "at-card-body", 2, "max-height", "500px", "overflow-y", "auto"], [1, "at-tag-table"], [1, "at-tag-row-clickable", 3, "at-tag-row-selected"], [1, "at-card", 2, "margin-top", "12px"], [1, "at-tag-lib-sidebar"], [1, "at-card", "at-tag-cloud-card"], [1, "at-card-title", 2, "margin-bottom", "12px"], [1, "fa-solid", "fa-cloud"], ["Layout", "spiral", "ColorMode", "weight-gradient", 3, "Items", "MaxFontSize", "MinFontSize", "MaxItems", "Interactive", "Animate"], [1, "at-tag-cloud-empty"], [1, "at-card", 2, "padding", "16px", "margin-top", "12px"], [1, "at-card-title", 2, "margin-bottom", "10px"], [1, "fa-solid", "fa-chart-pie"], [1, "at-tags-by-source"], [1, "at-tag-source-row"], [1, "at-tag-row-clickable", 3, "click"], [1, "at-tag-name-cell"], [1, "at-weight-indicator"], [1, "at-weight-bar"], [1, "at-weight-bar-fill"], [1, "at-weight-value"], [1, "at-tag-bar"], [1, "at-tag-bar-fill"], [1, "at-card-header"], [1, "at-card-title"], [1, "fa-solid", "fa-tag"], [1, "at-slide-close", 2, "background", "none", "border", "none", "cursor", "pointer", "color", "var(--mj-text-muted)", 3, "click"], [1, "fa-solid", "fa-times"], [1, "at-card-body", 2, "max-height", "300px", "overflow-y", "auto"], [1, "at-empty-state"], [1, "at-tag-row-clickable"], [1, "at-action-btn", "at-secondary-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "at-tax-tab-strip"], [1, "at-tax-tab", 3, "click"], [1, "fa-solid", "fa-link"], [1, "at-tax-tab-badge", "at-tax-badge-warning"], [1, "fa-solid", "fa-ban"], [1, "at-tax-tab-badge", "at-tax-badge-error"], [1, "fa-solid", "fa-chart-tree-map"], [1, "fa-solid", "fa-scroll"], [1, "at-tax-split-view"], [1, "at-tax-tree-panel", 2, "position", "relative"], [1, "at-tax-tree-toolbar"], ["type", "text", "placeholder", "Search tags...", 1, "at-search-input", 2, "flex", "1", 3, "ngModelChange", "input", "ngModel"], ["title", "Add root tag", 1, "at-tax-toolbar-btn", 3, "click"], [1, "fa-solid", "fa-plus"], ["title", "Toggle multi-select for drag reparenting", 1, "at-tax-toolbar-btn", 3, "click"], [1, "fa-solid", "fa-check-double"], [1, "at-tax-tree-body", 3, "dragover", "drop"], [1, "at-tax-tree-node", 3, "at-tax-node-selected", "at-tax-node-drag-over", "at-tax-node-multi-selected", "padding-left"], [1, "at-tax-tree-saving-overlay"], [1, "at-tax-details-panel"], [1, "at-empty-state", 2, "height", "100%"], [1, "at-tax-health-bar"], [1, "at-tax-health-label"], [1, "at-tax-health-stat"], [1, "at-tax-dot", "at-tax-dot-total"], [1, "at-tax-health-value"], [1, "at-tax-health-text"], [1, "at-tax-dot", "at-tax-dot-healthy"], [1, "at-tax-health-value", "at-tax-val-success"], [1, "at-tax-dot", "at-tax-dot-attention"], [1, "at-tax-health-value", "at-tax-val-warning"], [1, "at-tax-dot", "at-tax-dot-orphaned"], [1, "at-tax-health-value", "at-tax-val-error"], [1, "at-tax-dot", "at-tax-dot-duplicates"], [1, "at-tax-health-value", "at-tax-val-info"], [1, "at-tax-tree-node", 3, "dragstart", "dragover", "dragleave", "drop", "click"], ["type", "checkbox", 1, "at-tax-tree-checkbox", 3, "checked"], [1, "at-tax-tree-arrow", 3, "click"], [1, "at-tax-health-dot"], [1, "at-tax-tree-label"], [1, "at-tax-tree-count"], ["title", "Add child tag", 1, "at-tax-tree-add-child", 3, "click"], ["type", "checkbox", 1, "at-tax-tree-checkbox", 3, "click", "checked"], ["text", "Moving tags...", "size", "small"], [1, "at-tax-details-header"], [1, "at-tax-breadcrumb"], [1, "at-tax-bc-current"], [1, "at-tax-edit-form"], [1, "at-tax-stats-row"], [1, "at-tax-stat-item"], [1, "at-tax-stat-value"], [1, "at-tax-stat-label"], [1, "at-tax-stat-value", "at-tax-stat-date"], [1, "at-tax-action-toolbar"], [1, "at-tax-detail-section"], [1, "at-tax-bc-link", 3, "click"], [1, "at-tax-bc-sep"], [1, "at-tax-details-title"], ["title", "Edit name", 1, "at-tax-edit-icon", 3, "click"], [1, "fa-solid", "fa-pen"], [1, "at-tax-details-desc"], [1, "at-form-group"], [1, "at-form-label"], ["type", "text", 1, "at-form-input", 3, "ngModelChange", "ngModel"], ["rows", "3", 1, "at-form-textarea", 3, "ngModelChange", "ngModel"], [1, "at-form-actions"], [1, "at-action-btn", "at-primary-btn", 3, "click"], [1, "at-tax-action-btn", 3, "click"], [1, "fa-solid", "fa-arrows-up-down"], [1, "fa-solid", "fa-compress"], [1, "fa-solid", "fa-code-branch"], [1, "at-tax-action-btn", "at-tax-action-danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "at-tax-section-title"], [1, "at-tax-child-chips"], [1, "at-tax-child-chip"], [1, "at-tax-child-chip", 3, "click"], [1, "at-tax-chip-count"], [1, "at-tax-recent-list"], [1, "at-tax-recent-item"], [1, "at-tax-recent-icon"], [1, "at-tax-recent-name"], [1, "at-tax-recent-weight"], [1, "at-tax-recent-date"], [1, "at-tg-toggle-row"], [1, "at-tg-toggle-label"], [1, "at-tg-toggle-t"], [1, "at-tg-toggle-d"], [1, "at-tg-switch", 3, "click"], [1, "at-tg-grid-3"], [1, "at-tg-field"], ["type", "number", "min", "0", 1, "at-search-input", 3, "change", "value"], [1, "at-tg-hint"], ["type", "number", "min", "0", "max", "1", "step", "0.01", 1, "at-search-input", 3, "change", "value"], [1, "at-tg-chip-list"], [1, "at-tg-chip", "scoped"], [1, "at-tg-hint", 2, "font-style", "italic"], [1, "at-action-btn", "at-btn-sm", 3, "click"], [1, "fa-solid", "fa-pencil"], [1, "at-tg-hint", 2, "margin-top", "8px"], [1, "fa-solid", "fa-info-circle"], [1, "at-tg-syn-add"], ["placeholder", "e.g. \"GenAI\"", 1, "at-search-input", 3, "ngModelChange", "keyup.enter", "ngModel"], [1, "at-search-input", 2, "width", "130px", 3, "ngModelChange", "ngModel"], ["value", "Manual"], ["value", "Imported"], ["value", "Merged"], ["value", "LLM"], [1, "at-action-btn", "at-primary-btn", 3, "click", "disabled"], [1, "at-tg-syn-row", 3, "pending"], [1, "at-tg-syn-row"], [1, "at-tg-syn-name"], ["title", "Remove", 1, "at-tg-syn-x", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "fa-solid", "fa-hand-pointer"], [1, "at-tax-dup-stats-bar"], [1, "at-tax-dup-stat"], [1, "at-tax-dup-stat", "at-tax-dup-high"], [1, "at-tax-dup-stat", "at-tax-dup-moderate"], [1, "at-tax-dup-list"], [1, "at-tax-dup-card", 3, "at-tax-dup-high", "at-tax-dup-moderate"], [1, "fa-solid", "fa-check-circle"], [1, "at-tax-dup-card"], [1, "at-tax-dup-tag"], [1, "at-tax-dup-similarity"], [1, "at-tax-sim-percent", "high"], [1, "fa-solid", "fa-clone"], [1, "at-tax-dup-actions"], [1, "at-tax-dup-btn", "at-tax-dup-btn-primary", 3, "click", "disabled"], [1, "at-tax-dup-btn", 3, "click"], [1, "at-tax-dup-arrow"], [1, "fa-solid", "fa-arrows-left-right"], [1, "at-tax-sim-bar-bg"], [1, "at-tax-sim-bar-fill"], [1, "at-tax-sim-percent"], [1, "at-tax-orphan-toolbar"], [1, "at-tax-orphan-count"], [1, "at-tax-orphan-desc"], [1, "at-tax-orphan-bulk"], [1, "at-tax-bulk-btn", 3, "click"], [1, "fa-solid", "fa-square-check"], [1, "fa-regular", "fa-square"], [1, "at-tax-bulk-btn", "at-tax-bulk-danger", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "at-tax-orphan-grid"], [1, "at-tax-orphan-card"], [1, "at-tax-orphan-header"], [1, "at-tax-orphan-name"], ["type", "checkbox", 1, "at-tax-orphan-checkbox", 3, "change", "click", "checked"], [1, "at-tax-orphan-stats"], [1, "at-tax-orphan-dates"], [1, "at-tax-orphan-actions"], [1, "at-tax-orphan-btn", "at-tax-orphan-delete", 3, "click"], [1, "at-tax-orphan-btn"], [1, "at-tax-treemap-kpi-strip"], [1, "at-tax-treemap-kpi"], [1, "at-tax-treemap-container"], [1, "at-tax-drillin-overlay"], [1, "at-tax-treemap-kpi-value"], [1, "at-tax-treemap-kpi-label"], [1, "at-tax-treemap-cell", "at-tax-treemap-cell-clickable", 3, "class", "grid-row"], [1, "at-tax-treemap-cell", "at-tax-treemap-cell-clickable", 3, "click"], [1, "at-tax-cell-name"], [1, "at-tax-cell-count"], [1, "at-tax-drillin-overlay", 3, "click"], [1, "at-tax-drillin-panel", 3, "click"], [1, "at-tax-drillin-header"], [1, "at-schedule-dialog-close", 3, "click"], [1, "at-tax-drillin-body"], [1, "at-tax-drillin-footer"], [1, "at-tax-audit-filters"], [1, "at-tax-audit-filter-label"], [1, "at-tax-audit-checkbox-group"], [1, "at-tax-audit-checkbox"], ["type", "checkbox", 3, "change", "checked"], [1, "at-tax-audit-timeline"], [1, "at-tax-audit-event"], [1, "at-tax-audit-event-icon"], [1, "at-tax-audit-event-body"], [1, "at-tax-audit-event-desc"], [1, "at-tax-tag-ref"], [1, "at-tax-audit-event-meta"], [1, "sg-shell"], [1, "sg-main"], [1, "sg-toolbar"], ["placeholder", "Search proposed name, source text\u2026", 1, "at-search-input", 2, "width", "280px", 3, "ngModelChange", "input", "ngModel"], [1, "at-search-input", 2, "width", "200px", 3, "ngModelChange", "change", "ngModel"], ["value", ""], [3, "value"], ["type", "number", "step", "0.05", "min", "0", "max", "1", "placeholder", "Min score", 1, "at-search-input", 2, "width", "100px", 3, "ngModelChange", "ngModel"], [2, "flex", "1"], [1, "at-muted", 2, "font-size", "12px"], [1, "sg-bulk-bar"], [1, "sg-table-body"], [1, "sg-table"], [1, "sg-drawer"], [1, "at-action-btn", "at-success-btn", "at-btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-check"], [1, "at-action-btn", "at-danger-btn", "at-btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-inbox"], [2, "width", "30px"], [3, "sg-row-checked", "sg-row-selected"], [3, "click"], ["type", "checkbox", 3, "click", "checked"], [1, "at-muted"], [1, "sg-score"], [1, "at-muted", 2, "font-size", "11px"], [1, "sg-row-actions"], [1, "sg-score-bar"], ["title", "Create as new tag", 1, "at-action-btn", "at-btn-xs", 3, "click"], ["title", "Merge into best match", 1, "at-action-btn", "at-primary-btn", "at-btn-xs"], ["title", "Reject", 1, "at-action-btn", "at-danger-btn", "at-btn-xs", 3, "click"], ["title", "Merge into best match", 1, "at-action-btn", "at-primary-btn", "at-btn-xs", 3, "click"], [1, "fa-solid", "fa-code-merge"], [1, "sg-drawer-hd"], [2, "font-weight", "600"], ["title", "Close", 1, "at-action-btn", "at-btn-xs", 3, "click"], [1, "sg-drawer-bd"], [1, "sg-preview"], [1, "sg-drawer-ft"], [1, "at-action-btn", "at-primary-btn", 3, "disabled"], [1, "at-action-btn", 3, "click", "disabled"], [1, "at-action-btn", "at-danger-btn", 3, "click", "disabled"], [1, "sg-candidate"], [1, "at-action-btn", "at-secondary-btn", 3, "click", "disabled"], [1, "health-shell"], [1, "runbar"], [1, "stat"], [1, "l"], [1, "v"], [1, "grow"], [1, "health-cards"], [1, "h-card", "merge"], [1, "top"], [1, "ic"], [1, "name"], [1, "big"], [1, "sub"], [1, "ft"], [1, "at-action-btn", "at-primary-btn", "at-btn-sm", 3, "click"], [1, "h-card", "lowusage"], [1, "fa-solid", "fa-leaf"], [1, "h-card", "widenode"], [1, "fa-solid", "fa-tree"], [1, "threshold-form"], [1, "grid"], [1, "field"], ["type", "number", "min", "0", 1, "at-search-input", 3, "ngModelChange", "ngModel"], [1, "at-hint"], ["type", "number", "min", "0", "max", "1", "step", "0.01", 1, "at-search-input", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "0", "max", "1", "step", "0.05", 1, "at-search-input", 3, "ngModelChange", "ngModel"], [1, "run-history"], [1, "run-history-hd"], [1, "at-empty-state", 2, "padding", "32px"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "at-slide-overlay", 3, "click"], [1, "at-slide-panel", "at-detail-panel"], [1, "at-slide-header"], [1, "fa-solid", "fa-file-lines"], ["aria-label", "Close item detail", 1, "at-slide-close", 3, "click"], [1, "at-slide-body"], [1, "at-detail-item-header"], [1, "at-detail-item-name"], [1, "at-detail-badges"], [1, "at-detail-badge", "at-detail-badge-source"], [1, "at-detail-section"], [1, "at-detail-section-label"], [1, "at-detail-meta-grid"], [1, "at-detail-meta-row"], [1, "at-detail-meta-key"], [1, "at-detail-meta-value"], [1, "at-detail-actions"], [1, "fa-solid", "fa-external-link-alt"], ["disabled", "", 1, "at-action-btn", "at-secondary-btn"], [1, "fa-solid", "fa-magnifying-glass"], [1, "at-detail-badge", "at-detail-badge-type"], [1, "at-detail-badge", "at-detail-badge-file"], [1, "fa-solid", "fa-file"], ["target", "_blank", 1, "at-detail-link", 3, "href"], [1, "fa-solid", "fa-external-link-alt", 2, "font-size", "0.65rem", "margin-left", "4px"], [1, "at-detail-text-preview"], [1, "at-detail-tags"], [1, "at-tag-pill", "at-tag-weighted", 3, "font-size"], [1, "at-tag-pill", "at-tag-weighted"], [1, "at-tag-weight"], [1, "at-detail-meta-value", "at-detail-meta-mono"], [1, "at-schedule-overlay", 3, "click"], [1, "at-schedule-dialog", 3, "click"], [1, "at-schedule-dialog-header"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "at-schedule-dialog-body"], [1, "at-confirm-message"], [1, "at-schedule-dialog-footer"], [1, "at-action-btn", "at-danger-btn", 3, "click"], [1, "at-schedule-field"], ["type", "text", "placeholder", "Tag A, Tag B, Tag C", 1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "ngModel"], [1, "at-tax-create-context"], ["type", "text", "placeholder", "Tag name", 1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "keydown.enter", "ngModel"], ["rows", "3", "placeholder", "Brief description of this tag", 1, "mj-textarea", 2, "width", "100%", 3, "ngModelChange", "ngModel"], [1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "ngModel"], [3, "ngValue"], [2, "font-size", "0.85rem", "color", "var(--mj-text-secondary)", "margin", "0 0 12px"], ["TextField", "Label", "ValueField", "ID", "Placeholder", "Search and select a tag...", 3, "ValueChange", "Data", "Filterable", "ValuePrimitive"]], template: function TagsResourceComponent_Template(rf, ctx) { if (rf & 1) {
7323
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h2");
7324
- i0.ɵɵelement(4, "i", 3);
7325
- i0.ɵɵtext(5, " Tags");
7322
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TagsResourceComponent, selectors: [["mj-tags-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 21, vars: 12, consts: [["Title", "Tags", "Icon", "fa-solid fa-sitemap", "Subtitle", "Taxonomy management, health monitoring, and tag library"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click", "disabled"], [3, "Flex", "Padding"], [1, "at-dashboard"], [1, "at-left-nav"], [1, "at-left-nav-items"], [1, "at-nav-item", 3, "active"], [1, "at-main-area"], [1, "at-loading-overlay"], [1, "at-schedule-overlay"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-heart-pulse"], [1, "at-nav-item", 3, "click"], [1, "at-nav-badge", 3, "at-nav-badge-live"], [1, "at-nav-badge"], ["text", "Loading tag data\u2026"], [1, "at-page-header"], [1, "at-page-title"], [1, "at-page-subtitle"], [1, "at-page-actions"], ["type", "text", "placeholder", "Search tags...", 1, "at-search-input", 3, "ngModelChange", "input", "ngModel"], [1, "at-page-body"], [1, "at-tag-lib-layout"], [1, "at-tag-lib-main"], [1, "at-card"], [1, "at-card-body", 2, "max-height", "500px", "overflow-y", "auto"], [1, "at-tag-table"], [1, "at-tag-row-clickable", 3, "at-tag-row-selected"], [1, "at-card", 2, "margin-top", "12px"], [1, "at-tag-lib-sidebar"], [1, "at-card", "at-tag-cloud-card"], [1, "at-card-title", 2, "margin-bottom", "12px"], [1, "fa-solid", "fa-cloud"], ["Layout", "spiral", "ColorMode", "weight-gradient", 3, "Items", "MaxFontSize", "MinFontSize", "MaxItems", "Interactive", "Animate"], [1, "at-tag-cloud-empty"], [1, "at-card", 2, "padding", "16px", "margin-top", "12px"], [1, "at-card-title", 2, "margin-bottom", "10px"], [1, "fa-solid", "fa-chart-pie"], [1, "at-tags-by-source"], [1, "at-tag-source-row"], [1, "at-tag-row-clickable", 3, "click"], [1, "at-tag-name-cell"], [1, "at-weight-indicator"], [1, "at-weight-bar"], [1, "at-weight-bar-fill"], [1, "at-weight-value"], [1, "at-tag-bar"], [1, "at-tag-bar-fill"], [1, "at-card-header"], [1, "at-card-title"], [1, "fa-solid", "fa-tag"], ["aria-label", "Close", 1, "at-slide-close", 2, "background", "none", "border", "none", "cursor", "pointer", "color", "var(--mj-text-muted)", 3, "click"], [1, "fa-solid", "fa-times"], [1, "at-card-body", 2, "max-height", "300px", "overflow-y", "auto"], [1, "at-empty-state"], [1, "at-tag-row-clickable"], [1, "at-action-btn", "at-secondary-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "at-tax-tab-strip"], [1, "at-tax-tab", 3, "click"], [1, "fa-solid", "fa-sitemap"], [1, "fa-solid", "fa-link"], [1, "at-tax-tab-badge", "at-tax-badge-warning"], [1, "fa-solid", "fa-ban"], [1, "at-tax-tab-badge", "at-tax-badge-error"], [1, "fa-solid", "fa-chart-tree-map"], [1, "fa-solid", "fa-scroll"], [1, "at-tax-split-view"], [1, "at-tax-tree-panel", 2, "position", "relative"], [1, "at-tax-tree-toolbar"], ["type", "text", "placeholder", "Search tags...", 1, "at-search-input", 2, "flex", "1", 3, "ngModelChange", "input", "ngModel"], ["title", "Add root tag", 1, "at-tax-toolbar-btn", 3, "click"], [1, "fa-solid", "fa-plus"], ["title", "Toggle multi-select for drag reparenting", 1, "at-tax-toolbar-btn", 3, "click"], [1, "fa-solid", "fa-check-double"], [1, "at-tax-tree-body", 3, "dragover", "drop"], [1, "at-tax-tree-node", 3, "at-tax-node-selected", "at-tax-node-drag-over", "at-tax-node-multi-selected", "padding-left"], [1, "at-tax-tree-saving-overlay"], [1, "at-tax-details-panel"], [1, "at-empty-state", 2, "height", "100%"], [1, "at-tax-health-bar"], [1, "at-tax-health-label"], [1, "at-tax-health-stat"], [1, "at-tax-dot", "at-tax-dot-total"], [1, "at-tax-health-value"], [1, "at-tax-health-text"], [1, "at-tax-dot", "at-tax-dot-healthy"], [1, "at-tax-health-value", "at-tax-val-success"], [1, "at-tax-dot", "at-tax-dot-attention"], [1, "at-tax-health-value", "at-tax-val-warning"], [1, "at-tax-dot", "at-tax-dot-orphaned"], [1, "at-tax-health-value", "at-tax-val-error"], [1, "at-tax-dot", "at-tax-dot-duplicates"], [1, "at-tax-health-value", "at-tax-val-info"], [1, "at-tax-tree-node", 3, "dragstart", "dragover", "dragleave", "drop", "click"], ["type", "checkbox", 1, "at-tax-tree-checkbox", 3, "checked"], [1, "at-tax-tree-arrow", 3, "click"], [1, "at-tax-health-dot"], [1, "at-tax-tree-label"], [1, "at-tax-tree-count"], ["title", "Add child tag", 1, "at-tax-tree-add-child", 3, "click"], ["type", "checkbox", 1, "at-tax-tree-checkbox", 3, "click", "checked"], ["text", "Moving tags...", "size", "small"], [1, "at-tax-details-header"], [1, "at-tax-breadcrumb"], [1, "at-tax-bc-current"], [1, "at-tax-edit-form"], [1, "at-tax-stats-row"], [1, "at-tax-stat-item"], [1, "at-tax-stat-value"], [1, "at-tax-stat-label"], [1, "at-tax-stat-value", "at-tax-stat-date"], [1, "at-tax-action-toolbar"], [1, "at-tax-detail-section"], [1, "at-tax-bc-link", 3, "click"], [1, "at-tax-bc-sep"], [1, "at-tax-details-title"], ["title", "Edit name", 1, "at-tax-edit-icon", 3, "click"], [1, "fa-solid", "fa-pen"], [1, "at-tax-details-desc"], [1, "at-form-group"], [1, "at-form-label"], ["type", "text", 1, "at-form-input", 3, "ngModelChange", "ngModel"], ["rows", "3", 1, "at-form-textarea", 3, "ngModelChange", "ngModel"], [1, "at-form-actions"], [1, "at-action-btn", "at-primary-btn", 3, "click"], [1, "at-tax-action-btn", 3, "click"], [1, "fa-solid", "fa-arrows-up-down"], [1, "fa-solid", "fa-compress"], [1, "fa-solid", "fa-code-branch"], [1, "at-tax-action-btn", "at-tax-action-danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "at-tax-section-title"], [1, "at-tax-child-chips"], [1, "at-tax-child-chip"], [1, "at-tax-child-chip", 3, "click"], [1, "at-tax-chip-count"], [1, "at-tax-recent-list"], [1, "at-tax-recent-item"], [1, "at-tax-recent-icon"], [1, "at-tax-recent-name"], [1, "at-tax-recent-weight"], [1, "at-tax-recent-date"], [1, "at-tg-toggle-row"], [1, "at-tg-toggle-label"], [1, "at-tg-toggle-t"], [1, "at-tg-toggle-d"], [1, "at-tg-switch", 3, "click"], [1, "at-tg-grid-3"], [1, "at-tg-field"], ["type", "number", "min", "0", 1, "at-search-input", 3, "change", "value"], [1, "at-tg-hint"], ["type", "number", "min", "0", "max", "1", "step", "0.01", 1, "at-search-input", 3, "change", "value"], [1, "at-tg-chip-list"], [1, "at-tg-chip", "scoped"], [1, "at-tg-hint", 2, "font-style", "italic"], [1, "at-action-btn", "at-btn-sm", 3, "click"], [1, "fa-solid", "fa-pencil"], [1, "at-tg-hint", 2, "margin-top", "8px"], [1, "fa-solid", "fa-info-circle"], [1, "at-tg-syn-add"], ["placeholder", "e.g. \"GenAI\"", 1, "at-search-input", 3, "ngModelChange", "keyup.enter", "ngModel"], [1, "at-search-input", 2, "width", "130px", 3, "ngModelChange", "ngModel"], ["value", "Manual"], ["value", "Imported"], ["value", "Merged"], ["value", "LLM"], [1, "at-action-btn", "at-primary-btn", 3, "click", "disabled"], [1, "at-tg-syn-row", 3, "pending"], [1, "at-tg-syn-row"], [1, "at-tg-syn-name"], ["title", "Remove", 1, "at-tg-syn-x", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "fa-solid", "fa-hand-pointer"], [1, "at-tax-dup-stats-bar"], [1, "at-tax-dup-stat"], [1, "at-tax-dup-stat", "at-tax-dup-high"], [1, "at-tax-dup-stat", "at-tax-dup-moderate"], [1, "at-tax-dup-list"], [1, "at-tax-dup-card", 3, "at-tax-dup-high", "at-tax-dup-moderate"], [1, "fa-solid", "fa-check-circle"], [1, "at-tax-dup-card"], [1, "at-tax-dup-tag"], [1, "at-tax-dup-similarity"], [1, "at-tax-sim-percent", "high"], [1, "fa-solid", "fa-clone"], [1, "at-tax-dup-actions"], [1, "at-tax-dup-btn", "at-tax-dup-btn-primary", 3, "click", "disabled"], [1, "at-tax-dup-btn", 3, "click"], [1, "at-tax-dup-arrow"], [1, "fa-solid", "fa-arrows-left-right"], [1, "at-tax-sim-bar-bg"], [1, "at-tax-sim-bar-fill"], [1, "at-tax-sim-percent"], [1, "at-tax-orphan-toolbar"], [1, "at-tax-orphan-count"], [1, "at-tax-orphan-desc"], [1, "at-tax-orphan-bulk"], [1, "at-tax-bulk-btn", 3, "click"], [1, "fa-solid", "fa-square-check"], [1, "fa-regular", "fa-square"], [1, "at-tax-bulk-btn", "at-tax-bulk-danger", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "at-tax-orphan-grid"], [1, "at-tax-orphan-card"], [1, "at-tax-orphan-header"], [1, "at-tax-orphan-name"], ["type", "checkbox", 1, "at-tax-orphan-checkbox", 3, "change", "click", "checked"], [1, "at-tax-orphan-stats"], [1, "at-tax-orphan-dates"], [1, "at-tax-orphan-actions"], [1, "at-tax-orphan-btn", "at-tax-orphan-delete", 3, "click"], [1, "at-tax-orphan-btn"], [1, "at-tax-treemap-kpi-strip"], [1, "at-tax-treemap-kpi"], [1, "at-tax-treemap-container"], [1, "at-tax-drillin-overlay"], [1, "at-tax-treemap-kpi-value"], [1, "at-tax-treemap-kpi-label"], [1, "at-tax-treemap-cell", "at-tax-treemap-cell-clickable", 3, "class", "grid-row"], [1, "at-tax-treemap-cell", "at-tax-treemap-cell-clickable", 3, "click"], [1, "at-tax-cell-name"], [1, "at-tax-cell-count"], [1, "at-tax-drillin-overlay", 3, "click"], [1, "at-tax-drillin-panel", 3, "click"], [1, "at-tax-drillin-header"], ["aria-label", "Close", 1, "at-schedule-dialog-close", 3, "click"], [1, "at-tax-drillin-body"], [1, "at-tax-drillin-footer"], [1, "at-tax-audit-filters"], [1, "at-tax-audit-filter-label"], [1, "at-tax-audit-checkbox-group"], [1, "at-tax-audit-checkbox"], ["type", "checkbox", 3, "change", "checked"], [1, "at-tax-audit-timeline"], [1, "at-tax-audit-event"], [1, "at-tax-audit-event-icon"], [1, "at-tax-audit-event-body"], [1, "at-tax-audit-event-desc"], [1, "at-tax-tag-ref"], [1, "at-tax-audit-event-meta"], [1, "sg-shell"], [1, "sg-main"], [1, "sg-toolbar"], ["placeholder", "Search proposed name, source text\u2026", 1, "at-search-input", 2, "width", "280px", 3, "ngModelChange", "input", "ngModel"], [1, "at-search-input", 2, "width", "200px", 3, "ngModelChange", "change", "ngModel"], ["value", ""], [3, "value"], ["type", "number", "step", "0.05", "min", "0", "max", "1", "placeholder", "Min score", 1, "at-search-input", 2, "width", "100px", 3, "ngModelChange", "ngModel"], [2, "flex", "1"], [1, "at-muted", 2, "font-size", "12px"], [1, "sg-bulk-bar"], [1, "sg-table-body"], [1, "sg-table"], [1, "sg-drawer"], [1, "at-action-btn", "at-success-btn", "at-btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-check"], [1, "at-action-btn", "at-danger-btn", "at-btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-inbox"], [2, "width", "30px"], [3, "sg-row-checked", "sg-row-selected"], [3, "click"], ["type", "checkbox", 3, "click", "checked"], [1, "at-muted"], [1, "sg-score"], [1, "at-muted", 2, "font-size", "11px"], [1, "sg-row-actions"], [1, "sg-score-bar"], ["title", "Create as new tag", 1, "at-action-btn", "at-btn-xs", 3, "click"], ["title", "Merge into best match", 1, "at-action-btn", "at-primary-btn", "at-btn-xs"], ["title", "Reject", 1, "at-action-btn", "at-danger-btn", "at-btn-xs", 3, "click"], ["title", "Merge into best match", 1, "at-action-btn", "at-primary-btn", "at-btn-xs", 3, "click"], [1, "fa-solid", "fa-code-merge"], [1, "sg-drawer-hd"], [2, "font-weight", "600"], ["title", "Close", "aria-label", "Close", 1, "at-action-btn", "at-btn-xs", 3, "click"], [1, "sg-drawer-bd"], [1, "sg-preview"], [1, "sg-drawer-ft"], [1, "at-action-btn", "at-primary-btn", 3, "disabled"], [1, "at-action-btn", 3, "click", "disabled"], [1, "at-action-btn", "at-danger-btn", 3, "click", "disabled"], [1, "sg-candidate"], [1, "at-action-btn", "at-secondary-btn", 3, "click", "disabled"], [1, "health-shell"], [1, "runbar"], [1, "stat"], [1, "l"], [1, "v"], [1, "grow"], [1, "health-cards"], [1, "h-card", "merge"], [1, "top"], [1, "ic"], [1, "name"], [1, "big"], [1, "sub"], [1, "ft"], [1, "at-action-btn", "at-primary-btn", "at-btn-sm", 3, "click"], [1, "h-card", "lowusage"], [1, "fa-solid", "fa-leaf"], [1, "h-card", "widenode"], [1, "fa-solid", "fa-tree"], [1, "threshold-form"], [1, "grid"], [1, "field"], ["type", "number", "min", "0", 1, "at-search-input", 3, "ngModelChange", "ngModel"], [1, "at-hint"], ["type", "number", "min", "0", "max", "1", "step", "0.01", 1, "at-search-input", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "0", "max", "1", "step", "0.05", 1, "at-search-input", 3, "ngModelChange", "ngModel"], [1, "run-history"], [1, "run-history-hd"], [1, "at-empty-state", 2, "padding", "32px"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "at-slide-overlay", 3, "click"], [1, "at-slide-panel", "at-detail-panel"], [1, "at-slide-header"], [1, "fa-solid", "fa-file-lines"], ["aria-label", "Close item detail", 1, "at-slide-close", 3, "click"], [1, "at-slide-body"], [1, "at-detail-item-header"], [1, "at-detail-item-name"], [1, "at-detail-badges"], [1, "at-detail-badge", "at-detail-badge-source"], [1, "at-detail-section"], [1, "at-detail-section-label"], [1, "at-detail-meta-grid"], [1, "at-detail-meta-row"], [1, "at-detail-meta-key"], [1, "at-detail-meta-value"], [1, "at-detail-actions"], [1, "fa-solid", "fa-external-link-alt"], ["disabled", "", 1, "at-action-btn", "at-secondary-btn"], [1, "fa-solid", "fa-magnifying-glass"], [1, "at-detail-badge", "at-detail-badge-type"], [1, "at-detail-badge", "at-detail-badge-file"], [1, "fa-solid", "fa-file"], ["target", "_blank", 1, "at-detail-link", 3, "href"], [1, "fa-solid", "fa-external-link-alt", 2, "font-size", "0.65rem", "margin-left", "4px"], [1, "at-detail-text-preview"], [1, "at-detail-tags"], [1, "at-tag-pill", "at-tag-weighted", 3, "font-size"], [1, "at-tag-pill", "at-tag-weighted"], [1, "at-tag-weight"], [1, "at-detail-meta-value", "at-detail-meta-mono"], [1, "at-schedule-overlay", 3, "click"], [1, "at-schedule-dialog", 3, "click"], [1, "at-schedule-dialog-header"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "at-schedule-dialog-body"], [1, "at-confirm-message"], [1, "at-schedule-dialog-footer"], [1, "at-action-btn", "at-danger-btn", 3, "click"], [1, "at-schedule-field"], ["type", "text", "placeholder", "Tag A, Tag B, Tag C", 1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "ngModel"], [1, "at-tax-create-context"], ["type", "text", "placeholder", "Tag name", 1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "keydown.enter", "ngModel"], ["rows", "3", "placeholder", "Brief description of this tag", 1, "mj-textarea", 2, "width", "100%", 3, "ngModelChange", "ngModel"], [1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "ngModel"], [3, "ngValue"], [2, "font-size", "0.85rem", "color", "var(--mj-text-secondary)", "margin", "0 0 12px"], ["TextField", "Label", "ValueField", "ID", "Placeholder", "Search and select a tag...", 3, "ValueChange", "Data", "Filterable", "ValuePrimitive"]], template: function TagsResourceComponent_Template(rf, ctx) { if (rf & 1) {
7323
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "button", 2);
7324
+ i0.ɵɵlistener("click", function TagsResourceComponent_Template_button_click_3_listener() { return ctx.RunHealthNow(); });
7325
+ i0.ɵɵconditionalCreate(4, TagsResourceComponent_Conditional_4_Template, 2, 0)(5, TagsResourceComponent_Conditional_5_Template, 2, 0);
7326
+ i0.ɵɵelementEnd()()();
7327
+ i0.ɵɵelementStart(6, "mj-page-body", 3)(7, "div", 4)(8, "div", 5)(9, "div", 6);
7328
+ i0.ɵɵrepeaterCreate(10, TagsResourceComponent_For_11_Template, 4, 6, "div", 7, _forTrack0);
7326
7329
  i0.ɵɵelementEnd()();
7327
- i0.ɵɵelementStart(6, "div", 4);
7328
- i0.ɵɵrepeaterCreate(7, TagsResourceComponent_For_8_Template, 4, 6, "div", 5, _forTrack0);
7330
+ i0.ɵɵelementStart(12, "div", 8);
7331
+ i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_13_Template, 2, 0, "div", 9);
7332
+ i0.ɵɵconditionalCreate(14, TagsResourceComponent_Conditional_14_Template, 4, 4);
7329
7333
  i0.ɵɵelementEnd();
7330
- i0.ɵɵelementStart(9, "div", 6)(10, "button", 7);
7331
- i0.ɵɵlistener("click", function TagsResourceComponent_Template_button_click_10_listener() { return ctx.RunHealthNow(); });
7332
- i0.ɵɵconditionalCreate(11, TagsResourceComponent_Conditional_11_Template, 2, 0)(12, TagsResourceComponent_Conditional_12_Template, 2, 0);
7334
+ i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_15_Template, 41, 9);
7335
+ i0.ɵɵconditionalCreate(16, TagsResourceComponent_Conditional_16_Template, 17, 2, "div", 10);
7336
+ i0.ɵɵconditionalCreate(17, TagsResourceComponent_Conditional_17_Template, 21, 2, "div", 10);
7337
+ i0.ɵɵconditionalCreate(18, TagsResourceComponent_Conditional_18_Template, 25, 4, "div", 10);
7338
+ i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_19_Template, 23, 2, "div", 10);
7339
+ i0.ɵɵconditionalCreate(20, TagsResourceComponent_Conditional_20_Template, 21, 7, "div", 10);
7333
7340
  i0.ɵɵelementEnd()()();
7334
- i0.ɵɵelementStart(13, "div", 8);
7335
- i0.ɵɵconditionalCreate(14, TagsResourceComponent_Conditional_14_Template, 2, 0, "div", 9);
7336
- i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_15_Template, 4, 4);
7337
- i0.ɵɵelementEnd();
7338
- i0.ɵɵconditionalCreate(16, TagsResourceComponent_Conditional_16_Template, 41, 9);
7339
- i0.ɵɵconditionalCreate(17, TagsResourceComponent_Conditional_17_Template, 17, 2, "div", 10);
7340
- i0.ɵɵconditionalCreate(18, TagsResourceComponent_Conditional_18_Template, 21, 2, "div", 10);
7341
- i0.ɵɵconditionalCreate(19, TagsResourceComponent_Conditional_19_Template, 25, 4, "div", 10);
7342
- i0.ɵɵconditionalCreate(20, TagsResourceComponent_Conditional_20_Template, 23, 2, "div", 10);
7343
- i0.ɵɵconditionalCreate(21, TagsResourceComponent_Conditional_21_Template, 21, 7, "div", 10);
7344
- i0.ɵɵelementEnd();
7345
7341
  } if (rf & 2) {
7346
- i0.ɵɵadvance(7);
7347
- i0.ɵɵrepeater(ctx.NavItems);
7348
7342
  i0.ɵɵadvance(3);
7349
7343
  i0.ɵɵproperty("disabled", ctx.HealthRunning);
7350
7344
  i0.ɵɵadvance();
7351
- i0.ɵɵconditional(ctx.HealthRunning ? 11 : 12);
7345
+ i0.ɵɵconditional(ctx.HealthRunning ? 4 : 5);
7346
+ i0.ɵɵadvance(2);
7347
+ i0.ɵɵproperty("Flex", true)("Padding", false);
7348
+ i0.ɵɵadvance(4);
7349
+ i0.ɵɵrepeater(ctx.NavItems);
7352
7350
  i0.ɵɵadvance(3);
7353
- i0.ɵɵconditional(ctx.IsLoading ? 14 : -1);
7351
+ i0.ɵɵconditional(ctx.IsLoading ? 13 : -1);
7354
7352
  i0.ɵɵadvance();
7355
- i0.ɵɵconditional(!ctx.IsLoading ? 15 : -1);
7353
+ i0.ɵɵconditional(!ctx.IsLoading ? 14 : -1);
7356
7354
  i0.ɵɵadvance();
7357
- i0.ɵɵconditional(ctx.ShowItemDetail && ctx.SelectedFeedItem ? 16 : -1);
7355
+ i0.ɵɵconditional(ctx.ShowItemDetail && ctx.SelectedFeedItem ? 15 : -1);
7358
7356
  i0.ɵɵadvance();
7359
- i0.ɵɵconditional(ctx.ShowConfirmDialog ? 17 : -1);
7357
+ i0.ɵɵconditional(ctx.ShowConfirmDialog ? 16 : -1);
7360
7358
  i0.ɵɵadvance();
7361
- i0.ɵɵconditional(ctx.ShowSplitDialog ? 18 : -1);
7359
+ i0.ɵɵconditional(ctx.ShowSplitDialog ? 17 : -1);
7362
7360
  i0.ɵɵadvance();
7363
- i0.ɵɵconditional(ctx.ShowCreateTagDialog ? 19 : -1);
7361
+ i0.ɵɵconditional(ctx.ShowCreateTagDialog ? 18 : -1);
7364
7362
  i0.ɵɵadvance();
7365
- i0.ɵɵconditional(ctx.ShowMoveDialog ? 20 : -1);
7363
+ i0.ɵɵconditional(ctx.ShowMoveDialog ? 19 : -1);
7366
7364
  i0.ɵɵadvance();
7367
- i0.ɵɵconditional(ctx.ShowMergeIntoDialog ? 21 : -1);
7368
- } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.MaxValidator, i1.NgModel, i2.LoadingComponent, i3.MJComboboxComponent, i4.MJWordCloudComponent, i5.DecimalPipe, i5.DatePipe], styles: ["/* ============================================================\n Content Autotagging Dashboard\n All colors use MJ design tokens \u2014 no hardcoded hex values.\n All classes prefixed with at- to prevent leaking (ViewEncapsulation.None).\n ============================================================ */\n\n/* \u2500\u2500 Root layout \u2500\u2500 */\n\n.at-dashboard {\n display: flex;\n height: 100%;\n overflow: hidden;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 LEFT NAV \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-left-nav {\n width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n.at-left-nav-header {\n padding: 16px 16px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-left-nav-header h2 {\n font-size: 0.95rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n color: var(--mj-text-primary);\n}\n\n.at-left-nav-header h2 i {\n color: var(--mj-brand-primary);\n}\n\n.at-left-nav-items {\n flex: 1;\n padding: 8px;\n overflow-y: auto;\n}\n\n.at-nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 0.82rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.12s ease;\n margin-bottom: 2px;\n}\n\n.at-nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.at-nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-nav-item i {\n width: 18px;\n text-align: center;\n font-size: 0.8rem;\n}\n\n.at-nav-badge {\n margin-left: auto;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 7px;\n border-radius: 10px;\n font-size: 0.65rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.at-nav-item.active .at-nav-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-nav-badge-live {\n background: var(--mj-status-success-bg) !important;\n color: var(--mj-status-success-text) !important;\n}\n\n.at-nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 12px;\n}\n\n.at-left-nav-footer {\n padding: 12px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-run-pipeline-btn {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px;\n border: none;\n border-radius: 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.at-run-pipeline-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-run-pipeline-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 MAIN CONTENT AREA \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-main-area {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.at-loading-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n\n.at-page-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-page-title {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-page-subtitle {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-page-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.at-page-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 16px 20px;\n min-height: 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SHARED COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border: 1px solid;\n border-radius: 7px;\n cursor: pointer;\n font-size: 0.78rem;\n font-weight: 500;\n transition: all 0.15s ease;\n}\n\n.at-primary-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-primary-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-primary-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.at-secondary-btn {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.at-secondary-btn:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.at-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-card-title {\n font-size: 0.82rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-primary);\n}\n\n.at-card-title i {\n color: var(--mj-brand-primary);\n font-size: 0.75rem;\n}\n\n.at-card-body {\n padding: 0;\n}\n\n.at-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 32px 16px;\n color: var(--mj-text-disabled);\n}\n\n.at-empty-state i {\n font-size: 28px;\n}\n\n.at-empty-state p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 KPI STRIP \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-kpi-strip {\n display: flex;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.at-kpi-card {\n flex: 1;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.at-kpi-value {\n font-size: 1.4rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-kpi-error-value {\n color: var(--mj-status-error-text);\n}\n\n.at-kpi-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-kpi-trend {\n font-size: 0.68rem;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--mj-text-muted);\n}\n\n.at-kpi-trend.up {\n color: var(--mj-status-success-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 PIPELINE TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-layout {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.at-pipeline-center {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n min-height: 0;\n}\n\n.at-pipeline-right {\n width: 320px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Pipeline Stages */\n\n.at-pipeline-stages {\n display: flex;\n gap: 0;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 16px;\n}\n\n.at-pipeline-stage {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.at-pipeline-stage-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 0.85rem;\n}\n\n.stage-idle .at-pipeline-stage-icon {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.stage-active .at-pipeline-stage-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.stage-complete .at-pipeline-stage-icon {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n@keyframes at-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 30%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent); }\n}\n\n.at-pipeline-stage-name {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.at-pipeline-stage-count {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n}\n\n.at-pipeline-arrow {\n width: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 0.6rem;\n}\n\n.at-stage-connector {\n width: 32px;\n height: 2px;\n background: var(--mj-border-default);\n transition: background 0.4s ease;\n}\n\n.at-stage-connector.connector-complete {\n background: var(--mj-status-success);\n}\n\n/* Progress section */\n\n.at-progress-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 10px 16px;\n}\n\n.at-progress-header {\n display: flex;\n justify-content: space-between;\n font-size: 0.75rem;\n margin-bottom: 4px;\n}\n\n.at-progress-stage-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.at-progress-pct {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-progress-bar {\n height: 4px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.at-progress-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.at-progress-current {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n margin-top: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-progress-fill-paused {\n background: var(--mj-status-warning);\n animation: pulse-paused 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-paused {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.at-pipeline-controls {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n justify-content: flex-end;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\n}\n\n.at-danger-btn:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n border-color: var(--mj-status-error-text);\n}\n\n/* Feed items */\n\n.at-feed-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-feed-item:last-child {\n border-bottom: none;\n}\n\n.at-feed-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-feed-status-dot.complete {\n background: var(--mj-status-success);\n}\n\n.at-feed-status-dot.processing {\n background: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.at-feed-status-dot.error {\n background: var(--mj-status-error);\n}\n\n.at-feed-item-name {\n flex: 1;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-feed-item-source {\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n min-width: 100px;\n}\n\n.at-feed-item-tags {\n display: flex;\n gap: 4px;\n}\n\n.at-feed-tag {\n padding: 1px 6px;\n border-radius: 3px;\n font-size: 0.62rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-feed-item-time {\n color: var(--mj-text-muted);\n font-size: 0.68rem;\n white-space: nowrap;\n min-width: 60px;\n text-align: right;\n}\n\n/* Source mini cards (right panel) */\n\n.at-source-mini {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-source-mini:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-source-mini:last-child {\n border-bottom: none;\n}\n\n.at-source-mini-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-source-mini-info {\n flex: 1;\n min-width: 0;\n}\n\n.at-source-mini-name {\n font-size: 0.78rem;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-source-mini-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-mini-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-source-mini-status.active {\n background: var(--mj-status-success);\n}\n\n.at-source-mini-status.error {\n background: var(--mj-status-error);\n}\n\n.at-source-mini-status.inactive {\n background: var(--mj-text-disabled);\n}\n\n/* Tag cloud card */\n\n.at-tag-cloud-card {\n padding: 16px;\n}\n\n.at-tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n.at-tag-pill {\n padding: 4px 12px;\n border-radius: 14px;\n font-size: 0.72rem;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-tag-pill:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tag-weighted {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tag-weight {\n font-size: 0.6rem;\n opacity: 0.6;\n font-weight: 400;\n}\n\n.at-tag-row-clickable {\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-tag-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.at-tag-pill.large {\n font-size: 0.85rem;\n padding: 5px 14px;\n}\n\n.at-tag-pill.small {\n font-size: 0.65rem;\n padding: 3px 8px;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SOURCES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-sources-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 12px;\n}\n\n.at-source-card-full {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.at-source-card-full:hover {\n border-color: var(--mj-border-default);\n}\n\n.at-source-card-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 12px;\n}\n\n.at-source-card-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.at-source-card-title {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-card-type {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-status {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 500;\n}\n\n.at-source-card-status.active {\n color: var(--mj-status-success-text);\n}\n\n.at-source-card-status.error {\n color: var(--mj-status-error-text);\n}\n\n.at-source-card-status.inactive {\n color: var(--mj-text-disabled);\n}\n\n.at-source-card-url {\n font-size: 0.7rem;\n color: var(--mj-brand-primary);\n margin-bottom: 10px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-source-card-stats {\n display: flex;\n gap: 16px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-source-stat {\n display: flex;\n flex-direction: column;\n}\n\n.at-source-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-stat-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-actions {\n display: flex;\n gap: 6px;\n margin-top: 10px;\n}\n\n.at-source-action-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.7rem;\n cursor: pointer;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n transition: all 0.12s ease;\n}\n\n.at-source-action-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-source-delete-btn:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\n}\n\n.at-add-source-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-source-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-source-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CONTENT TYPES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-ct-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 12px;\n}\n\n.at-ct-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n}\n\n.at-ct-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.at-ct-card-name {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-ct-card-model {\n font-size: 0.68rem;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-ct-field {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-ct-field:last-child {\n border-bottom: none;\n}\n\n.at-ct-field-label {\n color: var(--mj-text-muted);\n}\n\n.at-ct-field-value {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range i {\n color: var(--mj-brand-primary);\n}\n\n.at-ct-tag-range-bar {\n flex: 1;\n height: 6px;\n background: var(--mj-bg-surface);\n border-radius: 3px;\n position: relative;\n}\n\n.at-ct-tag-range-fill {\n position: absolute;\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n.at-ct-range-suffix {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 TAG LIBRARY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tag-lib-layout {\n display: flex;\n gap: 16px;\n}\n\n.at-tag-lib-main {\n flex: 1;\n}\n\n.at-tag-lib-sidebar {\n width: 280px;\n flex-shrink: 0;\n}\n\n.at-tag-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-tag-table th {\n text-align: left;\n padding: 8px 12px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-tag-table td {\n padding: 10px 12px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-name-cell {\n font-weight: 600;\n}\n\n.at-tag-bar {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n display: inline-block;\n vertical-align: middle;\n}\n\n.at-tag-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n/* Weight indicator in tag table */\n.at-weight-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-weight-bar {\n width: 50px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-weight-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.2s ease;\n}\n\n.at-weight-bar-fill.at-weight-high {\n background: var(--mj-status-success);\n}\n\n.at-weight-bar-fill.at-weight-medium {\n background: var(--mj-status-warning);\n}\n\n.at-weight-bar-fill.at-weight-low {\n background: var(--mj-status-error);\n}\n\n.at-weight-value {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 28px;\n}\n\n.at-tags-by-source {\n font-size: 0.78rem;\n}\n\n.at-tag-source-row {\n display: flex;\n justify-content: space-between;\n padding: 5px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-source-row:last-child {\n border-bottom: none;\n}\n\n.at-search-input {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n width: 200px;\n outline: none;\n}\n\n.at-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-search-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RUN HISTORY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-run-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-run-table th {\n text-align: left;\n padding: 10px 14px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-run-table td {\n padding: 12px 14px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-run-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n cursor: pointer;\n}\n\n.at-run-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-run-status-badge.complete {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-run-status-badge.failed {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-run-status-badge.running {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-run-duration {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n}\n\n.at-run-source-name {\n font-weight: 500;\n}\n\n.at-run-error-text {\n color: var(--mj-status-error-text);\n}\n\n.at-filter-select {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.78rem;\n outline: none;\n}\n\n.at-filter-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SLIDE-IN FORM PANEL \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n}\n\n.at-slide-panel {\n position: fixed;\n right: 0;\n top: 0;\n bottom: 0;\n width: 420px;\n max-width: 100vw;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n}\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-slide-header h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n background: none;\n border: none;\n font-size: 1.1rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n}\n\n.at-slide-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-form-group {\n margin-bottom: 16px;\n}\n\n.at-form-label {\n display: block;\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.82rem;\n outline: none;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.at-form-input::placeholder,\n.at-form-textarea::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-form-textarea {\n resize: vertical;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n margin-top: 24px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RESPONSIVE \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n@media (max-width: 1100px) {\n .at-pipeline-layout {\n flex-direction: column;\n }\n\n .at-pipeline-right {\n width: 100%;\n flex-direction: row;\n }\n\n .at-tag-lib-layout {\n flex-direction: column;\n }\n\n .at-tag-lib-sidebar {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-left-nav {\n width: 180px;\n }\n\n .at-kpi-strip {\n flex-wrap: wrap;\n }\n\n .at-kpi-card {\n min-width: 140px;\n }\n\n .at-sources-grid {\n grid-template-columns: 1fr;\n }\n\n .at-ct-grid {\n grid-template-columns: 1fr;\n }\n\n .at-slide-panel {\n width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .at-left-nav {\n width: 56px;\n }\n\n .at-left-nav-header h2 {\n font-size: 0;\n }\n\n .at-left-nav-header h2 i {\n font-size: 1rem;\n }\n\n .at-nav-item {\n justify-content: center;\n padding: 10px;\n font-size: 0;\n }\n\n .at-nav-item i {\n font-size: 1rem;\n }\n\n .at-nav-badge {\n display: none;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Slide-in Form Panel\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.35);\n z-index: 9999;\n animation: at-fade-in 0.2s ease;\n}\n\n@keyframes at-fade-in { from { opacity: 0; } to { opacity: 1; } }\n\n.at-slide-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 420px;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 40px rgba(0, 0, 0, 0.4);\n z-index: 10000;\n display: flex;\n flex-direction: column;\n animation: at-slide-in 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes at-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-slide-header h3 {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n transition: all 0.15s ease;\n}\n\n.at-slide-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.at-form-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n outline: none;\n transition: border-color 0.15s ease;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.at-form-select {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M3 5l3 3 3-3'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 30px;\n}\n\n.at-form-textarea {\n resize: vertical;\n min-height: 70px;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-form-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* Also add empty state for Content Types (matching Sources) */\n.at-add-type-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-type-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-type-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORKED PIPELINE STAGES \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-stages-forked {\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n.at-pipeline-fork {\n display: flex;\n align-items: center;\n gap: 0;\n flex: 2;\n}\n\n.at-pipeline-fork-lines {\n width: 28px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n position: relative;\n flex-shrink: 0;\n}\n\n.at-pipeline-fork-line {\n height: 2px;\n background: var(--mj-border-default);\n width: 100%;\n position: relative;\n}\n\n.at-pipeline-fork-line::before {\n content: '';\n position: absolute;\n width: 2px;\n height: 12px;\n background: var(--mj-border-default);\n left: 0;\n}\n\n.at-fork-top::before {\n bottom: 0;\n left: 0;\n}\n\n.at-fork-bottom::before {\n top: 0;\n left: 0;\n}\n\n.at-pipeline-fork-branches {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n}\n\n.at-pipeline-fork-branches .at-pipeline-stage {\n flex: none;\n padding: 6px 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE FEED ITEMS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-item-clickable {\n cursor: pointer;\n}\n\n.at-feed-item-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FEED SEARCH & PAGINATION \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.at-feed-header-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-left: auto;\n}\n\n.at-feed-sort-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.68rem;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-feed-sort-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-feed-count {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n}\n\n.at-feed-search-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-search-icon {\n color: var(--mj-text-disabled);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-feed-search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n outline: none;\n padding: 4px 0;\n min-width: 0;\n}\n\n.at-feed-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-feed-search-clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 9px;\n flex-shrink: 0;\n}\n\n.at-feed-search-clear:hover {\n background: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.at-feed-scroll-body {\n overflow-y: auto;\n min-height: 0;\n flex: 1;\n}\n\n.at-feed-item-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n overflow: hidden;\n}\n\n.at-feed-item-content .at-feed-item-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-feed-item-source-label {\n font-size: 0.7rem;\n font-weight: 500;\n color: var(--mj-brand-primary);\n}\n\n.at-feed-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-pagination-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE SOURCE CARDS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-source-card-clickable {\n cursor: pointer;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORM HINT \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-form-hint {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n font-style: italic;\n margin-top: 2px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 DETAIL PANEL (wider) \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-panel {\n width: 500px;\n}\n\n/* \u2500\u2500 Detail: Item header \u2500\u2500 */\n\n.at-detail-item-header {\n margin-bottom: 8px;\n}\n\n.at-detail-item-name {\n font-size: 1.05rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 6px 0;\n word-break: break-word;\n}\n\n.at-detail-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-detail-badge {\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-detail-badge-source {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-detail-badge-type {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.at-detail-badge-file {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.at-detail-badge-status-active {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-detail-badge-status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-detail-badge-status-inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500 Detail: Sections \u2500\u2500 */\n\n.at-detail-section {\n margin-bottom: 4px;\n}\n\n.at-detail-section-label {\n font-size: 0.72rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.at-detail-link {\n font-size: 0.8rem;\n color: var(--mj-brand-primary);\n text-decoration: none;\n word-break: break-all;\n}\n\n.at-detail-link:hover {\n text-decoration: underline;\n}\n\n/* \u2500\u2500 Detail: Text preview \u2500\u2500 */\n\n.at-detail-text-preview {\n max-height: 200px;\n overflow-y: auto;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n font-size: 0.78rem;\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n line-height: 1.5;\n}\n\n/* \u2500\u2500 Detail: Tags \u2500\u2500 */\n\n.at-detail-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n/* \u2500\u2500 Detail: Meta grid \u2500\u2500 */\n\n.at-detail-meta-grid {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.at-detail-meta-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-detail-meta-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-meta-key {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n margin-right: 12px;\n}\n\n.at-detail-meta-value {\n color: var(--mj-text-primary);\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-meta-mono {\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n font-size: 0.72rem;\n}\n\n/* \u2500\u2500 Detail: Actions \u2500\u2500 */\n\n.at-detail-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-detail-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* \u2500\u2500 Detail: Source header \u2500\u2500 */\n\n.at-detail-source-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n/* \u2500\u2500 Detail: Stats strip \u2500\u2500 */\n\n.at-detail-stats-strip {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-detail-stat {\n flex: 1;\n min-width: 60px;\n text-align: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 8px 6px;\n}\n\n.at-detail-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-detail-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Detail: Content Library \u2500\u2500 */\n\n.at-detail-content-list {\n max-height: 250px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.at-detail-content-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-detail-content-item:last-child {\n border-bottom: none;\n}\n\n.at-detail-content-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-detail-content-item-name {\n flex: 1;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-content-item-tags {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.at-detail-content-item-time {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* \u2500\u2500 Detail: Run history \u2500\u2500 */\n\n.at-detail-run-history {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.at-detail-run-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.75rem;\n}\n\n.at-detail-run-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-run-time {\n color: var(--mj-text-secondary);\n flex: 1;\n}\n\n.at-detail-run-duration {\n color: var(--mj-text-muted);\n}\n\n.at-detail-run-items {\n color: var(--mj-text-muted);\n}\n\n@media (max-width: 600px) {\n .at-slide-panel {\n width: 100%;\n }\n\n .at-detail-panel {\n width: 100%;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n TAXONOMY GOVERNANCE TAB\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n/* \u2500\u2500 Sub-tab strip \u2500\u2500 */\n\n.at-tax-tab-strip {\n display: flex;\n border-bottom: 2px solid var(--mj-border-default);\n padding: 0 20px;\n gap: 0;\n flex-shrink: 0;\n}\n\n.at-tax-tab {\n padding: 10px 20px;\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: all 0.15s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-tax-tab:hover {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-tax-tab-badge {\n font-size: 0.62rem;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n}\n\n.at-tax-badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* \u2500\u2500 Tree View: Split layout \u2500\u2500 */\n\n.at-tax-split-view {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n height: calc(100vh - 320px);\n min-height: 400px;\n overflow: hidden;\n}\n\n.at-tax-tree-panel {\n width: 40%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n}\n\n.at-tax-tree-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-toolbar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 0.8rem;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-tax-toolbar-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-tax-toolbar-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-tree-body {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.at-tax-tree-node {\n padding: 6px 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s;\n line-height: 1.4;\n}\n\n.at-tax-tree-node:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-node-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n}\n\n.at-tax-node-drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n outline: 2px dashed var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.at-tax-node-multi-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.at-tax-tree-add-child {\n margin-left: auto;\n opacity: 0;\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 2px 6px;\n border-radius: 4px;\n transition: opacity 0.15s, color 0.15s, background 0.15s;\n}\n\n.at-tax-tree-node:hover .at-tax-tree-add-child {\n opacity: 1;\n}\n\n.at-tax-tree-add-child:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.at-tax-tree-checkbox {\n width: 14px;\n height: 14px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.at-tax-tree-saving-overlay {\n position: absolute;\n inset: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 75%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n backdrop-filter: blur(1px);\n}\n\n.at-tax-create-context {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n margin-bottom: 12px;\n padding: 6px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.at-tax-tree-arrow {\n width: 16px;\n font-size: 0.55rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n text-align: center;\n cursor: pointer;\n}\n\n.at-tax-arrow-collapsed::before {\n content: \"\\25B6\";\n}\n\n.at-tax-arrow-expanded::before {\n content: \"\\25BC\";\n}\n\n.at-tax-arrow-leaf {\n visibility: hidden;\n}\n\n.at-tax-health-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-tax-health-dot.green {\n background: var(--mj-status-success);\n}\n\n.at-tax-health-dot.yellow {\n background: var(--mj-status-warning);\n}\n\n.at-tax-health-dot.red {\n background: var(--mj-status-error);\n}\n\n.at-tax-tree-label {\n flex: 1;\n color: var(--mj-text-primary);\n}\n\n.at-tax-tree-label-selected {\n font-weight: 700;\n}\n\n.at-tax-tree-count {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n/* \u2500\u2500 Details panel \u2500\u2500 */\n\n.at-tax-details-panel {\n width: 60%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.at-tax-details-header {\n padding: 20px 24px 0;\n}\n\n.at-tax-breadcrumb {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tax-bc-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.at-tax-bc-link:hover {\n text-decoration: underline;\n}\n\n.at-tax-bc-sep {\n color: var(--mj-border-default);\n}\n\n.at-tax-bc-current {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.at-tax-details-title {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.at-tax-edit-icon {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n}\n\n.at-tax-edit-icon:hover {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-details-desc {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin-bottom: 16px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-tax-edit-form {\n margin-bottom: 16px;\n}\n\n/* \u2500\u2500 Stats row \u2500\u2500 */\n\n.at-tax-stats-row {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n padding: 0 24px;\n}\n\n.at-tax-stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n min-width: 72px;\n}\n\n.at-tax-stat-value {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-stat-date {\n font-size: 0.8rem;\n}\n\n.at-tax-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Action toolbar \u2500\u2500 */\n\n.at-tax-action-toolbar {\n display: flex;\n gap: 8px;\n padding: 0 24px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.at-tax-action-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-action-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n}\n\n/* \u2500\u2500 Detail sections \u2500\u2500 */\n\n.at-tax-detail-section {\n padding: 0 24px 20px;\n}\n\n.at-tax-section-title {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.at-tax-child-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-tax-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.at-tax-child-chip:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.at-tax-chip-count {\n font-size: 0.6rem;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n padding: 0 5px;\n border-radius: 8px;\n}\n\n/* \u2500\u2500 Recent items \u2500\u2500 */\n\n.at-tax-recent-list {\n list-style: none;\n}\n\n.at-tax-recent-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-tax-recent-item:last-child {\n border-bottom: none;\n}\n\n.at-tax-recent-icon {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-tax-recent-name {\n flex: 1;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-tax-recent-weight {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-tax-recent-date {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Health bar \u2500\u2500 */\n\n.at-tax-health-bar {\n display: flex;\n align-items: center;\n gap: 20px;\n padding: 12px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n margin-top: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-health-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-health-stat {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n}\n\n.at-tax-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n}\n\n.at-tax-dot-total {\n background: var(--mj-text-secondary);\n}\n\n.at-tax-dot-healthy {\n background: var(--mj-status-success);\n}\n\n.at-tax-dot-attention {\n background: var(--mj-status-warning);\n}\n\n.at-tax-dot-orphaned {\n background: var(--mj-status-error);\n}\n\n.at-tax-dot-duplicates {\n background: var(--mj-status-info);\n}\n\n.at-tax-health-value {\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-val-success {\n color: var(--mj-status-success);\n}\n\n.at-tax-val-warning {\n color: var(--mj-status-warning);\n}\n\n.at-tax-val-error {\n color: var(--mj-status-error);\n}\n\n.at-tax-val-info {\n color: var(--mj-status-info);\n}\n\n.at-tax-health-text {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550 Duplicates sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-dup-stats-bar {\n display: flex;\n gap: 24px;\n margin-bottom: 16px;\n align-items: center;\n}\n\n.at-tax-dup-stat {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n}\n\n.at-tax-dup-stat strong {\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n margin-right: 4px;\n}\n\n.at-tax-dup-high strong {\n color: var(--mj-status-error);\n}\n\n.at-tax-dup-moderate strong {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-tax-dup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.at-tax-dup-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-card.at-tax-dup-high {\n border-left: 3px solid var(--mj-status-error);\n}\n\n.at-tax-dup-card.at-tax-dup-moderate {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.at-tax-dup-tag {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n min-width: 120px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n text-align: center;\n}\n\n.at-tax-dup-arrow {\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.at-tax-dup-similarity {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n min-width: 100px;\n}\n\n.at-tax-sim-bar-bg {\n width: 100%;\n height: 6px;\n background: var(--mj-border-default);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-tax-sim-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s;\n}\n\n.at-tax-sim-bar-fill.high {\n background: var(--mj-status-error);\n}\n\n.at-tax-sim-bar-fill.moderate {\n background: var(--mj-status-warning);\n}\n\n.at-tax-sim-percent {\n font-size: 0.78rem;\n font-weight: 700;\n}\n\n.at-tax-sim-percent.high {\n color: var(--mj-status-error);\n}\n\n.at-tax-sim-percent.moderate {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-tax-dup-btn {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n white-space: nowrap;\n}\n\n.at-tax-dup-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n/* \u2550\u2550\u2550\u2550 Orphans sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-orphan-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-orphan-count {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-desc {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-bulk {\n margin-left: auto;\n display: flex;\n gap: 8px;\n}\n\n.at-tax-bulk-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-bulk-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-bulk-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.at-tax-orphan-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: 12px;\n}\n\n.at-tax-orphan-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.15s;\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-top: 3px solid var(--mj-status-error);\n}\n\n.at-tax-orphan-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.at-tax-orphan-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-stats {\n display: flex;\n gap: 12px;\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-stats strong {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-orphan-dates {\n display: flex;\n justify-content: space-between;\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-actions {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n}\n\n.at-tax-orphan-btn {\n flex: 1;\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n text-align: center;\n transition: all 0.15s;\n}\n\n.at-tax-orphan-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-delete:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n/* \u2550\u2550\u2550\u2550 Treemap sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-kpi-strip {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-treemap-kpi {\n padding: 10px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 120px;\n}\n\n.at-tax-treemap-kpi-value {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-treemap-kpi-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-tax-treemap-container {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 8px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n grid-auto-rows: 80px;\n gap: 4px;\n min-height: 340px;\n}\n\n.at-tax-treemap-cell {\n border-radius: 6px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s;\n position: relative;\n overflow: hidden;\n}\n\n.at-tax-treemap-cell:hover {\n transform: scale(1.02);\n z-index: 2;\n}\n\n.at-tax-cell-name {\n font-size: 0.78rem;\n}\n\n.at-tax-cell-count {\n font-size: 0.65rem;\n opacity: 0.85;\n font-weight: 400;\n}\n\n/* Treemap color families */\n.at-tm-blue-1 { background: color-mix(in srgb, var(--mj-brand-primary) 90%, black); }\n.at-tm-blue-2 { background: var(--mj-brand-primary); }\n.at-tm-blue-3 { background: color-mix(in srgb, var(--mj-brand-primary) 75%, white); }\n.at-tm-blue-4 { background: color-mix(in srgb, var(--mj-brand-primary) 55%, white); }\n\n.at-tm-green-1 { background: color-mix(in srgb, var(--mj-status-success) 90%, black); }\n.at-tm-green-2 { background: var(--mj-status-success); }\n.at-tm-green-3 { background: color-mix(in srgb, var(--mj-status-success) 60%, white); color: var(--mj-text-primary); }\n\n.at-tm-purple-1 { background: color-mix(in srgb, var(--mj-status-info) 90%, black); }\n.at-tm-purple-2 { background: var(--mj-status-info); }\n.at-tm-purple-3 { background: color-mix(in srgb, var(--mj-status-info) 65%, white); }\n\n.at-tm-orange-1 { background: color-mix(in srgb, var(--mj-status-warning) 90%, black); }\n.at-tm-orange-2 { background: var(--mj-status-warning); }\n.at-tm-orange-3 { background: color-mix(in srgb, var(--mj-status-warning) 60%, white); color: var(--mj-text-primary); }\n\n/* \u2550\u2550\u2550\u2550 Audit Log sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-audit-filters {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 16px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-filter-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-audit-checkbox-group {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-checkbox {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.at-tax-audit-checkbox input {\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-audit-timeline {\n position: relative;\n padding-left: 32px;\n}\n\n.at-tax-audit-timeline::before {\n content: '';\n position: absolute;\n left: 14px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.at-tax-audit-event {\n position: relative;\n padding: 10px 16px;\n margin-bottom: 4px;\n display: flex;\n align-items: flex-start;\n gap: 12px;\n border-radius: 8px;\n transition: background 0.1s;\n}\n\n.at-tax-audit-event:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-audit-event-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.68rem;\n flex-shrink: 0;\n position: absolute;\n left: -32px;\n top: 10px;\n z-index: 1;\n}\n\n.at-tax-audit-event-icon.created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.at-tax-audit-event-icon.merged {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.moved {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.deleted {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.at-tax-audit-event-icon.renamed {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-audit-event-body {\n flex: 1;\n}\n\n.at-tax-audit-event-desc {\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n line-height: 1.5;\n}\n\n.at-tax-tag-ref {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n font-weight: 600;\n font-size: 0.72rem;\n border: 1px solid var(--mj-border-default);\n}\n\n.at-tax-audit-event-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n display: flex;\n gap: 12px;\n}\n\n/* \u2500\u2500 Taxonomy responsive \u2500\u2500 */\n\n@media (max-width: 1100px) {\n .at-tax-split-view {\n flex-direction: column;\n }\n\n .at-tax-tree-panel {\n width: 100%;\n max-height: 300px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .at-tax-details-panel {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-tax-dup-card {\n flex-wrap: wrap;\n }\n\n .at-tax-orphan-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* \u2500\u2500 Pipeline Config Widget \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-config-card {\n margin-top: 12px;\n}\n\n.at-config-body {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px !important;\n}\n\n.at-config-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.at-config-label {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n min-width: 90px;\n flex-shrink: 0;\n}\n\n.at-config-control {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n justify-content: flex-end;\n}\n\n.at-config-input {\n width: 70px;\n padding: 3px 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 0.75rem;\n text-align: right;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.at-config-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.at-config-slider {\n flex: 1;\n max-width: 100px;\n accent-color: var(--mj-brand-primary);\n height: 4px;\n}\n\n.at-config-value {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n min-width: 40px;\n text-align: right;\n}\n\n.at-config-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n}\n\n.at-config-section-label {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Toggle Switch */\n.at-config-toggle {\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n\n.at-config-toggle input {\n display: none;\n}\n\n.at-toggle-track {\n display: block;\n width: 32px;\n height: 18px;\n background: var(--mj-border-strong);\n border-radius: 9px;\n transition: background 0.2s ease;\n position: relative;\n}\n\n.at-config-toggle input:checked + .at-toggle-track {\n background: var(--mj-brand-primary);\n}\n\n.at-toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0,0,0,0.15);\n}\n\n.at-config-toggle input:checked + .at-toggle-track .at-toggle-thumb {\n transform: translateX(14px);\n}\n\n/* \u2500\u2500 Schedule Indicator on Source Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-indicator {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n margin-top: 6px;\n border-radius: 12px;\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-border-default));\n cursor: pointer;\n transition: all 0.15s ease;\n width: fit-content;\n}\n\n.at-schedule-indicator i {\n font-size: 0.62rem;\n}\n\n.at-schedule-indicator:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-default));\n}\n\n/* Schedule button in source card actions */\n.at-source-schedule-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Schedule Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-schedule-dialog {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg, 12px);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16);\n width: 420px;\n max-width: 90vw;\n}\n\n.at-schedule-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-schedule-dialog-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-dialog-close {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 16px;\n padding: 4px;\n line-height: 1;\n transition: color 0.15s;\n}\n\n.at-schedule-dialog-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-body {\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-schedule-field label {\n display: block;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin-bottom: 6px;\n}\n\n.at-schedule-source-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-source-name i {\n color: var(--mj-text-muted);\n}\n\n.at-schedule-action-name {\n font-size: 13px;\n color: var(--mj-text-secondary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-cron-input {\n width: 100%;\n font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n letter-spacing: 0.02em;\n}\n\n.at-schedule-cron-preview {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.at-schedule-cron-preview i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-toggle-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n}\n\n.at-schedule-toggle-row label {\n margin-bottom: 0;\n}\n\n.at-schedule-dialog-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4: Status Badges for Content Items \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-status-badge {\n display: inline-block;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 0.6rem;\n font-weight: 600;\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n\n.at-status-badge-complete {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.at-status-badge-processing {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.at-status-badge-failed {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.at-status-badge-pending {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4/D7: Source Detail Controls \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-section-header-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.at-detail-section-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-detail-filter-select {\n padding: 4px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.72rem;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n}\n\n.at-retry-btn {\n font-size: 0.7rem !important;\n padding: 4px 8px !important;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface)) !important;\n color: var(--mj-status-error-text) !important;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-border-default)) !important;\n}\n\n.at-retry-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface)) !important;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D7: Pagination \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 10px 0 4px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 4px;\n}\n\n.at-page-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.72rem;\n font-weight: 500;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-page-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-page-btn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.at-page-info {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Confirmation Dialog \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-confirm-message {\n font-size: 13.5px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: var(--mj-radius-sm, 6px);\n padding: 7px 14px;\n font-size: 12.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.at-danger-btn:hover {\n background: var(--mj-status-error-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Treemap Drill-In \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-cell-clickable {\n cursor: pointer;\n transition: transform 0.15s, box-shadow 0.15s;\n}\n\n.at-tax-treemap-cell-clickable:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 1;\n}\n\n.at-tax-drillin-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: flex-start;\n justify-content: flex-end;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-tax-drillin-panel {\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n width: 420px;\n max-width: 90vw;\n height: 100vh;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n.at-tax-drillin-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-drillin-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-tax-drillin-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-drillin-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-tax-drillin-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* D3/D8: Clickable run history rows */\n.at-run-row-clickable {\n cursor: pointer;\n transition: background 0.12s ease;\n}\n\n.at-run-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-run-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n/* D2: Error text in detail tables */\n.run-error-text {\n color: var(--mj-status-error);\n font-weight: 600;\n}\n\n/* \u2500\u2500 Content Item Duplicates Section (G3) \u2500\u2500 */\n\n.at-dedup-section {\n margin-top: 24px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 20px;\n}\n\n.at-dedup-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.at-dedup-title {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.at-dedup-subtitle {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-dedup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s;\n}\n\n.at-dedup-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.at-dedup-pair {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.at-dedup-item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n}\n\n.at-dedup-item-name {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-dedup-item-source {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-vs {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n flex-shrink: 0;\n}\n\n.at-dedup-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.at-dedup-score {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-dedup-method {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-dedup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-dedup-confirm {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-dismiss {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-empty {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-empty i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n color: var(--mj-status-success);\n}\n\n.at-dedup-empty p {\n margin: 8px 0 0;\n font-size: 0.82rem;\n}\n\n/* =============================================================================\n * Tags-only additions: governance toggles, scope chips, inline synonyms,\n * Suggestions inbox table+drawer, Tag Health 3-card layout. All colors flow\n * through MJ design tokens with `color-mix()` for tinted variants.\n * ============================================================================= */\n\n/* ---------- Governance toggle rows ---------- */\n\n.at-tg-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 0;\n border-bottom: 1px dashed var(--mj-border-subtle);\n}\n.at-tg-toggle-row:last-child { border-bottom: 0; }\n.at-tg-toggle-label { display: flex; flex-direction: column; gap: 2px; max-width: 70%; }\n.at-tg-toggle-t { font-size: 13px; font-weight: 600; color: var(--mj-text-primary); }\n.at-tg-toggle-d { font-size: 11px; color: var(--mj-text-muted); line-height: 1.4; }\n\n.at-tg-switch {\n position: relative;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n.at-tg-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n.at-tg-switch.on { background: var(--mj-brand-primary); }\n.at-tg-switch.on::after { left: 18px; }\n.at-tg-switch.disabled { opacity: 0.5; pointer-events: none; }\n\n.at-tg-grid-3 {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 14px 16px;\n margin-top: 14px;\n}\n.at-tg-field { display: flex; flex-direction: column; gap: 4px; }\n.at-tg-field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n.at-tg-hint { font-size: 11px; color: var(--mj-text-muted); }\n\n/* ---------- Scope chips ---------- */\n\n.at-tg-chip-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n margin-top: 8px;\n}\n.at-tg-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 999px;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n.at-tg-chip.scoped {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------- Inline synonyms ---------- */\n\n.at-tg-syn-add {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n align-items: stretch;\n}\n.at-tg-syn-add .at-search-input { flex: 1; }\n.at-tg-syn-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 5px;\n border: 1px solid var(--mj-border-subtle);\n margin-bottom: 6px;\n background: var(--mj-bg-surface);\n}\n.at-tg-syn-row.pending {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n.at-tg-syn-name { font-weight: 600; flex: 1; color: var(--mj-text-primary); }\n.at-tg-syn-src {\n font-size: 10px;\n padding: 2px 7px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n}\n.at-tg-syn-src.manual { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.at-tg-syn-src.imported { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.at-tg-syn-src.merged { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.at-tg-syn-src.llm { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.at-tg-syn-x {\n cursor: pointer;\n color: var(--mj-text-muted);\n padding: 2px 6px;\n}\n.at-tg-syn-x:hover { color: var(--mj-status-error-text, var(--mj-status-error)); }\n\n/* ---------- Suggestions inbox table + drawer ---------- */\n\n.sg-shell {\n display: flex;\n height: 100%;\n min-height: 600px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.sg-main { flex: 1; display: flex; flex-direction: column; min-width: 0; overflow: hidden; }\n.sg-toolbar {\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n align-items: center;\n background: var(--mj-bg-surface-card);\n flex-wrap: wrap;\n}\n.sg-bulk-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n padding: 9px 14px;\n display: flex;\n gap: 10px;\n align-items: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n font-weight: 500;\n}\n.sg-table-body { flex: 1; overflow: auto; }\n.sg-table { width: 100%; border-collapse: collapse; font-size: 13px; color: var(--mj-text-primary); }\n.sg-table thead { position: sticky; top: 0; background: var(--mj-bg-surface-card); z-index: 1; }\n.sg-table th {\n text-align: left;\n padding: 9px 12px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n.sg-table td {\n padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n.sg-table tr { cursor: pointer; }\n.sg-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.sg-table tr.sg-row-selected td { background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); }\n.sg-table tr.sg-row-checked td { background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent); }\n.sg-score { font-family: ui-monospace, \"SF Mono\", Menlo, monospace; font-weight: 600; }\n.sg-score-bar {\n display: inline-block;\n width: 70px;\n height: 5px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n vertical-align: middle;\n margin-right: 6px;\n}\n.sg-score-bar > span {\n display: block;\n height: 100%;\n background: var(--mj-brand-primary);\n}\n.sg-reason {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n.sg-reason.merge { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.sg-reason.below { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 12%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.constrained { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.sg-reason.frozen { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.review { background: color-mix(in srgb, var(--mj-status-error) 12%, transparent); color: var(--mj-status-error-text, var(--mj-status-error)); }\n.sg-reason.lowusage { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.widenode { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.autogrow { background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-row-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.1s;\n}\n.sg-table tr:hover .sg-row-actions {\n opacity: 1;\n}\n\n.sg-drawer {\n width: 460px;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n.sg-drawer-hd {\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface);\n}\n.sg-drawer-bd { padding: 16px 18px; flex: 1; overflow-y: auto; }\n.sg-drawer-ft {\n padding: 12px 18px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface);\n flex-wrap: wrap;\n}\n.sg-drawer h4 {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 16px 0 8px;\n font-weight: 700;\n}\n.sg-candidate {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n display: flex;\n gap: 12px;\n align-items: center;\n}\n.sg-preview {\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n/* ---------- Tag Health cards ---------- */\n\n.health-shell { padding: 18px 22px; }\n.runbar {\n display: flex;\n gap: 22px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n margin-bottom: 18px;\n align-items: center;\n font-size: 13px;\n}\n.runbar .stat .l { font-size: 11px; color: var(--mj-text-muted); }\n.runbar .stat .v { font-size: 16px; font-weight: 600; color: var(--mj-text-primary); }\n.runbar .grow { flex: 1; }\n\n.health-cards {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 16px;\n margin-bottom: 22px;\n}\n.h-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 240px;\n}\n.h-card.merge { border-top: 4px solid var(--mj-brand-primary); }\n.h-card.lowusage { border-top: 4px solid var(--mj-status-warning); }\n.h-card.widenode { border-top: 4px solid var(--mj-status-error, var(--mj-status-warning)); }\n.h-card .top { display: flex; align-items: flex-start; gap: 10px; }\n.h-card .top .ic {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n}\n.h-card .name {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.h-card h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n.h-card .big {\n font-size: 36px;\n font-weight: 800;\n color: var(--mj-text-primary);\n line-height: 1;\n}\n.h-card .sub { font-size: 12px; color: var(--mj-text-secondary); line-height: 1.4; margin: 0; }\n.h-card .ft { margin-top: auto; display: flex; gap: 6px; flex-wrap: wrap; }\n\n.threshold-form {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px;\n margin-top: 18px;\n}\n.threshold-form h3 { margin: 0 0 12px; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.threshold-form .grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n.threshold-form .field { display: flex; flex-direction: column; gap: 4px; }\n.threshold-form .field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n\n.run-history {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-top: 18px;\n overflow: hidden;\n}\n.run-history-hd {\n padding: 12px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-card);\n}\n.run-history-hd h3 { margin: 0; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.run-history table { width: 100%; border-collapse: collapse; font-size: 12px; }\n.run-history th {\n text-align: left;\n padding: 8px 12px;\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 600;\n}\n.run-history td {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n/* Generic helpers used by new sections */\n.at-muted { color: var(--mj-text-muted); }\n.at-success-btn { color: var(--mj-status-success-text, var(--mj-status-success)); border-color: var(--mj-status-success-border, var(--mj-status-success)); }\n.at-btn-sm { font-size: 12px; padding: 4px 9px; }\n.at-btn-xs { font-size: 11px; padding: 2px 7px; }\n"], encapsulation: 2 });
7365
+ i0.ɵɵconditional(ctx.ShowMergeIntoDialog ? 20 : -1);
7366
+ } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.MaxValidator, i1.NgModel, i2.LoadingComponent, i3.MJButtonDirective, i3.MJComboboxComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i4.MJWordCloudComponent, i5.DecimalPipe, i5.DatePipe], styles: ["/* ============================================================\n Content Autotagging Dashboard\n All colors use MJ design tokens \u2014 no hardcoded hex values.\n All classes prefixed with at- to prevent leaking (ViewEncapsulation.None).\n ============================================================ */\n\n/* \u2500\u2500 Root layout \u2500\u2500 */\n\n.at-dashboard {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 LEFT NAV \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-left-nav {\n width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n.at-left-nav-header {\n padding: 16px 16px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-left-nav-header h2 {\n font-size: 0.95rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n color: var(--mj-text-primary);\n}\n\n.at-left-nav-header h2 i {\n color: var(--mj-brand-primary);\n}\n\n.at-left-nav-items {\n flex: 1;\n padding: 8px;\n overflow-y: auto;\n}\n\n.at-nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 0.82rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.12s ease;\n margin-bottom: 2px;\n}\n\n.at-nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.at-nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-nav-item i {\n width: 18px;\n text-align: center;\n font-size: 0.8rem;\n}\n\n.at-nav-badge {\n margin-left: auto;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 7px;\n border-radius: 10px;\n font-size: 0.65rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.at-nav-item.active .at-nav-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-nav-badge-live {\n background: var(--mj-status-success-bg) !important;\n color: var(--mj-status-success-text) !important;\n}\n\n.at-nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 12px;\n}\n\n.at-left-nav-footer {\n padding: 12px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-run-pipeline-btn {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px;\n border: none;\n border-radius: 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.at-run-pipeline-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-run-pipeline-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 MAIN CONTENT AREA \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-main-area {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.at-loading-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n\n.at-page-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-page-title {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-page-subtitle {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-page-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.at-page-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 16px 20px;\n min-height: 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SHARED COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border: 1px solid;\n border-radius: 7px;\n cursor: pointer;\n font-size: 0.78rem;\n font-weight: 500;\n transition: all 0.15s ease;\n}\n\n.at-primary-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-primary-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-primary-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.at-secondary-btn {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.at-secondary-btn:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.at-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-card-title {\n font-size: 0.82rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-primary);\n}\n\n.at-card-title i {\n color: var(--mj-brand-primary);\n font-size: 0.75rem;\n}\n\n.at-card-body {\n padding: 0;\n}\n\n.at-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 32px 16px;\n color: var(--mj-text-disabled);\n}\n\n.at-empty-state i {\n font-size: 28px;\n}\n\n.at-empty-state p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 KPI STRIP \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-kpi-strip {\n display: flex;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.at-kpi-card {\n flex: 1;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.at-kpi-value {\n font-size: 1.4rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-kpi-error-value {\n color: var(--mj-status-error-text);\n}\n\n.at-kpi-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-kpi-trend {\n font-size: 0.68rem;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--mj-text-muted);\n}\n\n.at-kpi-trend.up {\n color: var(--mj-status-success-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 PIPELINE TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-layout {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.at-pipeline-center {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n min-height: 0;\n}\n\n.at-pipeline-right {\n width: 320px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Pipeline Stages */\n\n.at-pipeline-stages {\n display: flex;\n gap: 0;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 16px;\n}\n\n.at-pipeline-stage {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.at-pipeline-stage-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 0.85rem;\n}\n\n.stage-idle .at-pipeline-stage-icon {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.stage-active .at-pipeline-stage-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.stage-complete .at-pipeline-stage-icon {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n@keyframes at-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 30%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent); }\n}\n\n.at-pipeline-stage-name {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.at-pipeline-stage-count {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n}\n\n.at-pipeline-arrow {\n width: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 0.6rem;\n}\n\n.at-stage-connector {\n width: 32px;\n height: 2px;\n background: var(--mj-border-default);\n transition: background 0.4s ease;\n}\n\n.at-stage-connector.connector-complete {\n background: var(--mj-status-success);\n}\n\n/* Progress section */\n\n.at-progress-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 10px 16px;\n}\n\n.at-progress-header {\n display: flex;\n justify-content: space-between;\n font-size: 0.75rem;\n margin-bottom: 4px;\n}\n\n.at-progress-stage-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.at-progress-pct {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-progress-bar {\n height: 4px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.at-progress-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.at-progress-current {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n margin-top: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-progress-fill-paused {\n background: var(--mj-status-warning);\n animation: pulse-paused 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-paused {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.at-pipeline-controls {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n justify-content: flex-end;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\n}\n\n.at-danger-btn:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n border-color: var(--mj-status-error-text);\n}\n\n/* Feed items */\n\n.at-feed-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-feed-item:last-child {\n border-bottom: none;\n}\n\n.at-feed-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-feed-status-dot.complete {\n background: var(--mj-status-success);\n}\n\n.at-feed-status-dot.processing {\n background: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.at-feed-status-dot.error {\n background: var(--mj-status-error);\n}\n\n.at-feed-item-name {\n flex: 1;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-feed-item-source {\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n min-width: 100px;\n}\n\n.at-feed-item-tags {\n display: flex;\n gap: 4px;\n}\n\n.at-feed-tag {\n padding: 1px 6px;\n border-radius: 3px;\n font-size: 0.62rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-feed-item-time {\n color: var(--mj-text-muted);\n font-size: 0.68rem;\n white-space: nowrap;\n min-width: 60px;\n text-align: right;\n}\n\n/* Source mini cards (right panel) */\n\n.at-source-mini {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-source-mini:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-source-mini:last-child {\n border-bottom: none;\n}\n\n.at-source-mini-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-source-mini-info {\n flex: 1;\n min-width: 0;\n}\n\n.at-source-mini-name {\n font-size: 0.78rem;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-source-mini-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-mini-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-source-mini-status.active {\n background: var(--mj-status-success);\n}\n\n.at-source-mini-status.error {\n background: var(--mj-status-error);\n}\n\n.at-source-mini-status.inactive {\n background: var(--mj-text-disabled);\n}\n\n/* Tag cloud card */\n\n.at-tag-cloud-card {\n padding: 16px;\n}\n\n.at-tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n.at-tag-pill {\n padding: 4px 12px;\n border-radius: 14px;\n font-size: 0.72rem;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-tag-pill:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tag-weighted {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tag-weight {\n font-size: 0.6rem;\n opacity: 0.6;\n font-weight: 400;\n}\n\n.at-tag-row-clickable {\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-tag-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.at-tag-pill.large {\n font-size: 0.85rem;\n padding: 5px 14px;\n}\n\n.at-tag-pill.small {\n font-size: 0.65rem;\n padding: 3px 8px;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SOURCES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-sources-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 12px;\n}\n\n.at-source-card-full {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.at-source-card-full:hover {\n border-color: var(--mj-border-default);\n}\n\n.at-source-card-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 12px;\n}\n\n.at-source-card-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.at-source-card-title {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-card-type {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-status {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 500;\n}\n\n.at-source-card-status.active {\n color: var(--mj-status-success-text);\n}\n\n.at-source-card-status.error {\n color: var(--mj-status-error-text);\n}\n\n.at-source-card-status.inactive {\n color: var(--mj-text-disabled);\n}\n\n.at-source-card-url {\n font-size: 0.7rem;\n color: var(--mj-brand-primary);\n margin-bottom: 10px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-source-card-stats {\n display: flex;\n gap: 16px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-source-stat {\n display: flex;\n flex-direction: column;\n}\n\n.at-source-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-stat-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-actions {\n display: flex;\n gap: 6px;\n margin-top: 10px;\n}\n\n.at-source-action-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.7rem;\n cursor: pointer;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n transition: all 0.12s ease;\n}\n\n.at-source-action-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-source-delete-btn:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\n}\n\n.at-add-source-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-source-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-source-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CONTENT TYPES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-ct-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 12px;\n}\n\n.at-ct-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n}\n\n.at-ct-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.at-ct-card-name {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-ct-card-model {\n font-size: 0.68rem;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-ct-field {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-ct-field:last-child {\n border-bottom: none;\n}\n\n.at-ct-field-label {\n color: var(--mj-text-muted);\n}\n\n.at-ct-field-value {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range i {\n color: var(--mj-brand-primary);\n}\n\n.at-ct-tag-range-bar {\n flex: 1;\n height: 6px;\n background: var(--mj-bg-surface);\n border-radius: 3px;\n position: relative;\n}\n\n.at-ct-tag-range-fill {\n position: absolute;\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n.at-ct-range-suffix {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 TAG LIBRARY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tag-lib-layout {\n display: flex;\n gap: 16px;\n}\n\n.at-tag-lib-main {\n flex: 1;\n}\n\n.at-tag-lib-sidebar {\n width: 280px;\n flex-shrink: 0;\n}\n\n.at-tag-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-tag-table th {\n text-align: left;\n padding: 8px 12px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-tag-table td {\n padding: 10px 12px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-name-cell {\n font-weight: 600;\n}\n\n.at-tag-bar {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n display: inline-block;\n vertical-align: middle;\n}\n\n.at-tag-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n/* Weight indicator in tag table */\n.at-weight-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-weight-bar {\n width: 50px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-weight-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.2s ease;\n}\n\n.at-weight-bar-fill.at-weight-high {\n background: var(--mj-status-success);\n}\n\n.at-weight-bar-fill.at-weight-medium {\n background: var(--mj-status-warning);\n}\n\n.at-weight-bar-fill.at-weight-low {\n background: var(--mj-status-error);\n}\n\n.at-weight-value {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 28px;\n}\n\n.at-tags-by-source {\n font-size: 0.78rem;\n}\n\n.at-tag-source-row {\n display: flex;\n justify-content: space-between;\n padding: 5px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-source-row:last-child {\n border-bottom: none;\n}\n\n.at-search-input {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n width: 200px;\n outline: none;\n}\n\n.at-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-search-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RUN HISTORY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-run-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-run-table th {\n text-align: left;\n padding: 10px 14px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-run-table td {\n padding: 12px 14px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-run-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n cursor: pointer;\n}\n\n.at-run-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-run-status-badge.complete {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-run-status-badge.failed {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-run-status-badge.running {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-run-duration {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n}\n\n.at-run-source-name {\n font-weight: 500;\n}\n\n.at-run-error-text {\n color: var(--mj-status-error-text);\n}\n\n.at-filter-select {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.78rem;\n outline: none;\n}\n\n.at-filter-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SLIDE-IN FORM PANEL \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n}\n\n.at-slide-panel {\n position: fixed;\n right: 0;\n top: 0;\n bottom: 0;\n width: 420px;\n max-width: 100vw;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n}\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-slide-header h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n background: none;\n border: none;\n font-size: 1.1rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n}\n\n.at-slide-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-form-group {\n margin-bottom: 16px;\n}\n\n.at-form-label {\n display: block;\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.82rem;\n outline: none;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.at-form-input::placeholder,\n.at-form-textarea::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-form-textarea {\n resize: vertical;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n margin-top: 24px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RESPONSIVE \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n@media (max-width: 1100px) {\n .at-pipeline-layout {\n flex-direction: column;\n }\n\n .at-pipeline-right {\n width: 100%;\n flex-direction: row;\n }\n\n .at-tag-lib-layout {\n flex-direction: column;\n }\n\n .at-tag-lib-sidebar {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-left-nav {\n width: 180px;\n }\n\n .at-kpi-strip {\n flex-wrap: wrap;\n }\n\n .at-kpi-card {\n min-width: 140px;\n }\n\n .at-sources-grid {\n grid-template-columns: 1fr;\n }\n\n .at-ct-grid {\n grid-template-columns: 1fr;\n }\n\n .at-slide-panel {\n width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .at-left-nav {\n width: 56px;\n }\n\n .at-left-nav-header h2 {\n font-size: 0;\n }\n\n .at-left-nav-header h2 i {\n font-size: 1rem;\n }\n\n .at-nav-item {\n justify-content: center;\n padding: 10px;\n font-size: 0;\n }\n\n .at-nav-item i {\n font-size: 1rem;\n }\n\n .at-nav-badge {\n display: none;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Slide-in Form Panel\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.35);\n z-index: 9999;\n animation: at-fade-in 0.2s ease;\n}\n\n@keyframes at-fade-in { from { opacity: 0; } to { opacity: 1; } }\n\n.at-slide-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 420px;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 40px rgba(0, 0, 0, 0.4);\n z-index: 10000;\n display: flex;\n flex-direction: column;\n animation: at-slide-in 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes at-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-slide-header h3 {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n transition: all 0.15s ease;\n}\n\n.at-slide-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.at-form-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n outline: none;\n transition: border-color 0.15s ease;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.at-form-select {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M3 5l3 3 3-3'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 30px;\n}\n\n.at-form-textarea {\n resize: vertical;\n min-height: 70px;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-form-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* Also add empty state for Content Types (matching Sources) */\n.at-add-type-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-type-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-type-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORKED PIPELINE STAGES \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-stages-forked {\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n.at-pipeline-fork {\n display: flex;\n align-items: center;\n gap: 0;\n flex: 2;\n}\n\n.at-pipeline-fork-lines {\n width: 28px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n position: relative;\n flex-shrink: 0;\n}\n\n.at-pipeline-fork-line {\n height: 2px;\n background: var(--mj-border-default);\n width: 100%;\n position: relative;\n}\n\n.at-pipeline-fork-line::before {\n content: '';\n position: absolute;\n width: 2px;\n height: 12px;\n background: var(--mj-border-default);\n left: 0;\n}\n\n.at-fork-top::before {\n bottom: 0;\n left: 0;\n}\n\n.at-fork-bottom::before {\n top: 0;\n left: 0;\n}\n\n.at-pipeline-fork-branches {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n}\n\n.at-pipeline-fork-branches .at-pipeline-stage {\n flex: none;\n padding: 6px 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE FEED ITEMS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-item-clickable {\n cursor: pointer;\n}\n\n.at-feed-item-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FEED SEARCH & PAGINATION \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.at-feed-header-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-left: auto;\n}\n\n.at-feed-sort-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.68rem;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-feed-sort-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-feed-count {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n}\n\n.at-feed-search-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-search-icon {\n color: var(--mj-text-disabled);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-feed-search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n outline: none;\n padding: 4px 0;\n min-width: 0;\n}\n\n.at-feed-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-feed-search-clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 9px;\n flex-shrink: 0;\n}\n\n.at-feed-search-clear:hover {\n background: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.at-feed-scroll-body {\n overflow-y: auto;\n min-height: 0;\n flex: 1;\n}\n\n.at-feed-item-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n overflow: hidden;\n}\n\n.at-feed-item-content .at-feed-item-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-feed-item-source-label {\n font-size: 0.7rem;\n font-weight: 500;\n color: var(--mj-brand-primary);\n}\n\n.at-feed-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-pagination-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE SOURCE CARDS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-source-card-clickable {\n cursor: pointer;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORM HINT \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-form-hint {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n font-style: italic;\n margin-top: 2px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 DETAIL PANEL (wider) \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-panel {\n width: 500px;\n}\n\n/* \u2500\u2500 Detail: Item header \u2500\u2500 */\n\n.at-detail-item-header {\n margin-bottom: 8px;\n}\n\n.at-detail-item-name {\n font-size: 1.05rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 6px 0;\n word-break: break-word;\n}\n\n.at-detail-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-detail-badge {\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-detail-badge-source {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-detail-badge-type {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.at-detail-badge-file {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.at-detail-badge-status-active {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-detail-badge-status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-detail-badge-status-inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500 Detail: Sections \u2500\u2500 */\n\n.at-detail-section {\n margin-bottom: 4px;\n}\n\n.at-detail-section-label {\n font-size: 0.72rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.at-detail-link {\n font-size: 0.8rem;\n color: var(--mj-brand-primary);\n text-decoration: none;\n word-break: break-all;\n}\n\n.at-detail-link:hover {\n text-decoration: underline;\n}\n\n/* \u2500\u2500 Detail: Text preview \u2500\u2500 */\n\n.at-detail-text-preview {\n max-height: 200px;\n overflow-y: auto;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n font-size: 0.78rem;\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n line-height: 1.5;\n}\n\n/* \u2500\u2500 Detail: Tags \u2500\u2500 */\n\n.at-detail-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n/* \u2500\u2500 Detail: Meta grid \u2500\u2500 */\n\n.at-detail-meta-grid {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.at-detail-meta-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-detail-meta-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-meta-key {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n margin-right: 12px;\n}\n\n.at-detail-meta-value {\n color: var(--mj-text-primary);\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-meta-mono {\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n font-size: 0.72rem;\n}\n\n/* \u2500\u2500 Detail: Actions \u2500\u2500 */\n\n.at-detail-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-detail-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* \u2500\u2500 Detail: Source header \u2500\u2500 */\n\n.at-detail-source-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n/* \u2500\u2500 Detail: Stats strip \u2500\u2500 */\n\n.at-detail-stats-strip {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-detail-stat {\n flex: 1;\n min-width: 60px;\n text-align: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 8px 6px;\n}\n\n.at-detail-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-detail-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Detail: Content Library \u2500\u2500 */\n\n.at-detail-content-list {\n max-height: 250px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.at-detail-content-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-detail-content-item:last-child {\n border-bottom: none;\n}\n\n.at-detail-content-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-detail-content-item-name {\n flex: 1;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-content-item-tags {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.at-detail-content-item-time {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* \u2500\u2500 Detail: Run history \u2500\u2500 */\n\n.at-detail-run-history {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.at-detail-run-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.75rem;\n}\n\n.at-detail-run-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-run-time {\n color: var(--mj-text-secondary);\n flex: 1;\n}\n\n.at-detail-run-duration {\n color: var(--mj-text-muted);\n}\n\n.at-detail-run-items {\n color: var(--mj-text-muted);\n}\n\n@media (max-width: 600px) {\n .at-slide-panel {\n width: 100%;\n }\n\n .at-detail-panel {\n width: 100%;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n TAXONOMY GOVERNANCE TAB\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n/* \u2500\u2500 Sub-tab strip \u2500\u2500 */\n\n.at-tax-tab-strip {\n display: flex;\n border-bottom: 2px solid var(--mj-border-default);\n padding: 0 20px;\n gap: 0;\n flex-shrink: 0;\n}\n\n.at-tax-tab {\n padding: 10px 20px;\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: all 0.15s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-tax-tab:hover {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-tax-tab-badge {\n font-size: 0.62rem;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n}\n\n.at-tax-badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* \u2500\u2500 Tree View: Split layout \u2500\u2500 */\n\n.at-tax-split-view {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n height: calc(100vh - 320px);\n min-height: 400px;\n overflow: hidden;\n}\n\n.at-tax-tree-panel {\n width: 40%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n}\n\n.at-tax-tree-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-toolbar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 0.8rem;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-tax-toolbar-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-tax-toolbar-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-tree-body {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.at-tax-tree-node {\n padding: 6px 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s;\n line-height: 1.4;\n}\n\n.at-tax-tree-node:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-node-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n}\n\n.at-tax-node-drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n outline: 2px dashed var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.at-tax-node-multi-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.at-tax-tree-add-child {\n margin-left: auto;\n opacity: 0;\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 2px 6px;\n border-radius: 4px;\n transition: opacity 0.15s, color 0.15s, background 0.15s;\n}\n\n.at-tax-tree-node:hover .at-tax-tree-add-child {\n opacity: 1;\n}\n\n.at-tax-tree-add-child:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.at-tax-tree-checkbox {\n width: 14px;\n height: 14px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.at-tax-tree-saving-overlay {\n position: absolute;\n inset: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 75%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n backdrop-filter: blur(1px);\n}\n\n.at-tax-create-context {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n margin-bottom: 12px;\n padding: 6px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.at-tax-tree-arrow {\n width: 16px;\n font-size: 0.55rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n text-align: center;\n cursor: pointer;\n}\n\n.at-tax-arrow-collapsed::before {\n content: \"\\25B6\";\n}\n\n.at-tax-arrow-expanded::before {\n content: \"\\25BC\";\n}\n\n.at-tax-arrow-leaf {\n visibility: hidden;\n}\n\n.at-tax-health-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-tax-health-dot.green {\n background: var(--mj-status-success);\n}\n\n.at-tax-health-dot.yellow {\n background: var(--mj-status-warning);\n}\n\n.at-tax-health-dot.red {\n background: var(--mj-status-error);\n}\n\n.at-tax-tree-label {\n flex: 1;\n color: var(--mj-text-primary);\n}\n\n.at-tax-tree-label-selected {\n font-weight: 700;\n}\n\n.at-tax-tree-count {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n/* \u2500\u2500 Details panel \u2500\u2500 */\n\n.at-tax-details-panel {\n width: 60%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.at-tax-details-header {\n padding: 20px 24px 0;\n}\n\n.at-tax-breadcrumb {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tax-bc-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.at-tax-bc-link:hover {\n text-decoration: underline;\n}\n\n.at-tax-bc-sep {\n color: var(--mj-border-default);\n}\n\n.at-tax-bc-current {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.at-tax-details-title {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.at-tax-edit-icon {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n}\n\n.at-tax-edit-icon:hover {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-details-desc {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin-bottom: 16px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-tax-edit-form {\n margin-bottom: 16px;\n}\n\n/* \u2500\u2500 Stats row \u2500\u2500 */\n\n.at-tax-stats-row {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n padding: 0 24px;\n}\n\n.at-tax-stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n min-width: 72px;\n}\n\n.at-tax-stat-value {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-stat-date {\n font-size: 0.8rem;\n}\n\n.at-tax-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Action toolbar \u2500\u2500 */\n\n.at-tax-action-toolbar {\n display: flex;\n gap: 8px;\n padding: 0 24px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.at-tax-action-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-action-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n}\n\n/* \u2500\u2500 Detail sections \u2500\u2500 */\n\n.at-tax-detail-section {\n padding: 0 24px 20px;\n}\n\n.at-tax-section-title {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.at-tax-child-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-tax-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.at-tax-child-chip:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.at-tax-chip-count {\n font-size: 0.6rem;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n padding: 0 5px;\n border-radius: 8px;\n}\n\n/* \u2500\u2500 Recent items \u2500\u2500 */\n\n.at-tax-recent-list {\n list-style: none;\n}\n\n.at-tax-recent-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-tax-recent-item:last-child {\n border-bottom: none;\n}\n\n.at-tax-recent-icon {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-tax-recent-name {\n flex: 1;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-tax-recent-weight {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-tax-recent-date {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Health bar \u2500\u2500 */\n\n.at-tax-health-bar {\n display: flex;\n align-items: center;\n gap: 20px;\n padding: 12px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n margin-top: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-health-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-health-stat {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n}\n\n.at-tax-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n}\n\n.at-tax-dot-total {\n background: var(--mj-text-secondary);\n}\n\n.at-tax-dot-healthy {\n background: var(--mj-status-success);\n}\n\n.at-tax-dot-attention {\n background: var(--mj-status-warning);\n}\n\n.at-tax-dot-orphaned {\n background: var(--mj-status-error);\n}\n\n.at-tax-dot-duplicates {\n background: var(--mj-status-info);\n}\n\n.at-tax-health-value {\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-val-success {\n color: var(--mj-status-success);\n}\n\n.at-tax-val-warning {\n color: var(--mj-status-warning);\n}\n\n.at-tax-val-error {\n color: var(--mj-status-error);\n}\n\n.at-tax-val-info {\n color: var(--mj-status-info);\n}\n\n.at-tax-health-text {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550 Duplicates sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-dup-stats-bar {\n display: flex;\n gap: 24px;\n margin-bottom: 16px;\n align-items: center;\n}\n\n.at-tax-dup-stat {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n}\n\n.at-tax-dup-stat strong {\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n margin-right: 4px;\n}\n\n.at-tax-dup-high strong {\n color: var(--mj-status-error);\n}\n\n.at-tax-dup-moderate strong {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-tax-dup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.at-tax-dup-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-card.at-tax-dup-high {\n border-left: 3px solid var(--mj-status-error);\n}\n\n.at-tax-dup-card.at-tax-dup-moderate {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.at-tax-dup-tag {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n min-width: 120px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n text-align: center;\n}\n\n.at-tax-dup-arrow {\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.at-tax-dup-similarity {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n min-width: 100px;\n}\n\n.at-tax-sim-bar-bg {\n width: 100%;\n height: 6px;\n background: var(--mj-border-default);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-tax-sim-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s;\n}\n\n.at-tax-sim-bar-fill.high {\n background: var(--mj-status-error);\n}\n\n.at-tax-sim-bar-fill.moderate {\n background: var(--mj-status-warning);\n}\n\n.at-tax-sim-percent {\n font-size: 0.78rem;\n font-weight: 700;\n}\n\n.at-tax-sim-percent.high {\n color: var(--mj-status-error);\n}\n\n.at-tax-sim-percent.moderate {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-tax-dup-btn {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n white-space: nowrap;\n}\n\n.at-tax-dup-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n/* \u2550\u2550\u2550\u2550 Orphans sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-orphan-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-orphan-count {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-desc {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-bulk {\n margin-left: auto;\n display: flex;\n gap: 8px;\n}\n\n.at-tax-bulk-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-bulk-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-bulk-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.at-tax-orphan-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: 12px;\n}\n\n.at-tax-orphan-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.15s;\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-top: 3px solid var(--mj-status-error);\n}\n\n.at-tax-orphan-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.at-tax-orphan-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-stats {\n display: flex;\n gap: 12px;\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-stats strong {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-orphan-dates {\n display: flex;\n justify-content: space-between;\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-actions {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n}\n\n.at-tax-orphan-btn {\n flex: 1;\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n text-align: center;\n transition: all 0.15s;\n}\n\n.at-tax-orphan-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-delete:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n/* \u2550\u2550\u2550\u2550 Treemap sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-kpi-strip {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-treemap-kpi {\n padding: 10px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 120px;\n}\n\n.at-tax-treemap-kpi-value {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-treemap-kpi-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-tax-treemap-container {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 8px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n grid-auto-rows: 80px;\n gap: 4px;\n min-height: 340px;\n}\n\n.at-tax-treemap-cell {\n border-radius: 6px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s;\n position: relative;\n overflow: hidden;\n}\n\n.at-tax-treemap-cell:hover {\n transform: scale(1.02);\n z-index: 2;\n}\n\n.at-tax-cell-name {\n font-size: 0.78rem;\n}\n\n.at-tax-cell-count {\n font-size: 0.65rem;\n opacity: 0.85;\n font-weight: 400;\n}\n\n/* Treemap color families */\n.at-tm-blue-1 { background: color-mix(in srgb, var(--mj-brand-primary) 90%, black); }\n.at-tm-blue-2 { background: var(--mj-brand-primary); }\n.at-tm-blue-3 { background: color-mix(in srgb, var(--mj-brand-primary) 75%, white); }\n.at-tm-blue-4 { background: color-mix(in srgb, var(--mj-brand-primary) 55%, white); }\n\n.at-tm-green-1 { background: color-mix(in srgb, var(--mj-status-success) 90%, black); }\n.at-tm-green-2 { background: var(--mj-status-success); }\n.at-tm-green-3 { background: color-mix(in srgb, var(--mj-status-success) 60%, white); color: var(--mj-text-primary); }\n\n.at-tm-purple-1 { background: color-mix(in srgb, var(--mj-status-info) 90%, black); }\n.at-tm-purple-2 { background: var(--mj-status-info); }\n.at-tm-purple-3 { background: color-mix(in srgb, var(--mj-status-info) 65%, white); }\n\n.at-tm-orange-1 { background: color-mix(in srgb, var(--mj-status-warning) 90%, black); }\n.at-tm-orange-2 { background: var(--mj-status-warning); }\n.at-tm-orange-3 { background: color-mix(in srgb, var(--mj-status-warning) 60%, white); color: var(--mj-text-primary); }\n\n/* \u2550\u2550\u2550\u2550 Audit Log sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-audit-filters {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 16px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-filter-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-audit-checkbox-group {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-checkbox {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.at-tax-audit-checkbox input {\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-audit-timeline {\n position: relative;\n padding-left: 32px;\n}\n\n.at-tax-audit-timeline::before {\n content: '';\n position: absolute;\n left: 14px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.at-tax-audit-event {\n position: relative;\n padding: 10px 16px;\n margin-bottom: 4px;\n display: flex;\n align-items: flex-start;\n gap: 12px;\n border-radius: 8px;\n transition: background 0.1s;\n}\n\n.at-tax-audit-event:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-audit-event-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.68rem;\n flex-shrink: 0;\n position: absolute;\n left: -32px;\n top: 10px;\n z-index: 1;\n}\n\n.at-tax-audit-event-icon.created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.at-tax-audit-event-icon.merged {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.moved {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.deleted {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.at-tax-audit-event-icon.renamed {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-audit-event-body {\n flex: 1;\n}\n\n.at-tax-audit-event-desc {\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n line-height: 1.5;\n}\n\n.at-tax-tag-ref {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n font-weight: 600;\n font-size: 0.72rem;\n border: 1px solid var(--mj-border-default);\n}\n\n.at-tax-audit-event-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n display: flex;\n gap: 12px;\n}\n\n/* \u2500\u2500 Taxonomy responsive \u2500\u2500 */\n\n@media (max-width: 1100px) {\n .at-tax-split-view {\n flex-direction: column;\n }\n\n .at-tax-tree-panel {\n width: 100%;\n max-height: 300px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .at-tax-details-panel {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-tax-dup-card {\n flex-wrap: wrap;\n }\n\n .at-tax-orphan-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* \u2500\u2500 Pipeline Config Widget \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-config-card {\n margin-top: 12px;\n}\n\n.at-config-body {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px !important;\n}\n\n.at-config-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.at-config-label {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n min-width: 90px;\n flex-shrink: 0;\n}\n\n.at-config-control {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n justify-content: flex-end;\n}\n\n.at-config-input {\n width: 70px;\n padding: 3px 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 0.75rem;\n text-align: right;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.at-config-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.at-config-slider {\n flex: 1;\n max-width: 100px;\n accent-color: var(--mj-brand-primary);\n height: 4px;\n}\n\n.at-config-value {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n min-width: 40px;\n text-align: right;\n}\n\n.at-config-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n}\n\n.at-config-section-label {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Toggle Switch */\n.at-config-toggle {\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n\n.at-config-toggle input {\n display: none;\n}\n\n.at-toggle-track {\n display: block;\n width: 32px;\n height: 18px;\n background: var(--mj-border-strong);\n border-radius: 9px;\n transition: background 0.2s ease;\n position: relative;\n}\n\n.at-config-toggle input:checked + .at-toggle-track {\n background: var(--mj-brand-primary);\n}\n\n.at-toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0,0,0,0.15);\n}\n\n.at-config-toggle input:checked + .at-toggle-track .at-toggle-thumb {\n transform: translateX(14px);\n}\n\n/* \u2500\u2500 Schedule Indicator on Source Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-indicator {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n margin-top: 6px;\n border-radius: 12px;\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-border-default));\n cursor: pointer;\n transition: all 0.15s ease;\n width: fit-content;\n}\n\n.at-schedule-indicator i {\n font-size: 0.62rem;\n}\n\n.at-schedule-indicator:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-default));\n}\n\n/* Schedule button in source card actions */\n.at-source-schedule-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Schedule Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-schedule-dialog {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg, 12px);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16);\n width: 420px;\n max-width: 90vw;\n}\n\n.at-schedule-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-schedule-dialog-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-dialog-close {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 16px;\n padding: 4px;\n line-height: 1;\n transition: color 0.15s;\n}\n\n.at-schedule-dialog-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-body {\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-schedule-field label {\n display: block;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin-bottom: 6px;\n}\n\n.at-schedule-source-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-source-name i {\n color: var(--mj-text-muted);\n}\n\n.at-schedule-action-name {\n font-size: 13px;\n color: var(--mj-text-secondary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-cron-input {\n width: 100%;\n font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n letter-spacing: 0.02em;\n}\n\n.at-schedule-cron-preview {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.at-schedule-cron-preview i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-toggle-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n}\n\n.at-schedule-toggle-row label {\n margin-bottom: 0;\n}\n\n.at-schedule-dialog-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4: Status Badges for Content Items \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-status-badge {\n display: inline-block;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 0.6rem;\n font-weight: 600;\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n\n.at-status-badge-complete {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.at-status-badge-processing {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.at-status-badge-failed {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.at-status-badge-pending {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4/D7: Source Detail Controls \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-section-header-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.at-detail-section-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-detail-filter-select {\n padding: 4px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.72rem;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n}\n\n.at-retry-btn {\n font-size: 0.7rem !important;\n padding: 4px 8px !important;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface)) !important;\n color: var(--mj-status-error-text) !important;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-border-default)) !important;\n}\n\n.at-retry-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface)) !important;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D7: Pagination \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 10px 0 4px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 4px;\n}\n\n.at-page-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.72rem;\n font-weight: 500;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-page-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-page-btn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.at-page-info {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Confirmation Dialog \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-confirm-message {\n font-size: 13.5px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: var(--mj-radius-sm, 6px);\n padding: 7px 14px;\n font-size: 12.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.at-danger-btn:hover {\n background: var(--mj-status-error-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Treemap Drill-In \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-cell-clickable {\n cursor: pointer;\n transition: transform 0.15s, box-shadow 0.15s;\n}\n\n.at-tax-treemap-cell-clickable:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 1;\n}\n\n.at-tax-drillin-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: flex-start;\n justify-content: flex-end;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-tax-drillin-panel {\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n width: 420px;\n max-width: 90vw;\n height: 100vh;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n.at-tax-drillin-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-drillin-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-tax-drillin-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-drillin-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-tax-drillin-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* D3/D8: Clickable run history rows */\n.at-run-row-clickable {\n cursor: pointer;\n transition: background 0.12s ease;\n}\n\n.at-run-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-run-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n/* D2: Error text in detail tables */\n.run-error-text {\n color: var(--mj-status-error);\n font-weight: 600;\n}\n\n/* \u2500\u2500 Content Item Duplicates Section (G3) \u2500\u2500 */\n\n.at-dedup-section {\n margin-top: 24px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 20px;\n}\n\n.at-dedup-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.at-dedup-title {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.at-dedup-subtitle {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-dedup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s;\n}\n\n.at-dedup-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.at-dedup-pair {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.at-dedup-item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n}\n\n.at-dedup-item-name {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-dedup-item-source {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-vs {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n flex-shrink: 0;\n}\n\n.at-dedup-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.at-dedup-score {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-dedup-method {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-dedup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-dedup-confirm {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-dismiss {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-empty {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-empty i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n color: var(--mj-status-success);\n}\n\n.at-dedup-empty p {\n margin: 8px 0 0;\n font-size: 0.82rem;\n}\n\n/* =============================================================================\n * Tags-only additions: governance toggles, scope chips, inline synonyms,\n * Suggestions inbox table+drawer, Tag Health 3-card layout. All colors flow\n * through MJ design tokens with `color-mix()` for tinted variants.\n * ============================================================================= */\n\n/* ---------- Governance toggle rows ---------- */\n\n.at-tg-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 0;\n border-bottom: 1px dashed var(--mj-border-subtle);\n}\n.at-tg-toggle-row:last-child { border-bottom: 0; }\n.at-tg-toggle-label { display: flex; flex-direction: column; gap: 2px; max-width: 70%; }\n.at-tg-toggle-t { font-size: 13px; font-weight: 600; color: var(--mj-text-primary); }\n.at-tg-toggle-d { font-size: 11px; color: var(--mj-text-muted); line-height: 1.4; }\n\n.at-tg-switch {\n position: relative;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n.at-tg-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n.at-tg-switch.on { background: var(--mj-brand-primary); }\n.at-tg-switch.on::after { left: 18px; }\n.at-tg-switch.disabled { opacity: 0.5; pointer-events: none; }\n\n.at-tg-grid-3 {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 14px 16px;\n margin-top: 14px;\n}\n.at-tg-field { display: flex; flex-direction: column; gap: 4px; }\n.at-tg-field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n.at-tg-hint { font-size: 11px; color: var(--mj-text-muted); }\n\n/* ---------- Scope chips ---------- */\n\n.at-tg-chip-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n margin-top: 8px;\n}\n.at-tg-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 999px;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n.at-tg-chip.scoped {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------- Inline synonyms ---------- */\n\n.at-tg-syn-add {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n align-items: stretch;\n}\n.at-tg-syn-add .at-search-input { flex: 1; }\n.at-tg-syn-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 5px;\n border: 1px solid var(--mj-border-subtle);\n margin-bottom: 6px;\n background: var(--mj-bg-surface);\n}\n.at-tg-syn-row.pending {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n.at-tg-syn-name { font-weight: 600; flex: 1; color: var(--mj-text-primary); }\n.at-tg-syn-src {\n font-size: 10px;\n padding: 2px 7px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n}\n.at-tg-syn-src.manual { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.at-tg-syn-src.imported { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.at-tg-syn-src.merged { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.at-tg-syn-src.llm { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.at-tg-syn-x {\n cursor: pointer;\n color: var(--mj-text-muted);\n padding: 2px 6px;\n}\n.at-tg-syn-x:hover { color: var(--mj-status-error-text, var(--mj-status-error)); }\n\n/* ---------- Suggestions inbox table + drawer ---------- */\n\n.sg-shell {\n display: flex;\n height: 100%;\n min-height: 600px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.sg-main { flex: 1; display: flex; flex-direction: column; min-width: 0; overflow: hidden; }\n.sg-toolbar {\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n align-items: center;\n background: var(--mj-bg-surface-card);\n flex-wrap: wrap;\n}\n.sg-bulk-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n padding: 9px 14px;\n display: flex;\n gap: 10px;\n align-items: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n font-weight: 500;\n}\n.sg-table-body { flex: 1; overflow: auto; }\n.sg-table { width: 100%; border-collapse: collapse; font-size: 13px; color: var(--mj-text-primary); }\n.sg-table thead { position: sticky; top: 0; background: var(--mj-bg-surface-card); z-index: 1; }\n.sg-table th {\n text-align: left;\n padding: 9px 12px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n.sg-table td {\n padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n.sg-table tr { cursor: pointer; }\n.sg-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.sg-table tr.sg-row-selected td { background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); }\n.sg-table tr.sg-row-checked td { background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent); }\n.sg-score { font-family: ui-monospace, \"SF Mono\", Menlo, monospace; font-weight: 600; }\n.sg-score-bar {\n display: inline-block;\n width: 70px;\n height: 5px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n vertical-align: middle;\n margin-right: 6px;\n}\n.sg-score-bar > span {\n display: block;\n height: 100%;\n background: var(--mj-brand-primary);\n}\n.sg-reason {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n.sg-reason.merge { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.sg-reason.below { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 12%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.constrained { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.sg-reason.frozen { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.review { background: color-mix(in srgb, var(--mj-status-error) 12%, transparent); color: var(--mj-status-error-text, var(--mj-status-error)); }\n.sg-reason.lowusage { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.widenode { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.autogrow { background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-row-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.1s;\n}\n.sg-table tr:hover .sg-row-actions {\n opacity: 1;\n}\n\n.sg-drawer {\n width: 460px;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n.sg-drawer-hd {\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface);\n}\n.sg-drawer-bd { padding: 16px 18px; flex: 1; overflow-y: auto; }\n.sg-drawer-ft {\n padding: 12px 18px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface);\n flex-wrap: wrap;\n}\n.sg-drawer h4 {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 16px 0 8px;\n font-weight: 700;\n}\n.sg-candidate {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n display: flex;\n gap: 12px;\n align-items: center;\n}\n.sg-preview {\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n/* ---------- Tag Health cards ---------- */\n\n.health-shell { padding: 18px 22px; }\n.runbar {\n display: flex;\n gap: 22px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n margin-bottom: 18px;\n align-items: center;\n font-size: 13px;\n}\n.runbar .stat .l { font-size: 11px; color: var(--mj-text-muted); }\n.runbar .stat .v { font-size: 16px; font-weight: 600; color: var(--mj-text-primary); }\n.runbar .grow { flex: 1; }\n\n.health-cards {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 16px;\n margin-bottom: 22px;\n}\n.h-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 240px;\n}\n.h-card.merge { border-top: 4px solid var(--mj-brand-primary); }\n.h-card.lowusage { border-top: 4px solid var(--mj-status-warning); }\n.h-card.widenode { border-top: 4px solid var(--mj-status-error, var(--mj-status-warning)); }\n.h-card .top { display: flex; align-items: flex-start; gap: 10px; }\n.h-card .top .ic {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n}\n.h-card .name {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.h-card h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n.h-card .big {\n font-size: 36px;\n font-weight: 800;\n color: var(--mj-text-primary);\n line-height: 1;\n}\n.h-card .sub { font-size: 12px; color: var(--mj-text-secondary); line-height: 1.4; margin: 0; }\n.h-card .ft { margin-top: auto; display: flex; gap: 6px; flex-wrap: wrap; }\n\n.threshold-form {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px;\n margin-top: 18px;\n}\n.threshold-form h3 { margin: 0 0 12px; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.threshold-form .grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n.threshold-form .field { display: flex; flex-direction: column; gap: 4px; }\n.threshold-form .field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n\n.run-history {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-top: 18px;\n overflow: hidden;\n}\n.run-history-hd {\n padding: 12px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-card);\n}\n.run-history-hd h3 { margin: 0; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.run-history table { width: 100%; border-collapse: collapse; font-size: 12px; }\n.run-history th {\n text-align: left;\n padding: 8px 12px;\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 600;\n}\n.run-history td {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n/* Generic helpers used by new sections */\n.at-muted { color: var(--mj-text-muted); }\n.at-success-btn { color: var(--mj-status-success-text, var(--mj-status-success)); border-color: var(--mj-status-success-border, var(--mj-status-success)); }\n.at-btn-sm { font-size: 12px; padding: 4px 9px; }\n.at-btn-xs { font-size: 11px; padding: 2px 7px; }\n"], encapsulation: 2 });
7369
7367
  };
7370
7368
  TagsResourceComponent = TagsResourceComponent_1 = __decorate([
7371
7369
  RegisterClass(BaseResourceComponent, 'Tags')
@@ -7373,7 +7371,7 @@ TagsResourceComponent = TagsResourceComponent_1 = __decorate([
7373
7371
  export { TagsResourceComponent };
7374
7372
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TagsResourceComponent, [{
7375
7373
  type: Component,
7376
- args: [{ standalone: false, selector: 'mj-tags-resource', encapsulation: ViewEncapsulation.None, template: "<!-- Tags Dashboard -->\n<div class=\"at-dashboard\">\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 LEFT NAV \u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"at-left-nav\">\n <div class=\"at-left-nav-header\">\n <h2><i class=\"fa-solid fa-sitemap\"></i> Tags</h2>\n </div>\n <div class=\"at-left-nav-items\">\n @for (item of NavItems; track item.Tab) {\n <div class=\"at-nav-item\" [class.active]=\"ActiveTab === item.Tab\" (click)=\"SwitchTab(item.Tab)\">\n <i [class]=\"item.Icon\"></i> {{ item.Label }}\n @if (item.BadgeText) {\n <span class=\"at-nav-badge\" [class.at-nav-badge-live]=\"item.BadgeClass === 'nav-badge-live'\">{{ item.BadgeText }}</span>\n }\n </div>\n }\n </div>\n <div class=\"at-left-nav-footer\">\n <button class=\"at-run-pipeline-btn\" (click)=\"RunHealthNow()\" [disabled]=\"HealthRunning\">\n @if (HealthRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running\u2026\n } @else {\n <i class=\"fa-solid fa-heart-pulse\"></i> Run Tag Health\n }\n </button>\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 MAIN AREA \u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"at-main-area\">\n\n @if (IsLoading) {\n <div class=\"at-loading-overlay\">\n <mj-loading text=\"Loading tag data\u2026\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading) {\n <!-- TAB 4: TAG LIBRARY -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'tags') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Overview</div>\n <div class=\"at-page-subtitle\">{{ TagRows.length }} unique tags across all content sources</div>\n </div>\n <div class=\"at-page-actions\">\n <input type=\"text\" class=\"at-search-input\" placeholder=\"Search tags...\"\n [(ngModel)]=\"TagSearchQuery\" (input)=\"FilterTags()\">\n </div>\n </div>\n <div class=\"at-page-body\">\n <div class=\"at-tag-lib-layout\">\n <div class=\"at-tag-lib-main\">\n <div class=\"at-card\">\n <div class=\"at-card-body\" style=\"max-height: 500px; overflow-y: auto;\">\n <table class=\"at-tag-table\">\n <thead>\n <tr>\n <th>Tag</th>\n <th>Count</th>\n <th>Avg Weight</th>\n <th>Distribution</th>\n <th>Top Source</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredTagRows; track row.Tag) {\n <tr class=\"at-tag-row-clickable\" (click)=\"DrillDownTag(row.Tag)\"\n [class.at-tag-row-selected]=\"SelectedDrillDownTag === row.Tag\">\n <td class=\"at-tag-name-cell\">{{ row.Tag }}</td>\n <td>{{ row.UsageCount }}</td>\n <td>\n <div class=\"at-weight-indicator\">\n <div class=\"at-weight-bar\">\n <div class=\"at-weight-bar-fill\" [style.width.%]=\"row.AvgWeight * 100\"\n [class.at-weight-high]=\"row.AvgWeight >= 0.7\"\n [class.at-weight-medium]=\"row.AvgWeight >= 0.4 && row.AvgWeight < 0.7\"\n [class.at-weight-low]=\"row.AvgWeight < 0.4\"></div>\n </div>\n <span class=\"at-weight-value\">{{ row.AvgWeight.toFixed(2) }}</span>\n </div>\n </td>\n <td>\n <div class=\"at-tag-bar\">\n <div class=\"at-tag-bar-fill\" [style.width.%]=\"row.BarWidthPct\"></div>\n </div>\n </td>\n <td>{{ row.TopSource }}</td>\n <td>{{ row.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Tag drill-down: content items matching selected tag -->\n @if (SelectedDrillDownTag) {\n <div class=\"at-card\" style=\"margin-top: 12px;\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Content items tagged \"{{ SelectedDrillDownTag }}\"\n ({{ TagDrillDownItems.length }})\n </span>\n <button class=\"at-slide-close\" (click)=\"CloseDrillDownTag()\" style=\"background:none;border:none;cursor:pointer;color:var(--mj-text-muted)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-card-body\" style=\"max-height: 300px; overflow-y: auto;\">\n @if (TagDrillDownItems.length === 0) {\n <div class=\"at-empty-state\"><p>No content items found for this tag.</p></div>\n } @else {\n <table class=\"at-tag-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Source</th>\n <th>Weight</th>\n <th>Updated</th>\n </tr>\n </thead>\n <tbody>\n @for (di of TagDrillDownItems; track di.ID) {\n <tr class=\"at-tag-row-clickable\" (click)=\"OpenItemDetailByID(di.ID)\">\n <td>{{ di.Name }}</td>\n <td>{{ di.SourceName }}</td>\n <td>{{ FormatWeight(di.Weight) }}</td>\n <td>{{ di.UpdatedAt }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"at-tag-lib-sidebar\">\n <div class=\"at-card at-tag-cloud-card\">\n <div class=\"at-card-title\" style=\"margin-bottom: 12px;\"><i class=\"fa-solid fa-cloud\"></i> Tag Cloud</div>\n @if (TagCloudWordItems.length > 0) {\n <mj-word-cloud\n [Items]=\"TagCloudWordItems\"\n [MaxFontSize]=\"40\"\n [MinFontSize]=\"12\"\n [MaxItems]=\"20\"\n Layout=\"spiral\"\n ColorMode=\"weight-gradient\"\n [Interactive]=\"true\"\n [Animate]=\"true\">\n </mj-word-cloud>\n } @else {\n <div class=\"at-tag-cloud-empty\">No tags yet</div>\n }\n </div>\n <div class=\"at-card\" style=\"padding: 16px; margin-top: 12px;\">\n <div class=\"at-card-title\" style=\"margin-bottom: 10px;\"><i class=\"fa-solid fa-chart-pie\"></i> By Source</div>\n <div class=\"at-tags-by-source\">\n @for (s of TagsBySource; track s.SourceName) {\n <div class=\"at-tag-source-row\">\n <span>{{ s.SourceName }}</span>\n <strong>{{ s.Count }}</strong>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- TAB 6: TAXONOMY GOVERNANCE -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'taxonomy') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Taxonomy Governance</div>\n <div class=\"at-page-subtitle\">Manage tag hierarchy, resolve duplicates, and monitor taxonomy health &mdash; <strong>{{ TaxHealth.Total }} total tags</strong></div>\n </div>\n <div class=\"at-page-actions\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"RefreshTaxonomyData()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n </div>\n </div>\n\n <!-- Sub-tab strip -->\n <div class=\"at-tax-tab-strip\">\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'tree'\" (click)=\"SwitchTaxSubTab('tree')\">\n <i class=\"fa-solid fa-sitemap\"></i> Tree View\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'duplicates'\" (click)=\"SwitchTaxSubTab('duplicates')\">\n <i class=\"fa-solid fa-link\"></i> Duplicates\n @if (TaxDuplicates.length > 0) {\n <span class=\"at-tax-tab-badge at-tax-badge-warning\">{{ TaxDuplicates.length }}</span>\n }\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'orphans'\" (click)=\"SwitchTaxSubTab('orphans')\">\n <i class=\"fa-solid fa-ban\"></i> Orphans\n @if (TaxOrphans.length > 0) {\n <span class=\"at-tax-tab-badge at-tax-badge-error\">{{ TaxOrphans.length }}</span>\n }\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'treemap'\" (click)=\"SwitchTaxSubTab('treemap')\">\n <i class=\"fa-solid fa-chart-tree-map\"></i> Treemap\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'audit'\" (click)=\"SwitchTaxSubTab('audit')\">\n <i class=\"fa-solid fa-scroll\"></i> Audit Log\n </div>\n </div>\n\n <div class=\"at-page-body\">\n\n <!-- \u2550\u2550 SUB-TAB 1: TREE VIEW \u2550\u2550 -->\n @if (TaxSubTab === 'tree') {\n <div class=\"at-tax-split-view\">\n <!-- Tree panel -->\n <div class=\"at-tax-tree-panel\" style=\"position: relative;\">\n <div class=\"at-tax-tree-toolbar\">\n <input type=\"text\" class=\"at-search-input\" style=\"flex: 1;\" placeholder=\"Search tags...\"\n [(ngModel)]=\"TaxTreeSearch\" (input)=\"FilterTaxTree()\">\n <button class=\"at-tax-toolbar-btn\" title=\"Add root tag\" (click)=\"OpenCreateRootTag()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button class=\"at-tax-toolbar-btn\" [class.active]=\"TaxMultiSelectMode\"\n title=\"Toggle multi-select for drag reparenting\" (click)=\"ToggleMultiSelectMode()\">\n <i class=\"fa-solid fa-check-double\"></i>\n </button>\n </div>\n <div class=\"at-tax-tree-body\"\n (dragover)=\"$event.preventDefault()\"\n (drop)=\"OnDropToRoot($event)\">\n @if (TaxFilteredNodes.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <p>No tags found</p>\n </div>\n }\n @for (node of TaxFilteredNodes; track node.ID) {\n <div class=\"at-tax-tree-node\"\n [class.at-tax-node-selected]=\"node.IsSelected\"\n [class.at-tax-node-drag-over]=\"TaxDragOverNodeID === node.ID\"\n [class.at-tax-node-multi-selected]=\"IsNodeMultiSelected(node.ID)\"\n [style.padding-left.px]=\"16 + node.Depth * 20\"\n [attr.draggable]=\"true\"\n (dragstart)=\"OnTreeNodeDragStart($event, node)\"\n (dragover)=\"OnTreeNodeDragOver($event, node)\"\n (dragleave)=\"OnTreeNodeDragLeave()\"\n (drop)=\"OnTreeNodeDrop($event, node); $event.stopPropagation()\"\n (click)=\"SelectTaxNode(node)\">\n @if (TaxMultiSelectMode) {\n <input type=\"checkbox\" class=\"at-tax-tree-checkbox\"\n [checked]=\"IsNodeMultiSelected(node.ID)\"\n (click)=\"ToggleNodeSelection(node, $event)\">\n }\n <span class=\"at-tax-tree-arrow\"\n [class.at-tax-arrow-expanded]=\"node.IsExpanded && node.Children.length > 0\"\n [class.at-tax-arrow-collapsed]=\"!node.IsExpanded && node.Children.length > 0\"\n [class.at-tax-arrow-leaf]=\"node.Children.length === 0\"\n (click)=\"ToggleTaxNode(node); $event.stopPropagation()\"></span>\n <span class=\"at-tax-health-dot\" [class]=\"node.HealthColor\"></span>\n <span class=\"at-tax-tree-label\" [class.at-tax-tree-label-selected]=\"node.IsSelected\">{{ node.Name }}</span>\n <span class=\"at-tax-tree-count\">({{ node.ItemCount }})</span>\n <span class=\"at-tax-tree-add-child\" title=\"Add child tag\"\n (click)=\"OpenCreateChildTagFor(node); $event.stopPropagation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </span>\n </div>\n }\n </div>\n @if (TaxTreeSaving) {\n <div class=\"at-tax-tree-saving-overlay\">\n <mj-loading text=\"Moving tags...\" size=\"small\"></mj-loading>\n </div>\n }\n </div>\n\n <!-- Details panel -->\n <div class=\"at-tax-details-panel\">\n @if (TaxSelectedNode) {\n <div class=\"at-tax-details-header\">\n <!-- Breadcrumb -->\n <div class=\"at-tax-breadcrumb\">\n @for (bc of GetTaxBreadcrumb(TaxSelectedNode); track bc.ID) {\n <span class=\"at-tax-bc-link\" (click)=\"NavigateToBreadcrumb(bc.ID)\">{{ bc.Name }}</span>\n <span class=\"at-tax-bc-sep\">&rsaquo;</span>\n }\n <span class=\"at-tax-bc-current\">{{ TaxSelectedNode.Name }}</span>\n </div>\n\n @if (!TaxIsEditing) {\n <div class=\"at-tax-details-title\">\n {{ TaxSelectedNode.DisplayName }}\n <span class=\"at-tax-edit-icon\" (click)=\"StartEditTag()\" title=\"Edit name\">\n <i class=\"fa-solid fa-pen\"></i>\n </span>\n </div>\n @if (TaxSelectedNode.Description) {\n <div class=\"at-tax-details-desc\">{{ TaxSelectedNode.Description }}</div>\n }\n } @else {\n <div class=\"at-tax-edit-form\">\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Name</label>\n <input type=\"text\" class=\"at-form-input\" [(ngModel)]=\"TaxEditName\">\n </div>\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Description</label>\n <textarea class=\"at-form-textarea\" rows=\"3\" [(ngModel)]=\"TaxEditDescription\"></textarea>\n </div>\n <div class=\"at-form-actions\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"SaveEditTag()\">Save</button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CancelEditTag()\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Stats row -->\n <div class=\"at-tax-stats-row\">\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.ItemCount }}</div>\n <div class=\"at-tax-stat-label\">Items Tagged</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.AvgWeight.toFixed(2) }}</div>\n <div class=\"at-tax-stat-label\">Avg Weight</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.Children.length }}</div>\n <div class=\"at-tax-stat-label\">Children</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.Depth }}</div>\n <div class=\"at-tax-stat-label\">Depth</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value at-tax-stat-date\">{{ TaxSelectedNode.FirstSeen }}</div>\n <div class=\"at-tax-stat-label\">First Seen</div>\n </div>\n </div>\n\n <!-- Action toolbar -->\n @if (!TaxIsEditing) {\n <div class=\"at-tax-action-toolbar\">\n <button class=\"at-tax-action-btn\" (click)=\"OpenCreateChildTag()\"><i class=\"fa-solid fa-plus\"></i> Add Child</button>\n <button class=\"at-tax-action-btn\" (click)=\"StartEditTag()\"><i class=\"fa-solid fa-pen\"></i> Rename</button>\n <button class=\"at-tax-action-btn\" (click)=\"OpenMoveDialog(TaxSelectedNode)\"><i class=\"fa-solid fa-arrows-up-down\"></i> Move</button>\n <button class=\"at-tax-action-btn\" (click)=\"OpenMergeIntoDialog(TaxSelectedNode)\"><i class=\"fa-solid fa-compress\"></i> Merge Into...</button>\n <button class=\"at-tax-action-btn\" (click)=\"OpenSplitDialog(TaxSelectedNode)\"><i class=\"fa-solid fa-code-branch\"></i> Split</button>\n <button class=\"at-tax-action-btn at-tax-action-danger\" (click)=\"DeleteTag(TaxSelectedNode)\"><i class=\"fa-solid fa-trash\"></i> Delete</button>\n </div>\n }\n\n <!-- Child tags -->\n @if (TaxSelectedNode.Children.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Child Tags</div>\n <div class=\"at-tax-child-chips\">\n @for (child of TaxSelectedNode.Children; track child.ID) {\n <span class=\"at-tax-child-chip\" (click)=\"SelectTaxNode(child)\">\n {{ child.Name }}\n <span class=\"at-tax-chip-count\">{{ child.ItemCount }}</span>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Recently tagged items -->\n @if (TaxRecentItems.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Recently Tagged Items</div>\n <div class=\"at-tax-recent-list\">\n @for (item of TaxRecentItems; track $index) {\n <div class=\"at-tax-recent-item\">\n <div class=\"at-tax-recent-icon\"><i [class]=\"item.Icon\"></i></div>\n <div class=\"at-tax-recent-name\">{{ item.Name }}</div>\n <div class=\"at-tax-recent-weight\">{{ item.Weight.toFixed(2) }}</div>\n <div class=\"at-tax-recent-date\">{{ item.Date }}</div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500\u2500 Governance \u2014 per-node controls for the autotagger \u2500\u2500\u2500 -->\n @if (SelectedTagFull) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Governance \u2014 how the autotagger may grow this subtree</div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Allow auto-grow under this tag</span>\n <span class=\"at-tg-toggle-d\">Lets the classifier create child tags below this one. Off = constrained subtree.</span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.AllowAutoGrow\"\n [class.disabled]=\"SelectedTagSavingField['AllowAutoGrow']\"\n (click)=\"ToggleGovernanceFlag('AllowAutoGrow')\"></div>\n </div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Freeze this subtree</span>\n <span class=\"at-tg-toggle-d\">Locks this entire subtree against auto-creation, regardless of mode.</span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.IsFrozen\"\n [class.disabled]=\"SelectedTagSavingField['IsFrozen']\"\n (click)=\"ToggleGovernanceFlag('IsFrozen')\"></div>\n </div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Requires review for matches</span>\n <span class=\"at-tg-toggle-d\">High-confidence matches against this tag are routed to the suggestion queue first.</span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.RequiresReview\"\n [class.disabled]=\"SelectedTagSavingField['RequiresReview']\"\n (click)=\"ToggleGovernanceFlag('RequiresReview')\"></div>\n </div>\n\n <div class=\"at-tg-grid-3\">\n <div class=\"at-tg-field\">\n <label>Max children</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\"\n [value]=\"SelectedTagFull.MaxChildren ?? ''\"\n (change)=\"SaveSelectedTagNumber('MaxChildren', $any($event.target).value)\" />\n <span class=\"at-tg-hint\">Hard cap on direct children. Blank = unlimited.</span>\n </div>\n <div class=\"at-tg-field\">\n <label>Max descendant depth</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\"\n [value]=\"SelectedTagFull.MaxDescendantDepth ?? ''\"\n (change)=\"SaveSelectedTagNumber('MaxDescendantDepth', $any($event.target).value)\" />\n <span class=\"at-tg-hint\">From this node down. 0 = leaf-only.</span>\n </div>\n <div class=\"at-tg-field\">\n <label>Min confidence</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" max=\"1\" step=\"0.01\"\n [value]=\"SelectedTagFull.MinWeight ?? ''\"\n (change)=\"SaveSelectedTagNumber('MinWeight', $any($event.target).value)\" />\n <span class=\"at-tg-hint\">Floor for matches against this tag.</span>\n </div>\n </div>\n </div>\n\n <!-- \u2500\u2500\u2500 Scope \u2014 who can see this tag \u2500\u2500\u2500 -->\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Scope \u2014 who can see and tag with this</div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Global tag (visible to all tenants)</span>\n <span class=\"at-tg-toggle-d\">\n Off = restricted to the scope rows below.\n @if (IsGlobalLocked()) { <strong>Locked while scope rows exist.</strong> }\n </span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.IsGlobal\"\n [class.disabled]=\"IsGlobalLocked() || SelectedTagSavingField['IsGlobal']\"\n (click)=\"ToggleGovernanceFlag('IsGlobal')\"></div>\n </div>\n\n <div class=\"at-tg-chip-list\">\n @for (s of SelectedTagScopes; track s.ID) {\n <span class=\"at-tg-chip scoped\">{{ s.EntityName }} \u00B7 {{ s.DisplayName }}</span>\n }\n @if (SelectedTagScopes.length === 0) {\n <span class=\"at-tg-hint\" style=\"font-style: italic;\">\n No scope rows. {{ SelectedTagFull.IsGlobal ? 'Tag is global.' : 'Tag is non-global with no scope \u2014 currently unreachable.' }}\n </span>\n }\n <button class=\"at-action-btn at-btn-sm\" (click)=\"OpenScopeDialog()\">\n <i class=\"fa-solid fa-pencil\"></i> Edit scope\u2026\n </button>\n </div>\n <div class=\"at-tg-hint\" style=\"margin-top: 8px;\">\n <i class=\"fa-solid fa-info-circle\"></i> Children inherit this scope automatically. Promotion to global requires admin approval.\n </div>\n </div>\n\n <!-- \u2500\u2500\u2500 Synonyms \u2014 alternate names that resolve to this tag \u2500\u2500\u2500 -->\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Synonyms \u2014 alternate names that resolve to this tag</div>\n\n <div class=\"at-tg-syn-add\">\n <input class=\"at-search-input\" placeholder='e.g. \"GenAI\"'\n [(ngModel)]=\"NewSynonymName\"\n (keyup.enter)=\"AddSynonym()\" />\n <select class=\"at-search-input\" style=\"width: 130px;\"\n [(ngModel)]=\"NewSynonymSource\">\n <option value=\"Manual\">Manual</option>\n <option value=\"Imported\">Imported</option>\n <option value=\"Merged\">Merged</option>\n <option value=\"LLM\">LLM</option>\n </select>\n <button class=\"at-action-btn at-primary-btn\" (click)=\"AddSynonym()\" [disabled]=\"!NewSynonymName.trim()\">+ Add</button>\n </div>\n\n @if (SelectedTagSynonyms.length === 0) {\n <div class=\"at-tg-hint\" style=\"font-style: italic;\">No synonyms yet.</div>\n } @else {\n @for (s of SelectedTagSynonyms; track s.ID) {\n <div class=\"at-tg-syn-row\" [class.pending]=\"s.Source === 'LLM'\">\n <div class=\"at-tg-syn-name\">{{ s.Synonym }}</div>\n <span class=\"at-tg-syn-src {{ s.Source.toLowerCase() }}\">{{ s.Source }}</span>\n <span class=\"at-tg-syn-x\" title=\"Remove\" (click)=\"RemoveSynonym(s)\"><i class=\"fa-solid fa-xmark\"></i></span>\n </div>\n }\n }\n </div>\n }\n } @else {\n <div class=\"at-empty-state\" style=\"height: 100%;\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n <p>Select a tag from the tree to view details</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Health bar -->\n <div class=\"at-tax-health-bar\">\n <span class=\"at-tax-health-label\">Taxonomy Health</span>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-total\"></span>\n <span class=\"at-tax-health-value\">{{ TaxHealth.Total }}</span>\n <span class=\"at-tax-health-text\">Total</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-healthy\"></span>\n <span class=\"at-tax-health-value at-tax-val-success\">{{ TaxHealth.Healthy }}</span>\n <span class=\"at-tax-health-text\">Healthy</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-attention\"></span>\n <span class=\"at-tax-health-value at-tax-val-warning\">{{ TaxHealth.NeedAttention }}</span>\n <span class=\"at-tax-health-text\">Need Attention</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-orphaned\"></span>\n <span class=\"at-tax-health-value at-tax-val-error\">{{ TaxHealth.Orphaned }}</span>\n <span class=\"at-tax-health-text\">Orphaned</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-duplicates\"></span>\n <span class=\"at-tax-health-value at-tax-val-info\">{{ TaxHealth.Duplicates }}</span>\n <span class=\"at-tax-health-text\">Duplicate Candidates</span>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550 SUB-TAB 2: DUPLICATES \u2550\u2550 -->\n @if (TaxSubTab === 'duplicates') {\n <div class=\"at-tax-dup-stats-bar\">\n <div class=\"at-tax-dup-stat\"><strong>{{ TaxDuplicates.length }}</strong> candidates found</div>\n <div class=\"at-tax-dup-stat at-tax-dup-high\"><strong>{{ TaxHighConfidenceDupeCount }}</strong> high confidence (&gt;85%)</div>\n <div class=\"at-tax-dup-stat at-tax-dup-moderate\"><strong>{{ TaxModerateDupeCount }}</strong> moderate (70-85%)</div>\n </div>\n\n @if (TaxDuplicates.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>No duplicate tags detected</p>\n </div>\n }\n\n <div class=\"at-tax-dup-list\">\n @for (pair of TaxDuplicates; track $index) {\n <div class=\"at-tax-dup-card\" [class.at-tax-dup-high]=\"pair.SeverityClass === 'high'\" [class.at-tax-dup-moderate]=\"pair.SeverityClass === 'moderate'\">\n @if (pair.IsExactDuplicate) {\n <!-- Exact-name duplicates: show single tag name with count -->\n <div class=\"at-tax-dup-tag\">{{ pair.TagA }}</div>\n <div class=\"at-tax-dup-similarity\">\n <span class=\"at-tax-sim-percent high\">\n <i class=\"fa-solid fa-clone\"></i>&nbsp;{{ pair.ExactDuplicateCount }} identical records\n </span>\n </div>\n <div class=\"at-tax-dup-actions\">\n <button class=\"at-tax-dup-btn at-tax-dup-btn-primary\" (click)=\"MergeTags(pair.TagAID, pair.TagBID, pair.TagA, pair.TagB)\" [disabled]=\"IsMerging\">@if (IsMerging) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Merging... } @else { Merge }</button>\n <button class=\"at-tax-dup-btn\" (click)=\"DismissDuplicate(pair)\">Dismiss</button>\n </div>\n } @else {\n <!-- Similar (non-exact) pairs: show both tags with similarity -->\n <div class=\"at-tax-dup-tag\">{{ pair.TagA }}</div>\n <div class=\"at-tax-dup-arrow\"><i class=\"fa-solid fa-arrows-left-right\"></i></div>\n <div class=\"at-tax-dup-similarity\">\n <div class=\"at-tax-sim-bar-bg\">\n <div class=\"at-tax-sim-bar-fill\" [class]=\"pair.SeverityClass\" [style.width.%]=\"pair.Similarity\"></div>\n </div>\n <span class=\"at-tax-sim-percent\" [class]=\"pair.SeverityClass\">{{ pair.Similarity }}%</span>\n </div>\n <div class=\"at-tax-dup-arrow\"><i class=\"fa-solid fa-arrows-left-right\"></i></div>\n <div class=\"at-tax-dup-tag\">{{ pair.TagB }}</div>\n <div class=\"at-tax-dup-actions\">\n <button class=\"at-tax-dup-btn at-tax-dup-btn-primary\" (click)=\"MergeTags(pair.TagAID, pair.TagBID, pair.TagA, pair.TagB)\" [disabled]=\"IsMerging\">@if (IsMerging) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Merging... } @else { Merge }</button>\n <button class=\"at-tax-dup-btn\" (click)=\"MakeChildTag(pair.TagAID, pair.TagBID)\">Make Child</button>\n <button class=\"at-tax-dup-btn\" (click)=\"DismissDuplicate(pair)\">Dismiss</button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- \u2550\u2550 SUB-TAB 3: ORPHANS \u2550\u2550 -->\n @if (TaxSubTab === 'orphans') {\n <div class=\"at-tax-orphan-toolbar\">\n <span class=\"at-tax-orphan-count\">{{ TaxOrphans.length }} orphaned tags</span>\n <span class=\"at-tax-orphan-desc\">&mdash; no parent, no children, low usage</span>\n <div class=\"at-tax-orphan-bulk\">\n <button class=\"at-tax-bulk-btn\" (click)=\"ToggleAllOrphans()\">\n @if (TaxAllOrphansSelected) { <i class=\"fa-solid fa-square-check\"></i> } @else { <i class=\"fa-regular fa-square\"></i> }\n Select All\n </button>\n <button class=\"at-tax-bulk-btn at-tax-bulk-danger\" (click)=\"BulkDeleteOrphans()\">\n <i class=\"fa-solid fa-trash\"></i> Bulk Delete\n </button>\n <button class=\"at-tax-bulk-btn at-tax-bulk-danger\" (click)=\"DeleteAllOrphans()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete All ({{ TaxOrphans.length }})\n </button>\n </div>\n </div>\n\n @if (TaxOrphans.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>No orphaned tags</p>\n </div>\n }\n\n <div class=\"at-tax-orphan-grid\">\n @for (orphan of TaxOrphans; track orphan.ID) {\n <div class=\"at-tax-orphan-card\">\n <div class=\"at-tax-orphan-header\">\n <span class=\"at-tax-orphan-name\">{{ orphan.Name }}</span>\n <input type=\"checkbox\" class=\"at-tax-orphan-checkbox\" [checked]=\"orphan.IsSelected\"\n (change)=\"ToggleOrphanSelection(orphan)\" (click)=\"$event.stopPropagation()\">\n </div>\n <div class=\"at-tax-orphan-stats\">\n <span>Usage: <strong>{{ orphan.UsageCount }}</strong></span>\n <span>Avg Weight: <strong>{{ orphan.AvgWeight.toFixed(2) }}</strong></span>\n </div>\n <div class=\"at-tax-orphan-dates\">\n <span>First: {{ orphan.FirstSeen }}</span>\n <span>Last: {{ orphan.LastSeen }}</span>\n </div>\n <div class=\"at-tax-orphan-actions\">\n <button class=\"at-tax-orphan-btn at-tax-orphan-delete\" (click)=\"DeleteOrphan(orphan)\">Delete</button>\n <button class=\"at-tax-orphan-btn\">Ignore</button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- \u2550\u2550 SUB-TAB 4: TREEMAP \u2550\u2550 -->\n @if (TaxSubTab === 'treemap') {\n <div class=\"at-tax-treemap-kpi-strip\">\n @for (kpi of TaxTreemapKPIs; track kpi.Label) {\n <div class=\"at-tax-treemap-kpi\">\n <div class=\"at-tax-treemap-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"at-tax-treemap-kpi-label\">{{ kpi.Label }}</div>\n </div>\n }\n </div>\n\n @if (TaxTreemapCells.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-chart-tree-map\"></i>\n <p>No taxonomy data to visualize</p>\n </div>\n } @else {\n <div class=\"at-tax-treemap-container\">\n @for (cell of TaxTreemapCells; track $index) {\n <div class=\"at-tax-treemap-cell at-tax-treemap-cell-clickable\" [class]=\"cell.ColorClass\"\n [style.grid-row]=\"cell.RowSpan > 1 ? 'span ' + cell.RowSpan : ''\"\n (click)=\"OpenTreemapDrillIn(cell)\">\n <span class=\"at-tax-cell-name\">{{ cell.Name }}</span>\n <span class=\"at-tax-cell-count\">{{ cell.ItemCount }} items</span>\n </div>\n }\n </div>\n }\n\n <!-- Treemap Drill-In Panel -->\n @if (ShowTreemapDrillIn && TreemapDrillInNode) {\n <div class=\"at-tax-drillin-overlay\" (click)=\"CloseTreemapDrillIn()\">\n <div class=\"at-tax-drillin-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-tax-drillin-header\">\n <h3><i class=\"fa-solid fa-tag\"></i> {{ TreemapDrillInNode.Name }}</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseTreemapDrillIn()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-tax-drillin-body\">\n <div class=\"at-tax-stats-row\">\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TreemapDrillInNode.ItemCount }}</div>\n <div class=\"at-tax-stat-label\">Items Tagged</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TreemapDrillInNode.AvgWeight.toFixed(2) }}</div>\n <div class=\"at-tax-stat-label\">Avg Weight</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TreemapDrillInNode.Children.length }}</div>\n <div class=\"at-tax-stat-label\">Children</div>\n </div>\n </div>\n\n @if (TreemapDrillInNode.Children.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Child Tags</div>\n <div class=\"at-tax-child-chips\">\n @for (child of TreemapDrillInNode.Children; track child.ID) {\n <span class=\"at-tax-child-chip\">{{ child.Name }} <span class=\"at-tax-chip-count\">{{ child.ItemCount }}</span></span>\n }\n </div>\n </div>\n }\n\n @if (TaxRecentItems.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Recently Tagged Items</div>\n <div class=\"at-tax-recent-list\">\n @for (item of TaxRecentItems; track $index) {\n <div class=\"at-tax-recent-item\">\n <div class=\"at-tax-recent-icon\"><i [class]=\"item.Icon\"></i></div>\n <div class=\"at-tax-recent-name\">{{ item.Name }}</div>\n <div class=\"at-tax-recent-weight\">{{ item.Weight.toFixed(2) }}</div>\n <div class=\"at-tax-recent-date\">{{ item.Date }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"at-tax-drillin-footer\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"DrillInToTreeView(TreemapDrillInNode)\">\n <i class=\"fa-solid fa-sitemap\"></i> View in Tree\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- \u2550\u2550 SUB-TAB 5: AUDIT LOG \u2550\u2550 -->\n @if (TaxSubTab === 'audit') {\n <div class=\"at-tax-audit-filters\">\n <span class=\"at-tax-audit-filter-label\">Filter</span>\n <div class=\"at-tax-audit-checkbox-group\">\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('created')\" (change)=\"ToggleTaxAuditFilter('created')\"> Created\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('merged')\" (change)=\"ToggleTaxAuditFilter('merged')\"> Merged\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('moved')\" (change)=\"ToggleTaxAuditFilter('moved')\"> Moved\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('deleted')\" (change)=\"ToggleTaxAuditFilter('deleted')\"> Deleted\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('renamed')\" (change)=\"ToggleTaxAuditFilter('renamed')\"> Renamed\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('deprecated')\" (change)=\"ToggleTaxAuditFilter('deprecated')\"> Deprecated\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('split')\" (change)=\"ToggleTaxAuditFilter('split')\"> Split\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('reactivated')\" (change)=\"ToggleTaxAuditFilter('reactivated')\"> Reactivated\n </label>\n </div>\n </div>\n\n @if (GetFilteredAuditEvents().length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-scroll\"></i>\n <p>No audit events match the current filters</p>\n </div>\n }\n\n <div class=\"at-tax-audit-timeline\">\n @for (event of GetFilteredAuditEvents(); track $index) {\n <div class=\"at-tax-audit-event\">\n <div class=\"at-tax-audit-event-icon\" [class]=\"event.Type\">\n <i [class]=\"GetTaxAuditIcon(event.Type)\"></i>\n </div>\n <div class=\"at-tax-audit-event-body\">\n <div class=\"at-tax-audit-event-desc\">\n {{ event.Description }} <span class=\"at-tax-tag-ref\">{{ event.TagRef }}</span>\n </div>\n <div class=\"at-tax-audit-event-meta\">\n <span>{{ event.User }}</span>\n <span>{{ event.Timestamp }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- TAB: SUGGESTIONS \u2014 server-driven inbox -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'suggestions') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Suggestions Inbox</div>\n <div class=\"at-page-subtitle\">{{ SuggestionRows.length }} pending \u00B7 select rows for bulk approve / reject</div>\n </div>\n <div class=\"at-page-actions\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"loadSuggestions()\"><i class=\"fa-solid fa-arrows-rotate\"></i> Refresh</button>\n <button class=\"at-action-btn at-primary-btn\" (click)=\"RunHealthNow()\" [disabled]=\"HealthRunning\">\n @if (HealthRunning) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Running\u2026 }\n @else { <i class=\"fa-solid fa-heart-pulse\"></i> Run Tag Health }\n </button>\n </div>\n </div>\n\n <div class=\"at-page-body\">\n <div class=\"sg-shell\">\n <div class=\"sg-main\">\n <div class=\"sg-toolbar\">\n <input class=\"at-search-input\" style=\"width: 280px;\" placeholder=\"Search proposed name, source text\u2026\"\n [(ngModel)]=\"SuggestionSearch\" (input)=\"applySuggestionFilters()\" />\n <select class=\"at-search-input\" style=\"width: 200px;\"\n [(ngModel)]=\"SuggestionFilterReason\" (change)=\"applySuggestionFilters()\">\n <option value=\"\">All reasons</option>\n @for (r of ReasonOptions; track r) { <option [value]=\"r\">{{ r }}</option> }\n </select>\n <input class=\"at-search-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\"\n style=\"width: 100px;\" placeholder=\"Min score\"\n [ngModel]=\"SuggestionFilterMinScore\"\n (ngModelChange)=\"OnMinScoreChange($event)\" />\n <span style=\"flex: 1;\"></span>\n <span class=\"at-muted\" style=\"font-size: 12px;\">\n Showing <strong>{{ SuggestionRowsFiltered.length }} of {{ SuggestionRows.length }}</strong>\n </span>\n </div>\n\n @if (SelectedSuggestionCount() > 0) {\n <div class=\"sg-bulk-bar\">\n <strong>{{ SelectedSuggestionCount() }} selected</strong>\n <span style=\"flex: 1;\"></span>\n <button class=\"at-action-btn at-success-btn at-btn-sm\" (click)=\"BulkApprove()\" [disabled]=\"SuggestionBulkInProgress\">\n <i class=\"fa-solid fa-check\"></i> Approve all (auto-pick best)\n </button>\n <button class=\"at-action-btn at-danger-btn at-btn-sm\" (click)=\"BulkReject()\" [disabled]=\"SuggestionBulkInProgress\">\n <i class=\"fa-solid fa-xmark\"></i> Reject\n </button>\n </div>\n }\n\n <div class=\"sg-table-body\">\n @if (SuggestionRowsFiltered.length === 0) {\n <div class=\"at-empty-state\"><i class=\"fa-solid fa-inbox\"></i><p>No pending suggestions.</p></div>\n } @else {\n <table class=\"sg-table\">\n <thead>\n <tr>\n <th style=\"width: 30px;\">\n <input type=\"checkbox\"\n [checked]=\"SelectedSuggestionCount() === SuggestionRowsFiltered.length && SuggestionRowsFiltered.length > 0\"\n (change)=\"ToggleAllSuggestions($any($event.target).checked)\" />\n </th>\n <th>Proposed name</th>\n <th>Reason</th>\n <th>Best match</th>\n <th>Score</th>\n <th>Created</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (row of SuggestionRowsFiltered; track row.ID) {\n <tr [class.sg-row-checked]=\"row.selected\"\n [class.sg-row-selected]=\"SuggestionSelected && SuggestionSelected.ID === row.ID\"\n (click)=\"SelectSuggestion(row)\">\n <td><input type=\"checkbox\" [checked]=\"row.selected\" (click)=\"ToggleSuggestionSelected(row, $event)\" /></td>\n <td><strong>{{ row.ProposedName }}</strong></td>\n <td><span class=\"sg-reason {{ ReasonClass(row.Reason) }}\">{{ row.Reason }}</span></td>\n <td>\n @if (row.BestMatchName) {\n {{ row.BestMatchName }}\n <span class=\"at-muted\" style=\"font-size: 11px;\">{{ row.BestMatchPath }}</span>\n } @else {\n <span class=\"at-muted\">\u2014 no match \u2014</span>\n }\n </td>\n <td class=\"sg-score\">\n @if (row.BestMatchScore != null) {\n <span class=\"sg-score-bar\"><span [style.width.%]=\"row.BestMatchScore * 100\"></span></span>\n {{ row.BestMatchScore | number: '1.3-3' }}\n } @else {\n <span class=\"at-muted\">\u2014</span>\n }\n </td>\n <td class=\"at-muted\">{{ row.CreatedAt | date: 'short' }}</td>\n <td>\n @if (row.dispositionInProgress) {\n <span class=\"at-muted\" style=\"font-size: 11px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> {{ row.dispositionInProgress }}\u2026\n </span>\n } @else {\n <div class=\"sg-row-actions\">\n <button class=\"at-action-btn at-btn-xs\" title=\"Create as new tag\"\n (click)=\"DispositionSuggestion(row, 'create-new'); $event.stopPropagation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (row.BestMatchTagID) {\n <button class=\"at-action-btn at-primary-btn at-btn-xs\" title=\"Merge into best match\"\n (click)=\"DispositionSuggestion(row, 'merge'); $event.stopPropagation()\">\n <i class=\"fa-solid fa-code-merge\"></i>\n </button>\n }\n <button class=\"at-action-btn at-danger-btn at-btn-xs\" title=\"Reject\"\n (click)=\"DispositionSuggestion(row, 'reject'); $event.stopPropagation()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n\n @if (SuggestionSelected) {\n <aside class=\"sg-drawer\">\n <div class=\"sg-drawer-hd\">\n <div>\n <div style=\"font-weight: 600;\">\"{{ SuggestionSelected.ProposedName }}\"</div>\n <div class=\"at-muted\" style=\"font-size: 11px;\">{{ SuggestionSelected.CreatedAt | date: 'short' }}</div>\n </div>\n <button class=\"at-action-btn at-btn-xs\" (click)=\"CloseDrawer()\" title=\"Close\"><i class=\"fa-solid fa-xmark\"></i></button>\n </div>\n <div class=\"sg-drawer-bd\">\n <span class=\"sg-reason {{ ReasonClass(SuggestionSelected.Reason) }}\">\n {{ SuggestionSelected.Reason }}\n @if (SuggestionSelected.BestMatchScore != null) { \u00B7 {{ SuggestionSelected.BestMatchScore | number: '1.3-3' }} }\n </span>\n\n @if (SuggestionSelected.BestMatchTagID) {\n <h4>Proposes merge into</h4>\n <div class=\"sg-candidate\">\n <div style=\"flex: 1;\">\n <div style=\"font-weight: 600;\">{{ SuggestionSelected.BestMatchName }}</div>\n <div class=\"at-muted\" style=\"font-size: 11px;\">{{ SuggestionSelected.BestMatchPath }}</div>\n </div>\n </div>\n }\n\n @if (SuggestionSelected.SourceText) {\n <h4>Source text</h4>\n <p class=\"sg-preview\">\"{{ SuggestionSelected.SourceText }}\"</p>\n }\n\n <h4>If approved</h4>\n <p class=\"sg-preview\">\n @if (SuggestionSelected.BestMatchTagID) {\n Re-point any free-text ContentItemTag rows whose Tag matches \"<strong>{{ SuggestionSelected.ProposedName }}</strong>\" to <strong>{{ SuggestionSelected.BestMatchName }}</strong>, add it as a synonym (Source: Merged), and mark the suggestion as Merged.\n } @else {\n Create a new tag named \"<strong>{{ SuggestionSelected.ProposedName }}</strong>\" (subject to ValidateAutoGrow), inherit parent scope when applicable, and re-point any matching free-text ContentItemTag rows.\n }\n </p>\n </div>\n <div class=\"sg-drawer-ft\">\n @if (SuggestionSelected.BestMatchTagID) {\n <button class=\"at-action-btn at-primary-btn\" (click)=\"DispositionSuggestion(SuggestionSelected!, 'merge')\"\n [disabled]=\"!!SuggestionSelected.dispositionInProgress\">\n <i class=\"fa-solid fa-code-merge\"></i> Merge\n </button>\n }\n <button class=\"at-action-btn\" (click)=\"DispositionSuggestion(SuggestionSelected!, 'create-new')\"\n [disabled]=\"!!SuggestionSelected.dispositionInProgress\">\n <i class=\"fa-solid fa-plus\"></i> Create as new\n </button>\n <button class=\"at-action-btn at-danger-btn\" (click)=\"DispositionSuggestion(SuggestionSelected!, 'reject')\"\n [disabled]=\"!!SuggestionSelected.dispositionInProgress\">\n <i class=\"fa-solid fa-xmark\"></i> Reject\n </button>\n </div>\n </aside>\n }\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- TAB: HEALTH \u2014 Tag Health 3-card summary -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'health') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Tag Health</div>\n <div class=\"at-page-subtitle\">Automated signals about taxonomy quality</div>\n </div>\n <div class=\"at-page-actions\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"RebuildEmbeddings()\" [disabled]=\"RebuildEmbeddingsRunning\">\n @if (RebuildEmbeddingsRunning) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Rebuilding\u2026 }\n @else { <i class=\"fa-solid fa-rotate\"></i> Rebuild stale embeddings }\n </button>\n <button class=\"at-action-btn at-primary-btn\" (click)=\"RunHealthNow()\" [disabled]=\"HealthRunning\">\n @if (HealthRunning) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Running\u2026 }\n @else { <i class=\"fa-solid fa-play\"></i> Run now }\n </button>\n </div>\n </div>\n\n <div class=\"health-shell\">\n <div class=\"runbar\">\n <div class=\"stat\">\n <div class=\"l\">Last run</div>\n <div class=\"v\">{{ LastHealthSummary.runAt ? (LastHealthSummary.runAt | date: 'short') : '\u2014' }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"l\">Tags scanned</div>\n <div class=\"v\">{{ tagsRaw.length }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"l\">Issues enqueued (last run)</div>\n <div class=\"v\">{{ LastHealthSummary.mergeCount + LastHealthSummary.lowUsageCount + LastHealthSummary.wideNodeCount }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"l\">Pending suggestions</div>\n <div class=\"v\">{{ PendingSuggestionCount }}</div>\n </div>\n <span class=\"grow\"></span>\n <div class=\"stat\">\n <div class=\"l\">Last duration</div>\n <div class=\"v\">{{ LastHealthSummary.durationMs ? (LastHealthSummary.durationMs + 'ms') : '\u2014' }}</div>\n </div>\n </div>\n\n <div class=\"health-cards\">\n <div class=\"h-card merge\">\n <div class=\"top\">\n <div class=\"ic\"><i class=\"fa-solid fa-code-merge\"></i></div>\n <div>\n <div class=\"name\">Merge candidates</div>\n <h3>Likely duplicate tags</h3>\n </div>\n </div>\n <div class=\"big\">{{ LastHealthSummary.mergeCount }}</div>\n <p class=\"sub\">Pairs with high embedding cosine + name similarity. Approving merges the source into the target and re-points existing ContentItemTag rows.</p>\n <div class=\"ft\">\n <button class=\"at-action-btn at-primary-btn at-btn-sm\" (click)=\"SwitchTab('suggestions'); SuggestionFilterReason = 'MergeCandidate'; applySuggestionFilters()\">\n Open in Suggestions\n </button>\n </div>\n </div>\n\n <div class=\"h-card lowusage\">\n <div class=\"top\">\n <div class=\"ic\"><i class=\"fa-solid fa-leaf\"></i></div>\n <div>\n <div class=\"name\">Low usage</div>\n <h3>Deprecation candidates</h3>\n </div>\n </div>\n <div class=\"big\">{{ LastHealthSummary.lowUsageCount }}</div>\n <p class=\"sub\">Active tags used fewer than the threshold over the lookback window. Often abandoned imports or finished-project tags.</p>\n <div class=\"ft\">\n <button class=\"at-action-btn at-primary-btn at-btn-sm\" (click)=\"SwitchTab('suggestions'); SuggestionFilterReason = 'LowUsage'; applySuggestionFilters()\">\n Review\n </button>\n </div>\n </div>\n\n <div class=\"h-card widenode\">\n <div class=\"top\">\n <div class=\"ic\"><i class=\"fa-solid fa-tree\"></i></div>\n <div>\n <div class=\"name\">Wide nodes</div>\n <h3>Parents with too many children</h3>\n </div>\n </div>\n <div class=\"big\">{{ LastHealthSummary.wideNodeCount }}</div>\n <p class=\"sub\">Parents whose direct-child count exceeds <strong>MaxChildren</strong> (or the implicit threshold {{ HealthThresholds.maxImplicitChildren }} when no cap is set).</p>\n <div class=\"ft\">\n <button class=\"at-action-btn at-primary-btn at-btn-sm\" (click)=\"SwitchTab('suggestions'); SuggestionFilterReason = 'WideNode'; applySuggestionFilters()\">\n Review\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"threshold-form\">\n <h3>Health-job thresholds</h3>\n <div class=\"grid\">\n <div class=\"field\"><label>Merge: min co-occurrence</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" [(ngModel)]=\"HealthThresholds.minCoOccurrence\" />\n <span class=\"at-hint\">Pairs must appear together in \u2265 this many items.</span>\n </div>\n <div class=\"field\"><label>Merge: min embedding cosine</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" max=\"1\" step=\"0.01\" [(ngModel)]=\"HealthThresholds.minEmbeddingSimilarity\" />\n </div>\n <div class=\"field\"><label>Merge: min name similarity</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" max=\"1\" step=\"0.05\" [(ngModel)]=\"HealthThresholds.minNameSimilarity\" />\n <span class=\"at-hint\">Dice's-coefficient bigram similarity.</span>\n </div>\n <div class=\"field\"><label>Low usage: max usage</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" [(ngModel)]=\"HealthThresholds.maxUsage\" />\n </div>\n <div class=\"field\"><label>Wide node: max implicit children</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" [(ngModel)]=\"HealthThresholds.maxImplicitChildren\" />\n <span class=\"at-hint\">Used when a tag has no explicit MaxChildren cap.</span>\n </div>\n </div>\n </div>\n\n <div class=\"run-history\">\n <div class=\"run-history-hd\">\n <h3>Run history</h3>\n <span class=\"at-muted\" style=\"font-size: 11px;\">last {{ HealthRunHistory.length }} runs</span>\n </div>\n @if (HealthRunHistory.length === 0) {\n <div class=\"at-empty-state\" style=\"padding: 32px;\"><i class=\"fa-solid fa-clock-rotate-left\"></i><p>No runs yet.</p></div>\n } @else {\n <table>\n <thead>\n <tr>\n <th>When</th><th>Trigger</th><th>Tags scanned</th><th>Merge</th><th>Low usage</th><th>Wide node</th><th>Total</th><th>Duration</th>\n </tr>\n </thead>\n <tbody>\n @for (run of HealthRunHistory; track run.When) {\n <tr>\n <td class=\"at-muted\">{{ run.When | date: 'short' }}</td>\n <td>{{ run.Trigger }}</td>\n <td>{{ run.TagsScanned }}</td>\n <td>{{ run.Merge }}</td>\n <td>{{ run.LowUsage }}</td>\n <td>{{ run.WideNode }}</td>\n <td><strong>{{ run.Merge + run.LowUsage + run.WideNode }}</strong></td>\n <td>{{ run.DurationMs }}ms</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n\n <!-- end @if (!IsLoading) -->\n }\n\n </div>\n <!-- end at-main-area -->\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 ITEM DETAIL SLIDE-IN \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowItemDetail && SelectedFeedItem) {\n <div class=\"at-slide-overlay\" (click)=\"CloseItemDetail()\"></div>\n <div class=\"at-slide-panel at-detail-panel\">\n <div class=\"at-slide-header\">\n <h3><i class=\"fa-solid fa-file-lines\"></i> Content Item</h3>\n <button class=\"at-slide-close\" aria-label=\"Close item detail\" (click)=\"CloseItemDetail()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n <div class=\"at-slide-body\">\n <!-- Header -->\n <div class=\"at-detail-item-header\">\n <h4 class=\"at-detail-item-name\">{{ SelectedFeedItem.Name }}</h4>\n <div class=\"at-detail-badges\">\n <span class=\"at-detail-badge at-detail-badge-source\">{{ SelectedFeedItem.SourceName }}</span>\n @if (SelectedFeedItem.RequiresContentType) {\n <span class=\"at-detail-badge at-detail-badge-type\">{{ SelectedFeedItem.ContentTypeName }}</span>\n @if (SelectedFeedItem.FileTypeName) {\n <span class=\"at-detail-badge at-detail-badge-file\"><i class=\"fa-solid fa-file\"></i> {{ SelectedFeedItem.FileTypeName }}</span>\n }\n }\n </div>\n </div>\n\n <!-- URL -->\n @if (SelectedFeedItem.URL) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">URL</div>\n <a [href]=\"SelectedFeedItem.URL\" target=\"_blank\" class=\"at-detail-link\">\n {{ SelectedFeedItem.URL }}\n <i class=\"fa-solid fa-external-link-alt\" style=\"font-size: 0.65rem; margin-left: 4px;\"></i>\n </a>\n </div>\n }\n\n <!-- Text Preview -->\n @if (SelectedFeedItem.TextContent) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Content Preview</div>\n <div class=\"at-detail-text-preview\">{{ SelectedFeedItem.TextContent }}</div>\n </div>\n }\n\n <!-- Tags (weighted) -->\n @if (SelectedFeedItem.Tags.length > 0) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Tags ({{ SelectedFeedItem.Tags.length }})</div>\n <div class=\"at-detail-tags\">\n @for (wt of SelectedFeedItem.Tags; track wt.Tag) {\n <span class=\"at-tag-pill at-tag-weighted\" [style.font-size]=\"TagFontSize(wt.Weight)\">\n {{ wt.Tag }}\n <span class=\"at-tag-weight\">{{ FormatWeight(wt.Weight) }}</span>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Metadata -->\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Metadata</div>\n <div class=\"at-detail-meta-grid\">\n @if (SelectedFeedItem.Checksum) {\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Checksum</span>\n <span class=\"at-detail-meta-value at-detail-meta-mono\">{{ SelectedFeedItem.Checksum }}</span>\n </div>\n }\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Created</span>\n <span class=\"at-detail-meta-value\">{{ SelectedFeedItem.CreatedAt }}</span>\n </div>\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Updated</span>\n <span class=\"at-detail-meta-value\">{{ SelectedFeedItem.UpdatedAt }}</span>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"at-detail-actions\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"OpenRecordFromItem(SelectedFeedItem)\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open Record\n </button>\n <button class=\"at-action-btn at-secondary-btn\" disabled>\n <i class=\"fa-solid fa-magnifying-glass\"></i> See Similar Items\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 CONFIRMATION DIALOG \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowConfirmDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"ConfirmDialogCancel()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ConfirmDialogTitle }}</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"ConfirmDialogCancel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <p class=\"at-confirm-message\">{{ ConfirmDialogMessage }}</p>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-danger-btn\" (click)=\"ConfirmDialogAccept()\">\n <i class=\"fa-solid fa-check\"></i> Confirm\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"ConfirmDialogCancel()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 SPLIT DIALOG \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowSplitDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseSplitDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-code-branch\"></i> Split Tag</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseSplitDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <div class=\"at-schedule-field\">\n <label>New tag names (comma-separated)</label>\n <input type=\"text\" class=\"mj-input\" style=\"width: 100%;\"\n [(ngModel)]=\"SplitChildNames\"\n placeholder=\"Tag A, Tag B, Tag C\" />\n </div>\n <p class=\"at-confirm-message\">New tags will be created as siblings of the original tag under the same parent.</p>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"ExecuteSplit()\" [disabled]=\"!SplitChildNames.trim()\">\n <i class=\"fa-solid fa-code-branch\"></i> Create Tags\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseSplitDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 MOVE DIALOG \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowCreateTagDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseCreateTagDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-plus\"></i> Create Tag</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseCreateTagDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <div class=\"at-tax-create-context\">{{ CreateTagParentLabel }}</div>\n <div class=\"at-schedule-field\">\n <label>Name</label>\n <input type=\"text\" class=\"mj-input\" style=\"width: 100%;\" [(ngModel)]=\"CreateTagName\"\n placeholder=\"Tag name\" (keydown.enter)=\"SaveNewTag()\">\n </div>\n <div class=\"at-schedule-field\">\n <label>Description (optional)</label>\n <textarea class=\"mj-textarea\" rows=\"3\" style=\"width: 100%;\" [(ngModel)]=\"CreateTagDescription\"\n placeholder=\"Brief description of this tag\"></textarea>\n </div>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"SaveNewTag()\" [disabled]=\"!CreateTagName.trim()\">\n <i class=\"fa-solid fa-check\"></i> Create\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseCreateTagDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n @if (ShowMoveDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseMoveDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-arrows-up-down\"></i> Move Tag</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseMoveDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <div class=\"at-schedule-field\">\n <label>New parent tag</label>\n <select class=\"mj-input\" style=\"width: 100%;\" [(ngModel)]=\"MoveNewParentID\">\n <option [ngValue]=\"null\">(Root level &mdash; no parent)</option>\n @for (opt of GetMoveTargetOptions(); track opt.ID) {\n <option [ngValue]=\"opt.ID\">{{ '\\u00A0\\u00A0'.repeat(opt.Depth) }}{{ opt.Name }}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"ExecuteMove()\">\n <i class=\"fa-solid fa-check\"></i> Move\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseMoveDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n @if (ShowMergeIntoDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseMergeIntoDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-compress\"></i> Merge \"{{ MergeSourceTag?.Name }}\" Into...</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseMergeIntoDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <p style=\"font-size: 0.85rem; color: var(--mj-text-secondary); margin: 0 0 12px;\">\n All tagged items will be moved to the target tag, then \"{{ MergeSourceTag?.Name }}\" will be deleted.\n </p>\n <div class=\"at-schedule-field\">\n <label>Merge into</label>\n <mj-combobox\n [Data]=\"MergeTargetData\"\n TextField=\"Label\"\n ValueField=\"ID\"\n [Filterable]=\"true\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Search and select a tag...\"\n (ValueChange)=\"OnMergeTargetSelected($event)\">\n </mj-combobox>\n </div>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"ExecuteMergeInto()\" [disabled]=\"!MergeTargetID || IsMerging\">\n @if (IsMerging) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Merging... } @else { <i class=\"fa-solid fa-compress\"></i> Merge }\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseMergeIntoDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n</div>\n", styles: ["/* ============================================================\n Content Autotagging Dashboard\n All colors use MJ design tokens \u2014 no hardcoded hex values.\n All classes prefixed with at- to prevent leaking (ViewEncapsulation.None).\n ============================================================ */\n\n/* \u2500\u2500 Root layout \u2500\u2500 */\n\n.at-dashboard {\n display: flex;\n height: 100%;\n overflow: hidden;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 LEFT NAV \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-left-nav {\n width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n.at-left-nav-header {\n padding: 16px 16px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-left-nav-header h2 {\n font-size: 0.95rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n color: var(--mj-text-primary);\n}\n\n.at-left-nav-header h2 i {\n color: var(--mj-brand-primary);\n}\n\n.at-left-nav-items {\n flex: 1;\n padding: 8px;\n overflow-y: auto;\n}\n\n.at-nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 0.82rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.12s ease;\n margin-bottom: 2px;\n}\n\n.at-nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.at-nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-nav-item i {\n width: 18px;\n text-align: center;\n font-size: 0.8rem;\n}\n\n.at-nav-badge {\n margin-left: auto;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 7px;\n border-radius: 10px;\n font-size: 0.65rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.at-nav-item.active .at-nav-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-nav-badge-live {\n background: var(--mj-status-success-bg) !important;\n color: var(--mj-status-success-text) !important;\n}\n\n.at-nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 12px;\n}\n\n.at-left-nav-footer {\n padding: 12px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-run-pipeline-btn {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px;\n border: none;\n border-radius: 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.at-run-pipeline-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-run-pipeline-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 MAIN CONTENT AREA \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-main-area {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.at-loading-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n\n.at-page-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-page-title {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-page-subtitle {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-page-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.at-page-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 16px 20px;\n min-height: 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SHARED COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border: 1px solid;\n border-radius: 7px;\n cursor: pointer;\n font-size: 0.78rem;\n font-weight: 500;\n transition: all 0.15s ease;\n}\n\n.at-primary-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-primary-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-primary-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.at-secondary-btn {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.at-secondary-btn:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.at-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-card-title {\n font-size: 0.82rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-primary);\n}\n\n.at-card-title i {\n color: var(--mj-brand-primary);\n font-size: 0.75rem;\n}\n\n.at-card-body {\n padding: 0;\n}\n\n.at-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 32px 16px;\n color: var(--mj-text-disabled);\n}\n\n.at-empty-state i {\n font-size: 28px;\n}\n\n.at-empty-state p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 KPI STRIP \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-kpi-strip {\n display: flex;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.at-kpi-card {\n flex: 1;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.at-kpi-value {\n font-size: 1.4rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-kpi-error-value {\n color: var(--mj-status-error-text);\n}\n\n.at-kpi-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-kpi-trend {\n font-size: 0.68rem;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--mj-text-muted);\n}\n\n.at-kpi-trend.up {\n color: var(--mj-status-success-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 PIPELINE TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-layout {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.at-pipeline-center {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n min-height: 0;\n}\n\n.at-pipeline-right {\n width: 320px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Pipeline Stages */\n\n.at-pipeline-stages {\n display: flex;\n gap: 0;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 16px;\n}\n\n.at-pipeline-stage {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.at-pipeline-stage-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 0.85rem;\n}\n\n.stage-idle .at-pipeline-stage-icon {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.stage-active .at-pipeline-stage-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.stage-complete .at-pipeline-stage-icon {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n@keyframes at-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 30%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent); }\n}\n\n.at-pipeline-stage-name {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.at-pipeline-stage-count {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n}\n\n.at-pipeline-arrow {\n width: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 0.6rem;\n}\n\n.at-stage-connector {\n width: 32px;\n height: 2px;\n background: var(--mj-border-default);\n transition: background 0.4s ease;\n}\n\n.at-stage-connector.connector-complete {\n background: var(--mj-status-success);\n}\n\n/* Progress section */\n\n.at-progress-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 10px 16px;\n}\n\n.at-progress-header {\n display: flex;\n justify-content: space-between;\n font-size: 0.75rem;\n margin-bottom: 4px;\n}\n\n.at-progress-stage-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.at-progress-pct {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-progress-bar {\n height: 4px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.at-progress-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.at-progress-current {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n margin-top: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-progress-fill-paused {\n background: var(--mj-status-warning);\n animation: pulse-paused 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-paused {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.at-pipeline-controls {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n justify-content: flex-end;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\n}\n\n.at-danger-btn:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n border-color: var(--mj-status-error-text);\n}\n\n/* Feed items */\n\n.at-feed-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-feed-item:last-child {\n border-bottom: none;\n}\n\n.at-feed-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-feed-status-dot.complete {\n background: var(--mj-status-success);\n}\n\n.at-feed-status-dot.processing {\n background: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.at-feed-status-dot.error {\n background: var(--mj-status-error);\n}\n\n.at-feed-item-name {\n flex: 1;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-feed-item-source {\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n min-width: 100px;\n}\n\n.at-feed-item-tags {\n display: flex;\n gap: 4px;\n}\n\n.at-feed-tag {\n padding: 1px 6px;\n border-radius: 3px;\n font-size: 0.62rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-feed-item-time {\n color: var(--mj-text-muted);\n font-size: 0.68rem;\n white-space: nowrap;\n min-width: 60px;\n text-align: right;\n}\n\n/* Source mini cards (right panel) */\n\n.at-source-mini {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-source-mini:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-source-mini:last-child {\n border-bottom: none;\n}\n\n.at-source-mini-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-source-mini-info {\n flex: 1;\n min-width: 0;\n}\n\n.at-source-mini-name {\n font-size: 0.78rem;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-source-mini-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-mini-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-source-mini-status.active {\n background: var(--mj-status-success);\n}\n\n.at-source-mini-status.error {\n background: var(--mj-status-error);\n}\n\n.at-source-mini-status.inactive {\n background: var(--mj-text-disabled);\n}\n\n/* Tag cloud card */\n\n.at-tag-cloud-card {\n padding: 16px;\n}\n\n.at-tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n.at-tag-pill {\n padding: 4px 12px;\n border-radius: 14px;\n font-size: 0.72rem;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-tag-pill:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tag-weighted {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tag-weight {\n font-size: 0.6rem;\n opacity: 0.6;\n font-weight: 400;\n}\n\n.at-tag-row-clickable {\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-tag-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.at-tag-pill.large {\n font-size: 0.85rem;\n padding: 5px 14px;\n}\n\n.at-tag-pill.small {\n font-size: 0.65rem;\n padding: 3px 8px;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SOURCES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-sources-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 12px;\n}\n\n.at-source-card-full {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.at-source-card-full:hover {\n border-color: var(--mj-border-default);\n}\n\n.at-source-card-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 12px;\n}\n\n.at-source-card-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.at-source-card-title {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-card-type {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-status {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 500;\n}\n\n.at-source-card-status.active {\n color: var(--mj-status-success-text);\n}\n\n.at-source-card-status.error {\n color: var(--mj-status-error-text);\n}\n\n.at-source-card-status.inactive {\n color: var(--mj-text-disabled);\n}\n\n.at-source-card-url {\n font-size: 0.7rem;\n color: var(--mj-brand-primary);\n margin-bottom: 10px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-source-card-stats {\n display: flex;\n gap: 16px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-source-stat {\n display: flex;\n flex-direction: column;\n}\n\n.at-source-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-stat-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-actions {\n display: flex;\n gap: 6px;\n margin-top: 10px;\n}\n\n.at-source-action-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.7rem;\n cursor: pointer;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n transition: all 0.12s ease;\n}\n\n.at-source-action-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-source-delete-btn:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\n}\n\n.at-add-source-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-source-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-source-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CONTENT TYPES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-ct-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 12px;\n}\n\n.at-ct-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n}\n\n.at-ct-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.at-ct-card-name {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-ct-card-model {\n font-size: 0.68rem;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-ct-field {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-ct-field:last-child {\n border-bottom: none;\n}\n\n.at-ct-field-label {\n color: var(--mj-text-muted);\n}\n\n.at-ct-field-value {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range i {\n color: var(--mj-brand-primary);\n}\n\n.at-ct-tag-range-bar {\n flex: 1;\n height: 6px;\n background: var(--mj-bg-surface);\n border-radius: 3px;\n position: relative;\n}\n\n.at-ct-tag-range-fill {\n position: absolute;\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n.at-ct-range-suffix {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 TAG LIBRARY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tag-lib-layout {\n display: flex;\n gap: 16px;\n}\n\n.at-tag-lib-main {\n flex: 1;\n}\n\n.at-tag-lib-sidebar {\n width: 280px;\n flex-shrink: 0;\n}\n\n.at-tag-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-tag-table th {\n text-align: left;\n padding: 8px 12px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-tag-table td {\n padding: 10px 12px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-name-cell {\n font-weight: 600;\n}\n\n.at-tag-bar {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n display: inline-block;\n vertical-align: middle;\n}\n\n.at-tag-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n/* Weight indicator in tag table */\n.at-weight-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-weight-bar {\n width: 50px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-weight-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.2s ease;\n}\n\n.at-weight-bar-fill.at-weight-high {\n background: var(--mj-status-success);\n}\n\n.at-weight-bar-fill.at-weight-medium {\n background: var(--mj-status-warning);\n}\n\n.at-weight-bar-fill.at-weight-low {\n background: var(--mj-status-error);\n}\n\n.at-weight-value {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 28px;\n}\n\n.at-tags-by-source {\n font-size: 0.78rem;\n}\n\n.at-tag-source-row {\n display: flex;\n justify-content: space-between;\n padding: 5px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-source-row:last-child {\n border-bottom: none;\n}\n\n.at-search-input {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n width: 200px;\n outline: none;\n}\n\n.at-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-search-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RUN HISTORY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-run-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-run-table th {\n text-align: left;\n padding: 10px 14px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-run-table td {\n padding: 12px 14px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-run-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n cursor: pointer;\n}\n\n.at-run-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-run-status-badge.complete {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-run-status-badge.failed {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-run-status-badge.running {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-run-duration {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n}\n\n.at-run-source-name {\n font-weight: 500;\n}\n\n.at-run-error-text {\n color: var(--mj-status-error-text);\n}\n\n.at-filter-select {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.78rem;\n outline: none;\n}\n\n.at-filter-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SLIDE-IN FORM PANEL \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n}\n\n.at-slide-panel {\n position: fixed;\n right: 0;\n top: 0;\n bottom: 0;\n width: 420px;\n max-width: 100vw;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n}\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-slide-header h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n background: none;\n border: none;\n font-size: 1.1rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n}\n\n.at-slide-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-form-group {\n margin-bottom: 16px;\n}\n\n.at-form-label {\n display: block;\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.82rem;\n outline: none;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.at-form-input::placeholder,\n.at-form-textarea::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-form-textarea {\n resize: vertical;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n margin-top: 24px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RESPONSIVE \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n@media (max-width: 1100px) {\n .at-pipeline-layout {\n flex-direction: column;\n }\n\n .at-pipeline-right {\n width: 100%;\n flex-direction: row;\n }\n\n .at-tag-lib-layout {\n flex-direction: column;\n }\n\n .at-tag-lib-sidebar {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-left-nav {\n width: 180px;\n }\n\n .at-kpi-strip {\n flex-wrap: wrap;\n }\n\n .at-kpi-card {\n min-width: 140px;\n }\n\n .at-sources-grid {\n grid-template-columns: 1fr;\n }\n\n .at-ct-grid {\n grid-template-columns: 1fr;\n }\n\n .at-slide-panel {\n width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .at-left-nav {\n width: 56px;\n }\n\n .at-left-nav-header h2 {\n font-size: 0;\n }\n\n .at-left-nav-header h2 i {\n font-size: 1rem;\n }\n\n .at-nav-item {\n justify-content: center;\n padding: 10px;\n font-size: 0;\n }\n\n .at-nav-item i {\n font-size: 1rem;\n }\n\n .at-nav-badge {\n display: none;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Slide-in Form Panel\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.35);\n z-index: 9999;\n animation: at-fade-in 0.2s ease;\n}\n\n@keyframes at-fade-in { from { opacity: 0; } to { opacity: 1; } }\n\n.at-slide-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 420px;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 40px rgba(0, 0, 0, 0.4);\n z-index: 10000;\n display: flex;\n flex-direction: column;\n animation: at-slide-in 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes at-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-slide-header h3 {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n transition: all 0.15s ease;\n}\n\n.at-slide-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.at-form-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n outline: none;\n transition: border-color 0.15s ease;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.at-form-select {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M3 5l3 3 3-3'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 30px;\n}\n\n.at-form-textarea {\n resize: vertical;\n min-height: 70px;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-form-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* Also add empty state for Content Types (matching Sources) */\n.at-add-type-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-type-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-type-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORKED PIPELINE STAGES \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-stages-forked {\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n.at-pipeline-fork {\n display: flex;\n align-items: center;\n gap: 0;\n flex: 2;\n}\n\n.at-pipeline-fork-lines {\n width: 28px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n position: relative;\n flex-shrink: 0;\n}\n\n.at-pipeline-fork-line {\n height: 2px;\n background: var(--mj-border-default);\n width: 100%;\n position: relative;\n}\n\n.at-pipeline-fork-line::before {\n content: '';\n position: absolute;\n width: 2px;\n height: 12px;\n background: var(--mj-border-default);\n left: 0;\n}\n\n.at-fork-top::before {\n bottom: 0;\n left: 0;\n}\n\n.at-fork-bottom::before {\n top: 0;\n left: 0;\n}\n\n.at-pipeline-fork-branches {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n}\n\n.at-pipeline-fork-branches .at-pipeline-stage {\n flex: none;\n padding: 6px 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE FEED ITEMS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-item-clickable {\n cursor: pointer;\n}\n\n.at-feed-item-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FEED SEARCH & PAGINATION \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.at-feed-header-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-left: auto;\n}\n\n.at-feed-sort-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.68rem;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-feed-sort-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-feed-count {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n}\n\n.at-feed-search-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-search-icon {\n color: var(--mj-text-disabled);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-feed-search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n outline: none;\n padding: 4px 0;\n min-width: 0;\n}\n\n.at-feed-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-feed-search-clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 9px;\n flex-shrink: 0;\n}\n\n.at-feed-search-clear:hover {\n background: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.at-feed-scroll-body {\n overflow-y: auto;\n min-height: 0;\n flex: 1;\n}\n\n.at-feed-item-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n overflow: hidden;\n}\n\n.at-feed-item-content .at-feed-item-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-feed-item-source-label {\n font-size: 0.7rem;\n font-weight: 500;\n color: var(--mj-brand-primary);\n}\n\n.at-feed-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-pagination-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE SOURCE CARDS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-source-card-clickable {\n cursor: pointer;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORM HINT \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-form-hint {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n font-style: italic;\n margin-top: 2px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 DETAIL PANEL (wider) \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-panel {\n width: 500px;\n}\n\n/* \u2500\u2500 Detail: Item header \u2500\u2500 */\n\n.at-detail-item-header {\n margin-bottom: 8px;\n}\n\n.at-detail-item-name {\n font-size: 1.05rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 6px 0;\n word-break: break-word;\n}\n\n.at-detail-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-detail-badge {\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-detail-badge-source {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-detail-badge-type {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.at-detail-badge-file {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.at-detail-badge-status-active {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-detail-badge-status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-detail-badge-status-inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500 Detail: Sections \u2500\u2500 */\n\n.at-detail-section {\n margin-bottom: 4px;\n}\n\n.at-detail-section-label {\n font-size: 0.72rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.at-detail-link {\n font-size: 0.8rem;\n color: var(--mj-brand-primary);\n text-decoration: none;\n word-break: break-all;\n}\n\n.at-detail-link:hover {\n text-decoration: underline;\n}\n\n/* \u2500\u2500 Detail: Text preview \u2500\u2500 */\n\n.at-detail-text-preview {\n max-height: 200px;\n overflow-y: auto;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n font-size: 0.78rem;\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n line-height: 1.5;\n}\n\n/* \u2500\u2500 Detail: Tags \u2500\u2500 */\n\n.at-detail-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n/* \u2500\u2500 Detail: Meta grid \u2500\u2500 */\n\n.at-detail-meta-grid {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.at-detail-meta-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-detail-meta-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-meta-key {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n margin-right: 12px;\n}\n\n.at-detail-meta-value {\n color: var(--mj-text-primary);\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-meta-mono {\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n font-size: 0.72rem;\n}\n\n/* \u2500\u2500 Detail: Actions \u2500\u2500 */\n\n.at-detail-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-detail-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* \u2500\u2500 Detail: Source header \u2500\u2500 */\n\n.at-detail-source-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n/* \u2500\u2500 Detail: Stats strip \u2500\u2500 */\n\n.at-detail-stats-strip {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-detail-stat {\n flex: 1;\n min-width: 60px;\n text-align: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 8px 6px;\n}\n\n.at-detail-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-detail-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Detail: Content Library \u2500\u2500 */\n\n.at-detail-content-list {\n max-height: 250px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.at-detail-content-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-detail-content-item:last-child {\n border-bottom: none;\n}\n\n.at-detail-content-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-detail-content-item-name {\n flex: 1;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-content-item-tags {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.at-detail-content-item-time {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* \u2500\u2500 Detail: Run history \u2500\u2500 */\n\n.at-detail-run-history {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.at-detail-run-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.75rem;\n}\n\n.at-detail-run-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-run-time {\n color: var(--mj-text-secondary);\n flex: 1;\n}\n\n.at-detail-run-duration {\n color: var(--mj-text-muted);\n}\n\n.at-detail-run-items {\n color: var(--mj-text-muted);\n}\n\n@media (max-width: 600px) {\n .at-slide-panel {\n width: 100%;\n }\n\n .at-detail-panel {\n width: 100%;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n TAXONOMY GOVERNANCE TAB\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n/* \u2500\u2500 Sub-tab strip \u2500\u2500 */\n\n.at-tax-tab-strip {\n display: flex;\n border-bottom: 2px solid var(--mj-border-default);\n padding: 0 20px;\n gap: 0;\n flex-shrink: 0;\n}\n\n.at-tax-tab {\n padding: 10px 20px;\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: all 0.15s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-tax-tab:hover {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-tax-tab-badge {\n font-size: 0.62rem;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n}\n\n.at-tax-badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* \u2500\u2500 Tree View: Split layout \u2500\u2500 */\n\n.at-tax-split-view {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n height: calc(100vh - 320px);\n min-height: 400px;\n overflow: hidden;\n}\n\n.at-tax-tree-panel {\n width: 40%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n}\n\n.at-tax-tree-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-toolbar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 0.8rem;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-tax-toolbar-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-tax-toolbar-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-tree-body {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.at-tax-tree-node {\n padding: 6px 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s;\n line-height: 1.4;\n}\n\n.at-tax-tree-node:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-node-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n}\n\n.at-tax-node-drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n outline: 2px dashed var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.at-tax-node-multi-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.at-tax-tree-add-child {\n margin-left: auto;\n opacity: 0;\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 2px 6px;\n border-radius: 4px;\n transition: opacity 0.15s, color 0.15s, background 0.15s;\n}\n\n.at-tax-tree-node:hover .at-tax-tree-add-child {\n opacity: 1;\n}\n\n.at-tax-tree-add-child:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.at-tax-tree-checkbox {\n width: 14px;\n height: 14px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.at-tax-tree-saving-overlay {\n position: absolute;\n inset: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 75%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n backdrop-filter: blur(1px);\n}\n\n.at-tax-create-context {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n margin-bottom: 12px;\n padding: 6px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.at-tax-tree-arrow {\n width: 16px;\n font-size: 0.55rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n text-align: center;\n cursor: pointer;\n}\n\n.at-tax-arrow-collapsed::before {\n content: \"\\25B6\";\n}\n\n.at-tax-arrow-expanded::before {\n content: \"\\25BC\";\n}\n\n.at-tax-arrow-leaf {\n visibility: hidden;\n}\n\n.at-tax-health-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-tax-health-dot.green {\n background: var(--mj-status-success);\n}\n\n.at-tax-health-dot.yellow {\n background: var(--mj-status-warning);\n}\n\n.at-tax-health-dot.red {\n background: var(--mj-status-error);\n}\n\n.at-tax-tree-label {\n flex: 1;\n color: var(--mj-text-primary);\n}\n\n.at-tax-tree-label-selected {\n font-weight: 700;\n}\n\n.at-tax-tree-count {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n/* \u2500\u2500 Details panel \u2500\u2500 */\n\n.at-tax-details-panel {\n width: 60%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.at-tax-details-header {\n padding: 20px 24px 0;\n}\n\n.at-tax-breadcrumb {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tax-bc-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.at-tax-bc-link:hover {\n text-decoration: underline;\n}\n\n.at-tax-bc-sep {\n color: var(--mj-border-default);\n}\n\n.at-tax-bc-current {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.at-tax-details-title {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.at-tax-edit-icon {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n}\n\n.at-tax-edit-icon:hover {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-details-desc {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin-bottom: 16px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-tax-edit-form {\n margin-bottom: 16px;\n}\n\n/* \u2500\u2500 Stats row \u2500\u2500 */\n\n.at-tax-stats-row {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n padding: 0 24px;\n}\n\n.at-tax-stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n min-width: 72px;\n}\n\n.at-tax-stat-value {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-stat-date {\n font-size: 0.8rem;\n}\n\n.at-tax-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Action toolbar \u2500\u2500 */\n\n.at-tax-action-toolbar {\n display: flex;\n gap: 8px;\n padding: 0 24px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.at-tax-action-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-action-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n}\n\n/* \u2500\u2500 Detail sections \u2500\u2500 */\n\n.at-tax-detail-section {\n padding: 0 24px 20px;\n}\n\n.at-tax-section-title {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.at-tax-child-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-tax-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.at-tax-child-chip:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.at-tax-chip-count {\n font-size: 0.6rem;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n padding: 0 5px;\n border-radius: 8px;\n}\n\n/* \u2500\u2500 Recent items \u2500\u2500 */\n\n.at-tax-recent-list {\n list-style: none;\n}\n\n.at-tax-recent-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-tax-recent-item:last-child {\n border-bottom: none;\n}\n\n.at-tax-recent-icon {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-tax-recent-name {\n flex: 1;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-tax-recent-weight {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-tax-recent-date {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Health bar \u2500\u2500 */\n\n.at-tax-health-bar {\n display: flex;\n align-items: center;\n gap: 20px;\n padding: 12px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n margin-top: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-health-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-health-stat {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n}\n\n.at-tax-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n}\n\n.at-tax-dot-total {\n background: var(--mj-text-secondary);\n}\n\n.at-tax-dot-healthy {\n background: var(--mj-status-success);\n}\n\n.at-tax-dot-attention {\n background: var(--mj-status-warning);\n}\n\n.at-tax-dot-orphaned {\n background: var(--mj-status-error);\n}\n\n.at-tax-dot-duplicates {\n background: var(--mj-status-info);\n}\n\n.at-tax-health-value {\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-val-success {\n color: var(--mj-status-success);\n}\n\n.at-tax-val-warning {\n color: var(--mj-status-warning);\n}\n\n.at-tax-val-error {\n color: var(--mj-status-error);\n}\n\n.at-tax-val-info {\n color: var(--mj-status-info);\n}\n\n.at-tax-health-text {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550 Duplicates sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-dup-stats-bar {\n display: flex;\n gap: 24px;\n margin-bottom: 16px;\n align-items: center;\n}\n\n.at-tax-dup-stat {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n}\n\n.at-tax-dup-stat strong {\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n margin-right: 4px;\n}\n\n.at-tax-dup-high strong {\n color: var(--mj-status-error);\n}\n\n.at-tax-dup-moderate strong {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-tax-dup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.at-tax-dup-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-card.at-tax-dup-high {\n border-left: 3px solid var(--mj-status-error);\n}\n\n.at-tax-dup-card.at-tax-dup-moderate {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.at-tax-dup-tag {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n min-width: 120px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n text-align: center;\n}\n\n.at-tax-dup-arrow {\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.at-tax-dup-similarity {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n min-width: 100px;\n}\n\n.at-tax-sim-bar-bg {\n width: 100%;\n height: 6px;\n background: var(--mj-border-default);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-tax-sim-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s;\n}\n\n.at-tax-sim-bar-fill.high {\n background: var(--mj-status-error);\n}\n\n.at-tax-sim-bar-fill.moderate {\n background: var(--mj-status-warning);\n}\n\n.at-tax-sim-percent {\n font-size: 0.78rem;\n font-weight: 700;\n}\n\n.at-tax-sim-percent.high {\n color: var(--mj-status-error);\n}\n\n.at-tax-sim-percent.moderate {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-tax-dup-btn {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n white-space: nowrap;\n}\n\n.at-tax-dup-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n/* \u2550\u2550\u2550\u2550 Orphans sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-orphan-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-orphan-count {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-desc {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-bulk {\n margin-left: auto;\n display: flex;\n gap: 8px;\n}\n\n.at-tax-bulk-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-bulk-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-bulk-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.at-tax-orphan-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: 12px;\n}\n\n.at-tax-orphan-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.15s;\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-top: 3px solid var(--mj-status-error);\n}\n\n.at-tax-orphan-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.at-tax-orphan-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-stats {\n display: flex;\n gap: 12px;\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-stats strong {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-orphan-dates {\n display: flex;\n justify-content: space-between;\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-actions {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n}\n\n.at-tax-orphan-btn {\n flex: 1;\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n text-align: center;\n transition: all 0.15s;\n}\n\n.at-tax-orphan-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-delete:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n/* \u2550\u2550\u2550\u2550 Treemap sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-kpi-strip {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-treemap-kpi {\n padding: 10px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 120px;\n}\n\n.at-tax-treemap-kpi-value {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-treemap-kpi-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-tax-treemap-container {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 8px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n grid-auto-rows: 80px;\n gap: 4px;\n min-height: 340px;\n}\n\n.at-tax-treemap-cell {\n border-radius: 6px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s;\n position: relative;\n overflow: hidden;\n}\n\n.at-tax-treemap-cell:hover {\n transform: scale(1.02);\n z-index: 2;\n}\n\n.at-tax-cell-name {\n font-size: 0.78rem;\n}\n\n.at-tax-cell-count {\n font-size: 0.65rem;\n opacity: 0.85;\n font-weight: 400;\n}\n\n/* Treemap color families */\n.at-tm-blue-1 { background: color-mix(in srgb, var(--mj-brand-primary) 90%, black); }\n.at-tm-blue-2 { background: var(--mj-brand-primary); }\n.at-tm-blue-3 { background: color-mix(in srgb, var(--mj-brand-primary) 75%, white); }\n.at-tm-blue-4 { background: color-mix(in srgb, var(--mj-brand-primary) 55%, white); }\n\n.at-tm-green-1 { background: color-mix(in srgb, var(--mj-status-success) 90%, black); }\n.at-tm-green-2 { background: var(--mj-status-success); }\n.at-tm-green-3 { background: color-mix(in srgb, var(--mj-status-success) 60%, white); color: var(--mj-text-primary); }\n\n.at-tm-purple-1 { background: color-mix(in srgb, var(--mj-status-info) 90%, black); }\n.at-tm-purple-2 { background: var(--mj-status-info); }\n.at-tm-purple-3 { background: color-mix(in srgb, var(--mj-status-info) 65%, white); }\n\n.at-tm-orange-1 { background: color-mix(in srgb, var(--mj-status-warning) 90%, black); }\n.at-tm-orange-2 { background: var(--mj-status-warning); }\n.at-tm-orange-3 { background: color-mix(in srgb, var(--mj-status-warning) 60%, white); color: var(--mj-text-primary); }\n\n/* \u2550\u2550\u2550\u2550 Audit Log sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-audit-filters {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 16px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-filter-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-audit-checkbox-group {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-checkbox {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.at-tax-audit-checkbox input {\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-audit-timeline {\n position: relative;\n padding-left: 32px;\n}\n\n.at-tax-audit-timeline::before {\n content: '';\n position: absolute;\n left: 14px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.at-tax-audit-event {\n position: relative;\n padding: 10px 16px;\n margin-bottom: 4px;\n display: flex;\n align-items: flex-start;\n gap: 12px;\n border-radius: 8px;\n transition: background 0.1s;\n}\n\n.at-tax-audit-event:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-audit-event-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.68rem;\n flex-shrink: 0;\n position: absolute;\n left: -32px;\n top: 10px;\n z-index: 1;\n}\n\n.at-tax-audit-event-icon.created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.at-tax-audit-event-icon.merged {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.moved {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.deleted {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.at-tax-audit-event-icon.renamed {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-audit-event-body {\n flex: 1;\n}\n\n.at-tax-audit-event-desc {\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n line-height: 1.5;\n}\n\n.at-tax-tag-ref {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n font-weight: 600;\n font-size: 0.72rem;\n border: 1px solid var(--mj-border-default);\n}\n\n.at-tax-audit-event-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n display: flex;\n gap: 12px;\n}\n\n/* \u2500\u2500 Taxonomy responsive \u2500\u2500 */\n\n@media (max-width: 1100px) {\n .at-tax-split-view {\n flex-direction: column;\n }\n\n .at-tax-tree-panel {\n width: 100%;\n max-height: 300px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .at-tax-details-panel {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-tax-dup-card {\n flex-wrap: wrap;\n }\n\n .at-tax-orphan-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* \u2500\u2500 Pipeline Config Widget \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-config-card {\n margin-top: 12px;\n}\n\n.at-config-body {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px !important;\n}\n\n.at-config-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.at-config-label {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n min-width: 90px;\n flex-shrink: 0;\n}\n\n.at-config-control {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n justify-content: flex-end;\n}\n\n.at-config-input {\n width: 70px;\n padding: 3px 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 0.75rem;\n text-align: right;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.at-config-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.at-config-slider {\n flex: 1;\n max-width: 100px;\n accent-color: var(--mj-brand-primary);\n height: 4px;\n}\n\n.at-config-value {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n min-width: 40px;\n text-align: right;\n}\n\n.at-config-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n}\n\n.at-config-section-label {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Toggle Switch */\n.at-config-toggle {\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n\n.at-config-toggle input {\n display: none;\n}\n\n.at-toggle-track {\n display: block;\n width: 32px;\n height: 18px;\n background: var(--mj-border-strong);\n border-radius: 9px;\n transition: background 0.2s ease;\n position: relative;\n}\n\n.at-config-toggle input:checked + .at-toggle-track {\n background: var(--mj-brand-primary);\n}\n\n.at-toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0,0,0,0.15);\n}\n\n.at-config-toggle input:checked + .at-toggle-track .at-toggle-thumb {\n transform: translateX(14px);\n}\n\n/* \u2500\u2500 Schedule Indicator on Source Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-indicator {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n margin-top: 6px;\n border-radius: 12px;\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-border-default));\n cursor: pointer;\n transition: all 0.15s ease;\n width: fit-content;\n}\n\n.at-schedule-indicator i {\n font-size: 0.62rem;\n}\n\n.at-schedule-indicator:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-default));\n}\n\n/* Schedule button in source card actions */\n.at-source-schedule-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Schedule Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-schedule-dialog {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg, 12px);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16);\n width: 420px;\n max-width: 90vw;\n}\n\n.at-schedule-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-schedule-dialog-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-dialog-close {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 16px;\n padding: 4px;\n line-height: 1;\n transition: color 0.15s;\n}\n\n.at-schedule-dialog-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-body {\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-schedule-field label {\n display: block;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin-bottom: 6px;\n}\n\n.at-schedule-source-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-source-name i {\n color: var(--mj-text-muted);\n}\n\n.at-schedule-action-name {\n font-size: 13px;\n color: var(--mj-text-secondary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-cron-input {\n width: 100%;\n font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n letter-spacing: 0.02em;\n}\n\n.at-schedule-cron-preview {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.at-schedule-cron-preview i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-toggle-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n}\n\n.at-schedule-toggle-row label {\n margin-bottom: 0;\n}\n\n.at-schedule-dialog-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4: Status Badges for Content Items \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-status-badge {\n display: inline-block;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 0.6rem;\n font-weight: 600;\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n\n.at-status-badge-complete {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.at-status-badge-processing {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.at-status-badge-failed {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.at-status-badge-pending {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4/D7: Source Detail Controls \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-section-header-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.at-detail-section-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-detail-filter-select {\n padding: 4px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.72rem;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n}\n\n.at-retry-btn {\n font-size: 0.7rem !important;\n padding: 4px 8px !important;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface)) !important;\n color: var(--mj-status-error-text) !important;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-border-default)) !important;\n}\n\n.at-retry-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface)) !important;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D7: Pagination \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 10px 0 4px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 4px;\n}\n\n.at-page-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.72rem;\n font-weight: 500;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-page-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-page-btn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.at-page-info {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Confirmation Dialog \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-confirm-message {\n font-size: 13.5px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: var(--mj-radius-sm, 6px);\n padding: 7px 14px;\n font-size: 12.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.at-danger-btn:hover {\n background: var(--mj-status-error-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Treemap Drill-In \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-cell-clickable {\n cursor: pointer;\n transition: transform 0.15s, box-shadow 0.15s;\n}\n\n.at-tax-treemap-cell-clickable:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 1;\n}\n\n.at-tax-drillin-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: flex-start;\n justify-content: flex-end;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-tax-drillin-panel {\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n width: 420px;\n max-width: 90vw;\n height: 100vh;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n.at-tax-drillin-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-drillin-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-tax-drillin-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-drillin-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-tax-drillin-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* D3/D8: Clickable run history rows */\n.at-run-row-clickable {\n cursor: pointer;\n transition: background 0.12s ease;\n}\n\n.at-run-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-run-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n/* D2: Error text in detail tables */\n.run-error-text {\n color: var(--mj-status-error);\n font-weight: 600;\n}\n\n/* \u2500\u2500 Content Item Duplicates Section (G3) \u2500\u2500 */\n\n.at-dedup-section {\n margin-top: 24px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 20px;\n}\n\n.at-dedup-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.at-dedup-title {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.at-dedup-subtitle {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-dedup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s;\n}\n\n.at-dedup-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.at-dedup-pair {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.at-dedup-item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n}\n\n.at-dedup-item-name {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-dedup-item-source {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-vs {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n flex-shrink: 0;\n}\n\n.at-dedup-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.at-dedup-score {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-dedup-method {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-dedup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-dedup-confirm {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-dismiss {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-empty {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-empty i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n color: var(--mj-status-success);\n}\n\n.at-dedup-empty p {\n margin: 8px 0 0;\n font-size: 0.82rem;\n}\n\n/* =============================================================================\n * Tags-only additions: governance toggles, scope chips, inline synonyms,\n * Suggestions inbox table+drawer, Tag Health 3-card layout. All colors flow\n * through MJ design tokens with `color-mix()` for tinted variants.\n * ============================================================================= */\n\n/* ---------- Governance toggle rows ---------- */\n\n.at-tg-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 0;\n border-bottom: 1px dashed var(--mj-border-subtle);\n}\n.at-tg-toggle-row:last-child { border-bottom: 0; }\n.at-tg-toggle-label { display: flex; flex-direction: column; gap: 2px; max-width: 70%; }\n.at-tg-toggle-t { font-size: 13px; font-weight: 600; color: var(--mj-text-primary); }\n.at-tg-toggle-d { font-size: 11px; color: var(--mj-text-muted); line-height: 1.4; }\n\n.at-tg-switch {\n position: relative;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n.at-tg-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n.at-tg-switch.on { background: var(--mj-brand-primary); }\n.at-tg-switch.on::after { left: 18px; }\n.at-tg-switch.disabled { opacity: 0.5; pointer-events: none; }\n\n.at-tg-grid-3 {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 14px 16px;\n margin-top: 14px;\n}\n.at-tg-field { display: flex; flex-direction: column; gap: 4px; }\n.at-tg-field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n.at-tg-hint { font-size: 11px; color: var(--mj-text-muted); }\n\n/* ---------- Scope chips ---------- */\n\n.at-tg-chip-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n margin-top: 8px;\n}\n.at-tg-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 999px;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n.at-tg-chip.scoped {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------- Inline synonyms ---------- */\n\n.at-tg-syn-add {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n align-items: stretch;\n}\n.at-tg-syn-add .at-search-input { flex: 1; }\n.at-tg-syn-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 5px;\n border: 1px solid var(--mj-border-subtle);\n margin-bottom: 6px;\n background: var(--mj-bg-surface);\n}\n.at-tg-syn-row.pending {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n.at-tg-syn-name { font-weight: 600; flex: 1; color: var(--mj-text-primary); }\n.at-tg-syn-src {\n font-size: 10px;\n padding: 2px 7px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n}\n.at-tg-syn-src.manual { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.at-tg-syn-src.imported { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.at-tg-syn-src.merged { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.at-tg-syn-src.llm { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.at-tg-syn-x {\n cursor: pointer;\n color: var(--mj-text-muted);\n padding: 2px 6px;\n}\n.at-tg-syn-x:hover { color: var(--mj-status-error-text, var(--mj-status-error)); }\n\n/* ---------- Suggestions inbox table + drawer ---------- */\n\n.sg-shell {\n display: flex;\n height: 100%;\n min-height: 600px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.sg-main { flex: 1; display: flex; flex-direction: column; min-width: 0; overflow: hidden; }\n.sg-toolbar {\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n align-items: center;\n background: var(--mj-bg-surface-card);\n flex-wrap: wrap;\n}\n.sg-bulk-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n padding: 9px 14px;\n display: flex;\n gap: 10px;\n align-items: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n font-weight: 500;\n}\n.sg-table-body { flex: 1; overflow: auto; }\n.sg-table { width: 100%; border-collapse: collapse; font-size: 13px; color: var(--mj-text-primary); }\n.sg-table thead { position: sticky; top: 0; background: var(--mj-bg-surface-card); z-index: 1; }\n.sg-table th {\n text-align: left;\n padding: 9px 12px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n.sg-table td {\n padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n.sg-table tr { cursor: pointer; }\n.sg-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.sg-table tr.sg-row-selected td { background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); }\n.sg-table tr.sg-row-checked td { background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent); }\n.sg-score { font-family: ui-monospace, \"SF Mono\", Menlo, monospace; font-weight: 600; }\n.sg-score-bar {\n display: inline-block;\n width: 70px;\n height: 5px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n vertical-align: middle;\n margin-right: 6px;\n}\n.sg-score-bar > span {\n display: block;\n height: 100%;\n background: var(--mj-brand-primary);\n}\n.sg-reason {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n.sg-reason.merge { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.sg-reason.below { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 12%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.constrained { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.sg-reason.frozen { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.review { background: color-mix(in srgb, var(--mj-status-error) 12%, transparent); color: var(--mj-status-error-text, var(--mj-status-error)); }\n.sg-reason.lowusage { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.widenode { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.autogrow { background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-row-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.1s;\n}\n.sg-table tr:hover .sg-row-actions {\n opacity: 1;\n}\n\n.sg-drawer {\n width: 460px;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n.sg-drawer-hd {\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface);\n}\n.sg-drawer-bd { padding: 16px 18px; flex: 1; overflow-y: auto; }\n.sg-drawer-ft {\n padding: 12px 18px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface);\n flex-wrap: wrap;\n}\n.sg-drawer h4 {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 16px 0 8px;\n font-weight: 700;\n}\n.sg-candidate {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n display: flex;\n gap: 12px;\n align-items: center;\n}\n.sg-preview {\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n/* ---------- Tag Health cards ---------- */\n\n.health-shell { padding: 18px 22px; }\n.runbar {\n display: flex;\n gap: 22px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n margin-bottom: 18px;\n align-items: center;\n font-size: 13px;\n}\n.runbar .stat .l { font-size: 11px; color: var(--mj-text-muted); }\n.runbar .stat .v { font-size: 16px; font-weight: 600; color: var(--mj-text-primary); }\n.runbar .grow { flex: 1; }\n\n.health-cards {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 16px;\n margin-bottom: 22px;\n}\n.h-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 240px;\n}\n.h-card.merge { border-top: 4px solid var(--mj-brand-primary); }\n.h-card.lowusage { border-top: 4px solid var(--mj-status-warning); }\n.h-card.widenode { border-top: 4px solid var(--mj-status-error, var(--mj-status-warning)); }\n.h-card .top { display: flex; align-items: flex-start; gap: 10px; }\n.h-card .top .ic {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n}\n.h-card .name {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.h-card h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n.h-card .big {\n font-size: 36px;\n font-weight: 800;\n color: var(--mj-text-primary);\n line-height: 1;\n}\n.h-card .sub { font-size: 12px; color: var(--mj-text-secondary); line-height: 1.4; margin: 0; }\n.h-card .ft { margin-top: auto; display: flex; gap: 6px; flex-wrap: wrap; }\n\n.threshold-form {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px;\n margin-top: 18px;\n}\n.threshold-form h3 { margin: 0 0 12px; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.threshold-form .grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n.threshold-form .field { display: flex; flex-direction: column; gap: 4px; }\n.threshold-form .field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n\n.run-history {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-top: 18px;\n overflow: hidden;\n}\n.run-history-hd {\n padding: 12px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-card);\n}\n.run-history-hd h3 { margin: 0; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.run-history table { width: 100%; border-collapse: collapse; font-size: 12px; }\n.run-history th {\n text-align: left;\n padding: 8px 12px;\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 600;\n}\n.run-history td {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n/* Generic helpers used by new sections */\n.at-muted { color: var(--mj-text-muted); }\n.at-success-btn { color: var(--mj-status-success-text, var(--mj-status-success)); border-color: var(--mj-status-success-border, var(--mj-status-success)); }\n.at-btn-sm { font-size: 12px; padding: 4px 9px; }\n.at-btn-xs { font-size: 11px; padding: 2px 7px; }\n"] }]
7374
+ args: [{ standalone: false, selector: 'mj-tags-resource', encapsulation: ViewEncapsulation.None, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Tags\"\n Icon=\"fa-solid fa-sitemap\"\n Subtitle=\"Taxonomy management, health monitoring, and tag library\">\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"RunHealthNow()\" [disabled]=\"HealthRunning\">\n @if (HealthRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running\u2026\n } @else {\n <i class=\"fa-solid fa-heart-pulse\"></i> Run Tag Health\n }\n </button>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n <!-- Tags Dashboard -->\n <div class=\"at-dashboard\">\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 LEFT NAV \u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"at-left-nav\">\n <div class=\"at-left-nav-items\">\n @for (item of NavItems; track item.Tab) {\n <div class=\"at-nav-item\" [class.active]=\"ActiveTab === item.Tab\" (click)=\"SwitchTab(item.Tab)\">\n <i [class]=\"item.Icon\"></i> {{ item.Label }}\n @if (item.BadgeText) {\n <span class=\"at-nav-badge\" [class.at-nav-badge-live]=\"item.BadgeClass === 'nav-badge-live'\">{{ item.BadgeText }}</span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 MAIN AREA \u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"at-main-area\">\n\n @if (IsLoading) {\n <div class=\"at-loading-overlay\">\n <mj-loading text=\"Loading tag data\u2026\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading) {\n <!-- TAB 4: TAG LIBRARY -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'tags') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Overview</div>\n <div class=\"at-page-subtitle\">{{ TagRows.length }} unique tags across all content sources</div>\n </div>\n <div class=\"at-page-actions\">\n <input type=\"text\" class=\"at-search-input\" placeholder=\"Search tags...\"\n [(ngModel)]=\"TagSearchQuery\" (input)=\"FilterTags()\">\n </div>\n </div>\n <div class=\"at-page-body\">\n <div class=\"at-tag-lib-layout\">\n <div class=\"at-tag-lib-main\">\n <div class=\"at-card\">\n <div class=\"at-card-body\" style=\"max-height: 500px; overflow-y: auto;\">\n <table class=\"at-tag-table\">\n <thead>\n <tr>\n <th>Tag</th>\n <th>Count</th>\n <th>Avg Weight</th>\n <th>Distribution</th>\n <th>Top Source</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredTagRows; track row.Tag) {\n <tr class=\"at-tag-row-clickable\" (click)=\"DrillDownTag(row.Tag)\"\n [class.at-tag-row-selected]=\"SelectedDrillDownTag === row.Tag\">\n <td class=\"at-tag-name-cell\">{{ row.Tag }}</td>\n <td>{{ row.UsageCount }}</td>\n <td>\n <div class=\"at-weight-indicator\">\n <div class=\"at-weight-bar\">\n <div class=\"at-weight-bar-fill\" [style.width.%]=\"row.AvgWeight * 100\"\n [class.at-weight-high]=\"row.AvgWeight >= 0.7\"\n [class.at-weight-medium]=\"row.AvgWeight >= 0.4 && row.AvgWeight < 0.7\"\n [class.at-weight-low]=\"row.AvgWeight < 0.4\"></div>\n </div>\n <span class=\"at-weight-value\">{{ row.AvgWeight.toFixed(2) }}</span>\n </div>\n </td>\n <td>\n <div class=\"at-tag-bar\">\n <div class=\"at-tag-bar-fill\" [style.width.%]=\"row.BarWidthPct\"></div>\n </div>\n </td>\n <td>{{ row.TopSource }}</td>\n <td>{{ row.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Tag drill-down: content items matching selected tag -->\n @if (SelectedDrillDownTag) {\n <div class=\"at-card\" style=\"margin-top: 12px;\">\n <div class=\"at-card-header\">\n <span class=\"at-card-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Content items tagged \"{{ SelectedDrillDownTag }}\"\n ({{ TagDrillDownItems.length }})\n </span>\n <button class=\"at-slide-close\" (click)=\"CloseDrillDownTag()\" style=\"background:none;border:none;cursor:pointer;color:var(--mj-text-muted)\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-card-body\" style=\"max-height: 300px; overflow-y: auto;\">\n @if (TagDrillDownItems.length === 0) {\n <div class=\"at-empty-state\"><p>No content items found for this tag.</p></div>\n } @else {\n <table class=\"at-tag-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Source</th>\n <th>Weight</th>\n <th>Updated</th>\n </tr>\n </thead>\n <tbody>\n @for (di of TagDrillDownItems; track di.ID) {\n <tr class=\"at-tag-row-clickable\" (click)=\"OpenItemDetailByID(di.ID)\">\n <td>{{ di.Name }}</td>\n <td>{{ di.SourceName }}</td>\n <td>{{ FormatWeight(di.Weight) }}</td>\n <td>{{ di.UpdatedAt }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"at-tag-lib-sidebar\">\n <div class=\"at-card at-tag-cloud-card\">\n <div class=\"at-card-title\" style=\"margin-bottom: 12px;\"><i class=\"fa-solid fa-cloud\"></i> Tag Cloud</div>\n @if (TagCloudWordItems.length > 0) {\n <mj-word-cloud\n [Items]=\"TagCloudWordItems\"\n [MaxFontSize]=\"40\"\n [MinFontSize]=\"12\"\n [MaxItems]=\"20\"\n Layout=\"spiral\"\n ColorMode=\"weight-gradient\"\n [Interactive]=\"true\"\n [Animate]=\"true\">\n </mj-word-cloud>\n } @else {\n <div class=\"at-tag-cloud-empty\">No tags yet</div>\n }\n </div>\n <div class=\"at-card\" style=\"padding: 16px; margin-top: 12px;\">\n <div class=\"at-card-title\" style=\"margin-bottom: 10px;\"><i class=\"fa-solid fa-chart-pie\"></i> By Source</div>\n <div class=\"at-tags-by-source\">\n @for (s of TagsBySource; track s.SourceName) {\n <div class=\"at-tag-source-row\">\n <span>{{ s.SourceName }}</span>\n <strong>{{ s.Count }}</strong>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- TAB 6: TAXONOMY GOVERNANCE -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'taxonomy') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Taxonomy Governance</div>\n <div class=\"at-page-subtitle\">Manage tag hierarchy, resolve duplicates, and monitor taxonomy health &mdash; <strong>{{ TaxHealth.Total }} total tags</strong></div>\n </div>\n <div class=\"at-page-actions\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"RefreshTaxonomyData()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n </div>\n </div>\n\n <!-- Sub-tab strip -->\n <div class=\"at-tax-tab-strip\">\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'tree'\" (click)=\"SwitchTaxSubTab('tree')\">\n <i class=\"fa-solid fa-sitemap\"></i> Tree View\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'duplicates'\" (click)=\"SwitchTaxSubTab('duplicates')\">\n <i class=\"fa-solid fa-link\"></i> Duplicates\n @if (TaxDuplicates.length > 0) {\n <span class=\"at-tax-tab-badge at-tax-badge-warning\">{{ TaxDuplicates.length }}</span>\n }\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'orphans'\" (click)=\"SwitchTaxSubTab('orphans')\">\n <i class=\"fa-solid fa-ban\"></i> Orphans\n @if (TaxOrphans.length > 0) {\n <span class=\"at-tax-tab-badge at-tax-badge-error\">{{ TaxOrphans.length }}</span>\n }\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'treemap'\" (click)=\"SwitchTaxSubTab('treemap')\">\n <i class=\"fa-solid fa-chart-tree-map\"></i> Treemap\n </div>\n <div class=\"at-tax-tab\" [class.active]=\"TaxSubTab === 'audit'\" (click)=\"SwitchTaxSubTab('audit')\">\n <i class=\"fa-solid fa-scroll\"></i> Audit Log\n </div>\n </div>\n\n <div class=\"at-page-body\">\n\n <!-- \u2550\u2550 SUB-TAB 1: TREE VIEW \u2550\u2550 -->\n @if (TaxSubTab === 'tree') {\n <div class=\"at-tax-split-view\">\n <!-- Tree panel -->\n <div class=\"at-tax-tree-panel\" style=\"position: relative;\">\n <div class=\"at-tax-tree-toolbar\">\n <input type=\"text\" class=\"at-search-input\" style=\"flex: 1;\" placeholder=\"Search tags...\"\n [(ngModel)]=\"TaxTreeSearch\" (input)=\"FilterTaxTree()\">\n <button class=\"at-tax-toolbar-btn\" title=\"Add root tag\" (click)=\"OpenCreateRootTag()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button class=\"at-tax-toolbar-btn\" [class.active]=\"TaxMultiSelectMode\"\n title=\"Toggle multi-select for drag reparenting\" (click)=\"ToggleMultiSelectMode()\">\n <i class=\"fa-solid fa-check-double\"></i>\n </button>\n </div>\n <div class=\"at-tax-tree-body\"\n (dragover)=\"$event.preventDefault()\"\n (drop)=\"OnDropToRoot($event)\">\n @if (TaxFilteredNodes.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <p>No tags found</p>\n </div>\n }\n @for (node of TaxFilteredNodes; track node.ID) {\n <div class=\"at-tax-tree-node\"\n [class.at-tax-node-selected]=\"node.IsSelected\"\n [class.at-tax-node-drag-over]=\"TaxDragOverNodeID === node.ID\"\n [class.at-tax-node-multi-selected]=\"IsNodeMultiSelected(node.ID)\"\n [style.padding-left.px]=\"16 + node.Depth * 20\"\n [attr.draggable]=\"true\"\n (dragstart)=\"OnTreeNodeDragStart($event, node)\"\n (dragover)=\"OnTreeNodeDragOver($event, node)\"\n (dragleave)=\"OnTreeNodeDragLeave()\"\n (drop)=\"OnTreeNodeDrop($event, node); $event.stopPropagation()\"\n (click)=\"SelectTaxNode(node)\">\n @if (TaxMultiSelectMode) {\n <input type=\"checkbox\" class=\"at-tax-tree-checkbox\"\n [checked]=\"IsNodeMultiSelected(node.ID)\"\n (click)=\"ToggleNodeSelection(node, $event)\">\n }\n <span class=\"at-tax-tree-arrow\"\n [class.at-tax-arrow-expanded]=\"node.IsExpanded && node.Children.length > 0\"\n [class.at-tax-arrow-collapsed]=\"!node.IsExpanded && node.Children.length > 0\"\n [class.at-tax-arrow-leaf]=\"node.Children.length === 0\"\n (click)=\"ToggleTaxNode(node); $event.stopPropagation()\"></span>\n <span class=\"at-tax-health-dot\" [class]=\"node.HealthColor\"></span>\n <span class=\"at-tax-tree-label\" [class.at-tax-tree-label-selected]=\"node.IsSelected\">{{ node.Name }}</span>\n <span class=\"at-tax-tree-count\">({{ node.ItemCount }})</span>\n <span class=\"at-tax-tree-add-child\" title=\"Add child tag\"\n (click)=\"OpenCreateChildTagFor(node); $event.stopPropagation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </span>\n </div>\n }\n </div>\n @if (TaxTreeSaving) {\n <div class=\"at-tax-tree-saving-overlay\">\n <mj-loading text=\"Moving tags...\" size=\"small\"></mj-loading>\n </div>\n }\n </div>\n\n <!-- Details panel -->\n <div class=\"at-tax-details-panel\">\n @if (TaxSelectedNode) {\n <div class=\"at-tax-details-header\">\n <!-- Breadcrumb -->\n <div class=\"at-tax-breadcrumb\">\n @for (bc of GetTaxBreadcrumb(TaxSelectedNode); track bc.ID) {\n <span class=\"at-tax-bc-link\" (click)=\"NavigateToBreadcrumb(bc.ID)\">{{ bc.Name }}</span>\n <span class=\"at-tax-bc-sep\">&rsaquo;</span>\n }\n <span class=\"at-tax-bc-current\">{{ TaxSelectedNode.Name }}</span>\n </div>\n\n @if (!TaxIsEditing) {\n <div class=\"at-tax-details-title\">\n {{ TaxSelectedNode.DisplayName }}\n <span class=\"at-tax-edit-icon\" (click)=\"StartEditTag()\" title=\"Edit name\">\n <i class=\"fa-solid fa-pen\"></i>\n </span>\n </div>\n @if (TaxSelectedNode.Description) {\n <div class=\"at-tax-details-desc\">{{ TaxSelectedNode.Description }}</div>\n }\n } @else {\n <div class=\"at-tax-edit-form\">\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Name</label>\n <input type=\"text\" class=\"at-form-input\" [(ngModel)]=\"TaxEditName\">\n </div>\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Description</label>\n <textarea class=\"at-form-textarea\" rows=\"3\" [(ngModel)]=\"TaxEditDescription\"></textarea>\n </div>\n <div class=\"at-form-actions\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"SaveEditTag()\">Save</button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CancelEditTag()\">Cancel</button>\n </div>\n </div>\n }\n </div>\n\n <!-- Stats row -->\n <div class=\"at-tax-stats-row\">\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.ItemCount }}</div>\n <div class=\"at-tax-stat-label\">Items Tagged</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.AvgWeight.toFixed(2) }}</div>\n <div class=\"at-tax-stat-label\">Avg Weight</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.Children.length }}</div>\n <div class=\"at-tax-stat-label\">Children</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TaxSelectedNode.Depth }}</div>\n <div class=\"at-tax-stat-label\">Depth</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value at-tax-stat-date\">{{ TaxSelectedNode.FirstSeen }}</div>\n <div class=\"at-tax-stat-label\">First Seen</div>\n </div>\n </div>\n\n <!-- Action toolbar -->\n @if (!TaxIsEditing) {\n <div class=\"at-tax-action-toolbar\">\n <button class=\"at-tax-action-btn\" (click)=\"OpenCreateChildTag()\"><i class=\"fa-solid fa-plus\"></i> Add Child</button>\n <button class=\"at-tax-action-btn\" (click)=\"StartEditTag()\"><i class=\"fa-solid fa-pen\"></i> Rename</button>\n <button class=\"at-tax-action-btn\" (click)=\"OpenMoveDialog(TaxSelectedNode)\"><i class=\"fa-solid fa-arrows-up-down\"></i> Move</button>\n <button class=\"at-tax-action-btn\" (click)=\"OpenMergeIntoDialog(TaxSelectedNode)\"><i class=\"fa-solid fa-compress\"></i> Merge Into...</button>\n <button class=\"at-tax-action-btn\" (click)=\"OpenSplitDialog(TaxSelectedNode)\"><i class=\"fa-solid fa-code-branch\"></i> Split</button>\n <button class=\"at-tax-action-btn at-tax-action-danger\" (click)=\"DeleteTag(TaxSelectedNode)\"><i class=\"fa-solid fa-trash\"></i> Delete</button>\n </div>\n }\n\n <!-- Child tags -->\n @if (TaxSelectedNode.Children.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Child Tags</div>\n <div class=\"at-tax-child-chips\">\n @for (child of TaxSelectedNode.Children; track child.ID) {\n <span class=\"at-tax-child-chip\" (click)=\"SelectTaxNode(child)\">\n {{ child.Name }}\n <span class=\"at-tax-chip-count\">{{ child.ItemCount }}</span>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Recently tagged items -->\n @if (TaxRecentItems.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Recently Tagged Items</div>\n <div class=\"at-tax-recent-list\">\n @for (item of TaxRecentItems; track $index) {\n <div class=\"at-tax-recent-item\">\n <div class=\"at-tax-recent-icon\"><i [class]=\"item.Icon\"></i></div>\n <div class=\"at-tax-recent-name\">{{ item.Name }}</div>\n <div class=\"at-tax-recent-weight\">{{ item.Weight.toFixed(2) }}</div>\n <div class=\"at-tax-recent-date\">{{ item.Date }}</div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500\u2500 Governance \u2014 per-node controls for the autotagger \u2500\u2500\u2500 -->\n @if (SelectedTagFull) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Governance \u2014 how the autotagger may grow this subtree</div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Allow auto-grow under this tag</span>\n <span class=\"at-tg-toggle-d\">Lets the classifier create child tags below this one. Off = constrained subtree.</span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.AllowAutoGrow\"\n [class.disabled]=\"SelectedTagSavingField['AllowAutoGrow']\"\n (click)=\"ToggleGovernanceFlag('AllowAutoGrow')\"></div>\n </div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Freeze this subtree</span>\n <span class=\"at-tg-toggle-d\">Locks this entire subtree against auto-creation, regardless of mode.</span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.IsFrozen\"\n [class.disabled]=\"SelectedTagSavingField['IsFrozen']\"\n (click)=\"ToggleGovernanceFlag('IsFrozen')\"></div>\n </div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Requires review for matches</span>\n <span class=\"at-tg-toggle-d\">High-confidence matches against this tag are routed to the suggestion queue first.</span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.RequiresReview\"\n [class.disabled]=\"SelectedTagSavingField['RequiresReview']\"\n (click)=\"ToggleGovernanceFlag('RequiresReview')\"></div>\n </div>\n\n <div class=\"at-tg-grid-3\">\n <div class=\"at-tg-field\">\n <label>Max children</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\"\n [value]=\"SelectedTagFull.MaxChildren ?? ''\"\n (change)=\"SaveSelectedTagNumber('MaxChildren', $any($event.target).value)\" />\n <span class=\"at-tg-hint\">Hard cap on direct children. Blank = unlimited.</span>\n </div>\n <div class=\"at-tg-field\">\n <label>Max descendant depth</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\"\n [value]=\"SelectedTagFull.MaxDescendantDepth ?? ''\"\n (change)=\"SaveSelectedTagNumber('MaxDescendantDepth', $any($event.target).value)\" />\n <span class=\"at-tg-hint\">From this node down. 0 = leaf-only.</span>\n </div>\n <div class=\"at-tg-field\">\n <label>Min confidence</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" max=\"1\" step=\"0.01\"\n [value]=\"SelectedTagFull.MinWeight ?? ''\"\n (change)=\"SaveSelectedTagNumber('MinWeight', $any($event.target).value)\" />\n <span class=\"at-tg-hint\">Floor for matches against this tag.</span>\n </div>\n </div>\n </div>\n\n <!-- \u2500\u2500\u2500 Scope \u2014 who can see this tag \u2500\u2500\u2500 -->\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Scope \u2014 who can see and tag with this</div>\n\n <div class=\"at-tg-toggle-row\">\n <div class=\"at-tg-toggle-label\">\n <span class=\"at-tg-toggle-t\">Global tag (visible to all tenants)</span>\n <span class=\"at-tg-toggle-d\">\n Off = restricted to the scope rows below.\n @if (IsGlobalLocked()) { <strong>Locked while scope rows exist.</strong> }\n </span>\n </div>\n <div class=\"at-tg-switch\" [class.on]=\"SelectedTagFull.IsGlobal\"\n [class.disabled]=\"IsGlobalLocked() || SelectedTagSavingField['IsGlobal']\"\n (click)=\"ToggleGovernanceFlag('IsGlobal')\"></div>\n </div>\n\n <div class=\"at-tg-chip-list\">\n @for (s of SelectedTagScopes; track s.ID) {\n <span class=\"at-tg-chip scoped\">{{ s.EntityName }} \u00B7 {{ s.DisplayName }}</span>\n }\n @if (SelectedTagScopes.length === 0) {\n <span class=\"at-tg-hint\" style=\"font-style: italic;\">\n No scope rows. {{ SelectedTagFull.IsGlobal ? 'Tag is global.' : 'Tag is non-global with no scope \u2014 currently unreachable.' }}\n </span>\n }\n <button class=\"at-action-btn at-btn-sm\" (click)=\"OpenScopeDialog()\">\n <i class=\"fa-solid fa-pencil\"></i> Edit scope\u2026\n </button>\n </div>\n <div class=\"at-tg-hint\" style=\"margin-top: 8px;\">\n <i class=\"fa-solid fa-info-circle\"></i> Children inherit this scope automatically. Promotion to global requires admin approval.\n </div>\n </div>\n\n <!-- \u2500\u2500\u2500 Synonyms \u2014 alternate names that resolve to this tag \u2500\u2500\u2500 -->\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Synonyms \u2014 alternate names that resolve to this tag</div>\n\n <div class=\"at-tg-syn-add\">\n <input class=\"at-search-input\" placeholder='e.g. \"GenAI\"'\n [(ngModel)]=\"NewSynonymName\"\n (keyup.enter)=\"AddSynonym()\" />\n <select class=\"at-search-input\" style=\"width: 130px;\"\n [(ngModel)]=\"NewSynonymSource\">\n <option value=\"Manual\">Manual</option>\n <option value=\"Imported\">Imported</option>\n <option value=\"Merged\">Merged</option>\n <option value=\"LLM\">LLM</option>\n </select>\n <button class=\"at-action-btn at-primary-btn\" (click)=\"AddSynonym()\" [disabled]=\"!NewSynonymName.trim()\">+ Add</button>\n </div>\n\n @if (SelectedTagSynonyms.length === 0) {\n <div class=\"at-tg-hint\" style=\"font-style: italic;\">No synonyms yet.</div>\n } @else {\n @for (s of SelectedTagSynonyms; track s.ID) {\n <div class=\"at-tg-syn-row\" [class.pending]=\"s.Source === 'LLM'\">\n <div class=\"at-tg-syn-name\">{{ s.Synonym }}</div>\n <span class=\"at-tg-syn-src {{ s.Source.toLowerCase() }}\">{{ s.Source }}</span>\n <span class=\"at-tg-syn-x\" title=\"Remove\" (click)=\"RemoveSynonym(s)\"><i class=\"fa-solid fa-xmark\"></i></span>\n </div>\n }\n }\n </div>\n }\n } @else {\n <div class=\"at-empty-state\" style=\"height: 100%;\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n <p>Select a tag from the tree to view details</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Health bar -->\n <div class=\"at-tax-health-bar\">\n <span class=\"at-tax-health-label\">Taxonomy Health</span>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-total\"></span>\n <span class=\"at-tax-health-value\">{{ TaxHealth.Total }}</span>\n <span class=\"at-tax-health-text\">Total</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-healthy\"></span>\n <span class=\"at-tax-health-value at-tax-val-success\">{{ TaxHealth.Healthy }}</span>\n <span class=\"at-tax-health-text\">Healthy</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-attention\"></span>\n <span class=\"at-tax-health-value at-tax-val-warning\">{{ TaxHealth.NeedAttention }}</span>\n <span class=\"at-tax-health-text\">Need Attention</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-orphaned\"></span>\n <span class=\"at-tax-health-value at-tax-val-error\">{{ TaxHealth.Orphaned }}</span>\n <span class=\"at-tax-health-text\">Orphaned</span>\n </div>\n <div class=\"at-tax-health-stat\">\n <span class=\"at-tax-dot at-tax-dot-duplicates\"></span>\n <span class=\"at-tax-health-value at-tax-val-info\">{{ TaxHealth.Duplicates }}</span>\n <span class=\"at-tax-health-text\">Duplicate Candidates</span>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550 SUB-TAB 2: DUPLICATES \u2550\u2550 -->\n @if (TaxSubTab === 'duplicates') {\n <div class=\"at-tax-dup-stats-bar\">\n <div class=\"at-tax-dup-stat\"><strong>{{ TaxDuplicates.length }}</strong> candidates found</div>\n <div class=\"at-tax-dup-stat at-tax-dup-high\"><strong>{{ TaxHighConfidenceDupeCount }}</strong> high confidence (&gt;85%)</div>\n <div class=\"at-tax-dup-stat at-tax-dup-moderate\"><strong>{{ TaxModerateDupeCount }}</strong> moderate (70-85%)</div>\n </div>\n\n @if (TaxDuplicates.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>No duplicate tags detected</p>\n </div>\n }\n\n <div class=\"at-tax-dup-list\">\n @for (pair of TaxDuplicates; track $index) {\n <div class=\"at-tax-dup-card\" [class.at-tax-dup-high]=\"pair.SeverityClass === 'high'\" [class.at-tax-dup-moderate]=\"pair.SeverityClass === 'moderate'\">\n @if (pair.IsExactDuplicate) {\n <!-- Exact-name duplicates: show single tag name with count -->\n <div class=\"at-tax-dup-tag\">{{ pair.TagA }}</div>\n <div class=\"at-tax-dup-similarity\">\n <span class=\"at-tax-sim-percent high\">\n <i class=\"fa-solid fa-clone\"></i>&nbsp;{{ pair.ExactDuplicateCount }} identical records\n </span>\n </div>\n <div class=\"at-tax-dup-actions\">\n <button class=\"at-tax-dup-btn at-tax-dup-btn-primary\" (click)=\"MergeTags(pair.TagAID, pair.TagBID, pair.TagA, pair.TagB)\" [disabled]=\"IsMerging\">@if (IsMerging) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Merging... } @else { Merge }</button>\n <button class=\"at-tax-dup-btn\" (click)=\"DismissDuplicate(pair)\">Dismiss</button>\n </div>\n } @else {\n <!-- Similar (non-exact) pairs: show both tags with similarity -->\n <div class=\"at-tax-dup-tag\">{{ pair.TagA }}</div>\n <div class=\"at-tax-dup-arrow\"><i class=\"fa-solid fa-arrows-left-right\"></i></div>\n <div class=\"at-tax-dup-similarity\">\n <div class=\"at-tax-sim-bar-bg\">\n <div class=\"at-tax-sim-bar-fill\" [class]=\"pair.SeverityClass\" [style.width.%]=\"pair.Similarity\"></div>\n </div>\n <span class=\"at-tax-sim-percent\" [class]=\"pair.SeverityClass\">{{ pair.Similarity }}%</span>\n </div>\n <div class=\"at-tax-dup-arrow\"><i class=\"fa-solid fa-arrows-left-right\"></i></div>\n <div class=\"at-tax-dup-tag\">{{ pair.TagB }}</div>\n <div class=\"at-tax-dup-actions\">\n <button class=\"at-tax-dup-btn at-tax-dup-btn-primary\" (click)=\"MergeTags(pair.TagAID, pair.TagBID, pair.TagA, pair.TagB)\" [disabled]=\"IsMerging\">@if (IsMerging) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Merging... } @else { Merge }</button>\n <button class=\"at-tax-dup-btn\" (click)=\"MakeChildTag(pair.TagAID, pair.TagBID)\">Make Child</button>\n <button class=\"at-tax-dup-btn\" (click)=\"DismissDuplicate(pair)\">Dismiss</button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- \u2550\u2550 SUB-TAB 3: ORPHANS \u2550\u2550 -->\n @if (TaxSubTab === 'orphans') {\n <div class=\"at-tax-orphan-toolbar\">\n <span class=\"at-tax-orphan-count\">{{ TaxOrphans.length }} orphaned tags</span>\n <span class=\"at-tax-orphan-desc\">&mdash; no parent, no children, low usage</span>\n <div class=\"at-tax-orphan-bulk\">\n <button class=\"at-tax-bulk-btn\" (click)=\"ToggleAllOrphans()\">\n @if (TaxAllOrphansSelected) { <i class=\"fa-solid fa-square-check\"></i> } @else { <i class=\"fa-regular fa-square\"></i> }\n Select All\n </button>\n <button class=\"at-tax-bulk-btn at-tax-bulk-danger\" (click)=\"BulkDeleteOrphans()\">\n <i class=\"fa-solid fa-trash\"></i> Bulk Delete\n </button>\n <button class=\"at-tax-bulk-btn at-tax-bulk-danger\" (click)=\"DeleteAllOrphans()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete All ({{ TaxOrphans.length }})\n </button>\n </div>\n </div>\n\n @if (TaxOrphans.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>No orphaned tags</p>\n </div>\n }\n\n <div class=\"at-tax-orphan-grid\">\n @for (orphan of TaxOrphans; track orphan.ID) {\n <div class=\"at-tax-orphan-card\">\n <div class=\"at-tax-orphan-header\">\n <span class=\"at-tax-orphan-name\">{{ orphan.Name }}</span>\n <input type=\"checkbox\" class=\"at-tax-orphan-checkbox\" [checked]=\"orphan.IsSelected\"\n (change)=\"ToggleOrphanSelection(orphan)\" (click)=\"$event.stopPropagation()\">\n </div>\n <div class=\"at-tax-orphan-stats\">\n <span>Usage: <strong>{{ orphan.UsageCount }}</strong></span>\n <span>Avg Weight: <strong>{{ orphan.AvgWeight.toFixed(2) }}</strong></span>\n </div>\n <div class=\"at-tax-orphan-dates\">\n <span>First: {{ orphan.FirstSeen }}</span>\n <span>Last: {{ orphan.LastSeen }}</span>\n </div>\n <div class=\"at-tax-orphan-actions\">\n <button class=\"at-tax-orphan-btn at-tax-orphan-delete\" (click)=\"DeleteOrphan(orphan)\">Delete</button>\n <button class=\"at-tax-orphan-btn\">Ignore</button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- \u2550\u2550 SUB-TAB 4: TREEMAP \u2550\u2550 -->\n @if (TaxSubTab === 'treemap') {\n <div class=\"at-tax-treemap-kpi-strip\">\n @for (kpi of TaxTreemapKPIs; track kpi.Label) {\n <div class=\"at-tax-treemap-kpi\">\n <div class=\"at-tax-treemap-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"at-tax-treemap-kpi-label\">{{ kpi.Label }}</div>\n </div>\n }\n </div>\n\n @if (TaxTreemapCells.length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-chart-tree-map\"></i>\n <p>No taxonomy data to visualize</p>\n </div>\n } @else {\n <div class=\"at-tax-treemap-container\">\n @for (cell of TaxTreemapCells; track $index) {\n <div class=\"at-tax-treemap-cell at-tax-treemap-cell-clickable\" [class]=\"cell.ColorClass\"\n [style.grid-row]=\"cell.RowSpan > 1 ? 'span ' + cell.RowSpan : ''\"\n (click)=\"OpenTreemapDrillIn(cell)\">\n <span class=\"at-tax-cell-name\">{{ cell.Name }}</span>\n <span class=\"at-tax-cell-count\">{{ cell.ItemCount }} items</span>\n </div>\n }\n </div>\n }\n\n <!-- Treemap Drill-In Panel -->\n @if (ShowTreemapDrillIn && TreemapDrillInNode) {\n <div class=\"at-tax-drillin-overlay\" (click)=\"CloseTreemapDrillIn()\">\n <div class=\"at-tax-drillin-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-tax-drillin-header\">\n <h3><i class=\"fa-solid fa-tag\"></i> {{ TreemapDrillInNode.Name }}</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseTreemapDrillIn()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-tax-drillin-body\">\n <div class=\"at-tax-stats-row\">\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TreemapDrillInNode.ItemCount }}</div>\n <div class=\"at-tax-stat-label\">Items Tagged</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TreemapDrillInNode.AvgWeight.toFixed(2) }}</div>\n <div class=\"at-tax-stat-label\">Avg Weight</div>\n </div>\n <div class=\"at-tax-stat-item\">\n <div class=\"at-tax-stat-value\">{{ TreemapDrillInNode.Children.length }}</div>\n <div class=\"at-tax-stat-label\">Children</div>\n </div>\n </div>\n\n @if (TreemapDrillInNode.Children.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Child Tags</div>\n <div class=\"at-tax-child-chips\">\n @for (child of TreemapDrillInNode.Children; track child.ID) {\n <span class=\"at-tax-child-chip\">{{ child.Name }} <span class=\"at-tax-chip-count\">{{ child.ItemCount }}</span></span>\n }\n </div>\n </div>\n }\n\n @if (TaxRecentItems.length > 0) {\n <div class=\"at-tax-detail-section\">\n <div class=\"at-tax-section-title\">Recently Tagged Items</div>\n <div class=\"at-tax-recent-list\">\n @for (item of TaxRecentItems; track $index) {\n <div class=\"at-tax-recent-item\">\n <div class=\"at-tax-recent-icon\"><i [class]=\"item.Icon\"></i></div>\n <div class=\"at-tax-recent-name\">{{ item.Name }}</div>\n <div class=\"at-tax-recent-weight\">{{ item.Weight.toFixed(2) }}</div>\n <div class=\"at-tax-recent-date\">{{ item.Date }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"at-tax-drillin-footer\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"DrillInToTreeView(TreemapDrillInNode)\">\n <i class=\"fa-solid fa-sitemap\"></i> View in Tree\n </button>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- \u2550\u2550 SUB-TAB 5: AUDIT LOG \u2550\u2550 -->\n @if (TaxSubTab === 'audit') {\n <div class=\"at-tax-audit-filters\">\n <span class=\"at-tax-audit-filter-label\">Filter</span>\n <div class=\"at-tax-audit-checkbox-group\">\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('created')\" (change)=\"ToggleTaxAuditFilter('created')\"> Created\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('merged')\" (change)=\"ToggleTaxAuditFilter('merged')\"> Merged\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('moved')\" (change)=\"ToggleTaxAuditFilter('moved')\"> Moved\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('deleted')\" (change)=\"ToggleTaxAuditFilter('deleted')\"> Deleted\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('renamed')\" (change)=\"ToggleTaxAuditFilter('renamed')\"> Renamed\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('deprecated')\" (change)=\"ToggleTaxAuditFilter('deprecated')\"> Deprecated\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('split')\" (change)=\"ToggleTaxAuditFilter('split')\"> Split\n </label>\n <label class=\"at-tax-audit-checkbox\">\n <input type=\"checkbox\" [checked]=\"TaxAuditFilterTypes.has('reactivated')\" (change)=\"ToggleTaxAuditFilter('reactivated')\"> Reactivated\n </label>\n </div>\n </div>\n\n @if (GetFilteredAuditEvents().length === 0) {\n <div class=\"at-empty-state\">\n <i class=\"fa-solid fa-scroll\"></i>\n <p>No audit events match the current filters</p>\n </div>\n }\n\n <div class=\"at-tax-audit-timeline\">\n @for (event of GetFilteredAuditEvents(); track $index) {\n <div class=\"at-tax-audit-event\">\n <div class=\"at-tax-audit-event-icon\" [class]=\"event.Type\">\n <i [class]=\"GetTaxAuditIcon(event.Type)\"></i>\n </div>\n <div class=\"at-tax-audit-event-body\">\n <div class=\"at-tax-audit-event-desc\">\n {{ event.Description }} <span class=\"at-tax-tag-ref\">{{ event.TagRef }}</span>\n </div>\n <div class=\"at-tax-audit-event-meta\">\n <span>{{ event.User }}</span>\n <span>{{ event.Timestamp }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- TAB: SUGGESTIONS \u2014 server-driven inbox -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'suggestions') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Suggestions Inbox</div>\n <div class=\"at-page-subtitle\">{{ SuggestionRows.length }} pending \u00B7 select rows for bulk approve / reject</div>\n </div>\n <div class=\"at-page-actions\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"loadSuggestions()\"><i class=\"fa-solid fa-arrows-rotate\"></i> Refresh</button>\n <button class=\"at-action-btn at-primary-btn\" (click)=\"RunHealthNow()\" [disabled]=\"HealthRunning\">\n @if (HealthRunning) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Running\u2026 }\n @else { <i class=\"fa-solid fa-heart-pulse\"></i> Run Tag Health }\n </button>\n </div>\n </div>\n\n <div class=\"at-page-body\">\n <div class=\"sg-shell\">\n <div class=\"sg-main\">\n <div class=\"sg-toolbar\">\n <input class=\"at-search-input\" style=\"width: 280px;\" placeholder=\"Search proposed name, source text\u2026\"\n [(ngModel)]=\"SuggestionSearch\" (input)=\"applySuggestionFilters()\" />\n <select class=\"at-search-input\" style=\"width: 200px;\"\n [(ngModel)]=\"SuggestionFilterReason\" (change)=\"applySuggestionFilters()\">\n <option value=\"\">All reasons</option>\n @for (r of ReasonOptions; track r) { <option [value]=\"r\">{{ r }}</option> }\n </select>\n <input class=\"at-search-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\"\n style=\"width: 100px;\" placeholder=\"Min score\"\n [ngModel]=\"SuggestionFilterMinScore\"\n (ngModelChange)=\"OnMinScoreChange($event)\" />\n <span style=\"flex: 1;\"></span>\n <span class=\"at-muted\" style=\"font-size: 12px;\">\n Showing <strong>{{ SuggestionRowsFiltered.length }} of {{ SuggestionRows.length }}</strong>\n </span>\n </div>\n\n @if (SelectedSuggestionCount() > 0) {\n <div class=\"sg-bulk-bar\">\n <strong>{{ SelectedSuggestionCount() }} selected</strong>\n <span style=\"flex: 1;\"></span>\n <button class=\"at-action-btn at-success-btn at-btn-sm\" (click)=\"BulkApprove()\" [disabled]=\"SuggestionBulkInProgress\">\n <i class=\"fa-solid fa-check\"></i> Approve all (auto-pick best)\n </button>\n <button class=\"at-action-btn at-danger-btn at-btn-sm\" (click)=\"BulkReject()\" [disabled]=\"SuggestionBulkInProgress\">\n <i class=\"fa-solid fa-xmark\"></i> Reject\n </button>\n </div>\n }\n\n <div class=\"sg-table-body\">\n @if (SuggestionRowsFiltered.length === 0) {\n <div class=\"at-empty-state\"><i class=\"fa-solid fa-inbox\"></i><p>No pending suggestions.</p></div>\n } @else {\n <table class=\"sg-table\">\n <thead>\n <tr>\n <th style=\"width: 30px;\">\n <input type=\"checkbox\"\n [checked]=\"SelectedSuggestionCount() === SuggestionRowsFiltered.length && SuggestionRowsFiltered.length > 0\"\n (change)=\"ToggleAllSuggestions($any($event.target).checked)\" />\n </th>\n <th>Proposed name</th>\n <th>Reason</th>\n <th>Best match</th>\n <th>Score</th>\n <th>Created</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (row of SuggestionRowsFiltered; track row.ID) {\n <tr [class.sg-row-checked]=\"row.selected\"\n [class.sg-row-selected]=\"SuggestionSelected && SuggestionSelected.ID === row.ID\"\n (click)=\"SelectSuggestion(row)\">\n <td><input type=\"checkbox\" [checked]=\"row.selected\" (click)=\"ToggleSuggestionSelected(row, $event)\" /></td>\n <td><strong>{{ row.ProposedName }}</strong></td>\n <td><span class=\"sg-reason {{ ReasonClass(row.Reason) }}\">{{ row.Reason }}</span></td>\n <td>\n @if (row.BestMatchName) {\n {{ row.BestMatchName }}\n <span class=\"at-muted\" style=\"font-size: 11px;\">{{ row.BestMatchPath }}</span>\n } @else {\n <span class=\"at-muted\">\u2014 no match \u2014</span>\n }\n </td>\n <td class=\"sg-score\">\n @if (row.BestMatchScore != null) {\n <span class=\"sg-score-bar\"><span [style.width.%]=\"row.BestMatchScore * 100\"></span></span>\n {{ row.BestMatchScore | number: '1.3-3' }}\n } @else {\n <span class=\"at-muted\">\u2014</span>\n }\n </td>\n <td class=\"at-muted\">{{ row.CreatedAt | date: 'short' }}</td>\n <td>\n @if (row.dispositionInProgress) {\n <span class=\"at-muted\" style=\"font-size: 11px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> {{ row.dispositionInProgress }}\u2026\n </span>\n } @else {\n <div class=\"sg-row-actions\">\n <button class=\"at-action-btn at-btn-xs\" title=\"Create as new tag\"\n (click)=\"DispositionSuggestion(row, 'create-new'); $event.stopPropagation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (row.BestMatchTagID) {\n <button class=\"at-action-btn at-primary-btn at-btn-xs\" title=\"Merge into best match\"\n (click)=\"DispositionSuggestion(row, 'merge'); $event.stopPropagation()\">\n <i class=\"fa-solid fa-code-merge\"></i>\n </button>\n }\n <button class=\"at-action-btn at-danger-btn at-btn-xs\" title=\"Reject\"\n (click)=\"DispositionSuggestion(row, 'reject'); $event.stopPropagation()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n\n @if (SuggestionSelected) {\n <aside class=\"sg-drawer\">\n <div class=\"sg-drawer-hd\">\n <div>\n <div style=\"font-weight: 600;\">\"{{ SuggestionSelected.ProposedName }}\"</div>\n <div class=\"at-muted\" style=\"font-size: 11px;\">{{ SuggestionSelected.CreatedAt | date: 'short' }}</div>\n </div>\n <button class=\"at-action-btn at-btn-xs\" (click)=\"CloseDrawer()\" title=\"Close\" aria-label=\"Close\"><i class=\"fa-solid fa-xmark\"></i></button>\n </div>\n <div class=\"sg-drawer-bd\">\n <span class=\"sg-reason {{ ReasonClass(SuggestionSelected.Reason) }}\">\n {{ SuggestionSelected.Reason }}\n @if (SuggestionSelected.BestMatchScore != null) { \u00B7 {{ SuggestionSelected.BestMatchScore | number: '1.3-3' }} }\n </span>\n\n @if (SuggestionSelected.BestMatchTagID) {\n <h4>Proposes merge into</h4>\n <div class=\"sg-candidate\">\n <div style=\"flex: 1;\">\n <div style=\"font-weight: 600;\">{{ SuggestionSelected.BestMatchName }}</div>\n <div class=\"at-muted\" style=\"font-size: 11px;\">{{ SuggestionSelected.BestMatchPath }}</div>\n </div>\n </div>\n }\n\n @if (SuggestionSelected.SourceText) {\n <h4>Source text</h4>\n <p class=\"sg-preview\">\"{{ SuggestionSelected.SourceText }}\"</p>\n }\n\n <h4>If approved</h4>\n <p class=\"sg-preview\">\n @if (SuggestionSelected.BestMatchTagID) {\n Re-point any free-text ContentItemTag rows whose Tag matches \"<strong>{{ SuggestionSelected.ProposedName }}</strong>\" to <strong>{{ SuggestionSelected.BestMatchName }}</strong>, add it as a synonym (Source: Merged), and mark the suggestion as Merged.\n } @else {\n Create a new tag named \"<strong>{{ SuggestionSelected.ProposedName }}</strong>\" (subject to ValidateAutoGrow), inherit parent scope when applicable, and re-point any matching free-text ContentItemTag rows.\n }\n </p>\n </div>\n <div class=\"sg-drawer-ft\">\n @if (SuggestionSelected.BestMatchTagID) {\n <button class=\"at-action-btn at-primary-btn\" (click)=\"DispositionSuggestion(SuggestionSelected!, 'merge')\"\n [disabled]=\"!!SuggestionSelected.dispositionInProgress\">\n <i class=\"fa-solid fa-code-merge\"></i> Merge\n </button>\n }\n <button class=\"at-action-btn\" (click)=\"DispositionSuggestion(SuggestionSelected!, 'create-new')\"\n [disabled]=\"!!SuggestionSelected.dispositionInProgress\">\n <i class=\"fa-solid fa-plus\"></i> Create as new\n </button>\n <button class=\"at-action-btn at-danger-btn\" (click)=\"DispositionSuggestion(SuggestionSelected!, 'reject')\"\n [disabled]=\"!!SuggestionSelected.dispositionInProgress\">\n <i class=\"fa-solid fa-xmark\"></i> Reject\n </button>\n </div>\n </aside>\n }\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- TAB: HEALTH \u2014 Tag Health 3-card summary -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ActiveTab === 'health') {\n <div class=\"at-page-header\">\n <div>\n <div class=\"at-page-title\">Tag Health</div>\n <div class=\"at-page-subtitle\">Automated signals about taxonomy quality</div>\n </div>\n <div class=\"at-page-actions\">\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"RebuildEmbeddings()\" [disabled]=\"RebuildEmbeddingsRunning\">\n @if (RebuildEmbeddingsRunning) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Rebuilding\u2026 }\n @else { <i class=\"fa-solid fa-rotate\"></i> Rebuild stale embeddings }\n </button>\n <button class=\"at-action-btn at-primary-btn\" (click)=\"RunHealthNow()\" [disabled]=\"HealthRunning\">\n @if (HealthRunning) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Running\u2026 }\n @else { <i class=\"fa-solid fa-play\"></i> Run now }\n </button>\n </div>\n </div>\n\n <div class=\"health-shell\">\n <div class=\"runbar\">\n <div class=\"stat\">\n <div class=\"l\">Last run</div>\n <div class=\"v\">{{ LastHealthSummary.runAt ? (LastHealthSummary.runAt | date: 'short') : '\u2014' }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"l\">Tags scanned</div>\n <div class=\"v\">{{ tagsRaw.length }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"l\">Issues enqueued (last run)</div>\n <div class=\"v\">{{ LastHealthSummary.mergeCount + LastHealthSummary.lowUsageCount + LastHealthSummary.wideNodeCount }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"l\">Pending suggestions</div>\n <div class=\"v\">{{ PendingSuggestionCount }}</div>\n </div>\n <span class=\"grow\"></span>\n <div class=\"stat\">\n <div class=\"l\">Last duration</div>\n <div class=\"v\">{{ LastHealthSummary.durationMs ? (LastHealthSummary.durationMs + 'ms') : '\u2014' }}</div>\n </div>\n </div>\n\n <div class=\"health-cards\">\n <div class=\"h-card merge\">\n <div class=\"top\">\n <div class=\"ic\"><i class=\"fa-solid fa-code-merge\"></i></div>\n <div>\n <div class=\"name\">Merge candidates</div>\n <h3>Likely duplicate tags</h3>\n </div>\n </div>\n <div class=\"big\">{{ LastHealthSummary.mergeCount }}</div>\n <p class=\"sub\">Pairs with high embedding cosine + name similarity. Approving merges the source into the target and re-points existing ContentItemTag rows.</p>\n <div class=\"ft\">\n <button class=\"at-action-btn at-primary-btn at-btn-sm\" (click)=\"SwitchTab('suggestions'); SuggestionFilterReason = 'MergeCandidate'; applySuggestionFilters()\">\n Open in Suggestions\n </button>\n </div>\n </div>\n\n <div class=\"h-card lowusage\">\n <div class=\"top\">\n <div class=\"ic\"><i class=\"fa-solid fa-leaf\"></i></div>\n <div>\n <div class=\"name\">Low usage</div>\n <h3>Deprecation candidates</h3>\n </div>\n </div>\n <div class=\"big\">{{ LastHealthSummary.lowUsageCount }}</div>\n <p class=\"sub\">Active tags used fewer than the threshold over the lookback window. Often abandoned imports or finished-project tags.</p>\n <div class=\"ft\">\n <button class=\"at-action-btn at-primary-btn at-btn-sm\" (click)=\"SwitchTab('suggestions'); SuggestionFilterReason = 'LowUsage'; applySuggestionFilters()\">\n Review\n </button>\n </div>\n </div>\n\n <div class=\"h-card widenode\">\n <div class=\"top\">\n <div class=\"ic\"><i class=\"fa-solid fa-tree\"></i></div>\n <div>\n <div class=\"name\">Wide nodes</div>\n <h3>Parents with too many children</h3>\n </div>\n </div>\n <div class=\"big\">{{ LastHealthSummary.wideNodeCount }}</div>\n <p class=\"sub\">Parents whose direct-child count exceeds <strong>MaxChildren</strong> (or the implicit threshold {{ HealthThresholds.maxImplicitChildren }} when no cap is set).</p>\n <div class=\"ft\">\n <button class=\"at-action-btn at-primary-btn at-btn-sm\" (click)=\"SwitchTab('suggestions'); SuggestionFilterReason = 'WideNode'; applySuggestionFilters()\">\n Review\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"threshold-form\">\n <h3>Health-job thresholds</h3>\n <div class=\"grid\">\n <div class=\"field\"><label>Merge: min co-occurrence</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" [(ngModel)]=\"HealthThresholds.minCoOccurrence\" />\n <span class=\"at-hint\">Pairs must appear together in \u2265 this many items.</span>\n </div>\n <div class=\"field\"><label>Merge: min embedding cosine</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" max=\"1\" step=\"0.01\" [(ngModel)]=\"HealthThresholds.minEmbeddingSimilarity\" />\n </div>\n <div class=\"field\"><label>Merge: min name similarity</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" max=\"1\" step=\"0.05\" [(ngModel)]=\"HealthThresholds.minNameSimilarity\" />\n <span class=\"at-hint\">Dice's-coefficient bigram similarity.</span>\n </div>\n <div class=\"field\"><label>Low usage: max usage</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" [(ngModel)]=\"HealthThresholds.maxUsage\" />\n </div>\n <div class=\"field\"><label>Wide node: max implicit children</label>\n <input class=\"at-search-input\" type=\"number\" min=\"0\" [(ngModel)]=\"HealthThresholds.maxImplicitChildren\" />\n <span class=\"at-hint\">Used when a tag has no explicit MaxChildren cap.</span>\n </div>\n </div>\n </div>\n\n <div class=\"run-history\">\n <div class=\"run-history-hd\">\n <h3>Run history</h3>\n <span class=\"at-muted\" style=\"font-size: 11px;\">last {{ HealthRunHistory.length }} runs</span>\n </div>\n @if (HealthRunHistory.length === 0) {\n <div class=\"at-empty-state\" style=\"padding: 32px;\"><i class=\"fa-solid fa-clock-rotate-left\"></i><p>No runs yet.</p></div>\n } @else {\n <table>\n <thead>\n <tr>\n <th>When</th><th>Trigger</th><th>Tags scanned</th><th>Merge</th><th>Low usage</th><th>Wide node</th><th>Total</th><th>Duration</th>\n </tr>\n </thead>\n <tbody>\n @for (run of HealthRunHistory; track run.When) {\n <tr>\n <td class=\"at-muted\">{{ run.When | date: 'short' }}</td>\n <td>{{ run.Trigger }}</td>\n <td>{{ run.TagsScanned }}</td>\n <td>{{ run.Merge }}</td>\n <td>{{ run.LowUsage }}</td>\n <td>{{ run.WideNode }}</td>\n <td><strong>{{ run.Merge + run.LowUsage + run.WideNode }}</strong></td>\n <td>{{ run.DurationMs }}ms</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n }\n\n <!-- end @if (!IsLoading) -->\n }\n\n </div>\n <!-- end at-main-area -->\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 ITEM DETAIL SLIDE-IN \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowItemDetail && SelectedFeedItem) {\n <div class=\"at-slide-overlay\" (click)=\"CloseItemDetail()\"></div>\n <div class=\"at-slide-panel at-detail-panel\">\n <div class=\"at-slide-header\">\n <h3><i class=\"fa-solid fa-file-lines\"></i> Content Item</h3>\n <button class=\"at-slide-close\" aria-label=\"Close item detail\" (click)=\"CloseItemDetail()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n <div class=\"at-slide-body\">\n <!-- Header -->\n <div class=\"at-detail-item-header\">\n <h4 class=\"at-detail-item-name\">{{ SelectedFeedItem.Name }}</h4>\n <div class=\"at-detail-badges\">\n <span class=\"at-detail-badge at-detail-badge-source\">{{ SelectedFeedItem.SourceName }}</span>\n @if (SelectedFeedItem.RequiresContentType) {\n <span class=\"at-detail-badge at-detail-badge-type\">{{ SelectedFeedItem.ContentTypeName }}</span>\n @if (SelectedFeedItem.FileTypeName) {\n <span class=\"at-detail-badge at-detail-badge-file\"><i class=\"fa-solid fa-file\"></i> {{ SelectedFeedItem.FileTypeName }}</span>\n }\n }\n </div>\n </div>\n\n <!-- URL -->\n @if (SelectedFeedItem.URL) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">URL</div>\n <a [href]=\"SelectedFeedItem.URL\" target=\"_blank\" class=\"at-detail-link\">\n {{ SelectedFeedItem.URL }}\n <i class=\"fa-solid fa-external-link-alt\" style=\"font-size: 0.65rem; margin-left: 4px;\"></i>\n </a>\n </div>\n }\n\n <!-- Text Preview -->\n @if (SelectedFeedItem.TextContent) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Content Preview</div>\n <div class=\"at-detail-text-preview\">{{ SelectedFeedItem.TextContent }}</div>\n </div>\n }\n\n <!-- Tags (weighted) -->\n @if (SelectedFeedItem.Tags.length > 0) {\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Tags ({{ SelectedFeedItem.Tags.length }})</div>\n <div class=\"at-detail-tags\">\n @for (wt of SelectedFeedItem.Tags; track wt.Tag) {\n <span class=\"at-tag-pill at-tag-weighted\" [style.font-size]=\"TagFontSize(wt.Weight)\">\n {{ wt.Tag }}\n <span class=\"at-tag-weight\">{{ FormatWeight(wt.Weight) }}</span>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Metadata -->\n <div class=\"at-detail-section\">\n <div class=\"at-detail-section-label\">Metadata</div>\n <div class=\"at-detail-meta-grid\">\n @if (SelectedFeedItem.Checksum) {\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Checksum</span>\n <span class=\"at-detail-meta-value at-detail-meta-mono\">{{ SelectedFeedItem.Checksum }}</span>\n </div>\n }\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Created</span>\n <span class=\"at-detail-meta-value\">{{ SelectedFeedItem.CreatedAt }}</span>\n </div>\n <div class=\"at-detail-meta-row\">\n <span class=\"at-detail-meta-key\">Updated</span>\n <span class=\"at-detail-meta-value\">{{ SelectedFeedItem.UpdatedAt }}</span>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"at-detail-actions\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"OpenRecordFromItem(SelectedFeedItem)\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open Record\n </button>\n <button class=\"at-action-btn at-secondary-btn\" disabled>\n <i class=\"fa-solid fa-magnifying-glass\"></i> See Similar Items\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 CONFIRMATION DIALOG \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowConfirmDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"ConfirmDialogCancel()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ConfirmDialogTitle }}</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"ConfirmDialogCancel()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <p class=\"at-confirm-message\">{{ ConfirmDialogMessage }}</p>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-danger-btn\" (click)=\"ConfirmDialogAccept()\">\n <i class=\"fa-solid fa-check\"></i> Confirm\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"ConfirmDialogCancel()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 SPLIT DIALOG \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowSplitDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseSplitDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-code-branch\"></i> Split Tag</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseSplitDialog()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <div class=\"at-schedule-field\">\n <label>New tag names (comma-separated)</label>\n <input type=\"text\" class=\"mj-input\" style=\"width: 100%;\"\n [(ngModel)]=\"SplitChildNames\"\n placeholder=\"Tag A, Tag B, Tag C\" />\n </div>\n <p class=\"at-confirm-message\">New tags will be created as siblings of the original tag under the same parent.</p>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"ExecuteSplit()\" [disabled]=\"!SplitChildNames.trim()\">\n <i class=\"fa-solid fa-code-branch\"></i> Create Tags\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseSplitDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550 MOVE DIALOG \u2550\u2550\u2550\u2550\u2550\u2550 -->\n @if (ShowCreateTagDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseCreateTagDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-plus\"></i> Create Tag</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseCreateTagDialog()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <div class=\"at-tax-create-context\">{{ CreateTagParentLabel }}</div>\n <div class=\"at-schedule-field\">\n <label>Name</label>\n <input type=\"text\" class=\"mj-input\" style=\"width: 100%;\" [(ngModel)]=\"CreateTagName\"\n placeholder=\"Tag name\" (keydown.enter)=\"SaveNewTag()\">\n </div>\n <div class=\"at-schedule-field\">\n <label>Description (optional)</label>\n <textarea class=\"mj-textarea\" rows=\"3\" style=\"width: 100%;\" [(ngModel)]=\"CreateTagDescription\"\n placeholder=\"Brief description of this tag\"></textarea>\n </div>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"SaveNewTag()\" [disabled]=\"!CreateTagName.trim()\">\n <i class=\"fa-solid fa-check\"></i> Create\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseCreateTagDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n @if (ShowMoveDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseMoveDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-arrows-up-down\"></i> Move Tag</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseMoveDialog()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <div class=\"at-schedule-field\">\n <label>New parent tag</label>\n <select class=\"mj-input\" style=\"width: 100%;\" [(ngModel)]=\"MoveNewParentID\">\n <option [ngValue]=\"null\">(Root level &mdash; no parent)</option>\n @for (opt of GetMoveTargetOptions(); track opt.ID) {\n <option [ngValue]=\"opt.ID\">{{ '\\u00A0\\u00A0'.repeat(opt.Depth) }}{{ opt.Name }}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"ExecuteMove()\">\n <i class=\"fa-solid fa-check\"></i> Move\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseMoveDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n @if (ShowMergeIntoDialog) {\n <div class=\"at-schedule-overlay\" (click)=\"CloseMergeIntoDialog()\">\n <div class=\"at-schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"at-schedule-dialog-header\">\n <h3><i class=\"fa-solid fa-compress\"></i> Merge \"{{ MergeSourceTag?.Name }}\" Into...</h3>\n <button class=\"at-schedule-dialog-close\" (click)=\"CloseMergeIntoDialog()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"at-schedule-dialog-body\">\n <p style=\"font-size: 0.85rem; color: var(--mj-text-secondary); margin: 0 0 12px;\">\n All tagged items will be moved to the target tag, then \"{{ MergeSourceTag?.Name }}\" will be deleted.\n </p>\n <div class=\"at-schedule-field\">\n <label>Merge into</label>\n <mj-combobox\n [Data]=\"MergeTargetData\"\n TextField=\"Label\"\n ValueField=\"ID\"\n [Filterable]=\"true\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Search and select a tag...\"\n (ValueChange)=\"OnMergeTargetSelected($event)\">\n </mj-combobox>\n </div>\n </div>\n <div class=\"at-schedule-dialog-footer\">\n <button class=\"at-action-btn at-primary-btn\" (click)=\"ExecuteMergeInto()\" [disabled]=\"!MergeTargetID || IsMerging\">\n @if (IsMerging) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Merging... } @else { <i class=\"fa-solid fa-compress\"></i> Merge }\n </button>\n <button class=\"at-action-btn at-secondary-btn\" (click)=\"CloseMergeIntoDialog()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n\n </div>\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ============================================================\n Content Autotagging Dashboard\n All colors use MJ design tokens \u2014 no hardcoded hex values.\n All classes prefixed with at- to prevent leaking (ViewEncapsulation.None).\n ============================================================ */\n\n/* \u2500\u2500 Root layout \u2500\u2500 */\n\n.at-dashboard {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 LEFT NAV \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-left-nav {\n width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n\n.at-left-nav-header {\n padding: 16px 16px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-left-nav-header h2 {\n font-size: 0.95rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n color: var(--mj-text-primary);\n}\n\n.at-left-nav-header h2 i {\n color: var(--mj-brand-primary);\n}\n\n.at-left-nav-items {\n flex: 1;\n padding: 8px;\n overflow-y: auto;\n}\n\n.at-nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 0.82rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.12s ease;\n margin-bottom: 2px;\n}\n\n.at-nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.at-nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-nav-item i {\n width: 18px;\n text-align: center;\n font-size: 0.8rem;\n}\n\n.at-nav-badge {\n margin-left: auto;\n background: var(--mj-bg-surface-sunken);\n padding: 1px 7px;\n border-radius: 10px;\n font-size: 0.65rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.at-nav-item.active .at-nav-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-nav-badge-live {\n background: var(--mj-status-success-bg) !important;\n color: var(--mj-status-success-text) !important;\n}\n\n.at-nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 12px;\n}\n\n.at-left-nav-footer {\n padding: 12px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-run-pipeline-btn {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px;\n border: none;\n border-radius: 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.at-run-pipeline-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-run-pipeline-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 MAIN CONTENT AREA \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-main-area {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.at-loading-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n\n.at-page-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-page-title {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-page-subtitle {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-page-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.at-page-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 16px 20px;\n min-height: 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SHARED COMPONENTS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border: 1px solid;\n border-radius: 7px;\n cursor: pointer;\n font-size: 0.78rem;\n font-weight: 500;\n transition: all 0.15s ease;\n}\n\n.at-primary-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-primary-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.at-primary-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.at-secondary-btn {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.at-secondary-btn:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.at-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-card-title {\n font-size: 0.82rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-primary);\n}\n\n.at-card-title i {\n color: var(--mj-brand-primary);\n font-size: 0.75rem;\n}\n\n.at-card-body {\n padding: 0;\n}\n\n.at-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 32px 16px;\n color: var(--mj-text-disabled);\n}\n\n.at-empty-state i {\n font-size: 28px;\n}\n\n.at-empty-state p {\n margin: 0;\n font-size: 13px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 KPI STRIP \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-kpi-strip {\n display: flex;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.at-kpi-card {\n flex: 1;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.at-kpi-value {\n font-size: 1.4rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-kpi-error-value {\n color: var(--mj-status-error-text);\n}\n\n.at-kpi-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-kpi-trend {\n font-size: 0.68rem;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--mj-text-muted);\n}\n\n.at-kpi-trend.up {\n color: var(--mj-status-success-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 PIPELINE TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-layout {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.at-pipeline-center {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n min-height: 0;\n}\n\n.at-pipeline-right {\n width: 320px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Pipeline Stages */\n\n.at-pipeline-stages {\n display: flex;\n gap: 0;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 16px;\n}\n\n.at-pipeline-stage {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.at-pipeline-stage-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 0.85rem;\n}\n\n.stage-idle .at-pipeline-stage-icon {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.stage-active .at-pipeline-stage-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.stage-complete .at-pipeline-stage-icon {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n@keyframes at-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 30%, transparent); }\n 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent); }\n}\n\n.at-pipeline-stage-name {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.at-pipeline-stage-count {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n}\n\n.at-pipeline-arrow {\n width: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 0.6rem;\n}\n\n.at-stage-connector {\n width: 32px;\n height: 2px;\n background: var(--mj-border-default);\n transition: background 0.4s ease;\n}\n\n.at-stage-connector.connector-complete {\n background: var(--mj-status-success);\n}\n\n/* Progress section */\n\n.at-progress-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 10px 16px;\n}\n\n.at-progress-header {\n display: flex;\n justify-content: space-between;\n font-size: 0.75rem;\n margin-bottom: 4px;\n}\n\n.at-progress-stage-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.at-progress-pct {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-progress-bar {\n height: 4px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.at-progress-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.at-progress-current {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n margin-top: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-progress-fill-paused {\n background: var(--mj-status-warning);\n animation: pulse-paused 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-paused {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n}\n\n.at-pipeline-controls {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n justify-content: flex-end;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\n}\n\n.at-danger-btn:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n border-color: var(--mj-status-error-text);\n}\n\n/* Feed items */\n\n.at-feed-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-feed-item:last-child {\n border-bottom: none;\n}\n\n.at-feed-status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-feed-status-dot.complete {\n background: var(--mj-status-success);\n}\n\n.at-feed-status-dot.processing {\n background: var(--mj-brand-primary);\n animation: at-pulse 1.5s infinite;\n}\n\n.at-feed-status-dot.error {\n background: var(--mj-status-error);\n}\n\n.at-feed-item-name {\n flex: 1;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-feed-item-source {\n color: var(--mj-text-muted);\n font-size: 0.7rem;\n min-width: 100px;\n}\n\n.at-feed-item-tags {\n display: flex;\n gap: 4px;\n}\n\n.at-feed-tag {\n padding: 1px 6px;\n border-radius: 3px;\n font-size: 0.62rem;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-feed-item-time {\n color: var(--mj-text-muted);\n font-size: 0.68rem;\n white-space: nowrap;\n min-width: 60px;\n text-align: right;\n}\n\n/* Source mini cards (right panel) */\n\n.at-source-mini {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-source-mini:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-source-mini:last-child {\n border-bottom: none;\n}\n\n.at-source-mini-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-source-mini-info {\n flex: 1;\n min-width: 0;\n}\n\n.at-source-mini-name {\n font-size: 0.78rem;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.at-source-mini-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-mini-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-source-mini-status.active {\n background: var(--mj-status-success);\n}\n\n.at-source-mini-status.error {\n background: var(--mj-status-error);\n}\n\n.at-source-mini-status.inactive {\n background: var(--mj-text-disabled);\n}\n\n/* Tag cloud card */\n\n.at-tag-cloud-card {\n padding: 16px;\n}\n\n.at-tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n.at-tag-pill {\n padding: 4px 12px;\n border-radius: 14px;\n font-size: 0.72rem;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-tag-pill:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tag-weighted {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tag-weight {\n font-size: 0.6rem;\n opacity: 0.6;\n font-weight: 400;\n}\n\n.at-tag-row-clickable {\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-tag-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.at-tag-pill.large {\n font-size: 0.85rem;\n padding: 5px 14px;\n}\n\n.at-tag-pill.small {\n font-size: 0.65rem;\n padding: 3px 8px;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SOURCES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-sources-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 12px;\n}\n\n.at-source-card-full {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.at-source-card-full:hover {\n border-color: var(--mj-border-default);\n}\n\n.at-source-card-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 12px;\n}\n\n.at-source-card-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.at-source-card-title {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-card-type {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-status {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 500;\n}\n\n.at-source-card-status.active {\n color: var(--mj-status-success-text);\n}\n\n.at-source-card-status.error {\n color: var(--mj-status-error-text);\n}\n\n.at-source-card-status.inactive {\n color: var(--mj-text-disabled);\n}\n\n.at-source-card-url {\n font-size: 0.7rem;\n color: var(--mj-brand-primary);\n margin-bottom: 10px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-source-card-stats {\n display: flex;\n gap: 16px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.at-source-stat {\n display: flex;\n flex-direction: column;\n}\n\n.at-source-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-source-stat-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-source-card-actions {\n display: flex;\n gap: 6px;\n margin-top: 10px;\n}\n\n.at-source-action-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.7rem;\n cursor: pointer;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n transition: all 0.12s ease;\n}\n\n.at-source-action-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-source-delete-btn:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\n}\n\n.at-add-source-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-source-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-source-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CONTENT TYPES TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-ct-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 12px;\n}\n\n.at-ct-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 16px;\n}\n\n.at-ct-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.at-ct-card-name {\n font-size: 0.9rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-ct-card-model {\n font-size: 0.68rem;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-ct-field {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-ct-field:last-child {\n border-bottom: none;\n}\n\n.at-ct-field-label {\n color: var(--mj-text-muted);\n}\n\n.at-ct-field-value {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-primary);\n}\n\n.at-ct-tag-range i {\n color: var(--mj-brand-primary);\n}\n\n.at-ct-tag-range-bar {\n flex: 1;\n height: 6px;\n background: var(--mj-bg-surface);\n border-radius: 3px;\n position: relative;\n}\n\n.at-ct-tag-range-fill {\n position: absolute;\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n.at-ct-range-suffix {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 TAG LIBRARY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tag-lib-layout {\n display: flex;\n gap: 16px;\n}\n\n.at-tag-lib-main {\n flex: 1;\n}\n\n.at-tag-lib-sidebar {\n width: 280px;\n flex-shrink: 0;\n}\n\n.at-tag-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-tag-table th {\n text-align: left;\n padding: 8px 12px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-tag-table td {\n padding: 10px 12px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tag-name-cell {\n font-weight: 600;\n}\n\n.at-tag-bar {\n width: 80px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n display: inline-block;\n vertical-align: middle;\n}\n\n.at-tag-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n}\n\n/* Weight indicator in tag table */\n.at-weight-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-weight-bar {\n width: 50px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-weight-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.2s ease;\n}\n\n.at-weight-bar-fill.at-weight-high {\n background: var(--mj-status-success);\n}\n\n.at-weight-bar-fill.at-weight-medium {\n background: var(--mj-status-warning);\n}\n\n.at-weight-bar-fill.at-weight-low {\n background: var(--mj-status-error);\n}\n\n.at-weight-value {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 28px;\n}\n\n.at-tags-by-source {\n font-size: 0.78rem;\n}\n\n.at-tag-source-row {\n display: flex;\n justify-content: space-between;\n padding: 5px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-tag-source-row:last-child {\n border-bottom: none;\n}\n\n.at-search-input {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n width: 200px;\n outline: none;\n}\n\n.at-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-search-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RUN HISTORY TAB \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-run-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.at-run-table th {\n text-align: left;\n padding: 10px 14px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-elevated);\n position: sticky;\n top: 0;\n z-index: 1;\n}\n\n.at-run-table td {\n padding: 12px 14px;\n font-size: 0.8rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n.at-run-table tr:hover td {\n background: var(--mj-bg-surface-hover);\n cursor: pointer;\n}\n\n.at-run-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-run-status-badge.complete {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-run-status-badge.failed {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-run-status-badge.running {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-run-duration {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n}\n\n.at-run-source-name {\n font-weight: 500;\n}\n\n.at-run-error-text {\n color: var(--mj-status-error-text);\n}\n\n.at-filter-select {\n padding: 7px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.78rem;\n outline: none;\n}\n\n.at-filter-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 SLIDE-IN FORM PANEL \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n}\n\n.at-slide-panel {\n position: fixed;\n right: 0;\n top: 0;\n bottom: 0;\n width: 420px;\n max-width: 100vw;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n}\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.at-slide-header h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n background: none;\n border: none;\n font-size: 1.1rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n}\n\n.at-slide-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-form-group {\n margin-bottom: 16px;\n}\n\n.at-form-label {\n display: block;\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n font-size: 0.82rem;\n outline: none;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.at-form-input::placeholder,\n.at-form-textarea::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-form-textarea {\n resize: vertical;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n margin-top: 24px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 RESPONSIVE \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n@media (max-width: 1100px) {\n .at-pipeline-layout {\n flex-direction: column;\n }\n\n .at-pipeline-right {\n width: 100%;\n flex-direction: row;\n }\n\n .at-tag-lib-layout {\n flex-direction: column;\n }\n\n .at-tag-lib-sidebar {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-left-nav {\n width: 180px;\n }\n\n .at-kpi-strip {\n flex-wrap: wrap;\n }\n\n .at-kpi-card {\n min-width: 140px;\n }\n\n .at-sources-grid {\n grid-template-columns: 1fr;\n }\n\n .at-ct-grid {\n grid-template-columns: 1fr;\n }\n\n .at-slide-panel {\n width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .at-left-nav {\n width: 56px;\n }\n\n .at-left-nav-header h2 {\n font-size: 0;\n }\n\n .at-left-nav-header h2 i {\n font-size: 1rem;\n }\n\n .at-nav-item {\n justify-content: center;\n padding: 10px;\n font-size: 0;\n }\n\n .at-nav-item i {\n font-size: 1rem;\n }\n\n .at-nav-badge {\n display: none;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n Slide-in Form Panel\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-slide-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.35);\n z-index: 9999;\n animation: at-fade-in 0.2s ease;\n}\n\n@keyframes at-fade-in { from { opacity: 0; } to { opacity: 1; } }\n\n.at-slide-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 420px;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 40px rgba(0, 0, 0, 0.4);\n z-index: 10000;\n display: flex;\n flex-direction: column;\n animation: at-slide-in 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes at-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n\n.at-slide-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.at-slide-header h3 {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-slide-close {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n transition: all 0.15s ease;\n}\n\n.at-slide-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-slide-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.at-form-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-form-input,\n.at-form-select,\n.at-form-textarea {\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 7px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n outline: none;\n transition: border-color 0.15s ease;\n font-family: inherit;\n}\n\n.at-form-input:focus,\n.at-form-select:focus,\n.at-form-textarea:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.at-form-select {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M3 5l3 3 3-3'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 30px;\n}\n\n.at-form-textarea {\n resize: vertical;\n min-height: 70px;\n}\n\n.at-form-row {\n display: flex;\n gap: 12px;\n}\n\n.at-form-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-form-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* Also add empty state for Content Types (matching Sources) */\n.at-add-type-card {\n background: none;\n border: 2px dashed var(--mj-border-default);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 40px;\n cursor: pointer;\n transition: all 0.15s ease;\n color: var(--mj-text-muted);\n min-height: 200px;\n}\n\n.at-add-type-card:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-add-type-card i {\n font-size: 1.5rem;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORKED PIPELINE STAGES \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-pipeline-stages-forked {\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n.at-pipeline-fork {\n display: flex;\n align-items: center;\n gap: 0;\n flex: 2;\n}\n\n.at-pipeline-fork-lines {\n width: 28px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n position: relative;\n flex-shrink: 0;\n}\n\n.at-pipeline-fork-line {\n height: 2px;\n background: var(--mj-border-default);\n width: 100%;\n position: relative;\n}\n\n.at-pipeline-fork-line::before {\n content: '';\n position: absolute;\n width: 2px;\n height: 12px;\n background: var(--mj-border-default);\n left: 0;\n}\n\n.at-fork-top::before {\n bottom: 0;\n left: 0;\n}\n\n.at-fork-bottom::before {\n top: 0;\n left: 0;\n}\n\n.at-pipeline-fork-branches {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n}\n\n.at-pipeline-fork-branches .at-pipeline-stage {\n flex: none;\n padding: 6px 0;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE FEED ITEMS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-item-clickable {\n cursor: pointer;\n}\n\n.at-feed-item-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FEED SEARCH & PAGINATION \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-feed-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.at-feed-header-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-left: auto;\n}\n\n.at-feed-sort-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.68rem;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-feed-sort-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-feed-count {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n}\n\n.at-feed-search-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-search-icon {\n color: var(--mj-text-disabled);\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-feed-search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n outline: none;\n padding: 4px 0;\n min-width: 0;\n}\n\n.at-feed-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.at-feed-search-clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 9px;\n flex-shrink: 0;\n}\n\n.at-feed-search-clear:hover {\n background: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.at-feed-scroll-body {\n overflow-y: auto;\n min-height: 0;\n flex: 1;\n}\n\n.at-feed-item-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n overflow: hidden;\n}\n\n.at-feed-item-content .at-feed-item-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-feed-item-source-label {\n font-size: 0.7rem;\n font-weight: 500;\n color: var(--mj-brand-primary);\n}\n\n.at-feed-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n}\n\n.at-feed-pagination-label {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 CLICKABLE SOURCE CARDS \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-source-card-clickable {\n cursor: pointer;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 FORM HINT \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-form-hint {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n font-style: italic;\n margin-top: 2px;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 DETAIL PANEL (wider) \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-panel {\n width: 500px;\n}\n\n/* \u2500\u2500 Detail: Item header \u2500\u2500 */\n\n.at-detail-item-header {\n margin-bottom: 8px;\n}\n\n.at-detail-item-name {\n font-size: 1.05rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 6px 0;\n word-break: break-word;\n}\n\n.at-detail-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-detail-badge {\n padding: 2px 10px;\n border-radius: 10px;\n font-size: 0.7rem;\n font-weight: 600;\n}\n\n.at-detail-badge-source {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.at-detail-badge-type {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.at-detail-badge-file {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.at-detail-badge-status-active {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.at-detail-badge-status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.at-detail-badge-status-inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-disabled);\n}\n\n/* \u2500\u2500 Detail: Sections \u2500\u2500 */\n\n.at-detail-section {\n margin-bottom: 4px;\n}\n\n.at-detail-section-label {\n font-size: 0.72rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.at-detail-link {\n font-size: 0.8rem;\n color: var(--mj-brand-primary);\n text-decoration: none;\n word-break: break-all;\n}\n\n.at-detail-link:hover {\n text-decoration: underline;\n}\n\n/* \u2500\u2500 Detail: Text preview \u2500\u2500 */\n\n.at-detail-text-preview {\n max-height: 200px;\n overflow-y: auto;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n font-size: 0.78rem;\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n line-height: 1.5;\n}\n\n/* \u2500\u2500 Detail: Tags \u2500\u2500 */\n\n.at-detail-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n}\n\n/* \u2500\u2500 Detail: Meta grid \u2500\u2500 */\n\n.at-detail-meta-grid {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.at-detail-meta-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-detail-meta-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-meta-key {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n margin-right: 12px;\n}\n\n.at-detail-meta-value {\n color: var(--mj-text-primary);\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-meta-mono {\n font-family: 'SF Mono', 'Cascadia Code', 'Menlo', monospace;\n font-size: 0.72rem;\n}\n\n/* \u2500\u2500 Detail: Actions \u2500\u2500 */\n\n.at-detail-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 8px;\n}\n\n.at-detail-actions .at-action-btn {\n flex: 1;\n justify-content: center;\n}\n\n/* \u2500\u2500 Detail: Source header \u2500\u2500 */\n\n.at-detail-source-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n/* \u2500\u2500 Detail: Stats strip \u2500\u2500 */\n\n.at-detail-stats-strip {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-detail-stat {\n flex: 1;\n min-width: 60px;\n text-align: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 8px 6px;\n}\n\n.at-detail-stat-value {\n font-size: 1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-detail-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Detail: Content Library \u2500\u2500 */\n\n.at-detail-content-list {\n max-height: 250px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.at-detail-content-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.at-detail-content-item:last-child {\n border-bottom: none;\n}\n\n.at-detail-content-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-detail-content-item-name {\n flex: 1;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-detail-content-item-tags {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.at-detail-content-item-time {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* \u2500\u2500 Detail: Run history \u2500\u2500 */\n\n.at-detail-run-history {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.at-detail-run-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.75rem;\n}\n\n.at-detail-run-row:last-child {\n border-bottom: none;\n}\n\n.at-detail-run-time {\n color: var(--mj-text-secondary);\n flex: 1;\n}\n\n.at-detail-run-duration {\n color: var(--mj-text-muted);\n}\n\n.at-detail-run-items {\n color: var(--mj-text-muted);\n}\n\n@media (max-width: 600px) {\n .at-slide-panel {\n width: 100%;\n }\n\n .at-detail-panel {\n width: 100%;\n }\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n TAXONOMY GOVERNANCE TAB\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n/* \u2500\u2500 Sub-tab strip \u2500\u2500 */\n\n.at-tax-tab-strip {\n display: flex;\n border-bottom: 2px solid var(--mj-border-default);\n padding: 0 20px;\n gap: 0;\n flex-shrink: 0;\n}\n\n.at-tax-tab {\n padding: 10px 20px;\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: all 0.15s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-tax-tab:hover {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.at-tax-tab-badge {\n font-size: 0.62rem;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n}\n\n.at-tax-badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* \u2500\u2500 Tree View: Split layout \u2500\u2500 */\n\n.at-tax-split-view {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n height: calc(100vh - 320px);\n min-height: 400px;\n overflow: hidden;\n}\n\n.at-tax-tree-panel {\n width: 40%;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n}\n\n.at-tax-tree-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-toolbar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 0.8rem;\n transition: background 0.15s, color 0.15s;\n}\n\n.at-tax-toolbar-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-tax-toolbar-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-tree-body {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.at-tax-tree-node {\n padding: 6px 16px;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n cursor: pointer;\n transition: background 0.1s;\n line-height: 1.4;\n}\n\n.at-tax-tree-node:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-node-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n}\n\n.at-tax-node-drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n outline: 2px dashed var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.at-tax-node-multi-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.at-tax-tree-add-child {\n margin-left: auto;\n opacity: 0;\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 2px 6px;\n border-radius: 4px;\n transition: opacity 0.15s, color 0.15s, background 0.15s;\n}\n\n.at-tax-tree-node:hover .at-tax-tree-add-child {\n opacity: 1;\n}\n\n.at-tax-tree-add-child:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.at-tax-tree-checkbox {\n width: 14px;\n height: 14px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.at-tax-tree-saving-overlay {\n position: absolute;\n inset: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 75%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n backdrop-filter: blur(1px);\n}\n\n.at-tax-create-context {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n margin-bottom: 12px;\n padding: 6px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n}\n\n.at-tax-tree-arrow {\n width: 16px;\n font-size: 0.55rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n text-align: center;\n cursor: pointer;\n}\n\n.at-tax-arrow-collapsed::before {\n content: \"\\25B6\";\n}\n\n.at-tax-arrow-expanded::before {\n content: \"\\25BC\";\n}\n\n.at-tax-arrow-leaf {\n visibility: hidden;\n}\n\n.at-tax-health-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.at-tax-health-dot.green {\n background: var(--mj-status-success);\n}\n\n.at-tax-health-dot.yellow {\n background: var(--mj-status-warning);\n}\n\n.at-tax-health-dot.red {\n background: var(--mj-status-error);\n}\n\n.at-tax-tree-label {\n flex: 1;\n color: var(--mj-text-primary);\n}\n\n.at-tax-tree-label-selected {\n font-weight: 700;\n}\n\n.at-tax-tree-count {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-left: 4px;\n}\n\n/* \u2500\u2500 Details panel \u2500\u2500 */\n\n.at-tax-details-panel {\n width: 60%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.at-tax-details-header {\n padding: 20px 24px 0;\n}\n\n.at-tax-breadcrumb {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.at-tax-bc-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.at-tax-bc-link:hover {\n text-decoration: underline;\n}\n\n.at-tax-bc-sep {\n color: var(--mj-border-default);\n}\n\n.at-tax-bc-current {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.at-tax-details-title {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.at-tax-edit-icon {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n cursor: pointer;\n}\n\n.at-tax-edit-icon:hover {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-details-desc {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin-bottom: 16px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-tax-edit-form {\n margin-bottom: 16px;\n}\n\n/* \u2500\u2500 Stats row \u2500\u2500 */\n\n.at-tax-stats-row {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n padding: 0 24px;\n}\n\n.at-tax-stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n min-width: 72px;\n}\n\n.at-tax-stat-value {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-stat-date {\n font-size: 0.8rem;\n}\n\n.at-tax-stat-label {\n font-size: 0.62rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Action toolbar \u2500\u2500 */\n\n.at-tax-action-toolbar {\n display: flex;\n gap: 8px;\n padding: 0 24px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.at-tax-action-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-action-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n}\n\n/* \u2500\u2500 Detail sections \u2500\u2500 */\n\n.at-tax-detail-section {\n padding: 0 24px 20px;\n}\n\n.at-tax-section-title {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n margin-bottom: 10px;\n}\n\n.at-tax-child-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.at-tax-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.at-tax-child-chip:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.at-tax-chip-count {\n font-size: 0.6rem;\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n padding: 0 5px;\n border-radius: 8px;\n}\n\n/* \u2500\u2500 Recent items \u2500\u2500 */\n\n.at-tax-recent-list {\n list-style: none;\n}\n\n.at-tax-recent-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 0.78rem;\n}\n\n.at-tax-recent-item:last-child {\n border-bottom: none;\n}\n\n.at-tax-recent-icon {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.72rem;\n flex-shrink: 0;\n}\n\n.at-tax-recent-name {\n flex: 1;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-tax-recent-weight {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.at-tax-recent-date {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Health bar \u2500\u2500 */\n\n.at-tax-health-bar {\n display: flex;\n align-items: center;\n gap: 20px;\n padding: 12px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n margin-top: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-health-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-health-stat {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n}\n\n.at-tax-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n}\n\n.at-tax-dot-total {\n background: var(--mj-text-secondary);\n}\n\n.at-tax-dot-healthy {\n background: var(--mj-status-success);\n}\n\n.at-tax-dot-attention {\n background: var(--mj-status-warning);\n}\n\n.at-tax-dot-orphaned {\n background: var(--mj-status-error);\n}\n\n.at-tax-dot-duplicates {\n background: var(--mj-status-info);\n}\n\n.at-tax-health-value {\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-val-success {\n color: var(--mj-status-success);\n}\n\n.at-tax-val-warning {\n color: var(--mj-status-warning);\n}\n\n.at-tax-val-error {\n color: var(--mj-status-error);\n}\n\n.at-tax-val-info {\n color: var(--mj-status-info);\n}\n\n.at-tax-health-text {\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550 Duplicates sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-dup-stats-bar {\n display: flex;\n gap: 24px;\n margin-bottom: 16px;\n align-items: center;\n}\n\n.at-tax-dup-stat {\n font-size: 0.78rem;\n color: var(--mj-text-secondary);\n}\n\n.at-tax-dup-stat strong {\n font-size: 1.1rem;\n color: var(--mj-text-primary);\n margin-right: 4px;\n}\n\n.at-tax-dup-high strong {\n color: var(--mj-status-error);\n}\n\n.at-tax-dup-moderate strong {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-tax-dup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.at-tax-dup-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-card.at-tax-dup-high {\n border-left: 3px solid var(--mj-status-error);\n}\n\n.at-tax-dup-card.at-tax-dup-moderate {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.at-tax-dup-tag {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n min-width: 120px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n text-align: center;\n}\n\n.at-tax-dup-arrow {\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.at-tax-dup-similarity {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n min-width: 100px;\n}\n\n.at-tax-sim-bar-bg {\n width: 100%;\n height: 6px;\n background: var(--mj-border-default);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.at-tax-sim-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.3s;\n}\n\n.at-tax-sim-bar-fill.high {\n background: var(--mj-status-error);\n}\n\n.at-tax-sim-bar-fill.moderate {\n background: var(--mj-status-warning);\n}\n\n.at-tax-sim-percent {\n font-size: 0.78rem;\n font-weight: 700;\n}\n\n.at-tax-sim-percent.high {\n color: var(--mj-status-error);\n}\n\n.at-tax-sim-percent.moderate {\n color: var(--mj-status-warning);\n}\n\n.at-tax-dup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-tax-dup-btn {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s;\n white-space: nowrap;\n}\n\n.at-tax-dup-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-dup-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n/* \u2550\u2550\u2550\u2550 Orphans sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-orphan-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-orphan-count {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-desc {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-bulk {\n margin-left: auto;\n display: flex;\n gap: 8px;\n}\n\n.at-tax-bulk-btn {\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 0.72rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 5px;\n transition: all 0.15s;\n}\n\n.at-tax-bulk-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-bulk-danger:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.at-tax-orphan-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: 12px;\n}\n\n.at-tax-orphan-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.15s;\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-top: 3px solid var(--mj-status-error);\n}\n\n.at-tax-orphan-card:hover {\n border-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.at-tax-orphan-name {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-tax-orphan-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-stats {\n display: flex;\n gap: 12px;\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-stats strong {\n color: var(--mj-text-secondary);\n}\n\n.at-tax-orphan-dates {\n display: flex;\n justify-content: space-between;\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n}\n\n.at-tax-orphan-actions {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n}\n\n.at-tax-orphan-btn {\n flex: 1;\n padding: 5px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n font-size: 0.68rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n text-align: center;\n transition: all 0.15s;\n}\n\n.at-tax-orphan-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.at-tax-orphan-delete:hover {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n/* \u2550\u2550\u2550\u2550 Treemap sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-kpi-strip {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.at-tax-treemap-kpi {\n padding: 10px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 120px;\n}\n\n.at-tax-treemap-kpi-value {\n font-size: 1.2rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.at-tax-treemap-kpi-label {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.at-tax-treemap-container {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 8px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n grid-auto-rows: 80px;\n gap: 4px;\n min-height: 340px;\n}\n\n.at-tax-treemap-cell {\n border-radius: 6px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 0.78rem;\n cursor: pointer;\n transition: all 0.15s;\n position: relative;\n overflow: hidden;\n}\n\n.at-tax-treemap-cell:hover {\n transform: scale(1.02);\n z-index: 2;\n}\n\n.at-tax-cell-name {\n font-size: 0.78rem;\n}\n\n.at-tax-cell-count {\n font-size: 0.65rem;\n opacity: 0.85;\n font-weight: 400;\n}\n\n/* Treemap color families */\n.at-tm-blue-1 { background: color-mix(in srgb, var(--mj-brand-primary) 90%, black); }\n.at-tm-blue-2 { background: var(--mj-brand-primary); }\n.at-tm-blue-3 { background: color-mix(in srgb, var(--mj-brand-primary) 75%, white); }\n.at-tm-blue-4 { background: color-mix(in srgb, var(--mj-brand-primary) 55%, white); }\n\n.at-tm-green-1 { background: color-mix(in srgb, var(--mj-status-success) 90%, black); }\n.at-tm-green-2 { background: var(--mj-status-success); }\n.at-tm-green-3 { background: color-mix(in srgb, var(--mj-status-success) 60%, white); color: var(--mj-text-primary); }\n\n.at-tm-purple-1 { background: color-mix(in srgb, var(--mj-status-info) 90%, black); }\n.at-tm-purple-2 { background: var(--mj-status-info); }\n.at-tm-purple-3 { background: color-mix(in srgb, var(--mj-status-info) 65%, white); }\n\n.at-tm-orange-1 { background: color-mix(in srgb, var(--mj-status-warning) 90%, black); }\n.at-tm-orange-2 { background: var(--mj-status-warning); }\n.at-tm-orange-3 { background: color-mix(in srgb, var(--mj-status-warning) 60%, white); color: var(--mj-text-primary); }\n\n/* \u2550\u2550\u2550\u2550 Audit Log sub-tab \u2550\u2550\u2550\u2550 */\n\n.at-tax-audit-filters {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 16px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-filter-label {\n font-size: 0.72rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.at-tax-audit-checkbox-group {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.at-tax-audit-checkbox {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 0.72rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.at-tax-audit-checkbox input {\n accent-color: var(--mj-brand-primary);\n}\n\n.at-tax-audit-timeline {\n position: relative;\n padding-left: 32px;\n}\n\n.at-tax-audit-timeline::before {\n content: '';\n position: absolute;\n left: 14px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.at-tax-audit-event {\n position: relative;\n padding: 10px 16px;\n margin-bottom: 4px;\n display: flex;\n align-items: flex-start;\n gap: 12px;\n border-radius: 8px;\n transition: background 0.1s;\n}\n\n.at-tax-audit-event:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-tax-audit-event-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.68rem;\n flex-shrink: 0;\n position: absolute;\n left: -32px;\n top: 10px;\n z-index: 1;\n}\n\n.at-tax-audit-event-icon.created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.at-tax-audit-event-icon.merged {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.moved {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.at-tax-audit-event-icon.deleted {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.at-tax-audit-event-icon.renamed {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.at-tax-audit-event-body {\n flex: 1;\n}\n\n.at-tax-audit-event-desc {\n font-size: 0.78rem;\n color: var(--mj-text-primary);\n line-height: 1.5;\n}\n\n.at-tax-tag-ref {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 4px;\n font-weight: 600;\n font-size: 0.72rem;\n border: 1px solid var(--mj-border-default);\n}\n\n.at-tax-audit-event-meta {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n margin-top: 2px;\n display: flex;\n gap: 12px;\n}\n\n/* \u2500\u2500 Taxonomy responsive \u2500\u2500 */\n\n@media (max-width: 1100px) {\n .at-tax-split-view {\n flex-direction: column;\n }\n\n .at-tax-tree-panel {\n width: 100%;\n max-height: 300px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .at-tax-details-panel {\n width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .at-tax-dup-card {\n flex-wrap: wrap;\n }\n\n .at-tax-orphan-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* \u2500\u2500 Pipeline Config Widget \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-config-card {\n margin-top: 12px;\n}\n\n.at-config-body {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px !important;\n}\n\n.at-config-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.at-config-label {\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n min-width: 90px;\n flex-shrink: 0;\n}\n\n.at-config-control {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n justify-content: flex-end;\n}\n\n.at-config-input {\n width: 70px;\n padding: 3px 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 0.75rem;\n text-align: right;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.at-config-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.at-config-slider {\n flex: 1;\n max-width: 100px;\n accent-color: var(--mj-brand-primary);\n height: 4px;\n}\n\n.at-config-value {\n font-size: 0.68rem;\n color: var(--mj-text-muted);\n min-width: 40px;\n text-align: right;\n}\n\n.at-config-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n}\n\n.at-config-section-label {\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Toggle Switch */\n.at-config-toggle {\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n\n.at-config-toggle input {\n display: none;\n}\n\n.at-toggle-track {\n display: block;\n width: 32px;\n height: 18px;\n background: var(--mj-border-strong);\n border-radius: 9px;\n transition: background 0.2s ease;\n position: relative;\n}\n\n.at-config-toggle input:checked + .at-toggle-track {\n background: var(--mj-brand-primary);\n}\n\n.at-toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0,0,0,0.15);\n}\n\n.at-config-toggle input:checked + .at-toggle-track .at-toggle-thumb {\n transform: translateX(14px);\n}\n\n/* \u2500\u2500 Schedule Indicator on Source Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-indicator {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n margin-top: 6px;\n border-radius: 12px;\n font-size: 0.68rem;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-border-default));\n cursor: pointer;\n transition: all 0.15s ease;\n width: fit-content;\n}\n\n.at-schedule-indicator i {\n font-size: 0.62rem;\n}\n\n.at-schedule-indicator:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-default));\n}\n\n/* Schedule button in source card actions */\n.at-source-schedule-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Schedule Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.at-schedule-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-schedule-dialog {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg, 12px);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16);\n width: 420px;\n max-width: 90vw;\n}\n\n.at-schedule-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-schedule-dialog-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-dialog-close {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 16px;\n padding: 4px;\n line-height: 1;\n transition: color 0.15s;\n}\n\n.at-schedule-dialog-close:hover {\n color: var(--mj-text-primary);\n}\n\n.at-schedule-dialog-body {\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.at-schedule-field label {\n display: block;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin-bottom: 6px;\n}\n\n.at-schedule-source-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-source-name i {\n color: var(--mj-text-muted);\n}\n\n.at-schedule-action-name {\n font-size: 13px;\n color: var(--mj-text-secondary);\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: var(--mj-radius-sm, 6px);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.at-schedule-cron-input {\n width: 100%;\n font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n letter-spacing: 0.02em;\n}\n\n.at-schedule-cron-preview {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.at-schedule-cron-preview i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.at-schedule-toggle-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n}\n\n.at-schedule-toggle-row label {\n margin-bottom: 0;\n}\n\n.at-schedule-dialog-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4: Status Badges for Content Items \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-status-badge {\n display: inline-block;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 0.6rem;\n font-weight: 600;\n white-space: nowrap;\n letter-spacing: 0.02em;\n}\n\n.at-status-badge-complete {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.at-status-badge-processing {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.at-status-badge-failed {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.at-status-badge-pending {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D4/D7: Source Detail Controls \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-section-header-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.at-detail-section-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.at-detail-filter-select {\n padding: 4px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 0.72rem;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n}\n\n.at-retry-btn {\n font-size: 0.7rem !important;\n padding: 4px 8px !important;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface)) !important;\n color: var(--mj-status-error-text) !important;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-border-default)) !important;\n}\n\n.at-retry-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface)) !important;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 D7: Pagination \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-detail-pagination {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 10px 0 4px;\n border-top: 1px solid var(--mj-border-subtle);\n margin-top: 4px;\n}\n\n.at-page-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.72rem;\n font-weight: 500;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.12s ease;\n}\n\n.at-page-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.at-page-btn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.at-page-info {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Confirmation Dialog \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-confirm-message {\n font-size: 13.5px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.at-danger-btn {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: var(--mj-radius-sm, 6px);\n padding: 7px 14px;\n font-size: 12.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.at-danger-btn:hover {\n background: var(--mj-status-error-text);\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550 Treemap Drill-In \u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.at-tax-treemap-cell-clickable {\n cursor: pointer;\n transition: transform 0.15s, box-shadow 0.15s;\n}\n\n.at-tax-treemap-cell-clickable:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 1;\n}\n\n.at-tax-drillin-overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: flex-start;\n justify-content: flex-end;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.4));\n}\n\n.at-tax-drillin-panel {\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n width: 420px;\n max-width: 90vw;\n height: 100vh;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n.at-tax-drillin-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.at-tax-drillin-header h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 15px;\n font-weight: 650;\n color: var(--mj-text-primary);\n}\n\n.at-tax-drillin-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.at-tax-drillin-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.at-tax-drillin-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* D3/D8: Clickable run history rows */\n.at-run-row-clickable {\n cursor: pointer;\n transition: background 0.12s ease;\n}\n\n.at-run-row-clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.at-run-row-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface)) !important;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n/* D2: Error text in detail tables */\n.run-error-text {\n color: var(--mj-status-error);\n font-weight: 600;\n}\n\n/* \u2500\u2500 Content Item Duplicates Section (G3) \u2500\u2500 */\n\n.at-dedup-section {\n margin-top: 24px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 20px;\n}\n\n.at-dedup-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.at-dedup-title {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.at-dedup-subtitle {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.at-dedup-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s;\n}\n\n.at-dedup-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.at-dedup-pair {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.at-dedup-item {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n}\n\n.at-dedup-item-name {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.at-dedup-item-source {\n font-size: 0.72rem;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-vs {\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n flex-shrink: 0;\n}\n\n.at-dedup-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.at-dedup-score {\n font-size: 0.78rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.at-dedup-method {\n font-size: 0.65rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.at-dedup-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.at-dedup-confirm {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-dismiss {\n font-size: 0.75rem !important;\n padding: 4px 10px !important;\n}\n\n.at-dedup-empty {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n}\n\n.at-dedup-empty i {\n font-size: 1.5rem;\n margin-bottom: 8px;\n color: var(--mj-status-success);\n}\n\n.at-dedup-empty p {\n margin: 8px 0 0;\n font-size: 0.82rem;\n}\n\n/* =============================================================================\n * Tags-only additions: governance toggles, scope chips, inline synonyms,\n * Suggestions inbox table+drawer, Tag Health 3-card layout. All colors flow\n * through MJ design tokens with `color-mix()` for tinted variants.\n * ============================================================================= */\n\n/* ---------- Governance toggle rows ---------- */\n\n.at-tg-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 0;\n border-bottom: 1px dashed var(--mj-border-subtle);\n}\n.at-tg-toggle-row:last-child { border-bottom: 0; }\n.at-tg-toggle-label { display: flex; flex-direction: column; gap: 2px; max-width: 70%; }\n.at-tg-toggle-t { font-size: 13px; font-weight: 600; color: var(--mj-text-primary); }\n.at-tg-toggle-d { font-size: 11px; color: var(--mj-text-muted); line-height: 1.4; }\n\n.at-tg-switch {\n position: relative;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n transition: background 0.15s;\n flex-shrink: 0;\n}\n.at-tg-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n.at-tg-switch.on { background: var(--mj-brand-primary); }\n.at-tg-switch.on::after { left: 18px; }\n.at-tg-switch.disabled { opacity: 0.5; pointer-events: none; }\n\n.at-tg-grid-3 {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 14px 16px;\n margin-top: 14px;\n}\n.at-tg-field { display: flex; flex-direction: column; gap: 4px; }\n.at-tg-field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n.at-tg-hint { font-size: 11px; color: var(--mj-text-muted); }\n\n/* ---------- Scope chips ---------- */\n\n.at-tg-chip-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n margin-top: 8px;\n}\n.at-tg-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 999px;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n.at-tg-chip.scoped {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------- Inline synonyms ---------- */\n\n.at-tg-syn-add {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n align-items: stretch;\n}\n.at-tg-syn-add .at-search-input { flex: 1; }\n.at-tg-syn-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border-radius: 5px;\n border: 1px solid var(--mj-border-subtle);\n margin-bottom: 6px;\n background: var(--mj-bg-surface);\n}\n.at-tg-syn-row.pending {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n.at-tg-syn-name { font-weight: 600; flex: 1; color: var(--mj-text-primary); }\n.at-tg-syn-src {\n font-size: 10px;\n padding: 2px 7px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n}\n.at-tg-syn-src.manual { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.at-tg-syn-src.imported { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.at-tg-syn-src.merged { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.at-tg-syn-src.llm { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.at-tg-syn-x {\n cursor: pointer;\n color: var(--mj-text-muted);\n padding: 2px 6px;\n}\n.at-tg-syn-x:hover { color: var(--mj-status-error-text, var(--mj-status-error)); }\n\n/* ---------- Suggestions inbox table + drawer ---------- */\n\n.sg-shell {\n display: flex;\n height: 100%;\n min-height: 600px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.sg-main { flex: 1; display: flex; flex-direction: column; min-width: 0; overflow: hidden; }\n.sg-toolbar {\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n align-items: center;\n background: var(--mj-bg-surface-card);\n flex-wrap: wrap;\n}\n.sg-bulk-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n padding: 9px 14px;\n display: flex;\n gap: 10px;\n align-items: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n font-weight: 500;\n}\n.sg-table-body { flex: 1; overflow: auto; }\n.sg-table { width: 100%; border-collapse: collapse; font-size: 13px; color: var(--mj-text-primary); }\n.sg-table thead { position: sticky; top: 0; background: var(--mj-bg-surface-card); z-index: 1; }\n.sg-table th {\n text-align: left;\n padding: 9px 12px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n font-weight: 600;\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n.sg-table td {\n padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n.sg-table tr { cursor: pointer; }\n.sg-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.sg-table tr.sg-row-selected td { background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); }\n.sg-table tr.sg-row-checked td { background: color-mix(in srgb, var(--mj-status-warning) 8%, transparent); }\n.sg-score { font-family: ui-monospace, \"SF Mono\", Menlo, monospace; font-weight: 600; }\n.sg-score-bar {\n display: inline-block;\n width: 70px;\n height: 5px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n vertical-align: middle;\n margin-right: 6px;\n}\n.sg-score-bar > span {\n display: block;\n height: 100%;\n background: var(--mj-brand-primary);\n}\n.sg-reason {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n.sg-reason.merge { background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent); color: var(--mj-brand-primary); }\n.sg-reason.below { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 12%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.constrained { background: color-mix(in srgb, var(--mj-text-secondary) 14%, transparent); color: var(--mj-text-secondary); }\n.sg-reason.frozen { background: color-mix(in srgb, var(--mj-status-info, var(--mj-brand-primary)) 14%, transparent); color: var(--mj-status-info-text, var(--mj-brand-primary)); }\n.sg-reason.review { background: color-mix(in srgb, var(--mj-status-error) 12%, transparent); color: var(--mj-status-error-text, var(--mj-status-error)); }\n.sg-reason.lowusage { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.widenode { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-reason.autogrow { background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent); color: var(--mj-status-warning-text, var(--mj-status-warning)); }\n.sg-row-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.1s;\n}\n.sg-table tr:hover .sg-row-actions {\n opacity: 1;\n}\n\n.sg-drawer {\n width: 460px;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n.sg-drawer-hd {\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface);\n}\n.sg-drawer-bd { padding: 16px 18px; flex: 1; overflow-y: auto; }\n.sg-drawer-ft {\n padding: 12px 18px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface);\n flex-wrap: wrap;\n}\n.sg-drawer h4 {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n margin: 16px 0 8px;\n font-weight: 700;\n}\n.sg-candidate {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n display: flex;\n gap: 12px;\n align-items: center;\n}\n.sg-preview {\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n/* ---------- Tag Health cards ---------- */\n\n.health-shell { padding: 18px 22px; }\n.runbar {\n display: flex;\n gap: 22px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n margin-bottom: 18px;\n align-items: center;\n font-size: 13px;\n}\n.runbar .stat .l { font-size: 11px; color: var(--mj-text-muted); }\n.runbar .stat .v { font-size: 16px; font-weight: 600; color: var(--mj-text-primary); }\n.runbar .grow { flex: 1; }\n\n.health-cards {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 16px;\n margin-bottom: 22px;\n}\n.h-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 240px;\n}\n.h-card.merge { border-top: 4px solid var(--mj-brand-primary); }\n.h-card.lowusage { border-top: 4px solid var(--mj-status-warning); }\n.h-card.widenode { border-top: 4px solid var(--mj-status-error, var(--mj-status-warning)); }\n.h-card .top { display: flex; align-items: flex-start; gap: 10px; }\n.h-card .top .ic {\n width: 38px;\n height: 38px;\n border-radius: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n}\n.h-card .name {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.h-card h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n.h-card .big {\n font-size: 36px;\n font-weight: 800;\n color: var(--mj-text-primary);\n line-height: 1;\n}\n.h-card .sub { font-size: 12px; color: var(--mj-text-secondary); line-height: 1.4; margin: 0; }\n.h-card .ft { margin-top: auto; display: flex; gap: 6px; flex-wrap: wrap; }\n\n.threshold-form {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px;\n margin-top: 18px;\n}\n.threshold-form h3 { margin: 0 0 12px; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.threshold-form .grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n.threshold-form .field { display: flex; flex-direction: column; gap: 4px; }\n.threshold-form .field label { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n\n.run-history {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-top: 18px;\n overflow: hidden;\n}\n.run-history-hd {\n padding: 12px 18px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-card);\n}\n.run-history-hd h3 { margin: 0; font-size: 13px; font-weight: 700; color: var(--mj-text-primary); }\n.run-history table { width: 100%; border-collapse: collapse; font-size: 12px; }\n.run-history th {\n text-align: left;\n padding: 8px 12px;\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 600;\n}\n.run-history td {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n}\n\n/* Generic helpers used by new sections */\n.at-muted { color: var(--mj-text-muted); }\n.at-success-btn { color: var(--mj-status-success-text, var(--mj-status-success)); border-color: var(--mj-status-success-border, var(--mj-status-success)); }\n.at-btn-sm { font-size: 12px; padding: 4px 9px; }\n.at-btn-xs { font-size: 11px; padding: 2px 7px; }\n"] }]
7377
7375
  }], null, null); })();
7378
7376
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TagsResourceComponent, { className: "TagsResourceComponent", filePath: "src/AI/components/tags/tags-resource.component.ts", lineNumber: 390 }); })();
7379
7377
  export function LoadTagsResource() {