@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.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- 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
|
|
50
|
-
i0.ɵɵ
|
|
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
|
|
67
|
+
function TagsResourceComponent_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
60
68
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
61
|
-
i0.ɵɵelementStart(0, "div",
|
|
62
|
-
i0.ɵɵlistener("click", function
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
245
|
-
i0.ɵɵlistener("input", function
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
299
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
308
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
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",
|
|
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
|
|
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",
|
|
326
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
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",
|
|
336
|
-
i0.ɵɵlistener("dragstart", function
|
|
337
|
-
i0.ɵɵconditionalCreate(1,
|
|
338
|
-
i0.ɵɵelementStart(2, "span",
|
|
339
|
-
i0.ɵɵlistener("click", function
|
|
340
|
-
i0.ɵɵelementEnd();
|
|
341
|
-
i0.ɵɵelement(3, "span",
|
|
342
|
-
i0.ɵɵelementStart(4, "span",
|
|
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",
|
|
345
|
+
i0.ɵɵelementStart(6, "span", 100);
|
|
346
346
|
i0.ɵɵtext(7);
|
|
347
347
|
i0.ɵɵelementEnd();
|
|
348
|
-
i0.ɵɵelementStart(8, "span",
|
|
349
|
-
i0.ɵɵlistener("click", function
|
|
350
|
-
i0.ɵɵelement(9, "i",
|
|
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
|
|
372
|
-
i0.ɵɵelementStart(0, "div",
|
|
373
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
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
|
|
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",
|
|
379
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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
|
|
391
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
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",
|
|
401
|
+
i0.ɵɵelementStart(0, "div", 117);
|
|
402
402
|
i0.ɵɵtext(1);
|
|
403
|
-
i0.ɵɵelementStart(2, "span",
|
|
404
|
-
i0.ɵɵlistener("click", function
|
|
405
|
-
i0.ɵɵelement(3, "i",
|
|
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,
|
|
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
|
|
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",
|
|
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",
|
|
421
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
423
|
+
i0.ɵɵelementStart(5, "div", 121)(6, "label", 122);
|
|
424
424
|
i0.ɵɵtext(7, "Description");
|
|
425
425
|
i0.ɵɵelementEnd();
|
|
426
|
-
i0.ɵɵelementStart(8, "textarea",
|
|
427
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
430
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
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
|
|
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",
|
|
447
|
-
i0.ɵɵlistener("click", function
|
|
448
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
452
|
-
i0.ɵɵlistener("click", function
|
|
453
|
-
i0.ɵɵelement(5, "i",
|
|
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",
|
|
457
|
-
i0.ɵɵlistener("click", function
|
|
458
|
-
i0.ɵɵelement(8, "i",
|
|
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",
|
|
462
|
-
i0.ɵɵlistener("click", function
|
|
463
|
-
i0.ɵɵelement(11, "i",
|
|
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",
|
|
467
|
-
i0.ɵɵlistener("click", function
|
|
468
|
-
i0.ɵɵelement(14, "i",
|
|
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",
|
|
472
|
-
i0.ɵɵlistener("click", function
|
|
473
|
-
i0.ɵɵelement(17, "i",
|
|
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
|
|
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",
|
|
480
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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
|
|
493
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
497
|
-
i0.ɵɵrepeaterCreate(4,
|
|
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
|
|
505
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
508
|
+
i0.ɵɵelementStart(3, "div", 141);
|
|
509
509
|
i0.ɵɵtext(4);
|
|
510
510
|
i0.ɵɵelementEnd();
|
|
511
|
-
i0.ɵɵelementStart(5, "div",
|
|
511
|
+
i0.ɵɵelementStart(5, "div", 142);
|
|
512
512
|
i0.ɵɵtext(6);
|
|
513
513
|
i0.ɵɵelementEnd();
|
|
514
|
-
i0.ɵɵelementStart(7, "div",
|
|
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
|
|
529
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
533
|
-
i0.ɵɵrepeaterCreate(4,
|
|
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
|
|
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
|
|
546
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
555
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
564
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
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",
|
|
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",
|
|
577
|
-
i0.ɵɵlistener("click", function
|
|
578
|
-
i0.ɵɵelement(6, "i",
|
|
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
|
|
591
|
-
i0.ɵɵrepeaterCreate(0,
|
|
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
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
608
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
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",
|
|
617
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
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",
|
|
626
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
632
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
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",
|
|
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",
|
|
641
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
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",
|
|
646
|
+
i0.ɵɵelementStart(37, "div", 150)(38, "label");
|
|
647
647
|
i0.ɵɵtext(39, "Min confidence");
|
|
648
648
|
i0.ɵɵelementEnd();
|
|
649
|
-
i0.ɵɵelementStart(40, "input",
|
|
650
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
661
|
+
i0.ɵɵelementStart(50, "span", 147);
|
|
662
662
|
i0.ɵɵtext(51, " Off = restricted to the scope rows below. ");
|
|
663
|
-
i0.ɵɵconditionalCreate(52,
|
|
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",
|
|
666
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
669
|
-
i0.ɵɵrepeaterCreate(55,
|
|
670
|
-
i0.ɵɵconditionalCreate(57,
|
|
671
|
-
i0.ɵɵelementStart(58, "button",
|
|
672
|
-
i0.ɵɵlistener("click", function
|
|
673
|
-
i0.ɵɵelement(59, "i",
|
|
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",
|
|
677
|
-
i0.ɵɵelement(62, "i",
|
|
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",
|
|
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",
|
|
684
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
685
|
-
i0.ɵɵlistener("keyup.enter", function
|
|
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",
|
|
688
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
689
|
-
i0.ɵɵelementStart(70, "option",
|
|
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",
|
|
692
|
+
i0.ɵɵelementStart(72, "option", 165);
|
|
693
693
|
i0.ɵɵtext(73, "Imported");
|
|
694
694
|
i0.ɵɵelementEnd();
|
|
695
|
-
i0.ɵɵelementStart(74, "option",
|
|
695
|
+
i0.ɵɵelementStart(74, "option", 166);
|
|
696
696
|
i0.ɵɵtext(75, "Merged");
|
|
697
697
|
i0.ɵɵelementEnd();
|
|
698
|
-
i0.ɵɵelementStart(76, "option",
|
|
698
|
+
i0.ɵɵelementStart(76, "option", 167);
|
|
699
699
|
i0.ɵɵtext(77, "LLM");
|
|
700
700
|
i0.ɵɵelementEnd()();
|
|
701
|
-
i0.ɵɵelementStart(78, "button",
|
|
702
|
-
i0.ɵɵlistener("click", function
|
|
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,
|
|
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
|
|
739
|
-
i0.ɵɵelementStart(0, "div",
|
|
740
|
-
i0.ɵɵrepeaterCreate(2,
|
|
741
|
-
i0.ɵɵelementStart(4, "span",
|
|
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,
|
|
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",
|
|
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",
|
|
749
|
+
i0.ɵɵelementStart(12, "div", 111);
|
|
750
750
|
i0.ɵɵtext(13, "Items Tagged");
|
|
751
751
|
i0.ɵɵelementEnd()();
|
|
752
|
-
i0.ɵɵelementStart(14, "div",
|
|
752
|
+
i0.ɵɵelementStart(14, "div", 109)(15, "div", 110);
|
|
753
753
|
i0.ɵɵtext(16);
|
|
754
754
|
i0.ɵɵelementEnd();
|
|
755
|
-
i0.ɵɵelementStart(17, "div",
|
|
755
|
+
i0.ɵɵelementStart(17, "div", 111);
|
|
756
756
|
i0.ɵɵtext(18, "Avg Weight");
|
|
757
757
|
i0.ɵɵelementEnd()();
|
|
758
|
-
i0.ɵɵelementStart(19, "div",
|
|
758
|
+
i0.ɵɵelementStart(19, "div", 109)(20, "div", 110);
|
|
759
759
|
i0.ɵɵtext(21);
|
|
760
760
|
i0.ɵɵelementEnd();
|
|
761
|
-
i0.ɵɵelementStart(22, "div",
|
|
761
|
+
i0.ɵɵelementStart(22, "div", 111);
|
|
762
762
|
i0.ɵɵtext(23, "Children");
|
|
763
763
|
i0.ɵɵelementEnd()();
|
|
764
|
-
i0.ɵɵelementStart(24, "div",
|
|
764
|
+
i0.ɵɵelementStart(24, "div", 109)(25, "div", 110);
|
|
765
765
|
i0.ɵɵtext(26);
|
|
766
766
|
i0.ɵɵelementEnd();
|
|
767
|
-
i0.ɵɵelementStart(27, "div",
|
|
767
|
+
i0.ɵɵelementStart(27, "div", 111);
|
|
768
768
|
i0.ɵɵtext(28, "Depth");
|
|
769
769
|
i0.ɵɵelementEnd()();
|
|
770
|
-
i0.ɵɵelementStart(29, "div",
|
|
770
|
+
i0.ɵɵelementStart(29, "div", 109)(30, "div", 112);
|
|
771
771
|
i0.ɵɵtext(31);
|
|
772
772
|
i0.ɵɵelementEnd();
|
|
773
|
-
i0.ɵɵelementStart(32, "div",
|
|
773
|
+
i0.ɵɵelementStart(32, "div", 111);
|
|
774
774
|
i0.ɵɵtext(33, "First Seen");
|
|
775
775
|
i0.ɵɵelementEnd()()();
|
|
776
|
-
i0.ɵɵconditionalCreate(34,
|
|
777
|
-
i0.ɵɵconditionalCreate(35,
|
|
778
|
-
i0.ɵɵconditionalCreate(36,
|
|
779
|
-
i0.ɵɵconditionalCreate(37,
|
|
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
|
|
808
|
-
i0.ɵɵelementStart(0, "div",
|
|
809
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
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",
|
|
817
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
818
|
-
i0.ɵɵlistener("input", function
|
|
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",
|
|
821
|
-
i0.ɵɵlistener("click", function
|
|
822
|
-
i0.ɵɵelement(5, "i",
|
|
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",
|
|
825
|
-
i0.ɵɵlistener("click", function
|
|
826
|
-
i0.ɵɵelement(7, "i",
|
|
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",
|
|
829
|
-
i0.ɵɵlistener("dragover", function
|
|
830
|
-
i0.ɵɵconditionalCreate(9,
|
|
831
|
-
i0.ɵɵrepeaterCreate(10,
|
|
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,
|
|
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",
|
|
836
|
-
i0.ɵɵconditionalCreate(14,
|
|
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",
|
|
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",
|
|
842
|
-
i0.ɵɵelement(20, "span",
|
|
843
|
-
i0.ɵɵelementStart(21, "span",
|
|
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",
|
|
846
|
+
i0.ɵɵelementStart(23, "span", 86);
|
|
847
847
|
i0.ɵɵtext(24, "Total");
|
|
848
848
|
i0.ɵɵelementEnd()();
|
|
849
|
-
i0.ɵɵelementStart(25, "div",
|
|
850
|
-
i0.ɵɵelement(26, "span",
|
|
851
|
-
i0.ɵɵelementStart(27, "span",
|
|
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",
|
|
854
|
+
i0.ɵɵelementStart(29, "span", 86);
|
|
855
855
|
i0.ɵɵtext(30, "Healthy");
|
|
856
856
|
i0.ɵɵelementEnd()();
|
|
857
|
-
i0.ɵɵelementStart(31, "div",
|
|
858
|
-
i0.ɵɵelement(32, "span",
|
|
859
|
-
i0.ɵɵelementStart(33, "span",
|
|
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",
|
|
862
|
+
i0.ɵɵelementStart(35, "span", 86);
|
|
863
863
|
i0.ɵɵtext(36, "Need Attention");
|
|
864
864
|
i0.ɵɵelementEnd()();
|
|
865
|
-
i0.ɵɵelementStart(37, "div",
|
|
866
|
-
i0.ɵɵelement(38, "span",
|
|
867
|
-
i0.ɵɵelementStart(39, "span",
|
|
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",
|
|
870
|
+
i0.ɵɵelementStart(41, "span", 86);
|
|
871
871
|
i0.ɵɵtext(42, "Orphaned");
|
|
872
872
|
i0.ɵɵelementEnd()();
|
|
873
|
-
i0.ɵɵelementStart(43, "div",
|
|
874
|
-
i0.ɵɵelement(44, "span",
|
|
875
|
-
i0.ɵɵelementStart(45, "span",
|
|
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",
|
|
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
|
|
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",
|
|
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
|
|
914
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
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
|
|
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",
|
|
922
|
+
i0.ɵɵelementStart(0, "div", 183);
|
|
923
923
|
i0.ɵɵtext(1);
|
|
924
924
|
i0.ɵɵelementEnd();
|
|
925
|
-
i0.ɵɵelementStart(2, "div",
|
|
926
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
930
|
-
i0.ɵɵlistener("click", function
|
|
931
|
-
i0.ɵɵconditionalCreate(8,
|
|
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",
|
|
934
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
950
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
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
|
|
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",
|
|
958
|
+
i0.ɵɵelementStart(0, "div", 183);
|
|
959
959
|
i0.ɵɵtext(1);
|
|
960
960
|
i0.ɵɵelementEnd();
|
|
961
|
-
i0.ɵɵelementStart(2, "div",
|
|
962
|
-
i0.ɵɵelement(3, "i",
|
|
961
|
+
i0.ɵɵelementStart(2, "div", 190);
|
|
962
|
+
i0.ɵɵelement(3, "i", 191);
|
|
963
963
|
i0.ɵɵelementEnd();
|
|
964
|
-
i0.ɵɵelementStart(4, "div",
|
|
965
|
-
i0.ɵɵelement(6, "div",
|
|
964
|
+
i0.ɵɵelementStart(4, "div", 184)(5, "div", 192);
|
|
965
|
+
i0.ɵɵelement(6, "div", 193);
|
|
966
966
|
i0.ɵɵelementEnd();
|
|
967
|
-
i0.ɵɵelementStart(7, "span",
|
|
967
|
+
i0.ɵɵelementStart(7, "span", 194);
|
|
968
968
|
i0.ɵɵtext(8);
|
|
969
969
|
i0.ɵɵelementEnd()();
|
|
970
|
-
i0.ɵɵelementStart(9, "div",
|
|
971
|
-
i0.ɵɵelement(10, "i",
|
|
970
|
+
i0.ɵɵelementStart(9, "div", 190);
|
|
971
|
+
i0.ɵɵelement(10, "i", 191);
|
|
972
972
|
i0.ɵɵelementEnd();
|
|
973
|
-
i0.ɵɵelementStart(11, "div",
|
|
973
|
+
i0.ɵɵelementStart(11, "div", 183);
|
|
974
974
|
i0.ɵɵtext(12);
|
|
975
975
|
i0.ɵɵelementEnd();
|
|
976
|
-
i0.ɵɵelementStart(13, "div",
|
|
977
|
-
i0.ɵɵlistener("click", function
|
|
978
|
-
i0.ɵɵconditionalCreate(15,
|
|
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",
|
|
981
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
985
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
1008
|
-
i0.ɵɵelementStart(0, "div",
|
|
1009
|
-
i0.ɵɵconditionalCreate(1,
|
|
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
|
|
1018
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
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",
|
|
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,
|
|
1034
|
-
i0.ɵɵelementStart(14, "div",
|
|
1035
|
-
i0.ɵɵrepeaterCreate(15,
|
|
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
|
|
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
|
|
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",
|
|
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
|
|
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",
|
|
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",
|
|
1069
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
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",
|
|
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",
|
|
1088
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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
|
|
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",
|
|
1111
|
+
i0.ɵɵelementStart(0, "div", 195)(1, "span", 196);
|
|
1112
1112
|
i0.ɵɵtext(2);
|
|
1113
1113
|
i0.ɵɵelementEnd();
|
|
1114
|
-
i0.ɵɵelementStart(3, "span",
|
|
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",
|
|
1118
|
-
i0.ɵɵlistener("click", function
|
|
1119
|
-
i0.ɵɵconditionalCreate(7,
|
|
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",
|
|
1123
|
-
i0.ɵɵlistener("click", function
|
|
1124
|
-
i0.ɵɵelement(11, "i",
|
|
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",
|
|
1128
|
-
i0.ɵɵlistener("click", function
|
|
1129
|
-
i0.ɵɵelement(14, "i",
|
|
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,
|
|
1133
|
-
i0.ɵɵelementStart(17, "div",
|
|
1134
|
-
i0.ɵɵrepeaterCreate(18,
|
|
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
|
|
1150
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
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
|
|
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",
|
|
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
|
|
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",
|
|
1173
|
-
i0.ɵɵlistener("click", function
|
|
1174
|
-
i0.ɵɵelementStart(1, "span",
|
|
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",
|
|
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
|
|
1190
|
-
i0.ɵɵelementStart(0, "div",
|
|
1191
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
1199
|
-
i0.ɵɵelementStart(0, "span",
|
|
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",
|
|
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
|
|
1212
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1216
|
-
i0.ɵɵrepeaterCreate(4,
|
|
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
|
|
1224
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1227
|
+
i0.ɵɵelementStart(3, "div", 141);
|
|
1228
1228
|
i0.ɵɵtext(4);
|
|
1229
1229
|
i0.ɵɵelementEnd();
|
|
1230
|
-
i0.ɵɵelementStart(5, "div",
|
|
1230
|
+
i0.ɵɵelementStart(5, "div", 142);
|
|
1231
1231
|
i0.ɵɵtext(6);
|
|
1232
1232
|
i0.ɵɵelementEnd();
|
|
1233
|
-
i0.ɵɵelementStart(7, "div",
|
|
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
|
|
1248
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1252
|
-
i0.ɵɵrepeaterCreate(4,
|
|
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
|
|
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",
|
|
1262
|
-
i0.ɵɵlistener("click", function
|
|
1263
|
-
i0.ɵɵelementStart(1, "div",
|
|
1264
|
-
i0.ɵɵlistener("click", function
|
|
1265
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
1270
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
1276
|
+
i0.ɵɵelementStart(13, "div", 111);
|
|
1277
1277
|
i0.ɵɵtext(14, "Items Tagged");
|
|
1278
1278
|
i0.ɵɵelementEnd()();
|
|
1279
|
-
i0.ɵɵelementStart(15, "div",
|
|
1279
|
+
i0.ɵɵelementStart(15, "div", 109)(16, "div", 110);
|
|
1280
1280
|
i0.ɵɵtext(17);
|
|
1281
1281
|
i0.ɵɵelementEnd();
|
|
1282
|
-
i0.ɵɵelementStart(18, "div",
|
|
1282
|
+
i0.ɵɵelementStart(18, "div", 111);
|
|
1283
1283
|
i0.ɵɵtext(19, "Avg Weight");
|
|
1284
1284
|
i0.ɵɵelementEnd()();
|
|
1285
|
-
i0.ɵɵelementStart(20, "div",
|
|
1285
|
+
i0.ɵɵelementStart(20, "div", 109)(21, "div", 110);
|
|
1286
1286
|
i0.ɵɵtext(22);
|
|
1287
1287
|
i0.ɵɵelementEnd();
|
|
1288
|
-
i0.ɵɵelementStart(23, "div",
|
|
1288
|
+
i0.ɵɵelementStart(23, "div", 111);
|
|
1289
1289
|
i0.ɵɵtext(24, "Children");
|
|
1290
1290
|
i0.ɵɵelementEnd()()();
|
|
1291
|
-
i0.ɵɵconditionalCreate(25,
|
|
1292
|
-
i0.ɵɵconditionalCreate(26,
|
|
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",
|
|
1295
|
-
i0.ɵɵlistener("click", function
|
|
1296
|
-
i0.ɵɵelement(29, "i",
|
|
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
|
|
1315
|
-
i0.ɵɵelementStart(0, "div",
|
|
1316
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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,
|
|
1319
|
-
i0.ɵɵconditionalCreate(5,
|
|
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
|
|
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",
|
|
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
|
|
1337
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1340
|
+
i0.ɵɵelementStart(3, "div", 238)(4, "div", 239);
|
|
1341
1341
|
i0.ɵɵtext(5);
|
|
1342
|
-
i0.ɵɵelementStart(6, "span",
|
|
1342
|
+
i0.ɵɵelementStart(6, "span", 240);
|
|
1343
1343
|
i0.ɵɵtext(7);
|
|
1344
1344
|
i0.ɵɵelementEnd()();
|
|
1345
|
-
i0.ɵɵelementStart(8, "div",
|
|
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
|
|
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",
|
|
1369
|
+
i0.ɵɵelementStart(0, "div", 230)(1, "span", 231);
|
|
1370
1370
|
i0.ɵɵtext(2, "Filter");
|
|
1371
1371
|
i0.ɵɵelementEnd();
|
|
1372
|
-
i0.ɵɵelementStart(3, "div",
|
|
1373
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1378
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1383
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1388
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1393
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1398
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1403
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
1408
|
-
i0.ɵɵlistener("change", function
|
|
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,
|
|
1413
|
-
i0.ɵɵelementStart(29, "div",
|
|
1414
|
-
i0.ɵɵrepeaterCreate(30,
|
|
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
|
|
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
|
|
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
|
|
1456
|
-
i0.ɵɵelement(14, "i",
|
|
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
|
|
1461
|
-
i0.ɵɵelement(17, "i",
|
|
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,
|
|
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
|
|
1467
|
-
i0.ɵɵelement(21, "i",
|
|
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,
|
|
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
|
|
1473
|
-
i0.ɵɵelement(25, "i",
|
|
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
|
|
1478
|
-
i0.ɵɵelement(28, "i",
|
|
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,
|
|
1483
|
-
i0.ɵɵconditionalCreate(32,
|
|
1484
|
-
i0.ɵɵconditionalCreate(33,
|
|
1485
|
-
i0.ɵɵconditionalCreate(34,
|
|
1486
|
-
i0.ɵɵconditionalCreate(35,
|
|
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
|
|
1518
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1522
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1526
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
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",
|
|
1537
|
+
i0.ɵɵelementStart(0, "div", 252)(1, "strong");
|
|
1538
1538
|
i0.ɵɵtext(2);
|
|
1539
1539
|
i0.ɵɵelementEnd();
|
|
1540
|
-
i0.ɵɵelement(3, "span",
|
|
1541
|
-
i0.ɵɵelementStart(4, "button",
|
|
1542
|
-
i0.ɵɵlistener("click", function
|
|
1543
|
-
i0.ɵɵelement(5, "i",
|
|
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",
|
|
1547
|
-
i0.ɵɵlistener("click", function
|
|
1548
|
-
i0.ɵɵelement(8, "i",
|
|
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
|
|
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",
|
|
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
|
|
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",
|
|
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
|
|
1579
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1584
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1597
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1602
|
-
i0.ɵɵelementStart(0, "span",
|
|
1603
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
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",
|
|
1614
|
-
i0.ɵɵlistener("click", function
|
|
1615
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
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",
|
|
1621
|
-
i0.ɵɵlistener("click", function
|
|
1622
|
-
i0.ɵɵelement(2, "i",
|
|
1623
|
-
i0.ɵɵelementEnd();
|
|
1624
|
-
i0.ɵɵconditionalCreate(3,
|
|
1625
|
-
i0.ɵɵelementStart(4, "button",
|
|
1626
|
-
i0.ɵɵlistener("click", function
|
|
1627
|
-
i0.ɵɵelement(5, "i",
|
|
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
|
|
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",
|
|
1637
|
-
i0.ɵɵlistener("click", function
|
|
1638
|
-
i0.ɵɵelementStart(1, "td")(2, "input",
|
|
1639
|
-
i0.ɵɵlistener("click", function
|
|
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,
|
|
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",
|
|
1651
|
-
i0.ɵɵconditionalCreate(13,
|
|
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",
|
|
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,
|
|
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
|
|
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",
|
|
1684
|
-
i0.ɵɵlistener("change", function
|
|
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,
|
|
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
|
|
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
|
|
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",
|
|
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",
|
|
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
|
|
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",
|
|
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
|
|
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
|
|
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
|
|
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",
|
|
1780
|
-
i0.ɵɵlistener("click", function
|
|
1781
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
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",
|
|
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",
|
|
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",
|
|
1798
|
-
i0.ɵɵlistener("click", function
|
|
1799
|
-
i0.ɵɵelement(9, "i",
|
|
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",
|
|
1801
|
+
i0.ɵɵelementStart(10, "div", 277)(11, "span");
|
|
1802
1802
|
i0.ɵɵtext(12);
|
|
1803
|
-
i0.ɵɵconditionalCreate(13,
|
|
1803
|
+
i0.ɵɵconditionalCreate(13, TagsResourceComponent_Conditional_14_Conditional_2_Conditional_33_Conditional_13_Template, 2, 4);
|
|
1804
1804
|
i0.ɵɵelementEnd();
|
|
1805
|
-
i0.ɵɵconditionalCreate(14,
|
|
1806
|
-
i0.ɵɵconditionalCreate(15,
|
|
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",
|
|
1811
|
-
i0.ɵɵconditionalCreate(19,
|
|
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",
|
|
1814
|
-
i0.ɵɵconditionalCreate(22,
|
|
1815
|
-
i0.ɵɵelementStart(23, "button",
|
|
1816
|
-
i0.ɵɵlistener("click", function
|
|
1817
|
-
i0.ɵɵelement(24, "i",
|
|
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",
|
|
1821
|
-
i0.ɵɵlistener("click", function
|
|
1822
|
-
i0.ɵɵelement(27, "i",
|
|
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
|
|
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
|
|
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",
|
|
1864
|
-
i0.ɵɵlistener("click", function
|
|
1865
|
-
i0.ɵɵconditionalCreate(11,
|
|
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",
|
|
1868
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1869
|
-
i0.ɵɵlistener("input", function
|
|
1870
|
-
i0.ɵɵelementEnd();
|
|
1871
|
-
i0.ɵɵelementStart(18, "select",
|
|
1872
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1873
|
-
i0.ɵɵlistener("change", function
|
|
1874
|
-
i0.ɵɵelementStart(19, "option",
|
|
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,
|
|
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",
|
|
1880
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
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",
|
|
1883
|
-
i0.ɵɵelementStart(25, "span",
|
|
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,
|
|
1889
|
-
i0.ɵɵelementStart(30, "div",
|
|
1890
|
-
i0.ɵɵconditionalCreate(31,
|
|
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,
|
|
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
|
|
1920
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1924
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1928
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1932
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1936
|
-
i0.ɵɵelementStart(0, "div",
|
|
1937
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
1943
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
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
|
|
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,
|
|
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
|
|
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",
|
|
2029
|
-
i0.ɵɵlistener("click", function
|
|
2030
|
-
i0.ɵɵconditionalCreate(8,
|
|
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",
|
|
2033
|
-
i0.ɵɵlistener("click", function
|
|
2034
|
-
i0.ɵɵconditionalCreate(11,
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
2046
|
+
i0.ɵɵelementStart(24, "div", 289);
|
|
2047
2047
|
i0.ɵɵtext(25);
|
|
2048
2048
|
i0.ɵɵelementEnd()();
|
|
2049
|
-
i0.ɵɵelementStart(26, "div",
|
|
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",
|
|
2052
|
+
i0.ɵɵelementStart(29, "div", 289);
|
|
2053
2053
|
i0.ɵɵtext(30);
|
|
2054
2054
|
i0.ɵɵelementEnd()();
|
|
2055
|
-
i0.ɵɵelementStart(31, "div",
|
|
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",
|
|
2058
|
+
i0.ɵɵelementStart(34, "div", 289);
|
|
2059
2059
|
i0.ɵɵtext(35);
|
|
2060
2060
|
i0.ɵɵelementEnd()();
|
|
2061
|
-
i0.ɵɵelement(36, "span",
|
|
2062
|
-
i0.ɵɵelementStart(37, "div",
|
|
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",
|
|
2065
|
+
i0.ɵɵelementStart(40, "div", 289);
|
|
2066
2066
|
i0.ɵɵtext(41);
|
|
2067
2067
|
i0.ɵɵelementEnd()()();
|
|
2068
|
-
i0.ɵɵelementStart(42, "div",
|
|
2069
|
-
i0.ɵɵelement(46, "i",
|
|
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",
|
|
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",
|
|
2077
|
+
i0.ɵɵelementStart(52, "div", 296);
|
|
2078
2078
|
i0.ɵɵtext(53);
|
|
2079
2079
|
i0.ɵɵelementEnd();
|
|
2080
|
-
i0.ɵɵelementStart(54, "p",
|
|
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",
|
|
2084
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
2088
|
-
i0.ɵɵelement(62, "i",
|
|
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",
|
|
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",
|
|
2096
|
+
i0.ɵɵelementStart(68, "div", 296);
|
|
2097
2097
|
i0.ɵɵtext(69);
|
|
2098
2098
|
i0.ɵɵelementEnd();
|
|
2099
|
-
i0.ɵɵelementStart(70, "p",
|
|
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",
|
|
2103
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
2107
|
-
i0.ɵɵelement(78, "i",
|
|
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",
|
|
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",
|
|
2115
|
+
i0.ɵɵelementStart(84, "div", 296);
|
|
2116
2116
|
i0.ɵɵtext(85);
|
|
2117
2117
|
i0.ɵɵelementEnd();
|
|
2118
|
-
i0.ɵɵelementStart(86, "p",
|
|
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",
|
|
2126
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
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",
|
|
2136
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
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",
|
|
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",
|
|
2145
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
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",
|
|
2151
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
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",
|
|
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",
|
|
2160
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
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",
|
|
2166
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
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",
|
|
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",
|
|
2174
|
+
i0.ɵɵelementStart(128, "span", 266);
|
|
2175
2175
|
i0.ɵɵtext(129);
|
|
2176
2176
|
i0.ɵɵelementEnd()();
|
|
2177
|
-
i0.ɵɵconditionalCreate(130,
|
|
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
|
|
2223
|
-
i0.ɵɵconditionalCreate(0,
|
|
2224
|
-
i0.ɵɵconditionalCreate(1,
|
|
2225
|
-
i0.ɵɵconditionalCreate(2,
|
|
2226
|
-
i0.ɵɵconditionalCreate(3,
|
|
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
|
|
2238
|
-
i0.ɵɵelementStart(0, "span",
|
|
2239
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
2248
|
-
i0.ɵɵelementStart(0, "span",
|
|
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,
|
|
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
|
|
2260
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
2263
|
+
i0.ɵɵelementStart(3, "a", 340);
|
|
2264
2264
|
i0.ɵɵtext(4);
|
|
2265
|
-
i0.ɵɵelement(5, "i",
|
|
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
|
|
2275
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
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
|
|
2287
|
-
i0.ɵɵelementStart(0, "span",
|
|
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",
|
|
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
|
|
2302
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
2306
|
-
i0.ɵɵrepeaterCreate(4,
|
|
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
|
|
2316
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
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
|
|
2327
|
+
function TagsResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
2328
2328
|
const _r54 = i0.ɵɵgetCurrentView();
|
|
2329
|
-
i0.ɵɵelementStart(0, "div",
|
|
2330
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
2333
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
2337
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
2343
|
+
i0.ɵɵelementStart(12, "div", 325)(13, "span", 326);
|
|
2344
2344
|
i0.ɵɵtext(14);
|
|
2345
2345
|
i0.ɵɵelementEnd();
|
|
2346
|
-
i0.ɵɵconditionalCreate(15,
|
|
2346
|
+
i0.ɵɵconditionalCreate(15, TagsResourceComponent_Conditional_15_Conditional_15_Template, 3, 2);
|
|
2347
2347
|
i0.ɵɵelementEnd()();
|
|
2348
|
-
i0.ɵɵconditionalCreate(16,
|
|
2349
|
-
i0.ɵɵconditionalCreate(17,
|
|
2350
|
-
i0.ɵɵconditionalCreate(18,
|
|
2351
|
-
i0.ɵɵelementStart(19, "div",
|
|
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",
|
|
2355
|
-
i0.ɵɵconditionalCreate(23,
|
|
2356
|
-
i0.ɵɵelementStart(24, "div",
|
|
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",
|
|
2359
|
+
i0.ɵɵelementStart(27, "span", 332);
|
|
2360
2360
|
i0.ɵɵtext(28);
|
|
2361
2361
|
i0.ɵɵelementEnd()();
|
|
2362
|
-
i0.ɵɵelementStart(29, "div",
|
|
2362
|
+
i0.ɵɵelementStart(29, "div", 330)(30, "span", 331);
|
|
2363
2363
|
i0.ɵɵtext(31, "Updated");
|
|
2364
2364
|
i0.ɵɵelementEnd();
|
|
2365
|
-
i0.ɵɵelementStart(32, "span",
|
|
2365
|
+
i0.ɵɵelementStart(32, "span", 332);
|
|
2366
2366
|
i0.ɵɵtext(33);
|
|
2367
2367
|
i0.ɵɵelementEnd()()()();
|
|
2368
|
-
i0.ɵɵelementStart(34, "div",
|
|
2369
|
-
i0.ɵɵlistener("click", function
|
|
2370
|
-
i0.ɵɵelement(36, "i",
|
|
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",
|
|
2374
|
-
i0.ɵɵelement(39, "i",
|
|
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
|
|
2398
|
+
function TagsResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
2399
2399
|
const _r56 = i0.ɵɵgetCurrentView();
|
|
2400
|
-
i0.ɵɵelementStart(0, "div",
|
|
2401
|
-
i0.ɵɵlistener("click", function
|
|
2402
|
-
i0.ɵɵelementStart(1, "div",
|
|
2403
|
-
i0.ɵɵlistener("click", function
|
|
2404
|
-
i0.ɵɵelementStart(2, "div",
|
|
2405
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
2409
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
2412
|
+
i0.ɵɵelementStart(8, "div", 352)(9, "p", 353);
|
|
2413
2413
|
i0.ɵɵtext(10);
|
|
2414
2414
|
i0.ɵɵelementEnd()();
|
|
2415
|
-
i0.ɵɵelementStart(11, "div",
|
|
2416
|
-
i0.ɵɵlistener("click", function
|
|
2417
|
-
i0.ɵɵelement(13, "i",
|
|
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
|
|
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
|
|
2431
|
+
function TagsResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
2432
2432
|
const _r57 = i0.ɵɵgetCurrentView();
|
|
2433
|
-
i0.ɵɵelementStart(0, "div",
|
|
2434
|
-
i0.ɵɵlistener("click", function
|
|
2435
|
-
i0.ɵɵelementStart(1, "div",
|
|
2436
|
-
i0.ɵɵlistener("click", function
|
|
2437
|
-
i0.ɵɵelementStart(2, "div",
|
|
2438
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
2442
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
2449
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
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",
|
|
2455
|
-
i0.ɵɵlistener("click", function
|
|
2456
|
-
i0.ɵɵelement(17, "i",
|
|
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
|
|
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
|
|
2470
|
+
function TagsResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
2471
2471
|
const _r58 = i0.ɵɵgetCurrentView();
|
|
2472
|
-
i0.ɵɵelementStart(0, "div",
|
|
2473
|
-
i0.ɵɵlistener("click", function
|
|
2474
|
-
i0.ɵɵelementStart(1, "div",
|
|
2475
|
-
i0.ɵɵlistener("click", function
|
|
2476
|
-
i0.ɵɵelementStart(2, "div",
|
|
2477
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
2481
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
2484
|
+
i0.ɵɵelementStart(8, "div", 352)(9, "div", 358);
|
|
2485
2485
|
i0.ɵɵtext(10);
|
|
2486
2486
|
i0.ɵɵelementEnd();
|
|
2487
|
-
i0.ɵɵelementStart(11, "div",
|
|
2487
|
+
i0.ɵɵelementStart(11, "div", 356)(12, "label");
|
|
2488
2488
|
i0.ɵɵtext(13, "Name");
|
|
2489
2489
|
i0.ɵɵelementEnd();
|
|
2490
|
-
i0.ɵɵelementStart(14, "input",
|
|
2491
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
2492
|
-
i0.ɵɵlistener("keydown.enter", function
|
|
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",
|
|
2494
|
+
i0.ɵɵelementStart(15, "div", 356)(16, "label");
|
|
2495
2495
|
i0.ɵɵtext(17, "Description (optional)");
|
|
2496
2496
|
i0.ɵɵelementEnd();
|
|
2497
|
-
i0.ɵɵelementStart(18, "textarea",
|
|
2498
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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",
|
|
2501
|
-
i0.ɵɵlistener("click", function
|
|
2502
|
-
i0.ɵɵelement(21, "i",
|
|
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
|
|
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
|
|
2521
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
2530
|
+
function TagsResourceComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
2531
2531
|
const _r59 = i0.ɵɵgetCurrentView();
|
|
2532
|
-
i0.ɵɵelementStart(0, "div",
|
|
2533
|
-
i0.ɵɵlistener("click", function
|
|
2534
|
-
i0.ɵɵelementStart(1, "div",
|
|
2535
|
-
i0.ɵɵlistener("click", function
|
|
2536
|
-
i0.ɵɵelementStart(2, "div",
|
|
2537
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
2541
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
2548
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
2549
|
-
i0.ɵɵelementStart(13, "option",
|
|
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,
|
|
2552
|
+
i0.ɵɵrepeaterCreate(15, TagsResourceComponent_Conditional_19_For_16_Template, 2, 3, "option", 362, _forTrack3);
|
|
2553
2553
|
i0.ɵɵelementEnd()()();
|
|
2554
|
-
i0.ɵɵelementStart(17, "div",
|
|
2555
|
-
i0.ɵɵlistener("click", function
|
|
2556
|
-
i0.ɵɵelement(19, "i",
|
|
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
|
|
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
|
|
2573
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
2577
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
2580
|
+
function TagsResourceComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
2581
2581
|
const _r61 = i0.ɵɵgetCurrentView();
|
|
2582
|
-
i0.ɵɵelementStart(0, "div",
|
|
2583
|
-
i0.ɵɵlistener("click", function
|
|
2584
|
-
i0.ɵɵelementStart(1, "div",
|
|
2585
|
-
i0.ɵɵlistener("click", function
|
|
2586
|
-
i0.ɵɵelementStart(2, "div",
|
|
2587
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
2591
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
2594
|
+
i0.ɵɵelementStart(8, "div", 352)(9, "p", 363);
|
|
2595
2595
|
i0.ɵɵtext(10);
|
|
2596
2596
|
i0.ɵɵelementEnd();
|
|
2597
|
-
i0.ɵɵelementStart(11, "div",
|
|
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",
|
|
2601
|
-
i0.ɵɵlistener("ValueChange", function
|
|
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",
|
|
2604
|
-
i0.ɵɵlistener("click", function
|
|
2605
|
-
i0.ɵɵconditionalCreate(17,
|
|
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
|
|
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, "
|
|
7324
|
-
i0.ɵɵ
|
|
7325
|
-
i0.ɵɵ
|
|
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(
|
|
7328
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
7331
|
-
i0.ɵɵ
|
|
7332
|
-
i0.ɵɵconditionalCreate(
|
|
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 ?
|
|
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 ?
|
|
7351
|
+
i0.ɵɵconditional(ctx.IsLoading ? 13 : -1);
|
|
7354
7352
|
i0.ɵɵadvance();
|
|
7355
|
-
i0.ɵɵconditional(!ctx.IsLoading ?
|
|
7353
|
+
i0.ɵɵconditional(!ctx.IsLoading ? 14 : -1);
|
|
7356
7354
|
i0.ɵɵadvance();
|
|
7357
|
-
i0.ɵɵconditional(ctx.ShowItemDetail && ctx.SelectedFeedItem ?
|
|
7355
|
+
i0.ɵɵconditional(ctx.ShowItemDetail && ctx.SelectedFeedItem ? 15 : -1);
|
|
7358
7356
|
i0.ɵɵadvance();
|
|
7359
|
-
i0.ɵɵconditional(ctx.ShowConfirmDialog ?
|
|
7357
|
+
i0.ɵɵconditional(ctx.ShowConfirmDialog ? 16 : -1);
|
|
7360
7358
|
i0.ɵɵadvance();
|
|
7361
|
-
i0.ɵɵconditional(ctx.ShowSplitDialog ?
|
|
7359
|
+
i0.ɵɵconditional(ctx.ShowSplitDialog ? 17 : -1);
|
|
7362
7360
|
i0.ɵɵadvance();
|
|
7363
|
-
i0.ɵɵconditional(ctx.ShowCreateTagDialog ?
|
|
7361
|
+
i0.ɵɵconditional(ctx.ShowCreateTagDialog ? 18 : -1);
|
|
7364
7362
|
i0.ɵɵadvance();
|
|
7365
|
-
i0.ɵɵconditional(ctx.ShowMoveDialog ?
|
|
7363
|
+
i0.ɵɵconditional(ctx.ShowMoveDialog ? 19 : -1);
|
|
7366
7364
|
i0.ɵɵadvance();
|
|
7367
|
-
i0.ɵɵconditional(ctx.ShowMergeIntoDialog ?
|
|
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 — <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\">›</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 (>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> {{ 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\">— 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 — 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 — <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\">›</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 (>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> {{ 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\">— 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 — 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() {
|