@copilotkit/web-inspector 1.69.0 → 1.69.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/index.cjs +2418 -152
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +372 -6
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.mts +372 -6
  6. package/dist/index.d.mts.map +1 -1
  7. package/dist/index.mjs +2419 -156
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/index.umd.js +3134 -236
  10. package/dist/index.umd.js.map +1 -1
  11. package/dist/lib/event-snippets.cjs +559 -0
  12. package/dist/lib/event-snippets.cjs.map +1 -0
  13. package/dist/lib/event-snippets.d.cts +61 -0
  14. package/dist/lib/event-snippets.d.cts.map +1 -0
  15. package/dist/lib/event-snippets.d.mts +61 -0
  16. package/dist/lib/event-snippets.d.mts.map +1 -0
  17. package/dist/lib/event-snippets.mjs +537 -0
  18. package/dist/lib/event-snippets.mjs.map +1 -0
  19. package/dist/lib/home-briefing.cjs +23 -3
  20. package/dist/lib/home-briefing.cjs.map +1 -1
  21. package/dist/lib/home-briefing.mjs +23 -4
  22. package/dist/lib/home-briefing.mjs.map +1 -1
  23. package/dist/lib/inspector-nav.cjs +1 -0
  24. package/dist/lib/inspector-nav.cjs.map +1 -1
  25. package/dist/lib/inspector-nav.d.cts +11 -0
  26. package/dist/lib/inspector-nav.d.cts.map +1 -0
  27. package/dist/lib/inspector-nav.d.mts +11 -0
  28. package/dist/lib/inspector-nav.d.mts.map +1 -0
  29. package/dist/lib/inspector-nav.mjs +1 -0
  30. package/dist/lib/inspector-nav.mjs.map +1 -1
  31. package/dist/lib/telemetry.cjs +46 -1
  32. package/dist/lib/telemetry.cjs.map +1 -1
  33. package/dist/lib/telemetry.d.cts.map +1 -1
  34. package/dist/lib/telemetry.d.mts.map +1 -1
  35. package/dist/lib/telemetry.mjs +44 -2
  36. package/dist/lib/telemetry.mjs.map +1 -1
  37. package/dist/package.cjs +1 -1
  38. package/dist/package.mjs +1 -1
  39. package/dist/styles/generated.cjs +1 -1
  40. package/dist/styles/generated.cjs.map +1 -1
  41. package/dist/styles/generated.mjs +1 -1
  42. package/dist/styles/generated.mjs.map +1 -1
  43. package/package.json +3 -3
package/dist/index.umd.js CHANGED
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
7
7
 
8
8
  //#region src/styles/generated.css
9
- var generated_default = "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-100:oklch(96.2% .044 156.743);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-700:oklch(49.6% .265 301.924);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{font-family:var(--font-sans);color:var(--color-slate-900);background-color:#0000;display:block}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:calc(var(--spacing)*0)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-auto{margin-right:auto}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[28rem\\]{height:28rem}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-7{min-height:calc(var(--spacing)*7)}.min-h-\\[20rem\\]{min-height:20rem}.min-h-\\[40px\\]{min-height:40px}.min-h-\\[420px\\]{min-height:420px}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-40{width:calc(var(--spacing)*40)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[200px\\]{max-width:200px}.max-w-\\[240px\\]{max-width:240px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.translate-x-0\\.5{--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-\\[2px\\]{--tw-translate-y:calc(2px*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-nesw-resize{cursor:nesw-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[16px\\]{border-radius:16px}.rounded-\\[28px\\]{border-radius:28px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-\\[\\#00000014\\]{background-color:#00000014}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black{background-color:var(--color-black)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-100{background-color:var(--color-green-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950\\/95{background-color:#020618f2}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\\/95{background-color:color-mix(in oklab,var(--color-slate-950)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-white{background-color:var(--color-white)}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-\\[22px\\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[rgb\\(13\\,13\\,13\\)\\]{color:#0d0d0d}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-purple-700{color:var(--color-purple-700)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-sky-700{color:var(--color-sky-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-800{color:var(--color-slate-800)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-950{color:var(--color-violet-950)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.decoration-violet-300{-webkit-text-decoration-color:var(--color-violet-300);-webkit-text-decoration-color:var(--color-violet-300);text-decoration-color:var(--color-violet-300)}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_4px_4px_0_\\#0000000a\\,0_0_1px_0_\\#0000009e\\]{--tw-shadow:0 4px 4px 0 var(--tw-shadow-color,#0000000a),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-transparent{--tw-ring-color:transparent}.ring-white\\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.ring-white\\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-gray-500::placeholder{color:var(--color-gray-500)}.focus-within\\:shadow-\\[0_6px_18px_0_\\#00000014\\,0_0_1px_0_\\#0000009e\\]:focus-within{--tw-shadow:0 6px 18px 0 var(--tw-shadow-color,#00000014),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-white\\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/30:hover{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-blue-50\\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-50\\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-rose-100:hover{background-color:var(--color-rose-100)}.hover\\:bg-slate-900\\/95:hover{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-slate-900\\/95:hover{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.hover\\:bg-violet-100:hover{background-color:var(--color-violet-100)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}.hover\\:text-violet-800:hover{color:var(--color-violet-800)}.hover\\:decoration-violet-700:hover{-webkit-text-decoration-color:var(--color-violet-700);-webkit-text-decoration-color:var(--color-violet-700);text-decoration-color:var(--color-violet-700)}.hover\\:opacity-70:hover{opacity:.7}}.focus\\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\\:border-violet-400:focus{border-color:var(--color-violet-400)}.focus\\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\\:ring-violet-100:focus{--tw-ring-color:var(--color-violet-100)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:rounded:focus-visible{border-radius:.25rem}.focus-visible\\:rounded-sm:focus-visible{border-radius:var(--radius-sm)}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-rose-300:focus-visible{--tw-ring-color:var(--color-rose-300)}.focus-visible\\:ring-violet-300:focus-visible{--tw-ring-color:var(--color-violet-300)}.focus-visible\\:ring-violet-400:focus-visible{--tw-ring-color:var(--color-violet-400)}.focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-\\[\\#BEC2FF\\]:focus-visible{outline-color:#bec2ff}.focus-visible\\:outline-gray-300:focus-visible{outline-color:var(--color-gray-300)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:opacity-60:active{opacity:.6}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-60:disabled{opacity:.6}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\\[\\&\\>svg\\]\\:\\!h-8>svg{height:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:h-3>svg{height:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:h-3\\.5>svg{height:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:h-\\[18px\\]>svg{height:18px}.\\[\\&\\>svg\\]\\:\\!w-8>svg{width:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:w-3>svg{width:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:w-3\\.5>svg{width:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:w-\\[18px\\]>svg{width:18px}.\\[\\&\\>svg\\]\\:animate-spin>svg{animation:var(--animate-spin)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}.cpk-json-block{white-space:pre-wrap;word-break:break-all;color:#57575b;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;line-height:1.8;overflow:auto}.inspector-account-strip{border-bottom:1px solid #d8d8e8;width:100%;min-width:0;color:#010507!important;background:linear-gradient(90deg,#fff 0%,#f3f1ff 58%,#eefbf7 100%)!important}.inspector-account-logo{filter:none}.inspector-account-brand{position:relative}.inspector-account-logo-accent{clip-path:inset(0 0 0 80%);pointer-events:none;display:none;position:absolute;inset:0}.inspector-account-cta{isolation:isolate;color:#3f176f;white-space:nowrap;cursor:pointer;background-color:#eee6fe;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:32px;padding:7px 10px;font-size:11px;font-weight:700;line-height:1;text-decoration:none;display:inline-flex;position:relative;overflow:hidden}.inspector-account-cta:after{z-index:0;content:\"\";opacity:0;pointer-events:none;background:linear-gradient(105deg,#0000 0%,#ffffff14 32%,#ffffffad 50%,#ffffff14 68%,#0000 100%);width:68%;animation:3.8s cubic-bezier(.16,1,.3,1) infinite inspector-account-cta-shimmer;position:absolute;inset:0;transform:translate(-180%)skew(-14deg)}.inspector-account-cta>*{z-index:1;position:relative}.inspector-account-cta[data-motion-paused=true]:after{animation-play-state:paused}@keyframes inspector-account-cta-shimmer{0%{opacity:0;transform:translate(-180%)skew(-14deg)}12%{opacity:1}82%{opacity:.8}to{opacity:0;transform:translate(280%)skew(-14deg)}}.inspector-account-cta:hover{color:#32105d;background-color:#e4d8fc}.inspector-account-cta svg{width:14px;height:14px}@media (prefers-reduced-motion:reduce){.inspector-account-cta:after{animation:none}}.inspector-window-layout{position:relative}.inspector-window-layout-menu{z-index:60;color:#010507;background-color:#fff;border:1px solid #d8d8e8;border-radius:5px;width:188px;padding:4px;display:grid;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 10px 24px #1f173924}.inspector-window-layout-menu button{min-height:34px;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;border-radius:4px;align-items:center;gap:9px;padding:7px 9px;font-size:12px;font-weight:600;display:flex}.inspector-window-layout-menu button:hover,.inspector-window-layout-menu button:focus-visible{color:#3f176f;background-color:#eee6fe;outline:none}.inspector-window-layout-menu button span:first-child{flex:none;display:inline-flex}.inspector-agent-placeholder{color:#68686e;border-color:#c8c8d8}.inspector-primary-navigation,.inspector-child-navigation{display:none}.inspector-shell{background-color:#f7f6fd;flex:auto;min-height:0;display:flex}.inspector-sidebar{z-index:20;background-color:#f7f6fd;border-right:1px solid #d8d8e8;flex-direction:column;flex:none;gap:8px;width:224px;min-width:224px;padding:12px 10px;transition:width .22s,min-width .22s,padding .22s;display:flex;position:relative;overflow:visible}.inspector-sidebar[data-icon-rail=true]{width:56px;min-width:56px;padding:10px 6px}.inspector-sidebar-agent-scope{border-bottom:1px solid #d8d8e8;flex:none;min-width:0;padding-bottom:10px}.inspector-sidebar .inspector-agent-selector{width:100%;min-width:0}.inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{background-color:#fff;border-radius:5px;max-width:none;min-height:34px;padding:6px 8px}.inspector-context-dropdown-icon{color:#68686e;display:inline-flex}.inspector-context-dropdown-icon svg,.inspector-context-dropdown-chevron svg{width:14px;height:14px}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope{padding-bottom:8px}.inspector-sidebar[data-icon-rail=true] .inspector-agent-selector>[data-context-dropdown-root=true]>button{justify-content:center;width:100%;min-height:34px;padding:6px 0}.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-label,.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-chevron,.inspector-sidebar[data-icon-rail=true] .inspector-agent-placeholder span:last-child{display:none}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope [data-context-dropdown-root=true]>div{margin-top:0;top:0;left:calc(100% + 8px)}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-section+.inspector-sidebar-section{border-top:1px solid #dbdbe5;margin-top:4px;padding-top:10px}.inspector-sidebar-nav{cursor:default;flex-direction:column;flex:auto;gap:14px;min-height:0;display:flex;overflow:hidden auto}.inspector-sidebar-section{flex-direction:column;gap:4px;display:flex}.inspector-sidebar-label{color:#838389;letter-spacing:.02em;text-align:left;text-transform:none;background:0 0;border:0;width:100%;margin:0 0 2px;padding:0 8px;font-size:11px;font-weight:600;display:block}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-label,.inspector-sidebar[data-icon-rail=true] .inspector-nav-label{display:none}.inspector-sidebar-rail-tooltip{z-index:60;color:#fff;pointer-events:none;white-space:nowrap;background-color:#242331;border-radius:6px;max-width:220px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.2;position:absolute;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 7px 18px #1a172a2e}.inspector-sidebar-control{justify-content:flex-start;width:100%;min-height:36px;display:flex;position:relative}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-control,.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-toggle,.inspector-sidebar[data-icon-rail=true] .inspector-nav-control{justify-content:center;align-items:center;gap:0;padding:6px 0;overflow:hidden}.inspector-home-badge{background-color:#fa5f67;border-radius:999px;width:7px;height:7px;position:absolute;top:8px;right:8px}.inspector-sidebar[data-icon-rail=true] .inspector-home-badge{top:6px;right:8px}.inspector-sidebar-toggle{color:#57575b;width:100%;min-height:32px;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;display:flex}.inspector-sidebar-toggle:hover{color:#010507;background-color:#f0f0f4}.inspector-sidebar-footer{flex-direction:column;flex:none;gap:6px;padding:2px 0 18px;display:flex}.inspector-sidebar-status-list{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.inspector-sidebar-status-card{color:#2b2b2b;background-color:#fff;border:1px solid #d8d8e8;border-radius:7px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;min-height:52px;padding:9px 10px;display:grid;position:relative}.inspector-sidebar-status-copy{flex-direction:column;gap:2px;min-width:0;line-height:1.25;display:flex}.inspector-sidebar-status-copy strong{color:#010507;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;overflow:hidden}.inspector-sidebar-status-copy>span{color:#57575b;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#68686e}.inspector-sidebar-status-action{color:#3f176f;white-space:nowrap;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;gap:0;width:28px;height:28px;padding:0;font-size:10px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-sidebar-status-action:hover{color:#6430ab;background-color:#eee7f8;text-decoration:none}.inspector-sidebar-status-action svg{width:12px;height:12px}.inspector-sidebar-status-action-label{display:none}.inspector-sidebar-intelligence-setup{color:#3f176f;cursor:pointer;background-color:#eee7f8;border-color:#bba5df;text-decoration:none;transition:border-color .12s,background-color .12s,box-shadow .3s;animation:3.2s ease-in-out infinite inspector-sidebar-intelligence-setup-glow}@keyframes inspector-sidebar-intelligence-setup-glow{0%,to{box-shadow:0 0 #6430ab00}50%{box-shadow:0 0 16px 2px #6430ab26}}.inspector-sidebar-intelligence-setup:hover{background-color:#e4d9f4;border-color:#8e6fc0}.inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#3f176f}.inspector-sidebar-setup-arrow{background-color:#6430ab1a;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.inspector-sidebar-setup-arrow svg{width:13px;height:13px}.inspector-main{background-color:#fff;flex-direction:column;flex:auto;min-width:0;display:flex;position:relative}.cpk-memory-locked{background-color:#fff;justify-content:center;align-items:center;height:100%;padding:32px;display:flex;position:relative;overflow:hidden}.cpk-locked-preview{opacity:.58;pointer-events:none;grid-template-columns:minmax(180px,28%) 1fr;display:grid;position:absolute;inset:0;overflow:hidden}.cpk-locked-preview-sidebar{background-color:#fafafa;border-right:1px solid #dbdbe5;flex-direction:column;gap:12px;padding:28px 24px;display:flex}.cpk-locked-preview-row{background-color:#fff;border-radius:10px;padding:12px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-row[data-accent=true]{background-color:#eee6fe}.cpk-locked-preview-bar{background-color:#d7d7df;border-radius:999px}.cpk-locked-preview-row-title{width:var(--preview-width);height:8px}.cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#a984f5}.cpk-locked-preview-row-line{background-color:#e3e3eb;width:88%;height:6px;margin-top:10px}.cpk-locked-preview-row-line:last-child{background-color:#e8e8ef;width:62%;margin-top:7px}.cpk-locked-preview-main{background-color:#fff;min-width:0;padding:42px 48px}.cpk-locked-preview-heading{width:180px;height:10px}.cpk-locked-preview-copy{background-color:#e3e3eb;width:min(520px,58%);height:8px;margin-top:28px}.cpk-locked-preview-copy+.cpk-locked-preview-copy{background-color:#e8e8ef;width:min(430px,48%);margin-top:12px}.cpk-locked-preview-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;max-width:620px;margin-top:30px;display:grid}.cpk-locked-preview-card{background-color:#f5f5f8;border-radius:10px;height:116px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-footer-line{background-color:#e3e3eb;width:min(680px,74%);height:10px;margin-top:34px}.cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#e8e8ef;width:min(560px,60%);margin-top:14px}.cpk-memory-locked-scrim{pointer-events:none;background:radial-gradient(circle,#ffffffe6 0,#ffffffc7 24%,#ffffff57 48%,#ffffff8f 100%);position:absolute;inset:0}.cpk-memory-locked-content{z-index:1;color:#57575b;text-align:center;max-width:440px;position:relative}.cpk-memory-locked-icon-wrap{justify-content:center;margin:0 auto 18px;display:flex}.cpk-memory-locked-icon{color:#57575b;background-color:#eee6fe;border:1px solid #dfd6fb;border-radius:10px;justify-content:center;align-items:center;width:44px;height:44px;display:flex;box-shadow:0 8px 18px #57575b24}.cpk-memory-locked-title{color:#010507;margin:0 0 8px;font-size:16px;font-weight:600;line-height:1.35}.cpk-memory-locked-copy{color:#57575b;max-width:380px;margin:0 auto 18px;font-size:13px;line-height:1.55}.cpk-memory-locked-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.cpk-memory-locked-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:5px;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;text-decoration:none;display:inline-flex}.cpk-memory-locked-action:hover{background-color:#4e238c;border-color:#4e238c}.cpk-memory-locked-action-secondary{color:#57575b;background-color:#fff;border-color:#dbdbe5}.cpk-memory-locked-action-secondary:hover{background-color:#f7f7f9;border-color:#afafb7}.inspector-home{background-color:#fff;min-height:100%;padding:30px 32px 40px;position:relative;overflow:auto}.inspector-home:before{display:none}.inspector-home>*{width:min(100%,960px);margin-left:auto;margin-right:auto}.inspector-settings{color:#010507;background-color:#fff;min-height:100%;padding:28px 28px 36px;overflow:auto}.inspector-settings-header{border-bottom:1px solid #d5d3e4;max-width:70ch;padding-bottom:22px}.inspector-settings-title{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-settings-subtitle{color:#57575b;max-width:60ch;margin:10px 0 0;font-size:14px;line-height:1.5}.inspector-settings-section{grid-template-columns:minmax(138px,168px) minmax(0,1fr);gap:30px;max-width:820px;margin-top:28px;display:grid}.inspector-settings-section-heading{align-items:flex-start;gap:10px;display:flex}.inspector-settings-section-icon{color:#3f176f;background-color:#eee6fe;border:1px solid #bec2ff;border-radius:5px;flex:none;justify-content:center;align-items:center;width:30px;height:30px;display:inline-flex}.inspector-settings-section-icon svg{width:16px;height:16px}.inspector-settings-section-heading h2,.inspector-settings-status-row h3{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-weight:600}.inspector-settings-section-heading h2{font-size:15px;line-height:1.3}.inspector-settings-section-heading p{color:#68686e;margin:5px 0 0;font-size:11px;line-height:1.45}.inspector-settings-privacy{border-top:1px solid #d5d3e4;border-bottom:1px solid #d5d3e4;padding:20px 0 22px}.inspector-settings-status-row{justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.inspector-settings-status-row h3{font-size:16px;line-height:1.3}.inspector-settings-status-row p{color:#57575b;max-width:56ch;margin:8px 0 0;font-size:13px;line-height:1.55}.inspector-settings-status{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;min-height:24px;padding:3px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#7d4d0a;background-color:#fff5df;border-color:#dfc08f}.inspector-settings-private-content{border-top:1px solid #e4e4ec;margin-top:20px;padding-top:18px}.inspector-settings-private-content strong{color:#010507;font-size:13px;font-weight:700}.inspector-settings-private-content>p{color:#68686e;margin:4px 0 0;font-size:11px;line-height:1.45}.inspector-settings-private-content ul{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;margin:12px 0 0;display:grid}.inspector-settings-private-content li{color:#3e3d48;align-items:center;gap:7px;min-width:0;font-size:12px;line-height:1.35;display:flex}.inspector-settings-private-content li span{color:#087653;flex:none;display:inline-flex}.inspector-settings-private-content li svg{width:14px;height:14px}.inspector-settings-policy-link{color:#3f176f;text-underline-offset:3px;outline-offset:2px;outline:2px solid #0000;align-items:center;gap:6px;min-height:32px;margin-top:20px;font-size:12px;font-weight:700;text-decoration:underline;text-decoration-thickness:1px;display:inline-flex}.inspector-settings-policy-link:hover{color:#6430ab}.inspector-settings-policy-link:focus-visible{outline-color:#6430ab}.inspector-settings-policy-link svg{width:14px;height:14px}@media (max-width:720px){.inspector-settings{padding:24px 20px 32px}.inspector-settings-section{grid-template-columns:1fr;gap:18px}.inspector-settings-section-heading p{max-width:42ch}}@media (max-width:480px){.inspector-settings-status-row{flex-direction:column;gap:12px}.inspector-settings-private-content ul{grid-template-columns:1fr}}.inspector-home-card,.inspector-home-story{background-color:#ffffffd1;border:1px solid #deddea;border-radius:5px;padding:18px 18px 16px;position:relative}.inspector-home-eyebrow,.inspector-home-card-label,.inspector-home-meta{color:#57575b;margin:0;font-size:12px;font-weight:600}.inspector-home-title,.inspector-home-section-title,.inspector-home-card-title{color:#010507;margin:8px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-home-section-title{letter-spacing:-.015em;margin:0 0 14px;font-size:17px}.inspector-home-card-title{font-size:16px}.inspector-home-body,.inspector-home-card-copy{color:#57575b;max-width:52ch;margin:10px 0 0;font-size:15px;line-height:1.5}.inspector-home-section{margin-top:24px;position:relative}.inspector-home>.inspector-home-section:first-child{margin-top:0}.inspector-whats-new-preview+.inspector-home-section{margin-top:20px}.inspector-home-section-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px;display:flex}.inspector-home-section-header .inspector-home-section-title{margin-bottom:0}.inspector-home-section-header>span{color:#68686e;font-size:11px;font-weight:600;line-height:1.35}.inspector-system-health-header>span[data-tone=success]{color:#087653}.inspector-system-health-header>span[data-tone=checking]{color:#8a5900}.inspector-system-health-header>span[data-tone=offline],.inspector-system-health-header>span[data-tone=error]{color:#b32d3b}.inspector-system-health-section{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-system-health-section .inspector-system-health-header{background-color:#f7f4fe;border-bottom:1px solid #d5d3e4;align-items:center;min-height:76px;margin:0;padding:18px}.inspector-system-health-heading{min-width:0}.inspector-system-health-heading .inspector-home-section-title{color:#010507;letter-spacing:-.025em;font-size:18px}.inspector-system-health-state,.inspector-intelligence-hud-state{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:24px;padding:4px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-system-health-state>span,.inspector-intelligence-hud-state>span{background-color:currentColor;border-radius:999px;width:6px;height:6px}.inspector-system-health-state[data-tone=checking],.inspector-intelligence-hud-state[data-tone=checking]{background-color:#fff5df;border-color:#dfc08f;color:#7d4d0a!important}.inspector-system-health-state[data-tone=offline],.inspector-system-health-state[data-tone=error],.inspector-intelligence-hud-state[data-tone=offline],.inspector-intelligence-hud-state[data-tone=error]{background-color:#fff0f1;border-color:#e7a7ac;color:#b32d3b!important}.inspector-system-health-state[data-tone=unavailable],.inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#f0f0f4;border-color:#c8c8d2;color:#57575b!important}.inspector-system-health{background-color:#d5d3e4;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.inspector-system-health-signal{background-color:#fff;grid-template-columns:minmax(0,1fr);align-items:start;min-width:0;min-height:84px;padding:15px 16px 14px;display:grid}.inspector-system-health-copy{flex-direction:column;min-width:0;display:flex}.inspector-system-health-signal dt{color:#68686e;letter-spacing:.035em;text-transform:uppercase;font-size:10px;font-weight:700;line-height:1.3}.inspector-system-health-signal dd{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:15px;font-weight:700;overflow:hidden}.inspector-system-health-signal small{color:#68686e;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-top:4px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;line-height:1.4;overflow:hidden}small.inspector-system-health-detail{letter-spacing:0;font-family:inherit;font-size:11px;font-weight:500;line-height:1.4}.inspector-system-health-url{cursor:help;outline:none;position:relative;overflow:visible!important}.inspector-system-health-url>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-url:after{z-index:30;color:#f3f4f8;content:attr(data-full-value);opacity:0;overflow-wrap:anywhere;pointer-events:none;white-space:normal;background-color:#15171e;border:1px solid #3a3d49;border-radius:4px;width:max-content;max-width:min(360px,70vw);padding:7px 9px;font-size:10px;font-weight:500;line-height:1.45;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 7px);left:0;transform:translateY(3px);box-shadow:0 8px 20px #0105072e}.inspector-system-health-url:hover:after,.inspector-system-health-url:focus-visible:after{opacity:1;transform:translateY(0)}.inspector-system-health-url:focus-visible>span{outline-offset:2px;border-radius:3px;outline:2px solid #6430ab}.inspector-system-health-signal[data-tone=success] dd{color:#087653}.inspector-system-health-signal[data-tone=active] dd{color:#8a5900}.inspector-system-health-event-link{width:100%;min-width:0;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;padding:0;display:block}.inspector-system-health-event-link>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-event-link>.inspector-system-health-event-type{color:#57575b;letter-spacing:.025em;background-color:#f1f1f3;border-radius:999px;align-items:center;width:fit-content;max-width:100%;padding:3px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;line-height:1.25;display:inline-flex}.inspector-system-health-event-link>small{color:#68686e;align-items:center;gap:6px;margin:5px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:10px;font-weight:500;line-height:1.25;display:flex}.inspector-system-health-event-meta strong{color:#6430ab;text-underline-offset:3px;font-weight:700;-webkit-text-decoration:underline #0000;text-decoration:underline #0000}.inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#b32d3b;background-color:#fff0f1}.inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#087653;background-color:#e3f5ee}.inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#8a5900;background-color:#fff5df}.inspector-system-health-event-link:hover .inspector-system-health-event-meta strong{text-decoration-color:currentColor}.inspector-system-health-event-link:focus-visible{outline-offset:3px;border-radius:3px;outline:2px solid #6430ab}.inspector-intelligence-hud{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-intelligence-hud-header{justify-content:space-between;align-items:center;gap:24px;padding:18px;display:flex}.inspector-intelligence-hud[data-state=disconnected]{border-color:#bba5df}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header{align-items:center;min-height:132px;padding:22px}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header-actions{flex-direction:column;align-items:flex-end;gap:10px}.inspector-intelligence-hud-heading{min-width:0}.inspector-intelligence-hud-header-actions{flex:none;align-items:center;gap:8px;display:flex}.inspector-intelligence-hud-heading .inspector-home-section-title{margin:0;font-size:18px}.inspector-intelligence-hud-description{color:#4f4f55;max-width:64ch;margin:10px 0 0;font-size:12px;line-height:1.55}.inspector-intelligence-hud-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:4px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:8px 11px;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:11px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-intelligence-hud-action:hover{background-color:#4e238c;border-color:#4e238c}.inspector-intelligence-hud-action svg{width:13px;height:13px}.inspector-intelligence-hud-connect-action{min-height:38px;padding:10px 14px;font-size:12px}.inspector-intelligence-hud-details{background-color:#d5d3e4;border-top:1px solid #d5d3e4;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:1px;display:grid}.inspector-intelligence-hud-details>section{background-color:#fff;min-width:0;padding:15px 18px 17px}.inspector-intelligence-hud-detail-label{color:#68686e;font-size:11px;font-weight:600;display:block}.inspector-intelligence-hud-detail-value{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:14px;font-weight:700;display:block;overflow:hidden}.inspector-intelligence-hud-detail-subvalue{color:#68686e;text-transform:capitalize;margin-top:3px;font-size:10px;font-weight:500;display:block}.inspector-intelligence-hud-plan{grid-template-columns:minmax(0,1fr) minmax(120px,1fr);align-items:start;gap:24px;display:grid}.inspector-intelligence-hud-usage{min-width:0}.inspector-intelligence-hud-plan-action{color:#6430ab;text-underline-offset:3px;background-color:#0000;border:0;border-radius:0;gap:4px;min-height:auto;margin-top:9px;padding:0;font-size:10px;font-weight:700;line-height:1.2;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:1px}.inspector-intelligence-hud-plan-action:hover{color:#4e238c;background-color:#0000;border-color:#0000;text-decoration-color:currentColor}.inspector-intelligence-hud-plan-action svg{width:11px;height:11px}.inspector-home-usage-bar{background-color:#dbdbe5;border-radius:999px;width:min(160px,100%);height:5px;margin-top:8px;display:block;overflow:hidden}.inspector-home-usage-bar>span{background-color:#bec2ff;height:100%;display:block}.inspector-home-feature-groups{grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));align-items:start;gap:12px;display:grid}.inspector-home-feature-group{background-color:#fff;border:1px solid #d5d3e4;border-radius:5px;overflow:hidden}.inspector-home-feature-group-header{color:#57575b;background-color:#f7f7f9;border-bottom:1px solid #e4e4ec;justify-content:space-between;align-items:center;gap:12px;min-height:40px;padding:9px 12px;display:flex}.inspector-home-feature-group-header strong{font-size:12px;font-weight:700}.inspector-home-feature-group-header>span{background-color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:22px;min-height:20px;padding:2px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#087653;background-color:#e5f7f1;border-color:#b9e3d6}.inspector-home-feature-list{background-color:#fff;flex-direction:column;margin:0;display:flex}.inspector-home-feature{color:#010507;background-color:#fff;grid-template-columns:minmax(0,1fr) auto 14px;align-items:center;gap:8px;min-width:0;min-height:43px;padding:10px 12px;font-size:12px;font-weight:600;text-decoration:none;display:grid}.inspector-home-feature+.inspector-home-feature{border-top:1px solid #ececf1}.inspector-home-feature-group-empty{color:#68686e;margin:0;padding:15px 12px;font-size:11px}.inspector-home-feature:hover{background-color:#f7f7f9}.inspector-home-feature-arrow svg{width:12px;height:12px}.inspector-home-feature small{color:#087653;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700}.inspector-home-feature[data-state=off],.inspector-home-feature[data-state=off] small,.inspector-home-feature-arrow{color:#68686e}.inspector-home-features-empty{color:#57575b;border-top:1px solid #deddea;border-bottom:1px solid #deddea;margin:14px 0 0;padding:16px 0;font-size:12px}.inspector-home-news{gap:12px;display:grid}.inspector-whats-new-preview{color:#010507;background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;align-items:stretch;width:100%;min-height:64px;display:flex;position:relative;overflow:hidden;container-type:inline-size}.inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background-color:#f1ebfc;border-color:#8f91d7}.inspector-whats-new-preview-body{min-width:0;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;flex:auto;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 14px;display:grid}.inspector-whats-new-preview-copy{flex-direction:column;gap:3px;min-width:0;display:flex}.inspector-whats-new-preview-title{align-items:center;gap:8px;min-width:0;display:flex}.inspector-whats-new-preview-copy strong{text-overflow:ellipsis;white-space:nowrap;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:13px;line-height:1.25;overflow:hidden}.inspector-whats-new-preview-copy>span:last-child{color:#4e4c63;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.4;overflow:hidden}.inspector-whats-new-preview-action{color:#3f176f;white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:11px;font-weight:700;display:inline-flex}.inspector-whats-new-preview-action svg{width:15px;height:15px}@container (max-width:640px){.inspector-whats-new-preview-body{grid-template-columns:minmax(0,1fr)}.inspector-whats-new-preview-action{display:none}}.inspector-whats-new-preview-dismiss{color:#68686e;cursor:pointer;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.inspector-whats-new-preview-dismiss:hover{color:#3f176f;background-color:#6430ab1a}.inspector-whats-new-preview-dismiss svg{width:14px;height:14px}@media (max-width:720px){.inspector-account-cta{width:32px;padding-inline:0}.inspector-account-cta-label{display:none}.inspector-home{padding:24px 22px 34px}.inspector-intelligence-hud-header{flex-wrap:wrap}.inspector-intelligence-hud-details{grid-template-columns:1fr}.inspector-intelligence-hud-plan{grid-template-columns:repeat(2,minmax(0,1fr))}.inspector-whats-new-preview-action{display:none}}@media (max-width:600px){.inspector-system-health{grid-template-columns:1fr}}@media (max-width:480px){.inspector-system-health-section .inspector-system-health-header{align-items:flex-start}.inspector-intelligence-hud-header{flex-direction:column;align-items:stretch}.inspector-intelligence-hud-header-actions{justify-content:space-between}.inspector-intelligence-hud-header-actions .inspector-intelligence-hud-action,.inspector-intelligence-hud-plan{width:100%}.inspector-intelligence-hud-plan{grid-template-columns:1fr;align-items:stretch}.inspector-intelligence-hud-plan-action{justify-self:start}.inspector-whats-new-header{align-items:center;gap:16px;width:calc(100% - 24px);padding:24px 22px}.inspector-whats-new-document,.inspector-whats-new-empty{padding:20px 22px 36px}.inspector-whats-new-document .announcement-content h1+p{font-size:16px}}.inspector-whats-new-header{background:#f8f7ff;border:1px solid #d8d8e8;border-radius:5px;justify-content:space-between;align-items:center;gap:24px;width:calc(100% - 44px);max-width:calc(70ch - 44px);padding:30px 32px 28px;display:flex;box-shadow:0 12px 28px #26224e0f}.inspector-whats-new-header .inspector-home-title{letter-spacing:-.035em;margin:0;font-size:clamp(27px,3.6vw,36px)}.inspector-whats-new-updated{color:#6c687c;letter-spacing:.01em;white-space:nowrap;flex:none;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;font-weight:600}.inspector-whats-new .inspector-home-news{max-width:70ch;margin-top:0}.inspector-whats-new-document,.inspector-whats-new-empty{max-width:70ch;padding:22px 32px 52px}.inspector-whats-new-document .announcement-content{color:#2b2b39;font-size:15px;line-height:1.72}.inspector-whats-new-document .announcement-content h1{color:#15131d;letter-spacing:-.032em;max-width:24ch;margin:0 0 16px;font-size:clamp(26px,3.2vw,34px);line-height:1.1}.inspector-whats-new-document .announcement-content h1+p{color:#504d61;max-width:58ch;margin-top:0;font-size:18px;line-height:1.58}.inspector-whats-new-document .announcement-content>hr:first-child{display:none}.inspector-whats-new-document .announcement-content h2:first-of-type{border-top:0;margin-top:14px;padding-top:0}.inspector-whats-new-document .announcement-content h2{color:#1b1924;letter-spacing:-.024em;border-top:1px solid #dfdeea;margin:44px 0 14px;padding-top:24px;font-size:21px;line-height:1.2}.inspector-whats-new-document .announcement-content p{max-width:70ch;margin:.85rem 0}.inspector-whats-new-document .announcement-content ul,.inspector-whats-new-document .announcement-content ol{max-width:68ch;margin:1.25rem 0 1.5rem;padding-left:1.4rem}.inspector-whats-new-document .announcement-content li+li{margin-top:.7rem}.inspector-whats-new-document .announcement-content a{color:#4e46a5;text-underline-offset:4px;font-weight:600;text-decoration-color:#4e46a56b;text-decoration-thickness:1px;transition:color .16s,text-decoration-color .16s}.inspector-whats-new-document .announcement-content a:hover{color:#312879;text-decoration-color:currentColor}.inspector-whats-new-empty{color:#5e5b70}.inspector-whats-new-empty .inspector-home-card-title{color:#1b1924;margin:0}.inspector-whats-new-empty .inspector-home-card-copy{max-width:48ch;margin:8px 0 0}.inspector-home-story-featured{padding:22px}.inspector-home-story-link{color:inherit;cursor:pointer;text-decoration:none;display:block}.inspector-home-story-link:hover{background-color:#fff;border-color:#8f91d7}.inspector-home-story[data-unread=true]{border-color:#bec2ff;padding-right:64px;box-shadow:0 0 0 1px #6430ab}.inspector-home-story-unread{color:#fff;letter-spacing:.04em;text-transform:uppercase;background-color:#6430ab;border-radius:999px;align-items:center;min-height:18px;padding:0 7px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-nav-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;transition:opacity .18s,width .22s;overflow:hidden}.inspector-nav-control{color:#57575b;min-height:32px;font:inherit;text-align:left;outline-offset:-2px;cursor:pointer;background-color:#0000;border:1px solid #0000;border-radius:5px;outline:2px solid #0000;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;line-height:1.25;display:flex}.inspector-nav-control:hover{color:#010507;background-color:#f0f0f4}.inspector-nav-control-active{color:#3f176f;background-color:#eee6fe;border-color:#bec2ff}.inspector-nav-icon{flex:none;align-items:center;display:inline-flex}.inspector-nav-icon svg{width:15px;height:15px}.inspector-nav-control:focus-visible,.inspector-account-control:focus-visible,[data-inspector-thread-cta]:focus-visible,[data-inspector-sidebar-intelligence-action]:focus-visible,[data-inspector-whats-new-preview]:focus-visible,[data-inspector-whats-new-dismiss]:focus-visible,[data-inspector-home-intelligence-action]:focus-visible,.inspector-home-feature:focus-visible,[data-inspector-action-placement=threads-footer]:focus-visible{outline-offset:2px;outline:2px solid #6430ab!important}.inspector-sidebar .inspector-nav-control:focus-visible,.inspector-sidebar .inspector-sidebar-label:focus-visible,.inspector-sidebar [data-inspector-thread-cta]:focus-visible{outline-offset:-2px!important}.inspector-account-control{color:#57575b;font:inherit;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #0000;outline:2px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.inspector-account-control:hover,.inspector-account-control-active{color:#3f176f;background-color:#6430ab17}:host ::selection{color:#010507;background-color:#cfd2ff}:host *{scrollbar-color:#aaa9c1 transparent;scrollbar-width:thin}:host ::-webkit-scrollbar{width:8px;height:8px}:host ::-webkit-scrollbar-thumb{background:#aaa9c1 padding-box padding-box;border:2px solid #0000;border-radius:999px}.inspector-account-control-icon{flex:none;justify-content:center;align-items:center;display:inline-flex}.inspector-account-control-icon svg{width:15px;height:15px}[data-inspector-thread-cta],[data-inspector-account-strip] button,[data-inspector-account-strip] a{cursor:pointer}@media (prefers-reduced-motion:reduce){.inspector-sidebar,.inspector-nav-label{transition:none}}[data-inspector-threads-setup-prompt],[data-inspector-threads-setup-link]{min-height:34px;font:inherit;outline-offset:2px;cursor:pointer;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-threads-setup-prompt]{color:#fff;background-color:#010507;border-color:#010507}[data-inspector-threads-setup-prompt]:hover{background-color:#2b2b2b;border-color:#2b2b2b}[data-inspector-threads-setup-link]{color:#57575b;background-color:#fff}[data-inspector-threads-setup-link]:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}[data-inspector-threads-setup-prompt]:focus-visible,[data-inspector-threads-setup-link]:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.inspector-threads-footer{color:#57575b;background-color:#f7f7f9;border-top:1px solid #dbdbe5;flex:none;gap:10px;padding:12px;font-size:11px;line-height:1.35;display:grid}.inspector-threads-usage{gap:6px;display:grid}[data-inspector-thread-count]{color:#010507;font-weight:600}[data-inspector-thread-expiry]{color:#57575b}.inspector-thread-progress{--inspector-thread-progress-color:#189370;width:100%;height:6px;accent-color:var(--inspector-thread-progress-color);border-radius:999px;overflow:hidden}.inspector-thread-progress[data-inspector-thread-capacity=warning]{--inspector-thread-progress-color:#b45309}.inspector-thread-progress[data-inspector-thread-capacity=critical]{--inspector-thread-progress-color:#be123c}.inspector-thread-progress::-webkit-progress-bar{background-color:#dbdbe5;border-radius:999px}.inspector-thread-progress::-webkit-progress-value{background-color:var(--inspector-thread-progress-color);border-radius:999px}.inspector-thread-progress::-moz-progress-bar{background-color:var(--inspector-thread-progress-color);border-radius:999px}[data-inspector-action-placement=threads-footer]{color:#57575b;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #d5d3e4;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;width:100%;min-height:32px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]{color:#fff;background-color:#6430ab;border-color:#6430ab}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]:hover{color:#fff;background-color:#3f176f;border-color:#3f176f}[data-inspector-action-placement=threads-footer]:hover{color:#010507;background-color:#f7f4fe;border-color:#c8c6e6}.cpk-threads-overview-video{opacity:0;transition:opacity .22s}.cpk-threads-overview{background-color:#f7f7f9;flex:1;justify-content:center;align-items:center;min-width:0;padding:32px;display:flex}.cpk-threads-overview-content{color:#57575b;width:100%;max-width:440px}.cpk-threads-overview-title{color:#010507;margin:0 0 10px;font-size:20px;font-weight:600;line-height:1.25}.cpk-threads-overview-copy{color:#57575b;margin:0 0 16px;font-size:13px;line-height:1.55}.cpk-threads-overview-actions{flex-wrap:wrap;gap:8px;display:flex}.cpk-threads-overview-action{outline-offset:2px;border:1px solid #0000;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}.cpk-threads-overview-action-primary{color:#fff;background-color:#010507;border-color:#010507}.cpk-threads-overview-action-primary:hover{background-color:#2b2b2b;border-color:#2b2b2b}.cpk-threads-overview-action-secondary{color:#010507;background-color:#fff;border-color:#dbdbe5}.cpk-threads-overview-action-secondary:hover{background-color:#fff;border-color:#afafb7}.cpk-threads-overview-video[data-loaded=true]{opacity:1}.cpk-threads-overview-video-control{color:#3f176f;min-height:32px;font:inherit;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;margin:0 0 14px;padding:6px 10px;font-size:12px;font-weight:600;line-height:1.25;display:inline-flex}.cpk-threads-overview-video-control:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}.cpk-threads-overview-video-control:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.cpk-threads-overview-video-fallback{color:#57575b;max-width:440px;margin:-4px 0 14px;font-size:12px;line-height:1.5}.cpk-threads-tour-launch{z-index:2;color:#57575b;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600;position:absolute;bottom:16px;right:16px;box-shadow:0 8px 18px #01050714}.cpk-threads-tour{z-index:3;color:#57575b;background-color:#fff;border:1px solid #dbdbe5;border-radius:10px;width:min(340px,100% - 32px);padding:14px;position:absolute;bottom:16px;right:16px;box-shadow:0 16px 36px #01050724}.cpk-threads-tour-step{color:#087653;text-transform:uppercase;margin-bottom:8px;font-family:Spline Sans Mono,monospace;font-size:10px;font-weight:600}.cpk-threads-tour-title{color:#010507;margin-bottom:6px;font-size:14px;font-weight:600;line-height:1.35}.cpk-threads-tour-copy{color:#57575b;font-size:12px;line-height:1.5}.cpk-threads-tour-actions{justify-content:space-between;gap:8px;margin-top:14px;display:flex}.cpk-threads-tour-nav{gap:8px;display:flex}.cpk-threads-tour-skip,.cpk-threads-tour-button{font:inherit;outline-offset:2px;cursor:pointer;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600}.cpk-threads-overview-action:focus-visible,.cpk-threads-tour-launch:focus-visible,.cpk-threads-tour-skip:focus-visible,.cpk-threads-tour-button:focus-visible{outline-color:#6430ab}.cpk-threads-tour-skip{color:#68686e;background-color:#0000;border:0;padding-inline:0}.cpk-threads-tour-button-secondary{color:#57575b;background-color:#fff;border:1px solid #dbdbe5}.cpk-threads-tour-button-primary{color:#fff;background-color:#010507;border:1px solid #010507}.cpk-threads-tour-button:disabled{cursor:not-allowed;opacity:.45}@media (max-width:720px){.cpk-threads-overview{padding:24px}}@media (prefers-reduced-motion:reduce){.cpk-threads-overview-video{transition:none}}.inspector-window[data-color-scheme=dark]{color-scheme:dark;color:#f3f4f8!important;background-color:#111319!important;border-color:#7b7d89!important}.inspector-window[data-color-scheme=dark]>div,.inspector-window[data-color-scheme=dark] .inspector-shell,.inspector-window[data-color-scheme=dark] .inspector-main,.inspector-window[data-color-scheme=dark] #cpk-main-scroll{color:#f3f4f8!important;background-color:#111319!important}.inspector-window[data-color-scheme=dark] .drag-handle,.inspector-window[data-color-scheme=dark] .inspector-account-strip{color:#f3f4f8!important;background:#171a22!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-logo{filter:brightness(0)invert();clip-path:inset(0 20% 0 0)}.inspector-window[data-color-scheme=dark] .inspector-account-logo-accent{filter:none;display:block}.inspector-window[data-color-scheme=dark] .inspector-agent-placeholder{color:#b8bbc7!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-control{color:#b8bbc7!important;border:0!important}.inspector-window[data-color-scheme=dark] .inspector-account-control:hover,.inspector-window[data-color-scheme=dark] .inspector-account-control-active{color:#d8d9ff!important;background-color:#292c38!important}.inspector-window[data-color-scheme=dark] .inspector-account-cta{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-account-cta:hover{color:#fff;background-color:#353854}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu{color:#f3f4f8;background-color:#191c24;border-color:#464957;box-shadow:0 12px 28px #00000052}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:hover,.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:focus-visible{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{color:#f3f4f8!important;background-color:#20232c!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button:hover{background-color:#292c38!important;border-color:#777aae!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button>span:last-child{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div{color:#f3f4f8!important;box-shadow:none!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:hover,.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:focus{color:#f3f4f8!important;background-color:#343746!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar{color:#f3f4f8;background-color:#15171e;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-label{color:#8f93a1}.inspector-window[data-color-scheme=dark] .inspector-sidebar-rail-tooltip{color:#191c24;background-color:#e9e9f1;box-shadow:0 7px 18px #00000047}.inspector-window[data-color-scheme=dark] .inspector-nav-control,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle{color:#b8bbc7}.inspector-window[data-color-scheme=dark] .inspector-nav-control:hover,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle:hover{color:#fff;background-color:#22252f}.inspector-window[data-color-scheme=dark] .inspector-nav-control-active{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-agent-scope{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy>span,.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action:hover{color:#fff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup:hover{background-color:#343653;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-setup-arrow{background-color:#caccff1f}@media (prefers-reduced-motion:reduce){.inspector-sidebar-intelligence-setup{animation:none}}.inspector-window[data-color-scheme=dark] .inspector-home{background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings-header,.inspector-window[data-color-scheme=dark] .inspector-settings-privacy,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-settings-title,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading h2,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row h3,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-settings-subtitle,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading p,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row p,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content>p{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-settings-section-icon{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li span{color:#75d8b9}.inspector-window[data-color-scheme=dark] .inspector-settings-status{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#f2cf8f;background-color:#342916;border-color:#866932}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link:hover{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-home-card,.inspector-window[data-color-scheme=dark] .inspector-home-story,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud,.inspector-window[data-color-scheme=dark] .inspector-home-feature-list,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview{color:#f3f4f8;background:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected]{background-color:#1d1e2b;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-description{color:#c5c7d0}.inspector-window[data-color-scheme=dark] .inspector-system-health,.inspector-window[data-color-scheme=dark] .inspector-system-health-section{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-section{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-section .inspector-system-health-header{background-color:#191c24;border-bottom-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-event-link>small{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=success]{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=success],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=success]{background-color:#173b32;border-color:#347d69;color:#8ce1c5!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=checking],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=checking]{background-color:#342916;border-color:#866932;color:#f2cf8f!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=error],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=error]{background-color:#3b1c22;border-color:#87424a;color:#ff9aa0!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=unavailable],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#242731;border-color:#464957;color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=checking]{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=error]{color:#ff9aa0}.inspector-window[data-color-scheme=dark] .inspector-home-story-link:hover,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background:#242131;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-home-title,.inspector-window[data-color-scheme=dark] .inspector-home-section-title,.inspector-window[data-color-scheme=dark] .inspector-home-card-title,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dd,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-value,.inspector-window[data-color-scheme=dark] .inspector-home-feature{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-home-eyebrow,.inspector-window[data-color-scheme=dark] .inspector-home-card-label,.inspector-window[data-color-scheme=dark] .inspector-home-meta,.inspector-window[data-color-scheme=dark] .inspector-home-body,.inspector-window[data-color-scheme=dark] .inspector-home-card-copy,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dt,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal small,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-heading p,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-label,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-subvalue,.inspector-window[data-color-scheme=dark] .inspector-home-section-header>span,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-copy>span:last-child{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details{background-color:#3a3d49;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section{background-color:#15171e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action:hover{color:#fff;background-color:#0000;border-color:#0000}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal+.inspector-system-health-signal,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section+section,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details,.inspector-window[data-color-scheme=dark] .inspector-home-features-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] dd,.inspector-window[data-color-scheme=dark] .inspector-home-feature small{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] dd{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#ff9aa0;background-color:#3b1c22}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#8ce1c5;background-color:#173b32}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#f2cf8f;background-color:#342916}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header{color:#c9ccd6;background-color:#20232d;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header>span{color:#c9ccd6;background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-home-feature{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature:hover{background-color:#20232d}.inspector-window[data-color-scheme=dark] .inspector-home-feature+.inspector-home-feature{border-color:#2f323d}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-empty{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off] small,.inspector-window[data-color-scheme=dark] .inspector-home-feature-arrow{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss:hover{color:#fff;background-color:#302a40}.inspector-window[data-color-scheme=dark] .inspector-home-usage-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-thread-progress::-webkit-progress-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-header{box-shadow:none;background-color:#1d1e2b;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-updated,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-action{color:#d8d9ff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:hover .inspector-whats-new-preview-action{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty .inspector-home-card-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1+p{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2{border-top-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h3,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content a{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-threads-footer{color:#aeb1bd;background-color:#15171e;border-color:#343742}.inspector-window[data-color-scheme=dark] [data-inspector-thread-count]{color:#f3f4f8}.inspector-window[data-color-scheme=dark] [data-inspector-thread-expiry]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]:hover{color:#fff;background-color:#20232d;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-content,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-copy,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-fallback,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-title,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-frame{background:linear-gradient(135deg,#666a9e3d,#347d6929),#191c24;border-color:#3a3d49;box-shadow:0 8px 20px #00000038}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary{color:#171823;background-color:#caccff;border-color:#caccff}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary:hover{background-color:#d8d9ff;border-color:#d8d9ff}.inspector-window[data-color-scheme=dark] .cpk-threads-tour{color:#aeb1bd;background-color:#191c24;border-color:#464957;box-shadow:0 16px 36px #00000052}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-step{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button:focus-visible{outline-color:#bec2ff}.inspector-window[data-color-scheme=dark] .cpk-memory-locked{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-sidebar{background-color:#15171e;border-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-main{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true]{background-color:#292b43}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-bar{background-color:#333641}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line{background-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line:last-child,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy+.cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#292c36}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-card{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-scrim{background:radial-gradient(circle,#111319f0 0,#111319d6 24%,#11131975 48%,#111319ad 100%)}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-content,.inspector-window[data-color-scheme=dark] .cpk-memory-locked-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-icon{color:#d8d9ff;box-shadow:none;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-agent-overview,.inspector-window[data-color-scheme=dark] .cpk-section-card{background-color:#191c24!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header{background-color:#242731!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header h4{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] .cpk-agent-icon{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] .cpk-stat-card{background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] button.cpk-stat-card:hover{background-color:#20232d!important}.inspector-window[data-color-scheme=dark] .cpk-agent-view .divide-gray-200>:not([hidden])~:not([hidden]){border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-json-block{color:#c9ccd6}.inspector-window[data-color-scheme=dark] [class*=bg-emerald-50],.inspector-window[data-color-scheme=dark] [class*=bg-green-100]{color:#8ce1c5!important;background-color:#173b32!important}.inspector-window[data-color-scheme=dark] [class*=bg-rose-50]{color:#ff9aa0!important;background-color:#3b1c22!important}.inspector-window[data-color-scheme=dark] [class*=bg-amber-50],.inspector-window[data-color-scheme=dark] [class*=bg-amber-100]{color:#f2cf8f!important;background-color:#342916!important}.inspector-window[data-color-scheme=dark] [class*=bg-blue-50],.inspector-window[data-color-scheme=dark] [class*=bg-blue-100],.inspector-window[data-color-scheme=dark] [class*=bg-sky-50],.inspector-window[data-color-scheme=dark] [class*=bg-violet-50],.inspector-window[data-color-scheme=dark] [class*=bg-purple-50],.inspector-window[data-color-scheme=dark] [class*=bg-fuchsia-50]{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] [class*=bg-white]{background-color:#191c24!important}.inspector-window[data-color-scheme=dark] [class*=bg-gray-50],.inspector-window[data-color-scheme=dark] [class*=bg-slate-50],.inspector-window[data-color-scheme=dark] [class*=bg-gray-100],.inspector-window[data-color-scheme=dark] [class*=bg-slate-100]{background-color:#171a22!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-900],.inspector-window[data-color-scheme=dark] [class*=text-slate-900],.inspector-window[data-color-scheme=dark] [class*=text-gray-800],.inspector-window[data-color-scheme=dark] [class*=text-slate-800],.inspector-window[data-color-scheme=dark] [class*=text-gray-700],.inspector-window[data-color-scheme=dark] [class*=text-slate-700]{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-600],.inspector-window[data-color-scheme=dark] [class*=text-slate-600],.inspector-window[data-color-scheme=dark] [class*=text-gray-500],.inspector-window[data-color-scheme=dark] [class*=text-slate-500],.inspector-window[data-color-scheme=dark] [class*=text-gray-400],.inspector-window[data-color-scheme=dark] [class*=text-slate-400]{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [class*=border-gray-100],.inspector-window[data-color-scheme=dark] [class*=border-slate-100],.inspector-window[data-color-scheme=dark] [class*=border-gray-200],.inspector-window[data-color-scheme=dark] [class*=border-slate-200],.inspector-window[data-color-scheme=dark] [class*=border-gray-300],.inspector-window[data-color-scheme=dark] [class*=border-slate-300]{border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] input,.inspector-window[data-color-scheme=dark] select,.inspector-window[data-color-scheme=dark] textarea{color:#f3f4f8!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] input::placeholder,.inspector-window[data-color-scheme=dark] textarea::placeholder{color:#858996}.inspector-window[data-color-scheme=dark] ::selection{color:#fff;background-color:#5b5f92}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
9
+ var generated_default = "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-100:oklch(96.2% .044 156.743);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-700:oklch(49.6% .265 301.924);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{font-family:var(--font-sans);color:var(--color-slate-900);background-color:#0000;display:block}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:calc(var(--spacing)*0)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-auto{margin-right:auto}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-40{height:calc(var(--spacing)*40)}.h-\\[28rem\\]{height:28rem}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-7{min-height:calc(var(--spacing)*7)}.min-h-\\[20rem\\]{min-height:20rem}.min-h-\\[40px\\]{min-height:40px}.min-h-\\[420px\\]{min-height:420px}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-40{width:calc(var(--spacing)*40)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[200px\\]{max-width:200px}.max-w-\\[240px\\]{max-width:240px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.translate-x-0\\.5{--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-\\[2px\\]{--tw-translate-y:calc(2px*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-nesw-resize{cursor:nesw-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[16px\\]{border-radius:16px}.rounded-\\[28px\\]{border-radius:28px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-purple-200{border-color:var(--color-purple-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-\\[\\#00000014\\]{background-color:#00000014}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black{background-color:var(--color-black)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-100{background-color:var(--color-green-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950\\/95{background-color:#020618f2}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\\/95{background-color:color-mix(in oklab,var(--color-slate-950)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-\\[22px\\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[rgb\\(13\\,13\\,13\\)\\]{color:#0d0d0d}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-purple-700{color:var(--color-purple-700)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-950{color:var(--color-rose-950)}.text-sky-700{color:var(--color-sky-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-800{color:var(--color-slate-800)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-950{color:var(--color-violet-950)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.decoration-violet-300{-webkit-text-decoration-color:var(--color-violet-300);-webkit-text-decoration-color:var(--color-violet-300);text-decoration-color:var(--color-violet-300)}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_4px_4px_0_\\#0000000a\\,0_0_1px_0_\\#0000009e\\]{--tw-shadow:0 4px 4px 0 var(--tw-shadow-color,#0000000a),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-transparent{--tw-ring-color:transparent}.ring-white\\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.ring-white\\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-gray-500::placeholder{color:var(--color-gray-500)}.focus-within\\:shadow-\\[0_6px_18px_0_\\#00000014\\,0_0_1px_0_\\#0000009e\\]:focus-within{--tw-shadow:0 6px 18px 0 var(--tw-shadow-color,#00000014),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-white\\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/30:hover{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-blue-50\\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-50\\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\\:bg-gray-400:hover{background-color:var(--color-gray-400)}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-rose-100:hover{background-color:var(--color-rose-100)}.hover\\:bg-slate-900\\/95:hover{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-slate-900\\/95:hover{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.hover\\:bg-violet-100:hover{background-color:var(--color-violet-100)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}.hover\\:text-violet-800:hover{color:var(--color-violet-800)}.hover\\:decoration-violet-700:hover{-webkit-text-decoration-color:var(--color-violet-700);-webkit-text-decoration-color:var(--color-violet-700);text-decoration-color:var(--color-violet-700)}.hover\\:opacity-70:hover{opacity:.7}}.focus\\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\\:border-violet-400:focus{border-color:var(--color-violet-400)}.focus\\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\\:ring-violet-100:focus{--tw-ring-color:var(--color-violet-100)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:rounded:focus-visible{border-radius:.25rem}.focus-visible\\:rounded-sm:focus-visible{border-radius:var(--radius-sm)}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-rose-300:focus-visible{--tw-ring-color:var(--color-rose-300)}.focus-visible\\:ring-violet-300:focus-visible{--tw-ring-color:var(--color-violet-300)}.focus-visible\\:ring-violet-400:focus-visible{--tw-ring-color:var(--color-violet-400)}.focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-\\[\\#BEC2FF\\]:focus-visible{outline-color:#bec2ff}.focus-visible\\:outline-gray-300:focus-visible{outline-color:var(--color-gray-300)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:opacity-60:active{opacity:.6}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-60:disabled{opacity:.6}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\\[\\&\\>svg\\]\\:\\!h-8>svg{height:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:h-3>svg{height:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:h-3\\.5>svg{height:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:h-\\[18px\\]>svg{height:18px}.\\[\\&\\>svg\\]\\:\\!w-8>svg{width:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:w-3>svg{width:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:w-3\\.5>svg{width:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:w-\\[18px\\]>svg{width:18px}.\\[\\&\\>svg\\]\\:animate-spin>svg{animation:var(--animate-spin)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}.cpk-json-block{white-space:pre-wrap;word-break:break-all;color:#57575b;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;line-height:1.8;overflow:auto}.inspector-account-strip{border-bottom:1px solid #d8d8e8;width:100%;min-width:0;color:#010507!important;background:linear-gradient(90deg,#fff 0%,#f3f1ff 58%,#eefbf7 100%)!important}.inspector-account-logo{filter:none}.inspector-account-brand{position:relative}.inspector-account-logo-accent{clip-path:inset(0 0 0 80%);pointer-events:none;display:none;position:absolute;inset:0}.inspector-account-cta{isolation:isolate;color:#3f176f;white-space:nowrap;cursor:pointer;background-color:#eee6fe;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:32px;padding:7px 10px;font-size:11px;font-weight:700;line-height:1;text-decoration:none;display:inline-flex;position:relative;overflow:hidden}.inspector-account-cta:after{z-index:0;content:\"\";opacity:0;pointer-events:none;background:linear-gradient(105deg,#0000 0%,#ffffff14 32%,#ffffffad 50%,#ffffff14 68%,#0000 100%);width:68%;animation:3.8s cubic-bezier(.16,1,.3,1) infinite inspector-account-cta-shimmer;position:absolute;inset:0;transform:translate(-180%)skew(-14deg)}.inspector-account-cta>*{z-index:1;position:relative}.inspector-account-cta[data-motion-paused=true]:after{animation-play-state:paused}@keyframes inspector-account-cta-shimmer{0%{opacity:0;transform:translate(-180%)skew(-14deg)}12%{opacity:1}82%{opacity:.8}to{opacity:0;transform:translate(280%)skew(-14deg)}}.inspector-account-cta:hover{color:#32105d;background-color:#e4d8fc}.inspector-account-cta svg{width:14px;height:14px}@media (prefers-reduced-motion:reduce){.inspector-account-cta:after{animation:none}}.inspector-window-layout{position:relative}.inspector-window-layout-menu{z-index:60;color:#010507;background-color:#fff;border:1px solid #d8d8e8;border-radius:5px;width:188px;padding:4px;display:grid;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 10px 24px #1f173924}.inspector-window-layout-menu button{min-height:34px;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;border-radius:4px;align-items:center;gap:9px;padding:7px 9px;font-size:12px;font-weight:600;display:flex}.inspector-window-layout-menu button:hover,.inspector-window-layout-menu button:focus-visible{color:#3f176f;background-color:#eee6fe;outline:none}.inspector-window-layout-menu button span:first-child{flex:none;display:inline-flex}.inspector-agent-placeholder{color:#68686e;border-color:#c8c8d8}.inspector-primary-navigation,.inspector-child-navigation{display:none}.inspector-shell{background-color:#f7f6fd;flex:auto;min-height:0;display:flex}.inspector-sidebar{z-index:20;background-color:#f7f6fd;border-right:1px solid #d8d8e8;flex-direction:column;flex:none;gap:8px;width:224px;min-width:224px;padding:12px 10px;transition:width .22s,min-width .22s,padding .22s;display:flex;position:relative;overflow:visible}.inspector-snippet-sidebar{background-color:#f7f6fd;flex-direction:column;gap:8px;padding:12px 10px;display:flex;overflow:auto}.inspector-sidebar[data-icon-rail=true]{width:56px;min-width:56px;padding:10px 6px}.inspector-sidebar-agent-scope{border-bottom:1px solid #d8d8e8;flex:none;min-width:0;padding-bottom:10px}.inspector-sidebar .inspector-agent-selector{width:100%;min-width:0}.inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{background-color:#fff;border-radius:5px;max-width:none;min-height:34px;padding:6px 8px}.inspector-context-dropdown-icon{color:#68686e;display:inline-flex}.inspector-context-dropdown-icon svg,.inspector-context-dropdown-chevron svg{width:14px;height:14px}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope{padding-bottom:8px}.inspector-sidebar[data-icon-rail=true] .inspector-agent-selector>[data-context-dropdown-root=true]>button{justify-content:center;width:100%;min-height:34px;padding:6px 0}.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-label,.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-chevron,.inspector-sidebar[data-icon-rail=true] .inspector-agent-placeholder span:last-child{display:none}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope [data-context-dropdown-root=true]>div{margin-top:0;top:0;left:calc(100% + 8px)}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-section+.inspector-sidebar-section{border-top:1px solid #dbdbe5;margin-top:4px;padding-top:10px}.inspector-sidebar-nav{cursor:default;flex-direction:column;flex:auto;gap:14px;min-height:0;display:flex;overflow:hidden auto}.inspector-sidebar-section{flex-direction:column;gap:4px;display:flex}.inspector-sidebar-label{color:#838389;letter-spacing:.02em;text-align:left;text-transform:none;background:0 0;border:0;width:100%;margin:0 0 2px;padding:0 8px;font-size:11px;font-weight:600;display:block}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-label,.inspector-sidebar[data-icon-rail=true] .inspector-nav-label{display:none}.inspector-sidebar-rail-tooltip{z-index:60;color:#fff;pointer-events:none;white-space:nowrap;background-color:#242331;border-radius:6px;max-width:220px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.2;position:absolute;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 7px 18px #1a172a2e}.inspector-sidebar-control{justify-content:flex-start;width:100%;min-height:36px;display:flex;position:relative}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-control,.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-toggle,.inspector-sidebar[data-icon-rail=true] .inspector-nav-control{justify-content:center;align-items:center;gap:0;padding:6px 0;overflow:hidden}.inspector-home-badge{background-color:#fa5f67;border-radius:999px;width:7px;height:7px;position:absolute;top:8px;right:8px}.inspector-sidebar[data-icon-rail=true] .inspector-home-badge{top:6px;right:8px}.inspector-sidebar-toggle{color:#57575b;width:100%;min-height:32px;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;display:flex}.inspector-sidebar-toggle:hover{color:#010507;background-color:#f0f0f4}.inspector-sidebar-footer{flex-direction:column;flex:none;gap:6px;padding:2px 0 18px;display:flex}.inspector-sidebar-status-list{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.inspector-sidebar-status-card{color:#2b2b2b;background-color:#fff;border:1px solid #d8d8e8;border-radius:7px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;min-height:52px;padding:9px 10px;display:grid;position:relative}.inspector-sidebar-status-copy{flex-direction:column;gap:2px;min-width:0;line-height:1.25;display:flex}.inspector-sidebar-status-copy strong{color:#010507;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;overflow:hidden}.inspector-sidebar-status-copy>span{color:#57575b;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#68686e}.inspector-sidebar-status-action{color:#3f176f;white-space:nowrap;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;gap:0;width:28px;height:28px;padding:0;font-size:10px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-sidebar-status-action:hover{color:#6430ab;background-color:#eee7f8;text-decoration:none}.inspector-sidebar-status-action svg{width:12px;height:12px}.inspector-sidebar-status-action-label{display:none}.inspector-sidebar-intelligence-setup{color:#3f176f;cursor:pointer;background-color:#eee7f8;border-color:#bba5df;text-decoration:none;transition:border-color .12s,background-color .12s,box-shadow .3s;animation:3.2s ease-in-out infinite inspector-sidebar-intelligence-setup-glow}@keyframes inspector-sidebar-intelligence-setup-glow{0%,to{box-shadow:0 0 #6430ab00}50%{box-shadow:0 0 16px 2px #6430ab26}}.inspector-sidebar-intelligence-setup:hover{background-color:#e4d9f4;border-color:#8e6fc0}.inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#3f176f}.inspector-sidebar-setup-arrow{background-color:#6430ab1a;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.inspector-sidebar-setup-arrow svg{width:13px;height:13px}.inspector-main{background-color:#fff;flex-direction:column;flex:auto;min-width:0;display:flex;position:relative}.cpk-memory-locked{background-color:#fff;justify-content:center;align-items:center;height:100%;padding:32px;display:flex;position:relative;overflow:hidden}.cpk-locked-preview{opacity:.58;pointer-events:none;grid-template-columns:minmax(180px,28%) 1fr;display:grid;position:absolute;inset:0;overflow:hidden}.cpk-locked-preview-sidebar{background-color:#fafafa;border-right:1px solid #dbdbe5;flex-direction:column;gap:12px;padding:28px 24px;display:flex}.cpk-locked-preview-row{background-color:#fff;border-radius:10px;padding:12px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-row[data-accent=true]{background-color:#eee6fe}.cpk-locked-preview-bar{background-color:#d7d7df;border-radius:999px}.cpk-locked-preview-row-title{width:var(--preview-width);height:8px}.cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#a984f5}.cpk-locked-preview-row-line{background-color:#e3e3eb;width:88%;height:6px;margin-top:10px}.cpk-locked-preview-row-line:last-child{background-color:#e8e8ef;width:62%;margin-top:7px}.cpk-locked-preview-main{background-color:#fff;min-width:0;padding:42px 48px}.cpk-locked-preview-heading{width:180px;height:10px}.cpk-locked-preview-copy{background-color:#e3e3eb;width:min(520px,58%);height:8px;margin-top:28px}.cpk-locked-preview-copy+.cpk-locked-preview-copy{background-color:#e8e8ef;width:min(430px,48%);margin-top:12px}.cpk-locked-preview-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;max-width:620px;margin-top:30px;display:grid}.cpk-locked-preview-card{background-color:#f5f5f8;border-radius:10px;height:116px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-footer-line{background-color:#e3e3eb;width:min(680px,74%);height:10px;margin-top:34px}.cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#e8e8ef;width:min(560px,60%);margin-top:14px}.cpk-memory-locked-scrim{pointer-events:none;background:radial-gradient(circle,#ffffffe6 0,#ffffffc7 24%,#ffffff57 48%,#ffffff8f 100%);position:absolute;inset:0}.cpk-memory-locked-content{z-index:1;color:#57575b;text-align:center;max-width:440px;position:relative}.cpk-memory-locked-icon-wrap{justify-content:center;margin:0 auto 18px;display:flex}.cpk-memory-locked-icon{color:#57575b;background-color:#eee6fe;border:1px solid #dfd6fb;border-radius:10px;justify-content:center;align-items:center;width:44px;height:44px;display:flex;box-shadow:0 8px 18px #57575b24}.cpk-memory-locked-title{color:#010507;margin:0 0 8px;font-size:16px;font-weight:600;line-height:1.35}.cpk-memory-locked-copy{color:#57575b;max-width:380px;margin:0 auto 18px;font-size:13px;line-height:1.55}.cpk-memory-locked-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.cpk-memory-locked-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:5px;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;text-decoration:none;display:inline-flex}.cpk-memory-locked-action:hover{background-color:#4e238c;border-color:#4e238c}.cpk-memory-locked-action-secondary{color:#57575b;background-color:#fff;border-color:#dbdbe5}.cpk-memory-locked-action-secondary:hover{background-color:#f7f7f9;border-color:#afafb7}.inspector-home{background-color:#fff;min-height:100%;padding:30px 32px 40px;position:relative;overflow:auto}.inspector-home:before{display:none}.inspector-home>*{width:min(100%,960px);margin-left:auto;margin-right:auto}.inspector-settings{color:#010507;background-color:#fff;min-height:100%;padding:28px 28px 36px;overflow:auto}.inspector-settings-header{border-bottom:1px solid #d5d3e4;max-width:70ch;padding-bottom:22px}.inspector-settings-title{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-settings-subtitle{color:#57575b;max-width:60ch;margin:10px 0 0;font-size:14px;line-height:1.5}.inspector-settings-section{grid-template-columns:minmax(138px,168px) minmax(0,1fr);gap:30px;max-width:820px;margin-top:28px;display:grid}.inspector-settings-section-heading{align-items:flex-start;gap:10px;display:flex}.inspector-settings-section-icon{color:#3f176f;background-color:#eee6fe;border:1px solid #bec2ff;border-radius:5px;flex:none;justify-content:center;align-items:center;width:30px;height:30px;display:inline-flex}.inspector-settings-section-icon svg{width:16px;height:16px}.inspector-settings-section-heading h2,.inspector-settings-status-row h3{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-weight:600}.inspector-settings-section-heading h2{font-size:15px;line-height:1.3}.inspector-settings-section-heading p{color:#68686e;margin:5px 0 0;font-size:11px;line-height:1.45}.inspector-settings-privacy{border-top:1px solid #d5d3e4;border-bottom:1px solid #d5d3e4;padding:20px 0 22px}.inspector-settings-status-row{justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.inspector-settings-status-row h3{font-size:16px;line-height:1.3}.inspector-settings-status-row p{color:#57575b;max-width:56ch;margin:8px 0 0;font-size:13px;line-height:1.55}.inspector-settings-status{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;min-height:24px;padding:3px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#7d4d0a;background-color:#fff5df;border-color:#dfc08f}.inspector-settings-private-content{border-top:1px solid #e4e4ec;margin-top:20px;padding-top:18px}.inspector-settings-private-content strong{color:#010507;font-size:13px;font-weight:700}.inspector-settings-private-content>p{color:#68686e;margin:4px 0 0;font-size:11px;line-height:1.45}.inspector-settings-private-content ul{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;margin:12px 0 0;display:grid}.inspector-settings-private-content li{color:#3e3d48;align-items:center;gap:7px;min-width:0;font-size:12px;line-height:1.35;display:flex}.inspector-settings-private-content li span{color:#087653;flex:none;display:inline-flex}.inspector-settings-private-content li svg{width:14px;height:14px}.inspector-settings-policy-link{color:#3f176f;text-underline-offset:3px;outline-offset:2px;outline:2px solid #0000;align-items:center;gap:6px;min-height:32px;margin-top:20px;font-size:12px;font-weight:700;text-decoration:underline;text-decoration-thickness:1px;display:inline-flex}.inspector-settings-policy-link:hover{color:#6430ab}.inspector-settings-policy-link:focus-visible{outline-color:#6430ab}.inspector-settings-policy-link svg{width:14px;height:14px}@media (max-width:720px){.inspector-settings{padding:24px 20px 32px}.inspector-settings-section{grid-template-columns:1fr;gap:18px}.inspector-settings-section-heading p{max-width:42ch}}@media (max-width:480px){.inspector-settings-status-row{flex-direction:column;gap:12px}.inspector-settings-private-content ul{grid-template-columns:1fr}}.inspector-home-card,.inspector-home-story{background-color:#ffffffd1;border:1px solid #deddea;border-radius:5px;padding:18px 18px 16px;position:relative}.inspector-home-eyebrow,.inspector-home-card-label,.inspector-home-meta{color:#57575b;margin:0;font-size:12px;font-weight:600}.inspector-home-title,.inspector-home-section-title,.inspector-home-card-title{color:#010507;margin:8px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-home-section-title{letter-spacing:-.015em;margin:0 0 14px;font-size:17px}.inspector-home-card-title{font-size:16px}.inspector-home-body,.inspector-home-card-copy{color:#57575b;max-width:52ch;margin:10px 0 0;font-size:15px;line-height:1.5}.inspector-home-section{margin-top:24px;position:relative}.inspector-home>.inspector-home-section:first-child{margin-top:0}.inspector-whats-new-preview+.inspector-home-section{margin-top:20px}.inspector-home-section-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px;display:flex}.inspector-home-section-header .inspector-home-section-title{margin-bottom:0}.inspector-home-section-header>span{color:#68686e;font-size:11px;font-weight:600;line-height:1.35}.inspector-system-health-header>span[data-tone=success]{color:#087653}.inspector-system-health-header>span[data-tone=checking]{color:#8a5900}.inspector-system-health-header>span[data-tone=offline],.inspector-system-health-header>span[data-tone=error]{color:#b32d3b}.inspector-system-health-section{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-system-health-section .inspector-system-health-header{background-color:#f7f4fe;border-bottom:1px solid #d5d3e4;align-items:center;min-height:76px;margin:0;padding:18px}.inspector-system-health-heading{min-width:0}.inspector-system-health-heading .inspector-home-section-title{color:#010507;letter-spacing:-.025em;font-size:18px}.inspector-system-health-state,.inspector-intelligence-hud-state{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:24px;padding:4px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-system-health-state>span,.inspector-intelligence-hud-state>span{background-color:currentColor;border-radius:999px;width:6px;height:6px}.inspector-system-health-state[data-tone=checking],.inspector-intelligence-hud-state[data-tone=checking]{background-color:#fff5df;border-color:#dfc08f;color:#7d4d0a!important}.inspector-system-health-state[data-tone=offline],.inspector-system-health-state[data-tone=error],.inspector-intelligence-hud-state[data-tone=offline],.inspector-intelligence-hud-state[data-tone=error]{background-color:#fff0f1;border-color:#e7a7ac;color:#b32d3b!important}.inspector-system-health-state[data-tone=unavailable],.inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#f0f0f4;border-color:#c8c8d2;color:#57575b!important}.inspector-system-health{background-color:#d5d3e4;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.inspector-system-health-signal{background-color:#fff;grid-template-columns:minmax(0,1fr);align-items:start;min-width:0;min-height:84px;padding:15px 16px 14px;display:grid}.inspector-system-health-copy{flex-direction:column;min-width:0;display:flex}.inspector-system-health-signal dt{color:#68686e;letter-spacing:.035em;text-transform:uppercase;font-size:10px;font-weight:700;line-height:1.3}.inspector-system-health-signal dd{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:15px;font-weight:700;overflow:hidden}.inspector-system-health-signal small{color:#68686e;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-top:4px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;line-height:1.4;overflow:hidden}small.inspector-system-health-detail{letter-spacing:0;font-family:inherit;font-size:11px;font-weight:500;line-height:1.4}.inspector-system-health-url{cursor:help;outline:none;position:relative;overflow:visible!important}.inspector-system-health-url>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-url:after{z-index:30;color:#f3f4f8;content:attr(data-full-value);opacity:0;overflow-wrap:anywhere;pointer-events:none;white-space:normal;background-color:#15171e;border:1px solid #3a3d49;border-radius:4px;width:max-content;max-width:min(360px,70vw);padding:7px 9px;font-size:10px;font-weight:500;line-height:1.45;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 7px);left:0;transform:translateY(3px);box-shadow:0 8px 20px #0105072e}.inspector-system-health-url:hover:after,.inspector-system-health-url:focus-visible:after{opacity:1;transform:translateY(0)}.inspector-system-health-url:focus-visible>span{outline-offset:2px;border-radius:3px;outline:2px solid #6430ab}.inspector-system-health-signal[data-tone=success] dd{color:#087653}.inspector-system-health-signal[data-tone=active] dd{color:#8a5900}.inspector-system-health-event-link{width:100%;min-width:0;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;padding:0;display:block}.inspector-system-health-event-link>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-event-link>.inspector-system-health-event-type{color:#57575b;letter-spacing:.025em;background-color:#f1f1f3;border-radius:999px;align-items:center;width:fit-content;max-width:100%;padding:3px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;line-height:1.25;display:inline-flex}.inspector-system-health-event-link>small{color:#68686e;align-items:center;gap:6px;margin:5px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:10px;font-weight:500;line-height:1.25;display:flex}.inspector-system-health-event-meta strong{color:#6430ab;text-underline-offset:3px;font-weight:700;-webkit-text-decoration:underline #0000;text-decoration:underline #0000}.inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#b32d3b;background-color:#fff0f1}.inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#087653;background-color:#e3f5ee}.inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#8a5900;background-color:#fff5df}.inspector-system-health-event-link:hover .inspector-system-health-event-meta strong{text-decoration-color:currentColor}.inspector-system-health-event-link:focus-visible{outline-offset:3px;border-radius:3px;outline:2px solid #6430ab}.inspector-intelligence-hud{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-intelligence-hud-header{justify-content:space-between;align-items:center;gap:24px;padding:18px;display:flex}.inspector-intelligence-hud[data-state=disconnected]{border-color:#bba5df}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header{align-items:center;min-height:132px;padding:22px}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header-actions{flex-direction:column;align-items:flex-end;gap:10px}.inspector-intelligence-hud-heading{min-width:0}.inspector-intelligence-hud-header-actions{flex:none;align-items:center;gap:8px;display:flex}.inspector-intelligence-hud-heading .inspector-home-section-title{margin:0;font-size:18px}.inspector-intelligence-hud-description{color:#4f4f55;max-width:64ch;margin:10px 0 0;font-size:12px;line-height:1.55}.inspector-intelligence-hud-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:4px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:8px 11px;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:11px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-intelligence-hud-action:hover{background-color:#4e238c;border-color:#4e238c}.inspector-intelligence-hud-action svg{width:13px;height:13px}.inspector-intelligence-hud-connect-action{min-height:38px;padding:10px 14px;font-size:12px}.inspector-intelligence-hud-details{background-color:#d5d3e4;border-top:1px solid #d5d3e4;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:1px;display:grid}.inspector-intelligence-hud-details>section{background-color:#fff;min-width:0;padding:15px 18px 17px}.inspector-intelligence-hud-detail-label{color:#68686e;font-size:11px;font-weight:600;display:block}.inspector-intelligence-hud-detail-value{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:14px;font-weight:700;display:block;overflow:hidden}.inspector-intelligence-hud-detail-subvalue{color:#68686e;text-transform:capitalize;margin-top:3px;font-size:10px;font-weight:500;display:block}.inspector-intelligence-hud-plan{grid-template-columns:minmax(0,1fr) minmax(120px,1fr);align-items:start;gap:24px;display:grid}.inspector-intelligence-hud-usage{min-width:0}.inspector-intelligence-hud-plan-action{color:#6430ab;text-underline-offset:3px;background-color:#0000;border:0;border-radius:0;gap:4px;min-height:auto;margin-top:9px;padding:0;font-size:10px;font-weight:700;line-height:1.2;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:1px}.inspector-intelligence-hud-plan-action:hover{color:#4e238c;background-color:#0000;border-color:#0000;text-decoration-color:currentColor}.inspector-intelligence-hud-plan-action svg{width:11px;height:11px}.inspector-home-usage-bar{background-color:#dbdbe5;border-radius:999px;width:min(160px,100%);height:5px;margin-top:8px;display:block;overflow:hidden}.inspector-home-usage-bar>span{background-color:#bec2ff;height:100%;display:block}.inspector-home-feature-groups{grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));align-items:start;gap:12px;display:grid}.inspector-home-feature-group{background-color:#fff;border:1px solid #d5d3e4;border-radius:5px;overflow:hidden}.inspector-home-feature-group-header{color:#57575b;background-color:#f7f7f9;border-bottom:1px solid #e4e4ec;justify-content:space-between;align-items:center;gap:12px;min-height:40px;padding:9px 12px;display:flex}.inspector-home-feature-group-header strong{font-size:12px;font-weight:700}.inspector-home-feature-group-header>span{background-color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:22px;min-height:20px;padding:2px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#087653;background-color:#e5f7f1;border-color:#b9e3d6}.inspector-home-feature-list{background-color:#fff;flex-direction:column;margin:0;display:flex}.inspector-home-feature{color:#010507;background-color:#fff;grid-template-columns:minmax(0,1fr) auto 14px;align-items:center;gap:8px;min-width:0;min-height:43px;padding:10px 12px;font-size:12px;font-weight:600;text-decoration:none;display:grid}.inspector-home-feature+.inspector-home-feature{border-top:1px solid #ececf1}.inspector-home-feature-group-empty{color:#68686e;margin:0;padding:15px 12px;font-size:11px}.inspector-home-feature:hover{background-color:#f7f7f9}.inspector-home-feature-arrow svg{width:12px;height:12px}.inspector-home-feature small{color:#087653;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700}.inspector-home-feature[data-state=off],.inspector-home-feature[data-state=off] small,.inspector-home-feature-arrow{color:#68686e}.inspector-home-features-empty{color:#57575b;border-top:1px solid #deddea;border-bottom:1px solid #deddea;margin:14px 0 0;padding:16px 0;font-size:12px}.inspector-home-news{gap:12px;display:grid}.inspector-whats-new-preview{color:#010507;background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;align-items:stretch;width:100%;min-height:64px;display:flex;position:relative;overflow:hidden;container-type:inline-size}.inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background-color:#f1ebfc;border-color:#8f91d7}.inspector-whats-new-preview-body{min-width:0;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;flex:auto;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 14px;display:grid}.inspector-whats-new-preview-copy{flex-direction:column;gap:3px;min-width:0;display:flex}.inspector-whats-new-preview-title{align-items:center;gap:8px;min-width:0;display:flex}.inspector-whats-new-preview-copy strong{text-overflow:ellipsis;white-space:nowrap;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:13px;line-height:1.25;overflow:hidden}.inspector-whats-new-preview-copy>span:last-child{color:#4e4c63;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.4;overflow:hidden}.inspector-whats-new-preview-action{color:#3f176f;white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:11px;font-weight:700;display:inline-flex}.inspector-whats-new-preview-action svg{width:15px;height:15px}@container (max-width:640px){.inspector-whats-new-preview-body{grid-template-columns:minmax(0,1fr)}.inspector-whats-new-preview-action{display:none}}.inspector-whats-new-preview-dismiss{color:#68686e;cursor:pointer;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.inspector-whats-new-preview-dismiss:hover{color:#3f176f;background-color:#6430ab1a}.inspector-whats-new-preview-dismiss svg{width:14px;height:14px}@media (max-width:720px){.inspector-account-cta{width:32px;padding-inline:0}.inspector-account-cta-label{display:none}.inspector-home{padding:24px 22px 34px}.inspector-intelligence-hud-header{flex-wrap:wrap}.inspector-intelligence-hud-details{grid-template-columns:1fr}.inspector-intelligence-hud-plan{grid-template-columns:repeat(2,minmax(0,1fr))}.inspector-whats-new-preview-action{display:none}}@media (max-width:600px){.inspector-system-health{grid-template-columns:1fr}}@media (max-width:480px){.inspector-system-health-section .inspector-system-health-header{align-items:flex-start}.inspector-intelligence-hud-header{flex-direction:column;align-items:stretch}.inspector-intelligence-hud-header-actions{justify-content:space-between}.inspector-intelligence-hud-header-actions .inspector-intelligence-hud-action,.inspector-intelligence-hud-plan{width:100%}.inspector-intelligence-hud-plan{grid-template-columns:1fr;align-items:stretch}.inspector-intelligence-hud-plan-action{justify-self:start}.inspector-whats-new-header{align-items:center;gap:16px;width:calc(100% - 24px);padding:24px 22px}.inspector-whats-new-document,.inspector-whats-new-empty{padding:20px 22px 36px}.inspector-whats-new-document .announcement-content h1+p{font-size:16px}}.inspector-whats-new-header{background:#f8f7ff;border:1px solid #d8d8e8;border-radius:5px;justify-content:space-between;align-items:center;gap:24px;width:calc(100% - 44px);max-width:calc(70ch - 44px);padding:30px 32px 28px;display:flex;box-shadow:0 12px 28px #26224e0f}.inspector-whats-new-header .inspector-home-title{letter-spacing:-.035em;margin:0;font-size:clamp(27px,3.6vw,36px)}.inspector-whats-new-updated{color:#6c687c;letter-spacing:.01em;white-space:nowrap;flex:none;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;font-weight:600}.inspector-whats-new .inspector-home-news{max-width:70ch;margin-top:0}.inspector-whats-new-document,.inspector-whats-new-empty{max-width:70ch;padding:22px 32px 52px}.inspector-whats-new-document .announcement-content{color:#2b2b39;font-size:15px;line-height:1.72}.inspector-whats-new-document .announcement-content h1{color:#15131d;letter-spacing:-.032em;max-width:24ch;margin:0 0 16px;font-size:clamp(26px,3.2vw,34px);line-height:1.1}.inspector-whats-new-document .announcement-content h1+p{color:#504d61;max-width:58ch;margin-top:0;font-size:18px;line-height:1.58}.inspector-whats-new-document .announcement-content>hr:first-child{display:none}.inspector-whats-new-document .announcement-content h2:first-of-type{border-top:0;margin-top:14px;padding-top:0}.inspector-whats-new-document .announcement-content h2{color:#1b1924;letter-spacing:-.024em;border-top:1px solid #dfdeea;margin:44px 0 14px;padding-top:24px;font-size:21px;line-height:1.2}.inspector-whats-new-document .announcement-content p{max-width:70ch;margin:.85rem 0}.inspector-whats-new-document .announcement-content ul,.inspector-whats-new-document .announcement-content ol{max-width:68ch;margin:1.25rem 0 1.5rem;padding-left:1.4rem}.inspector-whats-new-document .announcement-content li+li{margin-top:.7rem}.inspector-whats-new-document .announcement-content a{color:#4e46a5;text-underline-offset:4px;font-weight:600;text-decoration-color:#4e46a56b;text-decoration-thickness:1px;transition:color .16s,text-decoration-color .16s}.inspector-whats-new-document .announcement-content a:hover{color:#312879;text-decoration-color:currentColor}.inspector-whats-new-empty{color:#5e5b70}.inspector-whats-new-empty .inspector-home-card-title{color:#1b1924;margin:0}.inspector-whats-new-empty .inspector-home-card-copy{max-width:48ch;margin:8px 0 0}.inspector-home-story-featured{padding:22px}.inspector-home-story-link{color:inherit;cursor:pointer;text-decoration:none;display:block}.inspector-home-story-link:hover{background-color:#fff;border-color:#8f91d7}.inspector-home-story[data-unread=true]{border-color:#bec2ff;padding-right:64px;box-shadow:0 0 0 1px #6430ab}.inspector-home-story-unread{color:#fff;letter-spacing:.04em;text-transform:uppercase;background-color:#6430ab;border-radius:999px;align-items:center;min-height:18px;padding:0 7px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-nav-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;transition:opacity .18s,width .22s;overflow:hidden}.inspector-nav-control{color:#57575b;min-height:32px;font:inherit;text-align:left;outline-offset:-2px;cursor:pointer;background-color:#0000;border:1px solid #0000;border-radius:5px;outline:2px solid #0000;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;line-height:1.25;display:flex}.inspector-nav-control:hover{color:#010507;background-color:#f0f0f4}.inspector-nav-control-active{color:#3f176f;background-color:#eee6fe;border-color:#bec2ff}.inspector-nav-icon{flex:none;align-items:center;display:inline-flex}.inspector-nav-icon svg{width:15px;height:15px}.inspector-nav-control:focus-visible,.inspector-account-control:focus-visible,[data-inspector-thread-cta]:focus-visible,[data-inspector-sidebar-intelligence-action]:focus-visible,[data-inspector-whats-new-preview]:focus-visible,[data-inspector-whats-new-dismiss]:focus-visible,[data-inspector-home-intelligence-action]:focus-visible,.inspector-home-feature:focus-visible,[data-inspector-action-placement=threads-footer]:focus-visible{outline-offset:2px;outline:2px solid #6430ab!important}.inspector-sidebar .inspector-nav-control:focus-visible,.inspector-sidebar .inspector-sidebar-label:focus-visible,.inspector-sidebar [data-inspector-thread-cta]:focus-visible{outline-offset:-2px!important}.inspector-account-control{color:#57575b;font:inherit;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #0000;outline:2px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.inspector-account-control:hover,.inspector-account-control-active{color:#3f176f;background-color:#6430ab17}:host ::selection{color:#010507;background-color:#cfd2ff}:host *{scrollbar-color:#aaa9c1 transparent;scrollbar-width:thin}:host ::-webkit-scrollbar{width:8px;height:8px}:host ::-webkit-scrollbar-thumb{background:#aaa9c1 padding-box padding-box;border:2px solid #0000;border-radius:999px}.inspector-account-control-icon{flex:none;justify-content:center;align-items:center;display:inline-flex}.inspector-account-control-icon svg{width:15px;height:15px}[data-inspector-thread-cta],[data-inspector-account-strip] button,[data-inspector-account-strip] a{cursor:pointer}@media (prefers-reduced-motion:reduce){.inspector-sidebar,.inspector-nav-label{transition:none}}[data-inspector-threads-setup-prompt],[data-inspector-threads-setup-link]{min-height:34px;font:inherit;outline-offset:2px;cursor:pointer;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-threads-setup-prompt]{color:#fff;background-color:#010507;border-color:#010507}[data-inspector-threads-setup-prompt]:hover{background-color:#2b2b2b;border-color:#2b2b2b}[data-inspector-threads-setup-link]{color:#57575b;background-color:#fff}[data-inspector-threads-setup-link]:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}[data-inspector-threads-setup-prompt]:focus-visible,[data-inspector-threads-setup-link]:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.inspector-threads-footer{color:#57575b;background-color:#f7f7f9;border-top:1px solid #dbdbe5;flex:none;gap:10px;padding:12px;font-size:11px;line-height:1.35;display:grid}.inspector-threads-usage{gap:6px;display:grid}[data-inspector-thread-count]{color:#010507;font-weight:600}[data-inspector-thread-expiry]{color:#57575b}.inspector-thread-progress{--inspector-thread-progress-color:#189370;width:100%;height:6px;accent-color:var(--inspector-thread-progress-color);border-radius:999px;overflow:hidden}.inspector-thread-progress[data-inspector-thread-capacity=warning]{--inspector-thread-progress-color:#b45309}.inspector-thread-progress[data-inspector-thread-capacity=critical]{--inspector-thread-progress-color:#be123c}.inspector-thread-progress::-webkit-progress-bar{background-color:#dbdbe5;border-radius:999px}.inspector-thread-progress::-webkit-progress-value{background-color:var(--inspector-thread-progress-color);border-radius:999px}.inspector-thread-progress::-moz-progress-bar{background-color:var(--inspector-thread-progress-color);border-radius:999px}[data-inspector-action-placement=threads-footer]{color:#57575b;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #d5d3e4;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;width:100%;min-height:32px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]{color:#fff;background-color:#6430ab;border-color:#6430ab}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]:hover{color:#fff;background-color:#3f176f;border-color:#3f176f}[data-inspector-action-placement=threads-footer]:hover{color:#010507;background-color:#f7f4fe;border-color:#c8c6e6}.cpk-threads-overview-video{opacity:0;transition:opacity .22s}.cpk-threads-overview{background-color:#f7f7f9;flex:1;justify-content:center;align-items:center;min-width:0;padding:32px;display:flex}.cpk-threads-overview-content{color:#57575b;width:100%;max-width:440px}.cpk-threads-overview-title{color:#010507;margin:0 0 10px;font-size:20px;font-weight:600;line-height:1.25}.cpk-threads-overview-copy{color:#57575b;margin:0 0 16px;font-size:13px;line-height:1.55}.cpk-threads-overview-actions{flex-wrap:wrap;gap:8px;display:flex}.cpk-threads-overview-action{outline-offset:2px;border:1px solid #0000;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}.cpk-threads-overview-action-primary{color:#fff;background-color:#010507;border-color:#010507}.cpk-threads-overview-action-primary:hover{background-color:#2b2b2b;border-color:#2b2b2b}.cpk-threads-overview-action-secondary{color:#010507;background-color:#fff;border-color:#dbdbe5}.cpk-threads-overview-action-secondary:hover{background-color:#fff;border-color:#afafb7}.cpk-threads-overview-video[data-loaded=true]{opacity:1}.cpk-threads-overview-video-control{color:#3f176f;min-height:32px;font:inherit;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;margin:0 0 14px;padding:6px 10px;font-size:12px;font-weight:600;line-height:1.25;display:inline-flex}.cpk-threads-overview-video-control:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}.cpk-threads-overview-video-control:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.cpk-threads-overview-video-fallback{color:#57575b;max-width:440px;margin:-4px 0 14px;font-size:12px;line-height:1.5}.cpk-threads-tour-launch{z-index:2;color:#57575b;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600;position:absolute;bottom:16px;right:16px;box-shadow:0 8px 18px #01050714}.cpk-threads-tour{z-index:3;color:#57575b;background-color:#fff;border:1px solid #dbdbe5;border-radius:10px;width:min(340px,100% - 32px);padding:14px;position:absolute;bottom:16px;right:16px;box-shadow:0 16px 36px #01050724}.cpk-threads-tour-step{color:#087653;text-transform:uppercase;margin-bottom:8px;font-family:Spline Sans Mono,monospace;font-size:10px;font-weight:600}.cpk-threads-tour-title{color:#010507;margin-bottom:6px;font-size:14px;font-weight:600;line-height:1.35}.cpk-threads-tour-copy{color:#57575b;font-size:12px;line-height:1.5}.cpk-threads-tour-actions{justify-content:space-between;gap:8px;margin-top:14px;display:flex}.cpk-threads-tour-nav{gap:8px;display:flex}.cpk-threads-tour-skip,.cpk-threads-tour-button{font:inherit;outline-offset:2px;cursor:pointer;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600}.cpk-threads-overview-action:focus-visible,.cpk-threads-tour-launch:focus-visible,.cpk-threads-tour-skip:focus-visible,.cpk-threads-tour-button:focus-visible{outline-color:#6430ab}.cpk-threads-tour-skip{color:#68686e;background-color:#0000;border:0;padding-inline:0}.cpk-threads-tour-button-secondary{color:#57575b;background-color:#fff;border:1px solid #dbdbe5}.cpk-threads-tour-button-primary{color:#fff;background-color:#010507;border:1px solid #010507}.cpk-threads-tour-button:disabled{cursor:not-allowed;opacity:.45}@media (max-width:720px){.cpk-threads-overview{padding:24px}}@media (prefers-reduced-motion:reduce){.cpk-threads-overview-video{transition:none}}.inspector-window[data-color-scheme=dark]{color-scheme:dark;color:#f3f4f8!important;background-color:#111319!important;border-color:#7b7d89!important}.inspector-window[data-color-scheme=dark]>div,.inspector-window[data-color-scheme=dark] .inspector-shell,.inspector-window[data-color-scheme=dark] .inspector-main,.inspector-window[data-color-scheme=dark] #cpk-main-scroll{color:#f3f4f8!important;background-color:#111319!important}.inspector-window[data-color-scheme=dark] .drag-handle,.inspector-window[data-color-scheme=dark] .inspector-account-strip{color:#f3f4f8!important;background:#171a22!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-logo{filter:brightness(0)invert();clip-path:inset(0 20% 0 0)}.inspector-window[data-color-scheme=dark] .inspector-account-logo-accent{filter:none;display:block}.inspector-window[data-color-scheme=dark] .inspector-agent-placeholder{color:#b8bbc7!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-control{color:#b8bbc7!important;border:0!important}.inspector-window[data-color-scheme=dark] .inspector-account-control:hover,.inspector-window[data-color-scheme=dark] .inspector-account-control-active{color:#d8d9ff!important;background-color:#292c38!important}.inspector-window[data-color-scheme=dark] .inspector-account-cta{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-account-cta:hover{color:#fff;background-color:#353854}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu{color:#f3f4f8;background-color:#191c24;border-color:#464957;box-shadow:0 12px 28px #00000052}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:hover,.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:focus-visible{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{color:#f3f4f8!important;background-color:#20232c!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button:hover{background-color:#292c38!important;border-color:#777aae!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button>span:last-child{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div{color:#f3f4f8!important;box-shadow:none!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:hover,.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:focus{color:#f3f4f8!important;background-color:#343746!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar,.inspector-window[data-color-scheme=dark] .inspector-snippet-sidebar{color:#f3f4f8;background-color:#15171e;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-label{color:#8f93a1}.inspector-window[data-color-scheme=dark] .inspector-sidebar-rail-tooltip{color:#191c24;background-color:#e9e9f1;box-shadow:0 7px 18px #00000047}.inspector-window[data-color-scheme=dark] .inspector-nav-control,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle{color:#b8bbc7}.inspector-window[data-color-scheme=dark] .inspector-nav-control:hover,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle:hover{color:#fff;background-color:#22252f}.inspector-window[data-color-scheme=dark] .inspector-nav-control-active{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-agent-scope{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy>span,.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action:hover{color:#fff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup:hover{background-color:#343653;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-setup-arrow{background-color:#caccff1f}@media (prefers-reduced-motion:reduce){.inspector-sidebar-intelligence-setup{animation:none}}.inspector-window[data-color-scheme=dark] .inspector-home{background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings-header,.inspector-window[data-color-scheme=dark] .inspector-settings-privacy,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-settings-title,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading h2,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row h3,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-settings-subtitle,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading p,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row p,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content>p{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-settings-section-icon{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li span{color:#75d8b9}.inspector-window[data-color-scheme=dark] .inspector-settings-status{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#f2cf8f;background-color:#342916;border-color:#866932}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link:hover{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-home-card,.inspector-window[data-color-scheme=dark] .inspector-home-story,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud,.inspector-window[data-color-scheme=dark] .inspector-home-feature-list,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview{color:#f3f4f8;background:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected]{background-color:#1d1e2b;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-description{color:#c5c7d0}.inspector-window[data-color-scheme=dark] .inspector-system-health,.inspector-window[data-color-scheme=dark] .inspector-system-health-section{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-section{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-section .inspector-system-health-header{background-color:#191c24;border-bottom-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-event-link>small{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=success]{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=success],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=success]{background-color:#173b32;border-color:#347d69;color:#8ce1c5!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=checking],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=checking]{background-color:#342916;border-color:#866932;color:#f2cf8f!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=error],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=error]{background-color:#3b1c22;border-color:#87424a;color:#ff9aa0!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=unavailable],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#242731;border-color:#464957;color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=checking]{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=error]{color:#ff9aa0}.inspector-window[data-color-scheme=dark] .inspector-home-story-link:hover,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background:#242131;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-home-title,.inspector-window[data-color-scheme=dark] .inspector-home-section-title,.inspector-window[data-color-scheme=dark] .inspector-home-card-title,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dd,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-value,.inspector-window[data-color-scheme=dark] .inspector-home-feature{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-home-eyebrow,.inspector-window[data-color-scheme=dark] .inspector-home-card-label,.inspector-window[data-color-scheme=dark] .inspector-home-meta,.inspector-window[data-color-scheme=dark] .inspector-home-body,.inspector-window[data-color-scheme=dark] .inspector-home-card-copy,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dt,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal small,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-heading p,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-label,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-subvalue,.inspector-window[data-color-scheme=dark] .inspector-home-section-header>span,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-copy>span:last-child{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details{background-color:#3a3d49;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section{background-color:#15171e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action:hover{color:#fff;background-color:#0000;border-color:#0000}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal+.inspector-system-health-signal,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section+section,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details,.inspector-window[data-color-scheme=dark] .inspector-home-features-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] dd,.inspector-window[data-color-scheme=dark] .inspector-home-feature small{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] dd{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#ff9aa0;background-color:#3b1c22}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#8ce1c5;background-color:#173b32}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#f2cf8f;background-color:#342916}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header{color:#c9ccd6;background-color:#20232d;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header>span{color:#c9ccd6;background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-home-feature{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature:hover{background-color:#20232d}.inspector-window[data-color-scheme=dark] .inspector-home-feature+.inspector-home-feature{border-color:#2f323d}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-empty{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off] small,.inspector-window[data-color-scheme=dark] .inspector-home-feature-arrow{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss:hover{color:#fff;background-color:#302a40}.inspector-window[data-color-scheme=dark] .inspector-home-usage-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-thread-progress::-webkit-progress-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-header{box-shadow:none;background-color:#1d1e2b;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-updated,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-action{color:#d8d9ff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:hover .inspector-whats-new-preview-action{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty .inspector-home-card-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1+p{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2{border-top-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h3,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content a{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-threads-footer{color:#aeb1bd;background-color:#15171e;border-color:#343742}.inspector-window[data-color-scheme=dark] [data-inspector-thread-count]{color:#f3f4f8}.inspector-window[data-color-scheme=dark] [data-inspector-thread-expiry]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]:hover{color:#fff;background-color:#20232d;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-content,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-copy,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-fallback,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-title,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-frame{background:linear-gradient(135deg,#666a9e3d,#347d6929),#191c24;border-color:#3a3d49;box-shadow:0 8px 20px #00000038}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary{color:#171823;background-color:#caccff;border-color:#caccff}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary:hover{background-color:#d8d9ff;border-color:#d8d9ff}.inspector-window[data-color-scheme=dark] .cpk-threads-tour{color:#aeb1bd;background-color:#191c24;border-color:#464957;box-shadow:0 16px 36px #00000052}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-step{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button:focus-visible{outline-color:#bec2ff}.inspector-window[data-color-scheme=dark] .cpk-memory-locked{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-sidebar{background-color:#15171e;border-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-main{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true]{background-color:#292b43}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-bar{background-color:#333641}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line{background-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line:last-child,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy+.cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#292c36}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-card{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-scrim{background:radial-gradient(circle,#111319f0 0,#111319d6 24%,#11131975 48%,#111319ad 100%)}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-content,.inspector-window[data-color-scheme=dark] .cpk-memory-locked-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-icon{color:#d8d9ff;box-shadow:none;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-agent-overview,.inspector-window[data-color-scheme=dark] .cpk-section-card{background-color:#191c24!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header{background-color:#242731!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header h4{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] .cpk-agent-icon{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] .cpk-stat-card{background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] button.cpk-stat-card:hover{background-color:#20232d!important}.inspector-window[data-color-scheme=dark] .cpk-agent-view .divide-gray-200>:not([hidden])~:not([hidden]){border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-json-block{color:#c9ccd6}.inspector-window[data-color-scheme=dark] [class*=bg-emerald-50],.inspector-window[data-color-scheme=dark] [class*=bg-green-100]{color:#8ce1c5!important;background-color:#173b32!important}.inspector-window[data-color-scheme=dark] [class*=bg-rose-50]{color:#ff9aa0!important;background-color:#3b1c22!important}.inspector-window[data-color-scheme=dark] [data-cpk-event-error] p,.inspector-window[data-color-scheme=dark] [data-playground-error] p{color:inherit!important}.inspector-window[data-color-scheme=dark] [class*=bg-amber-50],.inspector-window[data-color-scheme=dark] [class*=bg-amber-100]{color:#f2cf8f!important;background-color:#342916!important}.inspector-window[data-color-scheme=dark] [class*=bg-blue-50],.inspector-window[data-color-scheme=dark] [class*=bg-blue-100],.inspector-window[data-color-scheme=dark] [class*=bg-sky-50],.inspector-window[data-color-scheme=dark] [class*=bg-violet-50],.inspector-window[data-color-scheme=dark] [class*=bg-purple-50],.inspector-window[data-color-scheme=dark] [class*=bg-fuchsia-50]{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] [class*=bg-white]{background-color:#191c24!important}.inspector-window[data-color-scheme=dark] [class*=bg-gray-50],.inspector-window[data-color-scheme=dark] [class*=bg-slate-50],.inspector-window[data-color-scheme=dark] [class*=bg-gray-100],.inspector-window[data-color-scheme=dark] [class*=bg-slate-100]{background-color:#171a22!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-900],.inspector-window[data-color-scheme=dark] [class*=text-slate-900],.inspector-window[data-color-scheme=dark] [class*=text-gray-800],.inspector-window[data-color-scheme=dark] [class*=text-slate-800],.inspector-window[data-color-scheme=dark] [class*=text-gray-700],.inspector-window[data-color-scheme=dark] [class*=text-slate-700]{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-600],.inspector-window[data-color-scheme=dark] [class*=text-slate-600],.inspector-window[data-color-scheme=dark] [class*=text-gray-500],.inspector-window[data-color-scheme=dark] [class*=text-slate-500],.inspector-window[data-color-scheme=dark] [class*=text-gray-400],.inspector-window[data-color-scheme=dark] [class*=text-slate-400]{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [class*=border-gray-100],.inspector-window[data-color-scheme=dark] [class*=border-slate-100],.inspector-window[data-color-scheme=dark] [class*=border-gray-200],.inspector-window[data-color-scheme=dark] [class*=border-slate-200],.inspector-window[data-color-scheme=dark] [class*=border-gray-300],.inspector-window[data-color-scheme=dark] [class*=border-slate-300]{border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] input,.inspector-window[data-color-scheme=dark] select,.inspector-window[data-color-scheme=dark] textarea{color:#f3f4f8!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] input::placeholder,.inspector-window[data-color-scheme=dark] textarea::placeholder{color:#858996}.inspector-window[data-color-scheme=dark] ::selection{color:#fff;background-color:#5b5f92}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
10
10
 
11
11
  //#endregion
12
12
  //#region src/assets/inspector-logo.svg
@@ -537,6 +537,24 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
537
537
  ...eventDetails
538
538
  };
539
539
  }
540
+ /**
541
+ * Whether the runtime *connection* needs attention — the single condition
542
+ * shared by System Health and the launcher's error signal, so the two can
543
+ * never disagree about whether the wiring is broken.
544
+ *
545
+ * Exactly one state counts. `disconnected` is also the initial value, so
546
+ * counting it would raise the signal on every page load; `connecting` is a
547
+ * normal startup step; `unavailable` means no Core is attached, which is not
548
+ * a defect of the developer's wiring.
549
+ *
550
+ * Note the deliberate asymmetry with `health.state`: a failed *run* also
551
+ * drives System Health to "Needs attention" while the connection is fine.
552
+ * That is an event rather than a state, and it is excluded from the launcher
553
+ * on purpose — see the launcher-signal comments in index.ts.
554
+ */
555
+ function runtimeConnectionNeedsAttention(state) {
556
+ return state === "error";
557
+ }
540
558
  function runtimeHealthFromInput(input) {
541
559
  const lastEvent = runtimeEventSignal(input.lastRuntimeEvent);
542
560
  if (input.runtimeConnectionState === "connected") return {
@@ -578,15 +596,16 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
578
596
  },
579
597
  lastEvent
580
598
  };
599
+ const needsAttention = runtimeConnectionNeedsAttention(input.runtimeConnectionState);
581
600
  return {
582
- state: input.runtimeConnectionState === "error" ? "error" : "offline",
583
- label: input.runtimeConnectionState === "error" ? "Runtime error" : "Offline",
601
+ state: needsAttention ? "error" : "offline",
602
+ label: needsAttention ? "Runtime error" : "Offline",
584
603
  runtime: {
585
604
  label: "Offline",
586
605
  tone: "error"
587
606
  },
588
607
  liveUpdates: {
589
- label: input.runtimeConnectionState === "error" ? "Error" : "Disconnected",
608
+ label: needsAttention ? "Error" : "Disconnected",
590
609
  tone: "error"
591
610
  },
592
611
  lastEvent
@@ -695,6 +714,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
695
714
  inspect: [
696
715
  "agents",
697
716
  "ag-ui-events",
717
+ "event-snippets",
698
718
  "frontend-tools",
699
719
  "capabilities",
700
720
  "agent-context"
@@ -768,9 +788,552 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
768
788
  return (_sort$0$id = (_sort$ = [...input.threads].sort(compareVisibleThreads)[0]) === null || _sort$ === void 0 ? void 0 : _sort$.id) !== null && _sort$0$id !== void 0 ? _sort$0$id : null;
769
789
  }
770
790
 
791
+ //#endregion
792
+ //#region src/lib/event-snippets.ts
793
+ const EVENT_SNIPPETS_STORAGE_KEY = "cpk:inspector:event-snippets";
794
+ const SNIPPET_RECIPES = [
795
+ "tool-call",
796
+ "reasoning",
797
+ "text",
798
+ "activity",
799
+ "raw"
800
+ ];
801
+ const ACTIVITY_STARTERS = ["a2ui-surface", "open-generative-ui"];
802
+ function isSnippetRecipe(value) {
803
+ return typeof value === "string" && SNIPPET_RECIPES.some((recipe) => recipe === value);
804
+ }
805
+ function createSnippetId() {
806
+ if (typeof crypto !== "undefined" && "randomUUID" in crypto) return crypto.randomUUID();
807
+ return `cpk-snippet-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
808
+ }
809
+ function autoSnippetName(recipe, label) {
810
+ const time = (/* @__PURE__ */ new Date()).toLocaleTimeString([], {
811
+ hour: "2-digit",
812
+ minute: "2-digit"
813
+ });
814
+ return `${label.trim() || recipeLabel(recipe)} - ${time}`;
815
+ }
816
+ function recipeLabel(recipe) {
817
+ switch (recipe) {
818
+ case "tool-call": return "Tool call";
819
+ case "reasoning": return "Reasoning";
820
+ case "text": return "Assistant text";
821
+ case "activity": return "Activity";
822
+ case "raw": return "Raw events";
823
+ }
824
+ }
825
+ const GENERATE_SANDBOXED_UI_TOOL_NAME = "generateSandboxedUi";
826
+ const OPEN_GENERATIVE_UI_ACTIVITY_TYPE = "open-generative-ui";
827
+ function recipeIconName(recipe) {
828
+ switch (recipe) {
829
+ case "tool-call": return "Hammer";
830
+ case "reasoning": return "Brain";
831
+ case "text": return "MessageSquare";
832
+ case "activity": return "LayoutDashboard";
833
+ case "raw": return "Code";
834
+ }
835
+ }
836
+ function recipeIconWrapClass(recipe) {
837
+ switch (recipe) {
838
+ case "tool-call": return "bg-amber-100 text-amber-700";
839
+ case "reasoning": return "bg-violet-100 text-violet-700";
840
+ case "text": return "bg-sky-100 text-sky-700";
841
+ case "activity": return "bg-emerald-100 text-emerald-700";
842
+ case "raw": return "bg-gray-200 text-gray-700";
843
+ }
844
+ }
845
+ function groupEventSnippets(snippets) {
846
+ return SNIPPET_RECIPES.flatMap((recipe) => {
847
+ const items = snippets.filter((snippet) => snippet.recipe === recipe);
848
+ if (items.length === 0) return [];
849
+ return [{
850
+ recipe,
851
+ label: recipeLabel(recipe),
852
+ snippets: items
853
+ }];
854
+ });
855
+ }
856
+ function snippetJsonIsRunnable(raw) {
857
+ try {
858
+ return parseSnippetEvents(raw).length > 0;
859
+ } catch (_unused) {
860
+ return false;
861
+ }
862
+ }
863
+ function expandSnippetEventsForRun(events) {
864
+ const next = [...events];
865
+ const hasOpenGenUi = next.some((event) => event.type === "ACTIVITY_SNAPSHOT" && event.activityType === OPEN_GENERATIVE_UI_ACTIVITY_TYPE);
866
+ const toolCallIds = [];
867
+ for (const event of next) if (event.type === "TOOL_CALL_START" && event.toolCallName === GENERATE_SANDBOXED_UI_TOOL_NAME && typeof event.toolCallId === "string") toolCallIds.push(event.toolCallId);
868
+ if (toolCallIds.length === 0) return next;
869
+ const argParts = /* @__PURE__ */ new Map();
870
+ for (const event of next) if (event.type === "TOOL_CALL_ARGS" && typeof event.toolCallId === "string" && typeof event.delta === "string") {
871
+ var _argParts$get;
872
+ const parts = (_argParts$get = argParts.get(event.toolCallId)) !== null && _argParts$get !== void 0 ? _argParts$get : [];
873
+ parts.push(event.delta);
874
+ argParts.set(event.toolCallId, parts);
875
+ }
876
+ const extras = [];
877
+ for (const toolCallId of toolCallIds) {
878
+ let addedSnapshot = false;
879
+ if (!hasOpenGenUi) {
880
+ var _argParts$get2;
881
+ const snapshot = activitySnapshotFromSandboxedUiArgs(toolCallId, ((_argParts$get2 = argParts.get(toolCallId)) !== null && _argParts$get2 !== void 0 ? _argParts$get2 : []).join(""));
882
+ if (snapshot) {
883
+ extras.push(snapshot);
884
+ addedSnapshot = true;
885
+ }
886
+ }
887
+ if (!hasOpenGenUi && !addedSnapshot) continue;
888
+ if (!next.some((event) => event.type === "TOOL_CALL_RESULT" && event.toolCallId === toolCallId)) extras.push({
889
+ type: "TOOL_CALL_RESULT",
890
+ toolCallId,
891
+ messageId: `${toolCallId}-result`,
892
+ role: "tool",
893
+ content: "UI generated"
894
+ });
895
+ }
896
+ if (extras.length === 0) return next;
897
+ const finishIndex = next.findIndex((event) => event.type === "RUN_FINISHED");
898
+ if (finishIndex === -1) return [...next, ...extras];
899
+ return [
900
+ ...next.slice(0, finishIndex),
901
+ ...extras,
902
+ ...next.slice(finishIndex)
903
+ ];
904
+ }
905
+ function activitySnapshotFromSandboxedUiArgs(toolCallId, rawArgs) {
906
+ let args;
907
+ try {
908
+ const parsed = JSON.parse(snippetArgsJson(rawArgs));
909
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
910
+ args = parsed;
911
+ } catch (_unused2) {
912
+ return null;
913
+ }
914
+ const html = sandboxedUiHtmlChunks(args.html);
915
+ const css = typeof args.css === "string" ? args.css : void 0;
916
+ const jsFunctions = typeof args.jsFunctions === "string" ? args.jsFunctions : void 0;
917
+ const jsExpressions = Array.isArray(args.jsExpressions) ? args.jsExpressions.filter((item) => typeof item === "string") : void 0;
918
+ if (html.length === 0 && css === void 0 && jsFunctions === void 0 && (jsExpressions === void 0 || jsExpressions.length === 0)) return null;
919
+ return {
920
+ type: "ACTIVITY_SNAPSHOT",
921
+ messageId: `${toolCallId}-activity`,
922
+ activityType: OPEN_GENERATIVE_UI_ACTIVITY_TYPE,
923
+ content: {
924
+ initialHeight: typeof args.initialHeight === "number" ? args.initialHeight : void 0,
925
+ generating: false,
926
+ css,
927
+ cssComplete: true,
928
+ html,
929
+ htmlComplete: true,
930
+ jsFunctions,
931
+ jsFunctionsComplete: true,
932
+ jsExpressions,
933
+ jsExpressionsComplete: true
934
+ },
935
+ replace: true
936
+ };
937
+ }
938
+ function sandboxedUiHtmlChunks(html) {
939
+ if (typeof html === "string" && html.length > 0) return [html];
940
+ if (Array.isArray(html)) return html.filter((item) => typeof item === "string");
941
+ return [];
942
+ }
943
+ function snippetContainsToolCall(events) {
944
+ return events.some((event) => typeof event.type === "string" && event.type.startsWith("TOOL_CALL"));
945
+ }
946
+ function ensureRunEnvelope(events, ids) {
947
+ const next = [...events];
948
+ const hasStart = next.some((event) => event.type === "RUN_STARTED");
949
+ const hasFinish = next.some((event) => event.type === "RUN_FINISHED");
950
+ if (!hasStart) next.unshift({
951
+ type: "RUN_STARTED",
952
+ threadId: ids.threadId,
953
+ runId: ids.runId
954
+ });
955
+ if (!hasFinish) next.push({
956
+ type: "RUN_FINISHED",
957
+ threadId: ids.threadId,
958
+ runId: ids.runId
959
+ });
960
+ return next;
961
+ }
962
+ function snippetArgsJson(value) {
963
+ if (value && typeof value === "object") return JSON.stringify(value);
964
+ if (typeof value !== "string") return "{}";
965
+ const trimmed = value.trim() || "{}";
966
+ try {
967
+ return JSON.stringify(JSON.parse(trimmed));
968
+ } catch (_unused3) {
969
+ const recovered = firstJsonValue(trimmed);
970
+ if (recovered !== void 0) return JSON.stringify(recovered);
971
+ throw new Error("Tool args JSON is invalid.");
972
+ }
973
+ }
974
+ function firstJsonValue(raw) {
975
+ const start = raw.indexOf("{");
976
+ if (start === -1) return;
977
+ let depth = 0;
978
+ let inString = false;
979
+ let escaped = false;
980
+ for (let index = start; index < raw.length; index += 1) {
981
+ const char = raw[index];
982
+ if (inString) {
983
+ if (escaped) escaped = false;
984
+ else if (char === "\\") escaped = true;
985
+ else if (char === "\"") inString = false;
986
+ continue;
987
+ }
988
+ if (char === "\"") inString = true;
989
+ else if (char === "{") depth += 1;
990
+ else if (char === "}") {
991
+ depth -= 1;
992
+ if (depth === 0) try {
993
+ return JSON.parse(raw.slice(start, index + 1));
994
+ } catch (_unused4) {
995
+ return;
996
+ }
997
+ }
998
+ }
999
+ }
1000
+ function compileToolCallRecipe(input) {
1001
+ var _input$parentMessageI, _input$toolCallId;
1002
+ const toolName = input.toolName.trim();
1003
+ if (!toolName) throw new Error("Tool name is required.");
1004
+ const argsJson = snippetArgsJson(input.argsJson);
1005
+ parseObjectJson(argsJson, "Tool args");
1006
+ const parentMessageId = (_input$parentMessageI = input.parentMessageId) !== null && _input$parentMessageI !== void 0 ? _input$parentMessageI : createSnippetId();
1007
+ const toolCallId = (_input$toolCallId = input.toolCallId) !== null && _input$toolCallId !== void 0 ? _input$toolCallId : createSnippetId();
1008
+ return ensureRunEnvelope([
1009
+ {
1010
+ type: "TOOL_CALL_START",
1011
+ toolCallId,
1012
+ toolCallName: toolName,
1013
+ parentMessageId
1014
+ },
1015
+ {
1016
+ type: "TOOL_CALL_ARGS",
1017
+ toolCallId,
1018
+ delta: argsJson
1019
+ },
1020
+ {
1021
+ type: "TOOL_CALL_END",
1022
+ toolCallId
1023
+ }
1024
+ ], input);
1025
+ }
1026
+ function compileReasoningRecipe(input) {
1027
+ const text = input.text.trim();
1028
+ if (!text) throw new Error("Reasoning text is required.");
1029
+ const messageId = createSnippetId();
1030
+ return ensureRunEnvelope([
1031
+ {
1032
+ type: "REASONING_START",
1033
+ messageId
1034
+ },
1035
+ {
1036
+ type: "REASONING_MESSAGE_START",
1037
+ messageId,
1038
+ role: "reasoning"
1039
+ },
1040
+ {
1041
+ type: "REASONING_MESSAGE_CONTENT",
1042
+ messageId,
1043
+ delta: text
1044
+ },
1045
+ {
1046
+ type: "REASONING_MESSAGE_END",
1047
+ messageId
1048
+ },
1049
+ {
1050
+ type: "REASONING_END",
1051
+ messageId
1052
+ }
1053
+ ], input);
1054
+ }
1055
+ function compileTextRecipe(input) {
1056
+ var _input$messageId;
1057
+ const text = input.text.trim();
1058
+ if (!text) throw new Error("Assistant text is required.");
1059
+ const messageId = (_input$messageId = input.messageId) !== null && _input$messageId !== void 0 ? _input$messageId : createSnippetId();
1060
+ return ensureRunEnvelope([
1061
+ {
1062
+ type: "TEXT_MESSAGE_START",
1063
+ messageId,
1064
+ role: "assistant"
1065
+ },
1066
+ {
1067
+ type: "TEXT_MESSAGE_CONTENT",
1068
+ messageId,
1069
+ delta: text
1070
+ },
1071
+ {
1072
+ type: "TEXT_MESSAGE_END",
1073
+ messageId
1074
+ }
1075
+ ], input);
1076
+ }
1077
+ function compileActivityRecipe(input) {
1078
+ var _input$messageId2;
1079
+ const activityType = input.activityType.trim();
1080
+ if (!activityType) throw new Error("Activity type is required.");
1081
+ const content = parseObjectJson(input.contentJson, "Activity content");
1082
+ return ensureRunEnvelope([{
1083
+ type: "ACTIVITY_SNAPSHOT",
1084
+ messageId: (_input$messageId2 = input.messageId) !== null && _input$messageId2 !== void 0 ? _input$messageId2 : createSnippetId(),
1085
+ activityType,
1086
+ content,
1087
+ replace: true
1088
+ }], input);
1089
+ }
1090
+ function emptyRecipeDraft() {
1091
+ return {
1092
+ toolName: "",
1093
+ toolArgs: "{}",
1094
+ reasoningText: "",
1095
+ textContent: "",
1096
+ activityType: "a2ui-surface",
1097
+ activityContent: "{}"
1098
+ };
1099
+ }
1100
+ function compileChatSnippet(input) {
1101
+ switch (input.kind) {
1102
+ case "text": return {
1103
+ recipe: "text",
1104
+ events: compileTextRecipe({
1105
+ text: input.content,
1106
+ threadId: input.threadId,
1107
+ runId: input.runId,
1108
+ messageId: input.messageId
1109
+ }),
1110
+ name: autoSnippetName("text", snippetLabelFromText(input.content))
1111
+ };
1112
+ case "reasoning": return {
1113
+ recipe: "reasoning",
1114
+ events: compileReasoningRecipe({
1115
+ text: input.content,
1116
+ threadId: input.threadId,
1117
+ runId: input.runId
1118
+ }),
1119
+ name: autoSnippetName("reasoning", snippetLabelFromText(input.content))
1120
+ };
1121
+ case "tool-call": return {
1122
+ recipe: "tool-call",
1123
+ events: compileToolCallRecipe({
1124
+ toolName: input.toolName,
1125
+ argsJson: snippetArgsJson(input.argsJson),
1126
+ threadId: input.threadId,
1127
+ runId: input.runId,
1128
+ parentMessageId: input.messageId,
1129
+ toolCallId: input.toolCallId
1130
+ }),
1131
+ name: autoSnippetName("tool-call", input.toolName)
1132
+ };
1133
+ case "activity":
1134
+ var _input$content;
1135
+ return {
1136
+ recipe: "activity",
1137
+ events: compileActivityRecipe({
1138
+ activityType: input.activityType,
1139
+ contentJson: JSON.stringify((_input$content = input.content) !== null && _input$content !== void 0 ? _input$content : {}),
1140
+ threadId: input.threadId,
1141
+ runId: input.runId,
1142
+ messageId: input.messageId
1143
+ }),
1144
+ name: autoSnippetName("activity", input.activityType)
1145
+ };
1146
+ }
1147
+ }
1148
+ function editorStateFromSnippet(snippet) {
1149
+ return {
1150
+ recipe: snippet.recipe,
1151
+ name: snippet.name,
1152
+ json: JSON.stringify(snippet.events, null, 2),
1153
+ draft: recipeDraftFromEvents(snippet.events)
1154
+ };
1155
+ }
1156
+ function recipeDraftFromEvents(events) {
1157
+ const draft = emptyRecipeDraft();
1158
+ const textParts = [];
1159
+ const reasoningParts = [];
1160
+ const argParts = [];
1161
+ for (const event of events) {
1162
+ if (event.type === "TEXT_MESSAGE_CONTENT") {
1163
+ const delta = readEventString(event, "delta");
1164
+ if (delta) textParts.push(delta);
1165
+ }
1166
+ if (event.type === "REASONING_MESSAGE_CONTENT") {
1167
+ const delta = readEventString(event, "delta");
1168
+ if (delta) reasoningParts.push(delta);
1169
+ }
1170
+ if (event.type === "TOOL_CALL_START") {
1171
+ const toolName = readEventString(event, "toolCallName");
1172
+ if (toolName) draft.toolName = toolName;
1173
+ }
1174
+ if (event.type === "TOOL_CALL_ARGS") {
1175
+ const delta = readEventString(event, "delta");
1176
+ if (delta) argParts.push(delta);
1177
+ }
1178
+ if (event.type === "ACTIVITY_SNAPSHOT") {
1179
+ var _event$content;
1180
+ const activityType = readEventString(event, "activityType");
1181
+ if (activityType) draft.activityType = activityType;
1182
+ draft.activityContent = prettyJson((_event$content = event.content) !== null && _event$content !== void 0 ? _event$content : {});
1183
+ }
1184
+ }
1185
+ draft.textContent = textParts.join("");
1186
+ draft.reasoningText = reasoningParts.join("");
1187
+ if (argParts.length > 0) draft.toolArgs = prettyJson(argParts.join(""));
1188
+ return draft;
1189
+ }
1190
+ function compileFromActivityMessage(input) {
1191
+ return compileChatSnippet({
1192
+ kind: "activity",
1193
+ messageId: input.message.id,
1194
+ activityType: input.message.activityType,
1195
+ content: input.message.content,
1196
+ threadId: input.threadId,
1197
+ runId: input.runId
1198
+ });
1199
+ }
1200
+ function parseSnippetEvents(raw) {
1201
+ let parsed;
1202
+ try {
1203
+ parsed = JSON.parse(raw);
1204
+ } catch (_unused5) {
1205
+ throw new Error("Snippet JSON is invalid.");
1206
+ }
1207
+ if (!Array.isArray(parsed)) throw new Error("Snippet JSON must be an array of events.");
1208
+ const events = [];
1209
+ for (const item of parsed) {
1210
+ if (!item || typeof item !== "object" || Array.isArray(item)) throw new Error("Each event must be an object with a string type.");
1211
+ const record = item;
1212
+ if (typeof record.type !== "string" || record.type.length === 0) throw new Error("Each event must have a string type.");
1213
+ events.push(item);
1214
+ }
1215
+ return events;
1216
+ }
1217
+ function loadEventSnippets(storage = defaultStorage()) {
1218
+ if (!storage) return [];
1219
+ try {
1220
+ const raw = storage.getItem(EVENT_SNIPPETS_STORAGE_KEY);
1221
+ if (!raw) return [];
1222
+ const parsed = JSON.parse(raw);
1223
+ if (!Array.isArray(parsed)) return [];
1224
+ return parsed.flatMap((item) => {
1225
+ const snippet = parseStoredSnippet(item);
1226
+ return snippet ? [snippet] : [];
1227
+ });
1228
+ } catch (_unused6) {
1229
+ return [];
1230
+ }
1231
+ }
1232
+ function saveEventSnippets(snippets, storage = defaultStorage()) {
1233
+ if (!storage) throw new Error("Snippet storage is not available.");
1234
+ storage.setItem(EVENT_SNIPPETS_STORAGE_KEY, JSON.stringify(snippets));
1235
+ }
1236
+ function upsertEventSnippet(snippet, storage = defaultStorage()) {
1237
+ const current = loadEventSnippets(storage);
1238
+ const index = current.findIndex((item) => item.id === snippet.id);
1239
+ const next = index === -1 ? [...current, snippet] : current.map((item, itemIndex) => itemIndex === index ? snippet : item);
1240
+ saveEventSnippets(next, storage);
1241
+ return next;
1242
+ }
1243
+ function deleteEventSnippet(id, storage = defaultStorage()) {
1244
+ const next = loadEventSnippets(storage).filter((item) => item.id !== id);
1245
+ saveEventSnippets(next, storage);
1246
+ return next;
1247
+ }
1248
+ function exportEventSnippetsJson(snippets) {
1249
+ return JSON.stringify(snippets, null, 2);
1250
+ }
1251
+ function importEventSnippets(raw, storage = defaultStorage()) {
1252
+ let parsed;
1253
+ try {
1254
+ parsed = JSON.parse(raw);
1255
+ } catch (_unused7) {
1256
+ throw new Error("Import JSON is invalid.");
1257
+ }
1258
+ const incoming = Array.isArray(parsed) ? parsed : [parsed];
1259
+ const imported = [];
1260
+ for (const item of incoming) {
1261
+ const snippet = parseStoredSnippet(item);
1262
+ if (!snippet) throw new Error("Import JSON is not a valid snippet list.");
1263
+ imported.push({
1264
+ ...snippet,
1265
+ id: createSnippetId(),
1266
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1267
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1268
+ });
1269
+ }
1270
+ if (imported.length === 0) throw new Error("Import JSON is not a valid snippet list.");
1271
+ const next = [...loadEventSnippets(storage), ...imported];
1272
+ saveEventSnippets(next, storage);
1273
+ return next;
1274
+ }
1275
+ function snippetLabelFromText(text) {
1276
+ const compact = text.trim().replace(/\s+/g, " ");
1277
+ if (compact.length <= 40) return compact;
1278
+ return `${compact.slice(0, 37)}...`;
1279
+ }
1280
+ function parseObjectJson(raw, label) {
1281
+ try {
1282
+ return JSON.parse(raw);
1283
+ } catch (_unused8) {
1284
+ throw new Error(`${label} JSON is invalid.`);
1285
+ }
1286
+ }
1287
+ function readEventString(event, key) {
1288
+ const value = event[key];
1289
+ return typeof value === "string" && value.length > 0 ? value : null;
1290
+ }
1291
+ function prettyJson(value) {
1292
+ if (typeof value === "string") try {
1293
+ return JSON.stringify(JSON.parse(value), null, 2);
1294
+ } catch (_unused9) {
1295
+ return value;
1296
+ }
1297
+ try {
1298
+ return JSON.stringify(value !== null && value !== void 0 ? value : {}, null, 2);
1299
+ } catch (_unused10) {
1300
+ return "{}";
1301
+ }
1302
+ }
1303
+ function parseStoredSnippet(value) {
1304
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
1305
+ const record = value;
1306
+ if (typeof record.id !== "string" || record.id.length === 0) return null;
1307
+ if (typeof record.name !== "string") return null;
1308
+ if (!isSnippetRecipe(record.recipe)) return null;
1309
+ if (!Array.isArray(record.events)) return null;
1310
+ const events = [];
1311
+ for (const event of record.events) {
1312
+ if (!event || typeof event !== "object" || Array.isArray(event)) return null;
1313
+ if (typeof event.type !== "string") return null;
1314
+ events.push(event);
1315
+ }
1316
+ return {
1317
+ id: record.id,
1318
+ name: record.name,
1319
+ recipe: record.recipe,
1320
+ events,
1321
+ createdAt: typeof record.createdAt === "string" ? record.createdAt : (/* @__PURE__ */ new Date()).toISOString(),
1322
+ updatedAt: typeof record.updatedAt === "string" ? record.updatedAt : (/* @__PURE__ */ new Date()).toISOString()
1323
+ };
1324
+ }
1325
+ function defaultStorage() {
1326
+ if (typeof window === "undefined") return null;
1327
+ try {
1328
+ return window.localStorage;
1329
+ } catch (_unused11) {
1330
+ return null;
1331
+ }
1332
+ }
1333
+
771
1334
  //#endregion
772
1335
  //#region package.json
773
- var version = "1.69.0";
1336
+ var version = "1.69.1";
774
1337
 
775
1338
  //#endregion
776
1339
  //#region src/lib/telemetry.ts
@@ -778,6 +1341,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
778
1341
  opened: "oss.inspector.opened",
779
1342
  whatsNewViewed: "oss.inspector.whats_new_viewed",
780
1343
  whatsNewSignalViewed: "oss.inspector.whats_new_signal_viewed",
1344
+ errorSignalViewed: "oss.inspector.error_signal_viewed",
781
1345
  whatsNewClicked: "oss.inspector.whats_new_clicked",
782
1346
  threadsTabClicked: "oss.inspector.threads_tab_clicked",
783
1347
  threadsLockedViewed: "oss.inspector.threads_locked_viewed",
@@ -797,7 +1361,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
797
1361
  homeViewed: "oss.inspector.home_viewed",
798
1362
  homeCtaClicked: "oss.inspector.home_cta_clicked",
799
1363
  metadataModuleViewed: "oss.inspector.metadata_module_viewed",
800
- metadataActionClicked: "oss.inspector.metadata_action_clicked"
1364
+ metadataActionClicked: "oss.inspector.metadata_action_clicked",
1365
+ eventSnippetsRun: "oss.inspector.event_snippets_run",
1366
+ eventSnippetsSaved: "oss.inspector.event_snippets_saved"
801
1367
  };
802
1368
  const TELEMETRY_INGEST_URL = "https://telemetry.copilotkit.ai/ingest";
803
1369
  const TELEMETRY_DOCS_URL = "https://docs.copilotkit.ai/telemetry";
@@ -860,6 +1426,31 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
860
1426
  track(TELEMETRY_EVENTS.whatsNewSignalViewed, props);
861
1427
  }
862
1428
  /**
1429
+ * Fires when the launcher's error signal becomes *visible* — not when it arms.
1430
+ * Arming can happen with the panel open or the tab hidden, where there is no
1431
+ * launcher to look at, so counting arms would inflate the denominator this
1432
+ * event exists to provide.
1433
+ *
1434
+ * Deliberately carries three fixed enum values and nothing else. This is the
1435
+ * one place a later change could casually attach a free-text field, and the
1436
+ * failure message must never be transmitted.
1437
+ *
1438
+ * `label` is deliberately not a new event: the catalogue's size is asserted
1439
+ * and spelled out in a test title, and a property answers the one open
1440
+ * question — how often the no-room fallback fires — without touching either.
1441
+ *
1442
+ * The pill's own marginal effect cannot be measured here and must not be
1443
+ * reverse-engineered from this data: it ships together with the dot and the
1444
+ * beat, so there is no period with one and not the other.
1445
+ */
1446
+ function trackErrorSignalViewed(props) {
1447
+ track(TELEMETRY_EVENTS.errorSignalViewed, {
1448
+ source: props.source,
1449
+ presentation: props.presentation,
1450
+ label: props.label
1451
+ });
1452
+ }
1453
+ /**
863
1454
  * Fires for links followed inside the announcement body. `body` is the only
864
1455
  * call-to-action left: dismissal no longer exists, so there is nothing else a
865
1456
  * click on this surface can mean.
@@ -1019,6 +1610,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1019
1610
  ...metadataCoarseProperties(props)
1020
1611
  });
1021
1612
  }
1613
+ function trackEventSnippetsRun(props) {
1614
+ track(TELEMETRY_EVENTS.eventSnippetsRun, {
1615
+ recipe: props.recipe,
1616
+ source: props.source,
1617
+ success: props.success
1618
+ });
1619
+ }
1620
+ function trackEventSnippetsSaved(props) {
1621
+ track(TELEMETRY_EVENTS.eventSnippetsSaved, {
1622
+ recipe: props.recipe,
1623
+ source: props.source,
1624
+ success: props.success
1625
+ });
1626
+ }
1022
1627
  /**
1023
1628
  * Returns the inspector's anonymous distinct-ID for cross-domain
1024
1629
  * propagation onto outbound announcement-CTA links, or `null` when the user
@@ -1100,11 +1705,215 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1100
1705
  /** Menu key of the What's new leaf — the news signal's destination. */
1101
1706
  const WHATS_NEW_MENU_KEY = "whats-new";
1102
1707
  const NEWS_SIGNAL_ID = "whats-new";
1103
- const NEWS_SIGNAL_TONE = "news";
1104
- const NEWS_SIGNAL_COLOR = "#A78BFA";
1105
- const NEWS_SIGNAL_CADENCE_MS = 2100;
1106
- const NEWS_SIGNAL_DESTINATION = WHATS_NEW_MENU_KEY;
1708
+ const LAUNCHER_SIGNAL_COLORS = {
1709
+ news: "#A78BFA",
1710
+ error: "#F87171"
1711
+ };
1712
+ /**
1713
+ * The failure gesture, four phases in series:
1714
+ *
1715
+ * ```
1716
+ * beat 400ms → open 250ms → hold 2500ms → close 250ms (3400ms total)
1717
+ * ```
1718
+ *
1719
+ * Sequential rather than simultaneous, deliberately: the beat says *here*, the
1720
+ * pill says *this*. The beat is short so the words arrive quickly.
1721
+ *
1722
+ * **All four durations live here and nowhere else.** The stylesheet reads the
1723
+ * two animated phases as custom properties injected from these numbers rather
1724
+ * than restating them, because they are taste and will be tuned by eye after
1725
+ * the first live look — tuning the feel must be a number, not a refactor.
1726
+ */
1727
+ const ERROR_GESTURE_MS = {
1728
+ beat: 400,
1729
+ open: 250,
1730
+ hold: 2500,
1731
+ close: 250
1732
+ };
1733
+ /**
1734
+ * The words the pill carries, which are the words the panel already carries.
1735
+ *
1736
+ * `Runtime error` is the System Health runtime tile's own label, and
1737
+ * `Failed to load threads` is the Threads view's own heading. The outside and
1738
+ * the inside must agree, so these are shared rather than paraphrased.
1739
+ */
1740
+ const RUNTIME_ERROR_LABEL = "Runtime error";
1741
+ const THREADS_LOAD_ERROR_LABEL = "Failed to load threads";
1742
+ const AGENT_RUN_FAILED_LABEL = "Agent run failed";
1743
+ const TOOL_ERROR_LABEL = "Tool error";
1744
+ const MEMORY_LOAD_ERROR_LABEL = "Failed to load learning data";
1745
+ /**
1746
+ * Copy on the landing view. Titles match the pill.
1747
+ *
1748
+ * The two fields differ in what they can promise. `advice` is about the
1749
+ * reader's next move and is always true. `highlight` is a claim about *this
1750
+ * view* — that the failed item is visible below — and the error carries no
1751
+ * guarantee of that: a code mapped to `run` can arrive with no run in the
1752
+ * buffer at all, and a tool error can arrive without the call id the
1753
+ * highlight needs. So it is rendered only once the item is actually there.
1754
+ * A card pointing at something the reader cannot find is worse than a card
1755
+ * that stays quiet, because it sends them looking.
1756
+ */
1757
+ const EVENT_ERROR_GUIDANCE = {
1758
+ run: {
1759
+ title: AGENT_RUN_FAILED_LABEL,
1760
+ highlight: "The failed run event is highlighted below."
1761
+ },
1762
+ tool: {
1763
+ title: TOOL_ERROR_LABEL,
1764
+ highlight: "The failed tool call is highlighted below."
1765
+ },
1766
+ memory: {
1767
+ title: MEMORY_LOAD_ERROR_LABEL,
1768
+ advice: "Confirm CopilotKit Intelligence is connected, then retry Learning."
1769
+ }
1770
+ };
1771
+ /**
1772
+ * The pill's second line, shared by every subject that carries a pill.
1773
+ *
1774
+ * **This is the one string in the feature that exists nowhere else in the
1775
+ * product.** Every other word the launcher shows is word-identical to the
1776
+ * panel, which is the standing rule; this line is a deliberate, owner-approved
1777
+ * exception to it, because the pill became clickable and an invitation that
1778
+ * says nothing is not an invitation.
1779
+ *
1780
+ * It is shown, never spoken: the polite live region carries the failure class
1781
+ * alone. A screen-reader user cannot act on an instruction delivered through
1782
+ * an announcement, and it would double the spoken length.
1783
+ */
1784
+ const PILL_SUBLINE_LABEL = "Open Inspector for details";
1785
+ const HUD_OPEN_INSPECTOR_LABEL = "Open Inspector";
1786
+ const HUD_THREADS_OFF_LABEL = "Turn on Threads";
1787
+ const HUD_THREADS_ON_LABEL = "Threads on";
1788
+ const HUD_INTELLIGENCE_OFF_LABEL = "Turn on Intelligence";
1789
+ const HUD_INTELLIGENCE_ON_LABEL = "Intelligence connected";
1790
+ const HUD_THREADS_OFF_DETAIL = "Inspect conversations from this app.";
1791
+ const HUD_THREADS_ON_DETAIL = "Threads is on. Opens the Threads view.";
1792
+ const HUD_INTELLIGENCE_OFF_DETAIL = "Connect Intelligence to use Threads and Learning.";
1793
+ const HUD_INTELLIGENCE_ON_DETAIL = "Intelligence is connected. Opens Home.";
1794
+ const HUD_LEARNING_OFF_LABEL = "Turn on Learning";
1795
+ const HUD_LEARNING_ON_LABEL = "Learning on";
1796
+ const HUD_LEARNING_OFF_DETAIL = "Connect Intelligence to use Learning.";
1797
+ const HUD_LEARNING_ON_DETAIL = "Learning is on. Opens the Learning view.";
1798
+ const HUD_OPEN_INSPECTOR_DETAIL = "Same as clicking the circle. Opens the full Inspector.";
1799
+ const LAUNCHER_SIGNALS = {
1800
+ "whats-new": {
1801
+ tone: "news",
1802
+ markerTarget: WHATS_NEW_MENU_KEY,
1803
+ landingTarget: "home",
1804
+ cadence: 2100,
1805
+ priority: 0,
1806
+ accessibleLabel: "new content"
1807
+ },
1808
+ connection: {
1809
+ tone: "error",
1810
+ markerTarget: "home",
1811
+ landingTarget: "home",
1812
+ cadence: ERROR_GESTURE_MS.beat,
1813
+ priority: 5,
1814
+ accessibleLabel: "runtime error",
1815
+ pillLabel: RUNTIME_ERROR_LABEL
1816
+ },
1817
+ threads: {
1818
+ tone: "error",
1819
+ markerTarget: "threads",
1820
+ landingTarget: "threads",
1821
+ cadence: ERROR_GESTURE_MS.beat,
1822
+ priority: 4,
1823
+ accessibleLabel: "thread loading error",
1824
+ pillLabel: THREADS_LOAD_ERROR_LABEL
1825
+ },
1826
+ run: {
1827
+ tone: "error",
1828
+ markerTarget: "ag-ui-events",
1829
+ landingTarget: "ag-ui-events",
1830
+ cadence: ERROR_GESTURE_MS.beat,
1831
+ priority: 3,
1832
+ accessibleLabel: "agent run failed",
1833
+ pillLabel: AGENT_RUN_FAILED_LABEL
1834
+ },
1835
+ tool: {
1836
+ tone: "error",
1837
+ markerTarget: "agents",
1838
+ landingTarget: "agents",
1839
+ cadence: ERROR_GESTURE_MS.beat,
1840
+ priority: 2,
1841
+ accessibleLabel: "tool error",
1842
+ pillLabel: TOOL_ERROR_LABEL
1843
+ },
1844
+ memory: {
1845
+ tone: "error",
1846
+ markerTarget: "memories",
1847
+ landingTarget: "memories",
1848
+ cadence: ERROR_GESTURE_MS.beat,
1849
+ priority: 1,
1850
+ accessibleLabel: "learning error",
1851
+ pillLabel: MEMORY_LOAD_ERROR_LABEL
1852
+ }
1853
+ };
1854
+ /** Highest priority first, so the winner of the single dot is the head. */
1855
+ const LAUNCHER_SIGNAL_PRIORITY_ORDER = Object.keys(LAUNCHER_SIGNALS).sort((a, b) => LAUNCHER_SIGNALS[b].priority - LAUNCHER_SIGNALS[a].priority);
1856
+ /** Wiring *state* — red until the problem heals. */
1857
+ const WIRING_ERROR_KEYS = ["connection", "threads"];
1858
+ /** Unread *events* — red until the landing view is read. */
1859
+ const EVENT_ERROR_KEYS = [
1860
+ "run",
1861
+ "tool",
1862
+ "memory"
1863
+ ];
1864
+ function isWiringErrorKey(key) {
1865
+ return WIRING_ERROR_KEYS.includes(key);
1866
+ }
1867
+ /**
1868
+ * Takes a plain string rather than a `LauncherSignalKey`, because one caller
1869
+ * reads the subject back out of a `data-` attribute, where the DOM can only
1870
+ * offer `string | undefined`. Narrowing untrusted input is what a guard is
1871
+ * for; `LauncherSignalKey` still satisfies the parameter, so the callers that
1872
+ * already hold one are unaffected.
1873
+ */
1874
+ function isEventErrorKey(key) {
1875
+ return EVENT_ERROR_KEYS.includes(key);
1876
+ }
1877
+ /** Narrows a signal key to an error source, excluding the announcement. */
1878
+ function isErrorSignalKey(key) {
1879
+ return isWiringErrorKey(key) || isEventErrorKey(key);
1880
+ }
1881
+ /**
1882
+ * The control range is the point, not an oversight: an attribute selector has
1883
+ * to escape those characters too, and CSS.escape — which the fallback below
1884
+ * stands in for — escapes them as well. Hoisted so the suppression can sit on
1885
+ * the pattern rather than three lines above it.
1886
+ */
1887
+ const SELECTOR_ESCAPE_PATTERN = /[\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g;
1888
+ /** Attribute selector value. jsdom does not implement CSS.escape. */
1889
+ function escapeSelectorValue(value) {
1890
+ if (typeof CSS !== "undefined" && typeof CSS.escape === "function") return CSS.escape(value);
1891
+ return value.replace(SELECTOR_ESCAPE_PATTERN, "\\$&");
1892
+ }
1893
+ function eventErrorKeyForCode(code) {
1894
+ switch (code) {
1895
+ case _copilotkit_core.CopilotKitCoreErrorCode.TOOL_NOT_FOUND:
1896
+ case _copilotkit_core.CopilotKitCoreErrorCode.TOOL_HANDLER_FAILED:
1897
+ case _copilotkit_core.CopilotKitCoreErrorCode.TOOL_ARGUMENT_PARSE_FAILED:
1898
+ case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_NOT_FOUND: return "tool";
1899
+ case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_CONNECT_FAILED:
1900
+ case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_RUN_FAILED:
1901
+ case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_RUN_FAILED_EVENT:
1902
+ case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_RUN_ERROR_EVENT: return "run";
1903
+ default: return null;
1904
+ }
1905
+ }
1906
+ /**
1907
+ * Coalesce inspector-owned GET /threads sends. The first refresh goes out
1908
+ * at once. Further calls in this window share one trailing request, so a
1909
+ * flaky network does not fire a burst of list fetches and error cards.
1910
+ */
1911
+ const THREAD_LIST_DEBOUNCE_MS = 300;
1912
+ /** The launcher's accessible name with nothing wrong. */
1913
+ const LAUNCHER_BASE_LABEL = "Web Inspector";
1107
1914
  const EDGE_MARGIN = 16;
1915
+ /** HUD card plus the hover bridge. Used to pick left vs right. */
1916
+ const LAUNCHER_HUD_WIDTH = 248;
1108
1917
  const DRAG_THRESHOLD = 6;
1109
1918
  const MIN_WINDOW_WIDTH = 880;
1110
1919
  const MIN_WINDOW_WIDTH_DOCKED_LEFT = 640;
@@ -1585,6 +2394,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
1585
2394
  super(..._args);
1586
2395
  this.threads = [];
1587
2396
  this.selectedThreadId = null;
2397
+ this.inAppThreadId = null;
1588
2398
  this.errorMessage = null;
1589
2399
  this.suppressEmptyState = false;
1590
2400
  this._query = "";
@@ -1658,6 +2468,9 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
1658
2468
  ${thread.isExample ? lit.html`
1659
2469
  <span class="cpk-tl__pill cpk-tl__pill--example">Example</span>
1660
2470
  ` : lit.nothing}
2471
+ ${this.inAppThreadId === thread.id ? lit.html`
2472
+ <span class="cpk-tl__pill cpk-tl__pill--in-app">In app</span>
2473
+ ` : lit.nothing}
1661
2474
  </span>
1662
2475
  </button>
1663
2476
  `;
@@ -1716,6 +2529,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
1716
2529
  CpkThreadList.properties = {
1717
2530
  threads: { attribute: false },
1718
2531
  selectedThreadId: { attribute: false },
2532
+ inAppThreadId: { attribute: false },
1719
2533
  errorMessage: { attribute: false },
1720
2534
  suppressEmptyState: { attribute: false },
1721
2535
  _query: { state: true }
@@ -1864,6 +2678,11 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
1864
2678
  color: #087653;
1865
2679
  }
1866
2680
 
2681
+ .cpk-tl__pill--in-app {
2682
+ background: #bec2ff;
2683
+ color: #010507;
2684
+ }
2685
+
1867
2686
  /* ── Empty state ── */
1868
2687
  .cpk-tl__empty {
1869
2688
  padding: 32px 16px;
@@ -1937,6 +2756,8 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
1937
2756
  this.agentStateInput = null;
1938
2757
  this.agentEventsInput = [];
1939
2758
  this.liveMessageVersion = 0;
2759
+ this.viewInAppMode = "hidden";
2760
+ this.viewInAppError = null;
1940
2761
  this.focusMessageId = null;
1941
2762
  this.focusRequestId = 0;
1942
2763
  this._tab = "timeline";
@@ -2937,8 +3758,32 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
2937
3758
  </span>
2938
3759
  `)}
2939
3760
  </div>
3761
+ ${this.renderViewInAppAction()}
2940
3762
  ${bulkControls}
2941
3763
  </div>
3764
+ `;
3765
+ }
3766
+ renderViewInAppAction() {
3767
+ if (this.viewInAppMode === "hidden") return lit.nothing;
3768
+ const isStop = this.viewInAppMode === "stop";
3769
+ return lit.html`
3770
+ <button
3771
+ type="button"
3772
+ class="cpk-td__view-in-app ${isStop ? "cpk-td__view-in-app--stop" : ""}"
3773
+ data-testid="cpk-inspector-view-in-app"
3774
+ aria-label=${isStop ? "Stop viewing this thread in the app" : "View this thread in your app"}
3775
+ @click=${() => {
3776
+ this.dispatchEvent(new CustomEvent(isStop ? "stopViewing" : "viewInApp", {
3777
+ bubbles: true,
3778
+ composed: true
3779
+ }));
3780
+ }}
3781
+ >
3782
+ ${isStop ? "Stop viewing" : "View in your app"}
3783
+ </button>
3784
+ ${this.viewInAppError ? lit.html`<span class="cpk-td__view-in-app-error" role="alert"
3785
+ >${this.viewInAppError}</span
3786
+ >` : lit.nothing}
2942
3787
  `;
2943
3788
  }
2944
3789
  renderActiveBulkControls() {
@@ -3523,6 +4368,8 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
3523
4368
  agentStateInput: { attribute: false },
3524
4369
  agentEventsInput: { attribute: false },
3525
4370
  liveMessageVersion: { attribute: false },
4371
+ viewInAppMode: { attribute: false },
4372
+ viewInAppError: { attribute: false },
3526
4373
  focusMessageId: { attribute: false },
3527
4374
  focusRequestId: { attribute: false },
3528
4375
  _tab: { state: true },
@@ -3754,6 +4601,37 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
3754
4601
  overflow-wrap: anywhere;
3755
4602
  }
3756
4603
 
4604
+ .cpk-td__view-in-app {
4605
+ appearance: none;
4606
+ flex-shrink: 0;
4607
+ margin: 0;
4608
+ border: 1px solid #5558b2;
4609
+ border-radius: 6px;
4610
+ background: #5558b2;
4611
+ color: #ffffff;
4612
+ font-family: "Plus Jakarta Sans", sans-serif;
4613
+ font-size: 11px;
4614
+ font-weight: 600;
4615
+ padding: 5px 10px;
4616
+ cursor: pointer;
4617
+ }
4618
+
4619
+ .cpk-td__view-in-app:focus-visible {
4620
+ outline: 2px solid #010507;
4621
+ outline-offset: 2px;
4622
+ }
4623
+
4624
+ .cpk-td__view-in-app--stop {
4625
+ background: #ffffff;
4626
+ color: #5558b2;
4627
+ }
4628
+
4629
+ .cpk-td__view-in-app-error {
4630
+ flex-basis: 100%;
4631
+ color: #c0333a;
4632
+ font-size: 11px;
4633
+ }
4634
+
3757
4635
  /*
3758
4636
  * Each tab's content is wrapped in this panel so the keep-mounted
3759
4637
  * inactive panels can be hidden via display:none without disturbing
@@ -5230,7 +6108,33 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5230
6108
  inspect: "ag-ui-events"
5231
6109
  };
5232
6110
  this.lastScrolledAgentNavigationLayout = null;
6111
+ this.eventSnippets = [];
6112
+ this.selectedSnippetId = null;
6113
+ this.snippetRecipe = "tool-call";
6114
+ this.snippetName = "";
6115
+ this.snippetJson = "[]";
6116
+ this.snippetToolName = "";
6117
+ this.snippetToolArgs = "{}";
6118
+ this.snippetReasoningText = "";
6119
+ this.snippetTextContent = "";
6120
+ this.snippetActivityType = "a2ui-surface";
6121
+ this.snippetActivityContent = "{}";
6122
+ this.snippetError = null;
6123
+ this.snippetBanner = null;
6124
+ this.snippetConfirmOpen = false;
6125
+ this.lastInject = null;
6126
+ this.snippetListWidth = 200;
6127
+ this.snippetDividerResizing = false;
6128
+ this.snippetDividerPointerId = -1;
6129
+ this.snippetDividerStartX = 0;
6130
+ this.snippetDividerStartWidth = 0;
5233
6131
  this.selectedThreadId = null;
6132
+ this.inAppThreadId = null;
6133
+ this.inAppAgentId = null;
6134
+ this.inAppSource = null;
6135
+ this.activeViewInAppRequestId = null;
6136
+ this.viewInAppError = null;
6137
+ this.inspectorBridgeUnsubscribers = [];
5234
6138
  this.selectedRealThreadIsExplicit = false;
5235
6139
  this.selectedLocalExampleThreadId = null;
5236
6140
  this.requestedThreadId = null;
@@ -5294,9 +6198,39 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5294
6198
  this.announcementLoaded = false;
5295
6199
  this.announcementPromise = null;
5296
6200
  this.newsSignalArmed = false;
5297
- this.newsSignalPulsing = false;
5298
- this.newsSignalPulsePending = false;
6201
+ this.pulsingSignal = null;
6202
+ this.pendingPulseSignal = null;
5299
6203
  this.pulseTimeoutId = null;
6204
+ this.errorSignalArmed = {
6205
+ connection: false,
6206
+ threads: false
6207
+ };
6208
+ this.eventErrorArmed = {
6209
+ run: false,
6210
+ tool: false,
6211
+ memory: false
6212
+ };
6213
+ this.eventErrorDetails = {
6214
+ run: null,
6215
+ tool: null,
6216
+ memory: null
6217
+ };
6218
+ this.pendingScrollToEventId = null;
6219
+ this.pendingScrollToToolCallId = null;
6220
+ this.threadRefreshLastSentAt = /* @__PURE__ */ new Map();
6221
+ this.threadRefreshTrailingTimers = /* @__PURE__ */ new Map();
6222
+ this.errorBeatSpent = false;
6223
+ this.errorSignalViewedSources = /* @__PURE__ */ new Set();
6224
+ this.gestureSignal = null;
6225
+ this.pillPhase = null;
6226
+ this.pillDirection = null;
6227
+ this.pillTimeoutId = null;
6228
+ this.launcherHudOpen = false;
6229
+ this.launcherHudSide = "left";
6230
+ this.launcherHudHelp = null;
6231
+ this.launcherHudCloseTimer = null;
6232
+ this.hudLandingMenu = null;
6233
+ this.pillOutcome = null;
5300
6234
  this.viewedNewsSignalIds = /* @__PURE__ */ new Set();
5301
6235
  this.pendingNewsSignalViewed = null;
5302
6236
  this.viewedBannerSurfaces = /* @__PURE__ */ new Set();
@@ -5370,9 +6304,60 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5370
6304
  this.customTabIcons = { threads: `<svg class="h-3.5 w-3.5" width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.04167 15C8.29167 15 7.65972 14.7431 7.14583 14.2292C6.63194 13.7153 6.375 13.0972 6.375 12.375C6.375 11.3194 6.80208 10.3646 7.65625 9.51042C8.51042 8.65625 9.57639 8.125 10.8542 7.91667C10.8125 7.41667 10.6875 7.03819 10.4792 6.78125C10.2708 6.52431 9.98611 6.39583 9.625 6.39583C9.20833 6.39583 8.75694 6.56944 8.27083 6.91667C7.78472 7.26389 7.20833 7.83333 6.54167 8.625C5.45833 9.91667 4.66319 10.7569 4.15625 11.1458C3.64931 11.5347 3.10417 11.7292 2.52083 11.7292C1.8125 11.7292 1.21528 11.4653 0.729167 10.9375C0.243056 10.4097 0 9.77083 0 9.02083C0 8.27083 0.163194 7.50347 0.489583 6.71875C0.815972 5.93403 1.36806 4.99306 2.14583 3.89583C2.40972 3.53472 2.60417 3.22917 2.72917 2.97917C2.85417 2.72917 2.91667 2.52778 2.91667 2.375C2.91667 2.27778 2.89931 2.20486 2.86458 2.15625C2.82986 2.10764 2.77778 2.08333 2.70833 2.08333C2.56944 2.08333 2.39583 2.17014 2.1875 2.34375C1.97917 2.51736 1.73611 2.78472 1.45833 3.14583L0 1.66667C0.444444 1.125 0.895833 0.711806 1.35417 0.427083C1.8125 0.142361 2.26389 0 2.70833 0C3.34722 0 3.88889 0.222222 4.33333 0.666667C4.77778 1.11111 5 1.66667 5 2.33333C5 2.73611 4.89583 3.18056 4.6875 3.66667C4.47917 4.15278 4.13194 4.73611 3.64583 5.41667C3.11806 6.16667 2.72569 6.82639 2.46875 7.39583C2.21181 7.96528 2.08333 8.46528 2.08333 8.89583C2.08333 9.13194 2.12153 9.31597 2.19792 9.44792C2.27431 9.57986 2.38194 9.64583 2.52083 9.64583C2.65972 9.64583 2.78125 9.60764 2.88542 9.53125C2.98958 9.45486 3.18056 9.27083 3.45833 8.97917C3.63889 8.78472 3.85417 8.54514 4.10417 8.26042C4.35417 7.97569 4.65972 7.625 5.02083 7.20833C5.89583 6.16667 6.6875 5.42361 7.39583 4.97917C8.10417 4.53472 8.84722 4.3125 9.625 4.3125C10.5556 4.3125 11.3194 4.625 11.9167 5.25C12.5139 5.875 12.8542 6.72917 12.9375 7.8125H15V9.89583H12.9375C12.8264 11.4514 12.4201 12.691 11.7188 13.6146C11.0174 14.5382 10.125 15 9.04167 15ZM9.08333 12.9167C9.52778 12.9167 9.90278 12.6632 10.2083 12.1562C10.5139 11.6493 10.7222 10.9444 10.8333 10.0417C10.1944 10.1944 9.63889 10.4965 9.16667 10.9479C8.69444 11.3993 8.45833 11.8472 8.45833 12.2917C8.45833 12.4861 8.51389 12.6389 8.625 12.75C8.73611 12.8611 8.88889 12.9167 9.08333 12.9167Z" fill="currentColor"/></svg>` };
5371
6305
  this.handleDocumentVisibilityChange = () => {
5372
6306
  this.accountCtaMotionPaused = document.visibilityState !== "visible";
5373
- if (document.visibilityState === "visible" && this.newsSignalPulsePending && !this.isOpen) this.startNewsSignalPulse();
6307
+ if (document.visibilityState === "visible" && !this.isOpen) this.flushPendingSignalPulse();
6308
+ this.requestUpdate();
6309
+ };
6310
+ this.handlePillClick = (event) => {
6311
+ event.preventDefault();
6312
+ event.stopPropagation();
6313
+ this.openInspector("floating_button");
6314
+ };
6315
+ this.handleLauncherHudEnter = () => {
6316
+ this.openLauncherHud();
6317
+ };
6318
+ this.handleLauncherHudLeave = () => {
6319
+ if (this.launcherHudCloseTimer !== null) clearTimeout(this.launcherHudCloseTimer);
6320
+ this.launcherHudCloseTimer = setTimeout(() => {
6321
+ this.launcherHudCloseTimer = null;
6322
+ this.closeLauncherHud();
6323
+ }, 160);
6324
+ };
6325
+ this.handleLauncherHudFocusIn = () => {
6326
+ this.openLauncherHud();
6327
+ };
6328
+ this.handleLauncherHudFocusOut = (event) => {
6329
+ const next = event.relatedTarget;
6330
+ const wrapper = event.currentTarget;
6331
+ if (next instanceof Node && wrapper instanceof Node && wrapper.contains(next)) return;
6332
+ this.closeLauncherHud();
6333
+ };
6334
+ this.handleLauncherHudKeydown = (event) => {
6335
+ var _this$activeRoot$quer;
6336
+ if (event.key !== "Escape") return;
6337
+ if (!this.launcherHudOpen) return;
6338
+ event.preventDefault();
6339
+ event.stopPropagation();
6340
+ this.closeLauncherHud();
6341
+ (_this$activeRoot$quer = this.activeRoot.querySelector(".console-button")) === null || _this$activeRoot$quer === void 0 || _this$activeRoot$quer.focus();
6342
+ };
6343
+ this.handleHudActionClick = (event, row) => {
6344
+ event.preventDefault();
6345
+ event.stopPropagation();
6346
+ this.hudLandingMenu = row === "inspector" ? null : row === "threads" ? "threads" : row === "learning" ? "memories" : "home";
6347
+ this.closeLauncherHud();
6348
+ this.openInspector("floating_button");
6349
+ };
6350
+ this.handleHudHelpClick = (event, row) => {
6351
+ event.preventDefault();
6352
+ event.stopPropagation();
6353
+ this.launcherHudHelp = this.launcherHudHelp === row ? null : row;
5374
6354
  this.requestUpdate();
5375
6355
  };
6356
+ this.handleHudRowClick = (event, row) => {
6357
+ const target = event.target;
6358
+ if (target instanceof Element && target.closest(".cpk-launcher-hud__help, [data-cpk-hud-action]")) return;
6359
+ this.handleHudActionClick(event, row);
6360
+ };
5376
6361
  this.handleSidebarToggle = () => {
5377
6362
  this.sidebarRailTooltip = null;
5378
6363
  this.sidebarCollapsed = !this.sidebarCollapsed;
@@ -5404,6 +6389,18 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5404
6389
  this.persistState();
5405
6390
  this.requestUpdate();
5406
6391
  };
6392
+ this.handleEventErrorBannerKeydown = (event) => {
6393
+ if (event.key !== "Enter" && event.key !== " ") return;
6394
+ event.preventDefault();
6395
+ this.refocusEventErrorLanding(event);
6396
+ };
6397
+ this.refocusEventErrorLanding = (event) => {
6398
+ var _event$currentTarget;
6399
+ const key = (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 ? void 0 : _event$currentTarget.dataset.cpkEventError;
6400
+ if (!key || !isEventErrorKey(key)) return;
6401
+ this.applyEventErrorLanding(key);
6402
+ this.requestUpdate();
6403
+ };
5407
6404
  this.handleSystemColorSchemeChange = (event) => {
5408
6405
  if (this.hasExplicitColorScheme) return;
5409
6406
  this.colorScheme = event.matches ? "dark" : "light";
@@ -5540,7 +6537,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5540
6537
  this.closePopOut();
5541
6538
  };
5542
6539
  this.handleResizePointerDown = (event) => {
5543
- var _event$currentTarget, _target$setPointerCap2;
6540
+ var _event$currentTarget2, _target$setPointerCap2;
5544
6541
  event.stopPropagation();
5545
6542
  event.preventDefault();
5546
6543
  this.hasCustomPosition.window = true;
@@ -5552,7 +6549,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5552
6549
  };
5553
6550
  this.resizeInitialSize = { ...this.contextState.window.size };
5554
6551
  this.resizeInitialPosition = { ...this.contextState.window.position };
5555
- const edge = (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 ? void 0 : _event$currentTarget.dataset.resizeEdge;
6552
+ const edge = (_event$currentTarget2 = event.currentTarget) === null || _event$currentTarget2 === void 0 ? void 0 : _event$currentTarget2.dataset.resizeEdge;
5556
6553
  this.resizeEdge = edge === "w" || edge === "e" || edge === "s" || edge === "se" || edge === "sw" ? edge : "se";
5557
6554
  if (document.body && this.dockMode !== "floating") document.body.style.transition = "";
5558
6555
  const target = event.currentTarget;
@@ -5744,6 +6741,20 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5744
6741
  var _this$playgroundAgent;
5745
6742
  (_this$playgroundAgent = this.playgroundAgent) === null || _this$playgroundAgent === void 0 || _this$playgroundAgent.abortRun();
5746
6743
  };
6744
+ this.handleSnippetImportChange = async (event) => {
6745
+ var _input$files;
6746
+ const input = event.target;
6747
+ const file = (_input$files = input.files) === null || _input$files === void 0 ? void 0 : _input$files[0];
6748
+ input.value = "";
6749
+ if (!file) return;
6750
+ try {
6751
+ this.eventSnippets = importEventSnippets(await file.text());
6752
+ this.snippetError = null;
6753
+ } catch (error) {
6754
+ this.snippetError = error instanceof Error ? error.message : "Import failed.";
6755
+ }
6756
+ this.requestUpdate();
6757
+ };
5747
6758
  this.handleInspectorMetadataActionClick = (action, placement) => {
5748
6759
  var _this$core;
5749
6760
  if (!this.isOpen || this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core = this.core) === null || _this$core === void 0 ? void 0 : _this$core.telemetryDisabled)) return;
@@ -5775,6 +6786,26 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5775
6786
  if ((_this$core4 = this.core) === null || _this$core4 === void 0 ? void 0 : _this$core4.telemetryDisabled) return;
5776
6787
  trackThreadsTalkToEngineerClicked(this.getThreadsCtaTelemetryProps("talk_to_engineer", "threads_locked"));
5777
6788
  };
6789
+ this.handleSnippetListDividerPointerDown = (event) => {
6790
+ this.snippetDividerResizing = true;
6791
+ this.snippetDividerPointerId = event.pointerId;
6792
+ this.snippetDividerStartX = event.clientX;
6793
+ this.snippetDividerStartWidth = this.snippetListWidth;
6794
+ event.currentTarget.setPointerCapture(event.pointerId);
6795
+ event.preventDefault();
6796
+ };
6797
+ this.handleSnippetListDividerPointerMove = (event) => {
6798
+ if (!this.snippetDividerResizing || this.snippetDividerPointerId !== event.pointerId) return;
6799
+ const delta = event.clientX - this.snippetDividerStartX;
6800
+ this.snippetListWidth = Math.max(160, Math.min(360, this.snippetDividerStartWidth + delta));
6801
+ this.requestUpdate();
6802
+ };
6803
+ this.handleSnippetListDividerPointerUp = (event) => {
6804
+ if (this.snippetDividerPointerId !== event.pointerId) return;
6805
+ const target = event.currentTarget;
6806
+ if (target.hasPointerCapture(this.snippetDividerPointerId)) target.releasePointerCapture(this.snippetDividerPointerId);
6807
+ this.snippetDividerResizing = false;
6808
+ };
5778
6809
  this.handleThreadDividerPointerDown = (event) => {
5779
6810
  this.threadDividerResizing = true;
5780
6811
  this.threadDividerPointerId = event.pointerId;
@@ -5795,7 +6826,41 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5795
6826
  if (target.hasPointerCapture(this.threadDividerPointerId)) target.releasePointerCapture(this.threadDividerPointerId);
5796
6827
  this.threadDividerResizing = false;
5797
6828
  };
5798
- this.handleThreadsExampleOverviewVideoControl = () => {
6829
+ this.handleViewInApp = () => {
6830
+ const thread = this.getSelectedRealThread();
6831
+ if (!thread) return;
6832
+ if (this.activeViewInAppRequestId && this.inAppAgentId) (0, _copilotkit_core.emitInspectorStopViewing)({
6833
+ requestId: this.activeViewInAppRequestId,
6834
+ agentId: this.inAppAgentId
6835
+ });
6836
+ this.viewInAppError = null;
6837
+ const requestId = (0, _copilotkit_core.createInspectorThreadRequestId)();
6838
+ this.activeViewInAppRequestId = requestId;
6839
+ if (!(0, _copilotkit_core.emitInspectorViewThread)({
6840
+ requestId,
6841
+ threadId: thread.id,
6842
+ agentId: thread.agentId
6843
+ })) {
6844
+ this.activeViewInAppRequestId = null;
6845
+ this.inAppThreadId = null;
6846
+ this.inAppAgentId = null;
6847
+ this.inAppSource = null;
6848
+ this.viewInAppError = "No official chat for this agent is on the page.";
6849
+ }
6850
+ this.requestUpdate();
6851
+ };
6852
+ this.handleStopViewing = () => {
6853
+ const requestId = this.activeViewInAppRequestId;
6854
+ const agentId = this.inAppAgentId;
6855
+ if (!requestId || !agentId) return;
6856
+ this.viewInAppError = null;
6857
+ (0, _copilotkit_core.emitInspectorStopViewing)({
6858
+ requestId,
6859
+ agentId
6860
+ });
6861
+ this.requestUpdate();
6862
+ };
6863
+ this.handleThreadsExampleOverviewVideoControl = () => {
5799
6864
  const video = this.threadsExampleOverviewVideoElement;
5800
6865
  if (!video) return;
5801
6866
  if (this.threadsExampleOverviewVideoState === "playing") {
@@ -5990,6 +7055,11 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
5990
7055
  label: "AG-UI Events",
5991
7056
  icon: "Zap"
5992
7057
  },
7058
+ {
7059
+ key: "event-snippets",
7060
+ label: "Event Snippets",
7061
+ icon: "Code"
7062
+ },
5993
7063
  {
5994
7064
  key: "agents",
5995
7065
  label: "Agent",
@@ -6224,7 +7294,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6224
7294
  const statusSub = store.select(createThreadStoreStatusSelector()).subscribe(({ error, isLoading }) => {
6225
7295
  if (capabilityGeneration !== this.threadCapabilityGeneration || !this.areThreadEndpointsAvailable()) return;
6226
7296
  if (error) this._threadsErrorByAgent.set(agentId, error);
6227
- else this._threadsErrorByAgent.delete(agentId);
7297
+ else if (!isLoading) this._threadsErrorByAgent.delete(agentId);
6228
7298
  this._threadsLoadingByAgent.set(agentId, isLoading);
6229
7299
  this.requestUpdate();
6230
7300
  });
@@ -6238,7 +7308,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6238
7308
  this._threadsLoadingByAgent.set(agentId, (0, _copilotkit_core.ɵselectThreadsIsLoading)(initialState));
6239
7309
  const initialError = (0, _copilotkit_core.ɵselectThreadsError)(initialState);
6240
7310
  if (initialError) this._threadsErrorByAgent.set(agentId, initialError);
6241
- else this._threadsErrorByAgent.delete(agentId);
7311
+ else if (!(0, _copilotkit_core.ɵselectThreadsIsLoading)(initialState)) this._threadsErrorByAgent.delete(agentId);
6242
7312
  this.rebuildFlattenedThreads();
6243
7313
  this.autoSelectLatestThread();
6244
7314
  }
@@ -6317,11 +7387,32 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6317
7387
  core.registerThreadStore(agentId, store);
6318
7388
  }
6319
7389
  refreshOwnedThreadStore(agentId) {
7390
+ var _this$threadRefreshLa;
6320
7391
  if (!this.areThreadEndpointsAvailable()) return;
6321
7392
  const store = this._ownedThreadStores.get(agentId);
6322
7393
  if (!store) return;
7394
+ const now = Date.now();
7395
+ const waitMs = THREAD_LIST_DEBOUNCE_MS - (now - ((_this$threadRefreshLa = this.threadRefreshLastSentAt.get(agentId)) !== null && _this$threadRefreshLa !== void 0 ? _this$threadRefreshLa : 0));
7396
+ if (waitMs <= 0) {
7397
+ this.sendOwnedThreadRefresh(agentId, store, now);
7398
+ return;
7399
+ }
7400
+ if (this.threadRefreshTrailingTimers.has(agentId)) return;
7401
+ this.threadRefreshTrailingTimers.set(agentId, setTimeout(() => {
7402
+ this.threadRefreshTrailingTimers.delete(agentId);
7403
+ const current = this._ownedThreadStores.get(agentId);
7404
+ if (!current) return;
7405
+ this.sendOwnedThreadRefresh(agentId, current, Date.now());
7406
+ }, waitMs));
7407
+ }
7408
+ sendOwnedThreadRefresh(agentId, store, sentAt) {
7409
+ this.threadRefreshLastSentAt.set(agentId, sentAt);
6323
7410
  store.refresh();
6324
7411
  }
7412
+ cancelThreadRefreshDebounce() {
7413
+ for (const timer of this.threadRefreshTrailingTimers.values()) clearTimeout(timer);
7414
+ this.threadRefreshTrailingTimers.clear();
7415
+ }
6325
7416
  updateOwnedThreadStoreHeaders(headers) {
6326
7417
  if (!this.areThreadEndpointsAvailable()) return;
6327
7418
  const core = this.core;
@@ -6383,6 +7474,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6383
7474
  this.runtimeStatus = core.runtimeConnectionStatus;
6384
7475
  this.coreProperties = core.properties;
6385
7476
  this.lastCoreError = null;
7477
+ this.clearAllEventErrors();
6386
7478
  const supportsInspectorMetadata = this.coreSupportsInspectorMetadata(core);
6387
7479
  this.updateInspectorMetadataProjection(this.readCoreInspectorMetadata(core));
6388
7480
  this.coreSubscriber = {
@@ -6418,11 +7510,12 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6418
7510
  this.updateInspectorMetadataProjection(inspectorMetadata);
6419
7511
  this.requestUpdate();
6420
7512
  } } : {},
6421
- onError: ({ code, error }) => {
7513
+ onError: ({ code, error, context }) => {
6422
7514
  this.lastCoreError = {
6423
7515
  code,
6424
7516
  message: error.message
6425
7517
  };
7518
+ this.armEventErrorFromCode(code, error.message, context);
6426
7519
  this.requestUpdate();
6427
7520
  },
6428
7521
  onAgentsChanged: ({ agents }) => {
@@ -6515,6 +7608,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6515
7608
  }),
6516
7609
  memoryStore.select(_copilotkit_core.ɵselectMemoriesError).subscribe((v) => {
6517
7610
  this._memoriesError = v;
7611
+ if (v) this.armEventError("memory", v.message);
6518
7612
  this.requestUpdate();
6519
7613
  }),
6520
7614
  memoryStore.select(_copilotkit_core.ɵselectMemoriesAvailable).subscribe((v) => {
@@ -6603,10 +7697,12 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6603
7697
  this._recallQuery = "";
6604
7698
  this.coreSubscriber = null;
6605
7699
  this.runtimeStatus = null;
7700
+ this.cancelThreadRefreshDebounce();
6606
7701
  this.inspectorMetadataValue = void 0;
6607
7702
  this.inspectorMetadataProjection = projectInspectorMetadata(void 0, void 0);
6608
7703
  this.metadataTelemetryFingerprints.clear();
6609
7704
  this.lastCoreError = null;
7705
+ this.clearAllEventErrors();
6610
7706
  this.coreProperties = {};
6611
7707
  this.cachedTools = [];
6612
7708
  this.toolSignature = "";
@@ -6933,6 +8029,19 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6933
8029
  this.persistState();
6934
8030
  this.requestUpdate();
6935
8031
  }
8032
+ focusEventSnippets(options) {
8033
+ this.pendingPersistedMenu = null;
8034
+ this.selectedMenu = "event-snippets";
8035
+ this.settingsOpen = false;
8036
+ this.lastSelectedMenuByGroup.inspect = "event-snippets";
8037
+ this.contextMenuOpen = false;
8038
+ this.layoutMenuOpen = false;
8039
+ this.reloadEventSnippets();
8040
+ if (options.snippetId) this.selectEventSnippet(options.snippetId);
8041
+ if (options.agentId && this.contextOptions.some((option) => option.key === options.agentId)) this.selectedContext = options.agentId;
8042
+ this.persistState();
8043
+ this.requestUpdate();
8044
+ }
6936
8045
  filterEvents(events) {
6937
8046
  const query = this.eventFilterText.trim().toLowerCase();
6938
8047
  return events.filter((event) => {
@@ -6985,6 +8094,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6985
8094
  }
6986
8095
  renderToolCallDetails(toolCalls) {
6987
8096
  if (!Array.isArray(toolCalls) || toolCalls.length === 0) return lit.nothing;
8097
+ const toolError = this.eventErrorDetails.tool;
6988
8098
  return lit.html`
6989
8099
  <div class="mt-2 space-y-2">
6990
8100
  ${toolCalls.map((call, index) => {
@@ -6992,16 +8102,21 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
6992
8102
  const functionName = (_ref9 = (_call$function$name = (_call$function = call.function) === null || _call$function === void 0 ? void 0 : _call$function.name) !== null && _call$function$name !== void 0 ? _call$function$name : call.toolName) !== null && _ref9 !== void 0 ? _ref9 : "Unknown function";
6993
8103
  const callId = typeof (call === null || call === void 0 ? void 0 : call.id) === "string" ? call.id : `tool-call-${index + 1}`;
6994
8104
  const argsString = this.formatToolCallArguments((_call$function2 = call.function) === null || _call$function2 === void 0 ? void 0 : _call$function2.arguments);
8105
+ const isFailedCall = (toolError === null || toolError === void 0 ? void 0 : toolError.toolCallId) !== void 0 && toolError.toolCallId === callId;
6995
8106
  return lit.html`
6996
8107
  <div
6997
- class="rounded-md border border-gray-200 bg-gray-50 p-3 text-xs text-gray-700"
8108
+ class=${isFailedCall ? "rounded-md border border-rose-300 bg-rose-50 p-3 text-xs text-gray-900" : "rounded-md border border-gray-200 bg-gray-50 p-3 text-xs text-gray-700"}
8109
+ data-cpk-failed-tool-call=${isFailedCall ? callId : void 0}
6998
8110
  >
6999
8111
  <div
7000
8112
  class="flex flex-wrap items-center justify-between gap-1 font-medium text-gray-900"
7001
8113
  >
7002
- <span>${functionName}</span>
7003
- <span class="text-[10px] text-gray-500">ID: ${callId}</span>
8114
+ <span>${functionName}${isFailedCall ? " failed" : ""}</span>
8115
+ <span class="text-[10px] text-gray-600">ID: ${callId}</span>
7004
8116
  </div>
8117
+ ${isFailedCall && (toolError === null || toolError === void 0 ? void 0 : toolError.message) ? lit.html`<p class="mt-2 break-words leading-relaxed text-gray-800">
8118
+ ${toolError.message}
8119
+ </p>` : lit.nothing}
7005
8120
  ${argsString ? lit.html`<pre
7006
8121
  class="mt-2 overflow-auto rounded bg-white p-2 text-[11px] leading-relaxed text-gray-800"
7007
8122
  >
@@ -7132,6 +8247,7 @@ ${argsString}</pre
7132
8247
  clearLegacyAnnouncementReadState();
7133
8248
  this.tryAutoAttachCore();
7134
8249
  this.ensureAnnouncementLoading();
8250
+ this.subscribeToInspectorThreadBridge();
7135
8251
  }
7136
8252
  this.requestUpdate();
7137
8253
  }
@@ -7154,13 +8270,16 @@ ${argsString}</pre
7154
8270
  clearTimeout(this.transitionTimeoutId);
7155
8271
  this.transitionTimeoutId = null;
7156
8272
  }
8273
+ this.unsubscribeFromInspectorThreadBridge();
7157
8274
  this.threadsSetupPromptCopyGeneration += 1;
7158
8275
  if (this.threadsSetupPromptCopyResetTimeoutId !== null) {
7159
8276
  window.clearTimeout(this.threadsSetupPromptCopyResetTimeoutId);
7160
8277
  this.threadsSetupPromptCopyResetTimeoutId = null;
7161
8278
  }
7162
8279
  this.threadsSetupPromptCopyState = "idle";
7163
- this.stopNewsSignalPulse();
8280
+ this.stopSignalPulse();
8281
+ this.cancelGestureTail();
8282
+ this.cancelThreadRefreshDebounce();
7164
8283
  this.clearInspectorUsageRefresh();
7165
8284
  this.cleanupThreadsExampleOverviewVideo();
7166
8285
  this.removeDockStyles(true);
@@ -7203,6 +8322,7 @@ ${argsString}</pre
7203
8322
  ` : this.renderButton();
7204
8323
  }
7205
8324
  willUpdate() {
8325
+ this.evaluateErrorSignals();
7206
8326
  this.reconcileSelectedMenuVisibility();
7207
8327
  if (this.isOpen && this.dockMode === "docked-left") this.setAttribute("data-docked", "true");
7208
8328
  else this.removeAttribute("data-docked");
@@ -7212,7 +8332,11 @@ ${argsString}</pre
7212
8332
  this.syncThreadsExampleOverviewVideo();
7213
8333
  this.maybeTrackInspectorMetadataViews();
7214
8334
  this.maybeTrackNewsSignalViewed();
8335
+ this.resolvePillDirection();
8336
+ this.maybeTrackErrorSignalViewed();
7215
8337
  this.maybeCompleteWhatsNewView();
8338
+ this.maybeCompleteEventErrorView();
8339
+ this.flushErrorLandingScroll();
7216
8340
  this.maybeTrackHomeViewed();
7217
8341
  if (!this.isOpen) {
7218
8342
  this.lastScrolledAgentNavigationLayout = null;
@@ -7238,6 +8362,7 @@ ${argsString}</pre
7238
8362
  this.lastScrolledAgentNavigationLayout = layoutKey;
7239
8363
  }
7240
8364
  renderButton() {
8365
+ var _this$getGestureLabel;
7241
8366
  const buttonClasses = [
7242
8367
  "console-button",
7243
8368
  "group",
@@ -7270,20 +8395,33 @@ ${argsString}</pre
7270
8395
  "select-none",
7271
8396
  this.isDragging ? "cursor-grabbing" : "cursor-pointer"
7272
8397
  ].join(" ");
7273
- const signalStyles = this.newsSignalArmed ? {
7274
- "--cpk-launcher-signal": NEWS_SIGNAL_COLOR,
7275
- "--cpk-launcher-cadence": `${NEWS_SIGNAL_CADENCE_MS}ms`
8398
+ const activeSignal = this.getActiveLauncherSignal();
8399
+ const signal = activeSignal ? LAUNCHER_SIGNALS[activeSignal] : null;
8400
+ const signalStyles = signal ? {
8401
+ "--cpk-launcher-signal": LAUNCHER_SIGNAL_COLORS[signal.tone],
8402
+ "--cpk-launcher-cadence": `${signal.cadence}ms`
7276
8403
  } : {};
7277
8404
  return lit.html`
7278
- <div class="console-button-wrapper">
8405
+ <div
8406
+ class="console-button-wrapper"
8407
+ data-cpk-hud=${this.launcherHudOpen ? "open" : "closed"}
8408
+ @pointerenter=${this.handleLauncherHudEnter}
8409
+ @pointerleave=${this.handleLauncherHudLeave}
8410
+ @focusin=${this.handleLauncherHudFocusIn}
8411
+ @focusout=${this.handleLauncherHudFocusOut}
8412
+ @keydown=${this.handleLauncherHudKeydown}
8413
+ >
8414
+ ${this.renderLauncherPill()}
7279
8415
  <button
7280
8416
  class=${buttonClasses}
7281
8417
  type="button"
7282
- aria-label="Web Inspector"
7283
- title=${this.newsSignalArmed ? `${WHATS_NEW_VIEW_LABEL} — unread` : lit.nothing}
8418
+ aria-expanded=${this.launcherHudOpen ? "true" : "false"}
8419
+ aria-controls=${this.launcherHudOpen ? "cpk-launcher-hud" : lit.nothing}
8420
+ aria-label=${signal && signal.tone === "error" ? `${LAUNCHER_BASE_LABEL}, ${signal.accessibleLabel}` : LAUNCHER_BASE_LABEL}
8421
+ title=${activeSignal === NEWS_SIGNAL_ID ? `${WHATS_NEW_VIEW_LABEL} — unread` : lit.nothing}
7284
8422
  data-drag-context="button"
7285
- data-cpk-signal=${this.newsSignalArmed ? NEWS_SIGNAL_TONE : lit.nothing}
7286
- data-cpk-signal-pulsing=${this.newsSignalArmed && this.newsSignalPulsing ? "true" : lit.nothing}
8423
+ data-cpk-signal=${signal ? signal.tone : lit.nothing}
8424
+ data-cpk-signal-pulsing=${activeSignal !== null && this.pulsingSignal === activeSignal ? "true" : lit.nothing}
7287
8425
  style=${(0, lit_directives_style_map_js.styleMap)(signalStyles)}
7288
8426
  data-dragging=${this.isDragging && this.pointerContext === "button" ? "true" : "false"}
7289
8427
  @pointerdown=${this.handlePointerDown}
@@ -7298,16 +8436,213 @@ ${argsString}</pre
7298
8436
  class="cpk-launcher-mark h-6 w-auto"
7299
8437
  loading="lazy"
7300
8438
  />
7301
- ${this.newsSignalArmed ? lit.html`<span
8439
+ ${activeSignal !== null ? lit.html`<span
7302
8440
  class="cpk-launcher-signal-wash"
7303
8441
  aria-hidden="true"
7304
8442
  ></span>
7305
8443
  <span
7306
8444
  class="cpk-launcher-signal-dot"
7307
- data-cpk-signal-dot=${NEWS_SIGNAL_ID}
8445
+ data-cpk-signal-dot=${activeSignal}
7308
8446
  aria-hidden="true"
7309
8447
  ></span>` : lit.nothing}
7310
8448
  </button>
8449
+ ${lit.html`<span
8450
+ class="sr-only"
8451
+ data-cpk-launcher-announcement
8452
+ role="status"
8453
+ aria-live="polite"
8454
+ >${(_this$getGestureLabel = this.getGestureLabel()) !== null && _this$getGestureLabel !== void 0 ? _this$getGestureLabel : ""}</span
8455
+ >`}
8456
+ ${this.renderLauncherHud()}
8457
+ </div>
8458
+ `;
8459
+ }
8460
+ /**
8461
+ * The words the running gesture carries, or null when the launcher is quiet.
8462
+ *
8463
+ * Read from the signal's own description rather than from a condition on the
8464
+ * tone, so a third signal can carry a pill by declaring a label.
8465
+ */
8466
+ getGestureLabel() {
8467
+ var _LAUNCHER_SIGNALS$thi;
8468
+ if (this.gestureSignal === null) return null;
8469
+ return (_LAUNCHER_SIGNALS$thi = LAUNCHER_SIGNALS[this.gestureSignal].pillLabel) !== null && _LAUNCHER_SIGNALS$thi !== void 0 ? _LAUNCHER_SIGNALS$thi : null;
8470
+ }
8471
+ /**
8472
+ * The pill, laid out at its full width and clipped, for the whole gesture.
8473
+ *
8474
+ * It renders from the first frame of the beat — clipped to nothing, so it
8475
+ * shows nothing — because the room it needs cannot be measured until it has
8476
+ * been laid out, and the direction is decided at gesture start.
8477
+ */
8478
+ renderLauncherPill() {
8479
+ var _this$pillDirection;
8480
+ const key = this.gestureSignal;
8481
+ if (key === null || this.pillPhase === null) return lit.nothing;
8482
+ const signal = LAUNCHER_SIGNALS[key];
8483
+ const label = signal.pillLabel;
8484
+ if (label === void 0) return lit.nothing;
8485
+ return lit.html`
8486
+ <span
8487
+ class="cpk-launcher-pill"
8488
+ data-cpk-launcher-pill=${key}
8489
+ data-cpk-pill-phase=${this.pillPhase}
8490
+ data-cpk-pill-direction=${(_this$pillDirection = this.pillDirection) !== null && _this$pillDirection !== void 0 ? _this$pillDirection : "left"}
8491
+ style=${(0, lit_directives_style_map_js.styleMap)({
8492
+ "--cpk-launcher-signal": LAUNCHER_SIGNAL_COLORS[signal.tone],
8493
+ "--cpk-launcher-pill-open": `${ERROR_GESTURE_MS.open}ms`,
8494
+ "--cpk-launcher-pill-close": `${ERROR_GESTURE_MS.close}ms`
8495
+ })}
8496
+ aria-hidden="true"
8497
+ @click=${this.handlePillClick}
8498
+ >
8499
+ <span class="cpk-launcher-pill__heading" data-cpk-pill-heading
8500
+ >${label}</span
8501
+ >
8502
+ <span class="cpk-launcher-pill__subline" data-cpk-pill-subline
8503
+ >${PILL_SUBLINE_LABEL}</span
8504
+ >
8505
+ </span>
8506
+ `;
8507
+ }
8508
+ isLauncherHudBlocked() {
8509
+ return this.gestureSignal !== null;
8510
+ }
8511
+ resolveLauncherHudSide() {
8512
+ if (typeof window === "undefined") {
8513
+ this.launcherHudSide = "left";
8514
+ return;
8515
+ }
8516
+ const button = this.activeRoot.querySelector(".console-button");
8517
+ if (!button) {
8518
+ this.launcherHudSide = "left";
8519
+ return;
8520
+ }
8521
+ if (button.getBoundingClientRect().left - LAUNCHER_HUD_WIDTH >= EDGE_MARGIN) {
8522
+ this.launcherHudSide = "left";
8523
+ return;
8524
+ }
8525
+ this.launcherHudSide = "right";
8526
+ }
8527
+ openLauncherHud() {
8528
+ if (this.isLauncherHudBlocked() || this.isOpen) return;
8529
+ this.resolveLauncherHudSide();
8530
+ if (this.launcherHudCloseTimer !== null) {
8531
+ clearTimeout(this.launcherHudCloseTimer);
8532
+ this.launcherHudCloseTimer = null;
8533
+ }
8534
+ if (this.launcherHudOpen) return;
8535
+ this.launcherHudOpen = true;
8536
+ this.requestUpdate();
8537
+ }
8538
+ closeLauncherHud() {
8539
+ if (this.launcherHudCloseTimer !== null) {
8540
+ clearTimeout(this.launcherHudCloseTimer);
8541
+ this.launcherHudCloseTimer = null;
8542
+ }
8543
+ if (!this.launcherHudOpen && this.launcherHudHelp === null) return;
8544
+ this.launcherHudOpen = false;
8545
+ this.launcherHudHelp = null;
8546
+ this.requestUpdate();
8547
+ }
8548
+ renderHudCheck() {
8549
+ return lit.html`
8550
+ <svg
8551
+ class="cpk-launcher-hud__check"
8552
+ viewBox="0 0 16 16"
8553
+ aria-hidden="true"
8554
+ focusable="false"
8555
+ data-cpk-hud-check
8556
+ >
8557
+ <path
8558
+ fill="none"
8559
+ stroke="currentColor"
8560
+ stroke-width="2"
8561
+ stroke-linecap="round"
8562
+ stroke-linejoin="round"
8563
+ d="M3 8.5 6.5 12 13 4.5"
8564
+ />
8565
+ </svg>
8566
+ `;
8567
+ }
8568
+ renderHudRow(args) {
8569
+ const helpOpen = this.launcherHudHelp === args.id;
8570
+ const detailId = `cpk-hud-detail-${args.id}`;
8571
+ return lit.html`
8572
+ <li
8573
+ class="cpk-launcher-hud__row"
8574
+ data-cpk-hud-row=${args.id}
8575
+ data-cpk-hud-help=${helpOpen ? "open" : lit.nothing}
8576
+ @click=${(event) => this.handleHudRowClick(event, args.id)}
8577
+ >
8578
+ <button
8579
+ type="button"
8580
+ class="cpk-launcher-hud__action"
8581
+ data-cpk-hud-action
8582
+ aria-describedby=${detailId}
8583
+ @click=${(event) => this.handleHudActionClick(event, args.id)}
8584
+ @pointerdown=${(event) => event.stopPropagation()}
8585
+ >
8586
+ ${args.connected ? this.renderHudCheck() : lit.nothing}${args.label}
8587
+ </button>
8588
+ <button
8589
+ type="button"
8590
+ class="cpk-launcher-hud__help"
8591
+ aria-expanded=${helpOpen ? "true" : "false"}
8592
+ aria-controls=${detailId}
8593
+ aria-label=${`About ${args.label}`}
8594
+ @click=${(event) => this.handleHudHelpClick(event, args.id)}
8595
+ @pointerdown=${(event) => event.stopPropagation()}
8596
+ >
8597
+ <span aria-hidden="true">?</span>
8598
+ </button>
8599
+ <p class="cpk-launcher-hud__detail" id=${detailId}>${args.detail}</p>
8600
+ </li>
8601
+ `;
8602
+ }
8603
+ renderLauncherHud() {
8604
+ var _this$_core6;
8605
+ if (!this.launcherHudOpen) return lit.nothing;
8606
+ const threadsOn = this.areThreadEndpointsAvailable();
8607
+ const intelligenceOn = Boolean((_this$_core6 = this._core) === null || _this$_core6 === void 0 ? void 0 : _this$_core6.intelligence);
8608
+ const learningOn = intelligenceOn && this._memoriesAvailable;
8609
+ return lit.html`
8610
+ <div
8611
+ class="cpk-launcher-hud"
8612
+ id="cpk-launcher-hud"
8613
+ data-cpk-launcher-hud
8614
+ data-cpk-hud-side=${this.launcherHudSide}
8615
+ >
8616
+ <div class="cpk-launcher-hud__card">
8617
+ <span class="cpk-launcher-hud__arrow" aria-hidden="true"></span>
8618
+ <ul class="cpk-launcher-hud__list" role="list">
8619
+ ${this.renderHudRow({
8620
+ id: "inspector",
8621
+ label: HUD_OPEN_INSPECTOR_LABEL,
8622
+ detail: HUD_OPEN_INSPECTOR_DETAIL
8623
+ })}
8624
+ </ul>
8625
+ <ul class="cpk-launcher-hud__list" role="list">
8626
+ ${this.renderHudRow({
8627
+ id: "threads",
8628
+ label: threadsOn ? HUD_THREADS_ON_LABEL : HUD_THREADS_OFF_LABEL,
8629
+ detail: threadsOn ? HUD_THREADS_ON_DETAIL : HUD_THREADS_OFF_DETAIL,
8630
+ connected: threadsOn
8631
+ })}
8632
+ ${this.renderHudRow({
8633
+ id: "intelligence",
8634
+ label: intelligenceOn ? HUD_INTELLIGENCE_ON_LABEL : HUD_INTELLIGENCE_OFF_LABEL,
8635
+ detail: intelligenceOn ? HUD_INTELLIGENCE_ON_DETAIL : HUD_INTELLIGENCE_OFF_DETAIL,
8636
+ connected: intelligenceOn
8637
+ })}
8638
+ ${this.renderHudRow({
8639
+ id: "learning",
8640
+ label: learningOn ? HUD_LEARNING_ON_LABEL : HUD_LEARNING_OFF_LABEL,
8641
+ detail: learningOn ? HUD_LEARNING_ON_DETAIL : HUD_LEARNING_OFF_DETAIL,
8642
+ connected: learningOn
8643
+ })}
8644
+ </ul>
8645
+ </div>
7311
8646
  </div>
7312
8647
  `;
7313
8648
  }
@@ -7330,7 +8665,6 @@ ${argsString}</pre
7330
8665
  `;
7331
8666
  }
7332
8667
  renderInspectorSidebar(iconRail, automaticallyCollapsed, agentSelector) {
7333
- const unread = this.newsSignalArmed && this.announcementLoaded;
7334
8668
  const homeModel = this.getHomeModel();
7335
8669
  return lit.html`
7336
8670
  <aside
@@ -7372,7 +8706,7 @@ ${argsString}</pre
7372
8706
  </button>` : lit.nothing}
7373
8707
  ${items.map((item) => {
7374
8708
  const isSelected = this.selectedMenu === item.key;
7375
- const showBadge = item.key === NEWS_SIGNAL_DESTINATION && unread;
8709
+ const marker = this.getNavigationSignalFor(item.key);
7376
8710
  return lit.html`
7377
8711
  <button
7378
8712
  type="button"
@@ -7380,7 +8714,7 @@ ${argsString}</pre
7380
8714
  data-inspector-group=${group}
7381
8715
  data-inspector-menu-key=${item.key}
7382
8716
  aria-current=${isSelected ? "page" : lit.nothing}
7383
- aria-label=${showBadge ? `${item.label}, new content` : item.label}
8717
+ aria-label=${marker ? `${item.label}, ${marker.accessibleLabel}` : item.label}
7384
8718
  data-inspector-tooltip=${item.label}
7385
8719
  title=${iconRail ? lit.nothing : item.label}
7386
8720
  style=${INTERACTIVE_FOCUS_BASE_STYLE}
@@ -7394,8 +8728,12 @@ ${argsString}</pre
7394
8728
  ${item.key === "threads" ? (0, lit_directives_unsafe_html_js.unsafeHTML)(this.customTabIcons.threads) : this.renderIcon(item.icon)}
7395
8729
  </span>
7396
8730
  <span class="inspector-nav-label">${item.label}</span>
7397
- ${showBadge ? lit.html`
7398
- <span class="inspector-nav-signal-dot" aria-hidden="true"></span>
8731
+ ${marker ? lit.html`
8732
+ <span
8733
+ class="inspector-nav-signal-dot"
8734
+ data-cpk-signal-tone=${marker.tone}
8735
+ aria-hidden="true"
8736
+ ></span>
7399
8737
  ` : lit.nothing}
7400
8738
  </button>
7401
8739
  `;
@@ -7513,13 +8851,13 @@ ${argsString}</pre
7513
8851
  `;
7514
8852
  }
7515
8853
  getHomeModel() {
7516
- var _this$_core6, _this$_core7, _this$_core8, _this$_core9, _this$_core10, _this$_core11, _this$_core12, _this$announcementPre, _this$announcementMar, _this$announcementHtm;
8854
+ var _this$_core7, _this$_core8, _this$_core9, _this$_core10, _this$_core11, _this$_core12, _this$_core13, _this$announcementPre, _this$announcementMar, _this$announcementHtm;
7517
8855
  const lastRuntimeEvent = this.flattenedEvents[0];
7518
8856
  return buildHomeModel({
7519
- intelligenceConnected: Boolean((_this$_core6 = this._core) === null || _this$_core6 === void 0 ? void 0 : _this$_core6.intelligence),
8857
+ intelligenceConnected: Boolean((_this$_core7 = this._core) === null || _this$_core7 === void 0 ? void 0 : _this$_core7.intelligence),
7520
8858
  threadsAvailable: this.areThreadEndpointsAvailable(),
7521
8859
  metadata: this.inspectorMetadataProjection,
7522
- runtimeUrl: (_this$_core7 = this._core) === null || _this$_core7 === void 0 ? void 0 : _this$_core7.runtimeUrl,
8860
+ runtimeUrl: (_this$_core8 = this._core) === null || _this$_core8 === void 0 ? void 0 : _this$_core8.runtimeUrl,
7523
8861
  runtimeConnectionState: this.getCoreStatusSummary().state,
7524
8862
  lastRuntimeEvent: lastRuntimeEvent ? {
7525
8863
  id: lastRuntimeEvent.id,
@@ -7528,11 +8866,11 @@ ${argsString}</pre
7528
8866
  timestamp: lastRuntimeEvent.timestamp
7529
8867
  } : void 0,
7530
8868
  memoriesOn: this._memoriesAvailable,
7531
- a2uiOn: ((_this$_core8 = this._core) === null || _this$_core8 === void 0 ? void 0 : _this$_core8.a2uiEnabled) === true,
7532
- openGenUiOn: ((_this$_core9 = this._core) === null || _this$_core9 === void 0 ? void 0 : _this$_core9.openGenerativeUIEnabled) === true,
7533
- suggestionsOn: ((_this$_core10 = this._core) === null || _this$_core10 === void 0 ? void 0 : _this$_core10.suggestions) === true,
7534
- audioOn: ((_this$_core11 = this._core) === null || _this$_core11 === void 0 ? void 0 : _this$_core11.audioFileTranscriptionEnabled) === true,
7535
- websocketUrl: (_this$_core12 = this._core) === null || _this$_core12 === void 0 || (_this$_core12 = _this$_core12.intelligence) === null || _this$_core12 === void 0 ? void 0 : _this$_core12.wsUrl,
8869
+ a2uiOn: ((_this$_core9 = this._core) === null || _this$_core9 === void 0 ? void 0 : _this$_core9.a2uiEnabled) === true,
8870
+ openGenUiOn: ((_this$_core10 = this._core) === null || _this$_core10 === void 0 ? void 0 : _this$_core10.openGenerativeUIEnabled) === true,
8871
+ suggestionsOn: ((_this$_core11 = this._core) === null || _this$_core11 === void 0 ? void 0 : _this$_core11.suggestions) === true,
8872
+ audioOn: ((_this$_core12 = this._core) === null || _this$_core12 === void 0 ? void 0 : _this$_core12.audioFileTranscriptionEnabled) === true,
8873
+ websocketUrl: (_this$_core13 = this._core) === null || _this$_core13 === void 0 || (_this$_core13 = _this$_core13.intelligence) === null || _this$_core13 === void 0 ? void 0 : _this$_core13.wsUrl,
7536
8874
  announcementPreviewText: (_this$announcementPre = this.announcementPreviewText) !== null && _this$announcementPre !== void 0 ? _this$announcementPre : void 0,
7537
8875
  announcementMarkdown: (_this$announcementMar = this.announcementMarkdown) !== null && _this$announcementMar !== void 0 ? _this$announcementMar : void 0,
7538
8876
  announcementHtml: (_this$announcementHtm = this.announcementHtml) !== null && _this$announcementHtm !== void 0 ? _this$announcementHtm : void 0,
@@ -7876,6 +9214,31 @@ ${argsString}</pre
7876
9214
  })}
7877
9215
  </dl>
7878
9216
  </section>
9217
+ `;
9218
+ }
9219
+ renderEventErrorBanner(key) {
9220
+ const error = this.eventErrorDetails[key];
9221
+ if (!error) return lit.nothing;
9222
+ const guide = EVENT_ERROR_GUIDANCE[key];
9223
+ return lit.html`
9224
+ <div
9225
+ class="mx-3 mt-3 flex cursor-pointer items-start gap-2 rounded-lg border border-rose-200 bg-rose-50 px-3 py-2 text-left text-[11px] text-rose-950"
9226
+ role="alert"
9227
+ tabindex="0"
9228
+ data-cpk-event-error=${key}
9229
+ @click=${this.refocusEventErrorLanding}
9230
+ @keydown=${this.handleEventErrorBannerKeydown}
9231
+ >
9232
+ <span class="mt-0.5 shrink-0">${this.renderIcon("TriangleAlert")}</span>
9233
+ <div class="min-w-0 flex-1 space-y-1">
9234
+ <p class="font-semibold">${guide.title}</p>
9235
+ ${error.agentId ? lit.html`<p>Agent: ${error.agentId}</p>` : lit.nothing}
9236
+ ${error.toolName ? lit.html`<p>Tool: ${error.toolName}</p>` : lit.nothing}
9237
+ <p class="break-words leading-relaxed">${error.message}</p>
9238
+ ${guide.advice ? lit.html`<p class="leading-relaxed">${guide.advice}</p>` : lit.nothing}
9239
+ ${guide.highlight && this.hasEventErrorHighlight(key) ? lit.html`<p class="leading-relaxed">${guide.highlight}</p>` : lit.nothing}
9240
+ </div>
9241
+ </div>
7879
9242
  `;
7880
9243
  }
7881
9244
  handleHomeLastEventSelect(eventId, agentId) {
@@ -8608,21 +9971,34 @@ ${argsString}</pre
8608
9971
  this.draggedDuringInteraction = false;
8609
9972
  }
8610
9973
  openInspector(source, options = {}) {
8611
- if (options.threadId) this.focusThread(options);
9974
+ if (options.snippetId || options.menu === "event-snippets") this.focusEventSnippets(options);
9975
+ else if (options.threadId) this.focusThread(options);
8612
9976
  if (this.isPoppedOut) return;
8613
9977
  if (this.isOpen) return;
8614
9978
  const hadUnseenAnnouncement = this.newsSignalArmed;
9979
+ const activeSignalAtOpen = this.getActiveLauncherSignal();
8615
9980
  const firstOpen = !this.hasOpenedInspector;
8616
9981
  this.hasOpenedInspector = true;
8617
9982
  this.homeViewedThisOpen = false;
8618
- if (this.newsSignalArmed && source === "floating_button") {
8619
- this.selectedMenu = "home";
8620
- this.lastSelectedMenuByGroup.home = "home";
9983
+ this.closeLauncherHud();
9984
+ const hudMenu = this.hudLandingMenu;
9985
+ this.hudLandingMenu = null;
9986
+ if (hudMenu) {
9987
+ this.selectedMenu = hudMenu;
9988
+ this.lastSelectedMenuByGroup[getGroupForMenu(hudMenu)] = hudMenu;
9989
+ } else if (activeSignalAtOpen !== null && source === "floating_button") {
9990
+ const landing = LAUNCHER_SIGNALS[activeSignalAtOpen].landingTarget;
9991
+ this.selectedMenu = landing;
9992
+ this.lastSelectedMenuByGroup[getGroupForMenu(landing)] = landing;
9993
+ if (landing === "agents" || landing === "ag-ui-events") {
9994
+ if (isEventErrorKey(activeSignalAtOpen)) this.applyEventErrorLanding(activeSignalAtOpen);
9995
+ }
8621
9996
  }
8622
9997
  this.ensureAnnouncementLoading();
8623
9998
  this.isOpen = true;
9999
+ this.cancelGestureTail();
8624
10000
  this.persistState();
8625
- this.trackOpened(source, hadUnseenAnnouncement, firstOpen);
10001
+ this.trackOpened(source, hadUnseenAnnouncement, firstOpen, activeSignalAtOpen);
8626
10002
  if (this.dockMode !== "floating") this.applyDockStyles();
8627
10003
  this.ensureWindowPlacement();
8628
10004
  this.requestUpdate();
@@ -8637,7 +10013,6 @@ ${argsString}</pre
8637
10013
  if (this.isPoppedOut) return;
8638
10014
  if (!this.isOpen) return;
8639
10015
  this.isOpen = false;
8640
- if (this.newsSignalPulsePending) this.startNewsSignalPulse();
8641
10016
  if (this.dockMode !== "floating") this.removeDockStyles();
8642
10017
  this.persistState();
8643
10018
  this.updateHostTransform("button");
@@ -8645,6 +10020,7 @@ ${argsString}</pre
8645
10020
  this.updateComplete.then(() => {
8646
10021
  this.measureContext("button");
8647
10022
  this.applyAnchorPosition("button");
10023
+ this.flushPendingSignalPulse();
8648
10024
  });
8649
10025
  }
8650
10026
  renderIcon(name) {
@@ -8825,6 +10201,7 @@ ${argsString}</pre
8825
10201
  contentText,
8826
10202
  contentRaw: raw.content !== void 0 ? this.sanitizeForLogging(raw.content) : void 0,
8827
10203
  toolCalls,
10204
+ toolCallId: typeof raw.toolCallId === "string" ? raw.toolCallId : void 0,
8828
10205
  activityType: typeof raw.activityType === "string" ? raw.activityType : void 0
8829
10206
  };
8830
10207
  }
@@ -8897,8 +10274,8 @@ ${argsString}</pre
8897
10274
  };
8898
10275
  }
8899
10276
  resolvePlaygroundAgentId(preferredAgentId) {
8900
- var _this$_core$agents, _this$_core13, _Object$keys$;
8901
- const agents = (_this$_core$agents = (_this$_core13 = this._core) === null || _this$_core13 === void 0 ? void 0 : _this$_core13.agents) !== null && _this$_core$agents !== void 0 ? _this$_core$agents : {};
10277
+ var _this$_core$agents, _this$_core14, _Object$keys$;
10278
+ const agents = (_this$_core$agents = (_this$_core14 = this._core) === null || _this$_core14 === void 0 ? void 0 : _this$_core14.agents) !== null && _this$_core$agents !== void 0 ? _this$_core$agents : {};
8902
10279
  if (preferredAgentId && preferredAgentId !== "all-agents" && agents[preferredAgentId]) return preferredAgentId;
8903
10280
  return (_Object$keys$ = Object.keys(agents)[0]) !== null && _Object$keys$ !== void 0 ? _Object$keys$ : null;
8904
10281
  }
@@ -8927,13 +10304,13 @@ ${argsString}</pre
8927
10304
  });
8928
10305
  }
8929
10306
  startPlaygroundSession(showEphemeralNotice, seedMessages = [], seedState = {}, preferredAgentId) {
8930
- var _this$_core14, _this$_core15, _this$_core16;
10307
+ var _this$_core15, _this$_core16, _this$_core17;
8931
10308
  const agentId = this.resolvePlaygroundAgentId(preferredAgentId !== null && preferredAgentId !== void 0 ? preferredAgentId : this.selectedContext);
8932
- const sourceAgent = agentId ? typeof ((_this$_core14 = this._core) === null || _this$_core14 === void 0 ? void 0 : _this$_core14.getAgent) === "function" ? this._core.getAgent(agentId) : (_this$_core15 = this._core) === null || _this$_core15 === void 0 ? void 0 : _this$_core15.agents[agentId] : void 0;
10309
+ const sourceAgent = agentId ? typeof ((_this$_core15 = this._core) === null || _this$_core15 === void 0 ? void 0 : _this$_core15.getAgent) === "function" ? this._core.getAgent(agentId) : (_this$_core16 = this._core) === null || _this$_core16 === void 0 ? void 0 : _this$_core16.agents[agentId] : void 0;
8933
10310
  this.teardownPlaygroundAgent();
8934
10311
  this.playgroundError = null;
8935
10312
  this.playgroundSourceThreadId = null;
8936
- this.playgroundShowEphemeralNotice = showEphemeralNotice && ((_this$_core16 = this._core) === null || _this$_core16 === void 0 ? void 0 : _this$_core16.runtimeMode) !== "intelligence";
10313
+ this.playgroundShowEphemeralNotice = showEphemeralNotice && ((_this$_core17 = this._core) === null || _this$_core17 === void 0 ? void 0 : _this$_core17.runtimeMode) !== "intelligence";
8937
10314
  if (!agentId || !sourceAgent) {
8938
10315
  this.requestUpdate();
8939
10316
  return;
@@ -9019,16 +10396,16 @@ ${argsString}</pre
9019
10396
  @submit=${this.handlePlaygroundSubmit}
9020
10397
  >
9021
10398
  ${this.playgroundError ? lit.html`<div
9022
- class="mx-auto mb-2 flex max-w-3xl items-start gap-2 rounded-lg border border-rose-200 bg-rose-50 px-2.5 py-2 text-[10px] text-rose-800"
10399
+ class="mx-auto mb-2 flex max-w-3xl items-start gap-2 rounded-lg border border-rose-200 bg-rose-50 px-2.5 py-2 text-[10px] text-rose-950"
9023
10400
  role="alert"
9024
10401
  data-playground-error
9025
10402
  >
9026
- <span class="mt-0.5 shrink-0 text-rose-600"
10403
+ <span class="mt-0.5 shrink-0"
9027
10404
  >${this.renderIcon("TriangleAlert")}</span
9028
10405
  >
9029
10406
  <div class="min-w-0 flex-1">
9030
10407
  <p class="font-semibold">Agent run failed</p>
9031
- <p class="mt-0.5 break-words leading-relaxed text-rose-700">
10408
+ <p class="mt-0.5 break-words leading-relaxed">
9032
10409
  ${this.playgroundError}
9033
10410
  </p>
9034
10411
  </div>
@@ -9074,79 +10451,640 @@ ${argsString}</pre
9074
10451
  </form>
9075
10452
  `;
9076
10453
  }
9077
- renderMainContent() {
9078
- if (this.settingsOpen) return this.renderSettingsPanel();
9079
- if (this.selectedMenu === "home") return this.renderHomeView();
9080
- if (this.selectedMenu === WHATS_NEW_MENU_KEY) return this.renderWhatsNewView();
9081
- if (this.selectedMenu === "ag-ui-events") return this.renderEventsTable();
9082
- if (this.selectedMenu === "playground") return this.renderPlaygroundView();
9083
- if (this.selectedMenu === "agents") return this.renderAgentsView();
9084
- if (this.selectedMenu === "frontend-tools") return this.renderToolsView();
9085
- if (this.selectedMenu === "capabilities") return this.renderCapabilitiesView();
9086
- if (this.selectedMenu === "agent-context") return this.renderContextView();
9087
- if (this.selectedMenu === "threads") return this.renderThreadsView();
9088
- if (this.selectedMenu === "memories") return this.renderMemoriesView();
9089
- return lit.nothing;
10454
+ reloadEventSnippets() {
10455
+ this.eventSnippets = loadEventSnippets();
9090
10456
  }
9091
- renderPlaygroundView() {
9092
- var _this$playgroundAgent4, _this$playgroundAgent5, _this$_core$runtimeMo, _this$_core17, _this$_core$runtimeUr, _this$_core18, _this$playgroundSourc;
9093
- const agentId = this.resolvePlaygroundAgentId(this.selectedContext);
9094
- const sourceThreads = this._threads.filter((thread) => !agentId || thread.agentId === agentId);
9095
- const visibleMessages = this.playgroundMessages.filter((message) => message.role === "user" || message.role === "assistant" || message.role === "reasoning" || message.role === "activity");
9096
- const hasRetry = (_this$playgroundAgent4 = (_this$playgroundAgent5 = this.playgroundAgent) === null || _this$playgroundAgent5 === void 0 ? void 0 : _this$playgroundAgent5.messages.some((message) => message.role === "user")) !== null && _this$playgroundAgent4 !== void 0 ? _this$playgroundAgent4 : false;
9097
- const runtimeMode = (_this$_core$runtimeMo = (_this$_core17 = this._core) === null || _this$_core17 === void 0 ? void 0 : _this$_core17.runtimeMode) !== null && _this$_core$runtimeMo !== void 0 ? _this$_core$runtimeMo : "sse";
9098
- const runtimeLabel = (_this$_core$runtimeUr = (_this$_core18 = this._core) === null || _this$_core18 === void 0 ? void 0 : _this$_core18.runtimeUrl) !== null && _this$_core$runtimeUr !== void 0 ? _this$_core$runtimeUr : "Self-managed agent";
9099
- const busy = this.playgroundIsRunning || this.playgroundIsLoadingThread;
9100
- const suggestions = agentId && this._core ? this._core.getSuggestions(agentId).suggestions : [];
9101
- const lastAssistantIndex = visibleMessages.reduce((last, message, index) => message.role === "assistant" ? index : last, -1);
9102
- const lastReasoningIndex = visibleMessages.reduce((last, message, index) => message.role === "reasoning" ? index : last, -1);
9103
- const showWelcome = !this.playgroundIsLoadingThread && visibleMessages.length === 0;
10457
+ renderSnippetImportControl() {
9104
10458
  return lit.html`
9105
- <div
9106
- class="cpk-playground-root flex h-full min-h-[420px] flex-col bg-white"
10459
+ <label
10460
+ class="inline-flex shrink-0 cursor-pointer items-center rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] text-gray-700"
10461
+ data-testid="cpk-snippet-import"
9107
10462
  >
9108
- <header
9109
- class="cpk-playground-header flex flex-wrap items-center gap-2 border-b border-gray-200 bg-white px-3 py-2"
10463
+ Import
10464
+ <input
10465
+ type="file"
10466
+ accept="application/json"
10467
+ class="hidden"
10468
+ @change=${this.handleSnippetImportChange}
10469
+ />
10470
+ </label>
10471
+ `;
10472
+ }
10473
+ selectEventSnippet(id) {
10474
+ const snippet = this.eventSnippets.find((item) => item.id === id);
10475
+ this.selectedSnippetId = id;
10476
+ if (!snippet) {
10477
+ this.requestUpdate();
10478
+ return;
10479
+ }
10480
+ const editor = editorStateFromSnippet(snippet);
10481
+ this.snippetRecipe = editor.recipe;
10482
+ this.snippetName = editor.name;
10483
+ this.snippetJson = editor.json;
10484
+ this.snippetToolName = editor.draft.toolName;
10485
+ this.snippetToolArgs = editor.draft.toolArgs;
10486
+ this.snippetReasoningText = editor.draft.reasoningText;
10487
+ this.snippetTextContent = editor.draft.textContent;
10488
+ this.snippetActivityType = editor.draft.activityType;
10489
+ this.snippetActivityContent = editor.draft.activityContent;
10490
+ this.snippetError = null;
10491
+ this.requestUpdate();
10492
+ }
10493
+ compileSnippetDraft() {
10494
+ switch (this.snippetRecipe) {
10495
+ case "tool-call": return compileToolCallRecipe({
10496
+ toolName: this.snippetToolName,
10497
+ argsJson: this.snippetToolArgs,
10498
+ threadId: this.getSnippetThreadId(),
10499
+ runId: this.getSnippetRunId()
10500
+ });
10501
+ case "reasoning": return compileReasoningRecipe({
10502
+ text: this.snippetReasoningText,
10503
+ threadId: this.getSnippetThreadId(),
10504
+ runId: this.getSnippetRunId()
10505
+ });
10506
+ case "text": return compileTextRecipe({
10507
+ text: this.snippetTextContent,
10508
+ threadId: this.getSnippetThreadId(),
10509
+ runId: this.getSnippetRunId()
10510
+ });
10511
+ case "activity": return compileActivityRecipe({
10512
+ activityType: this.snippetActivityType,
10513
+ contentJson: this.snippetActivityContent,
10514
+ threadId: this.getSnippetThreadId(),
10515
+ runId: this.getSnippetRunId()
10516
+ });
10517
+ case "raw": return parseSnippetEvents(this.snippetJson);
10518
+ }
10519
+ }
10520
+ getSnippetThreadId() {
10521
+ var _this$selectedThreadI;
10522
+ return (_this$selectedThreadI = this.selectedThreadId) !== null && _this$selectedThreadI !== void 0 ? _this$selectedThreadI : "inspector-snippet";
10523
+ }
10524
+ getSnippetRunId() {
10525
+ return `inspector-snippet-${Date.now()}`;
10526
+ }
10527
+ getSnippetTargetAgent() {
10528
+ var _core$getAgent2;
10529
+ const core = this._core;
10530
+ if (!core) return null;
10531
+ const selected = this.selectedContext !== "all-agents" ? this.selectedContext : null;
10532
+ if (selected) {
10533
+ var _core$getAgent;
10534
+ return (_core$getAgent = core.getAgent(selected)) !== null && _core$getAgent !== void 0 ? _core$getAgent : null;
10535
+ }
10536
+ const first = this.contextOptions.find((option) => option.key !== "all-agents");
10537
+ return first ? (_core$getAgent2 = core.getAgent(first.key)) !== null && _core$getAgent2 !== void 0 ? _core$getAgent2 : null : null;
10538
+ }
10539
+ applyRecipeToEditor() {
10540
+ try {
10541
+ const events = this.compileSnippetDraft();
10542
+ this.snippetJson = JSON.stringify(events, null, 2);
10543
+ this.snippetError = null;
10544
+ } catch (error) {
10545
+ this.snippetError = error instanceof Error ? error.message : "Could not compile recipe.";
10546
+ }
10547
+ this.requestUpdate();
10548
+ }
10549
+ handleSnippetRecipeChange(event) {
10550
+ const value = event.target.value;
10551
+ if (value === "tool-call" || value === "reasoning" || value === "text" || value === "activity" || value === "raw") {
10552
+ this.snippetRecipe = value;
10553
+ if (value !== "raw") this.applyRecipeToEditor();
10554
+ else this.requestUpdate();
10555
+ }
10556
+ }
10557
+ saveCurrentSnippet(source) {
10558
+ try {
10559
+ var _this$selectedSnippet, _this$eventSnippets$f, _this$eventSnippets$f2, _this$core14;
10560
+ const events = parseSnippetEvents(this.snippetJson);
10561
+ const now = (/* @__PURE__ */ new Date()).toISOString();
10562
+ const snippet = {
10563
+ id: (_this$selectedSnippet = this.selectedSnippetId) !== null && _this$selectedSnippet !== void 0 ? _this$selectedSnippet : createSnippetId(),
10564
+ name: this.snippetName.trim() || recipeLabel(this.snippetRecipe),
10565
+ recipe: this.snippetRecipe,
10566
+ events,
10567
+ createdAt: (_this$eventSnippets$f = (_this$eventSnippets$f2 = this.eventSnippets.find((item) => item.id === this.selectedSnippetId)) === null || _this$eventSnippets$f2 === void 0 ? void 0 : _this$eventSnippets$f2.createdAt) !== null && _this$eventSnippets$f !== void 0 ? _this$eventSnippets$f : now,
10568
+ updatedAt: now
10569
+ };
10570
+ this.eventSnippets = upsertEventSnippet(snippet);
10571
+ this.selectedSnippetId = snippet.id;
10572
+ this.snippetBanner = "Snippet saved.";
10573
+ this.snippetError = null;
10574
+ if (!((_this$core14 = this.core) === null || _this$core14 === void 0 ? void 0 : _this$core14.telemetryDisabled)) trackEventSnippetsSaved({
10575
+ recipe: this.snippetRecipe,
10576
+ source,
10577
+ success: true
10578
+ });
10579
+ } catch (error) {
10580
+ var _this$core15;
10581
+ this.snippetError = error instanceof Error ? error.message : "Could not save snippet.";
10582
+ if (!((_this$core15 = this.core) === null || _this$core15 === void 0 ? void 0 : _this$core15.telemetryDisabled)) trackEventSnippetsSaved({
10583
+ recipe: this.snippetRecipe,
10584
+ source,
10585
+ success: false
10586
+ });
10587
+ }
10588
+ this.requestUpdate();
10589
+ }
10590
+ async runCurrentSnippet() {
10591
+ this.snippetError = null;
10592
+ this.snippetBanner = null;
10593
+ let events;
10594
+ try {
10595
+ events = expandSnippetEventsForRun(parseSnippetEvents(this.snippetJson));
10596
+ } catch (error) {
10597
+ this.snippetError = error instanceof Error ? error.message : "Snippet JSON is invalid.";
10598
+ this.requestUpdate();
10599
+ return;
10600
+ }
10601
+ if (snippetContainsToolCall(events) && !this.snippetConfirmOpen) {
10602
+ this.snippetConfirmOpen = true;
10603
+ this.requestUpdate();
10604
+ return;
10605
+ }
10606
+ this.snippetConfirmOpen = false;
10607
+ const core = this._core;
10608
+ const agent = this.getSnippetTargetAgent();
10609
+ if (!core || !agent) {
10610
+ this.snippetError = "No agent is available to inject into.";
10611
+ this.requestUpdate();
10612
+ return;
10613
+ }
10614
+ if (agent.isRunning) {
10615
+ this.snippetError = "The agent is running. Wait for the current run to end.";
10616
+ this.requestUpdate();
10617
+ return;
10618
+ }
10619
+ try {
10620
+ var _this$selectedSnippet2, _agent$agentId, _this$core16;
10621
+ const result = await (0, _copilotkit_core.ɵinjectInspectorEvents)({
10622
+ core,
10623
+ agent,
10624
+ events
10625
+ });
10626
+ this.lastInject = {
10627
+ snippetId: (_this$selectedSnippet2 = this.selectedSnippetId) !== null && _this$selectedSnippet2 !== void 0 ? _this$selectedSnippet2 : "unsaved",
10628
+ agentId: (_agent$agentId = agent.agentId) !== null && _agent$agentId !== void 0 ? _agent$agentId : "default",
10629
+ runId: this.getSnippetRunId(),
10630
+ messageIds: result.messageIds
10631
+ };
10632
+ this.snippetBanner = "Inspector injected these events into the live thread.";
10633
+ if (!((_this$core16 = this.core) === null || _this$core16 === void 0 ? void 0 : _this$core16.telemetryDisabled)) trackEventSnippetsRun({
10634
+ recipe: this.snippetRecipe,
10635
+ source: "pane",
10636
+ success: true
10637
+ });
10638
+ } catch (error) {
10639
+ var _this$core17;
10640
+ this.snippetError = error instanceof Error ? error.message : "Could not run snippet.";
10641
+ if (!((_this$core17 = this.core) === null || _this$core17 === void 0 ? void 0 : _this$core17.telemetryDisabled)) trackEventSnippetsRun({
10642
+ recipe: this.snippetRecipe,
10643
+ source: "pane",
10644
+ success: false
10645
+ });
10646
+ }
10647
+ this.requestUpdate();
10648
+ }
10649
+ resetLastSnippetRun() {
10650
+ const last = this.lastInject;
10651
+ const core = this._core;
10652
+ if (!last || !core) return;
10653
+ const agent = core.getAgent(last.agentId);
10654
+ if (!agent) {
10655
+ this.snippetError = "The injected agent is no longer available.";
10656
+ this.requestUpdate();
10657
+ return;
10658
+ }
10659
+ (0, _copilotkit_core.ɵresetInspectorInject)({
10660
+ agent,
10661
+ messageIds: last.messageIds
10662
+ });
10663
+ this.lastInject = null;
10664
+ this.snippetBanner = "Last inject was removed from the thread. App state from a tool handler was not undone.";
10665
+ this.requestUpdate();
10666
+ }
10667
+ renderEventSnippetsView() {
10668
+ var _this$_core$tools, _this$_core18;
10669
+ if (this.eventSnippets.length === 0 && this.selectedSnippetId === null) this.reloadEventSnippets();
10670
+ const agent = this.getSnippetTargetAgent();
10671
+ const runBlocked = (agent === null || agent === void 0 ? void 0 : agent.isRunning) === true;
10672
+ const canRunJson = snippetJsonIsRunnable(this.snippetJson);
10673
+ const canRun = canRunJson && !!agent && !runBlocked;
10674
+ const canSave = canRunJson;
10675
+ const canDelete = this.selectedSnippetId !== null;
10676
+ const canExport = this.eventSnippets.length > 0;
10677
+ const canReset = this.lastInject !== null;
10678
+ const snippetGroups = groupEventSnippets(this.eventSnippets);
10679
+ const tools = (_this$_core$tools = (_this$_core18 = this._core) === null || _this$_core18 === void 0 ? void 0 : _this$_core18.tools) !== null && _this$_core$tools !== void 0 ? _this$_core$tools : [];
10680
+ return lit.html`
10681
+ <div class="flex h-full min-h-0 flex-col bg-white">
10682
+ <div
10683
+ class="flex items-center justify-between gap-4 border-b border-gray-200 px-4 py-3"
9110
10684
  >
9111
- <div class="min-w-0 flex-1">
9112
- <div class="flex items-center gap-1.5">
9113
- <h2 class="text-xs font-semibold text-gray-900">Playground</h2>
9114
- <span
9115
- class="rounded-full border border-gray-200 bg-gray-50 px-1.5 py-0.5 text-[9px] font-medium text-gray-600"
9116
- >${runtimeMode.toUpperCase()}</span
9117
- >
9118
- </div>
9119
- <div
9120
- class="mt-0.5 flex min-w-0 items-center gap-1.5 text-[9px] text-gray-600"
9121
- >
9122
- <span class="truncate">Agent: ${agentId !== null && agentId !== void 0 ? agentId : "waiting..."}</span>
9123
- <span
9124
- class="h-3 w-px shrink-0 bg-gray-200"
9125
- aria-hidden="true"
9126
- ></span>
9127
- <span class="truncate" title=${runtimeLabel}>${runtimeLabel}</span>
9128
- </div>
10685
+ <div class="min-w-0">
10686
+ <h2 class="text-sm font-semibold text-gray-900">Event Snippets</h2>
10687
+ <p class="mt-1 text-[11px] text-gray-500">
10688
+ Compile AG-UI events, run them on the live agent, and save them
10689
+ for later. Tool-call runs use the real frontend-tool handler.
10690
+ </p>
9129
10691
  </div>
10692
+ ${this.renderSnippetImportControl()}
10693
+ </div>
10694
+ ${this.snippetBanner ? lit.html`<div
10695
+ class="border-b border-emerald-200 bg-emerald-50 px-4 py-2 text-[11px] text-emerald-800"
10696
+ role="status"
10697
+ >
10698
+ ${this.snippetBanner}
10699
+ </div>` : lit.nothing}
10700
+ ${this.snippetError ? lit.html`<div
10701
+ class="border-b border-rose-200 bg-rose-50 px-4 py-2 text-[11px] text-rose-800"
10702
+ role="alert"
10703
+ >
10704
+ ${this.snippetError}
10705
+ </div>` : lit.nothing}
10706
+ ${this.snippetConfirmOpen ? lit.html`<div
10707
+ class="border-b border-amber-200 bg-amber-50 px-4 py-2 text-[11px] text-amber-900"
10708
+ role="alertdialog"
10709
+ aria-label="Confirm tool-call run"
10710
+ >
10711
+ <p>
10712
+ This snippet contains a tool call. Run will execute the real
10713
+ handler on the live thread.
10714
+ </p>
10715
+ <div class="mt-2 flex gap-2">
10716
+ <button
10717
+ type="button"
10718
+ class="rounded-md bg-gray-900 px-2 py-1 text-[11px] text-white"
10719
+ data-testid="cpk-snippet-run-handler"
10720
+ @click=${() => {
10721
+ this.snippetConfirmOpen = true;
10722
+ this.runCurrentSnippet();
10723
+ }}
10724
+ >
10725
+ Run handler
10726
+ </button>
10727
+ <button
10728
+ type="button"
10729
+ class="rounded-md border border-gray-300 bg-white px-2 py-1 text-[11px]"
10730
+ @click=${() => {
10731
+ this.snippetConfirmOpen = false;
10732
+ this.requestUpdate();
10733
+ }}
10734
+ >
10735
+ Cancel
10736
+ </button>
10737
+ </div>
10738
+ </div>` : lit.nothing}
10739
+ <div class="flex min-h-0 flex-1">
9130
10740
  <div
9131
- class="cpk-playground-actions ml-auto flex min-w-0 items-center gap-2"
10741
+ class="inspector-snippet-sidebar shrink-0"
10742
+ style="width:${this.snippetListWidth}px"
10743
+ data-testid="cpk-snippet-list"
9132
10744
  >
9133
- ${sourceThreads.length > 0 ? lit.html`
9134
- <label class="sr-only" for="cpk-playground-thread-source"
9135
- >Start from a thread</label
9136
- >
9137
- <select
9138
- id="cpk-playground-thread-source"
9139
- class="cpk-playground-thread-select max-w-[200px] rounded-md border border-gray-200 bg-white px-2 py-1 text-[10px] text-gray-700 outline-none transition hover:border-gray-300 focus:border-violet-400 focus:ring-2 focus:ring-violet-100 disabled:cursor-not-allowed disabled:opacity-50"
9140
- .value=${(_this$playgroundSourc = this.playgroundSourceThreadId) !== null && _this$playgroundSourc !== void 0 ? _this$playgroundSourc : ""}
9141
- ?disabled=${busy}
9142
- @change=${this.handlePlaygroundThreadSourceChange}
9143
- >
9144
- <option value="">Load a thread...</option>
9145
- ${sourceThreads.map((thread) => {
9146
- var _thread$name2;
10745
+ ${snippetGroups.length === 0 ? lit.html`
10746
+ <p class="px-2 py-2 text-[11px] text-gray-500">No saved snippets yet.</p>
10747
+ ` : lit.html`
10748
+ <nav class="inspector-sidebar-nav" aria-label="Saved snippets">
10749
+ ${snippetGroups.map((group) => lit.html`
10750
+ <div class="inspector-sidebar-section">
10751
+ <div
10752
+ class="inspector-sidebar-label"
10753
+ data-testid="cpk-snippet-category"
10754
+ data-recipe=${group.recipe}
10755
+ >
10756
+ ${group.label}
10757
+ </div>
10758
+ ${group.snippets.map((snippet) => {
10759
+ const isSelected = snippet.id === this.selectedSnippetId;
9147
10760
  return lit.html`
9148
- <option value=${thread.id}>
9149
- ${((_thread$name2 = thread.name) === null || _thread$name2 === void 0 ? void 0 : _thread$name2.trim()) || `Thread ${thread.id.slice(0, 8)}`}
10761
+ <button
10762
+ type="button"
10763
+ class="inspector-nav-control inspector-sidebar-control ${isSelected ? "inspector-nav-control-active" : ""}"
10764
+ data-testid="cpk-snippet-item"
10765
+ data-recipe=${snippet.recipe}
10766
+ aria-current=${isSelected ? "page" : lit.nothing}
10767
+ aria-label="${recipeLabel(snippet.recipe)}: ${snippet.name}"
10768
+ style=${INTERACTIVE_FOCUS_BASE_STYLE}
10769
+ @click=${() => this.selectEventSnippet(snippet.id)}
10770
+ >
10771
+ <span
10772
+ class="inspector-nav-icon"
10773
+ aria-hidden="true"
10774
+ >
10775
+ <span
10776
+ class="flex h-6 w-6 items-center justify-center rounded-md ${recipeIconWrapClass(snippet.recipe)}"
10777
+ >
10778
+ ${this.renderIcon(recipeIconName(snippet.recipe))}
10779
+ </span>
10780
+ </span>
10781
+ <span class="inspector-nav-label"
10782
+ >${snippet.name}</span
10783
+ >
10784
+ </button>
10785
+ `;
10786
+ })}
10787
+ </div>
10788
+ `)}
10789
+ </nav>
10790
+ `}
10791
+ </div>
10792
+ <div
10793
+ class="w-1.5 shrink-0 cursor-col-resize bg-gray-200 hover:bg-gray-400"
10794
+ role="separator"
10795
+ aria-orientation="vertical"
10796
+ aria-label="Resize snippet list"
10797
+ title="Drag to resize"
10798
+ data-testid="cpk-snippet-list-resize"
10799
+ style="touch-action:none"
10800
+ @pointerdown=${this.handleSnippetListDividerPointerDown}
10801
+ @pointermove=${this.handleSnippetListDividerPointerMove}
10802
+ @pointerup=${this.handleSnippetListDividerPointerUp}
10803
+ @pointercancel=${this.handleSnippetListDividerPointerUp}
10804
+ ></div>
10805
+ <div class="flex min-h-0 min-w-0 flex-1 flex-col gap-2 overflow-auto p-4">
10806
+ <label class="text-[11px] text-gray-600">
10807
+ Name
10808
+ <input
10809
+ class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
10810
+ data-testid="cpk-snippet-name"
10811
+ .value=${this.snippetName}
10812
+ @input=${(event) => {
10813
+ this.snippetName = event.target.value;
10814
+ }}
10815
+ />
10816
+ </label>
10817
+ <label class="text-[11px] text-gray-600">
10818
+ Recipe
10819
+ <select
10820
+ class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
10821
+ data-testid="cpk-snippet-recipe"
10822
+ .value=${this.snippetRecipe}
10823
+ @change=${this.handleSnippetRecipeChange}
10824
+ >
10825
+ ${[
10826
+ "tool-call",
10827
+ "reasoning",
10828
+ "text",
10829
+ "activity",
10830
+ "raw"
10831
+ ].map((recipe) => lit.html`<option
10832
+ value=${recipe}
10833
+ ?selected=${recipe === this.snippetRecipe}
10834
+ >
10835
+ ${recipeLabel(recipe)}
10836
+ </option>`)}
10837
+ </select>
10838
+ </label>
10839
+ ${this.snippetRecipe === "tool-call" ? lit.html`
10840
+ <label class="text-[11px] text-gray-600">
10841
+ Tool
10842
+ <input
10843
+ list="cpk-snippet-tools"
10844
+ class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
10845
+ data-testid="cpk-snippet-tool-name"
10846
+ .value=${this.snippetToolName}
10847
+ @input=${(event) => {
10848
+ this.snippetToolName = event.target.value;
10849
+ this.applyRecipeToEditor();
10850
+ }}
10851
+ />
10852
+ <datalist id="cpk-snippet-tools">
10853
+ ${tools.map((tool) => lit.html`<option value=${tool.name}></option>`)}
10854
+ </datalist>
10855
+ </label>
10856
+ <label class="text-[11px] text-gray-600">
10857
+ Args JSON
10858
+ <textarea
10859
+ class="mt-1 h-20 w-full rounded-md border border-gray-200 px-2 py-1 font-mono text-[11px]"
10860
+ data-testid="cpk-snippet-tool-args"
10861
+ .value=${this.snippetToolArgs}
10862
+ @input=${(event) => {
10863
+ this.snippetToolArgs = event.target.value;
10864
+ this.applyRecipeToEditor();
10865
+ }}
10866
+ ></textarea>
10867
+ </label>
10868
+ ` : lit.nothing}
10869
+ ${this.snippetRecipe === "reasoning" ? lit.html`<label class="text-[11px] text-gray-600">
10870
+ Reasoning
10871
+ <textarea
10872
+ class="mt-1 h-20 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
10873
+ data-testid="cpk-snippet-reasoning"
10874
+ .value=${this.snippetReasoningText}
10875
+ @input=${(event) => {
10876
+ this.snippetReasoningText = event.target.value;
10877
+ this.applyRecipeToEditor();
10878
+ }}
10879
+ ></textarea>
10880
+ </label>` : lit.nothing}
10881
+ ${this.snippetRecipe === "text" ? lit.html`<label class="text-[11px] text-gray-600">
10882
+ Assistant text
10883
+ <textarea
10884
+ class="mt-1 h-20 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
10885
+ data-testid="cpk-snippet-text"
10886
+ .value=${this.snippetTextContent}
10887
+ @input=${(event) => {
10888
+ this.snippetTextContent = event.target.value;
10889
+ this.applyRecipeToEditor();
10890
+ }}
10891
+ ></textarea>
10892
+ </label>` : lit.nothing}
10893
+ ${this.snippetRecipe === "activity" ? lit.html`
10894
+ <label class="text-[11px] text-gray-600">
10895
+ Activity type
10896
+ <input
10897
+ list="cpk-snippet-activity"
10898
+ class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
10899
+ data-testid="cpk-snippet-activity-type"
10900
+ .value=${this.snippetActivityType}
10901
+ @input=${(event) => {
10902
+ this.snippetActivityType = event.target.value;
10903
+ this.applyRecipeToEditor();
10904
+ }}
10905
+ />
10906
+ <datalist id="cpk-snippet-activity">
10907
+ ${ACTIVITY_STARTERS.map((type) => lit.html`<option value=${type}></option>`)}
10908
+ </datalist>
10909
+ </label>
10910
+ <label class="text-[11px] text-gray-600">
10911
+ Content JSON
10912
+ <textarea
10913
+ class="mt-1 h-24 w-full rounded-md border border-gray-200 px-2 py-1 font-mono text-[11px]"
10914
+ data-testid="cpk-snippet-activity-content"
10915
+ .value=${this.snippetActivityContent}
10916
+ @input=${(event) => {
10917
+ this.snippetActivityContent = event.target.value;
10918
+ this.applyRecipeToEditor();
10919
+ }}
10920
+ ></textarea>
10921
+ </label>
10922
+ ` : lit.nothing}
10923
+ <label class="text-[11px] text-gray-600">
10924
+ Events JSON
10925
+ <textarea
10926
+ class="mt-1 h-40 w-full rounded-md border border-gray-200 px-2 py-1 font-mono text-[11px]"
10927
+ data-testid="cpk-snippet-json"
10928
+ .value=${this.snippetJson}
10929
+ @input=${(event) => {
10930
+ this.snippetJson = event.target.value;
10931
+ this.requestUpdate();
10932
+ }}
10933
+ ></textarea>
10934
+ </label>
10935
+ <div class="flex flex-wrap gap-2">
10936
+ <button
10937
+ type="button"
10938
+ class="rounded-md bg-gray-900 px-3 py-1.5 text-[11px] text-white disabled:opacity-50"
10939
+ data-testid="cpk-snippet-run"
10940
+ ?disabled=${!canRun}
10941
+ title=${runBlocked ? "The agent is running. Wait for the current run to end." : !agent ? "No agent is available to inject into." : !canRunJson ? "Events JSON must be a non-empty event array." : "Run snippet"}
10942
+ @click=${() => void this.runCurrentSnippet()}
10943
+ >
10944
+ ${runBlocked ? "Agent running" : "Run"}
10945
+ </button>
10946
+ <button
10947
+ type="button"
10948
+ class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
10949
+ data-testid="cpk-snippet-save"
10950
+ ?disabled=${!canSave}
10951
+ title=${canSave ? "Save snippet" : "Events JSON must be a non-empty event array."}
10952
+ @click=${() => this.saveCurrentSnippet("pane")}
10953
+ >
10954
+ Save
10955
+ </button>
10956
+ <button
10957
+ type="button"
10958
+ class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
10959
+ data-testid="cpk-snippet-reset"
10960
+ ?disabled=${!canReset}
10961
+ title=${canReset ? "Remove the last inject from the thread" : "No Inspector inject to reset."}
10962
+ @click=${() => this.resetLastSnippetRun()}
10963
+ >
10964
+ Reset last run
10965
+ </button>
10966
+ <button
10967
+ type="button"
10968
+ class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
10969
+ data-testid="cpk-snippet-delete"
10970
+ ?disabled=${!canDelete}
10971
+ title=${canDelete ? "Delete this snippet" : "Select a snippet to delete."}
10972
+ @click=${() => {
10973
+ if (!this.selectedSnippetId) return;
10974
+ if (!window.confirm("Delete this snippet?")) return;
10975
+ this.eventSnippets = deleteEventSnippet(this.selectedSnippetId);
10976
+ this.selectedSnippetId = null;
10977
+ this.requestUpdate();
10978
+ }}
10979
+ >
10980
+ Delete
10981
+ </button>
10982
+ <button
10983
+ type="button"
10984
+ class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
10985
+ data-testid="cpk-snippet-export"
10986
+ ?disabled=${!canExport}
10987
+ title=${canExport ? "Export snippets" : "Save a snippet before you export."}
10988
+ @click=${() => {
10989
+ if (!canExport) return;
10990
+ const blob = new Blob([exportEventSnippetsJson(this.eventSnippets)], { type: "application/json" });
10991
+ const url = URL.createObjectURL(blob);
10992
+ const link = document.createElement("a");
10993
+ link.href = url;
10994
+ link.download = "event-snippets.json";
10995
+ link.click();
10996
+ URL.revokeObjectURL(url);
10997
+ }}
10998
+ >
10999
+ Export
11000
+ </button>
11001
+ </div>
11002
+ </div>
11003
+ </div>
11004
+ </div>
11005
+ `;
11006
+ }
11007
+ renderMainContent() {
11008
+ if (this.settingsOpen) return this.renderSettingsPanel();
11009
+ if (this.selectedMenu === "home") return this.renderHomeView();
11010
+ if (this.selectedMenu === WHATS_NEW_MENU_KEY) return this.renderWhatsNewView();
11011
+ if (this.selectedMenu === "ag-ui-events") return lit.html`
11012
+ <div class="flex h-full min-h-0 flex-col">
11013
+ ${this.renderEventErrorBanner("run")}
11014
+ <div class="min-h-0 flex-1 overflow-hidden">
11015
+ ${this.renderEventsTable()}
11016
+ </div>
11017
+ </div>
11018
+ `;
11019
+ if (this.selectedMenu === "playground") return this.renderPlaygroundView();
11020
+ if (this.selectedMenu === "event-snippets") return this.renderEventSnippetsView();
11021
+ if (this.selectedMenu === "agents") return this.renderAgentsView();
11022
+ if (this.selectedMenu === "frontend-tools") return this.renderToolsView();
11023
+ if (this.selectedMenu === "capabilities") return this.renderCapabilitiesView();
11024
+ if (this.selectedMenu === "agent-context") return this.renderContextView();
11025
+ if (this.selectedMenu === "threads") return this.renderThreadsView();
11026
+ if (this.selectedMenu === "memories") return this.renderMemoriesView();
11027
+ return lit.nothing;
11028
+ }
11029
+ renderPlaygroundView() {
11030
+ var _this$playgroundAgent4, _this$playgroundAgent5, _this$_core$runtimeMo, _this$_core19, _this$_core$runtimeUr, _this$_core20, _this$playgroundSourc;
11031
+ const agentId = this.resolvePlaygroundAgentId(this.selectedContext);
11032
+ const sourceThreads = this._threads.filter((thread) => !agentId || thread.agentId === agentId);
11033
+ const visibleMessages = this.playgroundMessages.filter((message) => message.role === "user" || message.role === "assistant" || message.role === "reasoning" || message.role === "activity");
11034
+ const hasRetry = (_this$playgroundAgent4 = (_this$playgroundAgent5 = this.playgroundAgent) === null || _this$playgroundAgent5 === void 0 ? void 0 : _this$playgroundAgent5.messages.some((message) => message.role === "user")) !== null && _this$playgroundAgent4 !== void 0 ? _this$playgroundAgent4 : false;
11035
+ const runtimeMode = (_this$_core$runtimeMo = (_this$_core19 = this._core) === null || _this$_core19 === void 0 ? void 0 : _this$_core19.runtimeMode) !== null && _this$_core$runtimeMo !== void 0 ? _this$_core$runtimeMo : "sse";
11036
+ const runtimeLabel = (_this$_core$runtimeUr = (_this$_core20 = this._core) === null || _this$_core20 === void 0 ? void 0 : _this$_core20.runtimeUrl) !== null && _this$_core$runtimeUr !== void 0 ? _this$_core$runtimeUr : "Self-managed agent";
11037
+ const busy = this.playgroundIsRunning || this.playgroundIsLoadingThread;
11038
+ const suggestions = agentId && this._core ? this._core.getSuggestions(agentId).suggestions : [];
11039
+ const lastAssistantIndex = visibleMessages.reduce((last, message, index) => message.role === "assistant" ? index : last, -1);
11040
+ const lastReasoningIndex = visibleMessages.reduce((last, message, index) => message.role === "reasoning" ? index : last, -1);
11041
+ const showWelcome = !this.playgroundIsLoadingThread && visibleMessages.length === 0;
11042
+ return lit.html`
11043
+ <div
11044
+ class="cpk-playground-root flex h-full min-h-[420px] flex-col bg-white"
11045
+ >
11046
+ <header
11047
+ class="cpk-playground-header flex flex-wrap items-center gap-2 border-b border-gray-200 bg-white px-3 py-2"
11048
+ >
11049
+ <div class="min-w-0 flex-1">
11050
+ <div class="flex items-center gap-1.5">
11051
+ <h2 class="text-xs font-semibold text-gray-900">Playground</h2>
11052
+ <span
11053
+ class="rounded-full border border-gray-200 bg-gray-50 px-1.5 py-0.5 text-[9px] font-medium text-gray-600"
11054
+ >${runtimeMode.toUpperCase()}</span
11055
+ >
11056
+ </div>
11057
+ <div
11058
+ class="mt-0.5 flex min-w-0 items-center gap-1.5 text-[9px] text-gray-600"
11059
+ >
11060
+ <span class="truncate">Agent: ${agentId !== null && agentId !== void 0 ? agentId : "waiting..."}</span>
11061
+ <span
11062
+ class="h-3 w-px shrink-0 bg-gray-200"
11063
+ aria-hidden="true"
11064
+ ></span>
11065
+ <span class="truncate" title=${runtimeLabel}>${runtimeLabel}</span>
11066
+ </div>
11067
+ </div>
11068
+ <div
11069
+ class="cpk-playground-actions ml-auto flex min-w-0 items-center gap-2"
11070
+ >
11071
+ ${sourceThreads.length > 0 ? lit.html`
11072
+ <label class="sr-only" for="cpk-playground-thread-source"
11073
+ >Start from a thread</label
11074
+ >
11075
+ <select
11076
+ id="cpk-playground-thread-source"
11077
+ class="cpk-playground-thread-select max-w-[200px] rounded-md border border-gray-200 bg-white px-2 py-1 text-[10px] text-gray-700 outline-none transition hover:border-gray-300 focus:border-violet-400 focus:ring-2 focus:ring-violet-100 disabled:cursor-not-allowed disabled:opacity-50"
11078
+ .value=${(_this$playgroundSourc = this.playgroundSourceThreadId) !== null && _this$playgroundSourc !== void 0 ? _this$playgroundSourc : ""}
11079
+ ?disabled=${busy}
11080
+ @change=${this.handlePlaygroundThreadSourceChange}
11081
+ >
11082
+ <option value="">Load a thread...</option>
11083
+ ${sourceThreads.map((thread) => {
11084
+ var _thread$name2;
11085
+ return lit.html`
11086
+ <option value=${thread.id}>
11087
+ ${((_thread$name2 = thread.name) === null || _thread$name2 === void 0 ? void 0 : _thread$name2.trim()) || `Thread ${thread.id.slice(0, 8)}`}
9150
11088
  </option>
9151
11089
  `;
9152
11090
  })}
@@ -9390,8 +11328,8 @@ ${argsString}</pre
9390
11328
  `;
9391
11329
  }
9392
11330
  renderSettingsPanel() {
9393
- var _this$core$telemetryD, _this$core14;
9394
- const optedOut = (_this$core$telemetryD = (_this$core14 = this.core) === null || _this$core14 === void 0 ? void 0 : _this$core14.telemetryDisabled) !== null && _this$core$telemetryD !== void 0 ? _this$core$telemetryD : false;
11331
+ var _this$core$telemetryD, _this$core18;
11332
+ const optedOut = (_this$core$telemetryD = (_this$core18 = this.core) === null || _this$core18 === void 0 ? void 0 : _this$core18.telemetryDisabled) !== null && _this$core$telemetryD !== void 0 ? _this$core$telemetryD : false;
9395
11333
  return lit.html`
9396
11334
  <div
9397
11335
  class="inspector-settings"
@@ -9469,17 +11407,20 @@ ${argsString}</pre
9469
11407
  </div>
9470
11408
  `;
9471
11409
  }
9472
- trackOpened(source, hadUnseenAnnouncement, firstOpen = false) {
9473
- var _this$core15, _this$core$licenseSta2, _this$core16, _this$core$runtimeMod2, _this$core17, _this$core18;
9474
- if ((_this$core15 = this.core) === null || _this$core15 === void 0 ? void 0 : _this$core15.telemetryDisabled) return;
11410
+ trackOpened(source, hadUnseenAnnouncement, firstOpen = false, activeSignal = null) {
11411
+ var _this$core19, _this$core$licenseSta2, _this$core20, _this$core$runtimeMod2, _this$core21, _this$core22;
11412
+ if ((_this$core19 = this.core) === null || _this$core19 === void 0 ? void 0 : _this$core19.telemetryDisabled) return;
11413
+ const errorSignal = activeSignal !== null && isErrorSignalKey(activeSignal) ? activeSignal : null;
9475
11414
  trackInspectorOpened({
9476
11415
  open_source: source,
9477
11416
  ...this.runtimeStatus === "connected" ? {
9478
- license_status: (_this$core$licenseSta2 = (_this$core16 = this.core) === null || _this$core16 === void 0 ? void 0 : _this$core16.licenseStatus) !== null && _this$core$licenseSta2 !== void 0 ? _this$core$licenseSta2 : void 0,
9479
- runtime_mode: (_this$core$runtimeMod2 = (_this$core17 = this.core) === null || _this$core17 === void 0 ? void 0 : _this$core17.runtimeMode) !== null && _this$core$runtimeMod2 !== void 0 ? _this$core$runtimeMod2 : void 0
11417
+ license_status: (_this$core$licenseSta2 = (_this$core20 = this.core) === null || _this$core20 === void 0 ? void 0 : _this$core20.licenseStatus) !== null && _this$core$licenseSta2 !== void 0 ? _this$core$licenseSta2 : void 0,
11418
+ runtime_mode: (_this$core$runtimeMod2 = (_this$core21 = this.core) === null || _this$core21 === void 0 ? void 0 : _this$core21.runtimeMode) !== null && _this$core$runtimeMod2 !== void 0 ? _this$core$runtimeMod2 : void 0
9480
11419
  } : {},
9481
- runtime_url_type: getRuntimeUrlType((_this$core18 = this.core) === null || _this$core18 === void 0 ? void 0 : _this$core18.runtimeUrl),
11420
+ runtime_url_type: getRuntimeUrlType((_this$core22 = this.core) === null || _this$core22 === void 0 ? void 0 : _this$core22.runtimeUrl),
9482
11421
  has_unseen_announcement: hadUnseenAnnouncement,
11422
+ has_error_signal: errorSignal !== null,
11423
+ ...errorSignal === null ? {} : { error_signal_source: errorSignal },
9483
11424
  first_open: firstOpen
9484
11425
  });
9485
11426
  }
@@ -9519,8 +11460,8 @@ ${argsString}</pre
9519
11460
  } catch (_unused16) {}
9520
11461
  }
9521
11462
  maybeTrackInspectorMetadataViews() {
9522
- var _this$core19, _telemetryContext$gro, _telemetryContext$lea;
9523
- if (!this.isOpen || this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core19 = this.core) === null || _this$core19 === void 0 ? void 0 : _this$core19.telemetryDisabled)) return;
11463
+ var _this$core23, _telemetryContext$gro, _telemetryContext$lea;
11464
+ if (!this.isOpen || this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core23 = this.core) === null || _this$core23 === void 0 ? void 0 : _this$core23.telemetryDisabled)) return;
9524
11465
  const { identity, plan } = this.inspectorMetadataProjection;
9525
11466
  const license_bucket = this.inspectorMetadataProjection.licenseState;
9526
11467
  const telemetryContext = this.getMetadataTelemetryContext();
@@ -9572,8 +11513,8 @@ ${argsString}</pre
9572
11513
  } else this.metadataTelemetryFingerprints.delete("action");
9573
11514
  }
9574
11515
  trackWhatsNewClickedOnce(opts) {
9575
- var _this$core20, _this$announcementCta;
9576
- if (this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core20 = this.core) === null || _this$core20 === void 0 ? void 0 : _this$core20.telemetryDisabled)) return;
11516
+ var _this$core24, _this$announcementCta;
11517
+ if (this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core24 = this.core) === null || _this$core24 === void 0 ? void 0 : _this$core24.telemetryDisabled)) return;
9577
11518
  const id = this.announcementTimestamp;
9578
11519
  if (!id) return;
9579
11520
  const key = `${id}:${opts.cta}`;
@@ -9586,8 +11527,8 @@ ${argsString}</pre
9586
11527
  });
9587
11528
  }
9588
11529
  trackThreadsViewStateOnce(state) {
9589
- var _this$core21;
9590
- if ((_this$core21 = this.core) === null || _this$core21 === void 0 ? void 0 : _this$core21.telemetryDisabled) return;
11530
+ var _this$core25;
11531
+ if ((_this$core25 = this.core) === null || _this$core25 === void 0 ? void 0 : _this$core25.telemetryDisabled) return;
9591
11532
  const key = `${state}:${this.getThreadServiceStatus()}`;
9592
11533
  if (this.viewedThreadsTelemetryStates.has(key)) return;
9593
11534
  this.viewedThreadsTelemetryStates.add(key);
@@ -9634,8 +11575,8 @@ ${argsString}</pre
9634
11575
  return provider;
9635
11576
  }
9636
11577
  trackThreadsExampleViewedOnce() {
9637
- var _this$core22;
9638
- if ((_this$core22 = this.core) === null || _this$core22 === void 0 ? void 0 : _this$core22.telemetryDisabled) return;
11578
+ var _this$core26;
11579
+ if ((_this$core26 = this.core) === null || _this$core26 === void 0 ? void 0 : _this$core26.telemetryDisabled) return;
9639
11580
  for (const thread of THREADS_EXAMPLE_THREADS) {
9640
11581
  const exampleKind = getExampleKind(thread.id);
9641
11582
  if (!exampleKind || this.viewedExampleKinds.has(exampleKind)) continue;
@@ -9647,8 +11588,8 @@ ${argsString}</pre
9647
11588
  }
9648
11589
  }
9649
11590
  trackThreadsExampleSelectedOnce(threadId) {
9650
- var _this$core23;
9651
- if ((_this$core23 = this.core) === null || _this$core23 === void 0 ? void 0 : _this$core23.telemetryDisabled) return;
11591
+ var _this$core27;
11592
+ if ((_this$core27 = this.core) === null || _this$core27 === void 0 ? void 0 : _this$core27.telemetryDisabled) return;
9652
11593
  const exampleKind = getExampleKind(threadId);
9653
11594
  if (!exampleKind || this.selectedExampleKinds.has(exampleKind)) return;
9654
11595
  this.selectedExampleKinds.add(exampleKind);
@@ -9657,6 +11598,52 @@ ${argsString}</pre
9657
11598
  example_kind: exampleKind
9658
11599
  });
9659
11600
  }
11601
+ subscribeToInspectorThreadBridge() {
11602
+ this.unsubscribeFromInspectorThreadBridge();
11603
+ if (!(0, _copilotkit_core.isInspectorThreadBridgeEnabled)()) return;
11604
+ this.inspectorBridgeUnsubscribers.push((0, _copilotkit_core.onInspectorActiveThread)((payload) => {
11605
+ if (payload.requestId !== this.activeViewInAppRequestId) return;
11606
+ this.inAppThreadId = payload.threadId;
11607
+ this.inAppAgentId = payload.agentId;
11608
+ this.inAppSource = payload.source;
11609
+ if (payload.source === "app") {
11610
+ this.activeViewInAppRequestId = null;
11611
+ this.viewInAppError = null;
11612
+ }
11613
+ this.requestUpdate();
11614
+ }), (0, _copilotkit_core.onInspectorViewThreadResult)((payload) => {
11615
+ if (payload.requestId !== this.activeViewInAppRequestId) return;
11616
+ if (payload.ok) {
11617
+ this.viewInAppError = null;
11618
+ this.inAppThreadId = payload.threadId;
11619
+ this.inAppAgentId = payload.agentId;
11620
+ this.inAppSource = "override";
11621
+ } else {
11622
+ this.activeViewInAppRequestId = null;
11623
+ this.inAppThreadId = null;
11624
+ this.inAppAgentId = null;
11625
+ this.inAppSource = null;
11626
+ this.viewInAppError = "The app could not load that thread. The previous chat is back.";
11627
+ }
11628
+ this.requestUpdate();
11629
+ }));
11630
+ }
11631
+ unsubscribeFromInspectorThreadBridge() {
11632
+ for (const unsubscribe of this.inspectorBridgeUnsubscribers) unsubscribe();
11633
+ this.inspectorBridgeUnsubscribers = [];
11634
+ }
11635
+ getViewInAppMode(thread, isExample) {
11636
+ if (!(0, _copilotkit_core.isInspectorThreadBridgeEnabled)()) return "hidden";
11637
+ if (!thread || isExample) return "hidden";
11638
+ if (this.activeViewInAppRequestId && this.inAppSource === "override" && this.inAppThreadId === thread.id) return "stop";
11639
+ return "view";
11640
+ }
11641
+ getSelectedRealThread() {
11642
+ var _this$getActiveThread;
11643
+ if (!this.selectedThreadId) return null;
11644
+ if (this.selectedThreadId === this.selectedLocalExampleThreadId) return null;
11645
+ return (_this$getActiveThread = this.getActiveThreadsState().displayThreads.find((thread) => thread.id === this.selectedThreadId)) !== null && _this$getActiveThread !== void 0 ? _this$getActiveThread : null;
11646
+ }
9660
11647
  getCurrentExampleTourProps() {
9661
11648
  const exampleKind = this.selectedThreadId ? getExampleKind(this.selectedThreadId) : void 0;
9662
11649
  const tourPair = getExampleTourTelemetryPair(this.exampleTourStep);
@@ -9668,8 +11655,8 @@ ${argsString}</pre
9668
11655
  };
9669
11656
  }
9670
11657
  trackThreadsExampleTourStepViewedOnce() {
9671
- var _this$core24;
9672
- if (((_this$core24 = this.core) === null || _this$core24 === void 0 ? void 0 : _this$core24.telemetryDisabled) || !this.selectedThreadId) return;
11658
+ var _this$core28;
11659
+ if (((_this$core28 = this.core) === null || _this$core28 === void 0 ? void 0 : _this$core28.telemetryDisabled) || !this.selectedThreadId) return;
9673
11660
  const props = this.getCurrentExampleTourProps();
9674
11661
  if (!props) return;
9675
11662
  const key = `${props.example_kind}:${props.tour_step}`;
@@ -9688,18 +11675,18 @@ ${argsString}</pre
9688
11675
  });
9689
11676
  }
9690
11677
  startExampleTour(autoStarted) {
9691
- var _this$core26;
11678
+ var _this$core30;
9692
11679
  if (!this.selectedThreadId) return;
9693
11680
  this.exampleTourActive = true;
9694
11681
  this.exampleTourStep = 0;
9695
11682
  if (autoStarted) {
9696
- var _this$core25;
11683
+ var _this$core29;
9697
11684
  this.exampleTourAutoShown = true;
9698
- if (!((_this$core25 = this.core) === null || _this$core25 === void 0 ? void 0 : _this$core25.telemetryDisabled)) {
11685
+ if (!((_this$core29 = this.core) === null || _this$core29 === void 0 ? void 0 : _this$core29.telemetryDisabled)) {
9699
11686
  const props = this.getCurrentExampleTourProps();
9700
11687
  if (props) trackThreadsExampleTourStarted(props);
9701
11688
  }
9702
- } else if (!((_this$core26 = this.core) === null || _this$core26 === void 0 ? void 0 : _this$core26.telemetryDisabled)) {
11689
+ } else if (!((_this$core30 = this.core) === null || _this$core30 === void 0 ? void 0 : _this$core30.telemetryDisabled)) {
9703
11690
  const props = this.getCurrentExampleTourProps();
9704
11691
  if (props) trackThreadsExampleTourReopened(props);
9705
11692
  }
@@ -9715,12 +11702,12 @@ ${argsString}</pre
9715
11702
  this.requestUpdate();
9716
11703
  }
9717
11704
  dismissExampleTour(method) {
9718
- var _this$core27;
11705
+ var _this$core31;
9719
11706
  if (!this.selectedThreadId) return;
9720
11707
  this.exampleTourActive = false;
9721
11708
  this.exampleTourDismissed = true;
9722
11709
  this.writeThreadsExampleTourDismissed();
9723
- if (!((_this$core27 = this.core) === null || _this$core27 === void 0 ? void 0 : _this$core27.telemetryDisabled)) {
11710
+ if (!((_this$core31 = this.core) === null || _this$core31 === void 0 ? void 0 : _this$core31.telemetryDisabled)) {
9724
11711
  const currentProps = this.getCurrentExampleTourProps();
9725
11712
  if (currentProps) {
9726
11713
  const props = {
@@ -10221,8 +12208,8 @@ ${argsString}</pre
10221
12208
  `;
10222
12209
  }
10223
12210
  renderMemoriesView() {
10224
- var _this$core28;
10225
- if (!((_this$core28 = this.core) === null || _this$core28 === void 0 ? void 0 : _this$core28.intelligence) || !this._memoriesAvailable) return lit.html`
12211
+ var _this$core32;
12212
+ if (!((_this$core32 = this.core) === null || _this$core32 === void 0 ? void 0 : _this$core32.intelligence) || !this._memoriesAvailable) return lit.html`
10226
12213
  <div class="cpk-memory-locked">
10227
12214
  ${this.renderThreadsLockedBackgroundMockup()}
10228
12215
  <div aria-hidden="true" class="cpk-memory-locked-scrim"></div>
@@ -10286,7 +12273,7 @@ ${argsString}</pre
10286
12273
  <line x1="12" y1="16" x2="12.01" y2="16" />
10287
12274
  </svg>
10288
12275
  <span style="font-size: 13px; color: #c0333a;">
10289
- Failed to load learning data
12276
+ ${MEMORY_LOAD_ERROR_LABEL}
10290
12277
  </span>
10291
12278
  <span
10292
12279
  style="
@@ -10299,6 +12286,17 @@ ${argsString}</pre
10299
12286
  >
10300
12287
  ${this._memoriesError.message}
10301
12288
  </span>
12289
+ <span
12290
+ style="
12291
+ max-width: 320px;
12292
+ text-align: center;
12293
+ font-size: 11px;
12294
+ line-height: 1.5;
12295
+ color: #c0333a;
12296
+ "
12297
+ >
12298
+ ${EVENT_ERROR_GUIDANCE.memory.advice}
12299
+ </span>
10302
12300
  </div>
10303
12301
  `;
10304
12302
  if (this._memoriesLoading && this._memories.length === 0) return lit.html`
@@ -10458,7 +12456,7 @@ ${argsString}</pre
10458
12456
  `;
10459
12457
  }
10460
12458
  renderThreadsView() {
10461
- var _visibleThreads$find, _this$_core$runtimeUr2, _this$_core19, _this$_core$headers, _this$_core20, _this$_core21, _this$liveMessageVers2, _this$agentEvents$get6;
12459
+ var _visibleThreads$find, _this$_core$runtimeUr2, _this$_core21, _this$_core$headers, _this$_core22, _this$_core23, _this$liveMessageVers2, _this$agentEvents$get6;
10462
12460
  const locked = !this.areThreadEndpointsAvailable();
10463
12461
  const { displayThreads, threadsErrorMessage, threadsLoading } = this.getActiveThreadsState();
10464
12462
  const loadingWithoutRows = !locked && threadsLoading && !threadsErrorMessage && displayThreads.length === 0;
@@ -10483,6 +12481,7 @@ ${argsString}</pre
10483
12481
  data-color-scheme=${this.colorScheme}
10484
12482
  .threads=${visibleThreads}
10485
12483
  .selectedThreadId=${this.selectedThreadId}
12484
+ .inAppThreadId=${this.inAppThreadId}
10486
12485
  .errorMessage=${threadsErrorMessage}
10487
12486
  .suppressEmptyState=${loadingWithoutRows}
10488
12487
  @threadSelected=${(e) => {
@@ -10548,10 +12547,14 @@ ${argsString}</pre
10548
12547
  .threadId=${selectedThread.id}
10549
12548
  .thread=${selectedThread}
10550
12549
  .provider=${selectedThreadIsLocalExample ? this.getExampleThreadProvider(selectedThread.id) : null}
10551
- .runtimeUrl=${selectedThreadIsLocalExample ? "" : (_this$_core$runtimeUr2 = (_this$_core19 = this._core) === null || _this$_core19 === void 0 ? void 0 : _this$_core19.runtimeUrl) !== null && _this$_core$runtimeUr2 !== void 0 ? _this$_core$runtimeUr2 : ""}
10552
- .headers=${(_this$_core$headers = (_this$_core20 = this._core) === null || _this$_core20 === void 0 ? void 0 : _this$_core20.headers) !== null && _this$_core$headers !== void 0 ? _this$_core$headers : {}}
10553
- .threadInspectionAvailable=${selectedThreadIsLocalExample || this.areThreadEndpointsAvailable() && ((_this$_core21 = this._core) === null || _this$_core21 === void 0 || (_this$_core21 = _this$_core21.threadEndpoints) === null || _this$_core21 === void 0 ? void 0 : _this$_core21.inspect) !== false}
12550
+ .runtimeUrl=${selectedThreadIsLocalExample ? "" : (_this$_core$runtimeUr2 = (_this$_core21 = this._core) === null || _this$_core21 === void 0 ? void 0 : _this$_core21.runtimeUrl) !== null && _this$_core$runtimeUr2 !== void 0 ? _this$_core$runtimeUr2 : ""}
12551
+ .headers=${(_this$_core$headers = (_this$_core22 = this._core) === null || _this$_core22 === void 0 ? void 0 : _this$_core22.headers) !== null && _this$_core$headers !== void 0 ? _this$_core$headers : {}}
12552
+ .threadInspectionAvailable=${selectedThreadIsLocalExample || this.areThreadEndpointsAvailable() && ((_this$_core23 = this._core) === null || _this$_core23 === void 0 || (_this$_core23 = _this$_core23.threadEndpoints) === null || _this$_core23 === void 0 ? void 0 : _this$_core23.inspect) !== false}
10554
12553
  .liveMessageVersion=${(_this$liveMessageVers2 = this.liveMessageVersion.get(selectedThread.id)) !== null && _this$liveMessageVers2 !== void 0 ? _this$liveMessageVers2 : 0}
12554
+ .viewInAppMode=${this.getViewInAppMode(selectedThread, selectedThreadIsLocalExample)}
12555
+ .viewInAppError=${this.viewInAppError}
12556
+ @viewInApp=${this.handleViewInApp}
12557
+ @stopViewing=${this.handleStopViewing}
10555
12558
  .focusMessageId=${this.focusedThreadMessageId}
10556
12559
  .focusRequestId=${this.threadFocusRequestId}
10557
12560
  .agentStateInput=${this.getLatestStateForAgent(selectedThread.agentId)}
@@ -10720,7 +12723,11 @@ ${argsString}</pre
10720
12723
  </div>
10721
12724
  </div>
10722
12725
  `;
10723
- else body = lit.html`
12726
+ else {
12727
+ var _this$findLatestRunEr;
12728
+ const runError = this.eventErrorDetails.run;
12729
+ const failedRunEventId = runError ? (_this$findLatestRunEr = this.findLatestRunErrorEvent(runError.agentId)) === null || _this$findLatestRunEr === void 0 ? void 0 : _this$findLatestRunEr.id : void 0;
12730
+ body = lit.html`
10724
12731
  <div class="relative h-full w-full overflow-y-auto overflow-x-hidden">
10725
12732
  <table class="w-full table-fixed border-collapse text-xs box-border">
10726
12733
  <colgroup>
@@ -10732,10 +12739,10 @@ ${argsString}</pre
10732
12739
  <thead class="sticky top-0 z-10">
10733
12740
  <tr class="bg-white">
10734
12741
  ${[
10735
- "Agent",
10736
- "Time",
10737
- "Event Type"
10738
- ].map((label, col) => lit.html` <th
12742
+ "Agent",
12743
+ "Time",
12744
+ "Event Type"
12745
+ ].map((label, col) => lit.html` <th
10739
12746
  class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900"
10740
12747
  style="position:relative;overflow:hidden;"
10741
12748
  >
@@ -10757,16 +12764,18 @@ ${argsString}</pre
10757
12764
  </thead>
10758
12765
  <tbody>
10759
12766
  ${filteredEvents.map((event, index) => {
10760
- const rowBg = index % 2 === 0 ? "bg-white" : "bg-gray-50/50";
10761
- const badgeClasses = this.getEventBadgeClasses(event.type);
10762
- const extractedEvent = this.extractEventFromPayload(event.payload);
10763
- const inlineEvent = this.stringifyPayload(extractedEvent, false) || "—";
10764
- const prettyEvent = this.stringifyPayload(extractedEvent, true) || inlineEvent;
10765
- const isExpanded = this.expandedRows.has(event.id);
10766
- return lit.html`
12767
+ const isFailedRunEvent = failedRunEventId !== void 0 && event.id === failedRunEventId;
12768
+ const rowBg = isFailedRunEvent ? "bg-rose-50" : index % 2 === 0 ? "bg-white" : "bg-gray-50/50";
12769
+ const badgeClasses = this.getEventBadgeClasses(event.type);
12770
+ const extractedEvent = this.extractEventFromPayload(event.payload);
12771
+ const inlineEvent = this.stringifyPayload(extractedEvent, false) || "—";
12772
+ const prettyEvent = this.stringifyPayload(extractedEvent, true) || inlineEvent;
12773
+ const isExpanded = this.expandedRows.has(event.id);
12774
+ return lit.html`
10767
12775
  <tr
10768
12776
  class="${rowBg} cursor-pointer transition hover:bg-blue-50/50"
10769
12777
  data-inspector-event-id=${event.id}
12778
+ data-cpk-failed-run-event=${isFailedRunEvent ? event.id : void 0}
10770
12779
  @click=${(clickEvent) => this.toggleRowExpansion(event.id, clickEvent)}
10771
12780
  >
10772
12781
  <td
@@ -10799,9 +12808,9 @@ ${prettyEvent}</pre
10799
12808
  <button
10800
12809
  class="absolute right-0 top-0 cursor-pointer rounded px-2 py-1 text-[10px] opacity-0 transition group-hover:opacity-100 ${this.copiedEvents.has(event.id) ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600 hover:bg-gray-200 hover:text-gray-900"}"
10801
12810
  @click=${(e) => {
10802
- e.stopPropagation();
10803
- this.copyToClipboard(prettyEvent, event.id, e);
10804
- }}
12811
+ e.stopPropagation();
12812
+ this.copyToClipboard(prettyEvent, event.id, e);
12813
+ }}
10805
12814
  >
10806
12815
  ${this.copiedEvents.has(event.id) ? lit.html`
10807
12816
  <span>✓ Copied</span>
@@ -10814,11 +12823,12 @@ ${prettyEvent}</pre
10814
12823
  </td>
10815
12824
  </tr>
10816
12825
  `;
10817
- })}
12826
+ })}
10818
12827
  </tbody>
10819
12828
  </table>
10820
12829
  </div>
10821
12830
  `;
12831
+ }
10822
12832
  return lit.html`
10823
12833
  <div
10824
12834
  class="${embedded ? "flex h-[28rem] min-h-[20rem] flex-col" : "flex h-full flex-col"}"
@@ -10888,6 +12898,7 @@ ${prettyEvent}</pre
10888
12898
  }
10889
12899
  renderAgentsView() {
10890
12900
  if (this.selectedContext === "all-agents") return lit.html`
12901
+ ${this.renderEventErrorBanner("tool")}
10891
12902
  <div
10892
12903
  class="flex h-full items-center justify-center px-4 py-8 text-center"
10893
12904
  >
@@ -10911,6 +12922,7 @@ ${prettyEvent}</pre
10911
12922
  const messages = this.getLatestMessagesForAgent(agentId);
10912
12923
  return lit.html`
10913
12924
  <div class="cpk-agent-view flex flex-col gap-4 p-4 overflow-auto">
12925
+ ${this.renderEventErrorBanner("tool")}
10914
12926
  <!-- Agent Overview Card -->
10915
12927
  <div
10916
12928
  class="cpk-agent-overview rounded-lg border border-gray-200 bg-white p-4"
@@ -11044,8 +13056,13 @@ ${prettyEvent}</pre
11044
13056
  const toolCalls = (_msg$toolCalls2 = msg.toolCalls) !== null && _msg$toolCalls2 !== void 0 ? _msg$toolCalls2 : [];
11045
13057
  const hasContent = rawContent.trim().length > 0;
11046
13058
  const contentFallback = toolCalls.length > 0 ? "Invoked tool call" : "—";
13059
+ const toolError = this.eventErrorDetails.tool;
13060
+ const isFailedResult = role === "tool" && (toolError === null || toolError === void 0 ? void 0 : toolError.toolCallId) !== void 0 && toolError.toolCallId === msg.toolCallId;
11047
13061
  return lit.html`
11048
- <div class="flex items-start">
13062
+ <div
13063
+ class=${isFailedResult ? "flex items-start bg-rose-50" : "flex items-start"}
13064
+ data-cpk-failed-tool-result=${isFailedResult ? msg.toolCallId : lit.nothing}
13065
+ >
11049
13066
  <div class="w-40 shrink-0 px-4 py-2">
11050
13067
  <span
11051
13068
  class="inline-flex rounded px-2 py-0.5 text-[10px] font-medium ${roleColors[role] || roleColors.unknown}"
@@ -11152,6 +13169,87 @@ ${prettyEvent}</pre
11152
13169
  </div>
11153
13170
  `;
11154
13171
  }
13172
+ /**
13173
+ * The Agent view is empty on "All Agents". Pick the agent that just failed
13174
+ * a tool, or the one with the most recent activity.
13175
+ */
13176
+ applyEventErrorLanding(key) {
13177
+ const error = this.eventErrorDetails[key];
13178
+ if (!error) {
13179
+ if (this.selectedMenu === "agents") this.focusAgentForView();
13180
+ return;
13181
+ }
13182
+ if (error.agentId && this.contextOptions.some((option) => option.key === error.agentId)) this.selectedContext = error.agentId;
13183
+ else if (this.selectedMenu === "agents") this.focusAgentForView(error);
13184
+ if (key === "tool" && error.toolCallId) {
13185
+ this.pendingScrollToToolCallId = error.toolCallId;
13186
+ return;
13187
+ }
13188
+ if (key === "run") {
13189
+ this.eventFilterText = "";
13190
+ this.eventTypeFilter = "all";
13191
+ const event = this.findLatestRunErrorEvent(error.agentId);
13192
+ if (!event) return;
13193
+ this.expandedRows.clear();
13194
+ this.expandedRows.add(event.id);
13195
+ this.pendingScrollToEventId = event.id;
13196
+ }
13197
+ }
13198
+ /**
13199
+ * Whether the landing view really carries the item the card points at.
13200
+ * Mirrors the two branches of `applyEventErrorLanding` that can bail out.
13201
+ */
13202
+ hasEventErrorHighlight(key) {
13203
+ const error = this.eventErrorDetails[key];
13204
+ if (!error) return false;
13205
+ if (key === "tool") return error.toolCallId !== void 0;
13206
+ if (key === "run") return this.findLatestRunErrorEvent(error.agentId) !== void 0;
13207
+ return false;
13208
+ }
13209
+ findLatestRunErrorEvent(agentId) {
13210
+ var _this$agentEvents$get7;
13211
+ return (agentId && agentId !== "all-agents" ? (_this$agentEvents$get7 = this.agentEvents.get(agentId)) !== null && _this$agentEvents$get7 !== void 0 ? _this$agentEvents$get7 : [] : this.flattenedEvents).find((event) => event.type === "RUN_ERROR");
13212
+ }
13213
+ flushErrorLandingScroll() {
13214
+ const eventId = this.pendingScrollToEventId;
13215
+ if (eventId) {
13216
+ var _row$scrollIntoView2;
13217
+ this.pendingScrollToEventId = null;
13218
+ const row = Array.from(this.activeRoot.querySelectorAll("[data-inspector-event-id]")).find((candidate) => candidate.dataset.inspectorEventId === eventId);
13219
+ row === null || row === void 0 || (_row$scrollIntoView2 = row.scrollIntoView) === null || _row$scrollIntoView2 === void 0 || _row$scrollIntoView2.call(row, { block: "center" });
13220
+ }
13221
+ const toolCallId = this.pendingScrollToToolCallId;
13222
+ if (toolCallId) {
13223
+ var _this$activeRoot$quer2, _card$scrollIntoView;
13224
+ this.pendingScrollToToolCallId = null;
13225
+ const escaped = escapeSelectorValue(toolCallId);
13226
+ const card = (_this$activeRoot$quer2 = this.activeRoot.querySelector(`[data-cpk-failed-tool-call="${escaped}"]`)) !== null && _this$activeRoot$quer2 !== void 0 ? _this$activeRoot$quer2 : this.activeRoot.querySelector(`[data-cpk-failed-tool-result="${escaped}"]`);
13227
+ card === null || card === void 0 || (_card$scrollIntoView = card.scrollIntoView) === null || _card$scrollIntoView === void 0 || _card$scrollIntoView.call(card, { block: "center" });
13228
+ }
13229
+ }
13230
+ /**
13231
+ * The Agent view is empty on "All Agents". Pick the agent that just failed
13232
+ * a tool, or the one with the most recent activity.
13233
+ */
13234
+ focusAgentForView(error) {
13235
+ const agentOptions = this.contextOptions.filter((opt) => opt.key !== "all-agents");
13236
+ if (agentOptions.length === 0) return;
13237
+ const errorAgentId = error === null || error === void 0 ? void 0 : error.agentId;
13238
+ if (errorAgentId && agentOptions.some((option) => option.key === errorAgentId)) {
13239
+ this.selectedContext = errorAgentId;
13240
+ return;
13241
+ }
13242
+ if (this.selectedContext !== "all-agents") return;
13243
+ const mostRecent = agentOptions.reduce((best, opt) => {
13244
+ var _this$getAgentStats$l;
13245
+ const ts = (_this$getAgentStats$l = this.getAgentStats(opt.key).lastActivity) !== null && _this$getAgentStats$l !== void 0 ? _this$getAgentStats$l : -1;
13246
+ return best === null || ts > best.ts ? {
13247
+ key: opt.key,
13248
+ ts
13249
+ } : best;
13250
+ }, null);
13251
+ this.selectedContext = mostRecent ? mostRecent.key : agentOptions[0].key;
13252
+ }
11155
13253
  handleMenuSelect(key) {
11156
13254
  if (!this.menuItems.some((item) => item.key === key)) return;
11157
13255
  const previousMenu = this.selectedMenu;
@@ -11160,39 +13258,28 @@ ${prettyEvent}</pre
11160
13258
  this.selectedMenu = key;
11161
13259
  this.settingsOpen = false;
11162
13260
  this.lastSelectedMenuByGroup[getGroupForMenu(key)] = key;
11163
- if (key === "agents" && this.selectedContext === "all-agents") {
11164
- const agentOptions = this.contextOptions.filter((opt) => opt.key !== "all-agents");
11165
- if (agentOptions.length > 0) {
11166
- const mostRecent = agentOptions.reduce((best, opt) => {
11167
- var _this$getAgentStats$l;
11168
- const ts = (_this$getAgentStats$l = this.getAgentStats(opt.key).lastActivity) !== null && _this$getAgentStats$l !== void 0 ? _this$getAgentStats$l : -1;
11169
- return best === null || ts > best.ts ? {
11170
- key: opt.key,
11171
- ts
11172
- } : best;
11173
- }, null);
11174
- this.selectedContext = mostRecent ? mostRecent.key : agentOptions[0].key;
11175
- }
11176
- }
11177
13261
  if (previousMenu === "agents" && key !== "agents") {
11178
13262
  if (this.contextOptions.filter((opt) => opt.key !== "all-agents").length > 1) this.selectedContext = "all-agents";
11179
13263
  }
11180
13264
  if (key === "threads") {
11181
- var _this$core29;
11182
- if (previousMenu !== "threads" && !((_this$core29 = this.core) === null || _this$core29 === void 0 ? void 0 : _this$core29.telemetryDisabled)) trackThreadsTabClicked(this.getThreadsTelemetryProps());
13265
+ var _this$core33;
13266
+ if (previousMenu !== "threads" && !((_this$core33 = this.core) === null || _this$core33 === void 0 ? void 0 : _this$core33.telemetryDisabled)) trackThreadsTabClicked(this.getThreadsTelemetryProps());
11183
13267
  this.autoSelectLatestThread();
11184
13268
  }
11185
13269
  if (key === "playground" && !this.playgroundAgent) this.startPlaygroundSession(false);
11186
13270
  if (key === "memories") {
11187
- var _this$core30;
13271
+ var _this$core34;
11188
13272
  this.ensureMemorySubscription();
11189
- if (previousMenu !== "memories" && !((_this$core30 = this.core) === null || _this$core30 === void 0 ? void 0 : _this$core30.telemetryDisabled)) trackMemoriesTabClicked(this.getMemoriesTelemetryProps());
13273
+ if (previousMenu !== "memories" && !((_this$core34 = this.core) === null || _this$core34 === void 0 ? void 0 : _this$core34.telemetryDisabled)) trackMemoriesTabClicked(this.getMemoriesTelemetryProps());
11190
13274
  }
11191
13275
  if (key === "home" && previousMenu !== "home") this.homeViewedThisOpen = false;
11192
- if (key === "ag-ui-events" || key === "agents") requestAnimationFrame(() => {
11193
- const scroller = this.activeRoot.querySelector("#cpk-main-scroll");
11194
- if (scroller) scroller.scrollTop = 0;
11195
- });
13276
+ if (key === "event-snippets") this.reloadEventSnippets();
13277
+ if (key === "ag-ui-events" || key === "agents") {
13278
+ if (!(this.pendingScrollToEventId !== null || this.pendingScrollToToolCallId !== null)) requestAnimationFrame(() => {
13279
+ const scroller = this.activeRoot.querySelector("#cpk-main-scroll");
13280
+ if (scroller) scroller.scrollTop = 0;
13281
+ });
13282
+ }
11196
13283
  this.contextMenuOpen = false;
11197
13284
  this.layoutMenuOpen = false;
11198
13285
  this.persistState();
@@ -11378,10 +13465,10 @@ ${prettyEvent}</pre
11378
13465
  `;
11379
13466
  }
11380
13467
  extractToolsFromAgents() {
11381
- var _this$_core$tools;
13468
+ var _this$_core$tools2;
11382
13469
  if (!this._core) return [];
11383
13470
  const tools = [];
11384
- for (const coreTool of (_this$_core$tools = this._core.tools) !== null && _this$_core$tools !== void 0 ? _this$_core$tools : []) {
13471
+ for (const coreTool of (_this$_core$tools2 = this._core.tools) !== null && _this$_core$tools2 !== void 0 ? _this$_core$tools2 : []) {
11385
13472
  var _coreTool$agentId;
11386
13473
  tools.push({
11387
13474
  agentId: (_coreTool$agentId = coreTool.agentId) !== null && _coreTool$agentId !== void 0 ? _coreTool$agentId : "",
@@ -11838,58 +13925,454 @@ ${prettyEvent}</pre
11838
13925
  else this.expandedRows.add(eventId);
11839
13926
  this.requestUpdate();
11840
13927
  }
13928
+ /** Whether a given subject currently has something to say. */
13929
+ isSignalArmed(key) {
13930
+ if (isWiringErrorKey(key)) return this.errorSignalArmed[key];
13931
+ if (isEventErrorKey(key)) return this.eventErrorArmed[key];
13932
+ return this.newsSignalArmed;
13933
+ }
13934
+ /**
13935
+ * The signal that owns the single launcher dot, or null when the launcher is
13936
+ * quiet. Precedence rather than replacement: a suppressed signal stays armed
13937
+ * and takes the dot as soon as the higher-priority one clears, and its own
13938
+ * navigation marker is visible the whole time.
13939
+ */
13940
+ getActiveLauncherSignal() {
13941
+ for (const key of LAUNCHER_SIGNAL_PRIORITY_ORDER) if (this.isSignalArmed(key)) return key;
13942
+ return null;
13943
+ }
13944
+ /**
13945
+ * The marker a navigation entry carries, or null for an unmarked entry.
13946
+ *
13947
+ * Markers are independent of the launcher's single dot, so a suppressed
13948
+ * signal is never actually hidden once the panel is open. They also render
13949
+ * on the entry that is *currently selected*: for the news signal that never
13950
+ * mattered, because its marker clears as soon as the view renders, but a
13951
+ * state mirror stays true while it is being read and suppressing it on the
13952
+ * active entry would make it reappear on navigating away.
13953
+ */
13954
+ getNavigationSignalFor(key) {
13955
+ for (const signalKey of LAUNCHER_SIGNAL_PRIORITY_ORDER) {
13956
+ const signal = LAUNCHER_SIGNALS[signalKey];
13957
+ if (signal.markerTarget !== key) continue;
13958
+ if (!this.isSignalArmed(signalKey)) continue;
13959
+ if (signalKey === NEWS_SIGNAL_ID && !this.announcementLoaded) continue;
13960
+ return signal;
13961
+ }
13962
+ return null;
13963
+ }
13964
+ /** Whether a wiring error source is currently red. */
13965
+ hasArmedErrorSignal() {
13966
+ return WIRING_ERROR_KEYS.some((source) => this.errorSignalArmed[source]);
13967
+ }
13968
+ armEventErrorFromCode(code, message, context) {
13969
+ const key = eventErrorKeyForCode(code);
13970
+ if (key === null) return;
13971
+ const agentId = typeof (context === null || context === void 0 ? void 0 : context.agentId) === "string" && context.agentId.length > 0 ? context.agentId : void 0;
13972
+ const toolName = typeof (context === null || context === void 0 ? void 0 : context.toolName) === "string" && context.toolName.length > 0 ? context.toolName : void 0;
13973
+ const toolCallId = typeof (context === null || context === void 0 ? void 0 : context.toolCallId) === "string" && context.toolCallId.length > 0 ? context.toolCallId : void 0;
13974
+ this.armEventError(key, message, {
13975
+ agentId,
13976
+ toolName,
13977
+ toolCallId
13978
+ });
13979
+ }
13980
+ armEventError(key, message, extras = {}) {
13981
+ this.eventErrorDetails[key] = {
13982
+ message,
13983
+ ...extras
13984
+ };
13985
+ const wasArmed = this.eventErrorArmed[key];
13986
+ this.eventErrorArmed[key] = true;
13987
+ if (!wasArmed) this.startSignalPulse(key);
13988
+ if (this.isOpen && !this.settingsOpen && this.selectedMenu === LAUNCHER_SIGNALS[key].landingTarget) this.applyEventErrorLanding(key);
13989
+ this.requestUpdate();
13990
+ }
13991
+ clearEventError(key) {
13992
+ if (!this.eventErrorArmed[key]) return;
13993
+ this.eventErrorArmed[key] = false;
13994
+ this.errorSignalViewedSources.delete(key);
13995
+ this.retireSignal(key);
13996
+ this.requestUpdate();
13997
+ }
13998
+ clearAllEventErrors() {
13999
+ for (const key of EVENT_ERROR_KEYS) {
14000
+ this.eventErrorDetails[key] = null;
14001
+ if (!this.eventErrorArmed[key]) continue;
14002
+ this.eventErrorArmed[key] = false;
14003
+ this.retireSignal(key);
14004
+ }
14005
+ }
14006
+ /**
14007
+ * An event error is unread until its landing view is actually on screen.
14008
+ * Opening the Inspector for a different leaf must not burn it.
14009
+ */
14010
+ maybeCompleteEventErrorView() {
14011
+ if (!this.isOpen || this.settingsOpen) return;
14012
+ for (const key of EVENT_ERROR_KEYS) {
14013
+ if (!this.eventErrorArmed[key]) continue;
14014
+ if (this.selectedMenu !== LAUNCHER_SIGNALS[key].landingTarget) continue;
14015
+ this.clearEventError(key);
14016
+ }
14017
+ }
14018
+ isReducedMotionPreferred() {
14019
+ var _window$matchMedia4, _window4;
14020
+ return typeof window !== "undefined" && ((_window$matchMedia4 = (_window4 = window).matchMedia) === null || _window$matchMedia4 === void 0 ? void 0 : _window$matchMedia4.call(_window4, "(prefers-reduced-motion: reduce)").matches) === true;
14021
+ }
11841
14022
  armNewsSignal(options) {
11842
14023
  const wasArmed = this.newsSignalArmed;
11843
14024
  this.newsSignalArmed = true;
11844
- if (options.pulse && this.isOpen) {
11845
- this.newsSignalPulsePending = true;
11846
- if (!wasArmed) this.requestUpdate();
11847
- } else if (options.pulse) this.startNewsSignalPulse();
14025
+ if (options.pulse) this.startSignalPulse(NEWS_SIGNAL_ID);
11848
14026
  else if (!wasArmed) this.requestUpdate();
11849
14027
  }
11850
14028
  clearNewsSignal() {
11851
14029
  if (!this.newsSignalArmed) return;
11852
14030
  this.newsSignalArmed = false;
11853
- this.newsSignalPulsePending = false;
11854
14031
  if (this.announcementTimestamp) saveAnnouncementReadTimestamp(this.announcementTimestamp);
11855
- if (this.newsSignalPulsing) this.stopNewsSignalPulse();
14032
+ this.retireSignal(NEWS_SIGNAL_ID);
11856
14033
  this.requestUpdate();
11857
14034
  }
11858
- startNewsSignalPulse() {
11859
- this.stopNewsSignalPulse();
11860
- if (typeof document !== "undefined" && document.visibilityState !== "visible") {
11861
- this.newsSignalPulsePending = true;
14035
+ /**
14036
+ * Requests one beat for a signal, running it now or deferring it.
14037
+ *
14038
+ * There is a single pending slot and four reasons a beat cannot land. All
14039
+ * four are the same situation — "cannot land now, run later" — and treating
14040
+ * them alike is the point: three separate behaviours for one situation would
14041
+ * not survive a third signal.
14042
+ *
14043
+ * Reason 3 is not cosmetic. Starting a beat while one runs does not restart
14044
+ * the animation, because the attribute it binds to does not change value and
14045
+ * the pseudo-element selectors match on attribute *presence*; the running
14046
+ * beat would merely change colour mid-flight. A failure that arms during an
14047
+ * announcement beat must wait for that beat to end, or it would run only as
14048
+ * its final fraction.
14049
+ *
14050
+ * A failure's beat is followed by a pill, and the whole 3.4-second gesture
14051
+ * holds this one slot for its full duration. That is not a second scheduling
14052
+ * concept: reason 3 already says "another beat is running", and a gesture is
14053
+ * simply a longer beat.
14054
+ */
14055
+ startSignalPulse(key) {
14056
+ if (this.isOpen || typeof document !== "undefined" && document.visibilityState !== "visible" || this.gestureSlotSignal !== null && this.gestureSlotSignal !== key || this.getActiveLauncherSignal() !== key) {
14057
+ const pending = this.pendingPulseSignal;
14058
+ if (pending === null || LAUNCHER_SIGNALS[key].priority >= LAUNCHER_SIGNALS[pending].priority) this.pendingPulseSignal = key;
11862
14059
  this.requestUpdate();
11863
14060
  return;
11864
14061
  }
11865
- this.newsSignalPulsePending = false;
11866
- this.newsSignalPulsing = true;
11867
- if (this.announcementTimestamp) saveAnnouncementPulsedTimestamp(this.announcementTimestamp);
14062
+ this.stopSignalPulse();
14063
+ this.pendingPulseSignal = null;
14064
+ this.pulsingSignal = key;
14065
+ if (isWiringErrorKey(key)) this.errorBeatSpent = true;
14066
+ else if (this.announcementTimestamp && key === NEWS_SIGNAL_ID) saveAnnouncementPulsedTimestamp(this.announcementTimestamp);
14067
+ this.beginGestureTail(key);
11868
14068
  this.requestUpdate();
11869
14069
  if (typeof window === "undefined") return;
11870
14070
  this.pulseTimeoutId = setTimeout(() => {
11871
14071
  this.pulseTimeoutId = null;
11872
- this.newsSignalPulsing = false;
14072
+ this.pulsingSignal = null;
11873
14073
  this.requestUpdate();
11874
- }, NEWS_SIGNAL_CADENCE_MS);
14074
+ if (this.gestureSignal === key && this.pillPhase === "closed") {
14075
+ this.openPill();
14076
+ return;
14077
+ }
14078
+ if (this.gestureSignal === key) {
14079
+ this.endGesture();
14080
+ return;
14081
+ }
14082
+ this.flushPendingSignalPulse();
14083
+ }, LAUNCHER_SIGNALS[key].cadence);
11875
14084
  }
11876
- stopNewsSignalPulse() {
14085
+ stopSignalPulse() {
11877
14086
  if (this.pulseTimeoutId !== null) {
11878
14087
  clearTimeout(this.pulseTimeoutId);
11879
14088
  this.pulseTimeoutId = null;
11880
14089
  }
11881
- this.newsSignalPulsing = false;
14090
+ this.pulsingSignal = null;
14091
+ }
14092
+ /**
14093
+ * Runs a deferred beat if it can land now, and drops it if its reason to
14094
+ * exist has gone: a nudge about a problem that no longer exists is worse
14095
+ * than no nudge at all.
14096
+ */
14097
+ flushPendingSignalPulse() {
14098
+ const key = this.pendingPulseSignal;
14099
+ if (key === null) return;
14100
+ if (!this.isSignalArmed(key)) {
14101
+ this.pendingPulseSignal = null;
14102
+ this.requestUpdate();
14103
+ return;
14104
+ }
14105
+ this.startSignalPulse(key);
14106
+ }
14107
+ /**
14108
+ * Drops a signal's gesture, pending or running, when the signal goes quiet.
14109
+ *
14110
+ * The pill closes early: it states a condition, and the condition has
14111
+ * stopped being true. The beat is left to finish, because a beat asserts
14112
+ * nothing — it says *here*, and "here" is still true.
14113
+ */
14114
+ retireSignal(key) {
14115
+ if (this.pendingPulseSignal === key) this.pendingPulseSignal = null;
14116
+ if (this.gestureSignal === key) this.closePillEarly();
14117
+ this.flushPendingSignalPulse();
14118
+ }
14119
+ /**
14120
+ * The signal holding the single gesture slot: a beat in flight, or the pill
14121
+ * and spoken sentence that follow it. One slot, not two — see reason 3 in
14122
+ * `startSignalPulse`.
14123
+ */
14124
+ get gestureSlotSignal() {
14125
+ var _this$pulsingSignal;
14126
+ return (_this$pulsingSignal = this.pulsingSignal) !== null && _this$pulsingSignal !== void 0 ? _this$pulsingSignal : this.gestureSignal;
14127
+ }
14128
+ /**
14129
+ * Opens the gesture's tail alongside the beat, for a signal that carries a
14130
+ * pill. The pill is rendered immediately — clipped to nothing, so it shows
14131
+ * nothing — because its full width has to be on the page before the room
14132
+ * either side of the launcher can be measured.
14133
+ *
14134
+ * A signal with no pill label gets no tail at all, so the announcement's
14135
+ * gesture is exactly the beat it has always been.
14136
+ */
14137
+ beginGestureTail(key) {
14138
+ this.cancelPillTimeout();
14139
+ if (LAUNCHER_SIGNALS[key].pillLabel === void 0) {
14140
+ this.gestureSignal = null;
14141
+ this.pillPhase = null;
14142
+ this.pillDirection = null;
14143
+ return;
14144
+ }
14145
+ this.gestureSignal = key;
14146
+ this.pillPhase = "closed";
14147
+ this.pillDirection = null;
14148
+ this.closeLauncherHud();
14149
+ }
14150
+ /**
14151
+ * Chooses the side, or suppresses the pill, from the room actually available
14152
+ * at gesture start. Measured once, from the DOM, because the launcher is
14153
+ * draggable and its position persists: a reader who parked it near the left
14154
+ * edge would otherwise get a permanently truncated pill.
14155
+ *
14156
+ * Where neither side has room there is no pill at all rather than a cut-off
14157
+ * one — the dot and the beat still fire, so the signal is intact and only
14158
+ * the label is lost. Constraining where the reader may drag the control to
14159
+ * protect this animation was considered and rejected: the page is theirs.
14160
+ */
14161
+ resolvePillDirection() {
14162
+ if (this.pillDirection !== null || this.pillPhase === null) return;
14163
+ const wrapper = this.activeRoot.querySelector(".console-button-wrapper");
14164
+ const button = wrapper === null || wrapper === void 0 ? void 0 : wrapper.querySelector(".console-button");
14165
+ const pill = wrapper === null || wrapper === void 0 ? void 0 : wrapper.querySelector(".cpk-launcher-pill");
14166
+ if (!button || !pill || typeof window === "undefined") return;
14167
+ const mark = button.getBoundingClientRect();
14168
+ const overhang = Math.max(0, pill.getBoundingClientRect().width - mark.width);
14169
+ const viewportWidth = window.innerWidth;
14170
+ if (overhang === 0) {
14171
+ this.setPillOutcome("left");
14172
+ return;
14173
+ }
14174
+ if (mark.left - overhang >= EDGE_MARGIN) {
14175
+ this.setPillOutcome("left");
14176
+ return;
14177
+ }
14178
+ if (mark.right + overhang <= viewportWidth - EDGE_MARGIN) {
14179
+ this.setPillOutcome("right");
14180
+ return;
14181
+ }
14182
+ this.setPillOutcome(null);
14183
+ }
14184
+ /** Records the measurement's verdict, and drops the pill when it is null. */
14185
+ setPillOutcome(direction) {
14186
+ if (direction === null) {
14187
+ this.pillPhase = null;
14188
+ this.pillDirection = null;
14189
+ this.pillOutcome = "suppressed";
14190
+ this.requestUpdate();
14191
+ return;
14192
+ }
14193
+ this.pillDirection = direction;
14194
+ this.pillOutcome = "shown";
14195
+ this.requestUpdate();
14196
+ }
14197
+ /** Runs the pill's three phases in series once the beat has finished. */
14198
+ openPill() {
14199
+ this.resolvePillDirection();
14200
+ if (this.pillPhase === null) {
14201
+ this.endGesture();
14202
+ return;
14203
+ }
14204
+ this.advancePill("opening", ERROR_GESTURE_MS.open, () => {
14205
+ this.advancePill("holding", ERROR_GESTURE_MS.hold, () => {
14206
+ this.advancePill("closing", ERROR_GESTURE_MS.close, () => {
14207
+ this.endGesture();
14208
+ });
14209
+ });
14210
+ });
14211
+ }
14212
+ advancePill(phase, duration, next) {
14213
+ this.cancelPillTimeout();
14214
+ this.pillPhase = phase;
14215
+ this.requestUpdate();
14216
+ if (typeof window === "undefined") return;
14217
+ this.pillTimeoutId = setTimeout(() => {
14218
+ this.pillTimeoutId = null;
14219
+ next();
14220
+ }, duration);
14221
+ }
14222
+ /**
14223
+ * Closes the pill before its hold is out, because the failure it names has
14224
+ * been fixed. A pill that has not opened yet is simply dropped; the beat is
14225
+ * never cut short.
14226
+ */
14227
+ closePillEarly() {
14228
+ if (this.pillPhase === null) {
14229
+ this.endGesture();
14230
+ return;
14231
+ }
14232
+ if (this.pillPhase === "closing") return;
14233
+ if (this.pillPhase === "closed") {
14234
+ this.pillPhase = null;
14235
+ this.requestUpdate();
14236
+ return;
14237
+ }
14238
+ this.advancePill("closing", ERROR_GESTURE_MS.close, () => {
14239
+ this.endGesture();
14240
+ });
14241
+ }
14242
+ /** Releases the slot and leaves the plain mark with its dot behind. */
14243
+ endGesture() {
14244
+ this.cancelGestureTail();
14245
+ this.requestUpdate();
14246
+ this.flushPendingSignalPulse();
14247
+ }
14248
+ /**
14249
+ * Drops the gesture's tail outright, with no closing animation, for the
14250
+ * cases where the launcher itself has gone: the panel opened over it, or the
14251
+ * element was removed from the page.
14252
+ */
14253
+ cancelGestureTail() {
14254
+ this.cancelPillTimeout();
14255
+ this.gestureSignal = null;
14256
+ this.pillPhase = null;
14257
+ this.pillDirection = null;
14258
+ }
14259
+ cancelPillTimeout() {
14260
+ if (this.pillTimeoutId !== null) {
14261
+ clearTimeout(this.pillTimeoutId);
14262
+ this.pillTimeoutId = null;
14263
+ }
14264
+ }
14265
+ /**
14266
+ * Whether each error source is currently broken.
14267
+ *
14268
+ * Only two *wiring* conditions qualify. App errors (runs, tools, memory)
14269
+ * are unread events on a different latch — they name themselves on the pill
14270
+ * and clear when their landing view is read. Notably absent from *this*
14271
+ * latch:
14272
+ *
14273
+ * - **A failed agent run.** A run is an event. It arms `run`, not this
14274
+ * state. The resting wiring dot must not stay red for the rest of a debug
14275
+ * hour.
14276
+ * - **The core error channel as a wiring source.** Handshake failure already
14277
+ * sets the connection state. Other codes arm `run` or `tool`.
14278
+ * - **Memory failures before Learning is live.** The memory store is lazy
14279
+ * because creating it opens a realtime connection. Once it exists, a load
14280
+ * failure arms `memory`.
14281
+ * - **Product states.** An unconfigured Intelligence and an unentitled
14282
+ * Memory plan are not defects. The signal fires only where wiring is
14283
+ * present and the call still fails — which for threads is guaranteed by
14284
+ * `_threadsErrorByAgent` only ever being written while the thread
14285
+ * endpoints are available.
14286
+ *
14287
+ * Known limitation: the runtime handshake runs once, on connect. A server
14288
+ * that dies *after* the page loaded leaves the connection state at connected
14289
+ * and raises nothing; the next page load re-runs the handshake and the
14290
+ * signal appears then. The signal reports the wiring state as last
14291
+ * established. Closing that gap means a re-probe in the core, which is a
14292
+ * runtime concern.
14293
+ */
14294
+ isErrorSourceBroken(source) {
14295
+ if (source === "connection") {
14296
+ const state = this.getCoreStatusSummary().state;
14297
+ if (runtimeConnectionNeedsAttention(state)) return true;
14298
+ return this.errorSignalArmed.connection && state === "connecting";
14299
+ }
14300
+ return this._threadsErrorByAgent.size > 0;
14301
+ }
14302
+ /**
14303
+ * Mirrors both error latches onto the live state. Called from `willUpdate`,
14304
+ * because every mutation of the underlying state already requests an update,
14305
+ * so the resting dot follows the state within the same render.
14306
+ */
14307
+ evaluateErrorSignals() {
14308
+ const wasArmed = this.hasArmedErrorSignal();
14309
+ for (const source of WIRING_ERROR_KEYS) {
14310
+ if (this.isErrorSourceBroken(source)) {
14311
+ if (this.errorSignalArmed[source]) continue;
14312
+ this.errorSignalArmed[source] = true;
14313
+ continue;
14314
+ }
14315
+ if (!this.errorSignalArmed[source]) continue;
14316
+ this.errorSignalArmed[source] = false;
14317
+ this.errorSignalViewedSources.delete(source);
14318
+ this.retireSignal(source);
14319
+ }
14320
+ this.onErrorSignalsChanged(wasArmed);
14321
+ }
14322
+ /**
14323
+ * Applies the rising-edge rule after a latch changed.
14324
+ *
14325
+ * The beat fires on the transition from "no failure" to "at least one
14326
+ * failure", evaluated globally across the sources and never again while
14327
+ * anything is red — one root cause, one nudge.
14328
+ */
14329
+ onErrorSignalsChanged(wasArmed) {
14330
+ if (!this.hasArmedErrorSignal()) {
14331
+ this.errorBeatSpent = false;
14332
+ this.pillOutcome = null;
14333
+ return;
14334
+ }
14335
+ if (wasArmed || this.errorBeatSpent) return;
14336
+ const active = this.getActiveLauncherSignal();
14337
+ if (active !== null && isErrorSignalKey(active)) this.startSignalPulse(active);
14338
+ }
14339
+ /**
14340
+ * Records `oss.inspector.error_signal_viewed` once per source per outage,
14341
+ * when the dot is actually on screen.
14342
+ *
14343
+ * Unlike the announcement's launcher event this fires immediately rather
14344
+ * than waiting for the runtime handshake to report `telemetryDisabled`.
14345
+ * The held-queue would never drain for the connection source — a connection
14346
+ * failure means the handshake did not complete — so queuing would guarantee
14347
+ * zero data for the case this event exists to measure. `trackOpened` already
14348
+ * sends on the same terms. Both opt-out layers still gate it: the local
14349
+ * opt-out inside `track`, and the runtime's flag once it is known.
14350
+ */
14351
+ maybeTrackErrorSignalViewed() {
14352
+ var _this$core35, _this$pillOutcome;
14353
+ if (this.isOpen || typeof document === "undefined" || document.visibilityState !== "visible") return;
14354
+ const active = this.getActiveLauncherSignal();
14355
+ if (active === null || !isErrorSignalKey(active)) return;
14356
+ if (this.errorSignalViewedSources.has(active)) return;
14357
+ if (this.pillOutcome === null && LAUNCHER_SIGNALS[active].pillLabel !== void 0) return;
14358
+ if ((_this$core35 = this.core) === null || _this$core35 === void 0 ? void 0 : _this$core35.telemetryDisabled) return;
14359
+ this.errorSignalViewedSources.add(active);
14360
+ trackErrorSignalViewed({
14361
+ source: active,
14362
+ presentation: this.isReducedMotionPreferred() ? "reduced_motion" : "animated",
14363
+ label: (_this$pillOutcome = this.pillOutcome) !== null && _this$pillOutcome !== void 0 ? _this$pillOutcome : "suppressed"
14364
+ });
11882
14365
  }
11883
14366
  maybeTrackNewsSignalViewed() {
11884
- var _window$matchMedia4, _window4, _this$announcementCta2;
11885
- if (!this.newsSignalArmed || !this.newsSignalPulsing || this.isOpen || typeof document === "undefined" || document.visibilityState !== "visible") return;
14367
+ var _window$matchMedia5, _window5, _this$announcementCta2;
14368
+ if (!this.newsSignalArmed || this.pulsingSignal !== NEWS_SIGNAL_ID || this.isOpen || typeof document === "undefined" || document.visibilityState !== "visible") return;
11886
14369
  const id = this.announcementTimestamp;
11887
14370
  if (!id || this.viewedNewsSignalIds.has(id)) return;
11888
14371
  this.viewedNewsSignalIds.add(id);
11889
14372
  this.pendingNewsSignalViewed = {
11890
14373
  banner_id: id,
11891
14374
  surface: "launcher",
11892
- presentation: typeof window !== "undefined" && ((_window$matchMedia4 = (_window4 = window).matchMedia) === null || _window$matchMedia4 === void 0 ? void 0 : _window$matchMedia4.call(_window4, "(prefers-reduced-motion: reduce)").matches) ? "reduced_motion" : "animated",
14375
+ presentation: typeof window !== "undefined" && ((_window$matchMedia5 = (_window5 = window).matchMedia) === null || _window$matchMedia5 === void 0 ? void 0 : _window$matchMedia5.call(_window5, "(prefers-reduced-motion: reduce)").matches) ? "reduced_motion" : "animated",
11893
14376
  cta_label: (_this$announcementCta2 = this.announcementCtaLabel) !== null && _this$announcementCta2 !== void 0 ? _this$announcementCta2 : void 0
11894
14377
  };
11895
14378
  this.flushPendingWhatsNewTelemetry();
@@ -11951,9 +14434,9 @@ ${prettyEvent}</pre
11951
14434
  this.flushPendingWhatsNewTelemetry();
11952
14435
  }
11953
14436
  flushPendingWhatsNewTelemetry() {
11954
- var _this$core31;
14437
+ var _this$core36;
11955
14438
  if (this.pendingBannerViewed.length === 0 && !this.pendingNewsSignalViewed) return;
11956
- if ((_this$core31 = this.core) === null || _this$core31 === void 0 ? void 0 : _this$core31.telemetryDisabled) {
14439
+ if ((_this$core36 = this.core) === null || _this$core36 === void 0 ? void 0 : _this$core36.telemetryDisabled) {
11957
14440
  this.pendingBannerViewed = [];
11958
14441
  this.pendingNewsSignalViewed = null;
11959
14442
  return;
@@ -12035,11 +14518,11 @@ ${prettyEvent}</pre
12035
14518
  }
12036
14519
  appendRefParam(href, ref = "cpk-inspector") {
12037
14520
  try {
12038
- var _this$core32;
14521
+ var _this$core37;
12039
14522
  const isRootRelative = href.startsWith("/") && !href.startsWith("//");
12040
14523
  const url = new URL(href, typeof window !== "undefined" ? window.location.href : "https://copilotkit.ai");
12041
14524
  if (!url.searchParams.has("ref")) url.searchParams.append("ref", ref);
12042
- if (!url.searchParams.has("posthog_distinct_id") && this.runtimeStatus === _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected && !((_this$core32 = this.core) === null || _this$core32 === void 0 ? void 0 : _this$core32.telemetryDisabled) && this.isCopilotKitDestination(url)) {
14525
+ if (!url.searchParams.has("posthog_distinct_id") && this.runtimeStatus === _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected && !((_this$core37 = this.core) === null || _this$core37 === void 0 ? void 0 : _this$core37.telemetryDisabled) && this.isCopilotKitDestination(url)) {
12043
14526
  const distinctId = getTelemetryDistinctIdForUrl();
12044
14527
  if (distinctId) url.searchParams.append("posthog_distinct_id", distinctId);
12045
14528
  }
@@ -12107,18 +14590,28 @@ ${prettyEvent}</pre
12107
14590
  .console-button-wrapper {
12108
14591
  position: relative;
12109
14592
  display: inline-flex;
12110
- }
12111
-
12112
- .console-button {
14593
+ /* The launcher's surface and edge, shared by the button and the pill so
14594
+ the two cannot drift apart. A dark grey rather than near-black: the
14595
+ launcher sits on a customer's page, and 1,5,7 against white is a
14596
+ harder edge than this surface needs. */
14597
+ --cpk-launcher-face: rgba(28, 31, 36, 0.95);
14598
+ --cpk-launcher-face-solid: rgb(28, 31, 36);
14599
+ --cpk-launcher-edge: rgba(190, 194, 255, 0.25);
12113
14600
  /* The launcher's own size, exposed so the signal dot can be placed
12114
14601
  against the OUTER rim with a length rather than a percentage.
12115
14602
  Percentages resolve against the padding box, which the 1px border
12116
- insets, and the dot would land inside the rim. */
14603
+ insets, and the dot would land inside the rim.
14604
+
14605
+ Declared on the wrapper rather than on the button so the pill, which
14606
+ is the button's sibling, can clear the mark by the same length. */
12117
14607
  --cpk-launcher-size: clamp(
12118
14608
  ${LAUNCHER_MIN_SIZE}px,
12119
14609
  7vw,
12120
14610
  ${LAUNCHER_MAX_SIZE}px
12121
14611
  );
14612
+ }
14613
+
14614
+ .console-button {
12122
14615
  width: var(--cpk-launcher-size);
12123
14616
  height: var(--cpk-launcher-size);
12124
14617
  /* Keep the 1px border inside the declared outer size. */
@@ -12520,14 +15013,14 @@ ${prettyEvent}</pre
12520
15013
 
12521
15014
  /* ── Floating button ─────────────────────────────────────────── */
12522
15015
  .console-button {
12523
- background-color: rgba(1, 5, 7, 0.95) !important;
12524
- border-color: rgba(190, 194, 255, 0.25) !important;
15016
+ background-color: var(--cpk-launcher-face) !important;
15017
+ border-color: var(--cpk-launcher-edge) !important;
12525
15018
  box-shadow:
12526
15019
  0 0 0 1px rgba(190, 194, 255, 0.15),
12527
15020
  0 4px 14px rgba(1, 5, 7, 0.28) !important;
12528
15021
  }
12529
15022
  .console-button:hover {
12530
- background-color: rgba(1, 5, 7, 1) !important;
15023
+ background-color: var(--cpk-launcher-face-solid) !important;
12531
15024
  border-color: rgba(190, 194, 255, 0.45) !important;
12532
15025
  }
12533
15026
  .console-button:focus-visible {
@@ -12545,7 +15038,6 @@ ${prettyEvent}</pre
12545
15038
  * that forces a repaint every frame is not acceptable.
12546
15039
  */
12547
15040
  .console-button[data-cpk-signal] {
12548
- --cpk-launcher-face: rgba(1, 5, 7, 0.95);
12549
15041
  isolation: isolate;
12550
15042
  }
12551
15043
 
@@ -12655,11 +15147,197 @@ ${prettyEvent}</pre
12655
15147
  box-shadow: 0 0 0 1.5px var(--cpk-launcher-face);
12656
15148
  }
12657
15149
 
15150
+ /* ── Launcher pill: the launcher opens sideways and says what ─── */
15151
+ /*
15152
+ * The pill is laid out at its FULL width from the first frame and
15153
+ * revealed by animating a rectangular clip. Nothing is scaled and
15154
+ * nothing is resized.
15155
+ *
15156
+ * That is not a stylistic choice. This component is permanently mounted
15157
+ * on top of a customer's application, so no property that forces a
15158
+ * layout on every frame is acceptable — and animating "width" does
15159
+ * exactly that, sixty times a second, on someone else's page. A clip
15160
+ * leaves the element's geometry constant and changes only the visible
15161
+ * region, which the compositor handles. Animating a horizontal scale
15162
+ * was the other candidate and squashes the mark itself, not merely the
15163
+ * rounded end, so the logo would need counter-scaling and the dot and
15164
+ * halo would become ellipses.
15165
+ *
15166
+ * The launcher's own face and border are repeated here so the two form
15167
+ * one capsule: the button paints last and therefore on top, with no
15168
+ * z-index needed. The mark's own ring and shadow are deliberately left
15169
+ * alone for the whole gesture — the circle's outline staying visible
15170
+ * inside the open pill was looked at against the alternative and kept.
15171
+ *
15172
+ * A column, not a row: the pill carries a heading and a subline stacked,
15173
+ * centred against a height that does not change. "justify-content"
15174
+ * centres the pair vertically and "align-items" keeps both lines flush
15175
+ * left, so the pill never grows taller than the launcher it opens from.
15176
+ */
15177
+ .cpk-launcher-pill {
15178
+ position: absolute;
15179
+ top: 50%;
15180
+ margin-top: calc(var(--cpk-launcher-size) / -2);
15181
+ height: var(--cpk-launcher-size);
15182
+ display: inline-flex;
15183
+ flex-direction: column;
15184
+ justify-content: center;
15185
+ align-items: flex-start;
15186
+ gap: 1px;
15187
+ box-sizing: border-box;
15188
+ border-radius: 999px;
15189
+ border: 1px solid var(--cpk-launcher-edge);
15190
+ background: var(--cpk-launcher-face);
15191
+ color: #ffffff;
15192
+ white-space: nowrap;
15193
+ pointer-events: none;
15194
+ opacity: 0;
15195
+ }
15196
+
15197
+ /* The failure class, word-identical to the panel's own wording. */
15198
+ .cpk-launcher-pill__heading {
15199
+ font-size: 12px;
15200
+ font-weight: 600;
15201
+ line-height: 1.2;
15202
+ }
15203
+
15204
+ /*
15205
+ * The one line of copy in this feature that exists nowhere else in the
15206
+ * product. The heading above is word-identical to the panel, which is
15207
+ * the standing rule; this line is a deliberate, owner-approved exception
15208
+ * to it, because the pill is now clickable and has to say so.
15209
+ *
15210
+ * It is NOT spoken. A screen-reader user cannot act on an instruction
15211
+ * delivered through an announcement, and it would double the spoken
15212
+ * length — so the live region carries the failure class alone.
15213
+ */
15214
+ .cpk-launcher-pill__subline {
15215
+ font-size: 10.5px;
15216
+ font-weight: 500;
15217
+ line-height: 1.2;
15218
+ opacity: 0.72;
15219
+ }
15220
+
15221
+ /*
15222
+ * Two directions, one animation with the inset on the other side. The
15223
+ * padding on the launcher's side clears the mark, so the words never sit
15224
+ * under it. The text-side padding is derived from the capsule's radius
15225
+ * (half the launcher size), NOT a bare literal: padding is measured from
15226
+ * the bounding box, but the first half-height of that side is the rounded
15227
+ * cap. Half the size lands the text exactly where the cap ends and the
15228
+ * straight edge begins. A literal 14px put it 16px inside the curve at the
15229
+ * production launcher size, which is itself a clamp on the viewport.
15230
+ */
15231
+ .cpk-launcher-pill[data-cpk-pill-direction="left"] {
15232
+ right: 0;
15233
+ padding: 0 calc(var(--cpk-launcher-size) + 12px) 0
15234
+ calc(var(--cpk-launcher-size) / 2);
15235
+ clip-path: inset(0 0 0 calc(100% - var(--cpk-launcher-size)));
15236
+ }
15237
+ .cpk-launcher-pill[data-cpk-pill-direction="right"] {
15238
+ left: 0;
15239
+ padding: 0 calc(var(--cpk-launcher-size) / 2) 0
15240
+ calc(var(--cpk-launcher-size) + 12px);
15241
+ clip-path: inset(0 calc(100% - var(--cpk-launcher-size)) 0 0);
15242
+ }
15243
+
15244
+ /*
15245
+ * "round" on both stops, so the revealing edge is the capsule's own
15246
+ * rounded end travelling sideways rather than a straight vertical line
15247
+ * wiping across it. An unrounded inset reads as a wipe; this reads as an
15248
+ * opening. It adds no animated property: the clip is still the clip.
15249
+ */
15250
+ @keyframes cpk-launcher-pill-left {
15251
+ 0% {
15252
+ opacity: 0;
15253
+ clip-path: inset(
15254
+ 0 0 0 calc(100% - var(--cpk-launcher-size)) round 999px
15255
+ );
15256
+ }
15257
+ 100% {
15258
+ opacity: 1;
15259
+ clip-path: inset(0 0 0 0 round 999px);
15260
+ }
15261
+ }
15262
+
15263
+ @keyframes cpk-launcher-pill-right {
15264
+ 0% {
15265
+ opacity: 0;
15266
+ clip-path: inset(
15267
+ 0 calc(100% - var(--cpk-launcher-size)) 0 0 round 999px
15268
+ );
15269
+ }
15270
+ 100% {
15271
+ opacity: 1;
15272
+ clip-path: inset(0 0 0 0 round 999px);
15273
+ }
15274
+ }
15275
+
15276
+ /*
15277
+ * The pill takes the pointer exactly while it is on screen, so the
15278
+ * instruction it now carries is honest: a click on it opens the
15279
+ * Inspector, the same action as pressing the mark. During the beat the
15280
+ * clip covers only the mark itself, and a click target nobody can see
15281
+ * over someone else's page is not something to ship — so the base rule
15282
+ * keeps "pointer-events: none" and only the three visible phases take it
15283
+ * back.
15284
+ * The button paints last and therefore wins the pointer where the two
15285
+ * overlap, so dragging the launcher is unaffected throughout.
15286
+ */
15287
+ .cpk-launcher-pill[data-cpk-pill-phase="opening"],
15288
+ .cpk-launcher-pill[data-cpk-pill-phase="holding"],
15289
+ .cpk-launcher-pill[data-cpk-pill-phase="closing"] {
15290
+ pointer-events: auto;
15291
+ cursor: pointer;
15292
+ }
15293
+
15294
+ /* Closing is the same animation played backwards, so the two phases can
15295
+ never drift apart. */
15296
+ .cpk-launcher-pill[data-cpk-pill-phase="opening"],
15297
+ .cpk-launcher-pill[data-cpk-pill-phase="closing"] {
15298
+ animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
15299
+ animation-iteration-count: 1;
15300
+ animation-fill-mode: forwards;
15301
+ }
15302
+ .cpk-launcher-pill[data-cpk-pill-phase="opening"] {
15303
+ animation-duration: var(--cpk-launcher-pill-open);
15304
+ }
15305
+ .cpk-launcher-pill[data-cpk-pill-phase="closing"] {
15306
+ animation-duration: var(--cpk-launcher-pill-close);
15307
+ animation-direction: reverse;
15308
+ }
15309
+ .cpk-launcher-pill[data-cpk-pill-phase="opening"][data-cpk-pill-direction="left"],
15310
+ .cpk-launcher-pill[data-cpk-pill-phase="closing"][data-cpk-pill-direction="left"] {
15311
+ animation-name: cpk-launcher-pill-left;
15312
+ }
15313
+ .cpk-launcher-pill[data-cpk-pill-phase="opening"][data-cpk-pill-direction="right"],
15314
+ .cpk-launcher-pill[data-cpk-pill-phase="closing"][data-cpk-pill-direction="right"] {
15315
+ animation-name: cpk-launcher-pill-right;
15316
+ }
15317
+
15318
+ /* The hold is the end state of the reveal, held. */
15319
+ .cpk-launcher-pill[data-cpk-pill-phase="holding"] {
15320
+ opacity: 1;
15321
+ clip-path: inset(0 0 0 0);
15322
+ }
15323
+
12658
15324
  /*
12659
15325
  * Reduced motion: the halo is held statically rather than animated, so
12660
15326
  * the information arrives without the movement.
12661
15327
  */
12662
15328
  @media (prefers-reduced-motion: reduce) {
15329
+ /*
15330
+ * The pill is shown by opacity alone, with no clip animation and the
15331
+ * same hold. The instruction is to reduce motion, not to withhold
15332
+ * information, and this reader needs the label as much as anyone.
15333
+ */
15334
+ .cpk-launcher-pill[data-cpk-pill-phase="opening"],
15335
+ .cpk-launcher-pill[data-cpk-pill-phase="holding"],
15336
+ .cpk-launcher-pill[data-cpk-pill-phase="closing"] {
15337
+ animation: none !important;
15338
+ opacity: 1;
15339
+ clip-path: inset(0 0 0 0);
15340
+ }
12663
15341
  .cpk-launcher-signal-wash {
12664
15342
  opacity: 0.85;
12665
15343
  }
@@ -12679,11 +15357,225 @@ ${prettyEvent}</pre
12679
15357
  }
12680
15358
  }
12681
15359
 
15360
+ /* ── Launcher HUD: hover menu, quieter than the error island ── */
15361
+ .console-button-wrapper[data-cpk-hud="open"] .cpk-launcher-hud {
15362
+ pointer-events: auto;
15363
+ opacity: 1;
15364
+ transform: none;
15365
+ visibility: visible;
15366
+ }
15367
+
15368
+ .cpk-launcher-hud {
15369
+ position: absolute;
15370
+ top: 0;
15371
+ z-index: 4;
15372
+ padding-right: 14px;
15373
+ pointer-events: none;
15374
+ opacity: 0;
15375
+ visibility: hidden;
15376
+ transform: translateX(8px);
15377
+ transition:
15378
+ opacity 160ms ease,
15379
+ transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
15380
+ }
15381
+
15382
+ .cpk-launcher-hud[data-cpk-hud-side="left"] {
15383
+ right: 100%;
15384
+ padding-right: 14px;
15385
+ padding-left: 0;
15386
+ }
15387
+
15388
+ .cpk-launcher-hud[data-cpk-hud-side="right"] {
15389
+ left: 100%;
15390
+ right: auto;
15391
+ padding-right: 0;
15392
+ padding-left: 14px;
15393
+ transform: translateX(-8px);
15394
+ }
15395
+
15396
+ .console-button-wrapper[data-cpk-hud="open"]
15397
+ .cpk-launcher-hud[data-cpk-hud-side="right"] {
15398
+ transform: none;
15399
+ }
15400
+
15401
+ .cpk-launcher-hud__card {
15402
+ --hud-fill: rgb(28 31 36 / 0.88);
15403
+ --hud-line: rgb(190 194 255 / 0.5);
15404
+ position: relative;
15405
+ width: 228px;
15406
+ padding: 4px;
15407
+ border: 1px dotted var(--hud-line);
15408
+ border-radius: 10px;
15409
+ background: var(--hud-fill);
15410
+ color: #fff;
15411
+ backdrop-filter: blur(12px) saturate(1.2);
15412
+ box-shadow: 0 8px 20px rgb(1 5 7 / 0.18);
15413
+ }
15414
+
15415
+ .cpk-launcher-hud__arrow {
15416
+ position: absolute;
15417
+ top: calc(var(--cpk-launcher-size) / 2);
15418
+ width: 10px;
15419
+ height: 10px;
15420
+ background: var(--hud-fill);
15421
+ transform: translateY(-50%) rotate(45deg);
15422
+ }
15423
+
15424
+ .cpk-launcher-hud[data-cpk-hud-side="left"] .cpk-launcher-hud__arrow {
15425
+ right: -5px;
15426
+ border-top: 1px solid var(--hud-line);
15427
+ border-right: 1px solid var(--hud-line);
15428
+ }
15429
+
15430
+ .cpk-launcher-hud[data-cpk-hud-side="right"] .cpk-launcher-hud__arrow {
15431
+ left: -5px;
15432
+ border-bottom: 1px solid var(--hud-line);
15433
+ border-left: 1px solid var(--hud-line);
15434
+ }
15435
+
15436
+ .cpk-launcher-hud__list {
15437
+ margin: 0;
15438
+ padding: 0;
15439
+ list-style: none;
15440
+ }
15441
+
15442
+ .cpk-launcher-hud__list + .cpk-launcher-hud__list {
15443
+ margin-top: 4px;
15444
+ padding-top: 4px;
15445
+ border-top: 1px dotted var(--hud-line);
15446
+ }
15447
+
15448
+ .cpk-launcher-hud__row {
15449
+ position: relative;
15450
+ display: grid;
15451
+ grid-template-columns: 1fr 28px;
15452
+ align-items: start;
15453
+ border-radius: 7px;
15454
+ cursor: pointer;
15455
+ }
15456
+
15457
+ .cpk-launcher-hud__row + .cpk-launcher-hud__row {
15458
+ margin-top: 1px;
15459
+ }
15460
+
15461
+ .cpk-launcher-hud__row:hover,
15462
+ .cpk-launcher-hud__row:focus-within,
15463
+ .cpk-launcher-hud__row[data-cpk-hud-help="open"] {
15464
+ background: rgb(255 255 255 / 0.06);
15465
+ }
15466
+
15467
+ .cpk-launcher-hud__action {
15468
+ display: flex;
15469
+ gap: 8px;
15470
+ min-height: 32px;
15471
+ align-items: center;
15472
+ padding: 6px 8px;
15473
+ border: 0;
15474
+ border-radius: 7px;
15475
+ background: transparent;
15476
+ color: #fff;
15477
+ font-family: inherit;
15478
+ font-size: 12px;
15479
+ font-weight: 600;
15480
+ text-align: start;
15481
+ cursor: pointer;
15482
+ }
15483
+
15484
+ /* Stretch the row action over the whole tab, including the detail
15485
+ copy. The help mark sits above this layer. */
15486
+ .cpk-launcher-hud__action::after {
15487
+ content: "";
15488
+ position: absolute;
15489
+ inset: 0;
15490
+ }
15491
+
15492
+ .cpk-launcher-hud__check {
15493
+ flex: none;
15494
+ width: 14px;
15495
+ height: 14px;
15496
+ color: #34d399;
15497
+ }
15498
+
15499
+ .cpk-launcher-hud__help {
15500
+ position: relative;
15501
+ z-index: 1;
15502
+ display: inline-flex;
15503
+ width: 28px;
15504
+ height: 32px;
15505
+ align-items: center;
15506
+ justify-content: center;
15507
+ padding: 0;
15508
+ border: 0;
15509
+ background: transparent;
15510
+ color: rgb(255 255 255 / 0.78);
15511
+ font-size: 12px;
15512
+ font-weight: 600;
15513
+ cursor: pointer;
15514
+ }
15515
+
15516
+ .cpk-launcher-hud__help span {
15517
+ display: inline-flex;
15518
+ width: 16px;
15519
+ height: 16px;
15520
+ align-items: center;
15521
+ justify-content: center;
15522
+ border: 1px dotted rgb(190 194 255 / 0.55);
15523
+ border-radius: 50%;
15524
+ line-height: 1;
15525
+ }
15526
+
15527
+ .cpk-launcher-hud__help:focus-visible,
15528
+ .cpk-launcher-hud__action:focus-visible {
15529
+ outline: 2px solid #bec2ff;
15530
+ outline-offset: 1px;
15531
+ }
15532
+
15533
+ .cpk-launcher-hud__detail {
15534
+ grid-column: 1 / -1;
15535
+ max-height: 0;
15536
+ margin: 0;
15537
+ padding: 0 8px;
15538
+ overflow: hidden;
15539
+ color: rgb(255 255 255 / 0.78);
15540
+ font-size: 11px;
15541
+ font-weight: 400;
15542
+ line-height: 1.4;
15543
+ opacity: 0;
15544
+ pointer-events: none;
15545
+ transform: translateY(-6px);
15546
+ transition:
15547
+ max-height 200ms cubic-bezier(0.16, 1, 0.3, 1),
15548
+ opacity 150ms ease-out,
15549
+ transform 200ms cubic-bezier(0.16, 1, 0.3, 1),
15550
+ padding-bottom 200ms cubic-bezier(0.16, 1, 0.3, 1);
15551
+ }
15552
+
15553
+ .cpk-launcher-hud__row:hover .cpk-launcher-hud__detail,
15554
+ .cpk-launcher-hud__row:focus-within .cpk-launcher-hud__detail,
15555
+ .cpk-launcher-hud__row[data-cpk-hud-help="open"] .cpk-launcher-hud__detail {
15556
+ max-height: 72px;
15557
+ padding: 0 8px 7px;
15558
+ opacity: 1;
15559
+ transform: none;
15560
+ }
15561
+
15562
+ @media (prefers-reduced-motion: reduce) {
15563
+ .cpk-launcher-hud,
15564
+ .cpk-launcher-hud__detail {
15565
+ transition: none;
15566
+ }
15567
+ }
15568
+
12682
15569
  /*
12683
- * Unread marker on the navigation entry, which is what keeps the signal
12684
- * alive once the panel is open and the launcher is hidden. Static by
12685
- * design: the pulse belongs to the launcher, and movement here would
12686
- * compete with the live event stream a developer is actually watching.
15570
+ * Marker on the navigation entry, which is what keeps a signal alive
15571
+ * once the panel is open and the launcher is hidden. Static by design:
15572
+ * the beat belongs to the launcher, and movement here would compete with
15573
+ * the live event stream a developer is actually watching.
15574
+ *
15575
+ * Tone-selected rather than tone-agnostic, because the marker has to
15576
+ * agree with the dot that sent the reader here. Same shape, same
15577
+ * placement, one declaration different — as on the launcher, where the
15578
+ * treatment is shared and only the injected colour changes.
12687
15579
  */
12688
15580
  .inspector-nav-signal-dot {
12689
15581
  display: inline-block;
@@ -12691,7 +15583,10 @@ ${prettyEvent}</pre
12691
15583
  width: 6px;
12692
15584
  height: 6px;
12693
15585
  border-radius: 50%;
12694
- background: ${(0, lit.unsafeCSS)(NEWS_SIGNAL_COLOR)};
15586
+ background: ${(0, lit.unsafeCSS)(LAUNCHER_SIGNAL_COLORS.news)};
15587
+ }
15588
+ .inspector-nav-signal-dot[data-cpk-signal-tone="error"] {
15589
+ background: ${(0, lit.unsafeCSS)(LAUNCHER_SIGNAL_COLORS.error)};
12695
15590
  }
12696
15591
 
12697
15592
  /* ── Inspector window ────────────────────────────────────────── */
@@ -13019,7 +15914,10 @@ exports.CpkThreadInspector = CpkThreadInspector;
13019
15914
  exports.THREAD_INSPECTOR_TAG = THREAD_INSPECTOR_TAG;
13020
15915
  exports.WEB_INSPECTOR_TAG = WEB_INSPECTOR_TAG;
13021
15916
  exports.WebInspectorElement = WebInspectorElement;
15917
+ exports.compileChatSnippet = compileChatSnippet;
15918
+ exports.compileFromActivityMessage = compileFromActivityMessage;
13022
15919
  exports.defineWebInspector = defineWebInspector;
15920
+ exports.upsertEventSnippet = upsertEventSnippet;
13023
15921
  exports.ɵCpkThreadDetails = ɵCpkThreadDetails;
13024
15922
  exports.ɵbuildCapabilityRows = buildCapabilityRows;
13025
15923
  exports.ɵmaxRecallScore = maxRecallScore;