diff --git a/copilot-agent-strategy/agent-365-customer-implementation-guide/CHANGELOG.md b/copilot-agent-strategy/agent-365-customer-implementation-guide/CHANGELOG.md index c02ed88..c238a9b 100644 --- a/copilot-agent-strategy/agent-365-customer-implementation-guide/CHANGELOG.md +++ b/copilot-agent-strategy/agent-365-customer-implementation-guide/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to the Microsoft Agent 365 Customer Implementation Guide are documented here. +## 1.1.0 - 2026-09-11 + +- Removed the "Roadmap" section and its navigation link from the Simple view, along with the section's dedicated CSS. Legitimate references to the public Microsoft 365 Roadmap elsewhere in the guide are unchanged. +- Added the public Agent 365 whole-system architecture diagram as the first card in the Diagrams section, extracted faithfully from the public Agent 365 Lifecycle Atlas. The diagram is embedded inline (keeping the guide self-contained and offline), follows the guide's light/dark theme, offers an accessible native modal enlargement, carries a source attribution, and links onward with "For more diagrams, click here" to https://aka.ms/fasttrackext/a365diagram. + ## 1.0.4 - 2026-09-10 - Removed the visible wrapper credit footer (author credits and the "View full MIT License" disclosure) so the guide fills the full viewport height. The author attribution and complete MIT License notice are retained in a non-rendered HTML source comment, so downloaded copies keep the attribution and license. Guide content, Simple/Detailed switching, theme, and print controls are unchanged. diff --git a/copilot-agent-strategy/agent-365-customer-implementation-guide/README.md b/copilot-agent-strategy/agent-365-customer-implementation-guide/README.md index 3ee731a..1d9af57 100644 --- a/copilot-agent-strategy/agent-365-customer-implementation-guide/README.md +++ b/copilot-agent-strategy/agent-365-customer-implementation-guide/README.md @@ -7,9 +7,9 @@ author: - "Pratik Bhusal" - "Manas Biswas" - "Alejandro Lopez" -version: 1.0.4 +version: 1.1.0 published: 2026-09-09 -updated: 2026-09-10 +updated: 2026-09-11 tags: - agent-365 - implementation diff --git a/copilot-agent-strategy/agent-365-customer-implementation-guide/assets/diagrams/lifecycle-atlas-hero-dark.svg b/copilot-agent-strategy/agent-365-customer-implementation-guide/assets/diagrams/lifecycle-atlas-hero-dark.svg new file mode 100644 index 0000000..72d5799 --- /dev/null +++ b/copilot-agent-strategy/agent-365-customer-implementation-guide/assets/diagrams/lifecycle-atlas-hero-dark.svg @@ -0,0 +1,119 @@ + + + +Agent 365 whole-system architecture +Left to right: four entry routes (built-in platform agents; manifest ZIP upload; connected-platform sync, in preview; and custom-coded agents) each pass through their own configure-and-identify card — platform-managed integration (no SDK needed for inventory), admin upload and approval (catalog availability, separate from code hosting), connected-platform sync (metadata only), and the Agent 365 SDK and CLI with an Entra Agent ID for custom integration. Distinct connectors route them into the central Agent 365 registry and control plane, a unified inventory of distinct objects: the registry record, the package or catalog entry, and the identity blueprint reference. The control plane exposes right-hand surfaces: Registry UI with Microsoft Graph inventory and selected governance actions, Microsoft Entra, and Microsoft Defender with Purview, plus independent operations that do not cascade across objects. A separate runtime plane along the bottom runs the agent on its own platform, Azure, or partner host, using governed MCP tools and WorkIQ in preview to reach downstream Microsoft 365 services; the control plane governs it and receives telemetry back. + +Sources & entry routes +Configure & identify +Unified control plane +Observe · govern · secure + + + + + + + + + + + + +Go to section 01 — Lifecycle overview + +1 +Built-in platform agents +Agent Builder (declarative), CopilotStudio, Azure AI Foundry & integratedpartners. Built-in registration wherethe platform supports it. +Go to section 01 — Lifecycle overview + +2 +Manifest ZIP upload +Catalog publication route. Not codehosting, not a universal registrationbypass. +Go to section 10 — Caveats & conflicts + +3 +PREVIEW +External registry sync +Metadata discovery imports (e.g.Vertex AI, Bedrock). Metadata only— no auto-instrumentation, identityor runtime integration. +Go to section 05 — SDKs, tooling & the a365 CLI + +4 +Custom-coded agents +Built on the M365 Agents SDK, AgentFramework or other runtimes. Wired inand registered through the Agent 365SDK / CLI. + +Go to section 01 — Lifecycle overview + +Platform-managed integration +Built-in platforms register where theplatform supports it — no Agent 365SDK needed for inventory. +Go to section 01 — Lifecycle overview + +Admin upload / approval +Manifest ZIP enters the org catalog.Catalog availability is separate fromcode hosting. +Go to section 10 — Caveats & conflicts + +PREVIEW +Connected-platform sync +Imports metadata from externalregistries. Metadata only — noidentity or runtime wiring. +Go to section 05 — SDKs, tooling & the a365 CLI + +Agent 365 SDK / CLI + Agent ID +Custom integration. Registers the agentand derives a per-agent Entra Agent IDvia blueprint auth → token exchange.Optional Agent user (Frontier preview). + +Agent 365 registry & control plane +Unified inventory hub. Metadata &governance only — never hosting or runtime. +Go to section 01 — Lifecycle overview + +Registry record +Ownership · source · status metadata.Metadata record; not publication or deployment. +Go to section 09 — Representative endpoint catalog + +Package / organizational catalog +Publishable app package & catalog entry.Upload, approval & install are separate steps. +Go to section 03 — Identity objects & relationships + +Identity blueprint reference +Points to the Entra Agent ID object —the record does not store the credential. + +Distinct lifecycle objects, not one database row.Publish / install / block, identity disable, stopcompute and delete are independent. Do notassume cross-object deletion cascades. +Go to section 08 — Administration & action semantics + +Registry UI + Microsoft Graph +Inventory & governance surface: browse,publish, install, block. Graph coversinventory plus selected governance actions. +Go to section 03 — Identity objects & relationships + +Microsoft Entra +Agent identity controls. Disabling anAgent ID blocks sign-in but does notdelete the record or the compute. +Go to section 07 — Observability & telemetry + +Microsoft Defender & Purview +Security telemetry & compliancesignals for governed agents. +Go to section 08 — Administration & action semantics + +Independent operations +• publish / install / block• identity disable• stop compute• delete record +No automatic cascade between them. + +governs + +telemetry + +Runtime plane +Agents run on their own platform, Azure or partner host. Agent 365 governs; it does not execute code. + +tool calls + +Go to section 02 — Per-class lifecycle detail + +Agent runtime host +Platform-, Azure- or partner-hosted compute —where the agent's code actually executes. Theregistry record and identity are separate fromthis host. +Go to section 06 — Governed MCP tooling + +PREVIEW +Governed MCP tools + WorkIQ +Policy-checked tool calls under the agent'sdelegated user context — not autonomousservice-to-service. Registration alone doesnot activate every capability. +Go to section 07 — Observability & telemetry + +Downstream Microsoft 365 services +Graph, mail, files and more — reached onlyunder governance. Activity emits telemetrythat surfaces back in the control plane andin Defender & Purview. + \ No newline at end of file diff --git a/copilot-agent-strategy/agent-365-customer-implementation-guide/assets/diagrams/lifecycle-atlas-hero-light.svg b/copilot-agent-strategy/agent-365-customer-implementation-guide/assets/diagrams/lifecycle-atlas-hero-light.svg new file mode 100644 index 0000000..82ef529 --- /dev/null +++ b/copilot-agent-strategy/agent-365-customer-implementation-guide/assets/diagrams/lifecycle-atlas-hero-light.svg @@ -0,0 +1,119 @@ + + + +Agent 365 whole-system architecture +Left to right: four entry routes (built-in platform agents; manifest ZIP upload; connected-platform sync, in preview; and custom-coded agents) each pass through their own configure-and-identify card — platform-managed integration (no SDK needed for inventory), admin upload and approval (catalog availability, separate from code hosting), connected-platform sync (metadata only), and the Agent 365 SDK and CLI with an Entra Agent ID for custom integration. Distinct connectors route them into the central Agent 365 registry and control plane, a unified inventory of distinct objects: the registry record, the package or catalog entry, and the identity blueprint reference. The control plane exposes right-hand surfaces: Registry UI with Microsoft Graph inventory and selected governance actions, Microsoft Entra, and Microsoft Defender with Purview, plus independent operations that do not cascade across objects. A separate runtime plane along the bottom runs the agent on its own platform, Azure, or partner host, using governed MCP tools and WorkIQ in preview to reach downstream Microsoft 365 services; the control plane governs it and receives telemetry back. + +Sources & entry routes +Configure & identify +Unified control plane +Observe · govern · secure + + + + + + + + + + + + +Go to section 01 — Lifecycle overview + +1 +Built-in platform agents +Agent Builder (declarative), CopilotStudio, Azure AI Foundry & integratedpartners. Built-in registration wherethe platform supports it. +Go to section 01 — Lifecycle overview + +2 +Manifest ZIP upload +Catalog publication route. Not codehosting, not a universal registrationbypass. +Go to section 10 — Caveats & conflicts + +3 +PREVIEW +External registry sync +Metadata discovery imports (e.g.Vertex AI, Bedrock). Metadata only— no auto-instrumentation, identityor runtime integration. +Go to section 05 — SDKs, tooling & the a365 CLI + +4 +Custom-coded agents +Built on the M365 Agents SDK, AgentFramework or other runtimes. Wired inand registered through the Agent 365SDK / CLI. + +Go to section 01 — Lifecycle overview + +Platform-managed integration +Built-in platforms register where theplatform supports it — no Agent 365SDK needed for inventory. +Go to section 01 — Lifecycle overview + +Admin upload / approval +Manifest ZIP enters the org catalog.Catalog availability is separate fromcode hosting. +Go to section 10 — Caveats & conflicts + +PREVIEW +Connected-platform sync +Imports metadata from externalregistries. Metadata only — noidentity or runtime wiring. +Go to section 05 — SDKs, tooling & the a365 CLI + +Agent 365 SDK / CLI + Agent ID +Custom integration. Registers the agentand derives a per-agent Entra Agent IDvia blueprint auth → token exchange.Optional Agent user (Frontier preview). + +Agent 365 registry & control plane +Unified inventory hub. Metadata &governance only — never hosting or runtime. +Go to section 01 — Lifecycle overview + +Registry record +Ownership · source · status metadata.Metadata record; not publication or deployment. +Go to section 09 — Representative endpoint catalog + +Package / organizational catalog +Publishable app package & catalog entry.Upload, approval & install are separate steps. +Go to section 03 — Identity objects & relationships + +Identity blueprint reference +Points to the Entra Agent ID object —the record does not store the credential. + +Distinct lifecycle objects, not one database row.Publish / install / block, identity disable, stopcompute and delete are independent. Do notassume cross-object deletion cascades. +Go to section 08 — Administration & action semantics + +Registry UI + Microsoft Graph +Inventory & governance surface: browse,publish, install, block. Graph coversinventory plus selected governance actions. +Go to section 03 — Identity objects & relationships + +Microsoft Entra +Agent identity controls. Disabling anAgent ID blocks sign-in but does notdelete the record or the compute. +Go to section 07 — Observability & telemetry + +Microsoft Defender & Purview +Security telemetry & compliancesignals for governed agents. +Go to section 08 — Administration & action semantics + +Independent operations +• publish / install / block• identity disable• stop compute• delete record +No automatic cascade between them. + +governs + +telemetry + +Runtime plane +Agents run on their own platform, Azure or partner host. Agent 365 governs; it does not execute code. + +tool calls + +Go to section 02 — Per-class lifecycle detail + +Agent runtime host +Platform-, Azure- or partner-hosted compute —where the agent's code actually executes. Theregistry record and identity are separate fromthis host. +Go to section 06 — Governed MCP tooling + +PREVIEW +Governed MCP tools + WorkIQ +Policy-checked tool calls under the agent'sdelegated user context — not autonomousservice-to-service. Registration alone doesnot activate every capability. +Go to section 07 — Observability & telemetry + +Downstream Microsoft 365 services +Graph, mail, files and more — reached onlyunder governance. Activity emits telemetrythat surfaces back in the control plane andin Defender & Purview. + \ No newline at end of file diff --git a/copilot-agent-strategy/agent-365-customer-implementation-guide/index.html b/copilot-agent-strategy/agent-365-customer-implementation-guide/index.html index d3cf63c..f49dc9d 100644 --- a/copilot-agent-strategy/agent-365-customer-implementation-guide/index.html +++ b/copilot-agent-strategy/agent-365-customer-implementation-guide/index.html @@ -820,207 +820,27 @@ font-family: Consolas, "Courier New", Courier, monospace; } -/* ---- Public roadmap section ---- */ -.rm-notice { - display: flex; - flex-wrap: wrap; - align-items: baseline; - gap: 10px 16px; - padding: 14px 16px; - margin-bottom: 22px; - border: 1px solid var(--cp-border); - border-left: 3px solid var(--cp-accent); - border-radius: 0.625rem; - background: var(--cp-surface-soft); -} - -.rm-notice p { - margin: 0; - flex: 1 1 320px; - color: var(--cp-text-muted); - font-size: 14px; -} - -.rm-notice strong { - color: var(--cp-text); -} - -.rm-snapshot { - display: inline-flex; - align-items: center; - padding: 4px 11px; - border: 1px solid var(--cp-border-strong); - border-radius: 999px; - background: var(--cp-surface); - color: var(--cp-text); - font-size: 12px; - font-weight: 700; - letter-spacing: 0.01em; -} - -.rm-board { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 22px; - align-items: start; -} - -.rm-lane { - display: grid; - gap: 16px; -} - -.rm-lane-head { - display: flex; - align-items: baseline; - justify-content: space-between; - gap: 12px; - padding-bottom: 10px; - border-bottom: 2px solid var(--cp-border); -} - -.rm-lane-head h3 { - margin: 0; - font-size: 19px; - letter-spacing: -0.02em; -} - -.rm-lane-tag { - font-size: 11px; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--cp-text-muted); - white-space: nowrap; -} - -/* Editorial timeline rail running down each lane. */ -.rm-items { - display: grid; - gap: 14px; - position: relative; - padding-left: 26px; -} - -.rm-items::before { - content: ""; - position: absolute; - left: 8px; - top: 8px; - bottom: 8px; - width: 2px; - background: var(--cp-border); -} - -.rm-item { - position: relative; -} - -.rm-item::before { - content: ""; - position: absolute; - left: -23px; - top: 20px; - width: 12px; - height: 12px; - border-radius: 50%; - background: var(--cp-surface); - border: 2px solid var(--cp-accent); -} - -.rm-item.is-watch::before { - border-color: var(--cp-border-strong); -} - -.rm-item-head { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: 12px; - margin-bottom: 8px; -} - -.rm-item-head h4 { - margin: 0; - font-size: 16px; - letter-spacing: -0.01em; -} - -.rm-item-head .pill { - flex-shrink: 0; -} - -.rm-meta { - display: flex; - flex-wrap: wrap; - gap: 6px 16px; - margin: 0 0 10px; - font-size: 13px; - color: var(--cp-text-muted); -} - -.rm-k { - font-weight: 700; - color: var(--cp-text-soft); - text-transform: uppercase; - letter-spacing: 0.04em; - font-size: 11px; - margin-right: 5px; -} - -.rm-item p { - margin: 0 0 10px; - color: var(--cp-text-muted); -} - -.rm-item p:last-child { - margin-bottom: 0; -} - -.rm-flag { - padding: 9px 11px; - border: 1px solid var(--cp-border); - border-left: 3px solid var(--cp-warning); - border-radius: 6px; - background: var(--cp-surface-soft); - font-size: 13px; - color: var(--cp-text-muted) !important; -} - -.rm-flag strong { - color: var(--cp-text); -} - -.rm-links { - color: var(--cp-text) !important; - font-size: 14px; - line-height: 1.7; -} - -.rm-links a { - font-weight: 600; -} - -.rm-todo { - margin-top: 24px; -} - -.rm-todo ul { - margin: 4px 0 0; - padding-left: 20px; -} - -.rm-todo li { - margin-bottom: 6px; -} - -.rm-todo li:last-child { - margin-bottom: 0; -} - -.rm-todo li strong { - display: inline; - margin: 0; +.diagram-card--atlas { position: relative; } +.diagram-atlas-actions { margin-top: 14px; display: flex; flex-direction: column; gap: 8px; } +.atlas-zoom-open { align-self: flex-start; display: inline-flex; align-items: center; gap: 6px; cursor: zoom-in; font-size: 13px; font-weight: 600; color: var(--cp-link); background: var(--cp-bg-elevated); border: 1px solid var(--cp-border); border-radius: 0.5rem; padding: 6px 12px; } +.atlas-zoom-open:hover { border-color: var(--cp-border-strong); } +.atlas-zoom-open:focus-visible, .atlas-zoom-close:focus-visible { outline: 2px solid var(--cp-link); outline-offset: 2px; } +.diagram-atlas-source { margin: 0; font-size: 12.5px; color: var(--cp-text-muted); } +.diagram-atlas-more { margin: 0; font-size: 13px; font-weight: 600; } +.atlas-zoom-dialog { width: min(1500px, calc(100vw - 48px)); max-width: none; height: auto; max-height: 92vh; margin: auto; padding: 0; border: 0; background: transparent; color: var(--cp-text); overflow: visible; } +.atlas-zoom-dialog:not([open]) { display: none; } +.atlas-zoom-dialog::backdrop { background: var(--cp-overlay); } +.atlas-zoom-panel { display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 12px; max-height: 92vh; } +.atlas-zoom-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; background: var(--cp-surface); border: 1px solid var(--cp-border); border-radius: 0.625rem; padding: 10px 14px; box-shadow: var(--cp-shadow); } +.atlas-zoom-bar strong { font-size: 14px; } +.atlas-zoom-close { cursor: pointer; font-size: 13px; font-weight: 600; color: var(--cp-link); background: var(--cp-bg-elevated); border: 1px solid var(--cp-border); border-radius: 0.5rem; padding: 6px 12px; } +.atlas-zoom-close:hover { border-color: var(--cp-border-strong); } +.atlas-zoom-body { overflow: auto; background: var(--cp-surface); border: 1px solid var(--cp-border); border-radius: 0.625rem; padding: 16px; box-shadow: var(--cp-shadow); } +.atlas-zoom-body img { display: block; width: 100%; height: auto; max-width: 100%; } +@media (max-width: 480px) { + .atlas-zoom-dialog { width: calc(100vw - 20px); max-height: calc(100vh - 20px); } + .atlas-zoom-panel { max-height: calc(100vh - 20px); } + .atlas-zoom-body { padding: 8px; } } .diagram-grid { @@ -1125,7 +945,6 @@ .grid.cols-2, .grid.cols-3, .grid.cols-4, - .rm-board, .arch-row, .flow { grid-template-columns: 1fr; @@ -1403,15 +1222,6 @@ .crumb { flex-wrap: wrap; } - .rm-item-head { - flex-direction: column; - } - .rm-item-head .pill { - align-self: flex-start; - } - .rm-links a { - overflow-wrap: anywhere; - } html[data-theme="dark"] .section { padding: 18px 16px 20px; border-radius: 14px; @@ -2291,7 +2101,6 @@

Control plane deployment guide

What you need to know
Summary - Roadmap Architecture Diagrams Where it touches @@ -2377,153 +2186,6 @@

Secure

-
-
-

Roadmap

- Public sources only -
-

Where the Agent 365 control plane and the Copilot Studio agent-identity story are heading. This is a point-in-time read of public Microsoft roadmap, Learn, and Message Center signals — useful for planning, not a delivery commitment.

- -
- Public roadmap snapshot: September 1, 2026 -

Roadmap dates are targets, not commitments, and they can move. When a target month has already passed, treat the item's current status as the source of truth — a past target date does not mean a feature has shipped.

-
- -
-
-
-

Recently landed

- Shipping or in preview -
-
-
-
-

Agent 365 control plane reached GA

- Status: Launched -
-
- Roadmap#558448 - TargetMay CY2026 - ModifiedAug 28, 2026 -
-

Agent 365 is the control plane for AI agents. It helps IT and security admins observe, govern, and secure agents across Microsoft 365 and connected platforms.

-

Microsoft 365 Roadmap #558448 ↗

-
-
-
-

New Copilot Studio agents get Entra Agent IDs automatically

- Status: In effect for new agents -
-
- SourceMicrosoft Learn - AppliesAfter May 2026 -
-

After May 2026, Copilot Studio automatically creates a Microsoft Entra Agent ID for each new agent. Older agents continue to use app registrations during the transition.

-

Microsoft Learn: Use Entra Agent identities ↗

-
-
-
-

Self-service migration for older Copilot Studio agent identities

- Status: Preview, rolling out -
-
- Message CenterMC1462458 - Rollout beganAug 24, 2026 - PublishedAug 26, 2026 -
-

A self-service path to move older Copilot Studio agent identities to Entra Agent IDs. The recommended Advisor experience runs in the Power Platform admin center, requires Power Platform inventory, and supports small pilot or batch migration, end-to-end validation, and rollback.

-

Preview: this migration feature and its documentation are preview. Validate before making production assumptions.

-

Microsoft Learn: About agent identity migration ↗
Public Message Center mirror: MC1462458 ↗

-
-
-
- -
-
-

Coming soon / watch

- In development -
-
-
-
-

Agent 365 registry sync

- Status: In development -
-
- Roadmap#559615 - Preview targetMay CY2026 - GA targetJul CY2026 -
-

External AI-platform agents automatically sync into the Agent 365 registry for broader visibility and governance.

-

Target vs. status: both target months have passed, but the roadmap still shows In development. Do not assume it is available — current status wins.

-

Microsoft 365 Roadmap #559615 ↗

-
-
-
-

Agent 365 dashboards in Copilot Analytics (Insights)

- Status: In development -
-
- Roadmap#567667 (leaders), #567893 (managers) - TargetsJul / Aug CY2026 -
-

Historical activity across all agents registered through Agent 365, surfaced for leaders and for managers.

-

Target vs. status: both items remain In development in this snapshot even where the target month has passed. Current status takes precedence.

-

Roadmap #567667 (leaders) ↗
Roadmap #567893 (managers) ↗

-
-
-
-

Use Agent 365 agents in Copilot Chat and declarative agents

- Status: In development -
-
- Roadmap#567670 - TargetAug CY2026 -
-

Agent 365-published agents that implement Agent2Agent can be used as connected agents in Agent Builder or Copilot Studio.

-

Target vs. status: the target month has passed, but the roadmap still shows In development. Do not assume it is available — current status wins.

-

Microsoft 365 Roadmap #567670 ↗

-
-
-
-

Agent Readiness in Copilot Studio

- Status: In development -
-
- Roadmap#568762 - GA targetSep CY2026 -
-

A Review indicator surfaces publish blockers and risks — including policy restrictions and missing evaluations — before an agent is published.

-

Microsoft 365 Roadmap #568762 ↗

-
-
-
-

Agent sharing among Copilot Studio makers

- Status: In development -
-
- Roadmap#569475 - Preview targetSep CY2026 - GA targetOct CY2026 -
-

An Agent Viewer can view analytics and evaluations; an Editor can view, edit, configure, share, and publish. Roles are auto-assigned.

-

Microsoft 365 Roadmap #569475 ↗

-
-
-
-
- -
- What to do now - -
-
-

Technical architecture

@@ -2566,6 +2228,30 @@

Mermaid diagrams

These are the same diagram concepts from the guide, rendered with Mermaid so you can copy the source into docs, decks, or technical design notes.

These diagrams stay cross-platform on purpose. For how each build platform behaves stage by stage, see Agent lifecycles by platform — the single source of truth for platform-specific differences.

+
+

Agent 365 whole-system architecture

+
+ "Agent + "Agent +
+
+ +

Source: Microsoft Agent 365 Lifecycle Atlas — “The whole system — Agent 365 in one picture” (Architecture). Reproduced from the public FastTrack Agent 365 Lifecycle Atlas.

+

For more diagrams, click here

+
+ +
+
+ Agent 365 whole-system architecture + +
+
+ "" + "" +
+
+
+

Agent 365 control plane architecture

@@ -6542,6 +6228,17 @@

Sources reviewed

if(navLinks.length&&sections.length&&"IntersectionObserver" in window){var ob=new IntersectionObserver(function(es){es.forEach(function(en){if(en.isIntersecting){navLinks.forEach(function(a){var on=(a.getAttribute("href")||"").trim()==="#"+en.target.id;a.classList.toggle("active",on);if(on){a.setAttribute("aria-current","location");}else{a.removeAttribute("aria-current");}});}});},{rootMargin:"-25% 0px -65% 0px",threshold:0});sections.forEach(function(s){ob.observe(s);});} document.querySelectorAll(".vp-copy").forEach(function(btn){btn.addEventListener("click",function(e){e.preventDefault();e.stopPropagation();if(btn.dataset.copied==="true")return;var card=btn.closest(".vp-kql");if(!card)return;var pre=card.querySelector("pre");if(!pre)return;var text=pre.textContent;function ok(){var o=btn.textContent;btn.dataset.copied="true";btn.textContent="Copied";setTimeout(function(){btn.dataset.copied="false";btn.textContent=o;},1400);}function fb(){var ta=document.createElement("textarea");ta.value=text;ta.style.position="absolute";ta.style.left="-9999px";document.body.appendChild(ta);ta.select();try{document.execCommand("copy");ok();}catch(err){}document.body.removeChild(ta);}if(navigator.clipboard&&window.isSecureContext){navigator.clipboard.writeText(text).then(ok).catch(fb);}else{fb();}});}); var tabs=document.querySelectorAll(".tab");var panels=document.querySelectorAll(".tab-panel");tabs.forEach(function(tab){tab.addEventListener("click",function(){var target=tab.dataset.tab;tabs.forEach(function(i){i.classList.toggle("active",i===tab);});panels.forEach(function(p){p.classList.toggle("active",p.id===target);});});}); + var atlasDialog=document.querySelector(".atlas-zoom-dialog"); + var atlasOpen=document.querySelector(".atlas-zoom-open"); + var atlasClose=atlasDialog&&atlasDialog.querySelector(".atlas-zoom-close"); + if(atlasDialog&&atlasOpen&&typeof atlasDialog.showModal==="function"){ + function setParentChromeInert(inert){try{var header=parent.document.querySelector(".cx-header");if(header)header.inert=inert;}catch(e){}} + atlasOpen.hidden=false; + atlasOpen.addEventListener("click",function(){setParentChromeInert(true);atlasDialog.showModal();}); + if(atlasClose)atlasClose.addEventListener("click",function(){atlasDialog.close();}); + atlasDialog.addEventListener("click",function(e){if(e.target===atlasDialog)atlasDialog.close();}); + atlasDialog.addEventListener("close",function(){setParentChromeInert(false);}); + } (function(){ function reduceMotion(){try{return !!(window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches);}catch(e){return false;}} function resolveFragment(hash){