{"version":3,"file":"XTSpendView.C69ATXGG.mjs","names":["React.useState","install","React.useRef","PRESETS","CSS","React.useRef","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","window","ce","init_jsx_runtime","c","p","_e","de","addPropertyControls","RenderTarget","ControlType","init_framer_BWFVvmND","XTStyle","css","useAnimated","ok","setOk","once","w","key","install","afterPaint","id","fn","whenSized","last","stable","n","raf","done","tick","r","box","k","settle","run","inst","getInst","ids","ms","teardown","step","f","gc","hidden","others","cls","keep","e","__patch","__saved","P","watched","t","add","__recorders","type","l","o","cb","opt","__unpatch","track","rec","open","disposed","dispose","close","wait","until","XT_FONT_IMPORT","XT_BASE_CSS","XT_LOCKUP_CSS","init_XTShared","install$1","reduce","$all","root","sel","fmtK","tween","from","to","fmt","t0","dur","el","init","items","live","it","name","b","numOf","v","attr","recount","projected","approvedSum","approvedN","s","sv","prev","animate","setState","state","focusNext","io","entries","en","boot","XTPolicies","props","animated","host","html","PRESETS$1","\"home\"","a","d","x","unsettle","cancelSized","untrack","cancel","api","style","CSS$1","init_XTPolicies","\"finops\"","\"enablement\"","uid","nums","words","tag","attrs","parent","pathOf","pts","i","smooth","p0","p1","p2","p3","c1x","c1y","c2x","c2y","lo","hi","money","unit","drawForecast","W","H","months","actual","budget","series","narrow","names","pad","pw","ph","all","max","X","Y","svg","defs","ga","gf","xT","ca","\"class\"","cf","y","m","fl","bp","half","x0","x1","bl","apts","gA","dA","gF","start","spts","val","lt","drawSpark","mk","min","rng","mx","build","wrap","on","base","gap","panels","tabs","charts","sparks","active","drawAll","sync","seen","play","panel","current","win","select","h","focus","j","lastW","initAll","XTSpendView","PRESETS","setRootAttr","CSS","init_XTSpendView","\"governance\""],"sources":["https:/framerusercontent.com/modules/dJPZ5VRbhPbRDwnU4bd6/SWSCRD2FKFAHO19Do92q/XTShared.js","https:/framerusercontent.com/modules/lJyDrDRHU72JNqFbODgH/f3hqDM6iTKWRddc1NKuE/XTPolicies.js","https:/framerusercontent.com/modules/gnrzEB9JT9Pke7lXmi1E/i8s9tqMGWl3Rl4R0Ns2D/XTSpendView.js"],"sourcesContent":["// @ts-nocheck\n// XT shared runtime for the XT code components (redesign-r8). Generated from site/assets/xt.css (sections 1, 3, 6, 7, 8, 14, 23)\n// and site/assets/brand/lockup.css. Tokens are scoped to .xtcc so nothing leaks into legacy pages.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget}from\"framer\";export const XT_FONT_IMPORT=`@import url(\"https://fonts.googleapis.com/css2?family=Fragment+Mono&family=Funnel+Sans:wght@300;400;500;600&display=swap\");`;export const XT_BASE_CSS=`.xtcc {\n  /* Ink and text */\n  --ink: #0c0a09;            /* display, primary text */\n  --ink-2: #292524;          /* ink pill, strong body, chart ink */\n  --body: #4e4e4e;           /* running text */\n  --muted: #716b64;          /* subtitles, labels (AA 4.5+ on canvas and --strong) */\n  --muted-soft: #a8a29e;     /* disabled, faint axis text */\n\n  /* Surfaces */\n  --canvas: #f5f5f4;         /* page floor (warm off-white) */\n  --canvas-soft: #fafaf9;    /* alternating band, figure wells */\n  --card: #ffffff;\n  --strong: #f0efed;         /* badges, quiet plates */\n  --dark: #0c0a09;           /* dark band (rare: max one per page) */\n  --dark-2: #1c1917;         /* panels on dark */\n  --dark-3: #292524;         /* raised rows on dark */\n  --on-dark: #fafaf9;\n  --on-dark-soft: #c9c4bf;   /* body on dark */\n  --on-dark-muted: #948e88;  /* labels on dark (AA on --dark, --dark-2, --dark-3) */\n\n  /* Hairlines */\n  --hair: #e7e5e4;\n  --hair-soft: #f0efed;\n  --hair-strong: #d6d3d1;\n  --hair-ink: #292524;       /* section-opening rule */\n  --hair-dark: rgba(250, 250, 249, .10);\n  --hair-dark-strong: rgba(250, 250, 249, .18);\n\n  /* Atmosphere: light only. Never on text, buttons or card fills. */\n  --mint: #a7e5d3;\n  --peach: #f4c5a8;\n  --lavender: #c8b8e0;\n  --sky: #a8c8e8;\n  --rose: #e8b8c4;\n  /* deeper stops for glow on the dark band */\n  --lavender-deep: #8d7bb8;\n  --sky-deep: #6f93bd;\n\n  /* Data ramps for product mocks (team tiles, heatmaps). Pastel, never rust. */\n  --ramp-0: #efedf5;\n  --ramp-1: #d9d0ea;\n  --ramp-2: #c3b4dd;\n  --ramp-3: #a6bfdf;\n  --ramp-4: #86a9d3;\n\n  /* Product-UI signal (inside mocks only, sparingly) */\n  --pos: #2f7a56;\n  --neg: #a4492a;\n\n  /* Type families (crux-labs.ai). One sans family does everything; mono is the small second voice. */\n  --display: \"XT Display\", \"Funnel Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif;  /* headings, big numbers */\n  --sans: \"Funnel Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif;                    /* body, UI, buttons */\n  --mono: \"Fragment Mono\", ui-monospace, \"SFMono-Regular\", Menlo, monospace;                  /* eyebrows, labels, data captions */\n  --serif: var(--display);   /* DEPRECATED alias kept so older markup and visuals inherit the change. Not a serif. */\n\n  /* Type scale (size / line-height / tracking). Crux sizes: 64 hero, 55 section, 44, 32, 24, 20, 18, 16, 14, 12.\n     Fluid values hit the Crux desktop size at 1440px and the Crux mobile size at phone width. */\n  --fs-mega: clamp(40px, 4.45vw, 64px);     --lh-mega: 1.1;     --ls-mega: -0.04em;\n  --fs-mega-long: clamp(32px, 3.2vw, 46px); /* round 7: hero H1s too long for 2 lines at 64 (governance, research articles) */\n  --mega-measure: 22ch;                     /* round 7: hero H1 measure (1ch = .55em in Funnel Sans: 22ch = 12.1em) */\n  --mega-measure-long: 32ch;                /* round 7: measure for --fs-mega-long titles */\n  --fs-display: clamp(32px, 3.82vw, 55px);  --lh-display: 1.2;  --ls-display: -0.04em;\n  --fs-h2: clamp(28px, 3.06vw, 44px);       --lh-h2: 1.2;       --ls-h2: -0.04em;\n  --fs-h3: clamp(24px, 2.23vw, 32px);       --lh-h3: 1.2;       --ls-h3: -0.04em;\n  --fs-h4: 24px;                            --lh-h4: 1.3;       --ls-h4: -0.04em;\n  --fs-title: 20px;   /* Funnel Sans 500 */\n  --fs-lede: clamp(18px, 1.39vw, 20px);\n  --fs-body: 16px;\n  --fs-sm: 14px;\n  --fs-xs: 13px;\n  --fs-eyebrow: 12px; /* Fragment Mono caps */\n  --fs-mono: 12px;    /* Fragment Mono: labels, captions, data */\n  --lh-body: 1.4;     /* Crux 140% for running text */\n  --lh-snug: 1.3;     /* Crux 130% for titles, labels, buttons */\n  --ls-body: -0.04em; /* Crux tracks almost all sans text at -4% */\n  --ls-caps: 0em;     /* caps labels are set in mono, untracked */\n\n  /* Spacing. Crux rhythm: 8, 10, 12, 16, 24, 32, 40, 48, 64, 80, 112. */\n  --s-1: 4px;  --s-2: 8px;  --s-3: 12px; --s-4: 16px; --s-5: 20px;\n  --s-6: 24px; --s-7: 32px; --s-8: 40px; --s-9: 48px; --s-10: 64px;\n  --s-11: 80px; --s-12: 112px; --s-13: 128px;\n  --section: clamp(64px, 7.8vw, 112px);       /* vertical band padding: 112 at 1440, 64 on phones */\n  --section-tight: clamp(48px, 5.6vw, 80px);\n\n  /* Layout (Crux: 64px side padding at 1440, 40px under 1200, 16px under 810) */\n  --wrap: 1312px;\n  --gutter: 64px;\n  --nav-h: 64px;\n\n  /* Radii */\n  --r-xs: 4px; --r-sm: 6px; --r-md: 8px; --r-lg: 12px;\n  --r-xl: 16px; --r-xxl: 24px; --r-pill: 9999px;\n\n  /* Elevation: hairline + one soft tier, plus a float tier for product mocks */\n  --sh-1: 0 4px 16px rgba(12, 10, 9, .04);\n  --sh-2: 0 1px 2px rgba(12, 10, 9, .04), 0 12px 32px -12px rgba(41, 37, 36, .14);\n  --sh-float: 0 1px 0 rgba(255, 255, 255, .8) inset, 0 0 0 1px rgba(12, 10, 9, .04), 0 40px 80px -36px rgba(41, 37, 36, .30), 0 14px 28px -16px rgba(41, 37, 36, .10);\n  --sh-menu: 0 0 0 1px rgba(12, 10, 9, .05), 0 24px 56px -20px rgba(41, 37, 36, .22), 0 6px 16px -8px rgba(41, 37, 36, .08);\n\n  /* Motion */\n  --ease: cubic-bezier(.2, .7, .1, 1);\n  --ease-out: cubic-bezier(.16, 1, .3, 1);\n  --t-fast: .18s;\n  --t-med: .32s;\n\n  /* Grain (SVG fractal noise) */\n  --grain: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n' color-interpolation-filters='sRGB' x='0' y='0'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch' result='t'/><feColorMatrix in='t' values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 2.2 -1.08' result='d'/><feColorMatrix in='t' values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 -2.2 1.12' result='l'/><feMerge><feMergeNode in='d'/><feMergeNode in='l'/></feMerge></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>\");\n}\n   -------------------------------------------------------------------------- */\n/* Display and headings: Funnel Sans 400, -4% tracking, 110-130% leading (Crux).\n   .serif is kept as a class name for old markup; it now renders the display sans. */\n.t-mega, .t-display, .t-h2, .t-h3, .t-h4, .serif {\n  font-family: var(--display);\n  font-weight: 400;\n  color: var(--ink);\n  text-wrap: balance;\n}\n.serif { letter-spacing: var(--ls-body); }\n.t-mega    { font-size: var(--fs-mega);    line-height: var(--lh-mega);    letter-spacing: var(--ls-mega); }\n.t-display { font-size: var(--fs-display); line-height: var(--lh-display); letter-spacing: var(--ls-display); }\n.t-h2      { font-size: var(--fs-h2);      line-height: var(--lh-h2);      letter-spacing: var(--ls-h2); }\n.t-h3      { font-size: var(--fs-h3);      line-height: var(--lh-h3);      letter-spacing: var(--ls-h3); }\n.t-h4      { font-size: var(--fs-h4);      line-height: var(--lh-h4);      letter-spacing: var(--ls-h4); }\n/* No italics in this system (Funnel Sans has none). Emphasis in a heading drops to the muted ink. */\n.t-mega em, .t-display em, .t-h2 em, .t-h3 em, .t-h4 em { font-style: normal; color: var(--muted); }\n.band-dark :is(.t-mega, .t-display, .t-h2, .t-h3, .t-h4) em { color: var(--on-dark-muted); }\n.t-title   { font: 500 var(--fs-title)/var(--lh-snug) var(--sans); letter-spacing: var(--ls-body); color: var(--ink); }\n.lede      { font-size: var(--fs-lede); line-height: var(--lh-body); color: var(--body); text-wrap: pretty; max-width: 36em; }\n.body      { font-size: var(--fs-body); line-height: var(--lh-body); color: var(--body); text-wrap: pretty; }\n.small     { font-size: var(--fs-sm); line-height: var(--lh-body); color: var(--body); }\n.caption   { font-size: var(--fs-xs); line-height: var(--lh-body); color: var(--muted); }\n.ink { color: var(--ink); }\n.muted { color: var(--muted); }\n.measure { max-width: 36em; }\n.measure-narrow { max-width: 28em; }\n.nowrap { white-space: nowrap; }\n\n/* Eyebrow: Fragment Mono caps, 12px, untracked (Crux small-label voice). */\n.eyebrow {\n  display: inline-flex; align-items: center; gap: 10px;\n  font: 400 var(--fs-eyebrow)/var(--lh-snug) var(--mono);\n  letter-spacing: var(--ls-caps);\n  text-transform: uppercase;\n  color: var(--muted);\n}\n.eyebrow--dot::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #fff 0, var(--lavender) 45%, var(--sky) 100%); box-shadow: 0 0 0 1px rgba(12,10,9,.06); }\n.eyebrow--rule::before { content: \"\"; width: 24px; height: 1px; background: currentColor; opacity: .6; }\n\n/* Mono: eyebrows, small labels, fig captions, data labels in mocks */\n.mono { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: 0; }\n\n   -------------------------------------------------------------------------- */\n/* Crux button: small 4px-radius rectangle, Funnel Sans 14px caps at -4%. */\n.btn {\n  --btn-h: 40px;\n  display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n  height: var(--btn-h); padding: 0 20px;\n  border-radius: var(--r-xs); border: 1px solid transparent;\n  font: 400 14px/1 var(--sans); letter-spacing: var(--ls-body); text-transform: uppercase; white-space: nowrap;\n  transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease), transform var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);\n}\n.btn:active { transform: translateY(1px); }\n.btn--ink { background: var(--ink-2); color: #fff; box-shadow: 0 1px 0 rgba(255,255,255,.08) inset, 0 1px 2px rgba(12,10,9,.12); }\n.btn--ink:hover { background: var(--ink); }\n.btn--outline { background: var(--card); color: var(--ink); border-color: var(--hair); }\n.btn--outline:hover { border-color: var(--ink-2); background: var(--card); }\n.btn--sm { --btn-h: 36px; padding: 0 16px; font-size: 13px; }\n.btn--lg { --btn-h: 48px; padding: 0 24px; font-size: 14px; }\n.band-dark .btn--ink { background: var(--on-dark); color: var(--ink); }\n.band-dark .btn--ink:hover { background: #fff; }\n.band-dark .btn--outline { color: var(--on-dark); border-color: var(--hair-dark-strong); background: transparent; }\n.band-dark .btn--outline:hover { border-color: var(--on-dark); background: rgba(255,255,255,.04); }\n.btn-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n@media (max-width: 640px) {\n  .btn-row--stack { flex-direction: column; align-items: stretch; }\n  .btn-row--stack .btn { width: 100%; --btn-h: 50px; }\n}\n\n/* Text link with arrow */\n.link-arrow {\n  display: inline-flex; align-items: center; gap: 8px;\n  font: 400 16px/var(--lh-snug) var(--sans); letter-spacing: var(--ls-body); color: var(--ink);\n  padding-bottom: 3px;\n  background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1px no-repeat;\n  background-color: transparent;\n  transition: background-size var(--t-med) var(--ease);\n}\n.link-arrow::after {\n  content: \"\"; width: 14px; height: 10px; flex: none;\n  background: currentColor;\n  -webkit-mask: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'><path d='M0 5h12.5M8.5 1l4 4-4 4' fill='none' stroke='black' stroke-width='1.4'/></svg>\") center / contain no-repeat;\n          mask: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'><path d='M0 5h12.5M8.5 1l4 4-4 4' fill='none' stroke='black' stroke-width='1.4'/></svg>\") center / contain no-repeat;\n  transition: transform var(--t-med) var(--ease);\n}\n.link-arrow:hover::after { transform: translateX(3px); }\n.link-arrow:hover { background-size: 0% 1px; background-position: 100% 100%; }\n.link-arrow--quiet { color: var(--body); font-weight: 400; }\n.link-arrow--ext::after { transform: rotate(-45deg); }\n.link-arrow--ext:hover::after { transform: rotate(-45deg) translateX(3px); }\n\n/* Inline link inside prose */\n.link-inline { color: var(--ink); text-decoration: underline; text-decoration-color: var(--hair-strong); text-underline-offset: 3px; text-decoration-thickness: 1px; transition: text-decoration-color var(--t-fast); }\n.link-inline:hover { text-decoration-color: var(--ink); }\n.band-dark .link-inline { color: var(--on-dark); text-decoration-color: var(--hair-dark-strong); }\n\n   -------------------------------------------------------------------------- */\n.badge {\n  display: inline-flex; align-items: center; gap: 6px; min-height: 24px; padding: 5px 10px;\n  flex: none; width: max-content; max-width: none; box-sizing: border-box;\n  border-radius: var(--r-pill); background: var(--strong); color: var(--ink-2);\n  font: 400 11px/1 var(--mono); letter-spacing: 0; text-transform: uppercase; white-space: nowrap;\n}\n.badge--outline { background: transparent; box-shadow: inset 0 0 0 1px var(--hair-strong); }\n.badge__dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }\n.badge--recommend .badge__dot { background: var(--sky-deep); }\n.badge--enforced .badge__dot { background: var(--lavender-deep); }\n.band-dark .badge, .ui--dark .badge { background: var(--dark-3); color: var(--on-dark-soft); }\n\n/* Round 5: the sample-data tag on product mocks is retired (founder feedback). Mocks show their\n   numbers without a tag; .tag-illus is kept only as a safety net so stray markup never renders. */\n.tag-illus { display: none !important; }\n\n   <div class=\"atmos\" aria-hidden=\"true\">\n     <span class=\"orb orb--peach\" style=\"--x:20%;--y:30%;--size:520px\"></span>\n   </div>\n   or a preset field: <div class=\"atmos atmos--hero\" aria-hidden=\"true\"></div>\n   -------------------------------------------------------------------------- */\n.atmos { position: absolute; inset: 0; pointer-events: none; z-index: -1; overflow: visible; }\n/* Any element holding an .atmos becomes its own layer so the light sits behind content, above the bg. */\n:where(:has(> .atmos)) { position: relative; isolation: isolate; }\n.atmos--clip { overflow: hidden; border-radius: inherit; }\n.atmos::after {\n  content: \"\"; position: absolute; inset: -10%; pointer-events: none;\n  background-image: var(--grain); opacity: .13; mix-blend-mode: soft-light;\n  -webkit-mask: radial-gradient(closest-side, #000 30%, transparent 74%);\n          mask: radial-gradient(closest-side, #000 30%, transparent 74%);\n}\n.atmos--clip::after { inset: 0; -webkit-mask: radial-gradient(120% 120% at 50% 50%, #000 40%, transparent 100%); mask: radial-gradient(120% 120% at 50% 50%, #000 40%, transparent 100%); opacity: .1; }\n.orb {\n  --size: 480px; --x: 50%; --y: 50%; --c: var(--lavender); --blur: 40px; --o: .9;\n  position: absolute; left: var(--x); top: var(--y);\n  width: var(--size); aspect-ratio: 1; translate: -50% -50%;\n  border-radius: 50%;\n  background: radial-gradient(closest-side, var(--c) 0%, color-mix(in oklab, var(--c) 55%, transparent) 45%, transparent 100%);\n  filter: blur(var(--blur)); opacity: var(--o);\n  animation: orb-drift 26s ease-in-out infinite alternate;\n}\n.orb:nth-child(2n) { animation-duration: 32s; animation-direction: alternate-reverse; }\n.orb:nth-child(3n) { animation-duration: 38s; }\n.orb--mint { --c: var(--mint); }\n.orb--peach { --c: var(--peach); }\n.orb--lavender { --c: var(--lavender); }\n.orb--sky { --c: var(--sky); }\n.orb--rose { --c: var(--rose); }\n@keyframes orb-drift {\n  0% { transform: translate(0, 0) scale(1); }\n  50% { transform: translate(2.5%, -2%) scale(1.04); }\n  100% { transform: translate(-2%, 2.5%) scale(.97); }\n}\n\n/* Preset: hero field. One large soft multi-stop field that bleeds past its box. */\n.atmos--hero::before {\n  content: \"\"; position: absolute; left: 50%; top: 50%; width: 130%; aspect-ratio: 1.15; translate: -50% -50%;\n  background:\n    radial-gradient(34% 32% at 32% 38%, var(--peach) 0%, transparent 100%),\n    radial-gradient(36% 34% at 66% 34%, var(--lavender) 0%, transparent 100%),\n    radial-gradient(34% 32% at 48% 70%, var(--mint) 0%, transparent 100%),\n    radial-gradient(28% 28% at 74% 66%, var(--sky) 0%, transparent 100%),\n    radial-gradient(44% 42% at 50% 50%, color-mix(in oklab, var(--rose) 70%, transparent) 0%, transparent 100%);\n  filter: blur(46px); opacity: .9;\n  -webkit-mask: radial-gradient(closest-side, #000 62%, transparent 100%);\n          mask: radial-gradient(closest-side, #000 62%, transparent 100%);\n  animation: field-drift 34s ease-in-out infinite alternate;\n}\n@keyframes field-drift {\n  0% { transform: rotate(0deg) scale(1); }\n  100% { transform: rotate(14deg) scale(1.06); }\n}\n/* Preset: card well. Two orbs, set per card by modifier. */\n.atmos--finops  { --o1: var(--peach); --o2: var(--rose); }\n.atmos--enable  { --o1: var(--mint);  --o2: var(--sky); }\n.atmos--govern  { --o1: var(--lavender); --o2: var(--sky); }\n.atmos--finops::before, .atmos--enable::before, .atmos--govern::before {\n  content: \"\"; position: absolute; inset: -30%;\n  background:\n    radial-gradient(38% 42% at 78% 22%, var(--o1) 0%, transparent 100%),\n    radial-gradient(34% 38% at 14% 86%, color-mix(in oklab, var(--o2) 80%, transparent) 0%, transparent 100%);\n  filter: blur(30px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .orb, .atmos--hero::before { animation: none; }\n}\n\n   <figure class=\"figure\"> ...mock... <figcaption class=\"fig-cap\"><span class=\"fig-cap__n\">Fig. 01</span><p>...</p></figcaption></figure>\n   Max one Fig. caption per major figure; never \"Fig. 2a\" style sub-labels.\n   -------------------------------------------------------------------------- */\n.figure { position: relative; }\n.figure__stage { position: relative; isolation: isolate; padding: clamp(28px, 5vw, 72px) clamp(16px, 4vw, 56px); }\n.figure__stage > .ui { position: relative; }\n.fig-cap { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--s-4); margin-top: var(--s-5); padding-top: var(--s-4); border-top: 1px solid var(--hair); max-width: 44em; }\n.fig-cap__n { font: 400 var(--fs-mono)/1.6 var(--mono); letter-spacing: 0; text-transform: uppercase; color: var(--ink-2); white-space: nowrap; }\n.fig-cap p { font-size: var(--fs-sm); line-height: var(--lh-body); color: var(--muted); }\n.band-dark .fig-cap { border-top-color: var(--hair-dark); }\n.band-dark .fig-cap__n { color: var(--on-dark-soft); }\n.band-dark .fig-cap p { color: var(--on-dark-muted); }\n\n/* UI panel: product mock surface (white, r-lg, float shadow). */\n.ui {\n  background: rgba(255, 255, 255, .94);\n  -webkit-backdrop-filter: blur(16px) saturate(1.1); backdrop-filter: blur(16px) saturate(1.1);\n  border-radius: 14px; box-shadow: var(--sh-float);\n  font-family: var(--sans); letter-spacing: -0.02em; color: var(--ink-2); font-size: 13px; line-height: var(--lh-snug);\n  overflow: hidden;\n}\n.ui__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--hair); }\n.ui__title { font: 500 14px/1.2 var(--sans); letter-spacing: -0.03em; color: var(--ink); white-space: nowrap; }\n.ui__title > span:not(.xt-lockup) { font-weight: 400; color: var(--muted); }\n.ui__tabs { display: flex; gap: 20px; padding: 0 18px; border-bottom: 1px solid var(--hair); overflow: hidden; }\n.ui__tabs span { padding: 11px 0 10px; font: 400 13px/1 var(--sans); letter-spacing: -0.02em; color: var(--muted); white-space: nowrap; border-bottom: 1.5px solid transparent; margin-bottom: -1px; }\n.ui__tabs .is-on { color: var(--ink); border-bottom-color: var(--ink-2); }\n.ui__body { padding: 16px 18px; }\n.ui__section + .ui__section { border-top: 1px solid var(--hair); }\n.ui-label { font: 400 11px/1.3 var(--mono); letter-spacing: 0; text-transform: uppercase; color: var(--muted); }\n.ui-kpis { display: grid; grid-template-columns: repeat(var(--kpi-cols, 3), minmax(0, 1fr)); border-bottom: 1px solid var(--hair); }\n.ui-kpi { padding: 14px 18px; }\n.ui-kpi + .ui-kpi { border-left: 1px solid var(--hair); }\n.ui-kpi__k { font: 400 12px/1.3 var(--sans); letter-spacing: -0.02em; color: var(--muted); }\n.ui-kpi__v { margin-top: 6px; font: 400 30px/1.1 var(--display); letter-spacing: -0.04em; color: var(--ink); font-variant-numeric: lining-nums tabular-nums; }\n.ui-kpi__d { margin-top: 6px; font: 400 11px/1.3 var(--mono); color: var(--muted); }\n.ui-kpi__d .up { color: var(--pos); } .ui-kpi__d .dn { color: var(--pos); } .ui-kpi__d .bad { color: var(--neg); }\n.ui-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }\n.ui-table th { white-space: nowrap; text-align: left; font: 400 11px/1.3 var(--mono); letter-spacing: 0; text-transform: uppercase; color: var(--muted); padding: 10px 18px 8px; border-bottom: 1px solid var(--hair); }\n.ui-table td { padding: 9px 18px; border-bottom: 1px solid var(--hair-soft); color: var(--ink-2); }\n.ui-table tr:last-child td { border-bottom: 0; }\n.ui-table .num { text-align: right; font-family: var(--mono); font-size: 12px; letter-spacing: 0; font-variant-numeric: tabular-nums; }\n.ui-bar { height: 4px; border-radius: 2px; background: var(--hair-soft); overflow: hidden; min-width: 60px; }\n.ui-bar > b { display: block; height: 100%; background: var(--ink-2); border-radius: 2px; }\n.ui-foot { display: flex; justify-content: space-between; align-items: center; padding: 10px 18px; border-top: 1px solid var(--hair); }\n/* Dark console variant (inside .band-dark) */\n.ui--dark { background: color-mix(in oklab, var(--dark-2) 88%, transparent); color: var(--on-dark-soft); box-shadow: 0 0 0 1px var(--hair-dark), 0 40px 80px -30px rgba(0,0,0,.6); }\n.ui--dark .ui__head, .ui--dark .ui__tabs, .ui--dark .ui-kpis, .ui--dark .ui-foot, .ui--dark .ui__section + .ui__section, .ui--dark .ui-table th { border-color: var(--hair-dark); }\n.ui--dark .ui-table td { border-color: rgba(250,250,249,.06); color: var(--on-dark-soft); }\n.ui--dark .ui__title, .ui--dark .ui-kpi__v, .ui--dark .ui__tabs .is-on { color: var(--on-dark); }\n.ui--dark .ui__tabs .is-on { border-bottom-color: var(--on-dark); }\n.ui--dark .ui-label, .ui--dark .ui-kpi__k, .ui--dark .ui-kpi__d, .ui--dark .ui__tabs span { color: var(--on-dark-muted); }\n.ui--dark .ui-kpi + .ui-kpi { border-color: var(--hair-dark); }\n.ui--dark .ui__title > span:not(.xt-lockup) { color: var(--on-dark-muted); }\n.ui--dark .ui-bar { background: var(--dark-3); } .ui--dark .ui-bar > b { background: var(--lavender); }\n@media (max-width: 640px) {\n  .ui-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  .ui-kpi:nth-child(3) { grid-column: 1 / -1; border-left: 0; border-top: 1px solid var(--hair); }\n  .ui-kpi { padding: 12px 14px; }\n  .ui__head { flex-wrap: wrap; row-gap: 8px; }\n  .ui__title { white-space: normal; }\n  .ui-hide-sm { display: none !important; }\n  .ui__head, .ui__body, .ui-foot { padding-inline: 14px; }\n  .ui__tabs { padding-inline: 14px; gap: 16px; }\n  .ui-table th, .ui-table td { padding-inline: 14px; }\n  .figure__stage { padding-inline: 0; }\n}\n\n/* Team tiles (team-level only; never individuals). Pastel ramp. */\n.tiles { display: grid; grid-template-columns: repeat(var(--tile-cols, 12), minmax(0, 1fr)); gap: 6px; }\n.tile { aspect-ratio: 1; border-radius: 5px; background: var(--dark-3); box-shadow: inset 0 0 0 1px rgba(250,250,249,.04); transition: background .5s var(--ease), box-shadow .5s var(--ease); }\n.tile.is-on { background: linear-gradient(140deg, var(--lavender), var(--sky)); box-shadow: inset 0 0 0 1px rgba(255,255,255,.25), 0 0 14px -2px color-mix(in oklab, var(--lavender) 60%, transparent); }\n.tile.is-on:nth-child(3n) { background: linear-gradient(140deg, var(--mint), var(--sky)); }\n.tile.is-on:nth-child(5n) { background: linear-gradient(140deg, var(--rose), var(--lavender)); }\n/* :not(.is-on) so lit tiles keep their pastel on light backgrounds (was overriding .tile.is-on) */\n.tiles--light .tile:not(.is-on) { background: var(--strong); box-shadow: inset 0 0 0 1px var(--hair); }\n\n/* Note: key product statements (e.g. \"what runs where\"). Body-small, normal contrast. */\n.note { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 9fr); column-gap: var(--s-7); row-gap: var(--s-2); padding-top: var(--s-5); border-top: 1px solid var(--hair); }\n.note__label { font: 400 var(--fs-mono)/1.6 var(--mono); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--muted); }\n.note p:not(.note__label) { font-size: var(--fs-body); line-height: var(--lh-body); color: var(--body); max-width: 44em; }\n.band-dark .note { border-top-color: var(--hair-dark); }\n.band-dark .note__label { color: var(--on-dark-muted); }\n.band-dark .note p:not(.note__label) { color: var(--on-dark-soft); }\n@media (max-width: 860px) { .note { grid-template-columns: minmax(0, 1fr); } }\n\n   <span class=\"icon-tile\"><svg class=\"xi xi-wallet\" viewBox=\"0 0 24 24\" …>…</svg></span>\n   - Glyphs live in assets/icons/ (paste inline); assets/icons.css sizes and colors\n     .xi glyphs. The rules here style ANY inline <svg> in the tile, so the tile\n     works with or without icons.css.\n   - Decorative: aria-hidden on the svg, the adjacent heading carries the meaning.\n   - Use in a few scannable lists only (steps, capability lists, problem cards).\n   Sizes: default 40px tile / 20px glyph \\xb7 --sm 32 / 16 \\xb7 --lg 48 / 24.\n   Placement helpers: .icon-tile--above (tile above a title, 24px gap, as on Crux);\n   inside ol.steps it replaces .steps__n; ul.features--icons gives it its own column.\n   -------------------------------------------------------------------------- */\n.icon-tile {\n  --tile: 40px; --glyph: 20px;\n  --xi-color: color-mix(in oklab, var(--ink) 70%, transparent);   /* read by assets/icons.css */\n  display: inline-grid; place-items: center; flex: none;\n  width: var(--tile); height: var(--tile);\n  border-radius: var(--r-sm);\n  background: var(--hair);\n  color: color-mix(in oklab, var(--ink) 70%, transparent);\n  vertical-align: middle;\n}\n.icon-tile :where(svg) {\n  display: block; width: var(--glyph); height: var(--glyph);\n  fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;\n  overflow: visible;\n}\n/* doubled class so the tile's glyph size beats the 20px default in icons.css (loaded later) */\n.icon-tile.icon-tile > .xi { --xi-size: var(--glyph); }\n.icon-tile--sm { --tile: 32px; --glyph: 16px; border-radius: var(--r-xs); }\n.icon-tile--lg { --tile: 48px; --glyph: 24px; border-radius: var(--r-md); }\n.icon-tile--above { display: grid; margin-bottom: var(--s-6); }\n/* On white cards the tile reads a touch lighter; on the dark band it inverts. */\n.card .icon-tile, .ui .icon-tile { background: var(--strong); }\n.band-dark .icon-tile, .ui--dark .icon-tile {\n  --xi-color: color-mix(in oklab, var(--on-dark) 75%, transparent);\n  background: var(--dark-3); color: color-mix(in oklab, var(--on-dark) 75%, transparent);\n}\n\n/* Inline icon: sits on the text baseline at the text's size, e.g. in a label row.\n   <span class=\"icon-inline\"><svg …>…</svg></span> Budgets */\n.icon-inline {\n  display: inline-flex; align-items: center; justify-content: center; flex: none;\n  width: 1.15em; height: 1.15em; vertical-align: -0.2em; margin-right: .35em;\n  color: color-mix(in oklab, currentColor 70%, transparent);\n  --xi-color: currentColor;\n}\n.icon-inline :where(svg) {\n  display: block; width: 100%; height: 100%;\n  fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;\n}\n.icon-inline > .xi { --xi-size: 100%; }\n@media (forced-colors: active) { .icon-tile { border: 1px solid CanvasText; } }\n`;export const XT_LOCKUP_CSS=`\n.xtcc .xt-lockup{--lk-mark:28px;--lk-word-color:#000;display:inline-flex;align-items:center;height:var(--lk-mark);color:var(--lk-word-color);text-decoration:none;white-space:nowrap;vertical-align:middle}\n.xtcc .xt-lockup__mark{flex:none;width:var(--lk-mark);height:var(--lk-mark);background:currentColor;-webkit-mask:url(\"https://framerusercontent.com/images/6cPoeSyVUGbuAMJLQFtl23kClgo.svg\") center/100% 100% no-repeat;mask:url(\"https://framerusercontent.com/images/6cPoeSyVUGbuAMJLQFtl23kClgo.svg\") center/100% 100% no-repeat}\n.xtcc .xt-lockup__word{display:block;flex:none;margin-left:calc(var(--lk-mark)*0.309);width:calc(var(--lk-mark)*2.9926);height:var(--lk-mark);font-size:0;color:transparent;background:var(--lk-word-color);-webkit-mask:url(\"https://framerusercontent.com/images/nZKtzTHxCnMLC6CrQhk5HLD34.svg\") right center/auto 100% no-repeat;mask:url(\"https://framerusercontent.com/images/nZKtzTHxCnMLC6CrQhk5HLD34.svg\") right center/auto 100% no-repeat}\n.xtcc .xt-lockup--ui{--lk-mark:1.15em;vertical-align:-0.28em}\n.xtcc .ui--dark .xt-lockup--ui,.xtcc [data-theme=\"dark\"] .xt-lockup--ui,.xtcc.xt-dark .xt-lockup--ui{--lk-word-color:currentColor}\n`;/** Inline <style> so the server HTML is styled before hydration (no flash, no layout shift). */export function XTStyle({css}){return /*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:css}});}/** True on the published site and in Preview; false on the canvas, in thumbnails and exports. */export function useAnimated(){const[ok,setOk]=React.useState(false);React.useEffect(()=>{setOk(RenderTarget.current()===RenderTarget.preview);},[]);return ok;}/** Run once per page: installs the original (verbatim) runtime script. */export function once(key,install){if(typeof window===\"undefined\")return;const w=window;w.__xtInstalled=w.__xtInstalled||{};if(w.__xtInstalled[key])return;w.__xtInstalled[key]=true;install();}/** Start client work after first paint (idle), return a cancel function. */export function afterPaint(fn){const w=window;if(w.requestIdleCallback){const id=w.requestIdleCallback(fn,{timeout:600});return()=>w.cancelIdleCallback(id);}const id=setTimeout(fn,0);return()=>clearTimeout(id);}/** Calls fn once the box has a stable, non-zero size (layout settled), or after ~1s at the latest. */export function whenSized(box,fn){let last=\"\",stable=0,n=0,raf=0,done=false;const tick=()=>{const r=box.getBoundingClientRect();const k=Math.round(r.width)+\"x\"+Math.round(r.height);if(r.width>0&&r.height>0&&k===last)stable++;else stable=0;last=k;n++;if(stable>=3||n>60){done=true;fn();return;}raf=requestAnimationFrame(tick);};raf=requestAnimationFrame(tick);return()=>{if(!done)cancelAnimationFrame(raf);};}/** Re-measure and redraw an instance a few times after mount (sizes settle after fonts and layout). */export function settle(getInst){const run=()=>{const inst=getInst();if(!inst)return;try{if(typeof inst.layout===\"function\")inst.layout();if(typeof inst.resize===\"function\")inst.resize();if(inst.still&&typeof inst.drawStill===\"function\")inst.drawStill();else if(typeof inst.draw===\"function\"&&!inst.running)inst.draw();if(typeof inst.frame===\"function\"&&typeof inst.T===\"number\")inst.frame(inst.T);}catch(e){}};const ids=[60,400,1200,2500].map(ms=>setTimeout(run,ms));window.addEventListener(\"load\",run);return()=>{ids.forEach(clearTimeout);window.removeEventListener(\"load\",run);};}/** Stop an instance created by one of the original scripts: loops, observers, timers, canvas memory. Each step is\n *  guarded on its own (some instances expose read-only getters such as `still`). */export function teardown(inst){if(!inst||typeof inst!==\"object\")return;const step=f=>{try{f();}catch(e){}};step(()=>{inst.visible=false;});step(()=>{inst.running=false;});step(()=>{inst.still=true;});step(()=>{if(inst.raf)cancelAnimationFrame(inst.raf);});step(()=>{if(inst.loopTimer)clearTimeout(inst.loopTimer);});step(()=>{if(inst.io&&inst.io.disconnect)inst.io.disconnect();});step(()=>{if(inst.ro&&inst.ro.disconnect)inst.ro.disconnect();});step(()=>{if(typeof inst.pause===\"function\")inst.pause();});step(()=>{if(inst.canvas){inst.canvas.width=0;inst.canvas.height=0;}});step(()=>{const gc=window.GConstellation;if(gc&&gc.instances&&gc.instances.delete)gc.instances.delete(inst);});}/** Runs fn with every other element of class `cls` (except `keep`) briefly unclassed, so a script's page-wide\n *  auto-init only ever picks up the instance being mounted. Synchronous: nothing is painted in between. */export function hidden(cls,keep,fn){const others=Array.from(document.getElementsByClassName(cls)).filter(e=>e!==keep);others.forEach(e=>e.classList.remove(cls));try{fn();}finally{others.forEach(e=>e.classList.add(cls));}}// Listener / observer recording for one instance (window, document, <html> and media-query listeners, plus\n// ResizeObserver and IntersectionObserver), so unmount removes what the original scripts never remove.\nconst __recorders=new Set;let __saved=null;function __patch(){if(__saved)return;const w=window,P=EventTarget.prototype;__saved={add:P.addEventListener,RO:w.ResizeObserver,IO:w.IntersectionObserver};const watched=t=>t===window||t===document||t===document.documentElement||typeof MediaQueryList!==\"undefined\"&&t instanceof MediaQueryList;const add=__saved.add;P.addEventListener=function(type,l,o){if(watched(this))__recorders.forEach(r=>r.push([\"l\",this,type,l,o]));return add.call(this,type,l,o);};if(__saved.RO)w.ResizeObserver=class extends __saved.RO{constructor(cb){super(cb);__recorders.forEach(r=>r.push([\"o\",this]));}};if(__saved.IO)w.IntersectionObserver=class extends __saved.IO{constructor(cb,opt){super(cb,opt);__recorders.forEach(r=>r.push([\"o\",this]));}};}function __unpatch(){if(!__saved||__recorders.size)return;const w=window;EventTarget.prototype.addEventListener=__saved.add;if(__saved.RO)w.ResizeObserver=__saved.RO;if(__saved.IO)w.IntersectionObserver=__saved.IO;__saved=null;}/** Records what fn (and, when given, the work until `until()` settles) registers; returns a disposer that removes it. */export function track(fn,until){const rec=[];let open=true,disposed=false;const dispose=()=>{disposed=true;rec.splice(0).forEach(r=>{try{if(r[0]===\"l\")r[1].removeEventListener(r[2],r[3],r[4]);else r[1].disconnect();}catch(e){}});};const close=()=>{if(!open)return;open=false;__recorders.delete(rec);__unpatch();if(disposed)dispose();};__recorders.add(rec);__patch();let wait;try{fn();wait=until?until():undefined;}finally{if(!wait)close();}if(wait)wait.then(close,close);return()=>{dispose();close();};}\nexport const __FramerMetadata__ = {\"exports\":{\"hidden\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"settle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"whenSized\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"track\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XT_FONT_IMPORT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XT_LOCKUP_CSS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"teardown\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"afterPaint\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XT_BASE_CSS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"once\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useAnimated\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XTStyle\":{\"type\":\"reactComponent\",\"name\":\"XTStyle\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./XTShared.map","// @ts-nocheck\n// XT Policies & recommendations. Port of site/visuals/operator-console. Markup presets are copied verbatim from the local pages (copy is not edited here);\n// the behaviour script is the original, verbatim, installed once per page. Text stays DOM text, so it is in the server HTML.\n// Animation starts on the client after first paint, only on the published site/preview; the canvas shows the final frame.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{XTStyle,XT_FONT_IMPORT,XT_BASE_CSS,XT_LOCKUP_CSS,useAnimated,once,afterPaint,teardown,settle,whenSized,track,hidden}from\"https://framerusercontent.com/modules/dJPZ5VRbhPbRDwnU4bd6/SWSCRD2FKFAHO19Do92q/XTShared.js\";const CSS=`/* ==========================================================================\n   Visual \\xb7 Recommendations, adoption & policies  \\xb7  operator-console.css\n   Product UI mock (recommendations, adoption, policies), built on xt.css (.ui kit + tokens).\n   Every selector is scoped under .v-operator-console.\n\n   Root:   <div class=\"ui v-operator-console\" data-variant=\"recommendations|enablement|governance\">\n   Dark:   add .ui--dark (use inside .band-dark).\n   Layout responds to its own width (container queries), so it works full\n   width in a hero figure or in one half of a .split.\n   ========================================================================== */\n\n.v-operator-console {\n  /* Crux type (round 4). Same values as the retokenized xt.css; kept here so the visual renders right on any page. */\n  --sans: \"Funnel Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif;\n  --mono: \"Fragment Mono\", ui-monospace, \"SFMono-Regular\", Menlo, monospace;\n  font-family: var(--sans); letter-spacing: -0.04em;\n  /* local palette, mapped to system tokens */\n  --voc-ink: var(--ink);\n  --voc-ink-2: var(--ink-2);\n  --voc-body: var(--body);\n  --voc-muted: var(--muted);\n  --voc-faint: var(--muted-soft);\n  --voc-hair: var(--hair);\n  --voc-hair-soft: var(--hair-soft);\n  --voc-hair-strong: var(--hair-strong);\n  --voc-rail: color-mix(in oklab, var(--canvas) 72%, transparent);\n  --voc-plate: var(--canvas-soft);\n  --voc-plate-2: var(--strong);\n  --voc-raised: var(--card);\n  --voc-wash: color-mix(in oklab, var(--lavender) 22%, transparent);\n  --voc-wash-strong: color-mix(in oklab, var(--lavender) 40%, transparent);\n  --voc-accent: var(--lavender-deep);\n  --voc-alert: var(--peach);\n  --voc-btn-ink: var(--ink-2);\n  --voc-btn-on-ink: var(--on-dark);\n  --voc-shadow-row: 0 0 0 1px var(--hair), 0 1px 2px rgba(12, 10, 9, .03);\n  --voc-ease: var(--ease-out);\n\n  container-type: inline-size;\n  container-name: voc;\n  position: relative;\n  text-align: left;\n}\n\n.v-operator-console.ui--dark {\n  --voc-ink: var(--on-dark);\n  --voc-ink-2: var(--on-dark);\n  --voc-body: var(--on-dark-soft);\n  --voc-muted: var(--on-dark-muted);\n  --voc-faint: color-mix(in oklab, var(--on-dark-muted) 70%, transparent);\n  --voc-hair: var(--hair-dark);\n  --voc-hair-soft: rgba(250, 250, 249, .06);\n  --voc-hair-strong: var(--hair-dark-strong);\n  --voc-rail: rgba(12, 10, 9, .28);\n  --voc-plate: rgba(250, 250, 249, .035);\n  --voc-plate-2: var(--dark-3);\n  --voc-raised: rgba(250, 250, 249, .05);\n  --voc-wash: color-mix(in oklab, var(--lavender-deep) 20%, transparent);\n  --voc-wash-strong: color-mix(in oklab, var(--lavender-deep) 34%, transparent);\n  --voc-accent: var(--lavender);\n  --voc-btn-ink: var(--on-dark);\n  --voc-btn-on-ink: var(--dark);\n  --voc-shadow-row: 0 0 0 1px var(--hair-dark);\n}\n\n/* Screen-reader-only description */\n.v-operator-console .voc-sr {\n  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;\n  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;\n}\n\n/* --------------------------------------------------------------------------\n   Head extras\n   -------------------------------------------------------------------------- */\n.v-operator-console .ui__head { gap: 16px; }\n.v-operator-console .voc-head-r { display: inline-flex; align-items: center; gap: 12px; }\n.v-operator-console .voc-sync { display: inline-flex; align-items: center; gap: 6px; font: 400 12px/1 var(--sans); color: var(--voc-muted); white-space: nowrap; }\n.v-operator-console .voc-sync::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--mint); box-shadow: 0 0 0 3px color-mix(in oklab, var(--mint) 30%, transparent); }\n\n/* --------------------------------------------------------------------------\n   Shell: rail + main\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-shell {\n  display: grid;\n  grid-template-columns: 200px minmax(0, 1fr);\n  align-items: stretch;\n}\n\n/* Rail */\n.v-operator-console .voc-rail {\n  padding: 16px 10px 16px;\n  border-right: 1px solid var(--voc-hair);\n  background: var(--voc-rail);\n  display: flex; flex-direction: column; gap: 2px;\n}\n.v-operator-console .voc-rail__ws {\n  display: flex; align-items: center; gap: 8px;\n  padding: 4px 8px 12px; margin-bottom: 8px;\n  border-bottom: 1px solid var(--voc-hair);\n  font: 500 12px/1.2 var(--sans); color: var(--voc-ink-2);\n}\n.v-operator-console .voc-rail__mark {\n  width: 20px; height: 20px; border-radius: 6px; flex: none;\n  display: grid; place-items: center;\n  font: 400 14px/1 var(--display, var(--sans)); color: var(--voc-ink);\n  background: var(--voc-plate-2); box-shadow: inset 0 0 0 1px var(--voc-hair);\n}\n.v-operator-console .voc-rail__ws small { display: block; font: 400 12px/1.3 var(--sans); color: var(--voc-muted); margin-top: 1px; }\n.v-operator-console .voc-nav { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1px; }\n.v-operator-console .voc-nav__sep { height: 1px; background: var(--voc-hair); margin: 8px 8px; }\n.v-operator-console .voc-nav__item {\n  display: flex; align-items: center; gap: 8px;\n  height: 30px; padding: 0 8px; border-radius: 7px;\n  font: 500 12px/1 var(--sans); color: var(--voc-muted);\n  white-space: nowrap;\n}\n.v-operator-console .voc-nav__item.is-on {\n  color: var(--voc-ink); background: var(--voc-raised);\n  box-shadow: var(--voc-shadow-row);\n}\n.v-operator-console .voc-nav__count {\n  margin-left: auto; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;\n  display: inline-grid; place-items: center;\n  font: 500 12px/1 var(--sans); font-variant-numeric: tabular-nums;\n  color: var(--voc-ink-2); background: var(--voc-plate-2);\n  transition: background var(--t-med) var(--voc-ease);\n}\n.v-operator-console .voc-nav__item.is-on .voc-nav__count { background: var(--voc-wash-strong); }\n\n/* Icons: CSS masks, colored by currentColor */\n.v-operator-console .voc-ic {\n  width: 15px; height: 15px; flex: none; display: inline-block;\n  background: currentColor;\n  -webkit-mask: var(--i) center / contain no-repeat; mask: var(--i) center / contain no-repeat;\n  opacity: .9;\n}\n.v-operator-console .voc-ic[data-i=\"spend\"]  { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><path d='M2 13.5h12'/><path d='M2.5 10.5l3.2-3.2 2.6 2 5.2-5.3'/><path d='M10.5 4h3v3'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"alloc\"]  { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><circle cx='8' cy='8' r='5.8'/><path d='M8 2.2V8h5.8'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"budget\"] { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><path d='M2.5 11.5a5.5 5.5 0 1 1 11 0'/><path d='M8 11.5l2.6-3.4'/><path d='M2 13.5h12'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"policy\"] { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><path d='M8 1.8l5 1.9v4.1c0 3.1-2.1 5.3-5 6.4-2.9-1.1-5-3.3-5-6.4V3.7z'/><path d='M5.8 8l1.6 1.6L10.4 6.6'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"route\"]  { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><circle cx='3.5' cy='8' r='1.6'/><path d='M5.1 8h2.4c1.5 0 2-4 3.5-4h2'/><path d='M7.5 8c1.5 0 2 4 3.5 4h2'/><path d='M11.5 2.5L13 4l-1.5 1.5'/><path d='M11.5 10.5L13 12l-1.5 1.5'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"recs\"]   { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><rect x='2' y='2.5' width='12' height='11' rx='2'/><path d='M2 9h3.2l.9 1.8h3.8l.9-1.8H14'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"enable\"] { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><circle cx='6' cy='5.6' r='2.2'/><path d='M2 13.2c.3-2.2 1.9-3.5 4-3.5s3.7 1.3 4 3.5'/><circle cx='11.6' cy='6.2' r='1.7'/><path d='M11.4 9.6c1.5 0 2.5.9 2.7 2.6'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"check\"]  { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'><path d='M3.5 8.4l2.9 2.9 6.1-6.3'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"person\"] { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><circle cx='6.5' cy='5.4' r='2.4'/><path d='M2 13.4c.4-2.4 2.1-3.8 4.5-3.8 1.1 0 2 .3 2.8.8'/><path d='M9.8 11.6l1.5 1.5 2.9-3'/></svg>\"); }\n.v-operator-console .voc-ic[data-i=\"arrow\"]  { --i: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'><path d='M3 8h10'/><path d='M9.5 4.5L13 8l-3.5 3.5'/></svg>\"); }\n\n/* Main */\n.v-operator-console .voc-main { padding: 24px 24px 24px; min-width: 0; }\n.v-operator-console .voc-view[hidden] { display: none; }\n.v-operator-console .voc-top {\n  display: flex; align-items: flex-end; justify-content: space-between; gap: 16px 24px; flex-wrap: wrap;\n  padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px solid var(--voc-hair);\n}\n.v-operator-console .voc-top__title { font: 400 24px/1.1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--voc-ink); margin: 0; }\n.v-operator-console .voc-top__sub { margin: 8px 0 0; font: 400 12px/1.4 var(--sans); color: var(--voc-muted); max-width: 46ch; }\n.v-operator-console .voc-filters { display: flex; gap: 6px; flex-wrap: wrap; }\n.v-operator-console .voc-chip {\n  display: inline-flex; align-items: center; gap: 6px; min-height: 26px; padding: 6px 10px; flex: none; width: max-content; box-sizing: border-box; border-radius: var(--r-pill);\n  font: 500 12px/1 var(--sans); color: var(--voc-body); white-space: nowrap;\n  box-shadow: inset 0 0 0 1px var(--voc-hair-strong);\n}\n.v-operator-console .voc-chip::after {\n  content: \"\"; width: 7px; height: 7px; margin-left: 1px; opacity: .55;\n  border-right: 1.2px solid currentColor; border-bottom: 1.2px solid currentColor;\n  transform: translateY(-2px) rotate(45deg) scale(.7);\n}\n\n.v-operator-console .voc-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(260px, 300px); gap: 24px; align-items: start; }\n.v-operator-console .voc-stack { display: grid; gap: 16px; min-width: 0; }\n\n/* Section label row inside panels */\n.v-operator-console .voc-label-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 10px; }\n.v-operator-console .ui-label { color: var(--voc-muted); }\n.v-operator-console .voc-label-row .voc-aside { font: 400 12px/1.3 var(--sans); color: var(--voc-muted); }\n\n/* Panel */\n.v-operator-console .voc-panel {\n  border-radius: 10px; padding: 16px 16px 15px;\n  background: var(--voc-plate); box-shadow: inset 0 0 0 1px var(--voc-hair);\n}\n\n/* --------------------------------------------------------------------------\n   Queue summary + \"human approves\" note\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-sum {\n  display: grid; grid-template-columns: auto auto 1fr; gap: 6px 32px; align-items: end;\n  margin-bottom: 16px;\n}\n.v-operator-console .voc-sum__k { display: block; font: 500 12px/1.3 var(--sans); color: var(--voc-muted); margin-bottom: 5px; }\n.v-operator-console .voc-sum__v { font: 400 32px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--voc-ink); font-variant-numeric: lining-nums tabular-nums; }\n.v-operator-console .voc-sum__v small { font: 400 12px/1 var(--sans); letter-spacing: -0.04em; color: var(--voc-muted); margin-left: 3px; }\n.v-operator-console .voc-human {\n  justify-self: end; align-self: center;\n  display: inline-flex; align-items: center; gap: 8px; max-width: 290px;\n  padding: 8px 12px 8px 10px; border-radius: 10px;\n  font: 400 12px/1.4 var(--sans); color: var(--voc-body);\n  background: var(--voc-wash);\n}\n.v-operator-console .voc-human .voc-ic { color: var(--voc-ink-2); width: 16px; height: 16px; }\n.v-operator-console .voc-human b { font-weight: 500; color: var(--voc-ink-2); }\n\n/* --------------------------------------------------------------------------\n   Queue items (recommendations and standards)\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-queue { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }\n.v-operator-console .voc-item {\n  position: relative;\n  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 4px 24px; align-items: center;\n  padding: 12px 16px 12px 16px; border-radius: 10px;\n  background: var(--voc-raised); box-shadow: var(--voc-shadow-row);\n  transition: background var(--t-med) var(--voc-ease), box-shadow var(--t-med) var(--voc-ease), opacity var(--t-med) var(--voc-ease);\n}\n.v-operator-console .voc-item::before {\n  content: \"\"; position: absolute; left: 0; top: 12px; bottom: 12px; width: 2px; border-radius: 0 2px 2px 0;\n  background: var(--voc-accent); transform: scaleY(0); transform-origin: 50% 50%;\n  transition: transform .45s var(--voc-ease);\n}\n@media (hover: hover) {\n  .v-operator-console .voc-item[data-state=\"open\"]:hover { box-shadow: 0 0 0 1px var(--voc-hair-strong), 0 8px 22px -14px rgba(41, 37, 36, .28); }\n  .v-operator-console.ui--dark .voc-item[data-state=\"open\"]:hover { box-shadow: 0 0 0 1px var(--hair-dark-strong); background: rgba(250, 250, 249, .07); }\n}\n.v-operator-console .voc-item__kind { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; }\n.v-operator-console .voc-item__kind .ui-label { line-height: 1; }\n.v-operator-console .voc-item__src { font: 400 12px/1 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-item__title { margin: 0; font: 500 14px/1.3 var(--sans); color: var(--voc-ink); text-wrap: pretty; }\n.v-operator-console .voc-item__ev { margin: 4px 0 0; font: 400 12px/1.4 var(--sans); color: var(--voc-muted); text-wrap: pretty; }\n.v-operator-console .voc-item__ev b { font-weight: 500; color: var(--voc-body); }\n.v-operator-console .voc-item__side { display: flex; align-items: center; gap: 16px; }\n.v-operator-console .voc-save { text-align: right; min-width: 74px; }\n.v-operator-console .voc-save__v { display: block; font: 400 22px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--voc-ink); font-variant-numeric: lining-nums tabular-nums; }\n.v-operator-console .voc-save__k { display: block; margin-top: 4px; font: 400 12px/1.2 var(--sans); color: var(--voc-muted); white-space: nowrap; }\n\n/* Actions */\n.v-operator-console .voc-actions { display: flex; align-items: center; justify-content: flex-end; gap: 4px; min-width: 168px; }\n.v-operator-console .voc-btn {\n  appearance: none; border: 0; margin: 0; cursor: pointer; background: transparent;\n  display: inline-flex; align-items: center; justify-content: center; gap: 6px;\n  min-height: 28px; padding: 6px 12px; flex: none; box-sizing: border-box; border-radius: var(--r-pill);\n  font: 500 12px/1 var(--sans); letter-spacing: -0.04em; color: var(--voc-ink-2); white-space: nowrap;\n  transition: background var(--t-fast) var(--voc-ease), color var(--t-fast) var(--voc-ease), box-shadow var(--t-fast) var(--voc-ease), transform var(--t-fast) var(--voc-ease);\n}\n.v-operator-console .voc-btn--approve { box-shadow: inset 0 0 0 1px var(--voc-hair-strong); background: var(--voc-raised); }\n.v-operator-console .voc-btn--approve:hover { background: var(--voc-btn-ink); color: var(--voc-btn-on-ink); box-shadow: inset 0 0 0 1px var(--voc-btn-ink); }\n.v-operator-console .voc-btn--approve:active { transform: scale(.97); }\n.v-operator-console .voc-btn--quiet { color: var(--voc-muted); padding: 0 8px; }\n.v-operator-console .voc-btn--quiet:hover { color: var(--voc-ink); background: var(--voc-plate-2); }\n.v-operator-console .voc-btn:focus-visible { outline: 2px solid var(--voc-ink-2); outline-offset: 2px; }\n.v-operator-console .voc-btn .voc-ic { width: 13px; height: 13px; }\n\n/* Status line (shown after a decision) */\n.v-operator-console .voc-status {\n  display: none; align-items: center; gap: 8px;\n  font: 500 12px/1.2 var(--sans); color: var(--voc-ink-2); white-space: nowrap;\n}\n.v-operator-console .voc-status .voc-tick {\n  width: 18px; height: 18px; border-radius: 50%; display: inline-grid; place-items: center;\n  background: var(--voc-btn-ink); color: var(--voc-btn-on-ink);\n}\n.v-operator-console .voc-status .voc-tick .voc-ic { width: 11px; height: 11px; opacity: 1; }\n.v-operator-console .voc-status small { display: block; font: 400 12px/1.2 var(--sans); color: var(--voc-muted); margin-top: 2px; }\n\n/* Approved */\n.v-operator-console .voc-item[data-state=\"approved\"] { background: color-mix(in oklab, var(--voc-raised) 70%, var(--voc-wash)); box-shadow: 0 0 0 1px color-mix(in oklab, var(--voc-accent) 30%, var(--voc-hair)); }\n.v-operator-console .voc-item[data-state=\"approved\"]::before { transform: scaleY(1); }\n.v-operator-console [data-voc-item][data-state=\"approved\"] [data-voc-approve],\n.v-operator-console [data-voc-item][data-state=\"approved\"] [data-voc-dismiss] { display: none; }\n.v-operator-console [data-voc-item][data-state=\"approved\"] .voc-status--approved { display: inline-flex; animation: voc-pop .5s var(--voc-ease) both; }\n.v-operator-console [data-voc-item][data-state=\"approved\"] .voc-tick { animation: voc-tick .55s var(--voc-ease) both; }\n\n/* Dismissed */\n.v-operator-console .voc-item[data-state=\"dismissed\"] { background: transparent; box-shadow: inset 0 0 0 1px var(--voc-hair); }\n.v-operator-console [data-voc-item][data-state=\"dismissed\"] :is(.voc-item__kind, .voc-item__title, .voc-item__ev, .voc-roll, [data-voc-title]) { opacity: .45; }\n.v-operator-console .voc-item[data-state=\"dismissed\"] .voc-save { opacity: .4; }\n.v-operator-console .voc-item[data-state=\"dismissed\"] .voc-save__v { text-decoration: line-through; text-decoration-thickness: 1px; }\n.v-operator-console [data-voc-item][data-state=\"dismissed\"] [data-voc-approve],\n.v-operator-console [data-voc-item][data-state=\"dismissed\"] [data-voc-dismiss] { display: none; }\n.v-operator-console [data-voc-item][data-state=\"dismissed\"] .voc-status--dismissed { display: inline-flex; color: var(--voc-muted); }\n.v-operator-console .voc-undo { display: none; }\n.v-operator-console [data-voc-item]:not([data-state=\"open\"]) .voc-undo { display: inline-flex; }\n\n@keyframes voc-pop { from { opacity: 0; transform: translateX(6px); } to { opacity: 1; transform: none; } }\n@keyframes voc-tick { 0% { transform: scale(.4); } 60% { transform: scale(1.12); } 100% { transform: scale(1); } }\n\n/* --------------------------------------------------------------------------\n   Anomaly alert\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-alert { padding: 16px 16px 12px; }\n.v-operator-console .voc-alert__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }\n.v-operator-console .voc-pulse { position: relative; width: 8px; height: 8px; border-radius: 50%; background: color-mix(in oklab, var(--peach) 60%, var(--neg)); flex: none; }\n.v-operator-console .voc-pulse::after {\n  content: \"\"; position: absolute; inset: -4px; border-radius: 50%;\n  box-shadow: 0 0 0 1.5px color-mix(in oklab, var(--peach) 80%, transparent);\n  animation: voc-ring 2.4s var(--voc-ease) infinite;\n}\n@keyframes voc-ring { 0% { transform: scale(.6); opacity: .9; } 80%, 100% { transform: scale(1.7); opacity: 0; } }\n.v-operator-console .voc-alert__tag { display: inline-flex; align-items: center; gap: 8px; }\n.v-operator-console .voc-alert__time { font: 400 12px/1 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-alert__title { margin: 10px 0 0; font: 500 14px/1.3 var(--sans); color: var(--voc-ink); }\n.v-operator-console .voc-alert__fig { display: flex; align-items: baseline; gap: 8px; margin-top: 8px; }\n.v-operator-console .voc-alert__mult { font: 400 32px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--voc-ink); font-variant-numeric: lining-nums; }\n.v-operator-console .voc-alert__fig span:last-child { font: 400 12px/1.4 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-spark { display: block; width: 100%; height: 56px; margin-top: 10px; overflow: visible; }\n.v-operator-console .voc-spark .voc-spark__base { stroke: var(--voc-hair-strong); stroke-width: 1; stroke-dasharray: 2 3; fill: none; vector-effect: non-scaling-stroke; }\n.v-operator-console .voc-spark .voc-spark__line { stroke: var(--voc-ink-2); stroke-width: 1.4; fill: none; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }\n.v-operator-console .voc-spark .voc-spark__area { fill: color-mix(in oklab, var(--peach) 30%, transparent); stroke: none; }\n.v-operator-console .voc-spark-wrap { position: relative; margin-top: 10px; }\n.v-operator-console .voc-spark-wrap .voc-spark { margin-top: 0; }\n.v-operator-console .voc-spark__pt { position: absolute; right: 0; top: var(--y, 14%); width: 7px; height: 7px; translate: 50% -50%; border-radius: 50%; background: var(--voc-ink-2); box-shadow: 0 0 0 4px color-mix(in oklab, var(--peach) 55%, transparent), 0 0 0 9px color-mix(in oklab, var(--peach) 22%, transparent); }\n.v-operator-console .voc-spark__axis { display: flex; justify-content: space-between; margin-top: 6px; font: 400 10px/1 var(--mono); letter-spacing: -0.02em; color: var(--voc-muted); }\n.v-operator-console .voc-alert__foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--voc-hair); font: 400 12px/1.3 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-alert__foot b { font-weight: 500; color: var(--voc-body); }\n.v-operator-console .voc-link { display: inline-flex; align-items: center; gap: 5px; font: 500 12px/1 var(--sans); color: var(--voc-ink-2); white-space: nowrap; }\n.v-operator-console .voc-link .voc-ic { width: 12px; height: 12px; transition: transform var(--t-fast) var(--voc-ease); }\n.v-operator-console .voc-alert:hover .voc-link .voc-ic { transform: translateX(2px); }\n\n/* --------------------------------------------------------------------------\n   Allocation rule\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-rule__line { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 6px; align-items: start; }\n.v-operator-console .voc-rule__line .voc-rule__k { line-height: 24px; }\n.v-operator-console .voc-rule__line + .voc-rule__line { margin-top: 8px; }\n.v-operator-console .voc-rule__k { font: 500 12px/1 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-rule__v { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; min-width: 0; }\n.v-operator-console .voc-tok {\n  display: inline-flex; align-items: center; height: 24px; padding: 0 8px; border-radius: 6px;\n  font: 400 12px/1 var(--sans); color: var(--voc-ink-2); white-space: nowrap;\n  background: var(--voc-raised); box-shadow: inset 0 0 0 1px var(--voc-hair);\n}\n.v-operator-console .voc-tok--op { background: transparent; box-shadow: none; padding: 0 2px; color: var(--voc-muted); }\n.v-operator-console .voc-tok--code { font-family: var(--mono); font-size: 12px; }\n.v-operator-console .voc-tok--dest { background: var(--voc-wash); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--voc-accent) 22%, transparent); }\n.v-operator-console .voc-cov { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--voc-hair); }\n.v-operator-console .voc-cov__row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; font: 400 12px/1.3 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-cov__row b { font: 400 20px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--voc-ink); font-variant-numeric: lining-nums tabular-nums; }\n.v-operator-console .voc-meter { position: relative; height: 4px; margin-top: 8px; border-radius: 2px; background: var(--voc-plate-2); overflow: hidden; }\n.v-operator-console .voc-meter > b { position: absolute; inset: 0 auto 0 0; width: var(--w, 0%); border-radius: 2px; background: var(--voc-ink-2); transition: width 1.2s var(--voc-ease); }\n.v-operator-console .voc-cov small { display: block; margin-top: 8px; font: 400 12px/1.4 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-badge-on {\n  display: inline-flex; align-items: center; gap: 6px; font: 500 12px/1 var(--sans); color: var(--voc-body);\n}\n.v-operator-console .voc-badge-on::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--mint); box-shadow: 0 0 0 2.5px color-mix(in oklab, var(--mint) 35%, transparent); }\n\n/* --------------------------------------------------------------------------\n   Enablement: friction heatmap, good practice, rollout tiles\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-heat { display: grid; grid-template-columns: minmax(96px, 1.25fr) repeat(4, minmax(0, 1fr)); gap: 4px; }\n.v-operator-console .voc-heat__col { font: 400 12px/1.3 var(--sans); color: var(--voc-muted); padding: 0 2px 4px; align-self: end; }\n.v-operator-console .voc-heat__row { font: 500 12px/1.2 var(--sans); color: var(--voc-ink-2); align-self: center; padding-right: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-operator-console .voc-heat__c {\n  height: 32px; border-radius: 5px; display: grid; place-items: center;\n  font: 400 10px/1 var(--mono); font-variant-numeric: tabular-nums; color: var(--ink-2);\n  --heat: var(--sky-deep);\n  background: color-mix(in oklab, var(--heat) 7%, var(--card));\n  transition: transform var(--t-fast) var(--voc-ease), box-shadow var(--t-fast) var(--voc-ease), opacity var(--t-med) var(--voc-ease);\n}\n.v-operator-console .voc-heat__c[data-l=\"1\"] { background: color-mix(in oklab, var(--heat) 20%, var(--card)); }\n.v-operator-console .voc-heat__c[data-l=\"2\"] { background: color-mix(in oklab, var(--heat) 36%, var(--card)); }\n.v-operator-console .voc-heat__c[data-l=\"3\"] { background: color-mix(in oklab, var(--heat) 56%, var(--card)); }\n.v-operator-console .voc-heat__c[data-l=\"4\"] { background: color-mix(in oklab, var(--heat) 80%, var(--card)); color: var(--ink); font-weight: 500; }\n.v-operator-console.ui--dark .voc-heat__c { background: var(--dark-3); color: var(--on-dark-soft); }\n.v-operator-console.ui--dark .voc-heat__c[data-l=\"1\"] { background: color-mix(in oklab, var(--heat) 26%, var(--dark-3)); }\n.v-operator-console.ui--dark .voc-heat__c[data-l=\"2\"] { background: color-mix(in oklab, var(--heat) 44%, var(--dark-3)); color: var(--on-dark); }\n.v-operator-console.ui--dark .voc-heat__c[data-l=\"3\"] { background: color-mix(in oklab, var(--heat) 66%, var(--dark-3)); color: var(--on-dark); }\n.v-operator-console.ui--dark .voc-heat__c[data-l=\"4\"] { background: color-mix(in oklab, var(--sky) 45%, var(--heat)); color: var(--ink); }\n.v-operator-console .voc-heat:hover .voc-heat__c { opacity: .55; }\n.v-operator-console .voc-heat .voc-heat__c:hover { opacity: 1; transform: scale(1.06); box-shadow: 0 0 0 1px var(--card), 0 4px 12px -4px rgba(41, 37, 36, .3); }\n.v-operator-console .voc-heat__key { display: flex; align-items: center; gap: 8px; margin-top: 12px; font: 400 12px/1 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-heat__ramp { display: inline-flex; gap: 2px; }\n.v-operator-console .voc-heat__ramp i { width: 14px; height: 6px; border-radius: 2px; background: color-mix(in oklab, var(--sky-deep) 7%, var(--card)); box-shadow: inset 0 0 0 .5px var(--voc-hair); }\n.v-operator-console .voc-heat__ramp i:nth-child(2) { background: color-mix(in oklab, var(--sky-deep) 20%, var(--card)); }\n.v-operator-console .voc-heat__ramp i:nth-child(3) { background: color-mix(in oklab, var(--sky-deep) 36%, var(--card)); }\n.v-operator-console .voc-heat__ramp i:nth-child(4) { background: color-mix(in oklab, var(--sky-deep) 56%, var(--card)); }\n.v-operator-console .voc-heat__ramp i:nth-child(5) { background: color-mix(in oklab, var(--sky-deep) 80%, var(--card)); }\n.v-operator-console.ui--dark .voc-heat__ramp i:first-child { background: var(--dark-3); }\n.v-operator-console.ui--dark .voc-heat__ramp i:nth-child(2) { background: color-mix(in oklab, var(--sky-deep) 26%, var(--dark-3)); }\n.v-operator-console.ui--dark .voc-heat__ramp i:nth-child(3) { background: color-mix(in oklab, var(--sky-deep) 44%, var(--dark-3)); }\n.v-operator-console.ui--dark .voc-heat__ramp i:nth-child(4) { background: color-mix(in oklab, var(--sky-deep) 66%, var(--dark-3)); }\n.v-operator-console.ui--dark .voc-heat__ramp i:nth-child(5) { background: color-mix(in oklab, var(--sky) 45%, var(--sky-deep)); }\n\n.v-operator-console .voc-good { margin-top: 16px; }\n.v-operator-console .voc-good__title { margin: 2px 0 10px; font: 400 18px/1.3 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--voc-ink); }\n.v-operator-console .voc-good ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; counter-reset: voc-good; }\n.v-operator-console .voc-good li {\n  counter-increment: voc-good;\n  display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 8px; padding: 8px 0;\n  font: 400 12px/1.4 var(--sans); color: var(--voc-body); border-top: 1px solid var(--voc-hair);\n}\n.v-operator-console .voc-good li::before {\n  /* check mark instead of a 01/02/03 counter (round 4: no numbered openers) */\n  content: \"\"; width: 14px; height: 14px; margin-top: 1px; background: var(--voc-muted);\n  -webkit-mask: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'><path d='M3.5 8.4l2.9 2.9 6.1-6.3'/></svg>\") center / contain no-repeat;\n          mask: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'><path d='M3.5 8.4l2.9 2.9 6.1-6.3'/></svg>\") center / contain no-repeat;\n}\n.v-operator-console .voc-good small { display: block; margin-top: 8px; font: 400 12px/1.4 var(--sans); color: var(--voc-muted); }\n\n.v-operator-console .voc-item--std { grid-template-columns: minmax(0, 1fr); gap: 10px; }\n.v-operator-console .voc-item--std .voc-item__side { justify-content: space-between; gap: 12px; flex-wrap: nowrap; }\n.v-operator-console .voc-item--std .voc-actions { min-width: 0; flex: none; }\n.v-operator-console .voc-roll { display: flex; align-items: center; gap: 10px; min-width: 0; }\n.v-operator-console .voc-roll__tiles { display: grid; grid-template-rows: repeat(2, 6px); grid-auto-flow: column; grid-auto-columns: 6px; gap: 2px; }\n.v-operator-console .voc-roll__tiles i {\n  width: 6px; height: 6px; border-radius: 1.5px;\n  background: var(--voc-plate-2); box-shadow: inset 0 0 0 1px var(--voc-hair);\n  transition: background .4s var(--voc-ease), box-shadow .4s var(--voc-ease), transform .4s var(--voc-ease);\n  transition-delay: calc(var(--k, 0) * 70ms);\n}\n.v-operator-console .voc-item[data-state=\"approved\"] .voc-roll__tiles i {\n  background: linear-gradient(140deg, var(--mint), var(--sky));\n  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .3);\n}\n.v-operator-console .voc-item[data-state=\"approved\"] .voc-roll__tiles i:nth-child(3n) { background: linear-gradient(140deg, var(--lavender), var(--sky)); }\n.v-operator-console .voc-roll__k { font: 400 12px/1.3 var(--sans); color: var(--voc-muted); white-space: nowrap; }\n.v-operator-console .voc-roll__k b { font-weight: 500; color: var(--voc-body); }\n.v-operator-console .voc-roll__k .voc-roll__after { display: none; }\n.v-operator-console .voc-item[data-state=\"approved\"] .voc-roll__k .voc-roll__before { display: none; }\n.v-operator-console .voc-item[data-state=\"approved\"] .voc-roll__k .voc-roll__after { display: inline; }\n.v-operator-console .voc-plugin-tag {\n  display: inline-flex; align-items: center; gap: 6px; font: 500 12px/1 var(--sans); color: var(--voc-muted);\n}\n.v-operator-console .voc-plugin-tag::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--lavender-deep); }\n\n/* --------------------------------------------------------------------------\n   Governance: routing table, access matrix\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-table { width: 100%; border-collapse: collapse; font-size: 12px; }\n.v-operator-console .voc-table th {\n  text-align: left; white-space: nowrap; padding: 0 12px 8px 0;\n  font: 400 10px/1.3 var(--mono); letter-spacing: -0.02em; text-transform: uppercase; color: var(--voc-muted);\n  border-bottom: 1px solid var(--voc-hair);\n}\n.v-operator-console .voc-table td { padding: 10px 12px 10px 0; border-bottom: 1px solid var(--voc-hair-soft); color: var(--voc-body); vertical-align: middle; white-space: nowrap; }\n.v-operator-console .voc-table td:first-child { color: var(--voc-ink); font-weight: 500; }\n.v-operator-console .voc-table tr:last-child td { border-bottom: 0; }\n.v-operator-console .voc-table .num { text-align: right; padding-right: 0; font-family: var(--mono); font-size: 12px; font-variant-numeric: tabular-nums; }\n.v-operator-console .voc-tier { display: inline-flex; align-items: center; gap: 8px; }\n.v-operator-console .voc-tier i { display: inline-flex; gap: 2px; }\n.v-operator-console .voc-tier i::before, .v-operator-console .voc-tier i::after, .v-operator-console .voc-tier i b {\n  content: \"\"; display: block; width: 3px; height: 9px; border-radius: 1px; background: var(--voc-hair-strong);\n}\n.v-operator-console .voc-tier[data-t=\"1\"] i::before,\n.v-operator-console .voc-tier[data-t=\"2\"] i::before, .v-operator-console .voc-tier[data-t=\"2\"] i b,\n.v-operator-console .voc-tier[data-t=\"3\"] i::before, .v-operator-console .voc-tier[data-t=\"3\"] i b, .v-operator-console .voc-tier[data-t=\"3\"] i::after { background: var(--voc-ink-2); }\n.v-operator-console .voc-off { color: var(--voc-faint); }\n.v-operator-console .voc-cache { display: inline-flex; align-items: center; gap: 6px; }\n.v-operator-console .voc-cache::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--voc-hair-strong); }\n.v-operator-console .voc-cache[data-on]::before { background: var(--mint); box-shadow: 0 0 0 2.5px color-mix(in oklab, var(--mint) 35%, transparent); }\n.v-operator-console .voc-arrow { color: var(--voc-muted); margin: 0 4px; }\n\n/* the row with a pending recommendation */\n.v-operator-console .voc-table tr.voc-pending td { background: var(--voc-wash); }\n.v-operator-console .voc-table tr.voc-pending td:first-child { border-radius: 8px 0 0 0; box-shadow: inset 2px 0 0 var(--voc-accent); padding-left: 10px; }\n.v-operator-console .voc-table tr.voc-pending td:last-child { border-radius: 0 8px 0 0; padding-right: 10px; }\n.v-operator-console .voc-table tr.voc-pending-detail td { background: var(--voc-wash); padding: 0 10px 12px; border-bottom: 0; white-space: normal; border-radius: 0 0 8px 8px; box-shadow: inset 2px 0 0 var(--voc-accent); }\n.v-operator-console .voc-table tr.voc-pending-detail td:first-child { font-weight: 400; color: var(--voc-body); }\n.v-operator-console .voc-table tr.voc-pending-detail + tr td { border-top: 6px solid transparent; }\n.v-operator-console .voc-newtier { color: var(--voc-ink); }\n.v-operator-console .voc-was { color: var(--voc-muted); text-decoration: line-through; text-decoration-thickness: 1px; }\n.v-operator-console .voc-inline-rec { display: flex; align-items: center; justify-content: space-between; gap: 10px 16px; flex-wrap: wrap; }\n.v-operator-console .voc-inline-rec p { flex: 1 1 320px; margin: 0; font: 400 12px/1.4 var(--sans); color: var(--voc-body); }\n.v-operator-console .voc-inline-rec p b { font-weight: 500; color: var(--voc-ink); }\n.v-operator-console .voc-inline-rec .voc-item__side { gap: 16px; flex: none; margin-left: auto; }\n.v-operator-console .voc-inline-rec .voc-save { display: flex; align-items: baseline; gap: 4px; min-width: 0; }\n.v-operator-console .voc-inline-rec .voc-save__k { margin-top: 0; }\n/* linked cells: flip when the matching item is approved */\n.v-operator-console [data-voc-key] .voc-after { display: none; }\n.v-operator-console [data-voc-key][data-linked=\"approved\"] .voc-before { display: none; }\n.v-operator-console [data-voc-key][data-linked=\"approved\"] .voc-after { display: inline-flex; animation: voc-pop .5s var(--voc-ease) both; }\n.v-operator-console .voc-acc[data-linked=\"approved\"]::before { box-shadow: none; background: var(--voc-ink-2); animation: voc-tick .55s var(--voc-ease) both; }\n\n.v-operator-console .voc-matrix { display: grid; grid-template-columns: minmax(92px, 1.3fr) repeat(5, minmax(0, 1fr)); align-items: center; }\n.v-operator-console .voc-matrix > * { padding: 8px 0; border-bottom: 1px solid var(--voc-hair-soft); }\n.v-operator-console .voc-matrix > :nth-last-child(-n + 6) { border-bottom: 0; }\n.v-operator-console .voc-matrix__col { font: 400 12px/1.3 var(--sans); color: var(--voc-muted); text-align: center; padding: 0 2px 8px; border-bottom: 1px solid var(--voc-hair); align-self: stretch; display: flex; align-items: flex-end; justify-content: center; }\n.v-operator-console .voc-matrix__col:first-child { justify-content: flex-start; text-align: left; }\n.v-operator-console .voc-matrix__row { font: 500 12px/1.2 var(--sans); color: var(--voc-ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-operator-console .voc-acc { display: grid; place-items: center; height: 100%; }\n.v-operator-console .voc-acc::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; }\n.v-operator-console .voc-acc[data-a=\"y\"]::before { background: var(--voc-ink-2); }\n.v-operator-console .voc-acc[data-a=\"p\"]::before { box-shadow: inset 0 0 0 1.5px var(--voc-accent); background: var(--voc-wash); }\n.v-operator-console .voc-acc[data-a=\"n\"]::before { width: 8px; height: 1.5px; border-radius: 1px; background: var(--voc-hair-strong); }\n.v-operator-console .voc-matrix-key { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 12px; font: 400 12px/1 var(--sans); color: var(--voc-muted); }\n.v-operator-console .voc-matrix-key span { display: inline-flex; align-items: center; gap: 6px; }\n.v-operator-console .voc-matrix-key .voc-acc { display: inline-grid; height: auto; }\n\n.v-operator-console .voc-req__title { margin: 6px 0 0; font: 500 14px/1.3 var(--sans); color: var(--voc-ink); }\n.v-operator-console .voc-req__ev { margin: 4px 0 12px; font: 400 12px/1.4 var(--sans); color: var(--voc-muted); }\n\n/* Foot */\n.v-operator-console .ui-foot { gap: 12px; font: 400 12px/1.4 var(--sans); color: var(--voc-muted); }\n.v-operator-console .ui-foot b { font-weight: 500; color: var(--voc-body); }\n.v-operator-console .voc-foot-l { display: inline-flex; align-items: center; gap: 8px; }\n\n/* --------------------------------------------------------------------------\n   Reveal on view (only when JS armed and motion allowed)\n   -------------------------------------------------------------------------- */\n.v-operator-console.is-armed [data-voc-reveal] { opacity: 0; transform: translateY(6px); }\n.v-operator-console.is-armed.is-in [data-voc-reveal] {\n  opacity: 1; transform: none;\n  transition: opacity .6s var(--voc-ease), transform .7s var(--voc-ease);\n  transition-delay: calc(var(--r, 0) * 70ms + 120ms);\n}\n.v-operator-console.is-armed .voc-spark { clip-path: inset(0 100% 0 0); }\n.v-operator-console.is-armed.is-in .voc-spark { clip-path: inset(0 0 0 0); transition: clip-path 1.25s cubic-bezier(.45, .05, .25, 1) .3s; }\n.v-operator-console.is-armed .voc-spark__pt { opacity: 0; transform: scale(.4); }\n.v-operator-console.is-armed.is-in .voc-spark__pt { opacity: 1; transform: none; transition: opacity .4s ease 1.45s, transform .6s var(--voc-ease) 1.45s; }\n.v-operator-console.is-armed .voc-meter > b { width: 0; }\n.v-operator-console.is-armed.is-in .voc-meter > b { width: var(--w, 0%); transition-delay: .6s; }\n\n@media (prefers-reduced-motion: reduce) {\n  .v-operator-console *, .v-operator-console *::before, .v-operator-console *::after { animation: none !important; transition: none !important; }\n}\n\n/* --------------------------------------------------------------------------\n   Responsive (container queries on the console's own width)\n   -------------------------------------------------------------------------- */\n@container voc (max-width: 980px) {\n  .v-operator-console .voc-shell { grid-template-columns: 54px minmax(0, 1fr); }\n  .v-operator-console .voc-rail { padding: 12px 8px; align-items: center; }\n  .v-operator-console .voc-rail__ws { padding: 2px 0 12px; justify-content: center; width: 100%; }\n  .v-operator-console .voc-rail__ws > span:last-child { display: none; }\n  .v-operator-console .voc-nav__item { width: 36px; padding: 0; justify-content: center; position: relative; }\n  .v-operator-console .voc-nav__item > span:not(.voc-ic):not(.voc-nav__count) { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }\n  .v-operator-console .voc-nav__count { position: absolute; top: -6px; right: -6px; min-width: 16px; height: 16px; font-size: 12px; padding: 0 4px; box-shadow: 0 0 0 2px var(--voc-raised); }\n  .v-operator-console .voc-nav__sep { width: 20px; margin: 8px auto; }\n}\n@container voc (max-width: 820px) {\n  .v-operator-console .voc-cols { grid-template-columns: minmax(0, 1fr); }\n  .v-operator-console .voc-stack--side { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n@container voc (max-width: 640px) {\n  .v-operator-console .voc-shell { grid-template-columns: minmax(0, 1fr); }\n  .v-operator-console .voc-rail {\n    flex-direction: row; align-items: center; gap: 4px; padding: 8px 12px;\n    border-right: 0; border-bottom: 1px solid var(--voc-hair);\n    overflow: hidden; position: relative;\n    -webkit-mask: linear-gradient(90deg, #000 72%, transparent); mask: linear-gradient(90deg, #000 72%, transparent);\n  }\n  .v-operator-console .voc-rail__ws { display: none; }\n  .v-operator-console .voc-nav { flex-direction: row; gap: 2px; }\n  .v-operator-console .voc-nav__sep { display: none; }\n  .v-operator-console .voc-nav__item { width: auto; padding: 0 10px; height: 28px; }\n  .v-operator-console .voc-nav__item > span:not(.voc-ic):not(.voc-nav__count) { position: static; width: auto; height: auto; overflow: visible; clip: auto; }\n  .v-operator-console .voc-nav__item .voc-ic { display: none; }\n  .v-operator-console .voc-nav__count { position: static; }\n  /* active item first on phones */\n  .v-operator-console .voc-nav__item.is-on { order: -1; }\n  .v-operator-console .voc-main { padding: 16px 16px 16px; }\n  .v-operator-console .voc-top { margin-bottom: 16px; padding-bottom: 16px; }\n  .v-operator-console .voc-top__title { font-size: 24px; }\n  .v-operator-console .voc-filters { display: none; }\n  .v-operator-console .voc-stack--side { grid-template-columns: minmax(0, 1fr); }\n  .v-operator-console .voc-sum { grid-template-columns: auto auto; gap: 12px 24px; }\n  .v-operator-console .voc-human { grid-column: 1 / -1; justify-self: stretch; max-width: none; }\n  .v-operator-console .voc-item { grid-template-columns: minmax(0, 1fr); padding: 12px 12px 12px 16px; }\n  .v-operator-console .voc-item__side { justify-content: space-between; padding-top: 8px; margin-top: 4px; border-top: 1px solid var(--voc-hair-soft); }\n  .v-operator-console .voc-item--std .voc-item__side { border-top: 0; padding-top: 0; }\n  .v-operator-console .voc-save { text-align: left; display: flex; align-items: baseline; gap: 6px; min-width: 0; }\n  .v-operator-console .voc-save__k { margin-top: 0; }\n  .v-operator-console .voc-heat { grid-template-columns: minmax(84px, 1.2fr) repeat(4, minmax(0, 1fr)); gap: 3px; }\n  .v-operator-console .voc-heat__c { height: 30px; }\n  .v-operator-console .voc-hide-sm { display: none !important; }\n  .v-operator-console .voc-matrix { grid-template-columns: minmax(80px, 1.2fr) repeat(5, minmax(0, 1fr)); }\n  .v-operator-console .ui-foot { flex-wrap: wrap; }\n}\n\n/* --------------------------------------------------------------------------\n   Variant layout helpers\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-cols--even { grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr); }\n.v-operator-console .voc-cols--gov { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); margin-top: 16px; }\n.v-operator-console .voc-routing { padding-bottom: 8px; }\n.v-operator-console .voc-label-row--queue { margin-bottom: 10px; }\n.v-operator-console .voc-human--block { display: flex; justify-self: stretch; max-width: none; margin: 12px 0 0; }\n@container voc (max-width: 820px) {\n  .v-operator-console .voc-cols--even, .v-operator-console .voc-cols--gov { grid-template-columns: minmax(0, 1fr); }\n}\n\n/* --------------------------------------------------------------------------\n   Compact queue rows (recommendations): kind/title/evidence left,\n   savings top-right, actions bottom-right.\n   -------------------------------------------------------------------------- */\n.v-operator-console .voc-item:not(.voc-item--std) {\n  grid-template-columns: minmax(0, 1fr) auto;\n  grid-template-areas: \"kind save\" \"title save\" \"ev act\";\n  column-gap: 24px; row-gap: 0; align-items: start;\n}\n.v-operator-console .voc-item:not(.voc-item--std) > div:first-child,\n.v-operator-console .voc-item:not(.voc-item--std) > .voc-item__side { display: contents; }\n.v-operator-console .voc-item:not(.voc-item--std) .voc-item__kind { grid-area: kind; }\n.v-operator-console .voc-item:not(.voc-item--std) .voc-item__title { grid-area: title; }\n.v-operator-console .voc-item:not(.voc-item--std) .voc-item__ev { grid-area: ev; align-self: center; margin-top: 2px; }\n.v-operator-console .voc-item:not(.voc-item--std) .voc-save { grid-area: save; align-self: center; display: flex; align-items: baseline; justify-content: flex-end; gap: 5px; min-width: 0; }\n.v-operator-console .voc-item:not(.voc-item--std) .voc-save__k { margin-top: 0; }\n.v-operator-console .voc-item:not(.voc-item--std) .voc-actions { grid-area: act; align-self: end; margin-right: -4px; }\n\n/* data-density=\"compact\": for split columns. Drops the 4th queue item and the allocation rule. */\n.v-operator-console[data-density=\"compact\"] .voc-queue > .voc-item:nth-child(n + 4),\n.v-operator-console[data-density=\"compact\"] .voc-opt { display: none; }\n.v-operator-console[data-density=\"compact\"] .voc-stack--side { grid-template-columns: minmax(0, 1fr); }\n\n@container voc (max-width: 640px) {\n  .v-operator-console .voc-item:not(.voc-item--std) {\n    grid-template-columns: minmax(0, 1fr) auto;\n    grid-template-areas: \"kind kind\" \"title title\" \"ev ev\" \"save act\";\n  }\n  .v-operator-console .voc-item:not(.voc-item--std) .voc-save { justify-content: flex-start; align-self: center; margin-top: 10px; padding-top: 10px; }\n  .v-operator-console .voc-item:not(.voc-item--std) .voc-actions { min-width: 0; padding-top: 10px; }\n  .v-operator-console .voc-item:not(.voc-item--std) .voc-save,\n  .v-operator-console .voc-item:not(.voc-item--std) .voc-actions { margin-top: 6px; }\n}\n\n/* Governance: monthly caps */\n.v-operator-console .voc-cap { display: grid; grid-template-columns: 84px minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 8px 0; font: 500 12px/1.2 var(--sans); color: var(--voc-ink-2); }\n.v-operator-console .voc-cap + .voc-cap { border-top: 1px solid var(--voc-hair-soft); }\n.v-operator-console .voc-cap .voc-meter { margin-top: 0; }\n.v-operator-console .voc-cap__v { font: 400 12px/1 var(--mono); font-variant-numeric: tabular-nums; color: var(--voc-body); white-space: nowrap; }\n.v-operator-console .voc-cap__v small { font-size: 12px; color: var(--voc-muted); }\n.v-operator-console.ui--dark .voc-meter > b { background: var(--lavender); }\n.v-operator-console .voc-roll__tiles { flex: none; }\n.v-operator-console .voc-roll__k { overflow: hidden; text-overflow: ellipsis; }\n\n/* heatmap column labels: full by default, short on narrow consoles */\n.v-operator-console .voc-short { display: none; }\n@container voc (max-width: 640px) {\n  .v-operator-console .voc-full { display: none; }\n  .v-operator-console .voc-short { display: inline; }\n  .v-operator-console .voc-heat { grid-template-columns: minmax(96px, 1.4fr) repeat(4, minmax(0, 1fr)); }\n  .v-operator-console .voc-heat__row { font-size: 12px; }\n  .v-operator-console .voc-heat__col { text-align: center; padding-inline: 0; }\n  .v-operator-console .voc-panel { padding: 12px 12px 12px; }\n}\n@container voc (max-width: 640px) {\n  .v-operator-console .voc-roll__k { display: none; }\n  .v-operator-console .voc-table th, .v-operator-console .voc-table td { padding-right: 8px; }\n  .v-operator-console .voc-table td:first-child { white-space: normal; }\n}\n@media (prefers-reduced-motion: reduce) {\n  .v-operator-console .voc-pulse::after { display: none; }\n}\n@container voc (max-width: 640px) {\n  .v-operator-console .voc-inline-rec .voc-item__side { flex: 1 1 100%; justify-content: space-between; margin-left: 0; min-width: 0; gap: 8px; }\n  .v-operator-console .voc-inline-rec .voc-actions { min-width: 0; }\n  .v-operator-console .voc-status { white-space: normal; }\n  .v-operator-console .voc-table .num { width: 1%; }\n  .v-operator-console .voc-inline-rec .voc-save__k { display: none; }\n}\n`;const PRESETS={\"home\":`<div class=\"ui v-operator-console\" data-variant=\"recommendations\" data-density=\"compact\" role=\"group\" aria-label=\"XTrace recommendations, product mock.\">\n  <p class=\"voc-sr\">Sample XTrace screen. Four recommendations from gateway analysis wait for a person to approve them. Three carry a projected saving, about $15.4k a month together: route test generation to a cheaper model tier, cache repeated repository context in code review, use the light tier for ticket summaries, and set a monthly cap on nightly evaluation runs. Nothing changes until someone approves. Side panels show a spend anomaly (Support triage at 3.4 times typical hourly spend, owner notified) and an allocation rule that assigns the payments repositories to the Payments team, with 97.2% of AI spend allocated. Team-level data.</p>\n  <p class=\"voc-sr\" aria-live=\"polite\" data-voc-live></p>\n  <div class=\"ui__head\">\n    <span class=\"ui__title\"><span class=\"xt-lockup xt-lockup--ui\" role=\"img\" aria-label=\"XTrace\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span> <span>\\xb7 Recommendations</span></span>\n    <span class=\"voc-head-r\"><span class=\"voc-sync voc-hide-sm\">Updated 4 min ago</span></span>\n  </div>\n  <div class=\"voc-shell\">\n      <div class=\"voc-rail\" aria-hidden=\"true\">\n        <div class=\"voc-rail__ws\"><span class=\"voc-rail__mark\">S</span><span>Sample org<small>Production</small></span></div>\n        <ul class=\"voc-nav\">\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"spend\"></i><span>Spend</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"alloc\"></i><span>Allocation</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"budget\"></i><span>Budgets</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"policy\"></i><span>Policies</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"route\"></i><span>Routing</span></li>\n          <li class=\"voc-nav__item is-on\"><i class=\"voc-ic\" data-i=\"recs\"></i><span>Recommendations</span><span class=\"voc-nav__count\" data-voc-open-count>4</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"enable\"></i><span>Adoption</span></li>\n        </ul>\n      </div>\n    <div class=\"voc-main\">\n      <div class=\"voc-top\" data-voc-reveal style=\"--r:0\">\n        <div>\n          <p class=\"voc-top__title\">Recommendations</p>\n          <p class=\"voc-top__sub\">Suggested by gateway analysis of the last 30 days.</p>\n        </div>\n        <div class=\"voc-filters\" aria-hidden=\"true\"><span class=\"voc-chip\">Last 30 days</span><span class=\"voc-chip\">All teams</span></div>\n      </div>\n      <div class=\"voc-cols\">\n        <div>\n          <div class=\"voc-sum\" data-voc-reveal style=\"--r:0\">\n            <div><span class=\"voc-sum__k\">Awaiting approval</span><span class=\"voc-sum__v\" data-voc-open-count>4</span></div>\n            <div><span class=\"voc-sum__k\">Projected savings</span><span class=\"voc-sum__v\"><span data-voc-projected>$15.4k</span><small>/mo</small></span></div>\n            <p class=\"voc-human\"><i class=\"voc-ic\" data-i=\"person\"></i><span><b>No change until someone approves.</b></span></p>\n          </div>\n          <ul class=\"voc-queue\">\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"7400\" data-voc-reveal style=\"--r:1\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Routing</span><span class=\"voc-item__src\">\\xb7 6 teams</span></div>\n              <p class=\"voc-item__title\">Route test generation to the Standard tier</p>\n              <p class=\"voc-item__ev\">Quality parity <b>99.1%</b> on 2,140 sampled tasks</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$7.4k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"4900\" data-voc-reveal style=\"--r:2\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Caching</span><span class=\"voc-item__src\">\\xb7 9 teams</span></div>\n              <p class=\"voc-item__title\">Cache repeated repository context in code review</p>\n              <p class=\"voc-item__ev\"><b>38%</b> of prompts repeat the same context within a day</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$4.9k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"3100\" data-voc-reveal style=\"--r:3\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Model choice</span><span class=\"voc-item__src\">\\xb7 4 teams</span></div>\n              <p class=\"voc-item__title\">Use the Light tier for ticket summaries</p>\n              <p class=\"voc-item__ev\">Quality parity <b>98.4%</b> on 1,310 sampled tasks</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$3.1k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-voc-reveal style=\"--r:4\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Budget</span><span class=\"voc-item__src\">\\xb7 3 teams</span></div>\n              <p class=\"voc-item__title\">Set a $6k monthly cap on nightly evaluation runs</p>\n              <p class=\"voc-item__ev\">Averaged <b>$8.2k</b> a month last quarter, with no cap set</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save voc-save--none\"><span class=\"voc-save__k\">No estimate</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          </ul>\n        </div>\n        <div class=\"voc-stack voc-stack--side\">\n          <div class=\"voc-panel voc-alert\" data-voc-reveal style=\"--r:2\">\n            <div class=\"voc-alert__head\"><span class=\"voc-alert__tag\"><span class=\"voc-pulse\"></span><span class=\"ui-label\">Spend anomaly</span></span><span class=\"voc-alert__time\">Since Tue 14:00</span></div>\n            <p class=\"voc-alert__title\">Support triage \\xb7 Customer Support</p>\n            <div class=\"voc-alert__fig\"><span class=\"voc-alert__mult\">3.4\\xd7</span><span>typical hourly spend</span></div>\n            <div class=\"voc-spark-wrap\">\n                <svg class=\"voc-spark\" viewBox=\"0 0 240 56\" preserveAspectRatio=\"none\" aria-hidden=\"true\" focusable=\"false\">\n                  <path class=\"voc-spark__area\" d=\"M0,56 L0,44 L10,43 L20,45 L30,42 L40,44 L50,46 L60,43 L70,44 L80,42 L90,45 L100,44 L110,43 L120,45 L130,44 L140,42 L150,44 L160,43 L170,45 L180,41 L190,36 L200,28 L210,19 L220,13 L230,10 L240,8 L240,56 Z\"/>\n                  <path class=\"voc-spark__base\" d=\"M0,44 L240,44\"/>\n                  <path class=\"voc-spark__line\" d=\"M0,44 L10,43 L20,45 L30,42 L40,44 L50,46 L60,43 L70,44 L80,42 L90,45 L100,44 L110,43 L120,45 L130,44 L140,42 L150,44 L160,43 L170,45 L180,41 L190,36 L200,28 L210,19 L220,13 L230,10 L240,8\"/>\n                </svg>\n                <span class=\"voc-spark__pt\" style=\"--y:14.3%\"></span>\n              </div>\n            <div class=\"voc-spark__axis\" aria-hidden=\"true\"><span>−24h</span><span>now</span></div>\n            <div class=\"voc-alert__foot\"><span>Owner notified \\xb7 <b>$1,870</b> today</span><span class=\"voc-link\">Investigate <i class=\"voc-ic\" data-i=\"arrow\"></i></span></div>\n          </div>\n          <div class=\"voc-panel voc-rule voc-opt\" data-voc-reveal style=\"--r:3\">\n            <div class=\"voc-label-row\"><span class=\"ui-label\">Allocation rule 12</span><span class=\"voc-badge-on\">Active</span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">When</span><span class=\"voc-rule__v\"><span class=\"voc-tok\">Repo</span><span class=\"voc-tok voc-tok--op\">matches</span><span class=\"voc-tok voc-tok--code\">payments/*</span></span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">Or</span><span class=\"voc-rule__v\"><span class=\"voc-tok\">Agent tag</span><span class=\"voc-tok voc-tok--op\">is</span><span class=\"voc-tok voc-tok--code\">checkout</span></span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">Assign to</span><span class=\"voc-rule__v\"><span class=\"voc-tok voc-tok--dest\">Payments team</span><span class=\"voc-tok voc-tok--code\">CC-4410</span></span></div>\n            <div class=\"voc-cov\">\n              <div class=\"voc-cov__row\"><span>AI spend allocated</span><b>97.2%</b></div>\n              <div class=\"voc-meter\"><b style=\"--w:97.2%\"></b></div>\n              <small>$3.1k unallocated this month</small>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"ui-foot\"><span class=\"voc-foot-l\">Team-level data \\xb7 23 teams</span><span>Approved this quarter <b data-voc-approved data-base=\"21300\">$21.3k</b>/mo</span></div>\n</div>`,\"finops\":`<div class=\"ui v-operator-console\" data-variant=\"recommendations\" role=\"group\" aria-label=\"XTrace recommendations, product mock.\">\n  <p class=\"voc-sr\">Sample XTrace screen. Four recommendations from AI gateway analysis wait for a person to approve them. Three carry a projected saving, about $15.4k a month together: route test generation to a cheaper model tier, cache repeated repository context in code review, use the light tier for ticket summaries, and set a monthly cap on nightly evaluation runs. Nothing changes until someone approves. Side panels show a spend anomaly (Support triage at 3.4 times typical hourly spend, owner notified) and an allocation rule that assigns the payments repositories to the Payments team, with 97.2% of AI spend allocated. Team-level data.</p>\n  <p class=\"voc-sr\" aria-live=\"polite\" data-voc-live></p>\n  <div class=\"ui__head\">\n    <span class=\"ui__title\"><span class=\"xt-lockup xt-lockup--ui\" role=\"img\" aria-label=\"XTrace\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span> <span>\\xb7 Recommendations</span></span>\n    <span class=\"voc-head-r\"><span class=\"voc-sync voc-hide-sm\">Updated 4 min ago</span></span>\n  </div>\n  <div class=\"voc-shell\">\n      <div class=\"voc-rail\" aria-hidden=\"true\">\n        <div class=\"voc-rail__ws\"><span class=\"voc-rail__mark\">S</span><span>Sample org<small>Production</small></span></div>\n        <ul class=\"voc-nav\">\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"spend\"></i><span>Spend</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"alloc\"></i><span>Allocation</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"budget\"></i><span>Budgets</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"policy\"></i><span>Policies</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"route\"></i><span>Routing</span></li>\n          <li class=\"voc-nav__item is-on\"><i class=\"voc-ic\" data-i=\"recs\"></i><span>Recommendations</span><span class=\"voc-nav__count\" data-voc-open-count>4</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"enable\"></i><span>Adoption</span></li>\n        </ul>\n      </div>\n    <div class=\"voc-main\">\n      <div class=\"voc-top\" data-voc-reveal style=\"--r:0\">\n        <div>\n          <p class=\"voc-top__title\">Recommendations</p>\n          <p class=\"voc-top__sub\">Suggested by AI gateway analysis of the last 30 days.</p>\n        </div>\n        <div class=\"voc-filters\" aria-hidden=\"true\"><span class=\"voc-chip\">Last 30 days</span><span class=\"voc-chip\">All teams</span></div>\n      </div>\n      <div class=\"voc-cols\">\n        <div>\n          <div class=\"voc-sum\" data-voc-reveal style=\"--r:0\">\n            <div><span class=\"voc-sum__k\">Awaiting approval</span><span class=\"voc-sum__v\" data-voc-open-count>4</span></div>\n            <div><span class=\"voc-sum__k\">Projected savings</span><span class=\"voc-sum__v\"><span data-voc-projected>$15.4k</span><small>/mo</small></span></div>\n            <p class=\"voc-human\"><i class=\"voc-ic\" data-i=\"person\"></i><span><b>No change until someone approves.</b></span></p>\n          </div>\n          <ul class=\"voc-queue\">\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"7400\" data-voc-reveal style=\"--r:1\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Routing</span><span class=\"voc-item__src\">\\xb7 6 teams</span></div>\n              <p class=\"voc-item__title\">Route test generation to the Standard tier</p>\n              <p class=\"voc-item__ev\">Quality parity <b>99.1%</b> on 2,140 sampled tasks</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$7.4k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"4900\" data-voc-reveal style=\"--r:2\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Caching</span><span class=\"voc-item__src\">\\xb7 9 teams</span></div>\n              <p class=\"voc-item__title\">Cache repeated repository context in code review</p>\n              <p class=\"voc-item__ev\"><b>38%</b> of prompts repeat the same context within a day</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$4.9k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"3100\" data-voc-reveal style=\"--r:3\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Model choice</span><span class=\"voc-item__src\">\\xb7 4 teams</span></div>\n              <p class=\"voc-item__title\">Use the Light tier for ticket summaries</p>\n              <p class=\"voc-item__ev\">Quality parity <b>98.4%</b> on 1,310 sampled tasks</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$3.1k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-voc-reveal style=\"--r:4\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Budget</span><span class=\"voc-item__src\">\\xb7 3 teams</span></div>\n              <p class=\"voc-item__title\">Set a $6k monthly cap on nightly evaluation runs</p>\n              <p class=\"voc-item__ev\">Averaged <b>$8.2k</b> a month last quarter, with no cap set</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save voc-save--none\"><span class=\"voc-save__k\">No estimate</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          </ul>\n        </div>\n        <div class=\"voc-stack voc-stack--side\">\n          <div class=\"voc-panel voc-alert\" data-voc-reveal style=\"--r:2\">\n            <div class=\"voc-alert__head\"><span class=\"voc-alert__tag\"><span class=\"voc-pulse\"></span><span class=\"ui-label\">Spend anomaly</span></span><span class=\"voc-alert__time\">Since Tue 14:00</span></div>\n            <p class=\"voc-alert__title\">Support triage \\xb7 Customer Support</p>\n            <div class=\"voc-alert__fig\"><span class=\"voc-alert__mult\">3.4\\xd7</span><span>typical hourly spend</span></div>\n            <div class=\"voc-spark-wrap\">\n                <svg class=\"voc-spark\" viewBox=\"0 0 240 56\" preserveAspectRatio=\"none\" aria-hidden=\"true\" focusable=\"false\">\n                  <path class=\"voc-spark__area\" d=\"M0,56 L0,44 L10,43 L20,45 L30,42 L40,44 L50,46 L60,43 L70,44 L80,42 L90,45 L100,44 L110,43 L120,45 L130,44 L140,42 L150,44 L160,43 L170,45 L180,41 L190,36 L200,28 L210,19 L220,13 L230,10 L240,8 L240,56 Z\"/>\n                  <path class=\"voc-spark__base\" d=\"M0,44 L240,44\"/>\n                  <path class=\"voc-spark__line\" d=\"M0,44 L10,43 L20,45 L30,42 L40,44 L50,46 L60,43 L70,44 L80,42 L90,45 L100,44 L110,43 L120,45 L130,44 L140,42 L150,44 L160,43 L170,45 L180,41 L190,36 L200,28 L210,19 L220,13 L230,10 L240,8\"/>\n                </svg>\n                <span class=\"voc-spark__pt\" style=\"--y:14.3%\"></span>\n              </div>\n            <div class=\"voc-spark__axis\" aria-hidden=\"true\"><span>−24h</span><span>now</span></div>\n            <div class=\"voc-alert__foot\"><span>Owner notified \\xb7 <b>$1,870</b> today</span><span class=\"voc-link\">Investigate <i class=\"voc-ic\" data-i=\"arrow\"></i></span></div>\n          </div>\n          <div class=\"voc-panel voc-rule voc-opt\" data-voc-reveal style=\"--r:3\">\n            <div class=\"voc-label-row\"><span class=\"ui-label\">Allocation rule 12</span><span class=\"voc-badge-on\">Active</span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">When</span><span class=\"voc-rule__v\"><span class=\"voc-tok\">Repo</span><span class=\"voc-tok voc-tok--op\">matches</span><span class=\"voc-tok voc-tok--code\">payments/*</span></span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">Or</span><span class=\"voc-rule__v\"><span class=\"voc-tok\">Agent tag</span><span class=\"voc-tok voc-tok--op\">is</span><span class=\"voc-tok voc-tok--code\">checkout</span></span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">Assign to</span><span class=\"voc-rule__v\"><span class=\"voc-tok voc-tok--dest\">Payments team</span><span class=\"voc-tok voc-tok--code\">CC-4410</span></span></div>\n            <div class=\"voc-cov\">\n              <div class=\"voc-cov__row\"><span>AI spend allocated</span><b>97.2%</b></div>\n              <div class=\"voc-meter\"><b style=\"--w:97.2%\"></b></div>\n              <small>$3.1k unallocated this month</small>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"ui-foot\"><span class=\"voc-foot-l\">Team-level data \\xb7 23 teams</span><span>Approved this quarter <b data-voc-approved data-base=\"21300\">$21.3k</b>/mo</span></div>\n</div>`,\"governance-1\":`<div class=\"ui v-operator-console\" data-variant=\"governance\" role=\"group\" aria-label=\"XTrace policies and routing, product mock.\">\n  <p class=\"voc-sr\">Sample XTrace screen for governance. A routing policy table sets the default model tier, escalation tier and caching for each task type. Gateway analysis recommends moving test generation from the Advanced to the Standard tier, with 99.1% quality parity and about $7.4k a month in projected savings; it waits for a person to approve it. A matrix shows which tools and skills each team may use, with one pending access request from Data science for read access to production logs. Policies apply on every call; gateway changes made without approval: zero.</p>\n  <p class=\"voc-sr\" aria-live=\"polite\" data-voc-live></p>\n  <div class=\"ui__head\">\n    <span class=\"ui__title\"><span class=\"xt-lockup xt-lockup--ui\" role=\"img\" aria-label=\"XTrace\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span> <span>\\xb7 Policies &amp; routing</span></span>\n    <span class=\"voc-head-r\"><span class=\"voc-sync voc-hide-sm\">Updated 4 min ago</span></span>\n  </div>\n  <div class=\"voc-shell\">\n      <div class=\"voc-rail\" aria-hidden=\"true\">\n        <div class=\"voc-rail__ws\"><span class=\"voc-rail__mark\">S</span><span>Sample org<small>Production</small></span></div>\n        <ul class=\"voc-nav\">\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"spend\"></i><span>Spend</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"alloc\"></i><span>Allocation</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"budget\"></i><span>Budgets</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"policy\"></i><span>Policies</span></li>\n          <li class=\"voc-nav__item is-on\"><i class=\"voc-ic\" data-i=\"route\"></i><span>Routing</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"recs\"></i><span>Recommendations</span><span class=\"voc-nav__count\">4</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"enable\"></i><span>Adoption</span></li>\n        </ul>\n      </div>\n    <div class=\"voc-main\">\n      <div class=\"voc-top\" data-voc-reveal style=\"--r:0\">\n        <div>\n          <p class=\"voc-top__title\">Routing &amp; access</p>\n          <p class=\"voc-top__sub\">Policies you set here apply on every call. Changes suggested by the gateway wait for approval.</p>\n        </div>\n        <div class=\"voc-filters\" aria-hidden=\"true\"><span class=\"voc-chip\">Production</span><span class=\"voc-chip\">All teams</span></div>\n      </div>\n      <div class=\"voc-panel voc-routing\" data-voc-reveal style=\"--r:1\">\n        <div class=\"voc-label-row\"><span class=\"ui-label\">Routing policy</span><span class=\"voc-aside\">5 of 14 task types</span></div>\n        <table class=\"voc-table\">\n          <thead><tr><th>Task type</th><th><span class=\"voc-full\">Default model</span><span class=\"voc-short\">Default</span></th><th class=\"voc-hide-sm\">Escalate to</th><th class=\"voc-hide-sm\">Cache</th><th class=\"num\"><span class=\"voc-full\">Cost / task</span><span class=\"voc-short\">Cost</span></th></tr></thead>\n          <tbody>\n              <tr><td>Code generation</td><td><span class=\"voc-tier\" data-t=\"3\"><i><b></b></i>Advanced</span></td><td class=\"voc-hide-sm\"><span class=\"voc-off\">None</span></td><td class=\"voc-hide-sm\"><span class=\"voc-cache\" data-on>On</span></td><td class=\"num\">$0.42</td></tr>\n              <tr class=\"voc-pending\"><td>Test generation</td><td data-voc-key=\"route-tests\"><span class=\"voc-before\"><span class=\"voc-tier\" data-t=\"3\"><i><b></b></i>Advanced</span></span><span class=\"voc-after\"><span class=\"voc-tier\" data-t=\"2\"><i><b></b></i>Standard</span></span></td><td class=\"voc-hide-sm\"><span class=\"voc-off\">None</span></td><td class=\"voc-hide-sm\"><span class=\"voc-cache\" data-on>On</span></td><td class=\"num\" data-voc-key=\"route-tests\"><span class=\"voc-before\">$0.31</span><span class=\"voc-after\">$0.12</span></td></tr>\n              <tr class=\"voc-pending-detail\"><td colspan=\"5\">\n                <div class=\"voc-inline-rec\" data-voc-item data-state=\"open\" data-voc-link=\"route-tests\" data-voc-note=\"The new route takes effect at the next policy sync.\">\n                  <p data-voc-title><b>Recommended:</b> move test generation to the Standard tier. Quality parity 99.1% on 2,140 sampled tasks.</p>\n                  <div class=\"voc-item__side\">\n                    <div class=\"voc-save\"><span class=\"voc-save__v\">$7.4k</span><span class=\"voc-save__k\">/mo projected</span></div>\n                    <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Applies at next sync</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n                  </div>\n                </div>\n              </td></tr>\n              <tr><td>Ticket summaries</td><td><span class=\"voc-tier\" data-t=\"1\"><i><b></b></i>Light</span></td><td class=\"voc-hide-sm\"><span class=\"voc-tier\" data-t=\"2\"><i><b></b></i>Standard</span></td><td class=\"voc-hide-sm\"><span class=\"voc-cache\" data-on>On</span></td><td class=\"num\">$0.02</td></tr>\n              <tr><td>Incident triage</td><td><span class=\"voc-tier\" data-t=\"2\"><i><b></b></i>Standard</span></td><td class=\"voc-hide-sm\"><span class=\"voc-tier\" data-t=\"3\"><i><b></b></i>Advanced</span></td><td class=\"voc-hide-sm\"><span class=\"voc-cache\">Off</span></td><td class=\"num\">$0.18</td></tr>\n              <tr><td>Data analysis</td><td><span class=\"voc-tier\" data-t=\"2\"><i><b></b></i>Standard</span></td><td class=\"voc-hide-sm\"><span class=\"voc-tier\" data-t=\"3\"><i><b></b></i>Advanced</span></td><td class=\"voc-hide-sm\"><span class=\"voc-cache\" data-on>On</span></td><td class=\"num\">$0.27</td></tr>\n          </tbody>\n        </table>\n      </div>\n      <div class=\"voc-cols voc-cols--gov\">\n        <div class=\"voc-panel\" data-voc-reveal style=\"--r:2\">\n          <div class=\"voc-label-row\"><span class=\"ui-label\">Tool and skill access</span><span class=\"voc-aside\">By team</span></div>\n            <div class=\"voc-matrix\" role=\"img\" aria-label=\"Tool and skill access by team. Payments: Coding agent approved, Web search approved, Prod logs approved, Deploy skill not allowed, CRM approved; Platform: Coding agent approved, Web search approved, Prod logs approved, Deploy skill approved, CRM not allowed; Support: Coding agent not allowed, Web search approved, Prod logs approved, Deploy skill not allowed, CRM approved; Data science: Coding agent approved, Web search approved, Prod logs requested, Deploy skill not allowed, CRM not allowed; Marketing: Coding agent not allowed, Web search approved, Prod logs not allowed, Deploy skill not allowed, CRM approved.\">\n              <span class=\"voc-matrix__col\">Team</span>\n              <span class=\"voc-matrix__col\">Coding agent</span>\n              <span class=\"voc-matrix__col\">Web search</span>\n              <span class=\"voc-matrix__col\">Prod logs</span>\n              <span class=\"voc-matrix__col\">Deploy skill</span>\n              <span class=\"voc-matrix__col\">CRM</span>\n              <span class=\"voc-matrix__row\">Payments</span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Payments \\xb7 Coding agent: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Payments \\xb7 Web search: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Payments \\xb7 Prod logs: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Payments \\xb7 Deploy skill: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Payments \\xb7 CRM: approved\"></span>\n              <span class=\"voc-matrix__row\">Platform</span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Platform \\xb7 Coding agent: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Platform \\xb7 Web search: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Platform \\xb7 Prod logs: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Platform \\xb7 Deploy skill: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Platform \\xb7 CRM: not allowed\"></span>\n              <span class=\"voc-matrix__row\">Support</span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Support \\xb7 Coding agent: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Support \\xb7 Web search: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Support \\xb7 Prod logs: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Support \\xb7 Deploy skill: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Support \\xb7 CRM: approved\"></span>\n              <span class=\"voc-matrix__row\">Data science</span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Data science \\xb7 Coding agent: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Data science \\xb7 Web search: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"p\" data-voc-key=\"acc-ds-logs\" title=\"Data science \\xb7 Prod logs: requested\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Data science \\xb7 Deploy skill: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Data science \\xb7 CRM: not allowed\"></span>\n              <span class=\"voc-matrix__row\">Marketing</span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Marketing \\xb7 Coding agent: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Marketing \\xb7 Web search: approved\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Marketing \\xb7 Prod logs: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"n\" title=\"Marketing \\xb7 Deploy skill: not allowed\"></span>\n              <span class=\"voc-acc\" data-a=\"y\" title=\"Marketing \\xb7 CRM: approved\"></span>\n            </div>\n          <div class=\"voc-matrix-key\" aria-hidden=\"true\"><span><i class=\"voc-acc\" data-a=\"y\"></i>Approved</span><span><i class=\"voc-acc\" data-a=\"p\"></i>Requested</span><span><i class=\"voc-acc\" data-a=\"n\"></i>Not allowed</span></div>\n        </div>\n        <div class=\"voc-stack\">\n        <ul class=\"voc-queue\">\n          <li class=\"voc-item voc-item--std\" data-voc-item data-state=\"open\" data-voc-link=\"acc-ds-logs\" data-voc-note=\"Data science can now read production logs.\" data-voc-reveal style=\"--r:3\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Access request</span><span class=\"voc-item__src\">\\xb7 2 days ago</span></div>\n              <p class=\"voc-item__title\">Data science: read-only access to production logs</p>\n              <p class=\"voc-item__ev\">For incident analysis. Write access stays blocked by policy.</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <span class=\"voc-plugin-tag\">Applies once approved</span>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Policy updated</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n        </ul>\n        <div class=\"voc-panel voc-caps voc-opt\" data-voc-reveal style=\"--r:4\">\n          <div class=\"voc-label-row\"><span class=\"ui-label\">Monthly caps</span><span class=\"voc-aside\">Enforced in the gateway</span></div>\n          <div class=\"voc-cap\"><span>Support</span><span class=\"voc-meter\"><b style=\"--w:81%\"></b></span><span class=\"voc-cap__v\">$11.3k <small>of $14k</small></span></div>\n          <div class=\"voc-cap\"><span>Data science</span><span class=\"voc-meter\"><b style=\"--w:64%\"></b></span><span class=\"voc-cap__v\">$11.5k <small>of $18k</small></span></div>\n          <div class=\"voc-cap\"><span>Platform</span><span class=\"voc-meter\"><b style=\"--w:47%\"></b></span><span class=\"voc-cap__v\">$10.3k <small>of $22k</small></span></div>\n        </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"ui-foot\"><span class=\"voc-foot-l\">Team-level policies \\xb7 5 teams shown</span><span>Gateway changes made without approval <b>0</b></span></div>\n</div>`,\"governance-2\":`<div class=\"ui v-operator-console\" data-variant=\"recommendations\" role=\"group\" aria-label=\"XTrace recommendations, product mock.\">\n  <p class=\"voc-sr\">Sample XTrace screen. Four recommendations from gateway analysis wait for a person to approve them. Three carry a projected saving, about $15.4k a month together: route test generation to a cheaper model tier, cache repeated repository context in code review, use the light tier for ticket summaries, and set a monthly cap on nightly evaluation runs. Nothing changes until someone approves. Side panels show a spend anomaly (Support triage at 3.4 times typical hourly spend, owner notified) and an allocation rule that assigns the payments repositories to the Payments team, with 97.2% of AI spend allocated. Team-level data.</p>\n  <p class=\"voc-sr\" aria-live=\"polite\" data-voc-live></p>\n  <div class=\"ui__head\">\n    <span class=\"ui__title\"><span class=\"xt-lockup xt-lockup--ui\" role=\"img\" aria-label=\"XTrace\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span> <span>\\xb7 Recommendations</span></span>\n    <span class=\"voc-head-r\"><span class=\"voc-sync voc-hide-sm\">Updated 4 min ago</span></span>\n  </div>\n  <div class=\"voc-shell\">\n      <div class=\"voc-rail\" aria-hidden=\"true\">\n        <div class=\"voc-rail__ws\"><span class=\"voc-rail__mark\">S</span><span>Sample org<small>Production</small></span></div>\n        <ul class=\"voc-nav\">\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"spend\"></i><span>Spend</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"alloc\"></i><span>Allocation</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"budget\"></i><span>Budgets</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"policy\"></i><span>Policies</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"route\"></i><span>Routing</span></li>\n          <li class=\"voc-nav__item is-on\"><i class=\"voc-ic\" data-i=\"recs\"></i><span>Recommendations</span><span class=\"voc-nav__count\" data-voc-open-count>4</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"enable\"></i><span>Adoption</span></li>\n        </ul>\n      </div>\n    <div class=\"voc-main\">\n      <div class=\"voc-top\" data-voc-reveal style=\"--r:0\">\n        <div>\n          <p class=\"voc-top__title\">Recommendations</p>\n          <p class=\"voc-top__sub\">Suggested by gateway analysis of the last 30 days.</p>\n        </div>\n        <div class=\"voc-filters\" aria-hidden=\"true\"><span class=\"voc-chip\">Last 30 days</span><span class=\"voc-chip\">All teams</span></div>\n      </div>\n      <div class=\"voc-cols\">\n        <div>\n          <div class=\"voc-sum\" data-voc-reveal style=\"--r:0\">\n            <div><span class=\"voc-sum__k\">Awaiting approval</span><span class=\"voc-sum__v\" data-voc-open-count>4</span></div>\n            <div><span class=\"voc-sum__k\">Projected savings</span><span class=\"voc-sum__v\"><span data-voc-projected>$15.4k</span><small>/mo</small></span></div>\n            <p class=\"voc-human\"><i class=\"voc-ic\" data-i=\"person\"></i><span><b>No change until someone approves.</b></span></p>\n          </div>\n          <ul class=\"voc-queue\">\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"7400\" data-voc-reveal style=\"--r:1\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Routing</span><span class=\"voc-item__src\">\\xb7 6 teams</span></div>\n              <p class=\"voc-item__title\">Route test generation to the Standard tier</p>\n              <p class=\"voc-item__ev\">Quality parity <b>99.1%</b> on 2,140 sampled tasks</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$7.4k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"4900\" data-voc-reveal style=\"--r:2\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Caching</span><span class=\"voc-item__src\">\\xb7 9 teams</span></div>\n              <p class=\"voc-item__title\">Cache repeated repository context in code review</p>\n              <p class=\"voc-item__ev\"><b>38%</b> of prompts repeat the same context within a day</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$4.9k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-savings=\"3100\" data-voc-reveal style=\"--r:3\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Model choice</span><span class=\"voc-item__src\">\\xb7 4 teams</span></div>\n              <p class=\"voc-item__title\">Use the Light tier for ticket summaries</p>\n              <p class=\"voc-item__ev\">Quality parity <b>98.4%</b> on 1,310 sampled tasks</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save\"><span class=\"voc-save__v\">$3.1k</span><span class=\"voc-save__k\">/mo projected</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item\" data-voc-item data-state=\"open\" data-voc-reveal style=\"--r:4\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Budget</span><span class=\"voc-item__src\">\\xb7 3 teams</span></div>\n              <p class=\"voc-item__title\">Set a $6k monthly cap on nightly evaluation runs</p>\n              <p class=\"voc-item__ev\">Averaged <b>$8.2k</b> a month last quarter, with no cap set</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-save voc-save--none\"><span class=\"voc-save__k\">No estimate</span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Approve</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Approved<small>Queued for rollout</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Undo</button>\n            </div>\n            </div>\n          </li>\n          </ul>\n        </div>\n        <div class=\"voc-stack voc-stack--side\">\n          <div class=\"voc-panel voc-alert\" data-voc-reveal style=\"--r:2\">\n            <div class=\"voc-alert__head\"><span class=\"voc-alert__tag\"><span class=\"voc-pulse\"></span><span class=\"ui-label\">Spend anomaly</span></span><span class=\"voc-alert__time\">Since Tue 14:00</span></div>\n            <p class=\"voc-alert__title\">Support triage \\xb7 Customer Support</p>\n            <div class=\"voc-alert__fig\"><span class=\"voc-alert__mult\">3.4\\xd7</span><span>typical hourly spend</span></div>\n            <div class=\"voc-spark-wrap\">\n                <svg class=\"voc-spark\" viewBox=\"0 0 240 56\" preserveAspectRatio=\"none\" aria-hidden=\"true\" focusable=\"false\">\n                  <path class=\"voc-spark__area\" d=\"M0,56 L0,44 L10,43 L20,45 L30,42 L40,44 L50,46 L60,43 L70,44 L80,42 L90,45 L100,44 L110,43 L120,45 L130,44 L140,42 L150,44 L160,43 L170,45 L180,41 L190,36 L200,28 L210,19 L220,13 L230,10 L240,8 L240,56 Z\"/>\n                  <path class=\"voc-spark__base\" d=\"M0,44 L240,44\"/>\n                  <path class=\"voc-spark__line\" d=\"M0,44 L10,43 L20,45 L30,42 L40,44 L50,46 L60,43 L70,44 L80,42 L90,45 L100,44 L110,43 L120,45 L130,44 L140,42 L150,44 L160,43 L170,45 L180,41 L190,36 L200,28 L210,19 L220,13 L230,10 L240,8\"/>\n                </svg>\n                <span class=\"voc-spark__pt\" style=\"--y:14.3%\"></span>\n              </div>\n            <div class=\"voc-spark__axis\" aria-hidden=\"true\"><span>−24h</span><span>now</span></div>\n            <div class=\"voc-alert__foot\"><span>Owner notified \\xb7 <b>$1,870</b> today</span><span class=\"voc-link\">Investigate <i class=\"voc-ic\" data-i=\"arrow\"></i></span></div>\n          </div>\n          <div class=\"voc-panel voc-rule voc-opt\" data-voc-reveal style=\"--r:3\">\n            <div class=\"voc-label-row\"><span class=\"ui-label\">Allocation rule 12</span><span class=\"voc-badge-on\">Active</span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">When</span><span class=\"voc-rule__v\"><span class=\"voc-tok\">Repo</span><span class=\"voc-tok voc-tok--op\">matches</span><span class=\"voc-tok voc-tok--code\">payments/*</span></span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">Or</span><span class=\"voc-rule__v\"><span class=\"voc-tok\">Agent tag</span><span class=\"voc-tok voc-tok--op\">is</span><span class=\"voc-tok voc-tok--code\">checkout</span></span></div>\n            <div class=\"voc-rule__line\"><span class=\"voc-rule__k\">Assign to</span><span class=\"voc-rule__v\"><span class=\"voc-tok voc-tok--dest\">Payments team</span><span class=\"voc-tok voc-tok--code\">CC-4410</span></span></div>\n            <div class=\"voc-cov\">\n              <div class=\"voc-cov__row\"><span>AI spend allocated</span><b>97.2%</b></div>\n              <div class=\"voc-meter\"><b style=\"--w:97.2%\"></b></div>\n              <small>$3.1k unallocated this month</small>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"ui-foot\"><span class=\"voc-foot-l\">Team-level data \\xb7 23 teams</span><span>Approved this quarter <b data-voc-approved data-base=\"21300\">$21.3k</b>/mo</span></div>\n</div>`,\"enablement\":`<div class=\"ui v-operator-console\" data-variant=\"enablement\" role=\"group\" aria-label=\"XTrace adoption and coaching, product mock.\">\n  <p class=\"voc-sr\">Sample XTrace screen for AI enablement and coaching. A heatmap shows where teams get stuck by workflow: incident triage and data analysis have the most friction, support replies the least. A panel lists what good practice looks like in incident triage, drawn from the three teams with the least friction. Three new standards, drawn from that practice, are rolling out automatically: the XTrace plugin takes each one to the teams in scope. Teams that want a look first can review them. Aggregated by team.</p>\n  <p class=\"voc-sr\" aria-live=\"polite\" data-voc-live></p>\n  <div class=\"ui__head\">\n    <span class=\"ui__title\"><span class=\"xt-lockup xt-lockup--ui\" role=\"img\" aria-label=\"XTrace\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span> <span>\\xb7 Adoption &amp; coaching</span></span>\n    <span class=\"voc-head-r\"><span class=\"voc-sync voc-hide-sm\">Updated 4 min ago</span></span>\n  </div>\n  <div class=\"voc-shell\">\n      <div class=\"voc-rail\" aria-hidden=\"true\">\n        <div class=\"voc-rail__ws\"><span class=\"voc-rail__mark\">S</span><span>Sample org<small>Production</small></span></div>\n        <ul class=\"voc-nav\">\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"spend\"></i><span>Spend</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"alloc\"></i><span>Allocation</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"budget\"></i><span>Budgets</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"policy\"></i><span>Policies</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"route\"></i><span>Routing</span></li>\n          <li class=\"voc-nav__item\"><i class=\"voc-ic\" data-i=\"recs\"></i><span>Recommendations</span><span class=\"voc-nav__count\">4</span></li>\n          <li class=\"voc-nav__sep\" role=\"presentation\"></li>\n          <li class=\"voc-nav__item is-on\"><i class=\"voc-ic\" data-i=\"enable\"></i><span>Adoption</span><span class=\"voc-nav__count\">3</span></li>\n        </ul>\n      </div>\n    <div class=\"voc-main\">\n      <div class=\"voc-top\" data-voc-reveal style=\"--r:0\">\n        <div>\n          <p class=\"voc-top__title\">Adoption &amp; coaching</p>\n          <p class=\"voc-top__sub\">Where teams get stuck, what good practice looks like, and which standards to roll out next.</p>\n        </div>\n        <div class=\"voc-filters\" aria-hidden=\"true\"><span class=\"voc-chip\">Last 30 days</span><span class=\"voc-chip\">23 teams</span></div>\n      </div>\n      <div class=\"voc-cols voc-cols--even\">\n        <div class=\"voc-stack\">\n          <div class=\"voc-panel\" data-voc-reveal style=\"--r:1\">\n            <div class=\"voc-label-row\"><span class=\"ui-label\">Friction by workflow</span><span class=\"voc-aside\">% of sessions</span></div>\n              <div class=\"voc-heat\" role=\"img\" aria-label=\"Friction by workflow, percent of sessions. Highest: incident triage, manual takeover 22% and missing context 17%; data analysis, missing context 21%; test generation, retry loops 18%. Lowest: support replies, 5% or less on every measure.\">\n                <span></span>\n                <span class=\"voc-heat__col\"><span class=\"voc-full\">Retry loops</span><span class=\"voc-short\" aria-hidden=\"true\">Loops</span></span>\n                <span class=\"voc-heat__col\"><span class=\"voc-full\">Abandoned</span><span class=\"voc-short\" aria-hidden=\"true\">Dropped</span></span>\n                <span class=\"voc-heat__col\"><span class=\"voc-full\">Manual takeover</span><span class=\"voc-short\" aria-hidden=\"true\">Manual</span></span>\n                <span class=\"voc-heat__col\"><span class=\"voc-full\">Missing context</span><span class=\"voc-short\" aria-hidden=\"true\">Context</span></span>\n                <span class=\"voc-heat__row\">Code review</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Code review \\xb7 Retry loops: 6% of sessions\">6</span>\n                <span class=\"voc-heat__c\" data-l=\"0\" title=\"Code review \\xb7 Abandoned: 4% of sessions\">4</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Code review \\xb7 Manual takeover: 9% of sessions\">9</span>\n                <span class=\"voc-heat__c\" data-l=\"2\" title=\"Code review \\xb7 Missing context: 12% of sessions\">12</span>\n                <span class=\"voc-heat__row\">Test generation</span>\n                <span class=\"voc-heat__c\" data-l=\"3\" title=\"Test generation \\xb7 Retry loops: 18% of sessions\">18</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Test generation \\xb7 Abandoned: 7% of sessions\">7</span>\n                <span class=\"voc-heat__c\" data-l=\"2\" title=\"Test generation \\xb7 Manual takeover: 11% of sessions\">11</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Test generation \\xb7 Missing context: 5% of sessions\">5</span>\n                <span class=\"voc-heat__row\">Incident triage</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Incident triage \\xb7 Retry loops: 9% of sessions\">9</span>\n                <span class=\"voc-heat__c\" data-l=\"2\" title=\"Incident triage \\xb7 Abandoned: 14% of sessions\">14</span>\n                <span class=\"voc-heat__c\" data-l=\"4\" title=\"Incident triage \\xb7 Manual takeover: 22% of sessions\">22</span>\n                <span class=\"voc-heat__c\" data-l=\"3\" title=\"Incident triage \\xb7 Missing context: 17% of sessions\">17</span>\n                <span class=\"voc-heat__row\">Data analysis</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Data analysis \\xb7 Retry loops: 5% of sessions\">5</span>\n                <span class=\"voc-heat__c\" data-l=\"2\" title=\"Data analysis \\xb7 Abandoned: 11% of sessions\">11</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Data analysis \\xb7 Manual takeover: 6% of sessions\">6</span>\n                <span class=\"voc-heat__c\" data-l=\"4\" title=\"Data analysis \\xb7 Missing context: 21% of sessions\">21</span>\n                <span class=\"voc-heat__row\">Support replies</span>\n                <span class=\"voc-heat__c\" data-l=\"0\" title=\"Support replies \\xb7 Retry loops: 3% of sessions\">3</span>\n                <span class=\"voc-heat__c\" data-l=\"0\" title=\"Support replies \\xb7 Abandoned: 2% of sessions\">2</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Support replies \\xb7 Manual takeover: 5% of sessions\">5</span>\n                <span class=\"voc-heat__c\" data-l=\"0\" title=\"Support replies \\xb7 Missing context: 4% of sessions\">4</span>\n                <span class=\"voc-heat__row\">Docs &amp; specs</span>\n                <span class=\"voc-heat__c\" data-l=\"0\" title=\"Docs &amp; specs \\xb7 Retry loops: 4% of sessions\">4</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Docs &amp; specs \\xb7 Abandoned: 9% of sessions\">9</span>\n                <span class=\"voc-heat__c\" data-l=\"0\" title=\"Docs &amp; specs \\xb7 Manual takeover: 3% of sessions\">3</span>\n                <span class=\"voc-heat__c\" data-l=\"1\" title=\"Docs &amp; specs \\xb7 Missing context: 8% of sessions\">8</span>\n              </div>\n            <div class=\"voc-heat__key\" aria-hidden=\"true\"><span>Less</span><span class=\"voc-heat__ramp\"><i></i><i></i><i></i><i></i><i></i></span><span>More friction</span></div>\n          </div>\n          <div class=\"voc-panel voc-good\" data-voc-reveal style=\"--r:2\">\n            <div class=\"voc-label-row\"><span class=\"ui-label\">What good looks like</span><span class=\"voc-aside\">Incident triage</span></div>\n            <p class=\"voc-good__title\">How the three lowest-friction teams run incident triage</p>\n            <ol>\n              <li>Start the session with the alert payload and the runbook link.</li>\n              <li>Let the agent read logs; people run the fix.</li>\n              <li>Close with a one-line summary for the incident record.</li>\n            </ol>\n          </div>\n        </div>\n        <div>\n          <div class=\"voc-label-row voc-label-row--queue\" data-voc-reveal style=\"--r:1\"><span class=\"ui-label\">New standards \\xb7 rolling out automatically</span></div>\n          <ul class=\"voc-queue\">\n          <li class=\"voc-item voc-item--std\" data-voc-item data-voc-done=\"Rolling out\" data-voc-reopen=\"Paused\" data-state=\"approved\" data-voc-note=\"The plugin rolls it out to 7 teams.\" data-voc-reveal style=\"--r:2\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Incident triage</span><span class=\"voc-plugin-tag\">Plugin standard</span></div>\n              <p class=\"voc-item__title\">Attach the runbook before an agent starts triage</p>\n              <p class=\"voc-item__ev\">Drafted from practice in <b>3 teams</b> with the least friction</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-roll\"><span class=\"voc-roll__tiles\" style=\"--n:7\" aria-hidden=\"true\"><i style=\"--k:0\"></i><i style=\"--k:1\"></i><i style=\"--k:2\"></i><i style=\"--k:3\"></i><i style=\"--k:4\"></i><i style=\"--k:5\"></i><i style=\"--k:6\"></i></span><span class=\"voc-roll__k\"><span class=\"voc-roll__before\"><b>7</b> teams</span><span class=\"voc-roll__after\">Rolling out \\xb7 <b>7</b></span></span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Roll out</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Automatic<small>Review optional</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Pause</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item voc-item--std\" data-voc-item data-voc-done=\"Rolling out\" data-voc-reopen=\"Paused\" data-state=\"approved\" data-voc-note=\"The plugin rolls it out to 12 teams.\" data-voc-reveal style=\"--r:3\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Test generation</span><span class=\"voc-plugin-tag\">Plugin standard</span></div>\n              <p class=\"voc-item__title\">Run the test command before proposing a fix</p>\n              <p class=\"voc-item__ev\">Retry loops fell <b>61%</b> in teams that already do this</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-roll\"><span class=\"voc-roll__tiles\" style=\"--n:12\" aria-hidden=\"true\"><i style=\"--k:0\"></i><i style=\"--k:1\"></i><i style=\"--k:2\"></i><i style=\"--k:3\"></i><i style=\"--k:4\"></i><i style=\"--k:5\"></i><i style=\"--k:6\"></i><i style=\"--k:7\"></i><i style=\"--k:8\"></i><i style=\"--k:9\"></i><i style=\"--k:10\"></i><i style=\"--k:11\"></i></span><span class=\"voc-roll__k\"><span class=\"voc-roll__before\"><b>12</b> teams</span><span class=\"voc-roll__after\">Rolling out \\xb7 <b>12</b></span></span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Roll out</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Automatic<small>Review optional</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Pause</button>\n            </div>\n            </div>\n          </li>\n          <li class=\"voc-item voc-item--std\" data-voc-item data-voc-done=\"Rolling out\" data-voc-reopen=\"Paused\" data-state=\"approved\" data-voc-note=\"The plugin rolls it out to 5 teams.\" data-voc-reveal style=\"--r:4\">\n            <div>\n              <div class=\"voc-item__kind\"><span class=\"ui-label\">Data analysis</span><span class=\"voc-plugin-tag\">Plugin standard</span></div>\n              <p class=\"voc-item__title\">Load the table schema before the first query</p>\n              <p class=\"voc-item__ev\">Addresses the top cause of missing context</p>\n            </div>\n            <div class=\"voc-item__side\">\n              <div class=\"voc-roll\"><span class=\"voc-roll__tiles\" style=\"--n:5\" aria-hidden=\"true\"><i style=\"--k:0\"></i><i style=\"--k:1\"></i><i style=\"--k:2\"></i><i style=\"--k:3\"></i><i style=\"--k:4\"></i></span><span class=\"voc-roll__k\"><span class=\"voc-roll__before\"><b>5</b> teams</span><span class=\"voc-roll__after\">Rolling out \\xb7 <b>5</b></span></span></div>\n              <div class=\"voc-actions\">\n              <button type=\"button\" class=\"voc-btn voc-btn--approve\" data-voc-approve>Roll out</button>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet\" data-voc-dismiss>Dismiss</button>\n              <span class=\"voc-status voc-status--approved\"><span class=\"voc-tick\"><i class=\"voc-ic\" data-i=\"check\"></i></span><span>Automatic<small>Review optional</small></span></span>\n              <span class=\"voc-status voc-status--dismissed\">Dismissed</span>\n              <button type=\"button\" class=\"voc-btn voc-btn--quiet voc-undo\" data-voc-undo>Pause</button>\n            </div>\n            </div>\n          </li>\n          </ul>\n          <p class=\"voc-human voc-human--block\" data-voc-reveal style=\"--r:5\"><i class=\"voc-ic\" data-i=\"person\"></i><span><b>Standards roll out automatically.</b> Teams that want a look first can review them.</span></p>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"ui-foot\"><span class=\"voc-foot-l\">Aggregated by team</span><span>Standards live in the plugin <b data-voc-approved-n data-base=\"12\">15</b></span></div>\n</div>`};function install(){/* Visual · Recommendations, adoption & policies · operator-console.js\n   Self-initializes every .v-operator-console on the page.\n   - Start-on-view: adds .is-armed, then .is-in when 25% visible (stagger reveal,\n     anomaly sparkline draw, allocation meter fill). Static under reduced motion.\n   - Decisions: any [data-voc-item] with [data-voc-approve] / [data-voc-dismiss] /\n     [data-voc-undo] buttons. State lives in data-state=\"open|approved|dismissed\".\n   - Counters (all optional, scoped to the console):\n       [data-voc-open-count]   number of open items\n       [data-voc-projected]    sum of data-savings on open items ($k/mo)\n       [data-voc-approved]     data-base + sum of data-savings on approved items ($k)\n       [data-voc-approved-n]   data-base + number of approved items\n   - Links: an item with data-voc-link=\"key\" sets data-linked=\"approved|open\" on\n     every [data-voc-key=\"key\"] in the console (e.g. a routing cell, an access cell).\n   - Labels: each button's accessible name starts with its visible text\n     (\"Approve: <item>\", \"Pause: <item>\"), per WCAG 2.5.3. The live message on\n     approve reads data-voc-done (default \"Approved\"), then data-voc-note; on undo,\n     data-voc-reopen (default \"Back in the queue\").\n   Gateway recommendations never apply themselves: their state only changes on a\n   person's click. Rule and standard items (enablement) start as data-state=\"approved\"\n   because rules roll out automatically; their buttons are optional overrides.\n*/(function(){\"use strict\";var reduce=window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;function $all(root,sel){return Array.prototype.slice.call(root.querySelectorAll(sel));}function fmtK(n){var k=n/1e3;return\"$\"+(k>=100?Math.round(k):k.toFixed(1))+\"k\";}function tween(el,from,to,fmt){if(reduce||from===to){el.textContent=fmt(to);return;}var t0=null,dur=700;if(el._raf)cancelAnimationFrame(el._raf);function step(t){if(!t0)t0=t;var p=Math.min(1,(t-t0)/dur),e=1-Math.pow(1-p,3);el.textContent=fmt(from+(to-from)*e);if(p<1)el._raf=requestAnimationFrame(step);}el._raf=requestAnimationFrame(step);}function init(root){if(root._voc)return;root._voc=true;var items=$all(root,\"[data-voc-item]\");var live=root.querySelector(\"[data-voc-live]\");// Label buttons with the item they act on\nitems.forEach(function(it){var t=it.querySelector(\".voc-item__title, [data-voc-title]\");var name=t?t.textContent.trim():\"\";if(!it.getAttribute(\"data-state\"))it.setAttribute(\"data-state\",\"open\");$all(it,\"[data-voc-approve]\").forEach(function(b){b.setAttribute(\"aria-label\",(b.textContent.trim()||\"Approve\")+\": \"+name);});$all(it,\"[data-voc-dismiss]\").forEach(function(b){b.setAttribute(\"aria-label\",\"Dismiss: \"+name);});$all(it,\"[data-voc-undo]\").forEach(function(b){b.setAttribute(\"aria-label\",(b.textContent.trim()||\"Undo\")+\": \"+name);});it._name=name;});function numOf(el,attr){var v=parseFloat(el.getAttribute(attr));return isNaN(v)?0:v;}function recount(animate){var open=0,projected=0,approvedSum=0,approvedN=0;items.forEach(function(it){var s=it.getAttribute(\"data-state\"),sv=numOf(it,\"data-savings\");if(s===\"open\"){open++;projected+=sv;}if(s===\"approved\"){approvedN++;approvedSum+=sv;}});$all(root,\"[data-voc-open-count]\").forEach(function(el){el.textContent=open;});$all(root,\"[data-voc-projected]\").forEach(function(el){var prev=el._v==null?projected:el._v;el._v=projected;animate?tween(el,prev,projected,fmtK):el.textContent=fmtK(projected);});$all(root,\"[data-voc-approved]\").forEach(function(el){var to=numOf(el,\"data-base\")+approvedSum,prev=el._v==null?to:el._v;el._v=to;animate?tween(el,prev,to,fmtK):el.textContent=fmtK(to);});$all(root,\"[data-voc-approved-n]\").forEach(function(el){el.textContent=numOf(el,\"data-base\")+approvedN;});}function setState(it,state){it.setAttribute(\"data-state\",state);var key=it.getAttribute(\"data-voc-link\");if(key)$all(root,'[data-voc-key=\"'+key+'\"]').forEach(function(el){el.setAttribute(\"data-linked\",state);});recount(true);if(live){var msg=state===\"approved\"?(it.getAttribute(\"data-voc-done\")||\"Approved\")+\": \"+it._name+\". \"+(it.getAttribute(\"data-voc-note\")||\"Queued for rollout.\"):state===\"dismissed\"?\"Dismissed: \"+it._name+\".\":(it.getAttribute(\"data-voc-reopen\")||\"Back in the queue\")+\": \"+it._name+\".\";live.textContent=msg;}}root.addEventListener(\"click\",function(e){var b=e.target.closest(\"[data-voc-approve], [data-voc-dismiss], [data-voc-undo]\");if(!b||!root.contains(b))return;var it=b.closest(\"[data-voc-item]\");if(!it)return;var focusNext;if(b.hasAttribute(\"data-voc-approve\")){setState(it,\"approved\");focusNext=it.querySelector(\"[data-voc-undo]\");}else if(b.hasAttribute(\"data-voc-dismiss\")){setState(it,\"dismissed\");focusNext=it.querySelector(\"[data-voc-undo]\");}else{setState(it,\"open\");focusNext=it.querySelector(\"[data-voc-approve]\");}// keep keyboard focus on the item instead of losing it with the hidden button\nif(focusNext&&(e.detail===0||document.activeElement===b))focusNext.focus({preventScroll:true});});recount(false);// Start on view\nif(reduce||!(\"IntersectionObserver\"in window)){root.classList.add(\"is-in\");return;}root.classList.add(\"is-armed\");var io=new IntersectionObserver(function(entries){entries.forEach(function(en){if(en.isIntersecting){root.classList.add(\"is-in\");io.disconnect();}});},{threshold:.2});io.observe(root);}function boot(){$all(document,\".v-operator-console\").forEach(init);}if(document.readyState!==\"loading\")boot();else document.addEventListener(\"DOMContentLoaded\",boot);window.XTOperatorConsole={init:init,boot:boot};})();}/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export default function XTPolicies(props){const{style}=props;const animated=useAnimated();const host=React.useRef(null);let html=PRESETS[props.preset]||PRESETS[\"home\"];const setRootAttr=(k,v)=>{html=html.replace(/^(<[a-z]+)([^>]*?)(\\s${k}=\"[^\"]*\")?([^>]*>)/i,(m,a,b,c,d)=>a+b.replace(new RegExp(\"\\\\s\"+k+'=\"[^\"]*\"'),\"\")+(v==null?\"\":\" \"+k+'=\"'+v+'\"')+d);};const addRootClass=(c,on)=>{html=html.replace(/^(<[a-z]+[^>]*?class=\")([^\"]*)\"/i,(m,a,b)=>a+(on?b.split(\" \").includes(c)?b:b+\" \"+c:b.split(\" \").filter(x=>x!==c).join(\" \"))+'\"');};if(props.density!==\"preset\")setRootAttr(\"data-density\",props.density===\"compact\"?\"compact\":null);const key=html.length+\":\"+JSON.stringify([props,animated].map(x=>x&&x.style?{...x,style:0}:x));React.useEffect(()=>{const box=host.current;if(!box)return;if(!animated)return;let el=null;let unsettle=()=>{};let cancelSized=()=>{};let untrack=()=>{};const cancel=afterPaint(()=>{cancelSized=whenSized(box,()=>{hidden(\"v-operator-console\",null,()=>once(\"XTOperatorConsole\",install));el=box.querySelector(\".v-operator-console\");const api=window.XTOperatorConsole;if(el&&api)hidden(\"v-operator-console\",el,()=>{untrack=track(()=>api.init(el));});unsettle=settle(()=>el&&el._voc);});});return()=>{cancel();cancelSized();unsettle();untrack();if(el)teardown(el._voc);};},[key]);return /*#__PURE__*/_jsxs(\"div\",{ref:host,className:\"xtcc\"+(props.dark?\" xt-dark\":\"\"),\"aria-hidden\":props.decorative?\"true\":undefined,style:{width:\"100%\",fontFamily:\"var(--sans)\",letterSpacing:\"-0.04em\",color:\"var(--ink)\",WebkitFontSmoothing:\"antialiased\",...style},children:[/*#__PURE__*/_jsx(XTStyle,{css:XT_FONT_IMPORT}),/*#__PURE__*/_jsx(XTStyle,{css:XT_BASE_CSS+XT_LOCKUP_CSS+CSS}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"contents\"},dangerouslySetInnerHTML:{__html:html}},key)]});}XTPolicies.displayName=\"XT Policies & recommendations\";addPropertyControls(XTPolicies,{preset:{type:ControlType.Enum,title:\"Preset\",options:[\"home\",\"finops\",\"governance-1\",\"governance-2\",\"enablement\"],optionTitles:[\"home\",\"finops\",\"governance-1\",\"governance-2\",\"enablement\"],defaultValue:\"home\"},density:{type:ControlType.Enum,title:\"Density\",options:[\"preset\",\"full\",\"compact\"],optionTitles:[\"From preset\",\"Full\",\"Compact\"],defaultValue:\"preset\"},decorative:{type:ControlType.Boolean,title:\"Hide from SR\",defaultValue:false,description:\"On when a native caption already says the same thing.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"XTPolicies\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./XTPolicies.map","// @ts-nocheck\n// XT Spend & ROI view. Port of site/visuals/executive-view. Markup presets are copied verbatim from the local pages (copy is not edited here);\n// the behaviour script is the original, verbatim, installed once per page. Text stays DOM text, so it is in the server HTML.\n// Animation starts on the client after first paint, only on the published site/preview; the canvas shows the final frame.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";import{XTStyle,XT_FONT_IMPORT,XT_BASE_CSS,XT_LOCKUP_CSS,useAnimated,once,afterPaint,teardown,settle,whenSized,track,hidden}from\"https://framerusercontent.com/modules/dJPZ5VRbhPbRDwnU4bd6/SWSCRD2FKFAHO19Do92q/XTShared.js\";const CSS=`/* ==========================================================================\n   Visual \\xb7 Spend &amp; ROI dashboard  \\xb7  executive-view.css\n   Product UI mock of the Spend & ROI and Adoption dashboard.\n   Variants:  data-variant=\"spend\" (Spend & ROI, default) | \"adoption\"\n   Theme:     data-theme=\"light\" (default) | \"dark\" (inside .band-dark)\n   Size:      data-size=\"full\" (default) | \"compact\" (KPI strip + main chart only)\n   Layout responds to its own width (container queries), so it works in a\n   full-width figure, a .split column, and on phones.\n   Requires xt.css tokens. Every selector is scoped under .v-executive-view.\n   ========================================================================== */\n\n.v-executive-view {\n  /* Crux type (round 4). Same values as the retokenized xt.css; kept here so the visual renders right on any page. */\n  --sans: \"Funnel Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif;\n  --mono: \"Fragment Mono\", ui-monospace, \"SFMono-Regular\", Menlo, monospace;\n  /* theme tokens (light) */\n  --xv-surface: color-mix(in oklab, var(--card) 95%, transparent);\n  --xv-bar: color-mix(in oklab, var(--canvas-soft) 82%, transparent);\n  --xv-ink: var(--ink);\n  --xv-text: var(--ink-2);\n  --xv-soft: var(--body);\n  --xv-muted: var(--muted);\n  --xv-faint: var(--muted-soft);\n  --xv-hair: var(--hair);\n  --xv-hair-soft: var(--hair-soft);\n  --xv-plate: var(--strong);\n  --xv-line: var(--ink-2);\n  --xv-area: var(--ink-2);\n  --xv-a1: var(--lavender-deep);   /* wider rollout */\n  --xv-a2: var(--sky-deep);        /* optimized */\n  --xv-fan-1: var(--lavender);\n  --xv-fan-2: var(--sky);\n  --xv-forecast-bg: color-mix(in oklab, var(--canvas) 70%, transparent);\n  --xv-pos: var(--pos);\n  --xv-neg: var(--neg);\n  --xv-shadow: var(--sh-float);\n  --xv-focus: var(--ink);\n\n  container: xv / inline-size;\n  position: relative;\n  font-family: var(--sans);\n  letter-spacing: -0.04em;\n  color: var(--xv-text);\n  font-size: 14px;\n  line-height: 1.4;\n  text-align: left;\n}\n\n.v-executive-view[data-theme=\"dark\"] {\n  --xv-surface: color-mix(in oklab, var(--dark-2) 90%, transparent);\n  --xv-bar: color-mix(in oklab, var(--dark) 40%, transparent);\n  --xv-ink: var(--on-dark);\n  --xv-text: var(--on-dark-soft);\n  --xv-soft: var(--on-dark-soft);\n  --xv-muted: var(--on-dark-muted);\n  --xv-faint: color-mix(in oklab, var(--on-dark-muted) 60%, var(--dark-2));\n  --xv-hair: var(--hair-dark);\n  --xv-hair-soft: rgba(250, 250, 249, .06);\n  --xv-plate: var(--dark-3);\n  --xv-line: var(--on-dark);\n  --xv-area: var(--lavender);\n  --xv-a1: var(--lavender);\n  --xv-a2: var(--sky);\n  --xv-fan-1: var(--lavender-deep);\n  --xv-fan-2: var(--sky-deep);\n  --xv-forecast-bg: rgba(250, 250, 249, .025);\n  --xv-pos: color-mix(in oklab, var(--mint) 85%, var(--on-dark));\n  --xv-neg: color-mix(in oklab, var(--peach) 85%, var(--on-dark));\n  --xv-shadow: 0 0 0 1px var(--hair-dark), 0 40px 80px -30px rgba(0, 0, 0, .6);\n  --xv-focus: var(--on-dark);\n}\n\n.v-executive-view *, .v-executive-view *::before, .v-executive-view *::after { box-sizing: border-box; }\n.v-executive-view h3, .v-executive-view h4, .v-executive-view p, .v-executive-view ul, .v-executive-view ol { margin: 0; padding: 0; }\n.v-executive-view ul, .v-executive-view ol { list-style: none; }\n.v-executive-view .mono-n { font-family: var(--mono); font-variant-numeric: tabular-nums; letter-spacing: -0.02em; }\n\n/* --------------------------------------------------------------------------\n   Window frame\n   -------------------------------------------------------------------------- */\n.v-executive-view .xv-window {\n  position: relative;\n  background: var(--xv-surface);\n  -webkit-backdrop-filter: blur(18px) saturate(1.1); backdrop-filter: blur(18px) saturate(1.1);\n  border-radius: 14px;\n  box-shadow: var(--xv-shadow);\n  overflow: hidden;\n}\n\n/* App bar: product + location on the left, period and export on the right */\n.v-executive-view .xv-appbar {\n  display: flex; align-items: center; gap: 16px;\n  height: 48px; padding: 0 16px;\n  background: var(--xv-bar);\n  border-bottom: 1px solid var(--xv-hair);\n}\n.v-executive-view .xv-brand {\n  font: 400 18px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--xv-ink);\n  padding-right: 16px; border-right: 1px solid var(--xv-hair); align-self: stretch; display: flex; align-items: center;\n}\n.v-executive-view .xv-crumb { font: 500 14px/1.2 var(--sans); color: var(--xv-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }\n.v-executive-view .xv-crumb span { color: var(--xv-muted); font-weight: 400; }\n.v-executive-view .xv-appbar__end { margin-left: auto; display: flex; align-items: center; gap: 8px; flex: none; }\n.v-executive-view .xv-chip {\n  display: inline-flex; align-items: center; gap: 6px; min-height: 26px; padding: 6px 10px; flex: none; width: max-content; box-sizing: border-box;\n  border-radius: var(--r-pill); box-shadow: inset 0 0 0 1px var(--xv-hair);\n  font: 500 12px/1 var(--sans); color: var(--xv-text); white-space: nowrap;\n}\n.v-executive-view .xv-chip svg { width: 10px; height: 10px; flex: none; color: var(--xv-muted); }\n.v-executive-view .xv-chip--ghost { box-shadow: none; color: var(--xv-muted); }\n.v-executive-view[data-theme=\"dark\"] .tag-illus { color: var(--on-dark-muted); box-shadow: inset 0 0 0 1px var(--hair-dark-strong); background: transparent; }\n\n/* Tabs */\n.v-executive-view .xv-tabs {\n  display: flex; align-items: stretch; gap: 24px; padding: 0 16px;\n  border-bottom: 1px solid var(--xv-hair);\n}\n.v-executive-view .xv-tab {\n  appearance: none; background: none; border: 0; margin: 0 0 -1px; padding: 12px 0 12px;\n  font: 500 12px/1 var(--sans); letter-spacing: -0.04em; color: var(--xv-muted); cursor: pointer;\n  border-bottom: 1.5px solid transparent; white-space: nowrap;\n  transition: color var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);\n}\n.v-executive-view .xv-tab:hover { color: var(--xv-ink); }\n.v-executive-view:not([data-variant=\"adoption\"]) .xv-tab[data-tab=\"spend\"],\n.v-executive-view[data-variant=\"adoption\"] .xv-tab[data-tab=\"adoption\"] { color: var(--xv-ink); border-bottom-color: var(--xv-line); }\n.v-executive-view .xv-tab:focus-visible { outline: 2px solid var(--xv-focus); outline-offset: 2px; border-radius: 2px; }\n.v-executive-view .xv-tabs__end { margin-left: auto; display: flex; align-items: center; gap: 6px; font: 400 12px/1 var(--sans); color: var(--xv-muted); white-space: nowrap; }\n.v-executive-view .xv-tabs__end b { font-weight: 500; color: var(--xv-text); }\n\n/* Panels: no-JS fallback picks the panel from data-variant */\n.v-executive-view .xv-panel { display: none; }\n.v-executive-view:not([data-variant=\"adoption\"]) .xv-panel[data-panel=\"spend\"],\n.v-executive-view[data-variant=\"adoption\"] .xv-panel[data-panel=\"adoption\"] { display: block; }\n\n/* --------------------------------------------------------------------------\n   KPI strip\n   -------------------------------------------------------------------------- */\n.v-executive-view .xv-kpis {\n  display: grid; grid-template-columns: repeat(var(--xv-kpi-cols, 4), minmax(0, 1fr));\n  border-bottom: 1px solid var(--xv-hair);\n}\n.v-executive-view .xv-kpis[data-cols=\"3\"] { --xv-kpi-cols: 3; }\n.v-executive-view .xv-kpi { position: relative; padding: 16px 24px 24px; min-width: 0; }\n.v-executive-view .xv-kpi + .xv-kpi { border-left: 1px solid var(--xv-hair); }\n.v-executive-view .xv-kpi__k { font: 500 12px/1.3 var(--sans); color: var(--xv-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-executive-view .xv-kpi__row { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin-top: 10px; }\n.v-executive-view .xv-kpi__v {\n  font: 400 32px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--xv-ink);\n  font-variant-numeric: lining-nums tabular-nums; white-space: nowrap;\n}\n.v-executive-view .xv-kpi__v small { font: 400 14px/1 var(--sans); letter-spacing: -0.04em; color: var(--xv-muted); margin-left: 4px; }\n.v-executive-view .xv-kpi__d { margin-top: 10px; font: 400 12px/1.3 var(--sans); color: var(--xv-muted); }\n.v-executive-view .xv-kpi__d .mono-n { font-size: 12px; color: var(--xv-text); }\n.v-executive-view .xv-up { color: var(--xv-pos) !important; }\n.v-executive-view .xv-dn { color: var(--xv-pos) !important; }\n.v-executive-view .xv-bad { color: var(--xv-neg) !important; }\n\n/* Sparkline (rendered by JS from data-points) */\n.v-executive-view .xv-spark { display: block; width: 76px; height: 28px; flex: none; overflow: visible; }\n.v-executive-view .xv-spark path.l { fill: none; stroke: var(--xv-line); stroke-width: 1.25; stroke-linecap: round; stroke-linejoin: round; vector-effect: non-scaling-stroke; }\n.v-executive-view .xv-spark path.l.pre { stroke: var(--xv-faint); }\n.v-executive-view .xv-spark circle { fill: var(--xv-line); }\n.v-executive-view .xv-spark line.m { stroke: var(--xv-faint); stroke-width: 1; stroke-dasharray: 2 2; }\n\n/* Budget vs. actual meter */\n.v-executive-view .xv-meter { position: relative; margin-top: 16px; height: 6px; }\n.v-executive-view .xv-meter__track { position: absolute; inset: 0; border-radius: 4px; background: var(--xv-hair-soft); box-shadow: inset 0 0 0 1px var(--xv-hair); }\n.v-executive-view .xv-meter__fc {\n  position: absolute; left: 0; top: 0; bottom: 0; width: var(--fc); border-radius: 4px;\n  background: repeating-linear-gradient(-45deg, color-mix(in oklab, var(--xv-a1) 55%, transparent) 0 1.5px, transparent 1.5px 4px);\n  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--xv-a1) 45%, transparent);\n}\n.v-executive-view .xv-meter__act { position: absolute; left: 0; top: 0; bottom: 0; width: var(--act); border-radius: 4px; background: var(--xv-line); }\n.v-executive-view .xv-meter__over { position: absolute; top: 1px; bottom: 1px; left: 100%; width: var(--over, 0%); margin-left: 1px; border-radius: 0 3px 3px 0; background: var(--xv-neg); opacity: .85; }\n.v-executive-view .xv-meter__plan { position: absolute; top: -4px; bottom: -4px; left: var(--plan); width: 1.5px; margin-left: -.75px; background: var(--xv-ink); border-radius: 1px; }\n.v-executive-view .xv-meter__end { position: absolute; top: -4px; bottom: -4px; left: 100%; width: 1px; background: var(--xv-faint); }\n.v-executive-view .xv-meter__legend { display: flex; justify-content: space-between; gap: 8px; margin-top: 8px; font: 400 12px/1.3 var(--sans); color: var(--xv-muted); white-space: nowrap; }\n.v-executive-view .xv-meter__legend i { display: inline-block; width: 8px; height: 8px; border-radius: 2px; vertical-align: -0.5px; margin-right: 5px; background: var(--xv-line); }\n.v-executive-view .xv-meter__legend i.fc { background: repeating-linear-gradient(-45deg, var(--xv-a1) 0 1.2px, transparent 1.2px 3px); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--xv-a1) 50%, transparent); }\n\n/* Team tiles (mini) */\n.v-executive-view .xv-tiles { display: grid; grid-template-columns: repeat(var(--n, 23), minmax(0, 1fr)); gap: 2.5px; margin-top: 16px; max-width: 260px; }\n.v-executive-view .xv-tiles span { aspect-ratio: .62; border-radius: 2px; background: var(--xv-hair-soft); box-shadow: inset 0 0 0 1px var(--xv-hair); transition: background .5s var(--ease), box-shadow .5s var(--ease); }\n.v-executive-view .xv-tiles span.on {\n  background: linear-gradient(180deg, color-mix(in oklab, var(--lavender) calc(100% - var(--t, 0) * 100%), var(--sky)), color-mix(in oklab, var(--sky) calc(100% - var(--t, 0) * 100%), var(--mint)));\n  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--sky-deep) 22%, transparent);\n}\n\n/* Segmented progress (standards adopted) */\n.v-executive-view .xv-segs { display: grid; grid-template-columns: repeat(var(--n, 15), minmax(0, 1fr)); gap: 3px; margin-top: 16px; height: 6px; max-width: 260px; }\n.v-executive-view .xv-segs span { border-radius: 1.5px; background: var(--xv-hair-soft); box-shadow: inset 0 0 0 1px var(--xv-hair); }\n.v-executive-view .xv-segs span.on { background: var(--xv-line); box-shadow: none; }\n\n/* --------------------------------------------------------------------------\n   Main grid (chart + side panel)\n   -------------------------------------------------------------------------- */\n.v-executive-view .xv-main { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }\n.v-executive-view .xv-main > * { min-width: 0; padding: 24px 24px 24px; }\n.v-executive-view .xv-main > * + * { border-left: 1px solid var(--xv-hair); }\n.v-executive-view .xv-pane__head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 16px; }\n.v-executive-view .xv-pane__title { font: 500 14px/1.3 var(--sans); color: var(--xv-ink); }\n.v-executive-view .xv-pane__sub { font: 400 12px/1.3 var(--sans); color: var(--xv-muted); white-space: nowrap; }\n.v-executive-view .xv-pane__note { margin-top: 12px; font: 400 12px/1.4 var(--sans); color: var(--xv-muted); max-width: 46em; }\n\n/* Legend */\n.v-executive-view .xv-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; }\n.v-executive-view .xv-legend li { display: inline-flex; align-items: center; gap: 8px; font: 400 12px/1.3 var(--sans); color: var(--xv-soft); white-space: nowrap; }\n.v-executive-view .xv-legend b { font: 400 10px/1 var(--mono); color: var(--xv-ink); font-variant-numeric: tabular-nums; }\n.v-executive-view .xv-key { display: inline-block; width: 14px; height: 2px; border-radius: 1px; background: var(--k, var(--xv-line)); flex: none; }\n.v-executive-view .xv-key--dash { background: repeating-linear-gradient(90deg, var(--xv-line) 0 4px, transparent 4px 6px); }\n.v-executive-view .xv-key--dot { height: 1.5px; background: repeating-linear-gradient(90deg, var(--xv-muted) 0 1.5px, transparent 1.5px 4px); }\n.v-executive-view .xv-key--a1 { --k: var(--xv-a1); }\n.v-executive-view .xv-key--a2 { --k: var(--xv-a2); }\n\n/* Forecast chart (SVG drawn by JS at real pixel size) */\n.v-executive-view .xv-chart { position: relative; height: var(--xv-chart-h, 232px); }\n.v-executive-view .xv-chart svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }\n.v-executive-view .xv-chart text { font-family: var(--mono); font-size: 10px; fill: var(--xv-muted); letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }\n.v-executive-view .xv-chart text.lbl-strong { fill: var(--xv-ink); }\n.v-executive-view .xv-chart text.lbl-name { font-family: var(--sans); font-size: 12px; font-weight: 500; fill: var(--xv-text); }\n.v-executive-view .xv-chart text.lbl-sans { font-family: var(--mono); font-size: 10px; font-weight: 400; letter-spacing: -0.02em; text-transform: uppercase; }\n.v-executive-view .xv-chart .grid { stroke: var(--xv-hair); stroke-width: 1; shape-rendering: crispEdges; }\n.v-executive-view .xv-chart .grid--base { stroke: var(--xv-hair); }\n.v-executive-view .xv-chart .fc-bg { fill: var(--xv-forecast-bg); }\n.v-executive-view .xv-chart .today { stroke: var(--xv-faint); stroke-width: 1; stroke-dasharray: 2 3; }\n.v-executive-view .xv-chart .budget { fill: none; stroke: var(--xv-muted); stroke-width: 1; stroke-dasharray: 1 3; stroke-linecap: round; }\n.v-executive-view .xv-chart .actual { fill: none; stroke: var(--xv-line); stroke-width: 1.75; stroke-linejoin: round; stroke-linecap: round; }\n.v-executive-view .xv-chart .area { opacity: .9; }\n.v-executive-view .xv-chart .s-base { fill: none; stroke: var(--xv-line); stroke-width: 1.5; stroke-dasharray: 4 3; stroke-linecap: round; }\n.v-executive-view .xv-chart .s-a1 { fill: none; stroke: var(--xv-a1); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }\n.v-executive-view .xv-chart .s-a2 { fill: none; stroke: var(--xv-a2); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }\n.v-executive-view .xv-chart .fan { opacity: .5; }\n.v-executive-view .xv-chart .pt { fill: var(--xv-surface); stroke: var(--xv-line); stroke-width: 1.5; }\n.v-executive-view .xv-chart .pt-end { stroke-width: 1.5; fill: var(--xv-surface); }\n.v-executive-view .xv-chart .halo { fill: var(--xv-line); opacity: .08; }\n\n/* Forecast scenarios strip (full-year totals) */\n.v-executive-view .xv-scen { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 16px; border-top: 1px solid var(--xv-hair); }\n.v-executive-view .xv-scen li { display: grid; gap: 6px; padding: 16px 16px 2px; min-width: 0; }\n.v-executive-view .xv-scen li:first-child { padding-left: 0; }\n.v-executive-view .xv-scen li + li { border-left: 1px solid var(--xv-hair); }\n.v-executive-view .xv-scen__k { display: flex; align-items: center; gap: 8px; font: 500 12px/1.3 var(--sans); color: var(--xv-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-executive-view .xv-scen__v { font: 400 24px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--xv-ink); font-variant-numeric: lining-nums tabular-nums; }\n.v-executive-view .xv-scen__d { font: 400 12px/1.3 var(--sans); color: var(--xv-muted); white-space: nowrap; }\n.v-executive-view .xv-scen__d span { font: 400 10px/1 var(--mono); }\n\n/* Cost per outcome rows */\n.v-executive-view .xv-cpo { display: grid; }\n.v-executive-view .xv-cpo__head, .v-executive-view .xv-cpo__row {\n  display: grid; grid-template-columns: minmax(0, 1fr) auto 64px 52px; align-items: center; column-gap: 16px;\n}\n.v-executive-view .xv-cpo__head { padding-bottom: 8px; border-bottom: 1px solid var(--xv-hair); font: 400 10px/1.3 var(--mono); letter-spacing: -0.02em; text-transform: uppercase; color: var(--xv-muted); }\n.v-executive-view .xv-cpo__head span:nth-child(n+2) { text-align: right; }\n.v-executive-view .xv-cpo__row { padding: 12px 0; border-bottom: 1px solid var(--xv-hair-soft); }\n.v-executive-view .xv-cpo__row:last-child { border-bottom: 0; padding-bottom: 0; }\n.v-executive-view .xv-cpo__name { font: 500 12px/1.3 var(--sans); color: var(--xv-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-executive-view .xv-cpo__unit { display: block; font: 400 12px/1.3 var(--sans); color: var(--xv-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-executive-view .xv-cpo__v { font: 400 22px/1 var(--display, var(--sans)); letter-spacing: -0.04em; color: var(--xv-ink); text-align: right; font-variant-numeric: lining-nums tabular-nums; }\n.v-executive-view .xv-cpo .xv-spark { width: 64px; height: 22px; }\n.v-executive-view .xv-cpo__d { font: 400 10px/1 var(--mono); text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }\n\n/* Dumbbell: before / after by team */\n.v-executive-view .xv-db { display: grid; gap: 0; }\n.v-executive-view .xv-db__axis, .v-executive-view .xv-db__row { display: grid; grid-template-columns: 128px minmax(0, 1fr) 54px; align-items: center; column-gap: 16px; }\n.v-executive-view .xv-db__row { height: 32px; }\n.v-executive-view .xv-db__name { font: 500 12px/1.2 var(--sans); color: var(--xv-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-executive-view .xv-db__track { position: relative; height: 100%; }\n.v-executive-view .xv-db__track::before { content: \"\"; position: absolute; left: 0; right: 0; top: 50%; border-top: 1px solid var(--xv-hair-soft); }\n.v-executive-view .xv-db__track {\n  background:\n    linear-gradient(var(--xv-hair-soft), var(--xv-hair-soft)) 25% 0 / 1px 100% no-repeat,\n    linear-gradient(var(--xv-hair-soft), var(--xv-hair-soft)) 50% 0 / 1px 100% no-repeat,\n    linear-gradient(var(--xv-hair-soft), var(--xv-hair-soft)) 75% 0 / 1px 100% no-repeat;\n}\n.v-executive-view .xv-db__bar {\n  position: absolute; top: 50%; height: 2px; margin-top: -1px; left: var(--b); width: calc(var(--a) - var(--b));\n  background: linear-gradient(90deg, color-mix(in oklab, var(--xv-a2) 25%, transparent), var(--xv-a1));\n  border-radius: 1px; transform-origin: left center;\n}\n.v-executive-view .xv-db__b, .v-executive-view .xv-db__a { position: absolute; top: 50%; width: 9px; height: 9px; margin: -4.5px 0 0 -4.5px; border-radius: 50%; }\n.v-executive-view .xv-db__b { left: var(--b); background: var(--xv-surface); box-shadow: inset 0 0 0 1.5px var(--xv-faint); }\n.v-executive-view .xv-db__a { left: var(--a); background: var(--xv-line); box-shadow: 0 0 0 3px color-mix(in oklab, var(--xv-a1) 22%, transparent); }\n.v-executive-view .xv-db__d { font: 400 10px/1 var(--mono); color: var(--xv-text); text-align: right; font-variant-numeric: tabular-nums; }\n.v-executive-view .xv-db__axis { margin-top: 6px; }\n.v-executive-view .xv-db__ticks { position: relative; height: 14px; font: 400 10px/14px var(--mono); color: var(--xv-muted); }\n.v-executive-view .xv-db__ticks span { position: absolute; top: 0; transform: translateX(-50%); }\n.v-executive-view .xv-db__ticks span:first-child { transform: none; }\n.v-executive-view .xv-db__ticks span:last-child { transform: translateX(-100%); }\n.v-executive-view .xv-db__keys { display: flex; gap: 16px; font: 400 12px/1.3 var(--sans); color: var(--xv-soft); }\n.v-executive-view .xv-db__keys span { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }\n.v-executive-view .xv-db__keys i { width: 8px; height: 8px; border-radius: 50%; }\n.v-executive-view .xv-db__keys i.b { box-shadow: inset 0 0 0 1.5px var(--xv-faint); }\n.v-executive-view .xv-db__keys i.a { background: var(--xv-line); }\n\n/* Practice adoption */\n.v-executive-view .xv-prac { display: grid; }\n.v-executive-view .xv-prac li { padding: 12px 0 12px; border-bottom: 1px solid var(--xv-hair-soft); }\n.v-executive-view .xv-prac li:first-child { padding-top: 2px; }\n.v-executive-view .xv-prac li:last-child { border-bottom: 0; padding-bottom: 0; }\n.v-executive-view .xv-prac__top { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }\n.v-executive-view .xv-prac__name { font: 500 12px/1.3 var(--sans); color: var(--xv-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.v-executive-view .xv-prac__n { font: 400 10px/1 var(--mono); color: var(--xv-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }\n.v-executive-view .xv-prac__n b { font-weight: 500; color: var(--xv-ink); }\n.v-executive-view .xv-prac__bar { position: relative; margin-top: 8px; height: 3px; border-radius: 2px; background: var(--xv-hair-soft); overflow: hidden; }\n.v-executive-view .xv-prac__bar b { position: absolute; left: 0; top: 0; bottom: 0; width: var(--w); border-radius: 2px; background: var(--xv-line); transform-origin: left center; }\n\n/* Footer */\n.v-executive-view .xv-foot {\n  display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap;\n  padding: 12px 24px; border-top: 1px solid var(--xv-hair); background: var(--xv-bar);\n  font: 400 12px/1.3 var(--sans); color: var(--xv-muted);\n}\n.v-executive-view .xv-foot span { display: inline-flex; align-items: center; gap: 8px; }\n.v-executive-view .xv-foot .dot { width: 6px; height: 6px; border-radius: 50%; background: linear-gradient(140deg, var(--mint), var(--sky)); box-shadow: 0 0 0 1px color-mix(in oklab, var(--sky-deep) 35%, transparent); }\n\n.v-executive-view .xv-narrow-only { display: none; }\n\n/* Compact size: KPI strip + main chart only */\n.v-executive-view[data-size=\"compact\"] .xv-side,\n.v-executive-view[data-size=\"compact\"] .xv-foot,\n.v-executive-view[data-size=\"compact\"] .xv-pane__note { display: none; }\n.v-executive-view[data-size=\"compact\"] .xv-main { grid-template-columns: minmax(0, 1fr); }\n.v-executive-view[data-size=\"compact\"] .xv-kpi--opt { display: none; }\n.v-executive-view[data-size=\"compact\"] .xv-kpis:not([data-cols]) { --xv-kpi-cols: 2; }\n\n/* Side panel off (home phone, as home.css @max-width 640px hides .home-hero__fig .xv-side) */\n.v-executive-view[data-side=\"hidden\"] .xv-side { display: none; }\n.v-executive-view[data-side=\"hidden\"] .xv-main { grid-template-columns: minmax(0, 1fr); }\n\n/* --------------------------------------------------------------------------\n   Responsive (container width, not viewport)\n   -------------------------------------------------------------------------- */\n@container xv (max-width: 900px) {\n  .v-executive-view .xv-kpis { --xv-kpi-cols: 2; }\n  .v-executive-view .xv-kpis[data-cols=\"3\"] { --xv-kpi-cols: 3; }\n  .v-executive-view .xv-kpis:not([data-cols=\"3\"]) .xv-kpi:nth-child(3) { border-left: 0; }\n  .v-executive-view .xv-kpis:not([data-cols=\"3\"]) .xv-kpi:nth-child(n+3) { border-top: 1px solid var(--xv-hair); }\n  .v-executive-view .xv-main { grid-template-columns: minmax(0, 1fr); }\n  .v-executive-view .xv-main > * + * { border-left: 0; border-top: 1px solid var(--xv-hair); }\n  .v-executive-view .xv-chip--ghost { display: none; }\n}\n@container xv (max-width: 640px) {\n  .v-executive-view .xv-kpis[data-cols=\"3\"] { --xv-kpi-cols: 2; }\n  .v-executive-view .xv-kpis[data-cols=\"3\"] .xv-kpi:first-child { grid-column: 1 / -1; }\n  .v-executive-view .xv-kpis[data-cols=\"3\"] .xv-kpi:nth-child(2) { border-left: 0; }\n  .v-executive-view .xv-kpis[data-cols=\"3\"] .xv-kpi:nth-child(n+2) { border-top: 1px solid var(--xv-hair); }\n  .v-executive-view .xv-appbar__end .xv-chip { display: none; }\n  .v-executive-view .xv-tabs__end { display: none; }\n  .v-executive-view .xv-db__axis, .v-executive-view .xv-db__row { grid-template-columns: 112px minmax(0, 1fr) 52px; column-gap: 10px; }\n}\n@container xv (max-width: 520px) {\n  .v-executive-view { --xv-chart-h: 196px; }\n  .v-executive-view .xv-appbar { height: 46px; padding: 0 16px; gap: 10px; }\n  .v-executive-view .xv-brand { padding-right: 10px; font-size: 16px; }\n  .v-executive-view .xv-crumb span { display: none; }\n  .v-executive-view .xv-tabs { padding: 0 16px; gap: 16px; }\n  .v-executive-view .xv-kpi { padding: 16px 16px 16px; }\n  .v-executive-view .xv-kpi__v { font-size: 24px; }\n  .v-executive-view .xv-kpi .xv-spark { display: none; }\n  .v-executive-view .xv-main > * { padding: 16px 16px 16px; }\n  .v-executive-view .xv-pane__head { flex-direction: column; gap: 2px; margin-bottom: 12px; }\n  .v-executive-view .xv-legend { gap: 6px 16px; }\n  .v-executive-view .xv-cpo__head, .v-executive-view .xv-cpo__row { grid-template-columns: minmax(0, 1fr) auto 46px; column-gap: 12px; }\n  .v-executive-view .xv-cpo .xv-spark, .v-executive-view .xv-cpo__head span:nth-child(3) { display: none; }\n  .v-executive-view .xv-foot { padding: 10px 16px; }\n  .v-executive-view .xv-foot > span:last-child { display: none; }\n  .v-executive-view .xv-meter__fckey, .v-executive-view .xv-wide-only { display: none; }\n  .v-executive-view .xv-narrow-only { display: inline; }\n  .v-executive-view .xv-db__keys { margin-top: 4px; }\n  /* scenarios become a list */\n  .v-executive-view .xv-scen { grid-template-columns: minmax(0, 1fr); }\n  .v-executive-view .xv-scen li { grid-template-columns: minmax(0, 1fr) auto 92px; align-items: center; gap: 12px; padding: 10px 0; }\n  .v-executive-view .xv-scen li + li { border-left: 0; border-top: 1px solid var(--xv-hair-soft); }\n  .v-executive-view .xv-scen__v { font-size: 20px; text-align: right; }\n  .v-executive-view .xv-scen__d { text-align: right; }\n  /* before/after rows stack: name + change on one line, track below */\n  .v-executive-view .xv-db__row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: \"n d\" \"t t\"; height: auto; padding: 8px 0 2px; row-gap: 2px; }\n  .v-executive-view .xv-db__name { grid-area: n; }\n  .v-executive-view .xv-db__d { grid-area: d; }\n  .v-executive-view .xv-db__track { grid-area: t; height: 18px; }\n  .v-executive-view .xv-db__axis { grid-template-columns: minmax(0, 1fr); }\n  .v-executive-view .xv-db__axis > span:not(.xv-db__ticks) { display: none; }\n}\n@container xv (max-width: 400px) {\n  .v-executive-view .xv-scen li { grid-template-columns: minmax(0, 1fr) auto 84px; }\n  .v-executive-view .xv-kpi__v { font-size: 24px; }\n  .v-executive-view .xv-kpi__k { white-space: normal; }\n}\n\n/* --------------------------------------------------------------------------\n   Motion (JS adds .xv-armed; the active panel gets .is-in when in view).\n   Without JS or under reduced motion everything renders in its final state.\n   -------------------------------------------------------------------------- */\n.v-executive-view.xv-armed .xv-panel { --xv-ease: cubic-bezier(.16, 1, .3, 1); }\n.v-executive-view.xv-armed .xv-panel .clip-a,\n.v-executive-view.xv-armed .xv-panel .clip-f { transform-box: fill-box; transform-origin: left center; transition: transform 1.25s var(--xv-ease); }\n.v-executive-view.xv-armed .xv-panel .clip-f { transition-duration: 1.1s; transition-delay: .95s; }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .clip-a,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .clip-f { transform: scaleX(0); }\n.v-executive-view.xv-armed .xv-panel .xv-chart .fc-label,\n.v-executive-view.xv-armed .xv-panel .xv-chart .end-lbl { transition: opacity .6s var(--ease) 1.7s; }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-chart .fc-label,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-chart .end-lbl { opacity: 0; }\n\n.v-executive-view.xv-armed .xv-panel .xv-meter__act,\n.v-executive-view.xv-armed .xv-panel .xv-meter__fc,\n.v-executive-view.xv-armed .xv-panel .xv-prac__bar b,\n.v-executive-view.xv-armed .xv-panel .xv-db__bar { transform-origin: left center; transition: transform 1.1s var(--xv-ease); transition-delay: var(--dl, .15s); }\n.v-executive-view.xv-armed .xv-panel .xv-meter__fc { transition-delay: .7s; }\n.v-executive-view.xv-armed .xv-panel .xv-meter__over { transition: opacity .5s var(--ease) 1.6s; }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-meter__over { opacity: 0; }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-meter__act,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-meter__fc,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-prac__bar b,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-db__bar { transform: scaleX(0); }\n\n.v-executive-view.xv-armed .xv-panel .xv-db__a { transition: left 1.1s var(--xv-ease), opacity .3s var(--ease); transition-delay: var(--dl, .15s); }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-db__a { left: var(--b); opacity: 0; }\n\n.v-executive-view.xv-armed .xv-panel .xv-spark .l { transition: stroke-dashoffset 1.2s var(--xv-ease) .2s; stroke-dasharray: 1 1; stroke-dashoffset: 0; }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-spark .l { stroke-dashoffset: 1; }\n.v-executive-view.xv-armed .xv-panel .xv-spark circle,\n.v-executive-view.xv-armed .xv-panel .xv-spark .a { transition: opacity .5s var(--ease) 1.1s; }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-spark circle,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-spark .a { opacity: 0; }\n\n.v-executive-view.xv-armed .xv-panel .xv-tiles span,\n.v-executive-view.xv-armed .xv-panel .xv-segs span { transition: background .45s var(--ease), box-shadow .45s var(--ease); transition-delay: var(--dl, 0s); }\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-tiles span.on,\n.v-executive-view.xv-armed .xv-panel:not(.is-in) .xv-segs span.on { background: var(--xv-hair-soft); box-shadow: inset 0 0 0 1px var(--xv-hair); }\n\n/* Tab switch: a short crossfade of the incoming panel */\n.v-executive-view.xv-armed .xv-panel.is-entering { animation: xv-panel-in .42s var(--ease-out) both; }\n@keyframes xv-panel-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }\n\n@media (prefers-reduced-motion: reduce) {\n  .v-executive-view *, .v-executive-view *::before, .v-executive-view *::after { transition: none !important; animation: none !important; }\n}\n\n/* --------------------------------------------------------------------------\n   Critic pass\n   -------------------------------------------------------------------------- */\n/* Tab switch keeps the window height (JS sets min-height on first switch),\n   so content below the mock does not jump. The footer stays pinned to the bottom. */\n.v-executive-view .xv-window.is-locked { display: flex; flex-direction: column; }\n.v-executive-view .xv-window.is-locked > .xv-panel:not([hidden]) { display: flex; flex-direction: column; flex: 1 1 auto; }\n.v-executive-view .xv-window.is-locked .xv-main { flex: 1 1 auto; }\n/* the shorter panel spreads its rows into the spare height instead of leaving a blank strip */\n.v-executive-view .xv-window.is-locked .xv-main > .xv-pane { display: flex; flex-direction: column; }\n.v-executive-view .xv-window.is-locked .xv-db,\n.v-executive-view .xv-window.is-locked .xv-prac { flex: 1 1 auto; }\n.v-executive-view .xv-window.is-locked .xv-db__axis { align-self: start; }\n.v-executive-view .xv-window.is-locked .xv-prac li { display: flex; flex-direction: column; justify-content: center; }\n.v-executive-view .xv-window.is-locked .xv-prac li:first-child { padding-top: 12px; }\n\n/* The recommended wrapper puts an .atmos preset in .figure__stage. The stage is a\n   positioned layer, so its light (inset -30%) painted over the section heading above\n   and the Fig. caption below. Fade the light out at the top and bottom so it bleeds\n   sideways only, and lift the caption above it. */\n.figure__stage:has(> .v-executive-view) > .atmos::before {\n  -webkit-mask: linear-gradient(to bottom, transparent 10%, #000 34%, #000 72%, transparent 94%);\n          mask: linear-gradient(to bottom, transparent 10%, #000 34%, #000 72%, transparent 94%);\n}\n.figure:has(> .figure__stage > .v-executive-view) > .fig-cap { position: relative; z-index: 1; }\n\n/* Narrow cards (phones): drop the product wordmark so the surface name never truncates\n   next to the chips. */\n@container xv (max-width: 380px) {\n  .v-executive-view .xv-brand { display: none; }\n  .v-executive-view .xv-appbar { gap: 8px; }\n}\n`;const PRESETS={\"home-1\":`<div class=\"v-executive-view\" data-variant=\"spend\">\n      <div class=\"xv-window\" role=\"group\" aria-label=\"XTrace spend, ROI and adoption product mock\">\n\n        <div class=\"xv-appbar\">\n          <span class=\"xv-brand\" aria-hidden=\"true\"><span class=\"xt-lockup xt-lockup--ui\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span></span>\n          <span class=\"xv-crumb\">Overview <span>/ Portfolio</span></span>\n          <div class=\"xv-appbar__end\">\n            <span class=\"xv-chip xv-chip--ghost\" aria-hidden=\"true\">All business units <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n            <span class=\"xv-chip\" aria-hidden=\"true\">FY26 to date <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n          </div>\n        </div>\n\n        <div class=\"xv-tabs\" role=\"tablist\" aria-label=\"Spend and adoption\">\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"spend\" aria-selected=\"true\">Spend &amp; ROI</button>\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"adoption\" aria-selected=\"false\" tabindex=\"-1\">Adoption</button>\n          <span class=\"xv-tabs__end\" aria-hidden=\"true\">Through <b>September</b></span>\n        </div>\n\n        <!-- ===================== PANEL: SPEND & ROI ===================== -->\n        <section class=\"xv-panel\" data-panel=\"spend\" role=\"tabpanel\" aria-label=\"Spend and ROI\">\n          <div class=\"xv-kpis\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">AI spend, year to date</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">$1.24M</p>\n                <svg class=\"xv-spark\" data-points=\"96 103 114 124 136 147 161 172 183\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">+27%</span> Q3 vs. Q2</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Budget vs. actual, FY26</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">99%<small>of plan to date</small></p></div>\n              <div class=\"xv-meter\" style=\"--act:68.7%;--plan:69.2%;--fc:100%;--over:2.3%\" role=\"img\" aria-label=\"$1.24 million spent of a $1.80 million budget, 99 percent of plan to date. Base forecast reaches 102 percent of budget.\">\n                <span class=\"xv-meter__track\"></span>\n                <span class=\"xv-meter__fc\"></span>\n                <span class=\"xv-meter__act\"></span>\n                <span class=\"xv-meter__over\"></span>\n                <span class=\"xv-meter__plan\"></span>\n              </div>\n              <p class=\"xv-meter__legend\" aria-hidden=\"true\"><span><i></i>$1.24M<span class=\"xv-wide-only\"> spent</span></span><span class=\"xv-meter__fckey\"><i class=\"fc\"></i>Forecast</span><span><span class=\"xv-narrow-only\">of </span>$1.80M<span class=\"xv-wide-only\"> budget</span></span></p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Full-year forecast</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">$1.84M</p></div>\n              <p class=\"xv-kpi__d\">Base forecast, <span class=\"mono-n xv-bad\">2%</span> over budget</p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Spend tied to KPIs</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">81%</p></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">14</span> workflows mapped</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <p class=\"xv-pane__title\">Monthly spend and forecast</p>\n                <ul class=\"xv-legend\" aria-hidden=\"true\">\n                  <li><span class=\"xv-key\"></span>Actual</li>\n                  <li><span class=\"xv-key xv-key--dot\"></span>Budget</li>\n                </ul>\n              </div>\n              <div class=\"xv-chart\" role=\"img\"\n                   aria-label=\"Line chart of monthly AI spend. Actual spend rises from $96k in January to $183k in September, close to the quarterly budget. Forecast for October to December: the base forecast reaches $209k a month, or $158k with XTrace's suggested optimizations. Full year: base $1.84 million, or $1.73 million with optimizations, against a $1.80 million budget.\"\n                   data-months=\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\"\n                   data-actual=\"96 103 114 124 136 147 161 172 183\"\n                   data-budget=\"110 110 110 135 135 135 170 170 170 185 185 185\"\n                   data-base=\"195 202 209\"\n                   data-opt=\"172 164 158\"\n                   data-unit=\"k\"\n                   data-names=\"Base|With optimizations\"></div>\n              <ul class=\"xv-scen\" aria-label=\"Full-year forecast\">\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--dash\"></i>Base</span><span class=\"xv-scen__v\">$1.84M</span><span class=\"xv-scen__d\"><span class=\"xv-bad\">+2%</span> vs. budget</span></li>\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--a2\"></i>With optimizations</span><span class=\"xv-scen__v\">$1.73M</span><span class=\"xv-scen__d\"><span class=\"xv-dn\">−4%</span> vs. budget</span></li>\n              </ul>\n              <p class=\"xv-pane__note\">With optimizations: spend if XTrace's suggested changes, such as a model or skill change, are applied.</p>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <p class=\"xv-pane__title\">Cost per outcome</p>\n                <span class=\"xv-pane__sub\">Six-month change</span>\n              </div>\n              <div class=\"xv-cpo\" role=\"table\" aria-label=\"Cost per outcome by workflow\">\n                <div class=\"xv-cpo__head\" role=\"row\"><span role=\"columnheader\">Workflow</span><span role=\"columnheader\">Unit cost</span><span role=\"columnheader\">Trend</span><span role=\"columnheader\">Change</span></div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Customer support</span><span class=\"xv-cpo__unit\">per resolved ticket</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.84</span>\n                  <svg class=\"xv-spark\" data-points=\"1.08 1.03 0.97 0.92 0.88 0.84\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−22%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Engineering</span><span class=\"xv-cpo__unit\">per merged pull request</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$2.10</span>\n                  <svg class=\"xv-spark\" data-points=\"2.44 2.38 2.31 2.22 2.15 2.10\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−14%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Claims</span><span class=\"xv-cpo__unit\">per processed claim</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.12</span>\n                  <svg class=\"xv-spark\" data-points=\"1.23 1.21 1.18 1.16 1.13 1.12\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−9%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Finance operations</span><span class=\"xv-cpo__unit\">per reconciled invoice</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.31</span>\n                  <svg class=\"xv-spark\" data-points=\"0.38 0.37 0.35 0.34 0.32 0.31\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−18%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Sales</span><span class=\"xv-cpo__unit\">per account brief</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.40</span>\n                  <svg class=\"xv-spark\" data-points=\"1.32 1.30 1.35 1.37 1.36 1.40\"></svg>\n                  <span class=\"xv-cpo__d xv-bad\" role=\"cell\">+6%</span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 14 workflows \\xb7 team-level data</span>\n            <span>FY26</span>\n          </div>\n        </section>\n\n        <!-- ===================== PANEL: ADOPTION ===================== -->\n        <section class=\"xv-panel\" data-panel=\"adoption\" role=\"tabpanel\" aria-label=\"Adoption\" hidden>\n          <div class=\"xv-kpis\" data-cols=\"3\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Teams with steady AI use</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">17<small>of 23</small></p></div>\n              <div class=\"xv-tiles\" data-count=\"23\" data-on=\"17\" role=\"img\" aria-label=\"17 of 23 teams use AI steadily, up from 8 before rollout.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n xv-up\">+9</span> teams since rollout</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Stalled sessions</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">11%</p>\n                <svg class=\"xv-spark\" data-points=\"24 25 23 24 22 19 17 15 14 12 12 11\" data-marker=\"4\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\">From <span class=\"mono-n\">24%</span> before standards</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Standards adopted</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">12<small>of 15</small></p></div>\n              <div class=\"xv-segs\" data-count=\"15\" data-on=\"12\" role=\"img\" aria-label=\"12 of 15 standards adopted.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">3</span> rolling out</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <p class=\"xv-pane__title\">Work done with AI, before and after</p>\n                <span class=\"xv-db__keys\" aria-hidden=\"true\"><span><i class=\"b\"></i>Q1, before</span><span><i class=\"a\"></i>Q3, after</span></span>\n              </div>\n              <div class=\"xv-db\" role=\"img\" aria-label=\"Share of eligible work done with AI, by team, Q1 before rollout versus Q3 after. Platform 38 to 71 percent. Customer support 41 to 66. Data science 30 to 62. Payments 22 to 58. Mobile 18 to 47. Finance operations 9 to 34. Risk and compliance 12 to 29.\">\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Platform</span><span class=\"xv-db__track\" style=\"--b:38%;--a:71%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+33<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Customer support</span><span class=\"xv-db__track\" style=\"--b:41%;--a:66%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Data science</span><span class=\"xv-db__track\" style=\"--b:30%;--a:62%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+32<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Payments</span><span class=\"xv-db__track\" style=\"--b:22%;--a:58%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+36<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Mobile</span><span class=\"xv-db__track\" style=\"--b:18%;--a:47%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+29<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Finance operations</span><span class=\"xv-db__track\" style=\"--b:9%;--a:34%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Risk &amp; compliance</span><span class=\"xv-db__track\" style=\"--b:12%;--a:29%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+17<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__axis\" aria-hidden=\"true\"><span></span><span class=\"xv-db__ticks\"><span style=\"left:0\">0</span><span style=\"left:25%\">25</span><span style=\"left:50%\">50</span><span style=\"left:75%\">75</span><span style=\"left:100%\">100%</span></span><span></span></div>\n              </div>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <p class=\"xv-pane__title\">Practice adoption</p>\n                <span class=\"xv-pane__sub\">Teams using each standard</span>\n              </div>\n              <ul class=\"xv-prac\">\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Plan before generating code</span><span class=\"xv-prac__n\"><b>21</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:91%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Shared project context</span><span class=\"xv-prac__n\"><b>18</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:78%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Tests on agent output</span><span class=\"xv-prac__n\"><b>15</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:65%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Right-sized model choice</span><span class=\"xv-prac__n\"><b>12</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:52%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Reuse of team knowledge</span><span class=\"xv-prac__n\"><b>10</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:43%\"></b></div></li>\n              </ul>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 team-level data</span>\n            <span>Before: Q1 FY26 \\xb7 After: Q3 FY26</span>\n          </div>\n        </section>\n\n      </div>\n    </div>`,\"home-2\":`<div class=\"v-executive-view\" data-variant=\"adoption\" data-size=\"compact\">\n      <div class=\"xv-window\" role=\"group\" aria-label=\"XTrace spend, ROI and adoption product mock\">\n\n        <div class=\"xv-appbar\">\n          <span class=\"xv-brand\" aria-hidden=\"true\"><span class=\"xt-lockup xt-lockup--ui\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span></span>\n          <span class=\"xv-crumb\">Overview <span>/ Portfolio</span></span>\n          <div class=\"xv-appbar__end\">\n            <span class=\"xv-chip xv-chip--ghost\" aria-hidden=\"true\">All business units <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n            <span class=\"xv-chip\" aria-hidden=\"true\">FY26 to date <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n          </div>\n        </div>\n\n        <div class=\"xv-tabs\" role=\"tablist\" aria-label=\"Spend and adoption\">\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"spend\" aria-selected=\"true\">Spend &amp; ROI</button>\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"adoption\" aria-selected=\"false\" tabindex=\"-1\">Adoption</button>\n          <span class=\"xv-tabs__end\" aria-hidden=\"true\">Through <b>September</b></span>\n        </div>\n\n        <!-- ===================== PANEL: SPEND & ROI ===================== -->\n        <section class=\"xv-panel\" data-panel=\"spend\" role=\"tabpanel\" aria-label=\"Spend and ROI\">\n          <div class=\"xv-kpis\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">AI spend, year to date</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">$1.24M</p>\n                <svg class=\"xv-spark\" data-points=\"96 103 114 124 136 147 161 172 183\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">+27%</span> Q3 vs. Q2</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Budget vs. actual, FY26</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">99%<small>of plan to date</small></p></div>\n              <div class=\"xv-meter\" style=\"--act:68.7%;--plan:69.2%;--fc:100%;--over:2.3%\" role=\"img\" aria-label=\"$1.24 million spent of a $1.80 million budget, 99 percent of plan to date. Base forecast reaches 102 percent of budget.\">\n                <span class=\"xv-meter__track\"></span>\n                <span class=\"xv-meter__fc\"></span>\n                <span class=\"xv-meter__act\"></span>\n                <span class=\"xv-meter__over\"></span>\n                <span class=\"xv-meter__plan\"></span>\n              </div>\n              <p class=\"xv-meter__legend\" aria-hidden=\"true\"><span><i></i>$1.24M<span class=\"xv-wide-only\"> spent</span></span><span class=\"xv-meter__fckey\"><i class=\"fc\"></i>Forecast</span><span><span class=\"xv-narrow-only\">of </span>$1.80M<span class=\"xv-wide-only\"> budget</span></span></p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Full-year forecast</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">$1.84M</p></div>\n              <p class=\"xv-kpi__d\">Base forecast, <span class=\"mono-n xv-bad\">2%</span> over budget</p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Spend tied to KPIs</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">81%</p></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">14</span> workflows mapped</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <h4 class=\"xv-pane__title\">Monthly spend and forecast</h4>\n                <ul class=\"xv-legend\" aria-hidden=\"true\">\n                  <li><span class=\"xv-key\"></span>Actual</li>\n                  <li><span class=\"xv-key xv-key--dot\"></span>Budget</li>\n                </ul>\n              </div>\n              <div class=\"xv-chart\" role=\"img\"\n                   aria-label=\"Line chart of monthly AI spend. Actual spend rises from $96k in January to $183k in September, close to the quarterly budget. Forecast for October to December: the base forecast reaches $209k a month, or $158k with XTrace's suggested optimizations. Full year: base $1.84 million, or $1.73 million with optimizations, against a $1.80 million budget.\"\n                   data-months=\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\"\n                   data-actual=\"96 103 114 124 136 147 161 172 183\"\n                   data-budget=\"110 110 110 135 135 135 170 170 170 185 185 185\"\n                   data-base=\"195 202 209\"\n                   data-opt=\"172 164 158\"\n                   data-unit=\"k\"\n                   data-names=\"Base|With optimizations\"></div>\n              <ul class=\"xv-scen\" aria-label=\"Full-year forecast\">\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--dash\"></i>Base</span><span class=\"xv-scen__v\">$1.84M</span><span class=\"xv-scen__d\"><span class=\"xv-bad\">+2%</span> vs. budget</span></li>\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--a2\"></i>With optimizations</span><span class=\"xv-scen__v\">$1.73M</span><span class=\"xv-scen__d\"><span class=\"xv-dn\">−4%</span> vs. budget</span></li>\n              </ul>\n              <p class=\"xv-pane__note\">With optimizations: spend if XTrace's suggested changes, such as a model or skill change, are applied.</p>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <h4 class=\"xv-pane__title\">Cost per outcome</h4>\n                <span class=\"xv-pane__sub\">Six-month change</span>\n              </div>\n              <div class=\"xv-cpo\" role=\"table\" aria-label=\"Cost per outcome by workflow\">\n                <div class=\"xv-cpo__head\" role=\"row\"><span role=\"columnheader\">Workflow</span><span role=\"columnheader\">Unit cost</span><span role=\"columnheader\">Trend</span><span role=\"columnheader\">Change</span></div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Customer support</span><span class=\"xv-cpo__unit\">per resolved ticket</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.84</span>\n                  <svg class=\"xv-spark\" data-points=\"1.08 1.03 0.97 0.92 0.88 0.84\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−22%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Engineering</span><span class=\"xv-cpo__unit\">per merged pull request</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$2.10</span>\n                  <svg class=\"xv-spark\" data-points=\"2.44 2.38 2.31 2.22 2.15 2.10\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−14%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Claims</span><span class=\"xv-cpo__unit\">per processed claim</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.12</span>\n                  <svg class=\"xv-spark\" data-points=\"1.23 1.21 1.18 1.16 1.13 1.12\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−9%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Finance operations</span><span class=\"xv-cpo__unit\">per reconciled invoice</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.31</span>\n                  <svg class=\"xv-spark\" data-points=\"0.38 0.37 0.35 0.34 0.32 0.31\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−18%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Sales</span><span class=\"xv-cpo__unit\">per account brief</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.40</span>\n                  <svg class=\"xv-spark\" data-points=\"1.32 1.30 1.35 1.37 1.36 1.40\"></svg>\n                  <span class=\"xv-cpo__d xv-bad\" role=\"cell\">+6%</span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 14 workflows \\xb7 team-level data</span>\n            <span>FY26</span>\n          </div>\n        </section>\n\n        <!-- ===================== PANEL: ADOPTION ===================== -->\n        <section class=\"xv-panel\" data-panel=\"adoption\" role=\"tabpanel\" aria-label=\"Adoption\" hidden>\n          <div class=\"xv-kpis\" data-cols=\"3\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Teams with steady AI use</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">17<small>of 23</small></p></div>\n              <div class=\"xv-tiles\" data-count=\"23\" data-on=\"17\" role=\"img\" aria-label=\"17 of 23 teams use AI steadily, up from 8 before rollout.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n xv-up\">+9</span> teams since rollout</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Stalled sessions</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">11%</p>\n                <svg class=\"xv-spark\" data-points=\"24 25 23 24 22 19 17 15 14 12 12 11\" data-marker=\"4\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\">From <span class=\"mono-n\">24%</span> before standards</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Standards adopted</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">12<small>of 15</small></p></div>\n              <div class=\"xv-segs\" data-count=\"15\" data-on=\"12\" role=\"img\" aria-label=\"12 of 15 standards adopted.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">3</span> rolling out</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <h4 class=\"xv-pane__title\">Work done with AI, before and after</h4>\n                <span class=\"xv-db__keys\" aria-hidden=\"true\"><span><i class=\"b\"></i>Q1, before</span><span><i class=\"a\"></i>Q3, after</span></span>\n              </div>\n              <div class=\"xv-db\" role=\"img\" aria-label=\"Share of eligible work done with AI, by team, Q1 before rollout versus Q3 after. Platform 38 to 71 percent. Customer support 41 to 66. Data science 30 to 62. Payments 22 to 58. Mobile 18 to 47. Finance operations 9 to 34. Risk and compliance 12 to 29.\">\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Platform</span><span class=\"xv-db__track\" style=\"--b:38%;--a:71%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+33<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Customer support</span><span class=\"xv-db__track\" style=\"--b:41%;--a:66%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Data science</span><span class=\"xv-db__track\" style=\"--b:30%;--a:62%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+32<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Payments</span><span class=\"xv-db__track\" style=\"--b:22%;--a:58%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+36<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Mobile</span><span class=\"xv-db__track\" style=\"--b:18%;--a:47%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+29<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Finance operations</span><span class=\"xv-db__track\" style=\"--b:9%;--a:34%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Risk &amp; compliance</span><span class=\"xv-db__track\" style=\"--b:12%;--a:29%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+17<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__axis\" aria-hidden=\"true\"><span></span><span class=\"xv-db__ticks\"><span style=\"left:0\">0</span><span style=\"left:25%\">25</span><span style=\"left:50%\">50</span><span style=\"left:75%\">75</span><span style=\"left:100%\">100%</span></span><span></span></div>\n              </div>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <h4 class=\"xv-pane__title\">Practice adoption</h4>\n                <span class=\"xv-pane__sub\">Teams using each standard</span>\n              </div>\n              <ul class=\"xv-prac\">\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Plan before generating code</span><span class=\"xv-prac__n\"><b>21</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:91%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Shared project context</span><span class=\"xv-prac__n\"><b>18</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:78%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Tests on agent output</span><span class=\"xv-prac__n\"><b>15</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:65%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Right-sized model choice</span><span class=\"xv-prac__n\"><b>12</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:52%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Reuse of team knowledge</span><span class=\"xv-prac__n\"><b>10</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:43%\"></b></div></li>\n              </ul>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 team-level data</span>\n            <span>Before: Q1 FY26 \\xb7 After: Q3 FY26</span>\n          </div>\n        </section>\n\n      </div>\n    </div>`,\"governance\":`<div class=\"v-executive-view\" data-variant=\"spend\" data-size=\"compact\">\n      <div class=\"xv-window\" role=\"group\" aria-label=\"XTrace spend, ROI and adoption product mock\">\n\n        <div class=\"xv-appbar\">\n          <span class=\"xv-brand\" aria-hidden=\"true\"><span class=\"xt-lockup xt-lockup--ui\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span></span>\n          <span class=\"xv-crumb\">Overview <span>/ Portfolio</span></span>\n          <div class=\"xv-appbar__end\">\n            <span class=\"xv-chip xv-chip--ghost\" aria-hidden=\"true\">All business units <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n            <span class=\"xv-chip\" aria-hidden=\"true\">FY26 to date <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n          </div>\n        </div>\n\n        <div class=\"xv-tabs\" role=\"tablist\" aria-label=\"Spend and adoption\">\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"spend\" aria-selected=\"true\">Spend &amp; ROI</button>\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"adoption\" aria-selected=\"false\" tabindex=\"-1\">Adoption</button>\n          <span class=\"xv-tabs__end\" aria-hidden=\"true\">Through <b>September</b></span>\n        </div>\n\n        <!-- ===================== PANEL: SPEND & ROI ===================== -->\n        <section class=\"xv-panel\" data-panel=\"spend\" role=\"tabpanel\" aria-label=\"Spend and ROI\">\n          <div class=\"xv-kpis\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">AI spend, year to date</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">$1.24M</p>\n                <svg class=\"xv-spark\" data-points=\"96 103 114 124 136 147 161 172 183\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">+27%</span> Q3 vs. Q2</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Budget vs. actual, FY26</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">99%<small>of plan to date</small></p></div>\n              <div class=\"xv-meter\" style=\"--act:68.7%;--plan:69.2%;--fc:100%;--over:2.3%\" role=\"img\" aria-label=\"$1.24 million spent of a $1.80 million budget, 99 percent of plan to date. Base forecast reaches 102 percent of budget.\">\n                <span class=\"xv-meter__track\"></span>\n                <span class=\"xv-meter__fc\"></span>\n                <span class=\"xv-meter__act\"></span>\n                <span class=\"xv-meter__over\"></span>\n                <span class=\"xv-meter__plan\"></span>\n              </div>\n              <p class=\"xv-meter__legend\" aria-hidden=\"true\"><span><i></i>$1.24M<span class=\"xv-wide-only\"> spent</span></span><span class=\"xv-meter__fckey\"><i class=\"fc\"></i>Forecast</span><span><span class=\"xv-narrow-only\">of </span>$1.80M<span class=\"xv-wide-only\"> budget</span></span></p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Full-year forecast</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">$1.84M</p></div>\n              <p class=\"xv-kpi__d\">Base forecast, <span class=\"mono-n xv-bad\">2%</span> over budget</p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Spend tied to KPIs</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">81%</p></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">14</span> workflows mapped</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Monthly spend and forecast</h3>\n                <ul class=\"xv-legend\" aria-hidden=\"true\">\n                  <li><span class=\"xv-key\"></span>Actual</li>\n                  <li><span class=\"xv-key xv-key--dot\"></span>Budget</li>\n                </ul>\n              </div>\n              <div class=\"xv-chart\" role=\"img\"\n                   aria-label=\"Line chart of monthly AI spend. Actual spend rises from $96k in January to $183k in September, close to the quarterly budget. Forecast for October to December: the base forecast reaches $209k a month, or $158k with XTrace's suggested optimizations. Full year: base $1.84 million, or $1.73 million with optimizations, against a $1.80 million budget.\"\n                   data-months=\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\"\n                   data-actual=\"96 103 114 124 136 147 161 172 183\"\n                   data-budget=\"110 110 110 135 135 135 170 170 170 185 185 185\"\n                   data-base=\"195 202 209\"\n                   data-opt=\"172 164 158\"\n                   data-unit=\"k\"\n                   data-names=\"Base|With optimizations\"></div>\n              <ul class=\"xv-scen\" aria-label=\"Full-year forecast\">\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--dash\"></i>Base</span><span class=\"xv-scen__v\">$1.84M</span><span class=\"xv-scen__d\"><span class=\"xv-bad\">+2%</span> vs. budget</span></li>\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--a2\"></i>With optimizations</span><span class=\"xv-scen__v\">$1.73M</span><span class=\"xv-scen__d\"><span class=\"xv-dn\">−4%</span> vs. budget</span></li>\n              </ul>\n              <p class=\"xv-pane__note\">With optimizations: spend if XTrace's suggested changes, such as a model or skill change, are applied.</p>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Cost per outcome</h3>\n                <span class=\"xv-pane__sub\">Six-month change</span>\n              </div>\n              <div class=\"xv-cpo\" role=\"table\" aria-label=\"Cost per outcome by workflow\">\n                <div class=\"xv-cpo__head\" role=\"row\"><span role=\"columnheader\">Workflow</span><span role=\"columnheader\">Unit cost</span><span role=\"columnheader\">Trend</span><span role=\"columnheader\">Change</span></div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Customer support</span><span class=\"xv-cpo__unit\">per resolved ticket</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.84</span>\n                  <svg class=\"xv-spark\" data-points=\"1.08 1.03 0.97 0.92 0.88 0.84\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−22%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Engineering</span><span class=\"xv-cpo__unit\">per merged pull request</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$2.10</span>\n                  <svg class=\"xv-spark\" data-points=\"2.44 2.38 2.31 2.22 2.15 2.10\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−14%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Claims</span><span class=\"xv-cpo__unit\">per processed claim</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.12</span>\n                  <svg class=\"xv-spark\" data-points=\"1.23 1.21 1.18 1.16 1.13 1.12\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−9%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Finance operations</span><span class=\"xv-cpo__unit\">per reconciled invoice</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.31</span>\n                  <svg class=\"xv-spark\" data-points=\"0.38 0.37 0.35 0.34 0.32 0.31\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−18%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Sales</span><span class=\"xv-cpo__unit\">per account brief</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.40</span>\n                  <svg class=\"xv-spark\" data-points=\"1.32 1.30 1.35 1.37 1.36 1.40\"></svg>\n                  <span class=\"xv-cpo__d xv-bad\" role=\"cell\">+6%</span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 14 workflows \\xb7 team-level data</span>\n            <span>FY26</span>\n          </div>\n        </section>\n\n        <!-- ===================== PANEL: ADOPTION ===================== -->\n        <section class=\"xv-panel\" data-panel=\"adoption\" role=\"tabpanel\" aria-label=\"Adoption\" hidden>\n          <div class=\"xv-kpis\" data-cols=\"3\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Teams with steady AI use</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">17<small>of 23</small></p></div>\n              <div class=\"xv-tiles\" data-count=\"23\" data-on=\"17\" role=\"img\" aria-label=\"17 of 23 teams use AI steadily, up from 8 before rollout.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n xv-up\">+9</span> teams since rollout</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Stalled sessions</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">11%</p>\n                <svg class=\"xv-spark\" data-points=\"24 25 23 24 22 19 17 15 14 12 12 11\" data-marker=\"4\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\">From <span class=\"mono-n\">24%</span> before standards</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Standards adopted</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">12<small>of 15</small></p></div>\n              <div class=\"xv-segs\" data-count=\"15\" data-on=\"12\" role=\"img\" aria-label=\"12 of 15 standards adopted.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">3</span> rolling out</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Work done with AI, before and after</h3>\n                <span class=\"xv-db__keys\" aria-hidden=\"true\"><span><i class=\"b\"></i>Q1, before</span><span><i class=\"a\"></i>Q3, after</span></span>\n              </div>\n              <div class=\"xv-db\" role=\"img\" aria-label=\"Share of eligible work done with AI, by team, Q1 before rollout versus Q3 after. Platform 38 to 71 percent. Customer support 41 to 66. Data science 30 to 62. Payments 22 to 58. Mobile 18 to 47. Finance operations 9 to 34. Risk and compliance 12 to 29.\">\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Platform</span><span class=\"xv-db__track\" style=\"--b:38%;--a:71%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+33<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Customer support</span><span class=\"xv-db__track\" style=\"--b:41%;--a:66%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Data science</span><span class=\"xv-db__track\" style=\"--b:30%;--a:62%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+32<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Payments</span><span class=\"xv-db__track\" style=\"--b:22%;--a:58%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+36<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Mobile</span><span class=\"xv-db__track\" style=\"--b:18%;--a:47%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+29<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Finance operations</span><span class=\"xv-db__track\" style=\"--b:9%;--a:34%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Risk &amp; compliance</span><span class=\"xv-db__track\" style=\"--b:12%;--a:29%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+17<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__axis\" aria-hidden=\"true\"><span></span><span class=\"xv-db__ticks\"><span style=\"left:0\">0</span><span style=\"left:25%\">25</span><span style=\"left:50%\">50</span><span style=\"left:75%\">75</span><span style=\"left:100%\">100%</span></span><span></span></div>\n              </div>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Practice adoption</h3>\n                <span class=\"xv-pane__sub\">Teams using each standard</span>\n              </div>\n              <ul class=\"xv-prac\">\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Plan before generating code</span><span class=\"xv-prac__n\"><b>21</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:91%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Shared project context</span><span class=\"xv-prac__n\"><b>18</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:78%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Tests on agent output</span><span class=\"xv-prac__n\"><b>15</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:65%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Right-sized model choice</span><span class=\"xv-prac__n\"><b>12</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:52%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Reuse of team knowledge</span><span class=\"xv-prac__n\"><b>10</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:43%\"></b></div></li>\n              </ul>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 team-level data</span>\n            <span>Before: Q1 FY26 \\xb7 After: Q3 FY26</span>\n          </div>\n        </section>\n\n      </div>\n    </div>`,\"enablement\":`<div class=\"v-executive-view\" data-variant=\"adoption\">\n      <div class=\"xv-window\" role=\"group\" aria-label=\"XTrace spend, ROI and adoption product mock\">\n\n        <div class=\"xv-appbar\">\n          <span class=\"xv-brand\" aria-hidden=\"true\"><span class=\"xt-lockup xt-lockup--ui\"><span class=\"xt-lockup__mark\" aria-hidden=\"true\"></span><span class=\"xt-lockup__word\" aria-hidden=\"true\">XTrace</span></span></span>\n          <span class=\"xv-crumb\">Overview <span>/ Portfolio</span></span>\n          <div class=\"xv-appbar__end\">\n            <span class=\"xv-chip xv-chip--ghost\" aria-hidden=\"true\">All business units <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n            <span class=\"xv-chip\" aria-hidden=\"true\">FY26 to date <svg viewBox=\"0 0 10 10\"><path d=\"M2 3.5l3 3 3-3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg></span>\n          </div>\n        </div>\n\n        <div class=\"xv-tabs\" role=\"tablist\" aria-label=\"Spend and adoption\">\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"spend\" aria-selected=\"false\" tabindex=\"-1\">Spend &amp; ROI</button>\n          <button class=\"xv-tab\" type=\"button\" role=\"tab\" data-tab=\"adoption\" aria-selected=\"true\">Adoption</button>\n          <span class=\"xv-tabs__end\" aria-hidden=\"true\">Through <b>September</b></span>\n        </div>\n\n        <!-- ===================== PANEL: SPEND & ROI ===================== -->\n        <section class=\"xv-panel\" data-panel=\"spend\" role=\"tabpanel\" aria-label=\"Spend and ROI\" hidden>\n          <div class=\"xv-kpis\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">AI spend, year to date</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">$1.24M</p>\n                <svg class=\"xv-spark\" data-points=\"96 103 114 124 136 147 161 172 183\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">+27%</span> Q3 vs. Q2</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Budget vs. actual, FY26</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">99%<small>of plan to date</small></p></div>\n              <div class=\"xv-meter\" style=\"--act:68.7%;--plan:69.2%;--fc:100%;--over:2.3%\" role=\"img\" aria-label=\"$1.24 million spent of a $1.80 million budget, 99 percent of plan to date. Base forecast reaches 102 percent of budget.\">\n                <span class=\"xv-meter__track\"></span>\n                <span class=\"xv-meter__fc\"></span>\n                <span class=\"xv-meter__act\"></span>\n                <span class=\"xv-meter__over\"></span>\n                <span class=\"xv-meter__plan\"></span>\n              </div>\n              <p class=\"xv-meter__legend\" aria-hidden=\"true\"><span><i></i>$1.24M<span class=\"xv-wide-only\"> spent</span></span><span class=\"xv-meter__fckey\"><i class=\"fc\"></i>Forecast</span><span><span class=\"xv-narrow-only\">of </span>$1.80M<span class=\"xv-wide-only\"> budget</span></span></p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Full-year forecast</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">$1.84M</p></div>\n              <p class=\"xv-kpi__d\">Base forecast, <span class=\"mono-n xv-bad\">2%</span> over budget</p>\n            </div>\n            <div class=\"xv-kpi xv-kpi--opt\">\n              <p class=\"xv-kpi__k\">Spend tied to KPIs</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">81%</p></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">14</span> workflows mapped</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Monthly spend and forecast</h3>\n                <ul class=\"xv-legend\" aria-hidden=\"true\">\n                  <li><span class=\"xv-key\"></span>Actual</li>\n                  <li><span class=\"xv-key xv-key--dot\"></span>Budget</li>\n                </ul>\n              </div>\n              <div class=\"xv-chart\" role=\"img\"\n                   aria-label=\"Line chart of monthly AI spend. Actual spend rises from $96k in January to $183k in September, close to the quarterly budget. Forecast for October to December: the base forecast reaches $209k a month, or $158k with XTrace's suggested optimizations. Full year: base $1.84 million, or $1.73 million with optimizations, against a $1.80 million budget.\"\n                   data-months=\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\"\n                   data-actual=\"96 103 114 124 136 147 161 172 183\"\n                   data-budget=\"110 110 110 135 135 135 170 170 170 185 185 185\"\n                   data-base=\"195 202 209\"\n                   data-opt=\"172 164 158\"\n                   data-unit=\"k\"\n                   data-names=\"Base|With optimizations\"></div>\n              <ul class=\"xv-scen\" aria-label=\"Full-year forecast\">\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--dash\"></i>Base</span><span class=\"xv-scen__v\">$1.84M</span><span class=\"xv-scen__d\"><span class=\"xv-bad\">+2%</span> vs. budget</span></li>\n                <li><span class=\"xv-scen__k\"><i class=\"xv-key xv-key--a2\"></i>With optimizations</span><span class=\"xv-scen__v\">$1.73M</span><span class=\"xv-scen__d\"><span class=\"xv-dn\">−4%</span> vs. budget</span></li>\n              </ul>\n              <p class=\"xv-pane__note\">With optimizations: spend if XTrace's suggested changes, such as a model or skill change, are applied.</p>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Cost per outcome</h3>\n                <span class=\"xv-pane__sub\">Six-month change</span>\n              </div>\n              <div class=\"xv-cpo\" role=\"table\" aria-label=\"Cost per outcome by workflow\">\n                <div class=\"xv-cpo__head\" role=\"row\"><span role=\"columnheader\">Workflow</span><span role=\"columnheader\">Unit cost</span><span role=\"columnheader\">Trend</span><span role=\"columnheader\">Change</span></div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Customer support</span><span class=\"xv-cpo__unit\">per resolved ticket</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.84</span>\n                  <svg class=\"xv-spark\" data-points=\"1.08 1.03 0.97 0.92 0.88 0.84\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−22%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Engineering</span><span class=\"xv-cpo__unit\">per merged pull request</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$2.10</span>\n                  <svg class=\"xv-spark\" data-points=\"2.44 2.38 2.31 2.22 2.15 2.10\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−14%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Claims</span><span class=\"xv-cpo__unit\">per processed claim</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.12</span>\n                  <svg class=\"xv-spark\" data-points=\"1.23 1.21 1.18 1.16 1.13 1.12\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−9%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Finance operations</span><span class=\"xv-cpo__unit\">per reconciled invoice</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$0.31</span>\n                  <svg class=\"xv-spark\" data-points=\"0.38 0.37 0.35 0.34 0.32 0.31\"></svg>\n                  <span class=\"xv-cpo__d xv-dn\" role=\"cell\">−18%</span>\n                </div>\n                <div class=\"xv-cpo__row\" role=\"row\">\n                  <span role=\"cell\"><span class=\"xv-cpo__name\">Sales</span><span class=\"xv-cpo__unit\">per account brief</span></span>\n                  <span class=\"xv-cpo__v\" role=\"cell\">$1.40</span>\n                  <svg class=\"xv-spark\" data-points=\"1.32 1.30 1.35 1.37 1.36 1.40\"></svg>\n                  <span class=\"xv-cpo__d xv-bad\" role=\"cell\">+6%</span>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 14 workflows \\xb7 team-level data</span>\n            <span>FY26</span>\n          </div>\n        </section>\n\n        <!-- ===================== PANEL: ADOPTION ===================== -->\n        <section class=\"xv-panel\" data-panel=\"adoption\" role=\"tabpanel\" aria-label=\"Adoption\">\n          <div class=\"xv-kpis\" data-cols=\"3\">\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Teams with steady AI use</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">17<small>of 23</small></p></div>\n              <div class=\"xv-tiles\" data-count=\"23\" data-on=\"17\" role=\"img\" aria-label=\"17 of 23 teams use AI steadily, up from 8 before rollout.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n xv-up\">+9</span> teams since rollout</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Stalled sessions</p>\n              <div class=\"xv-kpi__row\">\n                <p class=\"xv-kpi__v\">11%</p>\n                <svg class=\"xv-spark\" data-points=\"24 25 23 24 22 19 17 15 14 12 12 11\" data-marker=\"4\"></svg>\n              </div>\n              <p class=\"xv-kpi__d\">From <span class=\"mono-n\">24%</span> before standards</p>\n            </div>\n            <div class=\"xv-kpi\">\n              <p class=\"xv-kpi__k\">Standards adopted</p>\n              <div class=\"xv-kpi__row\"><p class=\"xv-kpi__v\">12<small>of 15</small></p></div>\n              <div class=\"xv-segs\" data-count=\"15\" data-on=\"12\" role=\"img\" aria-label=\"12 of 15 standards adopted.\"></div>\n              <p class=\"xv-kpi__d\"><span class=\"mono-n\">3</span> rolling out</p>\n            </div>\n          </div>\n\n          <div class=\"xv-main\">\n            <div class=\"xv-pane\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Work done with AI, before and after</h3>\n                <span class=\"xv-db__keys\" aria-hidden=\"true\"><span><i class=\"b\"></i>Q1, before</span><span><i class=\"a\"></i>Q3, after</span></span>\n              </div>\n              <div class=\"xv-db\" role=\"img\" aria-label=\"Share of eligible work done with AI, by team, Q1 before rollout versus Q3 after. Platform 38 to 71 percent. Customer support 41 to 66. Data science 30 to 62. Payments 22 to 58. Mobile 18 to 47. Finance operations 9 to 34. Risk and compliance 12 to 29.\">\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Platform</span><span class=\"xv-db__track\" style=\"--b:38%;--a:71%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+33<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Customer support</span><span class=\"xv-db__track\" style=\"--b:41%;--a:66%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Data science</span><span class=\"xv-db__track\" style=\"--b:30%;--a:62%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+32<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Payments</span><span class=\"xv-db__track\" style=\"--b:22%;--a:58%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+36<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Mobile</span><span class=\"xv-db__track\" style=\"--b:18%;--a:47%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+29<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Finance operations</span><span class=\"xv-db__track\" style=\"--b:9%;--a:34%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+25<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__row\"><span class=\"xv-db__name\">Risk &amp; compliance</span><span class=\"xv-db__track\" style=\"--b:12%;--a:29%\"><i class=\"xv-db__bar\"></i><i class=\"xv-db__b\"></i><i class=\"xv-db__a\"></i></span><span class=\"xv-db__d\">+17<span class=\"xv-db__u\"> pts</span></span></div>\n                <div class=\"xv-db__axis\" aria-hidden=\"true\"><span></span><span class=\"xv-db__ticks\"><span style=\"left:0\">0</span><span style=\"left:25%\">25</span><span style=\"left:50%\">50</span><span style=\"left:75%\">75</span><span style=\"left:100%\">100%</span></span><span></span></div>\n              </div>\n            </div>\n\n            <div class=\"xv-pane xv-side\">\n              <div class=\"xv-pane__head\">\n                <h3 class=\"xv-pane__title\">Practice adoption</h3>\n                <span class=\"xv-pane__sub\">Teams using each standard</span>\n              </div>\n              <ul class=\"xv-prac\">\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Plan before generating code</span><span class=\"xv-prac__n\"><b>21</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:91%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Shared project context</span><span class=\"xv-prac__n\"><b>18</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:78%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Tests on agent output</span><span class=\"xv-prac__n\"><b>15</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:65%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Right-sized model choice</span><span class=\"xv-prac__n\"><b>12</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:52%\"></b></div></li>\n                <li><div class=\"xv-prac__top\"><span class=\"xv-prac__name\">Reuse of team knowledge</span><span class=\"xv-prac__n\"><b>10</b> / 23</span></div><div class=\"xv-prac__bar\"><b style=\"--w:43%\"></b></div></li>\n              </ul>\n            </div>\n          </div>\n\n          <div class=\"xv-foot\">\n            <span><i class=\"dot\" aria-hidden=\"true\"></i>23 teams \\xb7 team-level data</span>\n            <span>Before: Q1 FY26 \\xb7 After: Q3 FY26</span>\n          </div>\n        </section>\n\n      </div>\n    </div>`};function install(){/* Visual · Spend &amp; ROI dashboard · executive-view.js\n   Self-initializes every .v-executive-view on the page (also ones added later:\n   call window.XTExecutiveView.init(el)).\n   - Draws the forecast chart and sparklines at real pixel size (crisp 11px labels at any width)\n     from data-* attributes in the markup, and redraws on resize.\n   - Builds team tiles / segment meters from data-count + data-on.\n   - Tabs (Spend & ROI / Adoption) switch data-variant, with arrow-key support.\n   - Animations start when the mock scrolls into view (IntersectionObserver).\n     Under prefers-reduced-motion, or without IntersectionObserver, it renders the final state.\n*/(function(){\"use strict\";var NS=\"http://www.w3.org/2000/svg\";var reduce=window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;var uid=0;function nums(s){return(s||\"\").trim().split(/[\\s,]+/).filter(Boolean).map(Number);}function words(s){return(s||\"\").trim().split(/\\s+/).filter(Boolean);}function el(tag,attrs,parent){var n=document.createElementNS(NS,tag);for(var k in attrs)if(attrs[k]!=null)n.setAttribute(k,attrs[k]);if(parent)parent.appendChild(n);return n;}function pathOf(pts){return pts.map(function(p,i){return(i?\"L\":\"M\")+p[0].toFixed(1)+\" \"+p[1].toFixed(1);}).join(\"\");}/* gentle monotone smoothing so lines read as trends, not jagged steps */function smooth(pts){if(pts.length<3)return pathOf(pts);var d=\"M\"+pts[0][0].toFixed(1)+\" \"+pts[0][1].toFixed(1);for(var i=0;i<pts.length-1;i++){var p0=pts[i-1]||pts[i],p1=pts[i],p2=pts[i+1],p3=pts[i+2]||p2;var t=.16;var c1x=p1[0]+(p2[0]-p0[0])*t,c1y=p1[1]+(p2[1]-p0[1])*t;var c2x=p2[0]-(p3[0]-p1[0])*t,c2y=p2[1]-(p3[1]-p1[1])*t;// clamp control points vertically between p1 and p2 to avoid overshoot\nvar lo=Math.min(p1[1],p2[1]),hi=Math.max(p1[1],p2[1]);c1y=Math.max(lo,Math.min(hi,c1y));c2y=Math.max(lo,Math.min(hi,c2y));d+=\"C\"+c1x.toFixed(1)+\" \"+c1y.toFixed(1)+\" \"+c2x.toFixed(1)+\" \"+c2y.toFixed(1)+\" \"+p2[0].toFixed(1)+\" \"+p2[1].toFixed(1);}return d;}function money(v,unit){return\"$\"+Math.round(v)+(unit||\"k\");}/* ---------------- Forecast chart ---------------- */function drawForecast(box){var W=box.clientWidth,H=box.clientHeight;if(!W||!H)return;var months=words(box.getAttribute(\"data-months\"));var actual=nums(box.getAttribute(\"data-actual\"));var budget=nums(box.getAttribute(\"data-budget\"));// data-wide is optional: without it the chart draws two series (base and\n// \"with optimizations\"), and the fan shades the gap between them.\nvar series=[{key:\"a1\",cls:\"s-a1\",v:nums(box.getAttribute(\"data-wide\"))},{key:\"base\",cls:\"s-base\",v:nums(box.getAttribute(\"data-base\"))},{key:\"a2\",cls:\"s-a2\",v:nums(box.getAttribute(\"data-opt\"))}].filter(function(s){return s.v.length>0;});var unit=box.getAttribute(\"data-unit\")||\"k\";var n=months.length,last=actual.length-1;var narrow=W<460;var names=(box.getAttribute(\"data-names\")||\"\").split(\"|\");var pad={l:44,r:narrow?8:92,t:26,b:26};var pw=W-pad.l-pad.r,ph=H-pad.t-pad.b;var all=actual.concat(budget);series.forEach(function(s){all=all.concat(s.v);});var max=Math.max.apply(null,all)*1.06;var step=max>400?200:100;var X=function(i){return pad.l+pw*i/(n-1);};var Y=function(v){return pad.t+ph-ph*v/max;};var id=box._xvId||(box._xvId=\"xvc\"+ ++uid);var svg=el(\"svg\",{viewBox:\"0 0 \"+W+\" \"+H,width:W,height:H,\"aria-hidden\":\"true\",focusable:\"false\"});var defs=el(\"defs\",{},svg);var ga=el(\"linearGradient\",{id:id+\"-area\",x1:0,y1:0,x2:0,y2:1},defs);el(\"stop\",{offset:\"0\",style:\"stop-color:var(--xv-area);stop-opacity:.10\"},ga);el(\"stop\",{offset:\"1\",style:\"stop-color:var(--xv-area);stop-opacity:0\"},ga);var gf=el(\"linearGradient\",{id:id+\"-fan\",x1:0,y1:0,x2:0,y2:1},defs);el(\"stop\",{offset:\"0\",style:\"stop-color:var(--xv-fan-1);stop-opacity:.55\"},gf);el(\"stop\",{offset:\"1\",style:\"stop-color:var(--xv-fan-2);stop-opacity:.55\"},gf);var xT=X(last);var ca=el(\"clipPath\",{id:id+\"-ca\"},defs);el(\"rect\",{\"class\":\"clip-a\",x:0,y:0,width:xT+6,height:H},ca);var cf=el(\"clipPath\",{id:id+\"-cf\"},defs);el(\"rect\",{\"class\":\"clip-f\",x:xT-1,y:0,width:W-xT+1,height:H},cf);// forecast region\nel(\"rect\",{\"class\":\"fc-bg\",x:xT,y:pad.t-10,width:pad.l+pw-xT+(narrow?pad.r:10),height:ph+10,rx:4},svg);// grid + y labels\nfor(var v=0;v<=max;v+=step){var y=Math.round(Y(v))+.5;el(\"line\",{\"class\":v===0?\"grid grid--base\":\"grid\",x1:pad.l,x2:pad.l+pw+(narrow?0:10),y1:y,y2:y},svg);var t=el(\"text\",{x:pad.l-10,y:y+3.5,\"text-anchor\":\"end\"},svg);t.textContent=v===0?\"$0\":money(v,unit);}// x labels\nmonths.forEach(function(m,i){if(narrow&&i%2===1&&i!==n-1)return;if(narrow&&i===n-2)return;var t=el(\"text\",{x:X(i),y:H-6,\"text-anchor\":i===n-1?\"end\":\"middle\",\"class\":i===last?\"lbl-strong\":null},svg);t.textContent=m;if(i===n-1)t.setAttribute(\"x\",X(i)+6);});// labels for regions\nvar fl=el(\"text\",{\"class\":\"lbl-sans fc-label\",x:xT+10,y:pad.t-14},svg);fl.textContent=\"Forecast\";// budget (stepped by quarter)\nif(budget.length){var bp=[],half=pw/(n-1)/2;budget.forEach(function(b,i){var x0=i===0?pad.l:X(i)-half,x1=i===n-1?pad.l+pw:X(i)+half;bp.push([x0,Y(b)],[x1,Y(b)]);});el(\"path\",{\"class\":\"budget\",d:pathOf(bp)},svg);var bl=el(\"text\",{x:pad.l+6,y:Y(budget[0])-7},svg);bl.textContent=\"Budget\";}// actual\nvar apts=actual.map(function(a,i){return[X(i),Y(a)];});var gA=el(\"g\",{\"clip-path\":\"url(#\"+id+\"-ca)\"},svg);var dA=smooth(apts);el(\"path\",{\"class\":\"area\",d:dA+\"L\"+xT.toFixed(1)+\" \"+Y(0).toFixed(1)+\"L\"+pad.l+\" \"+Y(0).toFixed(1)+\"Z\",fill:\"url(#\"+id+\"-area)\"},gA);el(\"path\",{\"class\":\"actual\",d:dA},gA);// scenarios\nvar gF=el(\"g\",{\"clip-path\":\"url(#\"+id+\"-cf)\"},svg);var start=[xT,Y(actual[last])];var spts=series.map(function(s){return[start].concat(s.v.map(function(val,k){return[X(last+1+k),Y(val)];}));});var fan=spts[0].concat(spts[spts.length-1].slice().reverse());el(\"path\",{\"class\":\"fan\",d:pathOf(fan)+\"Z\",fill:\"url(#\"+id+\"-fan)\"},gF);series.forEach(function(s,k){el(\"path\",{\"class\":s.cls,d:smooth(spts[k])},gF);});series.forEach(function(s,k){var e=spts[k][spts[k].length-1];el(\"circle\",{\"class\":\"pt-end\",cx:e[0],cy:e[1],r:3,style:\"stroke:\"+(s.key===\"base\"?\"var(--xv-line)\":\"var(--xv-\"+s.key+\")\")},gF);if(!narrow){var lt=el(\"text\",{\"class\":\"end-lbl lbl-name\",x:e[0]+10,y:e[1]+3.5},svg);lt.textContent=names[k]||money(s.v[s.v.length-1],unit);}});// today marker + last actual point (drawn above everything)\nel(\"line\",{\"class\":\"today\",x1:xT,x2:xT,y1:pad.t-10,y2:Y(0)},svg);el(\"circle\",{\"class\":\"halo\",cx:xT,cy:Y(actual[last]),r:8},gA);el(\"circle\",{\"class\":\"pt\",cx:xT,cy:Y(actual[last]),r:3.5},gA);box.replaceChildren(svg);}/* ---------------- Sparkline ---------------- */function drawSpark(svg){var v=nums(svg.getAttribute(\"data-points\"));if(v.length<2)return;var W=svg.clientWidth||76,H=svg.clientHeight||28;var mk=svg.getAttribute(\"data-marker\");var min=Math.min.apply(null,v),max=Math.max.apply(null,v),rng=max-min||1;var p=3;var pts=v.map(function(x,i){return[p+(W-2*p)*i/(v.length-1),p+(H-2*p)*(1-(x-min)/rng)];});svg.setAttribute(\"viewBox\",\"0 0 \"+W+\" \"+H);svg.setAttribute(\"aria-hidden\",\"true\");svg.setAttribute(\"focusable\",\"false\");while(svg.firstChild)svg.removeChild(svg.firstChild);if(mk!=null&&mk!==\"\"){var mx=pts[+mk][0];el(\"line\",{\"class\":\"m\",x1:mx,x2:mx,y1:0,y2:H},svg);}if(mk!=null&&mk!==\"\"&&+mk>0&&+mk<pts.length-1){// before the marker: quiet; after: ink\nel(\"path\",{\"class\":\"l pre\",d:smooth(pts.slice(0,+mk+1)),pathLength:1},svg);el(\"path\",{\"class\":\"l\",d:smooth(pts.slice(+mk)),pathLength:1},svg);}else{el(\"path\",{\"class\":\"l\",d:smooth(pts),pathLength:1},svg);}var e=pts[pts.length-1];el(\"circle\",{cx:e[0],cy:e[1],r:2.25},svg);}/* ---------------- Tiles / segments ---------------- */function build(wrap,base,gap){if(wrap.children.length)return;var n=+wrap.getAttribute(\"data-count\")||0,on=+(wrap.getAttribute(\"data-on\")||0);wrap.style.setProperty(\"--n\",n);for(var i=0;i<n;i++){var s=document.createElement(\"span\");s.style.setProperty(\"--t\",(n>1?i/(n-1):0).toFixed(3));if(i<on){s.className=\"on\";s.style.setProperty(\"--dl\",(base+gap*i).toFixed(2)+\"s\");}wrap.appendChild(s);}}/* ---------------- Init ---------------- */function init(root){if(root._xvInit)return;root._xvInit=true;if(!root.getAttribute(\"data-variant\"))root.setAttribute(\"data-variant\",\"spend\");var panels=Array.prototype.slice.call(root.querySelectorAll(\".xv-panel\"));var tabs=Array.prototype.slice.call(root.querySelectorAll(\".xv-tab\"));var charts=Array.prototype.slice.call(root.querySelectorAll(\".xv-chart[data-actual]\"));var sparks=Array.prototype.slice.call(root.querySelectorAll(\"svg.xv-spark[data-points]\"));root.querySelectorAll(\".xv-tiles[data-count]\").forEach(function(w){build(w,.35,.045);});root.querySelectorAll(\".xv-segs[data-count]\").forEach(function(w){build(w,.3,.06);});root.querySelectorAll(\".xv-db__row, .xv-prac li\").forEach(function(r){var i=Array.prototype.indexOf.call(r.parentNode.children,r);r.style.setProperty(\"--dl\",(.25+i*.08).toFixed(2)+\"s\");});function active(){return root.getAttribute(\"data-variant\")===\"adoption\"?\"adoption\":\"spend\";}function drawAll(){charts.forEach(drawForecast);sparks.forEach(drawSpark);}function sync(){var a=active();panels.forEach(function(p){var on=p.getAttribute(\"data-panel\")===a;p.hidden=!on;});tabs.forEach(function(t){var on=t.getAttribute(\"data-tab\")===a;t.setAttribute(\"aria-selected\",on?\"true\":\"false\");t.tabIndex=on?0:-1;});}sync();drawAll();var seen=false;function play(panel){if(!panel)return;if(reduce){panel.classList.add(\"is-in\");return;}panel.classList.remove(\"is-in\");void panel.offsetWidth;requestAnimationFrame(function(){requestAnimationFrame(function(){panel.classList.add(\"is-in\");});});}function current(){return root.querySelector('.xv-panel[data-panel=\"'+active()+'\"]');}var win=root.querySelector(\".xv-window\");function select(name,focus){if(name===active())return;// keep the window at least as tall as before, so the page below does not jump\nif(win){var h=win.offsetHeight,m=parseFloat(win.style.minHeight)||0;if(h>m)win.style.minHeight=h+\"px\";win.classList.add(\"is-locked\");}root.setAttribute(\"data-variant\",name);sync();drawAll();// newly shown panel needs measuring\nvar p=current();if(!reduce){p.classList.remove(\"is-entering\");void p.offsetWidth;p.classList.add(\"is-entering\");}if(seen)play(p);if(focus){var t=root.querySelector('.xv-tab[data-tab=\"'+name+'\"]');if(t)t.focus();}}tabs.forEach(function(t,i){t.addEventListener(\"click\",function(){select(t.getAttribute(\"data-tab\"),false);});t.addEventListener(\"keydown\",function(e){var k=e.key,j=-1;if(k===\"ArrowRight\")j=(i+1)%tabs.length;else if(k===\"ArrowLeft\")j=(i-1+tabs.length)%tabs.length;else if(k===\"Home\")j=0;else if(k===\"End\")j=tabs.length-1;if(j<0)return;e.preventDefault();select(tabs[j].getAttribute(\"data-tab\"),true);});});if(\"ResizeObserver\"in window){var raf=0,lastW=0;new ResizeObserver(function(en){var w=Math.round(en[0].contentRect.width);if(w===lastW)return;if(lastW&&win){win.style.minHeight=\"\";win.classList.remove(\"is-locked\");}lastW=w;cancelAnimationFrame(raf);raf=requestAnimationFrame(drawAll);}).observe(root);}else{window.addEventListener(\"resize\",drawAll);}// fonts change label metrics slightly; redraw once they settle\nif(document.fonts&&document.fonts.ready)document.fonts.ready.then(drawAll);if(reduce||!(\"IntersectionObserver\"in window)){panels.forEach(function(p){p.classList.add(\"is-in\");});seen=true;return;}root.classList.add(\"xv-armed\");var io=new IntersectionObserver(function(en){en.forEach(function(e){if(!e.isIntersecting)return;seen=true;io.disconnect();play(current());});},{threshold:.3});io.observe(root);}function initAll(){document.querySelectorAll(\".v-executive-view\").forEach(init);}window.XTExecutiveView={init:init,initAll:initAll};if(document.readyState!==\"loading\")initAll();else document.addEventListener(\"DOMContentLoaded\",initAll);})();}/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export default function XTSpendView(props){const{style}=props;const animated=useAnimated();const host=React.useRef(null);let html=PRESETS[props.preset]||PRESETS[\"home-1\"];const setRootAttr=(k,v)=>{html=html.replace(/^(<[a-z]+)([^>]*?)(\\s${k}=\"[^\"]*\")?([^>]*>)/i,(m,a,b,c,d)=>a+b.replace(new RegExp(\"\\\\s\"+k+'=\"[^\"]*\"'),\"\")+(v==null?\"\":\" \"+k+'=\"'+v+'\"')+d);};const addRootClass=(c,on)=>{html=html.replace(/^(<[a-z]+[^>]*?class=\")([^\"]*)\"/i,(m,a,b)=>a+(on?b.split(\" \").includes(c)?b:b+\" \"+c:b.split(\" \").filter(x=>x!==c).join(\" \"))+'\"');};if(props.variant&&props.variant!==\"preset\")setRootAttr(\"data-variant\",props.variant);if(props.size!==\"preset\")setRootAttr(\"data-size\",props.size===\"compact\"?\"compact\":null);if(props.dark)setRootAttr(\"data-theme\",\"dark\");if(props.side===false)setRootAttr(\"data-side\",\"hidden\");const key=html.length+\":\"+JSON.stringify([props,animated].map(x=>x&&x.style?{...x,style:0}:x));React.useEffect(()=>{const box=host.current;if(!box)return;let el=null;let unsettle=()=>{};let cancelSized=()=>{};let untrack=()=>{};const cancel=afterPaint(()=>{cancelSized=whenSized(box,()=>{hidden(\"v-executive-view\",null,()=>once(\"XTExecutiveView\",install));el=box.querySelector(\".v-executive-view\");const api=window.XTExecutiveView;if(el&&api)hidden(\"v-executive-view\",el,()=>{untrack=track(()=>api.init(el));});if(el&&!animated){el.classList.remove(\"xv-armed\");el.querySelectorAll(\".xv-panel\").forEach(p=>p.classList.add(\"is-in\"));}unsettle=settle(()=>el&&el._xv);});});return()=>{cancel();cancelSized();unsettle();untrack();if(el)teardown(el._xv);};},[key]);return /*#__PURE__*/_jsxs(\"div\",{ref:host,className:\"xtcc\"+(props.dark?\" xt-dark\":\"\"),\"aria-hidden\":props.decorative?\"true\":undefined,style:{width:\"100%\",fontFamily:\"var(--sans)\",letterSpacing:\"-0.04em\",color:\"var(--ink)\",WebkitFontSmoothing:\"antialiased\",...style},children:[/*#__PURE__*/_jsx(XTStyle,{css:XT_FONT_IMPORT}),/*#__PURE__*/_jsx(XTStyle,{css:XT_BASE_CSS+XT_LOCKUP_CSS+CSS}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"contents\"},dangerouslySetInnerHTML:{__html:html}},key)]});}XTSpendView.displayName=\"XT Spend & ROI view\";addPropertyControls(XTSpendView,{preset:{type:ControlType.Enum,title:\"Preset\",options:[\"home-1\",\"home-2\",\"governance\",\"enablement\"],optionTitles:[\"home-1 (= finops)\",\"home-2\",\"governance\",\"enablement\"],defaultValue:\"home-1\"},variant:{type:ControlType.Enum,title:\"Tab\",options:[\"preset\",\"spend\",\"adoption\"],optionTitles:[\"From preset\",\"Spend & ROI\",\"Adoption\"],defaultValue:\"preset\"},size:{type:ControlType.Enum,title:\"Size\",options:[\"preset\",\"full\",\"compact\"],optionTitles:[\"From preset\",\"Full\",\"Compact\"],defaultValue:\"preset\"},dark:{type:ControlType.Boolean,title:\"Dark\",defaultValue:false},side:{type:ControlType.Boolean,title:\"Side panel\",defaultValue:true,description:\"Off hides the cost-per-outcome side panel (home hero on phone).\"},decorative:{type:ControlType.Boolean,title:\"Hide from SR\",defaultValue:false,description:\"On when a native caption already says the same thing.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"XTSpendView\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./XTSpendView.map"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuoBxWD,EAAQ,CAAC0H,KAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4IhBY,OAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4IT,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoIf,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}