@helpai/elements 0.44.3 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.mjs CHANGED
@@ -30,7 +30,7 @@ var BRAND = {
30
30
  };
31
31
 
32
32
  // src/core/version.ts
33
- var ELEMENTS_VERSION = true ? "0.44.3" : "0.0.0-dev";
33
+ var ELEMENTS_VERSION = true ? "0.45.0" : "0.0.0-dev";
34
34
  var ELEMENTS_VERSION_PARAM = "_ev";
35
35
 
36
36
  // src/i18n/strings.ts
@@ -91,6 +91,9 @@ var STRINGS_EN = {
91
91
  thinking: "Thinking\u2026",
92
92
  thoughts: "Thoughts",
93
93
  usedTool: "Used tool",
94
+ toolDetails: "Details",
95
+ toolResult: "Result",
96
+ sources: "Sources",
94
97
  // ── Messenger modules ──────────────────────────────────────────
95
98
  tabHome: "Home",
96
99
  tabConversations: "Conversations",
@@ -204,6 +207,9 @@ var STRINGS_FR = {
204
207
  thinking: "R\xE9flexion\u2026",
205
208
  thoughts: "R\xE9flexions",
206
209
  usedTool: "Outil utilis\xE9",
210
+ toolDetails: "D\xE9tails",
211
+ toolResult: "R\xE9sultat",
212
+ sources: "Sources",
207
213
  // ── Messenger modules ──────────────────────────────────────────
208
214
  tabHome: "Accueil",
209
215
  tabConversations: "Conversations",
@@ -615,6 +621,7 @@ function resolveOptions(rawOpts) {
615
621
  responseMode: behavior.responseMode ?? "streaming",
616
622
  showReasoning: behavior.showReasoning ?? false,
617
623
  showToolCalls: behavior.showToolCalls ?? false,
624
+ showSources: behavior.showSources ?? false,
618
625
  features: {
619
626
  files: opts.features?.files ?? DEFAULT_FEATURES.files,
620
627
  voice: opts.features?.voice ?? DEFAULT_FEATURES.voice,
@@ -941,7 +948,8 @@ var BEHAVIOR_ATTRS = [
941
948
  ["response-mode", "responseMode", (v) => v],
942
949
  ["start-minimized", "startMinimized", boolAttr],
943
950
  ["show-reasoning", "showReasoning", boolAttr],
944
- ["show-tool-calls", "showToolCalls", boolAttr]
951
+ ["show-tool-calls", "showToolCalls", boolAttr],
952
+ ["show-sources", "showSources", boolAttr]
945
953
  ];
946
954
  var I18N_ATTRS = [["locale", "locale"]];
947
955
  var ACTION_NAMES = new Set(ACTION_NAME_LITERALS);
@@ -1196,7 +1204,7 @@ var tokens_default = ':host{--__P__-accent-user: __BRAND_ACCENT__;--__P__-accent
1196
1204
  var reset_default = '*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border:0}button{font:inherit;color:inherit;background:none;cursor:pointer;-webkit-appearance:none;appearance:none;line-height:1}button:focus-visible,[tabindex]:focus-visible,textarea:focus-visible,input:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}textarea,input{font:inherit;color:inherit;background:none;border:0;outline:0;resize:none}a{color:var(--__P__-accent);text-decoration:underline;text-underline-offset:2px}img,svg{display:block;max-width:100%}ul,ol{list-style:none}.__P__-app{display:block;width:100%;height:100%;font-family:var(--__P__-font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv11","ss01","ss03"}.__P__-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n';
1197
1205
 
1198
1206
  // src/styles/panel.css
1199
- var panel_default = '.__P__-anchor{color-scheme:var(--__P__-color-scheme, light);right:16px;bottom:16px}.__P__-surface{display:contents}.__P__-surface[hidden]{display:none}:host([data-position="bottom-left"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{right:auto;left:16px}:host([data-position="top-right"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{bottom:auto;top:16px}.__P__-anchor{position:fixed;display:flex;flex-direction:column;align-items:flex-end;gap:var(--__P__-space-3);pointer-events:none}.__P__-anchor{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=sm]{--__P__-fab-size: 44px}.__P__-anchor[data-launcher-size=md]{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=lg]{--__P__-fab-size: 68px}.__P__-anchor>*{pointer-events:auto}.__P__-fab[data-size=sm]{--__P__-fab-size: 44px;font-size:var(--__P__-text-sm)}.__P__-fab[data-size=md]{--__P__-fab-size: 56px;font-size:calc(14px * var(--__P__-text-scale))}.__P__-fab[data-size=lg]{--__P__-fab-size: 68px;font-size:var(--__P__-text-base)}.__P__-fab{display:inline-flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);color:var(--__P__-accent-text);background:var(--__P__-accent);box-shadow:var(--__P__-shadow-fab);font-weight:600;line-height:1;transform-origin:bottom right;animation:__P__-fab-in var(--__P__-dur-base) var(--__P__-ease) both;transition:transform var(--__P__-dur-base) var(--__P__-ease),opacity var(--__P__-dur-base) var(--__P__-ease),box-shadow var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab:hover{transform:translateY(-2px)}.__P__-fab:active{transform:translateY(0)}.__P__-fab:focus-visible{outline:2px solid var(--__P__-on-accent);outline-offset:3px}.__P__-fab svg{width:24px;height:24px;flex-shrink:0}@keyframes __P__-fab-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:none}}.__P__-fab[data-leaving]{position:absolute;right:0;bottom:0;animation:__P__-fab-out var(--__P__-dur-quick) var(--__P__-ease) forwards;pointer-events:none}:host([data-position^="top-"]) .__P__-fab[data-leaving]{bottom:auto;top:0}:host([data-position$="-left"]) .__P__-fab[data-leaving]{right:auto;left:0}@keyframes __P__-fab-out{0%{opacity:1;transform:none}to{opacity:0;transform:scale(.85)}}.__P__-fab[data-variant=circle]{width:var(--__P__-fab-size);height:var(--__P__-fab-size);border-radius:999px}.__P__-fab[data-variant=circle] .__P__-fab-label{display:none}.__P__-fab[data-variant=pill]{height:var(--__P__-fab-size);padding:0 18px 0 16px;border-radius:999px}.__P__-fab[data-variant=bar]{height:var(--__P__-fab-size);padding:0 22px;border-radius:var(--__P__-radius)}.__P__-fab[data-variant=minimal]{height:var(--__P__-fab-size);padding:0 var(--__P__-space-4);border-radius:999px;background:transparent;color:var(--__P__-accent);box-shadow:none;border:1px solid currentColor}.__P__-fab[data-variant=minimal]:hover{background:color-mix(in srgb,var(--__P__-accent) 12%,transparent)}.__P__-callout{--__P__-callout-fab-h: var(--__P__-fab-size, 56px);--__P__-callout-gap: clamp(12px, calc(var(--__P__-callout-fab-h) * .25), 22px);--__P__-callout-nudge-direction: -1;position:absolute;display:inline-flex;align-items:center;gap:var(--__P__-space-2);padding:10px 14px;background:var(--__P__-fg);color:var(--__P__-bg);border-radius:999px;font-size:var(--__P__-text-sm);font-weight:600;line-height:1.2;box-shadow:0 10px 30px -8px #00000059;pointer-events:auto;animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease);z-index:1;max-width:240px;white-space:nowrap}.__P__-callout[data-position=left]{right:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%)}.__P__-callout[data-position=right]{left:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%);--__P__-callout-nudge-direction: 1}.__P__-callout[data-position=top]{bottom:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-position=bottom]{top:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}:host([data-position$="-left"]) .__P__-callout[data-position=top],:host([data-position$="-left"]) .__P__-callout[data-position=bottom]{right:auto;left:0}.__P__-callout[data-shape=bubble]{border-radius:var(--__P__-radius-md);white-space:normal;width:max-content;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-shape=callout]{padding:12px 18px;font-size:calc(14px * var(--__P__-text-scale));background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-callout:after{content:"";position:absolute;width:12px;height:12px;background:inherit;border-radius:2px;transform:rotate(45deg)}.__P__-callout[data-position=left]:after{right:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=right]:after{left:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=top]:after{bottom:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-position=bottom]:after{top:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}:host([data-position$="-left"]) .__P__-callout[data-position=top]:after,:host([data-position$="-left"]) .__P__-callout[data-position=bottom]:after{right:auto;left:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-animated]{animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease),__P__-callout-nudge 1.6s var(--__P__-ease-in-out) var(--__P__-dur-slow) infinite}@keyframes __P__-callout-in{0%{opacity:0}to{opacity:1}}@keyframes __P__-callout-nudge{0%,to{margin-left:0;margin-right:0}50%{margin-left:calc(6px * var(--__P__-callout-nudge-direction));margin-right:calc(-6px * var(--__P__-callout-nudge-direction))}}@media(prefers-reduced-motion:reduce){.__P__-callout[data-animated]{animation:__P__-callout-in 1ms var(--__P__-ease)}.__P__-icon-btn[data-recording=true],.__P__-typing span{animation:none}}.__P__-callout-close{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:999px;color:inherit;opacity:.7;cursor:pointer}.__P__-callout-close:hover{opacity:1;background:color-mix(in srgb,currentColor 15%,transparent)}.__P__-callout-close:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-callout-close svg{width:12px;height:12px}.__P__-panel{width:var(--__P__-panel-w);height:var(--__P__-panel-h);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);background:var(--__P__-bg);color:var(--__P__-fg);border-radius:var(--__P__-radius-lg);box-shadow:var(--__P__-shadow-panel);display:flex;flex-direction:column;overflow:hidden;transform-origin:bottom right;animation:__P__-panel-in var(--__P__-dur-slow) var(--__P__-ease);border:1px solid var(--__P__-border)}@media(prefers-reduced-motion:no-preference){.__P__-panel{transition:width var(--__P__-dur-base) var(--__P__-ease),height var(--__P__-dur-base) var(--__P__-ease),max-width var(--__P__-dur-base) var(--__P__-ease),max-height var(--__P__-dur-base) var(--__P__-ease)}.__P__-panel[data-resizing]{transition:none}}:host([data-mode="open"]) .__P__-panel{width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));min-width:var(--__P__-resize-min-w, auto);min-height:var(--__P__-resize-min-h, auto);max-width:var(--__P__-resize-max-w, calc(100vw - 32px) );max-height:var(--__P__-resize-max-h, calc(100dvh - 32px) )}@keyframes __P__-panel-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}:host([data-mode="expanded"]) .__P__-panel{width:var(--__P__-expanded-w, 640px);height:var(--__P__-expanded-h, 820px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px)}:host([data-mode="fullscreen"]){z-index:var(--__P__-z-panel)!important}:host([data-mode="fullscreen"]) .__P__-anchor{inset:0;padding:0;justify-content:flex-end;align-items:flex-end}:host([data-mode="fullscreen"][data-position*="top"]) .__P__-anchor{justify-content:flex-start}:host([data-mode="fullscreen"][data-position*="left"]) .__P__-anchor{align-items:flex-start}:host([data-mode="fullscreen"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}:host([data-mode="fullscreen"]) .__P__-fab{display:none}@media(max-width:640px){:host([data-mode="open"]) .__P__-anchor,:host([data-mode="expanded"]) .__P__-anchor{inset:0;align-items:stretch;padding:0}:host([data-mode="open"]) .__P__-panel,:host([data-mode="expanded"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}}:host([data-mode="inline"]) .__P__-anchor,:host([data-mode="standalone"]) .__P__-anchor{position:static;inset:auto;padding:0;align-items:stretch;width:100%;height:100%;min-height:0}:host([data-mode="inline"]) .__P__-panel,:host([data-mode="standalone"]) .__P__-panel{width:100%;height:100%;min-width:0;min-height:0;max-width:none;max-height:none;animation:none}:host([data-mode="inline"]) .__P__-fab,:host([data-mode="standalone"]) .__P__-fab{display:none}:host([data-mode="inline"]){min-height:320px}:host([data-mode="inline"]) .__P__-panel{border-radius:var(--__P__-radius)}:host([data-mode="standalone"]) .__P__-panel{border-radius:0;border:0;box-shadow:none}:host([data-mode="modal"]){position:fixed!important;inset:0!important;z-index:var(--__P__-z-panel)!important;display:block!important;width:100vw;height:100dvh;background:var(--__P__-modal-backdrop, var(--__P__-backdrop));animation:__P__-backdrop-in var(--__P__-dur-base) var(--__P__-ease) both;--__P__-panel-w: min(960px, 92vw);--__P__-panel-h: min(720px, 88dvh)}:host([data-mode="modal"]) .__P__-anchor{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--__P__-space-6);pointer-events:none}:host([data-mode="modal"]) .__P__-panel{pointer-events:auto;width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));max-width:calc(100vw - 48px);max-height:calc(100dvh - 48px);min-width:0;min-height:0;border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-panel);animation:__P__-modal-in var(--__P__-dur-base) var(--__P__-ease);translate:var(--__P__-modal-dx, 0px) var(--__P__-modal-dy, 0px)}:host([data-mode="modal"]) .__P__-header,:host([data-mode="modal"]) .__P__-back-header,:host([data-mode="modal"]) .__P__-home-hero{cursor:grab;touch-action:none}:host([data-mode="modal"]) .__P__-panel[data-dragging]{cursor:grabbing;user-select:none}:host([data-mode="modal"]) .__P__-panel[data-dragging] *{cursor:grabbing}:host([data-mode="modal"]) .__P__-fab{display:none}@keyframes __P__-backdrop-in{0%{background:#0000}to{background:var(--__P__-modal-backdrop, var(--__P__-backdrop))}}@keyframes __P__-modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}:host([data-mode="drawer"]){--__P__-panel-w: min(440px, calc(100vw - 32px) );--__P__-panel-h: 100dvh}:host([data-mode="drawer"]) .__P__-anchor{position:fixed;--__P__-inset-x: var(--__P__-panel-inset, 12px);--__P__-inset-y: var(--__P__-panel-inset, 3dvh);top:var(--__P__-inset-y);bottom:auto;right:var(--__P__-inset-x);left:auto;width:min(var(--__P__-widget-w, var(--__P__-panel-w)),calc(100vw - var(--__P__-inset-x) * 2));height:min(var(--__P__-widget-h, var(--__P__-panel-h)),calc(100dvh - var(--__P__-inset-y) * 2));padding:0;display:block;pointer-events:auto}:host([data-mode="drawer"][data-position$="-left"]) .__P__-anchor{right:auto;left:var(--__P__-inset-x)}:host([data-mode="drawer"][data-position^="bottom-"]) .__P__-anchor{top:auto;bottom:var(--__P__-inset-y)}:host([data-mode="drawer"]) .__P__-panel{width:100%;height:100%;max-width:none;max-height:none;min-width:0;min-height:0;border-radius:var(--__P__-radius, 12px);border:1px solid var(--__P__-border);box-shadow:-8px 16px 32px -12px #00000038;animation:__P__-drawer-in var(--__P__-dur-base) var(--__P__-ease)}:host([data-mode="drawer"][data-position$="-left"]) .__P__-panel{box-shadow:8px 16px 32px -12px #00000038;animation:__P__-drawer-in-left var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab[data-edge-tab]{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-2);position:fixed;top:50%;height:140px;width:auto;min-width:0;padding:10px 8px;writing-mode:vertical-rl;text-orientation:mixed;transform:translateY(-50%);transform-origin:center;animation:__P__-edge-tab-in var(--__P__-dur-base) var(--__P__-ease) both}.__P__-fab[data-edge-tab] svg{writing-mode:horizontal-tb}.__P__-fab[data-edge-tab]:hover{transform:translateY(-50%) scale(1.03)}.__P__-fab[data-edge-tab]:active{transform:translateY(-50%) scale(.97)}:host([data-position$="-right"]) .__P__-fab[data-edge-tab]{right:0;left:auto;border-radius:12px 0 0 12px;box-shadow:-6px 0 18px -8px #0000004d}:host([data-position$="-left"]) .__P__-fab[data-edge-tab]{left:0;right:auto;border-radius:0 12px 12px 0;box-shadow:6px 0 18px -8px #0000004d}.__P__-fab[data-edge-tab][data-leaving]{position:fixed;top:50%;bottom:auto;animation:__P__-edge-tab-out var(--__P__-dur-quick) var(--__P__-ease) forwards}@keyframes __P__-edge-tab-in{0%{opacity:0;transform:translateY(-50%) scale(.9)}to{opacity:1;transform:translateY(-50%) scale(1)}}@keyframes __P__-edge-tab-out{0%{opacity:1;transform:translateY(-50%) scale(1)}to{opacity:0;transform:translateY(-50%) scale(.85)}}@keyframes __P__-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes __P__-drawer-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@media(prefers-reduced-motion:reduce){:host([data-mode="drawer"]) .__P__-panel,.__P__-fab[data-edge-tab]{animation:none}}.__P__-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);background:var(--__P__-bg)}.__P__-header h1{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;flex:1;letter-spacing:-.01em}.__P__-header-actions{margin-inline-start:auto;display:flex;align-items:center;gap:var(--__P__-space-1);flex-shrink:0}.__P__-agent{flex:1;display:inline-flex;align-items:center;gap:10px;min-width:0}.__P__-agent-avatar{position:relative;width:32px;height:32px;border-radius:999px;background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--__P__-text-xs);overflow:hidden;flex-shrink:0}.__P__-agent-avatar img{width:100%;height:100%;object-fit:cover}.__P__-agent-avatar:after{content:"";position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border-radius:999px;border:2px solid var(--__P__-bg);background:var(--__P__-neutral)}.__P__-agent-avatar[data-status=online]:after{background:var(--__P__-success)}.__P__-agent-avatar[data-status=away]:after{background:var(--__P__-warning)}.__P__-agent-avatar[data-status=offline]:after{background:var(--__P__-neutral)}.__P__-agent-meta{display:flex;flex-direction:column;line-height:1.15;min-width:0}.__P__-agent-meta strong{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-agent-meta span{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-suggestions{display:flex;flex-wrap:nowrap;gap:var(--__P__-space-2);padding:6px 14px 10px;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scroll-snap-type:x proximity;scrollbar-width:none;-ms-overflow-style:none;min-width:0}.__P__-suggestions::-webkit-scrollbar{display:none}.__P__-suggestions:before,.__P__-suggestions:after{content:"";flex:1 1 0;min-width:0}.__P__-suggestion{flex:0 0 auto;scroll-snap-align:center;padding:7px 14px;border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg);font-size:var(--__P__-text-sm);font-weight:500;white-space:nowrap;transition:background var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-suggestion:hover{border-color:var(--__P__-accent);color:var(--__P__-accent);transform:translateY(-1px)}.__P__-suggestion:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px;border-color:var(--__P__-accent)}.__P__-suggestion:active{transform:translateY(0)}.__P__-icon-btn{width:32px;height:32px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);transition:background var(--__P__-dur-quick) var(--__P__-ease),color var(--__P__-dur-quick) var(--__P__-ease)}.__P__-icon-btn:hover{background:var(--__P__-bg-elevated);color:var(--__P__-fg)}.__P__-icon-btn:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-icon-btn:active{background:var(--__P__-border)}.__P__-icon-btn:disabled{opacity:.45;cursor:not-allowed}.__P__-icon-btn:before{content:"";position:absolute;inset:-6px}.__P__-icon-btn{position:relative}.__P__-icon-btn svg{width:18px;height:18px}.__P__-icon-btn[data-recording=true]{color:var(--__P__-accent);background:color-mix(in srgb,var(--__P__-accent) 12%,transparent);animation:__P__-pulse 1.2s var(--__P__-ease) infinite}@keyframes __P__-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--__P__-accent) 40%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--__P__-accent) 0%,transparent)}}.__P__-list,.__P__-history,.__P__-module-scroll,.__P__-home-scroll,.__P__-help-list,.__P__-tool-args,.__P__-sidebar-conversations{scrollbar-width:thin;scrollbar-color:var(--__P__-border-strong) transparent;overscroll-behavior:contain;scrollbar-gutter:stable}.__P__-list::-webkit-scrollbar,.__P__-history::-webkit-scrollbar,.__P__-module-scroll::-webkit-scrollbar,.__P__-home-scroll::-webkit-scrollbar,.__P__-help-list::-webkit-scrollbar,.__P__-tool-args::-webkit-scrollbar,.__P__-sidebar-conversations::-webkit-scrollbar{width:8px}.__P__-list::-webkit-scrollbar-thumb,.__P__-history::-webkit-scrollbar-thumb,.__P__-module-scroll::-webkit-scrollbar-thumb,.__P__-home-scroll::-webkit-scrollbar-thumb,.__P__-help-list::-webkit-scrollbar-thumb,.__P__-tool-args::-webkit-scrollbar-thumb,.__P__-sidebar-conversations::-webkit-scrollbar-thumb{background:var(--__P__-border-strong);border-radius:8px}.__P__-list-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.__P__-jump{position:absolute;inset-inline-end:14px;bottom:14px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:999px;border:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);color:var(--__P__-fg);box-shadow:var(--__P__-shadow-panel);cursor:pointer;opacity:.85;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease);animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-jump:hover{opacity:1}.__P__-jump:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;opacity:1}.__P__-jump:active{transform:translateY(1px)}.__P__-jump svg{width:18px;height:18px}.__P__-list{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-4);padding-bottom:var(--__P__-space-8);display:flex;flex-direction:column;gap:14px}.__P__-date-divider{position:sticky;top:var(--__P__-space-2);z-index:2;display:flex;justify-content:center;align-items:flex-start;height:0;margin:0;pointer-events:none}.__P__-date-pill{padding:3px 10px;border-radius:999px;font-size:calc(11px * var(--__P__-text-scale));font-weight:600;color:var(--__P__-fg-muted);background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);box-shadow:var(--__P__-shadow-card);opacity:0;pointer-events:none;transition:opacity var(--__P__-dur-base) var(--__P__-ease)}.__P__-list[data-scrolling=true] .__P__-date-pill{opacity:1;pointer-events:auto}@media(prefers-reduced-motion:reduce){.__P__-date-pill{transition:none}}.__P__-bubble-row{display:flex}.__P__-bubble-row[data-role=user]{justify-content:flex-end}.__P__-bubble-row[data-role=assistant]{justify-content:flex-start}.__P__-bubble{max-width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);line-height:1.6;font-size:calc(14px * var(--__P__-text-scale));word-wrap:break-word;overflow-wrap:anywhere;box-shadow:0 1px 2px #0000000a,0 1px 8px -4px #0000000f;animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-bubble ::selection{background:color-mix(in srgb,var(--__P__-accent) 30%,transparent)}.__P__-bubble-row[data-role=user] .__P__-bubble ::selection{background:#fff6;color:var(--__P__-bubble-user-text)}@keyframes __P__-bubble-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-bubble-row[data-role=user] .__P__-bubble{background:var(--__P__-bubble-user);color:var(--__P__-bubble-user-text);border-end-end-radius:5px}.__P__-bubble-row[data-role=assistant] .__P__-bubble{background:var(--__P__-bubble-assistant);color:var(--__P__-bubble-assistant-text);border-end-start-radius:5px}.__P__-bubble-col{display:flex;flex-direction:column;max-width:85%;min-width:0}.__P__-bubble-row[data-role=user] .__P__-bubble-col{align-items:flex-end}.__P__-bubble-row[data-role=assistant] .__P__-bubble-col{align-items:flex-start}.__P__-bubble-time{margin-top:3px;padding:0 4px;font-size:calc(11px * var(--__P__-text-scale));line-height:1;color:var(--__P__-fg-muted);user-select:none}.__P__-md>*:first-child{margin-top:0}.__P__-md>*:last-child{margin-bottom:0}.__P__-md p{margin:10px 0}.__P__-md h1,.__P__-md h2,.__P__-md h3,.__P__-md h4,.__P__-md h5,.__P__-md h6{margin:18px 0 8px;line-height:1.3;letter-spacing:-.01em;font-weight:700}.__P__-md h1{font-size:1.4em}.__P__-md h2{font-size:1.22em}.__P__-md h3{font-size:1.08em}.__P__-md h4,.__P__-md h5,.__P__-md h6{font-size:1em}.__P__-md>h1:first-child,.__P__-md>h2:first-child,.__P__-md>h3:first-child,.__P__-md>h4:first-child,.__P__-md>h5:first-child,.__P__-md>h6:first-child{margin-top:0}.__P__-md ul,.__P__-md ol{padding-inline-start:1.5em;margin:10px 0}.__P__-md ul{list-style:disc}.__P__-md ol{list-style:decimal}.__P__-md li{margin:6px 0;padding-inline-start:2px}.__P__-md li::marker{color:var(--__P__-fg-muted)}.__P__-md li>p{margin:6px 0}.__P__-md li>ul,.__P__-md li>ol{margin:6px 0}.__P__-md strong,.__P__-md b{font-weight:650;letter-spacing:-.005em}.__P__-md em,.__P__-md i{font-style:italic}.__P__-md code{font-family:var(--__P__-font-mono);font-size:.86em;padding:1px 6px;border-radius:5px;background:color-mix(in srgb,var(--__P__-accent) 10%,transparent);color:var(--__P__-fg);border:1px solid color-mix(in srgb,var(--__P__-accent) 16%,transparent)}.__P__-md pre{font-family:var(--__P__-font-mono);font-size:calc(12.5px * var(--__P__-text-scale));padding:12px 14px;border-radius:var(--__P__-radius-sm);background:#7f7f7f1f;overflow-x:auto;margin:var(--__P__-space-3) 0;line-height:1.5}.__P__-md pre code{padding:0;background:none}.__P__-md a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.__P__-md a:hover{text-decoration-thickness:2px}.__P__-md blockquote{margin:14px 0;padding:6px 14px;border-inline-start:3px solid color-mix(in srgb,var(--__P__-accent) 50%,transparent);background:color-mix(in srgb,var(--__P__-accent) 5%,transparent);border-start-end-radius:var(--__P__-radius-sm);border-end-end-radius:var(--__P__-radius-sm);color:var(--__P__-fg-muted)}.__P__-md blockquote>:first-child{margin-top:0}.__P__-md blockquote>:last-child{margin-bottom:0}.__P__-md hr{border:0;height:1px;background:color-mix(in srgb,currentColor 18%,transparent);margin:var(--__P__-space-4) 0}.__P__-md table{border-collapse:collapse;margin:var(--__P__-space-3) 0;font-size:.95em;display:block;overflow-x:auto;max-width:100%;font-variant-numeric:tabular-nums}.__P__-md th,.__P__-md td{padding:6px 10px;border-bottom:1px solid color-mix(in srgb,currentColor 12%,transparent);text-align:start}.__P__-md th{font-weight:700;background:color-mix(in srgb,currentColor 6%,transparent)}.__P__-md h1+ul,.__P__-md h1+ol,.__P__-md h2+ul,.__P__-md h2+ol,.__P__-md h3+ul,.__P__-md h3+ol,.__P__-md h4+ul,.__P__-md h4+ol{margin-top:var(--__P__-space-1)}.__P__-loading{display:inline-flex;align-items:center;gap:var(--__P__-space-2);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-loading-spinner{width:14px;height:14px;border-radius:999px;border:2px solid currentColor;border-top-color:transparent;animation:__P__-spin .8s linear infinite}@keyframes __P__-spin{to{transform:rotate(1turn)}}.__P__-typing{display:inline-flex;gap:var(--__P__-space-1);padding:var(--__P__-space-1) 0}.__P__-typing span{width:5px;height:5px;border-radius:999px;background:currentColor;opacity:.4;animation:__P__-blink 1.2s var(--__P__-ease) infinite}.__P__-typing span:nth-child(2){animation-delay:.2s}.__P__-typing span:nth-child(3){animation-delay:.4s}@keyframes __P__-blink{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.__P__-reasoning{margin:var(--__P__-space-1) 0 var(--__P__-space-2);padding-inline-start:var(--__P__-space-3);border-inline-start:2px solid var(--__P__-border-strong)}.__P__-reasoning-summary{display:inline-flex;align-items:center;gap:var(--__P__-space-1);cursor:pointer;list-style:none;user-select:none;color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-reasoning-summary:hover{color:var(--__P__-fg)}.__P__-reasoning-summary:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;border-radius:var(--__P__-radius-sm)}.__P__-reasoning-summary::-webkit-details-marker{display:none}.__P__-reasoning-summary:before{content:"";width:5px;height:5px;border-inline-end:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);opacity:.7;transition:transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-reasoning[open] .__P__-reasoning-summary:before{transform:rotate(45deg)}.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:__P__-reasoning-pulse 1.4s var(--__P__-ease) infinite}@keyframes __P__-reasoning-pulse{0%,to{opacity:.5}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:none}}.__P__-reasoning-body{margin-top:var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-reasoning-body>:first-child{margin-top:0}.__P__-reasoning-body>:last-child{margin-bottom:0}.__P__-tool-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2);margin-top:6px;border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs)}.__P__-composer{border-top:1px solid var(--__P__-border);padding:10px 12px;background:var(--__P__-bg);display:flex;flex-direction:column;gap:var(--__P__-space-2)}.__P__-composer-row{display:flex;align-items:flex-end;gap:6px}.__P__-textarea{flex:1;height:40px;max-height:160px;padding:10px 12px;border-radius:var(--__P__-radius);background:var(--__P__-bg-elevated);border:1px solid transparent;font-size:calc(14px * var(--__P__-text-scale));line-height:1.4;transition:height var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),box-shadow var(--__P__-dur-quick) var(--__P__-ease)}.__P__-textarea:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:1px;border-color:var(--__P__-focus)}@media(pointer:coarse){.__P__-textarea,.__P__-home-search-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}.__P__-textarea{height:44px}}.__P__-send{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease),background var(--__P__-dur-quick) var(--__P__-ease)}.__P__-send[data-shape=circle]{border-radius:999px}.__P__-send[data-shape=square]{border-radius:var(--__P__-radius-sm)}.__P__-send[data-shape=pill]{width:auto;padding:0 18px;border-radius:999px}.__P__-send[data-variant=filled]{background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-send[data-variant=outline]{background:transparent;color:var(--__P__-accent);border-color:var(--__P__-accent)}.__P__-send[data-variant=outline]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 10%,transparent)}.__P__-send[data-variant=ghost]{background:transparent;color:var(--__P__-accent)}.__P__-send[data-variant=ghost]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 8%,transparent)}.__P__-send:disabled{opacity:.4;cursor:not-allowed}.__P__-send:not(:disabled):hover{transform:translateY(-1px)}.__P__-send:not(:disabled):active{transform:translateY(0)}.__P__-send:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-send svg{width:18px;height:18px}.__P__-composer-actions{display:flex;gap:var(--__P__-space-1);flex-wrap:wrap}.__P__-attachments{display:flex;flex-wrap:wrap;gap:6px}.__P__-attachment-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-1);border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);font-size:var(--__P__-text-xs);max-width:200px}.__P__-attachment-thumb{width:24px;height:24px;border-radius:999px;object-fit:cover;background:var(--__P__-border)}.__P__-attachment-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-attachment-remove{width:18px;height:18px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted)}.__P__-attachment-remove:hover{background:var(--__P__-border);color:var(--__P__-fg)}.__P__-dropzone{position:absolute;inset:8px;border:2px dashed var(--__P__-accent);border-radius:var(--__P__-radius);background:color-mix(in srgb,var(--__P__-accent) 8%,transparent);display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--__P__-accent);pointer-events:none;z-index:10;animation:__P__-fade-in var(--__P__-dur-quick) var(--__P__-ease)}@keyframes __P__-fade-in{0%{opacity:0}to{opacity:1}}.__P__-error{margin-top:var(--__P__-space-1);padding:8px 10px;border-radius:var(--__P__-radius-sm);background:var(--__P__-danger-bg);color:var(--__P__-danger-text);font-size:var(--__P__-text-sm);display:flex;align-items:center;gap:var(--__P__-space-2)}.__P__-error button{color:inherit;text-decoration:underline;font-size:var(--__P__-text-sm)}.__P__-history{flex:1;overflow-y:auto;padding:var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-3)}.__P__-history-footer{flex:none;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);border-top:1px solid var(--__P__-border);background:var(--__P__-surface)}.__P__-history-new{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);padding:var(--__P__-space-2) var(--__P__-space-3);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-on-accent);cursor:pointer;font-size:var(--__P__-text-sm);font-weight:600;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-history-new svg{width:16px;height:16px}.__P__-history-new:hover{filter:brightness(1.08)}.__P__-history-new:active{transform:translateY(1px)}.__P__-history-new:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-history-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 16px;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));text-align:center}.__P__-history-group{display:flex;flex-direction:column;padding:0 var(--__P__-space-3)}.__P__-history-heading{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted);padding:14px 4px 8px;text-transform:uppercase;letter-spacing:.04em}.__P__-history-card{display:flex;flex-direction:column;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-lg, 14px);overflow:hidden}.__P__-history-item{all:unset;display:flex;align-items:center;gap:var(--__P__-space-3);padding:12px var(--__P__-space-3);cursor:pointer;transition:background var(--__P__-dur-base) var(--__P__-ease)}.__P__-history-item+.__P__-history-item{border-top:1px solid var(--__P__-border)}.__P__-history-item:hover{background:var(--__P__-bg-elevated)}.__P__-history-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-history-avatar{flex:none;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:color-mix(in oklab,var(--__P__-accent) 12%,transparent);color:var(--__P__-accent)}.__P__-history-avatar svg{width:18px;height:18px}.__P__-history-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.__P__-history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-2)}.__P__-history-title{flex:1;min-width:0;font-size:calc(14px * var(--__P__-text-scale));font-weight:500;color:var(--__P__-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-time{flex:none;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-history-preview{flex:1;min-width:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--__P__-accent)}.__P__-history-item[data-unread=true] .__P__-history-title{font-weight:600}.__P__-history-item[data-closed=true] .__P__-history-title{color:var(--__P__-fg-muted)}.__P__-history-item-skeleton{cursor:default;pointer-events:none}.__P__-skeleton{display:block;border-radius:4px;background:linear-gradient(90deg,color-mix(in oklab,var(--__P__-fg) 9%,transparent) 30%,color-mix(in oklab,var(--__P__-fg) 17%,transparent),color-mix(in oklab,var(--__P__-fg) 9%,transparent) 70%);background-size:200% 100%;animation:__P__-skeleton-shimmer 1.8s ease-in-out infinite}.__P__-history-avatar.__P__-skeleton{border-radius:50%}.__P__-skeleton-heading{width:52px;height:8px}.__P__-skeleton-title{width:55%;height:12px}.__P__-skeleton-time{width:34px;height:10px}.__P__-skeleton-preview{width:80%;height:10px}@keyframes __P__-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.__P__-skeleton{animation:none}}.__P__-list-loading{margin:auto;padding:var(--__P__-space-6) var(--__P__-space-4);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);text-align:center}.__P__-readonly-banner{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 12px;margin:0 var(--__P__-space-3) var(--__P__-space-3);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);text-align:center;font-size:var(--__P__-text-sm)}.__P__-readonly-label{line-height:1.4}.__P__-readonly-cta{appearance:none;border:0;cursor:pointer;padding:var(--__P__-space-2) var(--__P__-space-4);border-radius:999px;background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-readonly-cta:hover,.__P__-readonly-cta:focus-visible{filter:brightness(1.1)}.__P__-readonly-cta:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}.__P__-composer-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:10px 16px;margin:0 var(--__P__-space-3);border-top:1px solid var(--__P__-border);text-align:center;font-size:calc(11px * var(--__P__-text-scale));line-height:1.4;color:var(--__P__-fg-muted)}.__P__-disclaimer{max-width:320px;margin:0 auto;opacity:.9;letter-spacing:.01em}.__P__-poweredby{display:inline-flex;align-items:center;justify-content:center;gap:6px;color:inherit;text-decoration:none;opacity:.7;transition:opacity var(--__P__-dur-base) var(--__P__-ease);font-size:calc(11px * var(--__P__-text-scale));letter-spacing:.02em}.__P__-poweredby:hover{opacity:1}.__P__-poweredby-logo{height:12px;width:auto;display:inline-block;vertical-align:middle}.__P__-poweredby-bar{flex:none;display:flex;align-items:center;justify-content:center;padding:6px 16px;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated)}.__P__-menu-wrap{position:relative;display:inline-flex}.__P__-menu{position:absolute;top:100%;inset-inline-end:0;margin-top:6px;min-width:200px;padding:6px;background:var(--__P__-bg);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);box-shadow:var(--__P__-shadow-panel);z-index:10;display:flex;flex-direction:column;gap:2px;animation:__P__-menu-in var(--__P__-dur-base) var(--__P__-ease)}@media(prefers-reduced-motion:reduce){.__P__-menu{animation:none}}@keyframes __P__-menu-in{0%{opacity:0;transform:translateY(-4px) scale(.98);transform-origin:top right}to{opacity:1;transform:none}}.__P__-menu-item{all:unset;display:flex;align-items:center;gap:10px;padding:8px 10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);border-radius:var(--__P__-radius-sm);cursor:pointer;user-select:none}.__P__-menu-item:hover{background:var(--__P__-bg-elevated)}.__P__-menu-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-menu-item[disabled]{opacity:.45;cursor:not-allowed}.__P__-menu-icon{display:inline-flex;width:16px;height:16px;color:var(--__P__-fg-muted)}.__P__-menu-icon svg{width:16px;height:16px}.__P__-menu-label{flex:1}.__P__-menu-check{display:inline-flex;color:var(--__P__-accent)}.__P__-menu-check svg{width:14px;height:14px}.__P__-menu-item-segmented{cursor:default}.__P__-menu-item-segmented:hover{background:transparent}.__P__-segmented{display:inline-flex;gap:2px;padding:2px;background:var(--__P__-bg-elevated);border-radius:var(--__P__-radius-sm)}.__P__-segment{all:unset;min-width:26px;padding:3px 8px;font-size:var(--__P__-text-xs);font-weight:600;letter-spacing:.02em;text-align:center;color:var(--__P__-fg-muted);border-radius:calc(var(--__P__-radius-sm) - 2px);cursor:pointer;transition:color .12s ease,background .12s ease}.__P__-segment:hover{color:var(--__P__-fg)}.__P__-segment[data-on=true]{background:var(--__P__-bg);color:var(--__P__-accent);box-shadow:var(--__P__-shadow-card)}.__P__-segment:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-resize-grip{position:absolute;width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);opacity:.45;transition:opacity var(--__P__-dur-base) var(--__P__-ease);z-index:2;touch-action:none;user-select:none}.__P__-resize-grip:hover,.__P__-resize-grip:focus-visible{opacity:1}.__P__-resize-grip svg{width:10px;height:10px}.__P__-resize-grip--bottom-left{bottom:2px;left:2px;cursor:nesw-resize;transform:scaleX(-1)}.__P__-resize-grip--bottom-right{bottom:2px;right:2px;cursor:nwse-resize}.__P__-resize-grip--top-left{top:2px;left:2px;cursor:nwse-resize;transform:rotate(180deg)}.__P__-resize-grip--top-right{top:2px;right:2px;cursor:nesw-resize;transform:scaleY(-1)}:host(:not([data-mode="open"])) .__P__-resize-grip{display:none}.__P__-messenger{display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-body,.__P__-messenger-pane{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-pane[hidden]{display:none}@keyframes __P__-view-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-module{display:flex;flex-direction:column;height:100%;min-height:0}@media(prefers-reduced-motion:no-preference){.__P__-module,.__P__-history{animation:__P__-view-in .18s var(--__P__-ease-out)}}.__P__-module-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-3);display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-home{container-type:inline-size;background:radial-gradient(125% 65% at 88% 0%,color-mix(in srgb,#fff 16%,transparent),transparent 55%),linear-gradient(180deg,var(--__P__-accent) 0%,var(--__P__-accent) 22%,color-mix(in srgb,var(--__P__-accent) 28%,var(--__P__-surface)) 44%,var(--__P__-surface) 70%);border-radius:var(--__P__-radius-lg) var(--__P__-radius-lg) 0 0}.__P__-home-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;background:transparent}.__P__-home-cards{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:4px 14px 16px}.__P__-module-pad{padding:var(--__P__-space-3) var(--__P__-space-3) 0}.__P__-module-empty{display:flex;flex-direction:column;align-items:center;gap:var(--__P__-space-3);padding:var(--__P__-space-8) var(--__P__-space-4);text-align:center;color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-module-retry{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border-strong);border-radius:var(--__P__-radius-sm);color:var(--__P__-fg);font-weight:600;cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-module-retry:hover{background:var(--__P__-hover);border-color:var(--__P__-accent)}.__P__-module-retry:active{background:var(--__P__-border)}.__P__-module-retry:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-help-list{flex:1;min-height:0;overflow-y:auto;padding-bottom:var(--__P__-space-3)}.__P__-help-group{display:flex;flex-direction:column}.__P__-help-section-title{position:sticky;top:0;z-index:1;margin:0;padding:var(--__P__-space-3) var(--__P__-space-5) var(--__P__-space-2);font-size:var(--__P__-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--__P__-fg-muted);background:var(--__P__-bg)}.__P__-help-card{margin:0 var(--__P__-space-3) var(--__P__-space-3);background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden}.__P__-help-card .__P__-list-row{border-bottom:0;border-radius:0}.__P__-help-card .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-module-cta{padding:var(--__P__-space-3);border-top:1px solid var(--__P__-border)}.__P__-tabbar{display:flex;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);flex-shrink:0}.__P__-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-1);min-height:48px;padding:var(--__P__-space-2) var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600;transition:color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-tab:hover{color:var(--__P__-fg)}.__P__-tab[aria-selected=true]{color:var(--__P__-accent)}.__P__-tab:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-tab:active{background:var(--__P__-hover)}.__P__-tab-icon{position:relative;display:inline-flex}.__P__-tab-icon svg{width:22px;height:22px}.__P__-tab-badge{position:absolute;top:-4px;left:calc(50% + 6px);min-width:16px;height:16px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--__P__-accent);color:var(--__P__-on-accent);font-size:calc(10px * var(--__P__-text-scale));font-weight:600;line-height:1}.__P__-home-hero{flex-shrink:0;padding:var(--__P__-space-5) var(--__P__-space-5) var(--__P__-space-3);color:var(--__P__-on-accent);--__P__-focus: var(--__P__-on-accent)}.__P__-home-hero-top{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-3);min-height:32px}.__P__-home-brand{font-size:clamp(calc(12px * var(--__P__-text-scale)),calc(3.2cqi * var(--__P__-text-scale)),calc(14px * var(--__P__-text-scale)));font-weight:600;letter-spacing:.01em;color:color-mix(in srgb,#fff 82%,transparent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.__P__-home-brand-spacer{flex:1}.__P__-home-hero-actions{display:flex;align-items:center;gap:var(--__P__-space-2);flex-shrink:0}.__P__-home-hero-actions .__P__-icon-btn{color:#fff}.__P__-home-hero-actions .__P__-icon-btn:hover{background:color-mix(in srgb,#fff 18%,transparent);color:#fff}.__P__-home-hero-actions .__P__-icon-btn:active{background:color-mix(in srgb,#fff 26%,transparent)}.__P__-home-greeting{margin:28px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(19px * var(--__P__-text-scale)),calc(5.5cqi * var(--__P__-text-scale)),var(--__P__-text-2xl));font-weight:800;line-height:1.18;letter-spacing:-.01em;overflow-wrap:anywhere}.__P__-home-lead{margin:10px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(15px * var(--__P__-text-scale)),calc(4.2cqi * var(--__P__-text-scale)),var(--__P__-text-xl));font-weight:600;line-height:1.25;letter-spacing:-.005em;color:color-mix(in srgb,var(--__P__-on-accent) 78%,transparent);overflow-wrap:anywhere}.__P__-home-avatars{display:flex}.__P__-home-avatar{width:30px;height:30px;border-radius:999px;overflow:hidden;margin-inline-start:-10px;border:2px solid color-mix(in srgb,#fff 92%,transparent);box-shadow:0 1px 3px #0000002e;background:var(--__P__-surface);display:inline-flex;align-items:center;justify-content:center;font-size:var(--__P__-text-xs);font-weight:700;color:var(--__P__-fg)}.__P__-home-avatar:first-child{margin-inline-start:0}.__P__-home-avatar img{width:100%;height:100%;object-fit:cover}.__P__-home-content{background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-card);overflow:hidden}.__P__-home-content-title{padding:var(--__P__-space-4) var(--__P__-space-4) var(--__P__-space-3);font-size:var(--__P__-text-sm);font-weight:700}.__P__-home-content-list{display:flex;flex-direction:column;padding:0 var(--__P__-space-2) var(--__P__-space-2)}.__P__-home-content-list .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-home-card{display:block;width:100%;text-align:start;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);padding:var(--__P__-space-4);box-shadow:var(--__P__-shadow-card)}.__P__-home-card[data-interactive=true]{cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-home-card[data-interactive=true]:hover{background:var(--__P__-bg-elevated)}.__P__-home-card[data-interactive=true]:active{transform:translateY(1px)}.__P__-home-card[data-interactive=true]:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-recent-row{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-recent-avatar{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex-shrink:0;border-radius:999px;background:color-mix(in oklch,var(--__P__-accent) 14%,transparent);color:var(--__P__-accent)}.__P__-home-recent-avatar svg{width:20px;height:20px}.__P__-home-recent-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.__P__-home-recent-title{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-recent-preview{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-home-recent-at{color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);flex-shrink:0}.__P__-home-recent-dot{width:8px;height:8px;border-radius:999px;background:var(--__P__-accent);flex-shrink:0}.__P__-home-recent-row[data-unread=true] .__P__-home-recent-title{font-weight:700}.__P__-home-status{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-status-icon svg{width:22px;height:22px;color:var(--__P__-success)}.__P__-home-status[data-level=degraded] .__P__-home-status-icon svg{color:var(--__P__-warning)}.__P__-home-status[data-level=down] .__P__-home-status-icon svg{color:var(--__P__-danger)}.__P__-home-status-text{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search{display:flex;align-items:center;gap:var(--__P__-space-2);width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);border:1px solid var(--__P__-border);background:var(--__P__-surface);text-align:start}.__P__-home-search[data-input=true]{background:var(--__P__-bg-elevated)}.__P__-home-search:hover{border-color:var(--__P__-border-strong)}.__P__-home-search:focus-visible,.__P__-home-search:focus-within{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-search-text{flex:1;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search-input{flex:1;border:0;background:transparent;font-size:calc(14px * var(--__P__-text-scale));color:var(--__P__-fg);outline:none}.__P__-home-search-icon svg{width:18px;height:18px;color:var(--__P__-accent)}.__P__-list-row{display:flex;align-items:center;gap:var(--__P__-space-3);width:100%;min-height:44px;text-align:start;padding:var(--__P__-space-3) var(--__P__-space-2);border-radius:var(--__P__-radius-sm)}.__P__-list-row:hover{background:var(--__P__-hover)}.__P__-list-row:active{background:var(--__P__-border)}.__P__-list-row:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-list-row-body{display:flex;flex-direction:column;min-width:0;flex:1}.__P__-list-row-title{font-weight:600;font-size:var(--__P__-text-md);line-height:1.35}.__P__-list-row-sub{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);margin-top:var(--__P__-space-1);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-list-row-chevron svg{width:18px;height:18px;color:var(--__P__-accent);flex-shrink:0}.__P__-back-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);flex-shrink:0}.__P__-back-title{flex:1;text-align:center;font-size:var(--__P__-text-md);font-weight:700;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-back-spacer{width:32px;height:1px}.__P__-content{display:flex;flex-direction:column;gap:14px;width:100%;max-width:68ch;margin:0 auto}.__P__-content-hero{width:100%;border-radius:var(--__P__-radius)}.__P__-content-subtitle{color:var(--__P__-fg-muted);margin:0}.__P__-content-frame{flex:1;min-height:0;width:100%;border:0;background:#fff}.__P__-news-list{display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-news-card{display:block;width:100%;text-align:start;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden;background:var(--__P__-surface)}.__P__-news-card{transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-news-card:hover{background:var(--__P__-bg-elevated)}.__P__-news-card:active{transform:translateY(1px)}.__P__-news-card:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-news-hero{width:100%;display:block}.__P__-news-body{display:flex;flex-direction:column;gap:6px;padding:14px 16px}.__P__-news-title{font-weight:700;font-size:var(--__P__-text-md)}.__P__-news-summary{color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-modules-empty{display:flex;align-items:center;justify-content:center;position:relative}.__P__-modules-empty-close{position:absolute;top:12px;inset-inline-end:12px}.__P__-modules-empty-text{color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-form{display:flex;flex-direction:column;gap:var(--__P__-space-4)}.__P__-field{display:flex;flex-direction:column;gap:6px}.__P__-field-label{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-field-req{color:var(--__P__-danger)}.__P__-field-input{width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);color:var(--__P__-fg);font:inherit;font-size:var(--__P__-text-sm);resize:vertical;transition:border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-field-input:focus-visible{outline:none;border-color:var(--__P__-accent)}.__P__-field[data-invalid=true] .__P__-field-input{border-color:var(--__P__-danger)}.__P__-field-input[type=date],.__P__-field-input[type=time]{appearance:none;-webkit-appearance:none}@media(pointer:coarse){.__P__-field-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}}.__P__-field-hint{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-field-error{font-size:var(--__P__-text-xs);color:var(--__P__-danger)}.__P__-field-choices{display:flex;flex-direction:column;gap:10px;padding-top:2px}.__P__-choice{display:flex;align-items:flex-start;gap:10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);cursor:pointer}.__P__-choice input{margin-top:2px;accent-color:var(--__P__-accent)}.__P__-form-actions{display:flex;justify-content:flex-end;gap:var(--__P__-space-2);margin-top:var(--__P__-space-2)}.__P__-form-submit,.__P__-tool-approve{padding:var(--__P__-space-2) var(--__P__-space-4);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);cursor:pointer;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-submit:hover:not(:disabled),.__P__-tool-approve:hover:not(:disabled){filter:brightness(1.06)}.__P__-form-submit:disabled{opacity:.6;cursor:default}.__P__-form-skip,.__P__-tool-reject{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:transparent;color:var(--__P__-fg-muted);font:inherit;font-size:var(--__P__-text-sm);cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-skip:hover:not(:disabled),.__P__-tool-reject:hover:not(:disabled){background:var(--__P__-bg-elevated)}.__P__-form-gate{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-form-gate-title{margin:0;font-size:var(--__P__-text-base);font-weight:700;color:var(--__P__-fg)}.__P__-form-gate-desc{margin:0 0 var(--__P__-space-1);font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-form-done{display:flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;border:1px dashed var(--__P__-border);border-radius:999px;align-self:center;font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted)}.__P__-form-done svg{width:14px;height:14px;color:var(--__P__-success, #22c55e)}.__P__-form-done[data-outcome=skipped] svg{color:var(--__P__-fg-muted)}.__P__-form-done-fill{border:0;background:none;padding:0 2px;cursor:pointer;font:inherit;font-weight:600;color:var(--__P__-accent)}.__P__-form-done-fill:hover{text-decoration:underline}details.__P__-form-done{display:block;padding:0;border-radius:var(--__P__-radius-md)}details[open].__P__-form-done{width:min(100%,420px);background:var(--__P__-surface)}.__P__-form-done-summary{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;cursor:pointer;list-style:none}.__P__-form-done-summary::-webkit-details-marker{display:none}.__P__-form-done-summary>svg:last-child{color:var(--__P__-fg-muted);transition:transform .15s var(--__P__-ease)}details[open]>.__P__-form-done-summary>svg:last-child{transform:rotate(90deg)}.__P__-form-answers{margin:0;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);display:grid;gap:var(--__P__-space-3);text-align:start}.__P__-form-answer{display:grid;gap:6px}.__P__-form-answer dt{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-form-answer dd{margin:0;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);font-size:var(--__P__-text-sm);font-weight:400;color:var(--__P__-fg);overflow-wrap:anywhere}.__P__-tool-ask-input,.__P__-tool-approval{display:flex;flex-direction:column;gap:var(--__P__-space-2);margin-top:6px;padding:var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-tool-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-badge{padding:2px 8px;border-radius:999px;background:var(--__P__-warning, #f59e0b);color:#1a1206;font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-title{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}.__P__-tool-question{margin:0;font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-tool-desc{margin:0;font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-tool-args{margin:0;padding:var(--__P__-space-2);max-height:160px;overflow:auto;border-radius:var(--__P__-radius-sm);background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);white-space:pre-wrap;word-break:break-word}.__P__-tool-stale-note{margin:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-tool-decided{flex-direction:row;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-decided-label{padding:2px 8px;border-radius:999px;background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-decided-label[data-approved=true]{color:var(--__P__-success, #16a34a);border-color:var(--__P__-success, #16a34a)}.__P__-tool-decided-label[data-approved=false]{color:var(--__P__-danger);border-color:var(--__P__-danger)}.__P__-tool-decided-value{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}:host([dir="rtl"]) .__P__-icon-dir{transform:scaleX(-1)}:host([dir="rtl"]) .__P__-field-input[type=date],:host([dir="rtl"]) .__P__-field-input[type=time]{position:relative;text-align:right;padding-left:34px}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-datetime-edit,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-datetime-edit{text-align:right}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-calendar-picker-indicator,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-calendar-picker-indicator{position:absolute;left:var(--__P__-space-3);margin:0}\n';
1207
+ var panel_default = '.__P__-anchor{color-scheme:var(--__P__-color-scheme, light);right:16px;bottom:16px}.__P__-surface{display:contents}.__P__-surface[hidden]{display:none}:host([data-position="bottom-left"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{right:auto;left:16px}:host([data-position="top-right"]) .__P__-anchor,:host([data-position="top-left"]) .__P__-anchor{bottom:auto;top:16px}.__P__-anchor{position:fixed;display:flex;flex-direction:column;align-items:flex-end;gap:var(--__P__-space-3);pointer-events:none}.__P__-anchor{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=sm]{--__P__-fab-size: 44px}.__P__-anchor[data-launcher-size=md]{--__P__-fab-size: 56px}.__P__-anchor[data-launcher-size=lg]{--__P__-fab-size: 68px}.__P__-anchor>*{pointer-events:auto}.__P__-fab[data-size=sm]{--__P__-fab-size: 44px;font-size:var(--__P__-text-sm)}.__P__-fab[data-size=md]{--__P__-fab-size: 56px;font-size:calc(14px * var(--__P__-text-scale))}.__P__-fab[data-size=lg]{--__P__-fab-size: 68px;font-size:var(--__P__-text-base)}.__P__-fab{display:inline-flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);color:var(--__P__-accent-text);background:var(--__P__-accent);box-shadow:var(--__P__-shadow-fab);font-weight:600;line-height:1;transform-origin:bottom right;animation:__P__-fab-in var(--__P__-dur-base) var(--__P__-ease) both;transition:transform var(--__P__-dur-base) var(--__P__-ease),opacity var(--__P__-dur-base) var(--__P__-ease),box-shadow var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab:hover{transform:translateY(-2px)}.__P__-fab:active{transform:translateY(0)}.__P__-fab:focus-visible{outline:2px solid var(--__P__-on-accent);outline-offset:3px}.__P__-fab svg{width:24px;height:24px;flex-shrink:0}@keyframes __P__-fab-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:none}}.__P__-fab[data-leaving]{position:absolute;right:0;bottom:0;animation:__P__-fab-out var(--__P__-dur-quick) var(--__P__-ease) forwards;pointer-events:none}:host([data-position^="top-"]) .__P__-fab[data-leaving]{bottom:auto;top:0}:host([data-position$="-left"]) .__P__-fab[data-leaving]{right:auto;left:0}@keyframes __P__-fab-out{0%{opacity:1;transform:none}to{opacity:0;transform:scale(.85)}}.__P__-fab[data-variant=circle]{width:var(--__P__-fab-size);height:var(--__P__-fab-size);border-radius:999px}.__P__-fab[data-variant=circle] .__P__-fab-label{display:none}.__P__-fab[data-variant=pill]{height:var(--__P__-fab-size);padding:0 18px 0 16px;border-radius:999px}.__P__-fab[data-variant=bar]{height:var(--__P__-fab-size);padding:0 22px;border-radius:var(--__P__-radius)}.__P__-fab[data-variant=minimal]{height:var(--__P__-fab-size);padding:0 var(--__P__-space-4);border-radius:999px;background:transparent;color:var(--__P__-accent);box-shadow:none;border:1px solid currentColor}.__P__-fab[data-variant=minimal]:hover{background:color-mix(in srgb,var(--__P__-accent) 12%,transparent)}.__P__-callout{--__P__-callout-fab-h: var(--__P__-fab-size, 56px);--__P__-callout-gap: clamp(12px, calc(var(--__P__-callout-fab-h) * .25), 22px);--__P__-callout-nudge-direction: -1;position:absolute;display:inline-flex;align-items:center;gap:var(--__P__-space-2);padding:10px 14px;background:var(--__P__-fg);color:var(--__P__-bg);border-radius:999px;font-size:var(--__P__-text-sm);font-weight:600;line-height:1.2;box-shadow:0 10px 30px -8px #00000059;pointer-events:auto;animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease);z-index:1;max-width:240px;white-space:nowrap}.__P__-callout[data-position=left]{right:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%)}.__P__-callout[data-position=right]{left:calc(100% + var(--__P__-callout-gap));bottom:calc(var(--__P__-callout-fab-h) / 2);transform:translateY(50%);--__P__-callout-nudge-direction: 1}.__P__-callout[data-position=top]{bottom:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-position=bottom]{top:calc(100% + var(--__P__-callout-gap));right:0;max-width:min(280px,calc(100vw - 32px))}:host([data-position$="-left"]) .__P__-callout[data-position=top],:host([data-position$="-left"]) .__P__-callout[data-position=bottom]{right:auto;left:0}.__P__-callout[data-shape=bubble]{border-radius:var(--__P__-radius-md);white-space:normal;width:max-content;max-width:min(280px,calc(100vw - 32px))}.__P__-callout[data-shape=callout]{padding:12px 18px;font-size:calc(14px * var(--__P__-text-scale));background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-callout:after{content:"";position:absolute;width:12px;height:12px;background:inherit;border-radius:2px;transform:rotate(45deg)}.__P__-callout[data-position=left]:after{right:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=right]:after{left:-5px;top:50%;margin-top:-6px}.__P__-callout[data-position=top]:after{bottom:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-position=bottom]:after{top:-5px;right:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}:host([data-position$="-left"]) .__P__-callout[data-position=top]:after,:host([data-position$="-left"]) .__P__-callout[data-position=bottom]:after{right:auto;left:calc(var(--__P__-fab-size, 56px) / 2 - 6px)}.__P__-callout[data-animated]{animation:__P__-callout-in var(--__P__-dur-slow) var(--__P__-ease),__P__-callout-nudge 1.6s var(--__P__-ease-in-out) var(--__P__-dur-slow) infinite}@keyframes __P__-callout-in{0%{opacity:0}to{opacity:1}}@keyframes __P__-callout-nudge{0%,to{margin-left:0;margin-right:0}50%{margin-left:calc(6px * var(--__P__-callout-nudge-direction));margin-right:calc(-6px * var(--__P__-callout-nudge-direction))}}@media(prefers-reduced-motion:reduce){.__P__-callout[data-animated]{animation:__P__-callout-in 1ms var(--__P__-ease)}.__P__-icon-btn[data-recording=true],.__P__-typing span{animation:none}}.__P__-callout-close{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:999px;color:inherit;opacity:.7;cursor:pointer}.__P__-callout-close:hover{opacity:1;background:color-mix(in srgb,currentColor 15%,transparent)}.__P__-callout-close:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-callout-close svg{width:12px;height:12px}.__P__-panel{width:var(--__P__-panel-w);height:var(--__P__-panel-h);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);background:var(--__P__-bg);color:var(--__P__-fg);border-radius:var(--__P__-radius-lg);box-shadow:var(--__P__-shadow-panel);display:flex;flex-direction:column;overflow:hidden;transform-origin:bottom right;animation:__P__-panel-in var(--__P__-dur-slow) var(--__P__-ease);border:1px solid var(--__P__-border)}@media(prefers-reduced-motion:no-preference){.__P__-panel{transition:width var(--__P__-dur-base) var(--__P__-ease),height var(--__P__-dur-base) var(--__P__-ease),max-width var(--__P__-dur-base) var(--__P__-ease),max-height var(--__P__-dur-base) var(--__P__-ease)}.__P__-panel[data-resizing]{transition:none}}:host([data-mode="open"]) .__P__-panel{width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));min-width:var(--__P__-resize-min-w, auto);min-height:var(--__P__-resize-min-h, auto);max-width:var(--__P__-resize-max-w, calc(100vw - 32px) );max-height:var(--__P__-resize-max-h, calc(100dvh - 32px) )}@keyframes __P__-panel-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}:host([data-mode="expanded"]) .__P__-panel{width:var(--__P__-expanded-w, 640px);height:var(--__P__-expanded-h, 820px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px)}:host([data-mode="fullscreen"]){z-index:var(--__P__-z-panel)!important}:host([data-mode="fullscreen"]) .__P__-anchor{inset:0;padding:0;justify-content:flex-end;align-items:flex-end}:host([data-mode="fullscreen"][data-position*="top"]) .__P__-anchor{justify-content:flex-start}:host([data-mode="fullscreen"][data-position*="left"]) .__P__-anchor{align-items:flex-start}:host([data-mode="fullscreen"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}:host([data-mode="fullscreen"]) .__P__-fab{display:none}@media(max-width:640px){:host([data-mode="open"]) .__P__-anchor,:host([data-mode="expanded"]) .__P__-anchor{inset:0;align-items:stretch;padding:0}:host([data-mode="open"]) .__P__-panel,:host([data-mode="expanded"]) .__P__-panel{width:100vw;height:100dvh;max-width:none;max-height:none;border-radius:0;border:0}}:host([data-mode="inline"]) .__P__-anchor,:host([data-mode="standalone"]) .__P__-anchor{position:static;inset:auto;padding:0;align-items:stretch;width:100%;height:100%;min-height:0}:host([data-mode="inline"]) .__P__-panel,:host([data-mode="standalone"]) .__P__-panel{width:100%;height:100%;min-width:0;min-height:0;max-width:none;max-height:none;animation:none}:host([data-mode="inline"]) .__P__-fab,:host([data-mode="standalone"]) .__P__-fab{display:none}:host([data-mode="inline"]){min-height:320px}:host([data-mode="inline"]) .__P__-panel{border-radius:var(--__P__-radius)}:host([data-mode="standalone"]) .__P__-panel{border-radius:0;border:0;box-shadow:none}:host([data-mode="modal"]){position:fixed!important;inset:0!important;z-index:var(--__P__-z-panel)!important;display:block!important;width:100vw;height:100dvh;background:var(--__P__-modal-backdrop, var(--__P__-backdrop));animation:__P__-backdrop-in var(--__P__-dur-base) var(--__P__-ease) both;--__P__-panel-w: min(960px, 92vw);--__P__-panel-h: min(720px, 88dvh)}:host([data-mode="modal"]) .__P__-anchor{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--__P__-space-6);pointer-events:none}:host([data-mode="modal"]) .__P__-panel{pointer-events:auto;width:var(--__P__-widget-w, var(--__P__-panel-w));height:var(--__P__-widget-h, var(--__P__-panel-h));max-width:calc(100vw - 48px);max-height:calc(100dvh - 48px);min-width:0;min-height:0;border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-panel);animation:__P__-modal-in var(--__P__-dur-base) var(--__P__-ease);translate:var(--__P__-modal-dx, 0px) var(--__P__-modal-dy, 0px)}:host([data-mode="modal"]) .__P__-header,:host([data-mode="modal"]) .__P__-back-header,:host([data-mode="modal"]) .__P__-home-hero{cursor:grab;touch-action:none}:host([data-mode="modal"]) .__P__-panel[data-dragging]{cursor:grabbing;user-select:none}:host([data-mode="modal"]) .__P__-panel[data-dragging] *{cursor:grabbing}:host([data-mode="modal"]) .__P__-fab{display:none}@keyframes __P__-backdrop-in{0%{background:#0000}to{background:var(--__P__-modal-backdrop, var(--__P__-backdrop))}}@keyframes __P__-modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}:host([data-mode="drawer"]){--__P__-panel-w: min(440px, calc(100vw - 32px) );--__P__-panel-h: 100dvh}:host([data-mode="drawer"]) .__P__-anchor{position:fixed;--__P__-inset-x: var(--__P__-panel-inset, 12px);--__P__-inset-y: var(--__P__-panel-inset, 3dvh);top:var(--__P__-inset-y);bottom:auto;right:var(--__P__-inset-x);left:auto;width:min(var(--__P__-widget-w, var(--__P__-panel-w)),calc(100vw - var(--__P__-inset-x) * 2));height:min(var(--__P__-widget-h, var(--__P__-panel-h)),calc(100dvh - var(--__P__-inset-y) * 2));padding:0;display:block;pointer-events:auto}:host([data-mode="drawer"][data-position$="-left"]) .__P__-anchor{right:auto;left:var(--__P__-inset-x)}:host([data-mode="drawer"][data-position^="bottom-"]) .__P__-anchor{top:auto;bottom:var(--__P__-inset-y)}:host([data-mode="drawer"]) .__P__-panel{width:100%;height:100%;max-width:none;max-height:none;min-width:0;min-height:0;border-radius:var(--__P__-radius, 12px);border:1px solid var(--__P__-border);box-shadow:-8px 16px 32px -12px #00000038;animation:__P__-drawer-in var(--__P__-dur-base) var(--__P__-ease)}:host([data-mode="drawer"][data-position$="-left"]) .__P__-panel{box-shadow:8px 16px 32px -12px #00000038;animation:__P__-drawer-in-left var(--__P__-dur-base) var(--__P__-ease)}.__P__-fab[data-edge-tab]{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-2);position:fixed;top:50%;height:140px;width:auto;min-width:0;padding:10px 8px;writing-mode:vertical-rl;text-orientation:mixed;transform:translateY(-50%);transform-origin:center;animation:__P__-edge-tab-in var(--__P__-dur-base) var(--__P__-ease) both}.__P__-fab[data-edge-tab] svg{writing-mode:horizontal-tb}.__P__-fab[data-edge-tab]:hover{transform:translateY(-50%) scale(1.03)}.__P__-fab[data-edge-tab]:active{transform:translateY(-50%) scale(.97)}:host([data-position$="-right"]) .__P__-fab[data-edge-tab]{right:0;left:auto;border-radius:12px 0 0 12px;box-shadow:-6px 0 18px -8px #0000004d}:host([data-position$="-left"]) .__P__-fab[data-edge-tab]{left:0;right:auto;border-radius:0 12px 12px 0;box-shadow:6px 0 18px -8px #0000004d}.__P__-fab[data-edge-tab][data-leaving]{position:fixed;top:50%;bottom:auto;animation:__P__-edge-tab-out var(--__P__-dur-quick) var(--__P__-ease) forwards}@keyframes __P__-edge-tab-in{0%{opacity:0;transform:translateY(-50%) scale(.9)}to{opacity:1;transform:translateY(-50%) scale(1)}}@keyframes __P__-edge-tab-out{0%{opacity:1;transform:translateY(-50%) scale(1)}to{opacity:0;transform:translateY(-50%) scale(.85)}}@keyframes __P__-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes __P__-drawer-in-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@media(prefers-reduced-motion:reduce){:host([data-mode="drawer"]) .__P__-panel,.__P__-fab[data-edge-tab]{animation:none}}.__P__-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);background:var(--__P__-bg)}.__P__-header h1{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;flex:1;letter-spacing:-.01em}.__P__-header-actions{margin-inline-start:auto;display:flex;align-items:center;gap:var(--__P__-space-1);flex-shrink:0}.__P__-agent{flex:1;display:inline-flex;align-items:center;gap:10px;min-width:0}.__P__-agent-avatar{position:relative;width:32px;height:32px;border-radius:999px;background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--__P__-text-xs);overflow:hidden;flex-shrink:0}.__P__-agent-avatar img{width:100%;height:100%;object-fit:cover}.__P__-agent-avatar:after{content:"";position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border-radius:999px;border:2px solid var(--__P__-bg);background:var(--__P__-neutral)}.__P__-agent-avatar[data-status=online]:after{background:var(--__P__-success)}.__P__-agent-avatar[data-status=away]:after{background:var(--__P__-warning)}.__P__-agent-avatar[data-status=offline]:after{background:var(--__P__-neutral)}.__P__-agent-meta{display:flex;flex-direction:column;line-height:1.15;min-width:0}.__P__-agent-meta strong{font-size:calc(14px * var(--__P__-text-scale));font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-agent-meta span{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-suggestions{display:flex;flex-wrap:nowrap;gap:var(--__P__-space-2);padding:6px 14px 10px;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scroll-snap-type:x proximity;scrollbar-width:none;-ms-overflow-style:none;min-width:0}.__P__-suggestions::-webkit-scrollbar{display:none}.__P__-suggestions:before,.__P__-suggestions:after{content:"";flex:1 1 0;min-width:0}.__P__-suggestion{flex:0 0 auto;scroll-snap-align:center;padding:7px 14px;border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg);font-size:var(--__P__-text-sm);font-weight:500;white-space:nowrap;transition:background var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-suggestion:hover{border-color:var(--__P__-accent);color:var(--__P__-accent);transform:translateY(-1px)}.__P__-suggestion:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px;border-color:var(--__P__-accent)}.__P__-suggestion:active{transform:translateY(0)}.__P__-icon-btn{width:32px;height:32px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);transition:background var(--__P__-dur-quick) var(--__P__-ease),color var(--__P__-dur-quick) var(--__P__-ease)}.__P__-icon-btn:hover{background:var(--__P__-bg-elevated);color:var(--__P__-fg)}.__P__-icon-btn:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-icon-btn:active{background:var(--__P__-border)}.__P__-icon-btn:disabled{opacity:.45;cursor:not-allowed}.__P__-icon-btn:before{content:"";position:absolute;inset:-6px}.__P__-icon-btn{position:relative}.__P__-icon-btn svg{width:18px;height:18px}.__P__-icon-btn[data-recording=true]{color:var(--__P__-accent);background:color-mix(in srgb,var(--__P__-accent) 12%,transparent);animation:__P__-pulse 1.2s var(--__P__-ease) infinite}@keyframes __P__-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--__P__-accent) 40%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--__P__-accent) 0%,transparent)}}.__P__-list,.__P__-history,.__P__-module-scroll,.__P__-home-scroll,.__P__-help-list,.__P__-tool-args,.__P__-sidebar-conversations{scrollbar-width:thin;scrollbar-color:var(--__P__-border-strong) transparent;overscroll-behavior:contain;scrollbar-gutter:stable}.__P__-list::-webkit-scrollbar,.__P__-history::-webkit-scrollbar,.__P__-module-scroll::-webkit-scrollbar,.__P__-home-scroll::-webkit-scrollbar,.__P__-help-list::-webkit-scrollbar,.__P__-tool-args::-webkit-scrollbar,.__P__-sidebar-conversations::-webkit-scrollbar{width:8px}.__P__-list::-webkit-scrollbar-thumb,.__P__-history::-webkit-scrollbar-thumb,.__P__-module-scroll::-webkit-scrollbar-thumb,.__P__-home-scroll::-webkit-scrollbar-thumb,.__P__-help-list::-webkit-scrollbar-thumb,.__P__-tool-args::-webkit-scrollbar-thumb,.__P__-sidebar-conversations::-webkit-scrollbar-thumb{background:var(--__P__-border-strong);border-radius:8px}.__P__-list-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.__P__-jump{position:absolute;inset-inline-end:14px;bottom:14px;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:999px;border:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);color:var(--__P__-fg);box-shadow:var(--__P__-shadow-panel);cursor:pointer;opacity:.85;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease);animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-jump:hover{opacity:1}.__P__-jump:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;opacity:1}.__P__-jump:active{transform:translateY(1px)}.__P__-jump svg{width:18px;height:18px}.__P__-list{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-4);padding-bottom:var(--__P__-space-8);display:flex;flex-direction:column;gap:14px}.__P__-date-divider{position:sticky;top:var(--__P__-space-2);z-index:2;display:flex;justify-content:center;align-items:flex-start;height:0;margin:0;pointer-events:none}.__P__-date-pill{padding:3px 10px;border-radius:999px;font-size:calc(11px * var(--__P__-text-scale));font-weight:600;color:var(--__P__-fg-muted);background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);box-shadow:var(--__P__-shadow-card);opacity:0;pointer-events:none;transition:opacity var(--__P__-dur-base) var(--__P__-ease)}.__P__-list[data-scrolling=true] .__P__-date-pill{opacity:1;pointer-events:auto}@media(prefers-reduced-motion:reduce){.__P__-date-pill{transition:none}}.__P__-bubble-row{display:flex}.__P__-bubble-row[data-role=user]{justify-content:flex-end}.__P__-bubble-row[data-role=assistant]{justify-content:flex-start}.__P__-bubble{max-width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);line-height:1.6;font-size:calc(14px * var(--__P__-text-scale));word-wrap:break-word;overflow-wrap:anywhere;box-shadow:0 1px 2px #0000000a,0 1px 8px -4px #0000000f;animation:__P__-bubble-in var(--__P__-dur-base) var(--__P__-ease)}.__P__-bubble ::selection{background:color-mix(in srgb,var(--__P__-accent) 30%,transparent)}.__P__-bubble-row[data-role=user] .__P__-bubble ::selection{background:#fff6;color:var(--__P__-bubble-user-text)}@keyframes __P__-bubble-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-bubble-row[data-role=user] .__P__-bubble{background:var(--__P__-bubble-user);color:var(--__P__-bubble-user-text);border-end-end-radius:5px}.__P__-bubble-row[data-role=assistant] .__P__-bubble{background:var(--__P__-bubble-assistant);color:var(--__P__-bubble-assistant-text);border-end-start-radius:5px}.__P__-bubble-col{display:flex;flex-direction:column;max-width:85%;min-width:0}.__P__-bubble-row[data-role=user] .__P__-bubble-col{align-items:flex-end}.__P__-bubble-row[data-role=assistant] .__P__-bubble-col{align-items:flex-start}.__P__-bubble-time{margin-top:3px;padding:0 4px;font-size:calc(11px * var(--__P__-text-scale));line-height:1;color:var(--__P__-fg-muted);user-select:none}.__P__-md>*:first-child{margin-top:0}.__P__-md>*:last-child{margin-bottom:0}.__P__-md p{margin:10px 0}.__P__-md h1,.__P__-md h2,.__P__-md h3,.__P__-md h4,.__P__-md h5,.__P__-md h6{margin:18px 0 8px;line-height:1.3;letter-spacing:-.01em;font-weight:700}.__P__-md h1{font-size:1.4em}.__P__-md h2{font-size:1.22em}.__P__-md h3{font-size:1.08em}.__P__-md h4,.__P__-md h5,.__P__-md h6{font-size:1em}.__P__-md>h1:first-child,.__P__-md>h2:first-child,.__P__-md>h3:first-child,.__P__-md>h4:first-child,.__P__-md>h5:first-child,.__P__-md>h6:first-child{margin-top:0}.__P__-md ul,.__P__-md ol{padding-inline-start:1.5em;margin:10px 0}.__P__-md ul{list-style:disc}.__P__-md ol{list-style:decimal}.__P__-md li{margin:6px 0;padding-inline-start:2px}.__P__-md li::marker{color:var(--__P__-fg-muted)}.__P__-md li>p{margin:6px 0}.__P__-md li>ul,.__P__-md li>ol{margin:6px 0}.__P__-md strong,.__P__-md b{font-weight:650;letter-spacing:-.005em}.__P__-md em,.__P__-md i{font-style:italic}.__P__-md code{font-family:var(--__P__-font-mono);font-size:.86em;padding:1px 6px;border-radius:5px;background:color-mix(in srgb,var(--__P__-accent) 10%,transparent);color:var(--__P__-fg);border:1px solid color-mix(in srgb,var(--__P__-accent) 16%,transparent)}.__P__-md pre{font-family:var(--__P__-font-mono);font-size:calc(12.5px * var(--__P__-text-scale));padding:12px 14px;border-radius:var(--__P__-radius-sm);background:#7f7f7f1f;overflow-x:auto;margin:var(--__P__-space-3) 0;line-height:1.5}.__P__-md pre code{padding:0;background:none}.__P__-md a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.__P__-md a:hover{text-decoration-thickness:2px}.__P__-md blockquote{margin:14px 0;padding:6px 14px;border-inline-start:3px solid color-mix(in srgb,var(--__P__-accent) 50%,transparent);background:color-mix(in srgb,var(--__P__-accent) 5%,transparent);border-start-end-radius:var(--__P__-radius-sm);border-end-end-radius:var(--__P__-radius-sm);color:var(--__P__-fg-muted)}.__P__-md blockquote>:first-child{margin-top:0}.__P__-md blockquote>:last-child{margin-bottom:0}.__P__-md hr{border:0;height:1px;background:color-mix(in srgb,currentColor 18%,transparent);margin:var(--__P__-space-4) 0}.__P__-md table{border-collapse:collapse;margin:var(--__P__-space-3) 0;font-size:.95em;display:block;overflow-x:auto;max-width:100%;font-variant-numeric:tabular-nums}.__P__-md th,.__P__-md td{padding:6px 10px;border-bottom:1px solid color-mix(in srgb,currentColor 12%,transparent);text-align:start}.__P__-md th{font-weight:700;background:color-mix(in srgb,currentColor 6%,transparent)}.__P__-md h1+ul,.__P__-md h1+ol,.__P__-md h2+ul,.__P__-md h2+ol,.__P__-md h3+ul,.__P__-md h3+ol,.__P__-md h4+ul,.__P__-md h4+ol{margin-top:var(--__P__-space-1)}.__P__-loading{display:inline-flex;align-items:center;gap:var(--__P__-space-2);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-loading-spinner{width:14px;height:14px;border-radius:999px;border:2px solid currentColor;border-top-color:transparent;animation:__P__-spin .8s linear infinite}@keyframes __P__-spin{to{transform:rotate(1turn)}}.__P__-typing{display:inline-flex;gap:var(--__P__-space-1);padding:var(--__P__-space-1) 0}.__P__-typing span{width:5px;height:5px;border-radius:999px;background:currentColor;opacity:.4;animation:__P__-blink 1.2s var(--__P__-ease) infinite}.__P__-typing span:nth-child(2){animation-delay:.2s}.__P__-typing span:nth-child(3){animation-delay:.4s}@keyframes __P__-blink{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.__P__-reasoning{margin:var(--__P__-space-1) 0 var(--__P__-space-2);padding-inline-start:var(--__P__-space-3);border-inline-start:2px solid var(--__P__-border-strong)}.__P__-reasoning-summary{display:inline-flex;align-items:center;gap:var(--__P__-space-1);cursor:pointer;list-style:none;user-select:none;color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-reasoning-summary:hover{color:var(--__P__-fg)}.__P__-reasoning-summary:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px;border-radius:var(--__P__-radius-sm)}.__P__-reasoning-summary::-webkit-details-marker{display:none}.__P__-reasoning-summary:before{content:"";width:5px;height:5px;border-inline-end:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);opacity:.7;transition:transform var(--__P__-dur-quick) var(--__P__-ease)}.__P__-reasoning[open] .__P__-reasoning-summary:before{transform:rotate(45deg)}.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:__P__-reasoning-pulse 1.4s var(--__P__-ease) infinite}@keyframes __P__-reasoning-pulse{0%,to{opacity:.5}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.__P__-reasoning[data-active=true] .__P__-reasoning-label{animation:none}}.__P__-reasoning-body{margin-top:var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm)}.__P__-reasoning-body>:first-child{margin-top:0}.__P__-reasoning-body>:last-child{margin-bottom:0}.__P__-tool-call{margin-top:6px;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-sm);background:var(--__P__-bg-elevated);font-size:var(--__P__-text-xs)}.__P__-tool-call-summary{display:flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2);cursor:pointer;list-style:none;color:var(--__P__-fg-muted)}.__P__-tool-call-summary::-webkit-details-marker{display:none}.__P__-tool-call-section{padding:0 var(--__P__-space-2) var(--__P__-space-2)}.__P__-tool-call-label{display:block;margin-bottom:4px;color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);text-transform:uppercase;letter-spacing:.04em}.__P__-tool-call-section[data-error=true] .__P__-tool-args{color:var(--__P__-danger, #c0392b)}.__P__-source{display:inline-flex;align-items:center;gap:6px;max-width:100%;margin-top:6px;margin-inline-end:6px;padding:var(--__P__-space-1) var(--__P__-space-2);border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);text-decoration:none}a.__P__-source:hover{color:var(--__P__-fg);border-color:var(--__P__-accent)}.__P__-source-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-composer{border-top:1px solid var(--__P__-border);padding:10px 12px;background:var(--__P__-bg);display:flex;flex-direction:column;gap:var(--__P__-space-2)}.__P__-composer-row{display:flex;align-items:flex-end;gap:6px}.__P__-textarea{flex:1;height:40px;max-height:160px;padding:10px 12px;border-radius:var(--__P__-radius);background:var(--__P__-bg-elevated);border:1px solid transparent;font-size:calc(14px * var(--__P__-text-scale));line-height:1.4;transition:height var(--__P__-dur-quick) var(--__P__-ease),border-color var(--__P__-dur-quick) var(--__P__-ease),box-shadow var(--__P__-dur-quick) var(--__P__-ease)}.__P__-textarea:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:1px;border-color:var(--__P__-focus)}@media(pointer:coarse){.__P__-textarea,.__P__-home-search-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}.__P__-textarea{height:44px}}.__P__-send{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;transition:opacity var(--__P__-dur-quick) var(--__P__-ease),transform var(--__P__-dur-quick) var(--__P__-ease),background var(--__P__-dur-quick) var(--__P__-ease)}.__P__-send[data-shape=circle]{border-radius:999px}.__P__-send[data-shape=square]{border-radius:var(--__P__-radius-sm)}.__P__-send[data-shape=pill]{width:auto;padding:0 18px;border-radius:999px}.__P__-send[data-variant=filled]{background:var(--__P__-accent);color:var(--__P__-accent-text)}.__P__-send[data-variant=outline]{background:transparent;color:var(--__P__-accent);border-color:var(--__P__-accent)}.__P__-send[data-variant=outline]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 10%,transparent)}.__P__-send[data-variant=ghost]{background:transparent;color:var(--__P__-accent)}.__P__-send[data-variant=ghost]:not(:disabled):hover{background:color-mix(in srgb,var(--__P__-accent) 8%,transparent)}.__P__-send:disabled{opacity:.4;cursor:not-allowed}.__P__-send:not(:disabled):hover{transform:translateY(-1px)}.__P__-send:not(:disabled):active{transform:translateY(0)}.__P__-send:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-send svg{width:18px;height:18px}.__P__-composer-actions{display:flex;gap:var(--__P__-space-1);flex-wrap:wrap}.__P__-attachments{display:flex;flex-wrap:wrap;gap:6px}.__P__-attachment-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--__P__-space-1) var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-1);border-radius:999px;background:var(--__P__-bg-elevated);border:1px solid var(--__P__-border);font-size:var(--__P__-text-xs);max-width:200px}.__P__-attachment-thumb{width:24px;height:24px;border-radius:999px;object-fit:cover;background:var(--__P__-border)}.__P__-attachment-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-attachment-remove{width:18px;height:18px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted)}.__P__-attachment-remove:hover{background:var(--__P__-border);color:var(--__P__-fg)}.__P__-dropzone{position:absolute;inset:8px;border:2px dashed var(--__P__-accent);border-radius:var(--__P__-radius);background:color-mix(in srgb,var(--__P__-accent) 8%,transparent);display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--__P__-accent);pointer-events:none;z-index:10;animation:__P__-fade-in var(--__P__-dur-quick) var(--__P__-ease)}@keyframes __P__-fade-in{0%{opacity:0}to{opacity:1}}.__P__-error{margin-top:var(--__P__-space-1);padding:8px 10px;border-radius:var(--__P__-radius-sm);background:var(--__P__-danger-bg);color:var(--__P__-danger-text);font-size:var(--__P__-text-sm);display:flex;align-items:center;gap:var(--__P__-space-2)}.__P__-error button{color:inherit;text-decoration:underline;font-size:var(--__P__-text-sm)}.__P__-history{flex:1;overflow-y:auto;padding:var(--__P__-space-2) var(--__P__-space-1) var(--__P__-space-3)}.__P__-history-footer{flex:none;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);border-top:1px solid var(--__P__-border);background:var(--__P__-surface)}.__P__-history-new{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--__P__-space-2);padding:var(--__P__-space-2) var(--__P__-space-3);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-on-accent);cursor:pointer;font-size:var(--__P__-text-sm);font-weight:600;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-history-new svg{width:16px;height:16px}.__P__-history-new:hover{filter:brightness(1.08)}.__P__-history-new:active{transform:translateY(1px)}.__P__-history-new:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-history-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:40px 16px;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));text-align:center}.__P__-history-group{display:flex;flex-direction:column;padding:0 var(--__P__-space-3)}.__P__-history-heading{font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted);padding:14px 4px 8px;text-transform:uppercase;letter-spacing:.04em}.__P__-history-card{display:flex;flex-direction:column;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-lg, 14px);overflow:hidden}.__P__-history-item{all:unset;display:flex;align-items:center;gap:var(--__P__-space-3);padding:12px var(--__P__-space-3);cursor:pointer;transition:background var(--__P__-dur-base) var(--__P__-ease)}.__P__-history-item+.__P__-history-item{border-top:1px solid var(--__P__-border)}.__P__-history-item:hover{background:var(--__P__-bg-elevated)}.__P__-history-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-history-avatar{flex:none;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:color-mix(in oklab,var(--__P__-accent) 12%,transparent);color:var(--__P__-accent)}.__P__-history-avatar svg{width:18px;height:18px}.__P__-history-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.__P__-history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-2)}.__P__-history-title{flex:1;min-width:0;font-size:calc(14px * var(--__P__-text-scale));font-weight:500;color:var(--__P__-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-time{flex:none;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-history-preview{flex:1;min-width:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-history-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--__P__-accent)}.__P__-history-item[data-unread=true] .__P__-history-title{font-weight:600}.__P__-history-item[data-closed=true] .__P__-history-title{color:var(--__P__-fg-muted)}.__P__-history-item-skeleton{cursor:default;pointer-events:none}.__P__-skeleton{display:block;border-radius:4px;background:linear-gradient(90deg,color-mix(in oklab,var(--__P__-fg) 9%,transparent) 30%,color-mix(in oklab,var(--__P__-fg) 17%,transparent),color-mix(in oklab,var(--__P__-fg) 9%,transparent) 70%);background-size:200% 100%;animation:__P__-skeleton-shimmer 1.8s ease-in-out infinite}.__P__-history-avatar.__P__-skeleton{border-radius:50%}.__P__-skeleton-heading{width:52px;height:8px}.__P__-skeleton-title{width:55%;height:12px}.__P__-skeleton-time{width:34px;height:10px}.__P__-skeleton-preview{width:80%;height:10px}@keyframes __P__-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.__P__-skeleton{animation:none}}.__P__-list-loading{margin:auto;padding:var(--__P__-space-6) var(--__P__-space-4);color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);text-align:center}.__P__-readonly-banner{display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 12px;margin:0 var(--__P__-space-3) var(--__P__-space-3);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated);color:var(--__P__-fg-muted);text-align:center;font-size:var(--__P__-text-sm)}.__P__-readonly-label{line-height:1.4}.__P__-readonly-cta{appearance:none;border:0;cursor:pointer;padding:var(--__P__-space-2) var(--__P__-space-4);border-radius:999px;background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-readonly-cta:hover,.__P__-readonly-cta:focus-visible{filter:brightness(1.1)}.__P__-readonly-cta:focus-visible{outline:2px solid var(--__P__-accent);outline-offset:2px}.__P__-composer-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:10px 16px;margin:0 var(--__P__-space-3);border-top:1px solid var(--__P__-border);text-align:center;font-size:calc(11px * var(--__P__-text-scale));line-height:1.4;color:var(--__P__-fg-muted)}.__P__-disclaimer{max-width:320px;margin:0 auto;opacity:.9;letter-spacing:.01em}.__P__-poweredby{display:inline-flex;align-items:center;justify-content:center;gap:6px;color:inherit;text-decoration:none;opacity:.7;transition:opacity var(--__P__-dur-base) var(--__P__-ease);font-size:calc(11px * var(--__P__-text-scale));letter-spacing:.02em}.__P__-poweredby:hover{opacity:1}.__P__-poweredby-logo{height:12px;width:auto;display:inline-block;vertical-align:middle}.__P__-poweredby-bar{flex:none;display:flex;align-items:center;justify-content:center;padding:6px 16px;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated)}.__P__-menu-wrap{position:relative;display:inline-flex}.__P__-menu{position:absolute;top:100%;inset-inline-end:0;margin-top:6px;min-width:200px;padding:6px;background:var(--__P__-bg);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);box-shadow:var(--__P__-shadow-panel);z-index:10;display:flex;flex-direction:column;gap:2px;animation:__P__-menu-in var(--__P__-dur-base) var(--__P__-ease)}@media(prefers-reduced-motion:reduce){.__P__-menu{animation:none}}@keyframes __P__-menu-in{0%{opacity:0;transform:translateY(-4px) scale(.98);transform-origin:top right}to{opacity:1;transform:none}}.__P__-menu-item{all:unset;display:flex;align-items:center;gap:10px;padding:8px 10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);border-radius:var(--__P__-radius-sm);cursor:pointer;user-select:none}.__P__-menu-item:hover{background:var(--__P__-bg-elevated)}.__P__-menu-item:focus-visible{background:var(--__P__-bg-elevated);outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-menu-item[disabled]{opacity:.45;cursor:not-allowed}.__P__-menu-icon{display:inline-flex;width:16px;height:16px;color:var(--__P__-fg-muted)}.__P__-menu-icon svg{width:16px;height:16px}.__P__-menu-label{flex:1}.__P__-menu-check{display:inline-flex;color:var(--__P__-accent)}.__P__-menu-check svg{width:14px;height:14px}.__P__-menu-item-segmented{cursor:default}.__P__-menu-item-segmented:hover{background:transparent}.__P__-segmented{display:inline-flex;gap:2px;padding:2px;background:var(--__P__-bg-elevated);border-radius:var(--__P__-radius-sm)}.__P__-segment{all:unset;min-width:26px;padding:3px 8px;font-size:var(--__P__-text-xs);font-weight:600;letter-spacing:.02em;text-align:center;color:var(--__P__-fg-muted);border-radius:calc(var(--__P__-radius-sm) - 2px);cursor:pointer;transition:color .12s ease,background .12s ease}.__P__-segment:hover{color:var(--__P__-fg)}.__P__-segment[data-on=true]{background:var(--__P__-bg);color:var(--__P__-accent);box-shadow:var(--__P__-shadow-card)}.__P__-segment:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-resize-grip{position:absolute;width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--__P__-fg-muted);opacity:.45;transition:opacity var(--__P__-dur-base) var(--__P__-ease);z-index:2;touch-action:none;user-select:none}.__P__-resize-grip:hover,.__P__-resize-grip:focus-visible{opacity:1}.__P__-resize-grip svg{width:10px;height:10px}.__P__-resize-grip--bottom-left{bottom:2px;left:2px;cursor:nesw-resize;transform:scaleX(-1)}.__P__-resize-grip--bottom-right{bottom:2px;right:2px;cursor:nwse-resize}.__P__-resize-grip--top-left{top:2px;left:2px;cursor:nwse-resize;transform:rotate(180deg)}.__P__-resize-grip--top-right{top:2px;right:2px;cursor:nesw-resize;transform:scaleY(-1)}:host(:not([data-mode="open"])) .__P__-resize-grip{display:none}.__P__-messenger{display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-body,.__P__-messenger-pane{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.__P__-messenger-pane[hidden]{display:none}@keyframes __P__-view-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.__P__-module{display:flex;flex-direction:column;height:100%;min-height:0}@media(prefers-reduced-motion:no-preference){.__P__-module,.__P__-history{animation:__P__-view-in .18s var(--__P__-ease-out)}}.__P__-module-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--__P__-space-3);display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-home{container-type:inline-size;background:radial-gradient(125% 65% at 88% 0%,color-mix(in srgb,#fff 16%,transparent),transparent 55%),linear-gradient(180deg,var(--__P__-accent) 0%,var(--__P__-accent) 22%,color-mix(in srgb,var(--__P__-accent) 28%,var(--__P__-surface)) 44%,var(--__P__-surface) 70%);border-radius:var(--__P__-radius-lg) var(--__P__-radius-lg) 0 0}.__P__-home-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;background:transparent}.__P__-home-cards{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:4px 14px 16px}.__P__-module-pad{padding:var(--__P__-space-3) var(--__P__-space-3) 0}.__P__-module-empty{display:flex;flex-direction:column;align-items:center;gap:var(--__P__-space-3);padding:var(--__P__-space-8) var(--__P__-space-4);text-align:center;color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-module-retry{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border-strong);border-radius:var(--__P__-radius-sm);color:var(--__P__-fg);font-weight:600;cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-module-retry:hover{background:var(--__P__-hover);border-color:var(--__P__-accent)}.__P__-module-retry:active{background:var(--__P__-border)}.__P__-module-retry:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-help-list{flex:1;min-height:0;overflow-y:auto;padding-bottom:var(--__P__-space-3)}.__P__-help-group{display:flex;flex-direction:column}.__P__-help-section-title{position:sticky;top:0;z-index:1;margin:0;padding:var(--__P__-space-3) var(--__P__-space-5) var(--__P__-space-2);font-size:var(--__P__-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--__P__-fg-muted);background:var(--__P__-bg)}.__P__-help-card{margin:0 var(--__P__-space-3) var(--__P__-space-3);background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden}.__P__-help-card .__P__-list-row{border-bottom:0;border-radius:0}.__P__-help-card .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-module-cta{padding:var(--__P__-space-3);border-top:1px solid var(--__P__-border)}.__P__-tabbar{display:flex;border-top:1px solid var(--__P__-border);background:var(--__P__-bg-elevated);flex-shrink:0}.__P__-tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--__P__-space-1);min-height:48px;padding:var(--__P__-space-2) var(--__P__-space-1);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600;transition:color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-tab:hover{color:var(--__P__-fg)}.__P__-tab[aria-selected=true]{color:var(--__P__-accent)}.__P__-tab:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-tab:active{background:var(--__P__-hover)}.__P__-tab-icon{position:relative;display:inline-flex}.__P__-tab-icon svg{width:22px;height:22px}.__P__-tab-badge{position:absolute;top:-4px;left:calc(50% + 6px);min-width:16px;height:16px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--__P__-accent);color:var(--__P__-on-accent);font-size:calc(10px * var(--__P__-text-scale));font-weight:600;line-height:1}.__P__-home-hero{flex-shrink:0;padding:var(--__P__-space-5) var(--__P__-space-5) var(--__P__-space-3);color:var(--__P__-on-accent);--__P__-focus: var(--__P__-on-accent)}.__P__-home-hero-top{display:flex;align-items:center;justify-content:space-between;gap:var(--__P__-space-3);min-height:32px}.__P__-home-brand{font-size:clamp(calc(12px * var(--__P__-text-scale)),calc(3.2cqi * var(--__P__-text-scale)),calc(14px * var(--__P__-text-scale)));font-weight:600;letter-spacing:.01em;color:color-mix(in srgb,#fff 82%,transparent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.__P__-home-brand-spacer{flex:1}.__P__-home-hero-actions{display:flex;align-items:center;gap:var(--__P__-space-2);flex-shrink:0}.__P__-home-hero-actions .__P__-icon-btn{color:#fff}.__P__-home-hero-actions .__P__-icon-btn:hover{background:color-mix(in srgb,#fff 18%,transparent);color:#fff}.__P__-home-hero-actions .__P__-icon-btn:active{background:color-mix(in srgb,#fff 26%,transparent)}.__P__-home-greeting{margin:28px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(19px * var(--__P__-text-scale)),calc(5.5cqi * var(--__P__-text-scale)),var(--__P__-text-2xl));font-weight:800;line-height:1.18;letter-spacing:-.01em;overflow-wrap:anywhere}.__P__-home-lead{margin:10px 0 0;font-family:var(--__P__-font-display);font-size:clamp(calc(15px * var(--__P__-text-scale)),calc(4.2cqi * var(--__P__-text-scale)),var(--__P__-text-xl));font-weight:600;line-height:1.25;letter-spacing:-.005em;color:color-mix(in srgb,var(--__P__-on-accent) 78%,transparent);overflow-wrap:anywhere}.__P__-home-avatars{display:flex}.__P__-home-avatar{width:30px;height:30px;border-radius:999px;overflow:hidden;margin-inline-start:-10px;border:2px solid color-mix(in srgb,#fff 92%,transparent);box-shadow:0 1px 3px #0000002e;background:var(--__P__-surface);display:inline-flex;align-items:center;justify-content:center;font-size:var(--__P__-text-xs);font-weight:700;color:var(--__P__-fg)}.__P__-home-avatar:first-child{margin-inline-start:0}.__P__-home-avatar img{width:100%;height:100%;object-fit:cover}.__P__-home-content{background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);box-shadow:var(--__P__-shadow-card);overflow:hidden}.__P__-home-content-title{padding:var(--__P__-space-4) var(--__P__-space-4) var(--__P__-space-3);font-size:var(--__P__-text-sm);font-weight:700}.__P__-home-content-list{display:flex;flex-direction:column;padding:0 var(--__P__-space-2) var(--__P__-space-2)}.__P__-home-content-list .__P__-list-row+.__P__-list-row{border-top:1px solid var(--__P__-border)}.__P__-home-card{display:block;width:100%;text-align:start;background:var(--__P__-surface);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);padding:var(--__P__-space-4);box-shadow:var(--__P__-shadow-card)}.__P__-home-card[data-interactive=true]{cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-home-card[data-interactive=true]:hover{background:var(--__P__-bg-elevated)}.__P__-home-card[data-interactive=true]:active{transform:translateY(1px)}.__P__-home-card[data-interactive=true]:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-recent-row{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-recent-avatar{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex-shrink:0;border-radius:999px;background:color-mix(in oklch,var(--__P__-accent) 14%,transparent);color:var(--__P__-accent)}.__P__-home-recent-avatar svg{width:20px;height:20px}.__P__-home-recent-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.__P__-home-recent-title{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-recent-preview{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.__P__-home-recent-at{color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);flex-shrink:0}.__P__-home-recent-dot{width:8px;height:8px;border-radius:999px;background:var(--__P__-accent);flex-shrink:0}.__P__-home-recent-row[data-unread=true] .__P__-home-recent-title{font-weight:700}.__P__-home-status{display:flex;align-items:center;gap:var(--__P__-space-3)}.__P__-home-status-icon svg{width:22px;height:22px;color:var(--__P__-success)}.__P__-home-status[data-level=degraded] .__P__-home-status-icon svg{color:var(--__P__-warning)}.__P__-home-status[data-level=down] .__P__-home-status-icon svg{color:var(--__P__-danger)}.__P__-home-status-text{font-weight:600;font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search{display:flex;align-items:center;gap:var(--__P__-space-2);width:100%;padding:var(--__P__-space-3) var(--__P__-space-4);border-radius:var(--__P__-radius);border:1px solid var(--__P__-border);background:var(--__P__-surface);text-align:start}.__P__-home-search[data-input=true]{background:var(--__P__-bg-elevated)}.__P__-home-search:hover{border-color:var(--__P__-border-strong)}.__P__-home-search:focus-visible,.__P__-home-search:focus-within{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-home-search-text{flex:1;color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale))}.__P__-home-search-input{flex:1;border:0;background:transparent;font-size:calc(14px * var(--__P__-text-scale));color:var(--__P__-fg);outline:none}.__P__-home-search-icon svg{width:18px;height:18px;color:var(--__P__-accent)}.__P__-list-row{display:flex;align-items:center;gap:var(--__P__-space-3);width:100%;min-height:44px;text-align:start;padding:var(--__P__-space-3) var(--__P__-space-2);border-radius:var(--__P__-radius-sm)}.__P__-list-row:hover{background:var(--__P__-hover)}.__P__-list-row:active{background:var(--__P__-border)}.__P__-list-row:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:-2px}.__P__-list-row-body{display:flex;flex-direction:column;min-width:0;flex:1}.__P__-list-row-title{font-weight:600;font-size:var(--__P__-text-md);line-height:1.35}.__P__-list-row-sub{color:var(--__P__-fg-muted);font-size:var(--__P__-text-sm);margin-top:var(--__P__-space-1);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-list-row-chevron svg{width:18px;height:18px;color:var(--__P__-accent);flex-shrink:0}.__P__-back-header{display:flex;align-items:center;gap:var(--__P__-space-2);padding:10px 12px;border-bottom:1px solid var(--__P__-border);flex-shrink:0}.__P__-back-title{flex:1;text-align:center;font-size:var(--__P__-text-md);font-weight:700;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.__P__-back-spacer{width:32px;height:1px}.__P__-content{display:flex;flex-direction:column;gap:14px;width:100%;max-width:68ch;margin:0 auto}.__P__-content-hero{width:100%;border-radius:var(--__P__-radius)}.__P__-content-subtitle{color:var(--__P__-fg-muted);margin:0}.__P__-content-frame{flex:1;min-height:0;width:100%;border:0;background:#fff}.__P__-news-list{display:flex;flex-direction:column;gap:var(--__P__-space-3)}.__P__-news-card{display:block;width:100%;text-align:start;border:1px solid var(--__P__-border);border-radius:var(--__P__-radius);overflow:hidden;background:var(--__P__-surface)}.__P__-news-card{transition:background var(--__P__-dur-quick) var(--__P__-ease-out),transform var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-news-card:hover{background:var(--__P__-bg-elevated)}.__P__-news-card:active{transform:translateY(1px)}.__P__-news-card:focus-visible{outline:2px solid var(--__P__-focus);outline-offset:2px}.__P__-news-hero{width:100%;display:block}.__P__-news-body{display:flex;flex-direction:column;gap:6px;padding:14px 16px}.__P__-news-title{font-weight:700;font-size:var(--__P__-text-md)}.__P__-news-summary{color:var(--__P__-fg-muted);font-size:calc(14px * var(--__P__-text-scale));display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.__P__-modules-empty{display:flex;align-items:center;justify-content:center;position:relative}.__P__-modules-empty-close{position:absolute;top:12px;inset-inline-end:12px}.__P__-modules-empty-text{color:var(--__P__-fg-muted);font-size:var(--__P__-text-base)}.__P__-form{display:flex;flex-direction:column;gap:var(--__P__-space-4)}.__P__-field{display:flex;flex-direction:column;gap:6px}.__P__-field-label{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-field-req{color:var(--__P__-danger)}.__P__-field-input{width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);color:var(--__P__-fg);font:inherit;font-size:var(--__P__-text-sm);resize:vertical;transition:border-color var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-field-input:focus-visible{outline:none;border-color:var(--__P__-accent)}.__P__-field[data-invalid=true] .__P__-field-input{border-color:var(--__P__-danger)}.__P__-field-input[type=date],.__P__-field-input[type=time]{appearance:none;-webkit-appearance:none}@media(pointer:coarse){.__P__-field-input{font-size:max(16px,calc(16px * var(--__P__-text-scale)))}}.__P__-field-hint{font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-field-error{font-size:var(--__P__-text-xs);color:var(--__P__-danger)}.__P__-field-choices{display:flex;flex-direction:column;gap:10px;padding-top:2px}.__P__-choice{display:flex;align-items:flex-start;gap:10px;font-size:var(--__P__-text-sm);color:var(--__P__-fg);cursor:pointer}.__P__-choice input{margin-top:2px;accent-color:var(--__P__-accent)}.__P__-form-actions{display:flex;justify-content:flex-end;gap:var(--__P__-space-2);margin-top:var(--__P__-space-2)}.__P__-form-submit,.__P__-tool-approve{padding:var(--__P__-space-2) var(--__P__-space-4);border:none;border-radius:var(--__P__-radius-md);background:var(--__P__-accent);color:var(--__P__-accent-text, #fff);font:inherit;font-weight:600;font-size:var(--__P__-text-sm);cursor:pointer;transition:filter var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-submit:hover:not(:disabled),.__P__-tool-approve:hover:not(:disabled){filter:brightness(1.06)}.__P__-form-submit:disabled{opacity:.6;cursor:default}.__P__-form-skip,.__P__-tool-reject{padding:var(--__P__-space-2) var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:transparent;color:var(--__P__-fg-muted);font:inherit;font-size:var(--__P__-text-sm);cursor:pointer;transition:background var(--__P__-dur-quick) var(--__P__-ease-out)}.__P__-form-skip:hover:not(:disabled),.__P__-tool-reject:hover:not(:disabled){background:var(--__P__-bg-elevated)}.__P__-form-gate{display:flex;flex-direction:column;gap:var(--__P__-space-3);padding:var(--__P__-space-4);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-form-gate-title{margin:0;font-size:var(--__P__-text-base);font-weight:700;color:var(--__P__-fg)}.__P__-form-gate-desc{margin:0 0 var(--__P__-space-1);font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-form-done{display:flex;align-items:center;justify-content:center;gap:6px;padding:6px 12px;border:1px dashed var(--__P__-border);border-radius:999px;align-self:center;font-size:var(--__P__-text-xs);font-weight:600;color:var(--__P__-fg-muted)}.__P__-form-done svg{width:14px;height:14px;color:var(--__P__-success, #22c55e)}.__P__-form-done[data-outcome=skipped] svg{color:var(--__P__-fg-muted)}.__P__-form-done-fill{border:0;background:none;padding:0 2px;cursor:pointer;font:inherit;font-weight:600;color:var(--__P__-accent)}.__P__-form-done-fill:hover{text-decoration:underline}details.__P__-form-done{display:block;padding:0;border-radius:var(--__P__-radius-md)}details[open].__P__-form-done{width:min(100%,420px);background:var(--__P__-surface)}.__P__-form-done-summary{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;cursor:pointer;list-style:none}.__P__-form-done-summary::-webkit-details-marker{display:none}.__P__-form-done-summary>svg:last-child{color:var(--__P__-fg-muted);transition:transform .15s var(--__P__-ease)}details[open]>.__P__-form-done-summary>svg:last-child{transform:rotate(90deg)}.__P__-form-answers{margin:0;padding:var(--__P__-space-2) var(--__P__-space-3) var(--__P__-space-3);display:grid;gap:var(--__P__-space-3);text-align:start}.__P__-form-answer{display:grid;gap:6px}.__P__-form-answer dt{font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-form-answer dd{margin:0;padding:10px var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg);font-size:var(--__P__-text-sm);font-weight:400;color:var(--__P__-fg);overflow-wrap:anywhere}.__P__-tool-ask-input,.__P__-tool-approval{display:flex;flex-direction:column;gap:var(--__P__-space-2);margin-top:6px;padding:var(--__P__-space-3);border:1px solid var(--__P__-border);border-radius:var(--__P__-radius-md);background:var(--__P__-bg-elevated)}.__P__-tool-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-badge{padding:2px 8px;border-radius:999px;background:var(--__P__-warning, #f59e0b);color:#1a1206;font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-title{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}.__P__-tool-question{margin:0;font-size:var(--__P__-text-sm);font-weight:600;color:var(--__P__-fg)}.__P__-tool-desc{margin:0;font-size:var(--__P__-text-sm);color:var(--__P__-fg-muted)}.__P__-tool-args{margin:0;padding:var(--__P__-space-2);max-height:160px;overflow:auto;border-radius:var(--__P__-radius-sm);background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);white-space:pre-wrap;word-break:break-word}.__P__-tool-stale-note{margin:0;font-size:var(--__P__-text-xs);color:var(--__P__-fg-muted)}.__P__-tool-decided{flex-direction:row;align-items:center;flex-wrap:wrap;gap:8px}.__P__-tool-decided-label{padding:2px 8px;border-radius:999px;background:var(--__P__-bg);border:1px solid var(--__P__-border);color:var(--__P__-fg-muted);font-size:var(--__P__-text-xs);font-weight:600}.__P__-tool-decided-label[data-approved=true]{color:var(--__P__-success, #16a34a);border-color:var(--__P__-success, #16a34a)}.__P__-tool-decided-label[data-approved=false]{color:var(--__P__-danger);border-color:var(--__P__-danger)}.__P__-tool-decided-value{font-size:var(--__P__-text-sm);color:var(--__P__-fg)}:host([dir="rtl"]) .__P__-icon-dir{transform:scaleX(-1)}:host([dir="rtl"]) .__P__-field-input[type=date],:host([dir="rtl"]) .__P__-field-input[type=time]{position:relative;text-align:right;padding-left:34px}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-datetime-edit,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-datetime-edit{text-align:right}:host([dir="rtl"]) .__P__-field-input[type=date]::-webkit-calendar-picker-indicator,:host([dir="rtl"]) .__P__-field-input[type=time]::-webkit-calendar-picker-indicator{position:absolute;left:var(--__P__-space-3);margin:0}\n';
1200
1208
 
1201
1209
  // src/styles/standalone.css
1202
1210
  var standalone_default = ".__P__-standalone-page{margin:0;height:100vh;background:var(--__P__-bg, #fff);display:grid;place-items:stretch}\n";
@@ -1284,22 +1292,22 @@ function attachAdoptedSheet(shadow, doc) {
1284
1292
  }
1285
1293
  }
1286
1294
  function applyThemeOverrides(host, overrides) {
1287
- const p33 = BRAND.cssPrefix;
1288
- if (overrides.accent) host.style.setProperty(`--${p33}-accent-user`, overrides.accent);
1289
- if (overrides.accentText) host.style.setProperty(`--${p33}-accent-text-user`, overrides.accentText);
1290
- if (overrides.radius) host.style.setProperty(`--${p33}-radius`, overrides.radius);
1291
- if (overrides.fontFamily) host.style.setProperty(`--${p33}-font`, overrides.fontFamily);
1295
+ const p35 = BRAND.cssPrefix;
1296
+ if (overrides.accent) host.style.setProperty(`--${p35}-accent-user`, overrides.accent);
1297
+ if (overrides.accentText) host.style.setProperty(`--${p35}-accent-text-user`, overrides.accentText);
1298
+ if (overrides.radius) host.style.setProperty(`--${p35}-radius`, overrides.radius);
1299
+ if (overrides.fontFamily) host.style.setProperty(`--${p35}-font`, overrides.fontFamily);
1292
1300
  }
1293
1301
  function applyThemeMode(host, mode) {
1294
1302
  host.dataset.theme = mode;
1295
1303
  }
1296
1304
  function applySize(host, size) {
1297
- const p33 = BRAND.cssPrefix;
1298
- if (size.width !== void 0) host.style.setProperty(`--${p33}-panel-w`, size.width);
1299
- if (size.height !== void 0) host.style.setProperty(`--${p33}-panel-h`, size.height);
1300
- if (size.expanded?.width !== void 0) host.style.setProperty(`--${p33}-expanded-w`, size.expanded.width);
1301
- if (size.expanded?.height !== void 0) host.style.setProperty(`--${p33}-expanded-h`, size.expanded.height);
1302
- if (size.inset !== void 0) host.style.setProperty(`--${p33}-panel-inset`, size.inset);
1305
+ const p35 = BRAND.cssPrefix;
1306
+ if (size.width !== void 0) host.style.setProperty(`--${p35}-panel-w`, size.width);
1307
+ if (size.height !== void 0) host.style.setProperty(`--${p35}-panel-h`, size.height);
1308
+ if (size.expanded?.width !== void 0) host.style.setProperty(`--${p35}-expanded-w`, size.expanded.width);
1309
+ if (size.expanded?.height !== void 0) host.style.setProperty(`--${p35}-expanded-h`, size.expanded.height);
1310
+ if (size.inset !== void 0) host.style.setProperty(`--${p35}-panel-inset`, size.inset);
1303
1311
  }
1304
1312
  function applyPosition(host, pos) {
1305
1313
  host.dataset.position = pos;
@@ -1415,7 +1423,7 @@ import { h, render as renderPreact } from "preact";
1415
1423
 
1416
1424
  // src/ui/app.tsx
1417
1425
  import { useCallback as useCallback6, useEffect as useEffect16, useMemo as useMemo3, useRef as useRef9, useState as useState13 } from "preact/hooks";
1418
- import { batch, useComputed as useComputed7, useSignal as useSignal2 } from "@preact/signals";
1426
+ import { batch, useComputed as useComputed8, useSignal as useSignal2 } from "@preact/signals";
1419
1427
 
1420
1428
  // src/core/handshake-shape.ts
1421
1429
  function isPlainObject2(raw) {
@@ -1563,11 +1571,11 @@ function toBase64Url(json) {
1563
1571
  var nonEmpty = (ctx) => ctx && Object.keys(ctx).length > 0 ? ctx : void 0;
1564
1572
  function encodeContext(user, page) {
1565
1573
  const u = nonEmpty(user);
1566
- const p33 = nonEmpty(page);
1567
- if (!u && !p33) return void 0;
1574
+ const p35 = nonEmpty(page);
1575
+ if (!u && !p35) return void 0;
1568
1576
  const envelope = {};
1569
1577
  if (u) envelope.user = u;
1570
- if (p33) envelope.page = p33;
1578
+ if (p35) envelope.page = p35;
1571
1579
  return toBase64Url(JSON.stringify(envelope));
1572
1580
  }
1573
1581
 
@@ -1577,6 +1585,13 @@ function parseWireDate(value) {
1577
1585
  const ms = Date.parse(value);
1578
1586
  return Number.isFinite(ms) ? ms : void 0;
1579
1587
  }
1588
+ function toolPartType(toolName) {
1589
+ const bare = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
1590
+ return `tool-${bare}`;
1591
+ }
1592
+ function toolNameFromType(type) {
1593
+ return type.startsWith("tool-") ? type.slice(5) : type;
1594
+ }
1580
1595
  var DEFAULT_PATHS = {
1581
1596
  /** Conversation bootstrap. `POST` → deployment config + per-visitor state. */
1582
1597
  handshake: "/pai/handshake",
@@ -1658,8 +1673,8 @@ function buildSendMessageRequest(params) {
1658
1673
  if (Object.keys(data).length > 0) body.data = data;
1659
1674
  return body;
1660
1675
  }
1661
- function isResolvedToolPart(p33) {
1662
- return p33.state === "output" || p33.state === "error" || p33.approval?.approved !== void 0;
1676
+ function isResolvedToolPart(p35) {
1677
+ return p35.state === "output-available" || p35.state === "output-error" || p35.state === "output-denied" || p35.approval?.approved !== void 0;
1663
1678
  }
1664
1679
  function normalizeToolRef(ref) {
1665
1680
  if (typeof ref === "string") return ref ? { code: ref } : null;
@@ -1667,24 +1682,23 @@ function normalizeToolRef(ref) {
1667
1682
  }
1668
1683
  function messageToWireParts(m) {
1669
1684
  const out = [];
1670
- for (const p33 of m.parts) {
1671
- if (p33.kind === "text" && p33.text) {
1672
- out.push({ text: p33.text, type: "text" });
1685
+ for (const p35 of m.parts) {
1686
+ if (p35.kind === "text" && p35.text) {
1687
+ out.push({ text: p35.text, type: "text" });
1673
1688
  }
1674
- if (p33.kind === "file" && p33.url) {
1675
- out.push({ mediaType: p33.mediaType, type: "file", url: p33.url });
1689
+ if (p35.kind === "file" && p35.url) {
1690
+ out.push({ mediaType: p35.mediaType, type: "file", url: p35.url });
1676
1691
  }
1677
- if (p33.kind === "tool" && isResolvedToolPart(p33)) {
1692
+ if (p35.kind === "tool" && isResolvedToolPart(p35)) {
1678
1693
  const part = {
1679
- type: "tool",
1680
- toolCallId: p33.toolCallId,
1681
- toolName: p33.toolName,
1682
- state: p33.state
1694
+ type: toolPartType(p35.toolName),
1695
+ toolCallId: p35.toolCallId,
1696
+ state: p35.state
1683
1697
  };
1684
- if (p33.input !== void 0) part.input = p33.input;
1685
- if (p33.output !== void 0) part.output = p33.output;
1686
- if (p33.error !== void 0) part.errorText = p33.error;
1687
- if (p33.approval && p33.approval.approved !== void 0) part.approval = p33.approval;
1698
+ if (p35.input !== void 0) part.input = p35.input;
1699
+ if (p35.output !== void 0) part.output = p35.output;
1700
+ if (p35.error !== void 0) part.errorText = p35.error;
1701
+ if (p35.approval && p35.approval.approved !== void 0) part.approval = p35.approval;
1688
1702
  out.push(part);
1689
1703
  }
1690
1704
  }
@@ -2381,11 +2395,23 @@ function fromWireMessage(w) {
2381
2395
  if (part.type === "file") {
2382
2396
  return { kind: "file", url: part.url, mediaType: part.mediaType };
2383
2397
  }
2384
- if (part.type === "tool") {
2398
+ if (part.type === "source-url") {
2399
+ return { kind: "source", sourceId: part.sourceId, url: part.url, title: part.title };
2400
+ }
2401
+ if (part.type === "source-document") {
2402
+ return {
2403
+ kind: "source",
2404
+ sourceId: part.sourceId,
2405
+ title: part.title,
2406
+ filename: part.filename,
2407
+ mediaType: part.mediaType
2408
+ };
2409
+ }
2410
+ if (part.type.startsWith("tool-")) {
2385
2411
  return {
2386
2412
  kind: "tool",
2387
2413
  toolCallId: part.toolCallId,
2388
- toolName: part.toolName,
2414
+ toolName: toolNameFromType(part.type),
2389
2415
  inputPartialSig: signal(""),
2390
2416
  inputSig: signal(part.input),
2391
2417
  outputSig: signal(part.output),
@@ -2395,7 +2421,7 @@ function fromWireMessage(w) {
2395
2421
  };
2396
2422
  }
2397
2423
  return null;
2398
- }).filter((p33) => p33 !== null);
2424
+ }).filter((p35) => p35 !== null);
2399
2425
  return {
2400
2426
  id: w.id,
2401
2427
  role: w.role,
@@ -2425,61 +2451,47 @@ function assistantText(m) {
2425
2451
  }
2426
2452
  return out;
2427
2453
  }
2428
- function partToReactive(p33) {
2429
- if (p33.kind === "text" || p33.kind === "reasoning") {
2430
- return { kind: p33.kind, id: p33.id, textSig: signal(p33.text), doneSig: signal(p33.done) };
2454
+ function partToReactive(p35) {
2455
+ if (p35.kind === "text" || p35.kind === "reasoning") {
2456
+ return { kind: p35.kind, id: p35.id, textSig: signal(p35.text), doneSig: signal(p35.done) };
2431
2457
  }
2432
- if (p33.kind === "tool") {
2458
+ if (p35.kind === "tool") {
2433
2459
  return {
2434
2460
  kind: "tool",
2435
- toolCallId: p33.toolCallId,
2436
- toolName: p33.toolName,
2437
- inputPartialSig: signal(p33.inputPartial),
2438
- inputSig: signal(p33.input),
2439
- outputSig: signal(p33.output),
2440
- errorSig: signal(p33.error),
2441
- stateSig: signal(p33.state),
2442
- approvalSig: signal(p33.approval)
2461
+ toolCallId: p35.toolCallId,
2462
+ toolName: p35.toolName,
2463
+ inputPartialSig: signal(p35.inputPartial),
2464
+ inputSig: signal(p35.input),
2465
+ outputSig: signal(p35.output),
2466
+ errorSig: signal(p35.error),
2467
+ stateSig: signal(p35.state),
2468
+ approvalSig: signal(p35.approval)
2443
2469
  };
2444
2470
  }
2445
- return p33;
2471
+ return p35;
2446
2472
  }
2447
- function partFromReactive(p33) {
2448
- if (p33.kind === "text" || p33.kind === "reasoning") {
2449
- return { kind: p33.kind, id: p33.id, text: p33.textSig.value, done: p33.doneSig.value };
2473
+ function partFromReactive(p35) {
2474
+ if (p35.kind === "text" || p35.kind === "reasoning") {
2475
+ return { kind: p35.kind, id: p35.id, text: p35.textSig.value, done: p35.doneSig.value };
2450
2476
  }
2451
- if (p33.kind === "tool") {
2477
+ if (p35.kind === "tool") {
2452
2478
  return {
2453
2479
  kind: "tool",
2454
- toolCallId: p33.toolCallId,
2455
- toolName: p33.toolName,
2456
- inputPartial: p33.inputPartialSig.value,
2457
- input: p33.inputSig.value,
2458
- output: p33.outputSig.value,
2459
- error: p33.errorSig.value,
2460
- state: p33.stateSig.value,
2461
- approval: p33.approvalSig.value
2480
+ toolCallId: p35.toolCallId,
2481
+ toolName: p35.toolName,
2482
+ inputPartial: p35.inputPartialSig.value,
2483
+ input: p35.inputSig.value,
2484
+ output: p35.outputSig.value,
2485
+ error: p35.errorSig.value,
2486
+ state: p35.stateSig.value,
2487
+ approval: p35.approvalSig.value
2462
2488
  };
2463
2489
  }
2464
- return p33;
2490
+ return p35;
2465
2491
  }
2466
2492
 
2467
2493
  // src/stream/reducer.ts
2468
2494
  import { signal as signal2 } from "@preact/signals";
2469
-
2470
- // src/stream/constants.ts
2471
- function isAskUserInputTool(toolName) {
2472
- if (!toolName) return false;
2473
- const name = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
2474
- return name === "ask-user-input" || name === "ask_user_input" || name === "request-user-input" || name === "request_user_input";
2475
- }
2476
- var TRIGGER = {
2477
- submitMessage: "submit-message",
2478
- toolResult: "tool-result",
2479
- toolApproval: "tool-approval"
2480
- };
2481
-
2482
- // src/stream/reducer.ts
2483
2495
  var log7 = logger.scope("reducer");
2484
2496
  var StreamReducer = class {
2485
2497
  constructor(messagesSig) {
@@ -2517,8 +2529,8 @@ var StreamReducer = class {
2517
2529
  ensureTextPart(m, "text", chunk.id);
2518
2530
  return;
2519
2531
  case "text-delta": {
2520
- const p33 = ensureTextPart(m, "text", chunk.id);
2521
- p33.textSig.value += chunk.delta;
2532
+ const p35 = ensureTextPart(m, "text", chunk.id);
2533
+ p35.textSig.value += chunk.delta;
2522
2534
  return;
2523
2535
  }
2524
2536
  case "text-end":
@@ -2528,8 +2540,8 @@ var StreamReducer = class {
2528
2540
  ensureTextPart(m, "reasoning", chunk.id).doneSig.value = false;
2529
2541
  return;
2530
2542
  case "reasoning-delta": {
2531
- const p33 = ensureTextPart(m, "reasoning", chunk.id);
2532
- p33.textSig.value += chunk.delta;
2543
+ const p35 = ensureTextPart(m, "reasoning", chunk.id);
2544
+ p35.textSig.value += chunk.delta;
2533
2545
  return;
2534
2546
  }
2535
2547
  case "reasoning-end":
@@ -2540,18 +2552,25 @@ var StreamReducer = class {
2540
2552
  case "tool-input-available":
2541
2553
  case "tool-output-available":
2542
2554
  case "tool-output-error":
2555
+ case "tool-output-denied":
2543
2556
  case "tool-approval-request":
2544
2557
  applyTool(m, chunk);
2545
2558
  return;
2546
2559
  case "file":
2547
2560
  appendPart(m, { kind: "file", url: chunk.url, mediaType: chunk.mediaType });
2548
2561
  return;
2549
- case "source-url": {
2550
- const parts = m.partsSig.value;
2551
- if (parts.some((p33) => p33.kind === "source" && p33.sourceId === chunk.sourceId)) return;
2552
- appendPart(m, { kind: "source", sourceId: chunk.sourceId, url: chunk.url, title: chunk.title });
2562
+ case "source-url":
2563
+ appendSource(m, { kind: "source", sourceId: chunk.sourceId, url: chunk.url, title: chunk.title });
2564
+ return;
2565
+ case "source-document":
2566
+ appendSource(m, {
2567
+ kind: "source",
2568
+ sourceId: chunk.sourceId,
2569
+ title: chunk.title,
2570
+ filename: chunk.filename,
2571
+ mediaType: chunk.mediaType
2572
+ });
2553
2573
  return;
2554
- }
2555
2574
  case "data-notification":
2556
2575
  return;
2557
2576
  default: {
@@ -2572,14 +2591,14 @@ var StreamReducer = class {
2572
2591
  }
2573
2592
  };
2574
2593
  function ensureTextPart(m, kind, id) {
2575
- const existing = m.partsSig.value.find((p33) => p33.kind === kind && p33.id === id);
2594
+ const existing = m.partsSig.value.find((p35) => p35.kind === kind && p35.id === id);
2576
2595
  if (existing) return existing;
2577
2596
  const part = { kind, id, textSig: signal2(""), doneSig: signal2(false) };
2578
2597
  appendPart(m, part);
2579
2598
  return part;
2580
2599
  }
2581
2600
  function ensureToolPart(m, toolCallId, toolName) {
2582
- const existing = m.partsSig.value.find((p33) => p33.kind === "tool" && p33.toolCallId === toolCallId);
2601
+ const existing = m.partsSig.value.find((p35) => p35.kind === "tool" && p35.toolCallId === toolCallId);
2583
2602
  if (existing) return existing;
2584
2603
  const part = {
2585
2604
  kind: "tool",
@@ -2589,7 +2608,7 @@ function ensureToolPart(m, toolCallId, toolName) {
2589
2608
  inputSig: signal2(void 0),
2590
2609
  outputSig: signal2(void 0),
2591
2610
  errorSig: signal2(void 0),
2592
- stateSig: signal2("input"),
2611
+ stateSig: signal2("input-streaming"),
2593
2612
  approvalSig: signal2(void 0)
2594
2613
  };
2595
2614
  appendPart(m, part);
@@ -2598,38 +2617,47 @@ function ensureToolPart(m, toolCallId, toolName) {
2598
2617
  function appendPart(m, part) {
2599
2618
  m.partsSig.value = [...m.partsSig.value, part];
2600
2619
  }
2620
+ function appendSource(m, source) {
2621
+ if (m.partsSig.value.some((p35) => p35.kind === "source" && p35.sourceId === source.sourceId)) return;
2622
+ appendPart(m, source);
2623
+ }
2601
2624
  function applyTool(m, chunk) {
2602
2625
  switch (chunk.type) {
2603
2626
  case "tool-input-start":
2604
2627
  ensureToolPart(m, chunk.toolCallId, chunk.toolName);
2605
2628
  return;
2606
2629
  case "tool-input-delta": {
2607
- const p33 = ensureToolPart(m, chunk.toolCallId);
2608
- p33.inputPartialSig.value += chunk.delta;
2630
+ const p35 = ensureToolPart(m, chunk.toolCallId);
2631
+ p35.inputPartialSig.value += chunk.inputTextDelta;
2609
2632
  return;
2610
2633
  }
2611
2634
  case "tool-input-available": {
2612
- const p33 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
2613
- p33.inputSig.value = chunk.input;
2614
- p33.stateSig.value = isAskUserInputTool(p33.toolName) ? "awaiting-input" : "awaiting";
2635
+ const p35 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
2636
+ p35.inputSig.value = chunk.input;
2637
+ p35.stateSig.value = "input-available";
2615
2638
  return;
2616
2639
  }
2617
2640
  case "tool-approval-request": {
2618
- const p33 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
2619
- p33.approvalSig.value = { id: chunk.approvalId };
2620
- p33.stateSig.value = "awaiting-approval";
2641
+ const p35 = ensureToolPart(m, chunk.toolCallId, chunk.toolName);
2642
+ p35.approvalSig.value = { id: chunk.approvalId };
2643
+ p35.stateSig.value = "approval-requested";
2621
2644
  return;
2622
2645
  }
2623
2646
  case "tool-output-available": {
2624
- const p33 = ensureToolPart(m, chunk.toolCallId);
2625
- p33.outputSig.value = chunk.output;
2626
- p33.stateSig.value = "output";
2647
+ const p35 = ensureToolPart(m, chunk.toolCallId);
2648
+ p35.outputSig.value = chunk.output;
2649
+ p35.stateSig.value = "output-available";
2627
2650
  return;
2628
2651
  }
2629
2652
  case "tool-output-error": {
2630
- const p33 = ensureToolPart(m, chunk.toolCallId);
2631
- p33.errorSig.value = chunk.errorText;
2632
- p33.stateSig.value = "error";
2653
+ const p35 = ensureToolPart(m, chunk.toolCallId);
2654
+ p35.errorSig.value = chunk.errorText;
2655
+ p35.stateSig.value = "output-error";
2656
+ return;
2657
+ }
2658
+ case "tool-output-denied": {
2659
+ const p35 = ensureToolPart(m, chunk.toolCallId);
2660
+ p35.stateSig.value = "output-denied";
2633
2661
  return;
2634
2662
  }
2635
2663
  default:
@@ -2637,6 +2665,18 @@ function applyTool(m, chunk) {
2637
2665
  }
2638
2666
  }
2639
2667
 
2668
+ // src/stream/constants.ts
2669
+ function isAskUserInputTool(toolName) {
2670
+ if (!toolName) return false;
2671
+ const name = toolName.startsWith("tool:") ? toolName.slice(5) : toolName;
2672
+ return name === "ask-user-input" || name === "ask_user_input" || name === "request-user-input" || name === "request_user_input";
2673
+ }
2674
+ var TRIGGER = {
2675
+ submitMessage: "submit-message",
2676
+ toolResult: "tool-result",
2677
+ toolApproval: "tool-approval"
2678
+ };
2679
+
2640
2680
  // src/core/feedback/index.ts
2641
2681
  import { signal as signal3 } from "@preact/signals";
2642
2682
 
@@ -3211,7 +3251,11 @@ var TID = {
3211
3251
  /** Tool-approval reject button. */
3212
3252
  toolReject: `${p2}-tool-reject`,
3213
3253
  /** Recorded tool decision summary (after approve/reject/submit). */
3214
- toolDecision: `${p2}-tool-decision`
3254
+ toolDecision: `${p2}-tool-decision`,
3255
+ /** Automatic (non-interactive) tool-call disclosure — shown only when `showToolCalls`. */
3256
+ toolCall: `${p2}-tool-call`,
3257
+ /** A citation source (web link or document reference) — shown only when `showSources`. */
3258
+ source: `${p2}-source`
3215
3259
  };
3216
3260
  function tid(base, suffix) {
3217
3261
  return `${base}-${suffix}`;
@@ -3322,24 +3366,24 @@ import { useCallback as useCallback2, useEffect as useEffect9, useRef as useRef6
3322
3366
  import { useEffect as useEffect2, useRef } from "preact/hooks";
3323
3367
  import { jsx as jsx3 } from "preact/jsx-runtime";
3324
3368
  function ResizeGrip({ panelEl, resize, position, initialSize, onSizeChange, strings }) {
3325
- const p33 = BRAND.cssPrefix;
3369
+ const p35 = BRAND.cssPrefix;
3326
3370
  const dragRef = useRef(null);
3327
3371
  useEffect2(() => {
3328
3372
  if (!panelEl) return;
3329
3373
  const style = panelEl.style;
3330
- if (resize.minWidth) style.setProperty(`--${p33}-resize-min-w`, resize.minWidth);
3331
- if (resize.maxWidth) style.setProperty(`--${p33}-resize-max-w`, resize.maxWidth);
3332
- if (resize.minHeight) style.setProperty(`--${p33}-resize-min-h`, resize.minHeight);
3333
- if (resize.maxHeight) style.setProperty(`--${p33}-resize-max-h`, resize.maxHeight);
3374
+ if (resize.minWidth) style.setProperty(`--${p35}-resize-min-w`, resize.minWidth);
3375
+ if (resize.maxWidth) style.setProperty(`--${p35}-resize-max-w`, resize.maxWidth);
3376
+ if (resize.minHeight) style.setProperty(`--${p35}-resize-min-h`, resize.minHeight);
3377
+ if (resize.maxHeight) style.setProperty(`--${p35}-resize-max-h`, resize.maxHeight);
3334
3378
  if (initialSize) {
3335
- style.setProperty(`--${p33}-widget-w`, `${initialSize.width}px`);
3336
- style.setProperty(`--${p33}-widget-h`, `${initialSize.height}px`);
3379
+ style.setProperty(`--${p35}-widget-w`, `${initialSize.width}px`);
3380
+ style.setProperty(`--${p35}-widget-h`, `${initialSize.height}px`);
3337
3381
  }
3338
- }, [panelEl, resize.minWidth, resize.maxWidth, resize.minHeight, resize.maxHeight, p33, initialSize]);
3382
+ }, [panelEl, resize.minWidth, resize.maxWidth, resize.minHeight, resize.maxHeight, p35, initialSize]);
3339
3383
  if (!panelEl) return null;
3340
3384
  const isTop = position.startsWith("top-");
3341
3385
  const isRight = position.endsWith("-right");
3342
- const cornerClass = `${p33}-resize-grip ${p33}-resize-grip--${isTop ? "bottom" : "top"}-${isRight ? "left" : "right"}`;
3386
+ const cornerClass = `${p35}-resize-grip ${p35}-resize-grip--${isTop ? "bottom" : "top"}-${isRight ? "left" : "right"}`;
3343
3387
  const onPointerDown = (e) => {
3344
3388
  if (!panelEl) return;
3345
3389
  const target = e.currentTarget;
@@ -3364,8 +3408,8 @@ function ResizeGrip({ panelEl, resize, position, initialSize, onSizeChange, stri
3364
3408
  if (!d || e.pointerId !== d.pointerId || !panelEl) return;
3365
3409
  const dx = (e.clientX - d.startX) * d.dirX;
3366
3410
  const dy = (e.clientY - d.startY) * d.dirY;
3367
- panelEl.style.setProperty(`--${p33}-widget-w`, `${d.startW + dx}px`);
3368
- panelEl.style.setProperty(`--${p33}-widget-h`, `${d.startH + dy}px`);
3411
+ panelEl.style.setProperty(`--${p35}-widget-w`, `${d.startW + dx}px`);
3412
+ panelEl.style.setProperty(`--${p35}-widget-h`, `${d.startH + dy}px`);
3369
3413
  };
3370
3414
  const onPointerUp = (e) => {
3371
3415
  const d = dragRef.current;
@@ -4102,7 +4146,7 @@ function usePopoverMenu({ itemCount, initialFocusIndex }) {
4102
4146
  // src/ui/overflow-menu.tsx
4103
4147
  import { jsx as jsx8, jsxs as jsxs6 } from "preact/jsx-runtime";
4104
4148
  function OverflowMenu({ items, triggerLabel }) {
4105
- const p33 = BRAND.cssPrefix;
4149
+ const p35 = BRAND.cssPrefix;
4106
4150
  const menu = usePopoverMenu({ itemCount: items.length });
4107
4151
  const handleSelect = (item) => {
4108
4152
  if (item.disabled) return;
@@ -4125,13 +4169,13 @@ function OverflowMenu({ items, triggerLabel }) {
4125
4169
  e.stopPropagation();
4126
4170
  pickSegment(item, segs[next].value);
4127
4171
  };
4128
- return /* @__PURE__ */ jsxs6("div", { class: `${p33}-menu-wrap`, children: [
4172
+ return /* @__PURE__ */ jsxs6("div", { class: `${p35}-menu-wrap`, children: [
4129
4173
  /* @__PURE__ */ jsx8(
4130
4174
  "button",
4131
4175
  {
4132
4176
  ref: menu.triggerRef,
4133
4177
  type: "button",
4134
- class: `${p33}-icon-btn`,
4178
+ class: `${p35}-icon-btn`,
4135
4179
  "aria-label": triggerLabel,
4136
4180
  "aria-haspopup": "menu",
4137
4181
  "aria-expanded": menu.open,
@@ -4145,7 +4189,7 @@ function OverflowMenu({ items, triggerLabel }) {
4145
4189
  "div",
4146
4190
  {
4147
4191
  ref: menu.menuRef,
4148
- class: `${p33}-menu`,
4192
+ class: `${p35}-menu`,
4149
4193
  role: "menu",
4150
4194
  "aria-label": triggerLabel,
4151
4195
  onKeyDown: menu.onMenuKey,
@@ -4155,14 +4199,14 @@ function OverflowMenu({ items, triggerLabel }) {
4155
4199
  "div",
4156
4200
  {
4157
4201
  role: "menuitem",
4158
- class: `${p33}-menu-item ${p33}-menu-item-segmented`,
4202
+ class: `${p35}-menu-item ${p35}-menu-item-segmented`,
4159
4203
  "aria-label": item.label,
4160
4204
  tabIndex: -1,
4161
4205
  onKeyDown: (e) => onSegmentRowKey(e, item),
4162
4206
  children: [
4163
- item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p33}-menu-icon`, children: item.icon }) : null,
4164
- /* @__PURE__ */ jsx8("span", { class: `${p33}-menu-label`, children: item.label }),
4165
- /* @__PURE__ */ jsx8("span", { class: `${p33}-segmented`, role: "group", "aria-label": item.label, children: item.segments.map((seg) => {
4207
+ item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-icon`, children: item.icon }) : null,
4208
+ /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-label`, children: item.label }),
4209
+ /* @__PURE__ */ jsx8("span", { class: `${p35}-segmented`, role: "group", "aria-label": item.label, children: item.segments.map((seg) => {
4166
4210
  const active = seg.value === item.value;
4167
4211
  return /* @__PURE__ */ jsx8(
4168
4212
  "button",
@@ -4170,7 +4214,7 @@ function OverflowMenu({ items, triggerLabel }) {
4170
4214
  type: "button",
4171
4215
  role: "menuitemradio",
4172
4216
  "aria-checked": active,
4173
- class: `${p33}-segment`,
4217
+ class: `${p35}-segment`,
4174
4218
  "data-on": active ? "true" : void 0,
4175
4219
  lang: seg.lang,
4176
4220
  title: seg.value,
@@ -4190,14 +4234,14 @@ function OverflowMenu({ items, triggerLabel }) {
4190
4234
  {
4191
4235
  type: "button",
4192
4236
  role: "menuitem",
4193
- class: `${p33}-menu-item`,
4237
+ class: `${p35}-menu-item`,
4194
4238
  "aria-pressed": item.type === "switch" ? item.on : void 0,
4195
4239
  disabled: item.disabled,
4196
4240
  onClick: () => handleSelect(item),
4197
4241
  children: [
4198
- item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p33}-menu-icon`, children: item.icon }) : null,
4199
- /* @__PURE__ */ jsx8("span", { class: `${p33}-menu-label`, children: item.label }),
4200
- item.type === "switch" && item.on ? /* @__PURE__ */ jsx8("span", { class: `${p33}-menu-check`, "aria-hidden": "true", children: /* @__PURE__ */ jsx8(CheckIcon, {}) }) : null
4242
+ item.icon ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-icon`, children: item.icon }) : null,
4243
+ /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-label`, children: item.label }),
4244
+ item.type === "switch" && item.on ? /* @__PURE__ */ jsx8("span", { class: `${p35}-menu-check`, "aria-hidden": "true", children: /* @__PURE__ */ jsx8(CheckIcon, {}) }) : null
4201
4245
  ]
4202
4246
  },
4203
4247
  item.id
@@ -4349,7 +4393,7 @@ function HeaderActions({ panelProps, variant }) {
4349
4393
 
4350
4394
  // src/ui/message-list.tsx
4351
4395
  import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect2, useRef as useRef5, useState as useState6 } from "preact/hooks";
4352
- import { useComputed as useComputed5 } from "@preact/signals";
4396
+ import { useComputed as useComputed6 } from "@preact/signals";
4353
4397
 
4354
4398
  // src/ui/form/dynamic-form.tsx
4355
4399
  import { useState as useState5 } from "preact/hooks";
@@ -4737,7 +4781,7 @@ function FormDoneMarker({
4737
4781
  }
4738
4782
 
4739
4783
  // src/ui/message-bubble.tsx
4740
- import { useComputed as useComputed4 } from "@preact/signals";
4784
+ import { useComputed as useComputed5 } from "@preact/signals";
4741
4785
 
4742
4786
  // src/ui/markdown.tsx
4743
4787
  import { useLayoutEffect, useMemo, useRef as useRef4 } from "preact/hooks";
@@ -4810,10 +4854,27 @@ function hardenLink(a) {
4810
4854
  a.rel = [...tokens].join(" ");
4811
4855
  }
4812
4856
 
4857
+ // src/ui/source-view.tsx
4858
+ import { jsx as jsx13, jsxs as jsxs10 } from "preact/jsx-runtime";
4859
+ var p12 = BRAND.cssPrefix;
4860
+ function SourceView({ part, strings }) {
4861
+ const label = part.title || part.filename || part.url || strings.sources;
4862
+ if (part.url) {
4863
+ return /* @__PURE__ */ jsxs10("a", { class: `${p12}-source`, href: part.url, target: "_blank", rel: "noreferrer noopener", "data-testid": TID.source, children: [
4864
+ /* @__PURE__ */ jsx13("span", { class: `${p12}-source-icon`, "aria-hidden": "true", children: "\u{1F517}" }),
4865
+ /* @__PURE__ */ jsx13("span", { class: `${p12}-source-label`, children: label })
4866
+ ] });
4867
+ }
4868
+ return /* @__PURE__ */ jsxs10("span", { class: `${p12}-source`, "data-testid": TID.source, children: [
4869
+ /* @__PURE__ */ jsx13("span", { class: `${p12}-source-icon`, "aria-hidden": "true", children: "\u{1F4C4}" }),
4870
+ /* @__PURE__ */ jsx13("span", { class: `${p12}-source-label`, children: label })
4871
+ ] });
4872
+ }
4873
+
4813
4874
  // src/ui/tool-approval.tsx
4814
4875
  import { useComputed as useComputed2, useSignal } from "@preact/signals";
4815
- import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs10 } from "preact/jsx-runtime";
4816
- var p12 = BRAND.cssPrefix;
4876
+ import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs11 } from "preact/jsx-runtime";
4877
+ var p13 = BRAND.cssPrefix;
4817
4878
  function displayToolName(toolName) {
4818
4879
  return (toolName.startsWith("tool:") ? toolName.slice(5) : toolName).replace(/[-_]+/g, " ");
4819
4880
  }
@@ -4824,24 +4885,24 @@ function ToolApproval({ part, strings, active, onDecision }) {
4824
4885
  const decided = approval.value?.approved !== void 0;
4825
4886
  if (decided) {
4826
4887
  const ap = approval.value;
4827
- return /* @__PURE__ */ jsxs10("div", { class: `${p12}-tool-approval ${p12}-tool-decided`, "data-testid": TID.toolDecision, children: [
4828
- /* @__PURE__ */ jsx13("span", { class: `${p12}-tool-decided-label`, "data-approved": ap?.approved ? "true" : "false", children: ap?.approved ? strings.approved : strings.rejected }),
4829
- /* @__PURE__ */ jsx13("strong", { class: `${p12}-tool-title`, children: displayToolName(part.toolName) }),
4830
- ap?.reason ? /* @__PURE__ */ jsx13("span", { class: `${p12}-tool-decided-value`, children: ap.reason }) : null
4888
+ return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-approval ${p13}-tool-decided`, "data-testid": TID.toolDecision, children: [
4889
+ /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-label`, "data-approved": ap?.approved ? "true" : "false", children: ap?.approved ? strings.approved : strings.rejected }),
4890
+ /* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: displayToolName(part.toolName) }),
4891
+ ap?.reason ? /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-value`, children: ap.reason }) : null
4831
4892
  ] });
4832
4893
  }
4833
4894
  const args = summarizeInput(input.value);
4834
- return /* @__PURE__ */ jsxs10("div", { class: `${p12}-tool-approval`, "data-testid": TID.toolApproval, children: [
4835
- /* @__PURE__ */ jsxs10("div", { class: `${p12}-tool-head`, children: [
4836
- /* @__PURE__ */ jsx13("span", { class: `${p12}-tool-badge`, children: strings.approvalRequired }),
4837
- /* @__PURE__ */ jsx13("strong", { class: `${p12}-tool-title`, children: displayToolName(part.toolName) })
4895
+ return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-approval`, "data-testid": TID.toolApproval, children: [
4896
+ /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-head`, children: [
4897
+ /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-badge`, children: strings.approvalRequired }),
4898
+ /* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: displayToolName(part.toolName) })
4838
4899
  ] }),
4839
- args ? /* @__PURE__ */ jsx13("pre", { class: `${p12}-tool-args`, children: args }) : null,
4840
- active ? /* @__PURE__ */ jsxs10(Fragment2, { children: [
4841
- /* @__PURE__ */ jsx13(
4900
+ args ? /* @__PURE__ */ jsx14("pre", { class: `${p13}-tool-args`, children: args }) : null,
4901
+ active ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
4902
+ /* @__PURE__ */ jsx14(
4842
4903
  "input",
4843
4904
  {
4844
- class: `${p12}-field-input`,
4905
+ class: `${p13}-field-input`,
4845
4906
  value: reason.value,
4846
4907
  placeholder: strings.approvalReason,
4847
4908
  onInput: (e) => {
@@ -4849,29 +4910,29 @@ function ToolApproval({ part, strings, active, onDecision }) {
4849
4910
  }
4850
4911
  }
4851
4912
  ),
4852
- /* @__PURE__ */ jsxs10("div", { class: `${p12}-form-actions`, children: [
4853
- /* @__PURE__ */ jsx13(
4913
+ /* @__PURE__ */ jsxs11("div", { class: `${p13}-form-actions`, children: [
4914
+ /* @__PURE__ */ jsx14(
4854
4915
  "button",
4855
4916
  {
4856
4917
  type: "button",
4857
- class: `${p12}-tool-reject`,
4918
+ class: `${p13}-tool-reject`,
4858
4919
  onClick: () => onDecision(part.toolCallId, false, reason.value.trim() || void 0),
4859
4920
  "data-testid": TID.toolReject,
4860
4921
  children: strings.reject
4861
4922
  }
4862
4923
  ),
4863
- /* @__PURE__ */ jsx13(
4924
+ /* @__PURE__ */ jsx14(
4864
4925
  "button",
4865
4926
  {
4866
4927
  type: "button",
4867
- class: `${p12}-tool-approve`,
4928
+ class: `${p13}-tool-approve`,
4868
4929
  onClick: () => onDecision(part.toolCallId, true, reason.value.trim() || void 0),
4869
4930
  "data-testid": TID.toolApprove,
4870
4931
  children: strings.approve
4871
4932
  }
4872
4933
  )
4873
4934
  ] })
4874
- ] }) : /* @__PURE__ */ jsx13("p", { class: `${p12}-tool-stale-note`, children: strings.stepNoLongerActive })
4935
+ ] }) : /* @__PURE__ */ jsx14("p", { class: `${p13}-tool-stale-note`, children: strings.stepNoLongerActive })
4875
4936
  ] });
4876
4937
  }
4877
4938
  function summarizeInput(input) {
@@ -4942,13 +5003,13 @@ function num(v) {
4942
5003
  }
4943
5004
 
4944
5005
  // src/ui/tool-ask-input.tsx
4945
- import { jsx as jsx14, jsxs as jsxs11 } from "preact/jsx-runtime";
4946
- var p13 = BRAND.cssPrefix;
5006
+ import { jsx as jsx15, jsxs as jsxs12 } from "preact/jsx-runtime";
5007
+ var p14 = BRAND.cssPrefix;
4947
5008
  function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
4948
5009
  const state = useComputed3(() => part.stateSig.value);
4949
5010
  const approval = useComputed3(() => part.approvalSig.value);
4950
5011
  const request = useComputed3(() => parseAskUserInput(part.inputSig.value));
4951
- const decided = state.value === "output" || state.value === "error" || approval.value?.approved !== void 0;
5012
+ const decided = state.value === "output-available" || state.value === "output-error" || state.value === "output-denied" || state.value === "approval-responded" || approval.value?.approved !== void 0;
4952
5013
  const viaApproval = approval.value !== void 0;
4953
5014
  const resolve = (answer, accepted) => {
4954
5015
  if (viaApproval) onDecision(part.toolCallId, accepted, answer);
@@ -4956,42 +5017,42 @@ function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
4956
5017
  else onSubmit(part.toolCallId, accepted ? { answer } : {});
4957
5018
  };
4958
5019
  if (decided) {
4959
- return /* @__PURE__ */ jsx14(DecidedSummary, { part, strings });
5020
+ return /* @__PURE__ */ jsx15(DecidedSummary, { part, strings });
4960
5021
  }
4961
5022
  if (!active) {
4962
- return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-ask-input ${p13}-tool-stale`, "data-testid": TID.toolAskInput, children: [
4963
- /* @__PURE__ */ jsx14(Header, { strings, title: request.value.title ?? request.value.question }),
4964
- /* @__PURE__ */ jsx14("p", { class: `${p13}-tool-stale-note`, children: strings.stepNoLongerActive })
5023
+ return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input ${p14}-tool-stale`, "data-testid": TID.toolAskInput, children: [
5024
+ /* @__PURE__ */ jsx15(Header, { strings, title: request.value.title ?? request.value.question }),
5025
+ /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-stale-note`, children: strings.stepNoLongerActive })
4965
5026
  ] });
4966
5027
  }
4967
5028
  const req = request.value;
4968
5029
  const isConfirmation = req.responseType === "confirmation";
4969
- return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-ask-input`, "data-testid": TID.toolAskInput, children: [
4970
- /* @__PURE__ */ jsx14(Header, { strings, title: req.title }),
4971
- req.description ? /* @__PURE__ */ jsx14("p", { class: `${p13}-tool-desc`, children: req.description }) : null,
4972
- isConfirmation ? /* @__PURE__ */ jsx14("p", { class: `${p13}-tool-question`, children: req.question }) : null,
4973
- isConfirmation ? /* @__PURE__ */ jsxs11("div", { class: `${p13}-form-actions`, children: [
4974
- /* @__PURE__ */ jsx14(
5030
+ return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input`, "data-testid": TID.toolAskInput, children: [
5031
+ /* @__PURE__ */ jsx15(Header, { strings, title: req.title }),
5032
+ req.description ? /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-desc`, children: req.description }) : null,
5033
+ isConfirmation ? /* @__PURE__ */ jsx15("p", { class: `${p14}-tool-question`, children: req.question }) : null,
5034
+ isConfirmation ? /* @__PURE__ */ jsxs12("div", { class: `${p14}-form-actions`, children: [
5035
+ /* @__PURE__ */ jsx15(
4975
5036
  "button",
4976
5037
  {
4977
5038
  type: "button",
4978
- class: `${p13}-form-skip`,
5039
+ class: `${p14}-form-skip`,
4979
5040
  onClick: () => resolve(void 0, false),
4980
5041
  "data-testid": TID.toolInputSkip,
4981
5042
  children: strings.reject
4982
5043
  }
4983
5044
  ),
4984
- /* @__PURE__ */ jsx14(
5045
+ /* @__PURE__ */ jsx15(
4985
5046
  "button",
4986
5047
  {
4987
5048
  type: "button",
4988
- class: `${p13}-form-submit`,
5049
+ class: `${p14}-form-submit`,
4989
5050
  onClick: () => resolve(void 0, true),
4990
5051
  "data-testid": TID.toolInputSubmit,
4991
5052
  children: strings.approve
4992
5053
  }
4993
5054
  )
4994
- ] }) : /* @__PURE__ */ jsx14(
5055
+ ] }) : /* @__PURE__ */ jsx15(
4995
5056
  DynamicForm,
4996
5057
  {
4997
5058
  fields: askInputToFields(req),
@@ -5007,9 +5068,9 @@ function ToolAskInput({ part, strings, active, onSubmit, onDecision }) {
5007
5068
  ] });
5008
5069
  }
5009
5070
  function Header({ strings, title }) {
5010
- return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-head`, children: [
5011
- /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-badge`, children: strings.inputRequired }),
5012
- title ? /* @__PURE__ */ jsx14("strong", { class: `${p13}-tool-title`, children: title }) : null
5071
+ return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-head`, children: [
5072
+ /* @__PURE__ */ jsx15("span", { class: `${p14}-tool-badge`, children: strings.inputRequired }),
5073
+ title ? /* @__PURE__ */ jsx15("strong", { class: `${p14}-tool-title`, children: title }) : null
5013
5074
  ] });
5014
5075
  }
5015
5076
  function DecidedSummary({ part, strings }) {
@@ -5017,9 +5078,9 @@ function DecidedSummary({ part, strings }) {
5017
5078
  const approval = useComputed3(() => part.approvalSig.value);
5018
5079
  const answer = approval.value?.approved !== void 0 ? approval.value.reason ?? "" : summarizeOutput(output.value);
5019
5080
  const skipped = approval.value?.approved === false;
5020
- return /* @__PURE__ */ jsxs11("div", { class: `${p13}-tool-ask-input ${p13}-tool-decided`, "data-testid": TID.toolDecision, children: [
5021
- /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-label`, children: skipped ? strings.inputSkip : strings.inputSubmitted }),
5022
- /* @__PURE__ */ jsx14("span", { class: `${p13}-tool-decided-value`, children: skipped ? "" : answer || strings.inputSubmitted })
5081
+ return /* @__PURE__ */ jsxs12("div", { class: `${p14}-tool-ask-input ${p14}-tool-decided`, "data-testid": TID.toolDecision, children: [
5082
+ /* @__PURE__ */ jsx15("span", { class: `${p14}-tool-decided-label`, children: skipped ? strings.inputSkip : strings.inputSubmitted }),
5083
+ /* @__PURE__ */ jsx15("span", { class: `${p14}-tool-decided-value`, children: skipped ? "" : answer || strings.inputSubmitted })
5023
5084
  ] });
5024
5085
  }
5025
5086
  function summarizeOutput(output) {
@@ -5033,37 +5094,70 @@ function summarizeOutput(output) {
5033
5094
  return String(output);
5034
5095
  }
5035
5096
 
5036
- // src/ui/tool-chip.tsx
5037
- import { jsx as jsx15, jsxs as jsxs12 } from "preact/jsx-runtime";
5038
- function ToolChip({ part, strings }) {
5039
- const p33 = BRAND.cssPrefix;
5040
- return /* @__PURE__ */ jsxs12("span", { class: `${p33}-tool-chip`, role: "status", children: [
5041
- /* @__PURE__ */ jsxs12("span", { children: [
5042
- strings.usedTool,
5043
- ":"
5097
+ // src/ui/tool-call.tsx
5098
+ import { useComputed as useComputed4 } from "@preact/signals";
5099
+ import { jsx as jsx16, jsxs as jsxs13 } from "preact/jsx-runtime";
5100
+ var p15 = BRAND.cssPrefix;
5101
+ function displayToolName2(toolName) {
5102
+ return (toolName.startsWith("tool:") ? toolName.slice(5) : toolName).replace(/[-_]+/g, " ").trim();
5103
+ }
5104
+ function ToolCall({ part, strings }) {
5105
+ const details = useComputed4(() => pretty(part.inputSig.value));
5106
+ const result = useComputed4(() => part.errorSig.value ?? pretty(unwrapResult(part.outputSig.value)));
5107
+ const isError = useComputed4(() => !!part.errorSig.value);
5108
+ if (!details.value && !result.value) return null;
5109
+ return /* @__PURE__ */ jsxs13("details", { class: `${p15}-tool-call`, "data-testid": TID.toolCall, children: [
5110
+ /* @__PURE__ */ jsxs13("summary", { class: `${p15}-tool-call-summary`, children: [
5111
+ /* @__PURE__ */ jsx16("span", { class: `${p15}-tool-badge`, children: strings.usedTool }),
5112
+ /* @__PURE__ */ jsx16("strong", { class: `${p15}-tool-title`, children: displayToolName2(part.toolName) })
5044
5113
  ] }),
5045
- /* @__PURE__ */ jsx15("strong", { children: part.toolName })
5114
+ details.value ? /* @__PURE__ */ jsxs13("div", { class: `${p15}-tool-call-section`, children: [
5115
+ /* @__PURE__ */ jsx16("span", { class: `${p15}-tool-call-label`, children: strings.toolDetails }),
5116
+ /* @__PURE__ */ jsx16("pre", { class: `${p15}-tool-args`, children: details.value })
5117
+ ] }) : null,
5118
+ result.value ? /* @__PURE__ */ jsxs13("div", { class: `${p15}-tool-call-section`, "data-error": isError.value ? "true" : void 0, children: [
5119
+ /* @__PURE__ */ jsx16("span", { class: `${p15}-tool-call-label`, children: strings.toolResult }),
5120
+ /* @__PURE__ */ jsx16("pre", { class: `${p15}-tool-args`, children: result.value })
5121
+ ] }) : null
5046
5122
  ] });
5047
5123
  }
5124
+ function unwrapResult(output) {
5125
+ if (output && typeof output === "object") {
5126
+ const rec = output;
5127
+ if (rec.storage === "tool-result-ref" && "summary" in rec) return rec.summary;
5128
+ }
5129
+ return output;
5130
+ }
5131
+ function pretty(value) {
5132
+ if (value == null) return "";
5133
+ try {
5134
+ const json = typeof value === "string" ? value : JSON.stringify(value, null, 2);
5135
+ if (!json || json === "{}" || json === "[]" || json === '""') return "";
5136
+ return json.length > 600 ? `${json.slice(0, 600)}\u2026` : json;
5137
+ } catch {
5138
+ return "";
5139
+ }
5140
+ }
5048
5141
 
5049
5142
  // src/ui/message-bubble.tsx
5050
- import { jsx as jsx16, jsxs as jsxs13 } from "preact/jsx-runtime";
5051
- var p14 = BRAND.cssPrefix;
5143
+ import { jsx as jsx17, jsxs as jsxs14 } from "preact/jsx-runtime";
5144
+ var p16 = BRAND.cssPrefix;
5052
5145
  function MessageBubble({
5053
5146
  message,
5054
5147
  strings,
5055
5148
  responseMode,
5056
5149
  showReasoning,
5057
5150
  showToolCalls,
5151
+ showSources,
5058
5152
  interactive = false,
5059
5153
  tool
5060
5154
  }) {
5061
- const parts = useComputed4(() => message.partsSig.value);
5155
+ const parts = useComputed5(() => message.partsSig.value);
5062
5156
  const partList = parts.value;
5063
- const hasAnswerText = useComputed4(
5157
+ const hasAnswerText = useComputed5(
5064
5158
  () => message.partsSig.value.some((part) => part.kind === "text" && part.textSig.value.length > 0)
5065
5159
  );
5066
- const reasoningVisible = useComputed4(
5160
+ const reasoningVisible = useComputed5(
5067
5161
  () => showReasoning && message.partsSig.value.some((part) => part.kind === "reasoning")
5068
5162
  );
5069
5163
  const streaming = message.role === "assistant" && message.status === "streaming";
@@ -5071,9 +5165,9 @@ function MessageBubble({
5071
5165
  const working = streaming && !hasAnswerText.value;
5072
5166
  const showStreamDots = streaming && !bufferedHold && !(reasoningVisible.value && working);
5073
5167
  const stamp = formatStamp(message.createdAt);
5074
- return /* @__PURE__ */ jsx16("div", { class: `${p14}-bubble-row`, "data-role": message.role, "data-testid": tid(TID.messageBubble, message.id), children: /* @__PURE__ */ jsxs13("div", { class: `${p14}-bubble-col`, children: [
5075
- /* @__PURE__ */ jsxs13("div", { class: `${p14}-bubble`, children: [
5076
- bufferedHold ? /* @__PURE__ */ jsx16(LoadingSpinner, { label: strings.loading }) : partList.map((part) => /* @__PURE__ */ jsx16(
5168
+ return /* @__PURE__ */ jsx17("div", { class: `${p16}-bubble-row`, "data-role": message.role, "data-testid": tid(TID.messageBubble, message.id), children: /* @__PURE__ */ jsxs14("div", { class: `${p16}-bubble-col`, children: [
5169
+ /* @__PURE__ */ jsxs14("div", { class: `${p16}-bubble`, children: [
5170
+ bufferedHold ? /* @__PURE__ */ jsx17(LoadingSpinner, { label: strings.loading }) : partList.map((part) => /* @__PURE__ */ jsx17(
5077
5171
  PartView,
5078
5172
  {
5079
5173
  part,
@@ -5081,15 +5175,16 @@ function MessageBubble({
5081
5175
  strings,
5082
5176
  showReasoning,
5083
5177
  showToolCalls,
5178
+ showSources,
5084
5179
  interactive,
5085
5180
  tool
5086
5181
  },
5087
5182
  partKey(part)
5088
5183
  )),
5089
- showStreamDots && /* @__PURE__ */ jsx16(TypingDots, {}),
5090
- message.status === "error" && message.errorText ? /* @__PURE__ */ jsx16("div", { class: `${p14}-error`, role: "alert", children: /* @__PURE__ */ jsx16("span", { children: message.errorText }) }) : null
5184
+ showStreamDots && /* @__PURE__ */ jsx17(TypingDots, {}),
5185
+ message.status === "error" && message.errorText ? /* @__PURE__ */ jsx17("div", { class: `${p16}-error`, role: "alert", children: /* @__PURE__ */ jsx17("span", { children: message.errorText }) }) : null
5091
5186
  ] }),
5092
- stamp ? /* @__PURE__ */ jsx16("time", { class: `${p14}-bubble-time`, dateTime: stamp.iso, title: stamp.full, children: stamp.short }) : null
5187
+ stamp ? /* @__PURE__ */ jsx17("time", { class: `${p16}-bubble-time`, dateTime: stamp.iso, title: stamp.full, children: stamp.short }) : null
5093
5188
  ] }) });
5094
5189
  }
5095
5190
  function formatStamp(createdAt) {
@@ -5111,16 +5206,17 @@ function PartView({
5111
5206
  strings,
5112
5207
  showReasoning,
5113
5208
  showToolCalls,
5209
+ showSources,
5114
5210
  interactive,
5115
5211
  tool
5116
5212
  }) {
5117
5213
  switch (part.kind) {
5118
5214
  case "text":
5119
- return /* @__PURE__ */ jsx16(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig });
5215
+ return /* @__PURE__ */ jsx17(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig });
5120
5216
  case "reasoning":
5121
- return showReasoning ? /* @__PURE__ */ jsx16(ReasoningView, { part, active, strings }) : null;
5217
+ return showReasoning ? /* @__PURE__ */ jsx17(ReasoningView, { part, active, strings }) : null;
5122
5218
  case "tool":
5123
- return /* @__PURE__ */ jsx16(
5219
+ return /* @__PURE__ */ jsx17(
5124
5220
  ToolPartView,
5125
5221
  {
5126
5222
  part,
@@ -5132,11 +5228,11 @@ function PartView({
5132
5228
  );
5133
5229
  case "file":
5134
5230
  if (part.mediaType.startsWith("image/")) {
5135
- return /* @__PURE__ */ jsx16("img", { src: part.url, alt: "", loading: "lazy" });
5231
+ return /* @__PURE__ */ jsx17("img", { src: part.url, alt: "", loading: "lazy" });
5136
5232
  }
5137
- return /* @__PURE__ */ jsx16("a", { href: part.url, target: "_blank", rel: "noreferrer noopener", children: part.url });
5233
+ return /* @__PURE__ */ jsx17("a", { href: part.url, target: "_blank", rel: "noreferrer noopener", children: part.url });
5138
5234
  case "source":
5139
- return null;
5235
+ return showSources ? /* @__PURE__ */ jsx17(SourceView, { part, strings }) : null;
5140
5236
  }
5141
5237
  }
5142
5238
  function ToolPartView({
@@ -5146,11 +5242,10 @@ function ToolPartView({
5146
5242
  interactive,
5147
5243
  tool
5148
5244
  }) {
5149
- const state = useComputed4(() => part.stateSig.value);
5150
- const hasApproval = useComputed4(() => part.approvalSig.value !== void 0);
5245
+ const hasApproval = useComputed5(() => part.approvalSig.value !== void 0);
5151
5246
  if (tool?.humanInLoop) {
5152
- if (isAskUserInputTool(part.toolName) || state.value === "awaiting-input") {
5153
- return /* @__PURE__ */ jsx16(
5247
+ if (isAskUserInputTool(part.toolName)) {
5248
+ return /* @__PURE__ */ jsx17(
5154
5249
  ToolAskInput,
5155
5250
  {
5156
5251
  part,
@@ -5161,20 +5256,20 @@ function ToolPartView({
5161
5256
  }
5162
5257
  );
5163
5258
  }
5164
- if (hasApproval.value || state.value === "awaiting-approval") {
5165
- return /* @__PURE__ */ jsx16(ToolApproval, { part, strings, active: interactive, onDecision: tool.onDecision });
5259
+ if (hasApproval.value) {
5260
+ return /* @__PURE__ */ jsx17(ToolApproval, { part, strings, active: interactive, onDecision: tool.onDecision });
5166
5261
  }
5167
5262
  }
5168
- return showToolCalls ? /* @__PURE__ */ jsx16(ToolChip, { part, strings }) : null;
5263
+ return showToolCalls ? /* @__PURE__ */ jsx17(ToolCall, { part, strings }) : null;
5169
5264
  }
5170
5265
  function ReasoningView({
5171
5266
  part,
5172
5267
  active,
5173
5268
  strings
5174
5269
  }) {
5175
- return /* @__PURE__ */ jsxs13("details", { class: `${p14}-reasoning`, open: active, "data-active": active ? "true" : void 0, children: [
5176
- /* @__PURE__ */ jsx16("summary", { class: `${p14}-reasoning-summary`, children: /* @__PURE__ */ jsx16("span", { class: `${p14}-reasoning-label`, children: active ? strings.thinking : strings.thoughts }) }),
5177
- /* @__PURE__ */ jsx16("div", { class: `${p14}-reasoning-body`, children: /* @__PURE__ */ jsx16(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig }) })
5270
+ return /* @__PURE__ */ jsxs14("details", { class: `${p16}-reasoning`, open: active, "data-active": active ? "true" : void 0, children: [
5271
+ /* @__PURE__ */ jsx17("summary", { class: `${p16}-reasoning-summary`, children: /* @__PURE__ */ jsx17("span", { class: `${p16}-reasoning-label`, children: active ? strings.thinking : strings.thoughts }) }),
5272
+ /* @__PURE__ */ jsx17("div", { class: `${p16}-reasoning-body`, children: /* @__PURE__ */ jsx17(MarkdownView, { textSig: part.textSig, doneSig: part.doneSig }) })
5178
5273
  ] });
5179
5274
  }
5180
5275
  function partKey(part) {
@@ -5191,22 +5286,22 @@ function partKey(part) {
5191
5286
  }
5192
5287
  }
5193
5288
  function TypingDots() {
5194
- return /* @__PURE__ */ jsxs13("span", { class: `${p14}-typing`, "aria-hidden": "true", children: [
5195
- /* @__PURE__ */ jsx16("span", {}),
5196
- /* @__PURE__ */ jsx16("span", {}),
5197
- /* @__PURE__ */ jsx16("span", {})
5289
+ return /* @__PURE__ */ jsxs14("span", { class: `${p16}-typing`, "aria-hidden": "true", children: [
5290
+ /* @__PURE__ */ jsx17("span", {}),
5291
+ /* @__PURE__ */ jsx17("span", {}),
5292
+ /* @__PURE__ */ jsx17("span", {})
5198
5293
  ] });
5199
5294
  }
5200
5295
  function LoadingSpinner({ label }) {
5201
- return /* @__PURE__ */ jsxs13("span", { class: `${p14}-loading`, role: "status", children: [
5202
- /* @__PURE__ */ jsx16("span", { class: `${p14}-loading-spinner`, "aria-hidden": "true" }),
5203
- /* @__PURE__ */ jsx16("span", { class: `${p14}-loading-label`, children: label })
5296
+ return /* @__PURE__ */ jsxs14("span", { class: `${p16}-loading`, role: "status", children: [
5297
+ /* @__PURE__ */ jsx17("span", { class: `${p16}-loading-spinner`, "aria-hidden": "true" }),
5298
+ /* @__PURE__ */ jsx17("span", { class: `${p16}-loading-label`, children: label })
5204
5299
  ] });
5205
5300
  }
5206
5301
 
5207
5302
  // src/ui/message-list.tsx
5208
- import { jsx as jsx17, jsxs as jsxs14 } from "preact/jsx-runtime";
5209
- var p15 = BRAND.cssPrefix;
5303
+ import { jsx as jsx18, jsxs as jsxs15 } from "preact/jsx-runtime";
5304
+ var p17 = BRAND.cssPrefix;
5210
5305
  var STICK_THRESHOLD = 120;
5211
5306
  var INTERACTION_GRACE_MS = 350;
5212
5307
  var DIVIDER_IDLE_MS = 1200;
@@ -5216,6 +5311,7 @@ function MessageList({
5216
5311
  responseMode,
5217
5312
  showReasoning,
5218
5313
  showToolCalls,
5314
+ showSources,
5219
5315
  loading,
5220
5316
  idle,
5221
5317
  tool,
@@ -5224,7 +5320,7 @@ function MessageList({
5224
5320
  onFillForm
5225
5321
  }) {
5226
5322
  const ref = useRef5(null);
5227
- const messages = useComputed5(() => messagesSig.value);
5323
+ const messages = useComputed6(() => messagesSig.value);
5228
5324
  const [showJump, setShowJump] = useState6(false);
5229
5325
  const [scrolling, setScrolling] = useState6(false);
5230
5326
  const hasHydratedRef = useRef5(false);
@@ -5376,7 +5472,7 @@ function MessageList({
5376
5472
  const pendingMarkers = [...formMarkers ?? []].toSorted(
5377
5473
  (a, b) => (a.createdAt ?? Infinity) - (b.createdAt ?? Infinity)
5378
5474
  );
5379
- const markerRow = (marker) => /* @__PURE__ */ jsx17(
5475
+ const markerRow = (marker) => /* @__PURE__ */ jsx18(
5380
5476
  FormDoneMarker,
5381
5477
  {
5382
5478
  marker,
@@ -5397,12 +5493,12 @@ function MessageList({
5397
5493
  const day = dayKey(m.createdAt);
5398
5494
  if (day && day !== prevDay) {
5399
5495
  rows.push(
5400
- /* @__PURE__ */ jsx17("div", { class: `${p15}-date-divider`, children: /* @__PURE__ */ jsx17("span", { class: `${p15}-date-pill`, title: fullDate(m.createdAt), children: dayLabel(m.createdAt, strings) }) }, `day:${day}`)
5496
+ /* @__PURE__ */ jsx18("div", { class: `${p17}-date-divider`, children: /* @__PURE__ */ jsx18("span", { class: `${p17}-date-pill`, title: fullDate(m.createdAt), children: dayLabel(m.createdAt, strings) }) }, `day:${day}`)
5401
5497
  );
5402
5498
  prevDay = day;
5403
5499
  }
5404
5500
  rows.push(
5405
- /* @__PURE__ */ jsx17(
5501
+ /* @__PURE__ */ jsx18(
5406
5502
  MessageBubble,
5407
5503
  {
5408
5504
  message: m,
@@ -5410,6 +5506,7 @@ function MessageList({
5410
5506
  responseMode,
5411
5507
  showReasoning,
5412
5508
  showToolCalls,
5509
+ showSources,
5413
5510
  interactive: Boolean(idle) && m.id === lastId,
5414
5511
  tool
5415
5512
  },
@@ -5420,33 +5517,33 @@ function MessageList({
5420
5517
  for (const marker of pendingMarkers) {
5421
5518
  rows.push(markerRow(marker));
5422
5519
  }
5423
- return /* @__PURE__ */ jsxs14("div", { class: `${p15}-list-wrap`, children: [
5424
- /* @__PURE__ */ jsxs14(
5520
+ return /* @__PURE__ */ jsxs15("div", { class: `${p17}-list-wrap`, children: [
5521
+ /* @__PURE__ */ jsxs15(
5425
5522
  "div",
5426
5523
  {
5427
5524
  ref,
5428
- class: `${p15}-list`,
5525
+ class: `${p17}-list`,
5429
5526
  role: "log",
5430
5527
  "aria-live": "polite",
5431
5528
  "aria-relevant": "additions text",
5432
5529
  "data-scrolling": scrolling ? "true" : void 0,
5433
5530
  children: [
5434
- loading && messages.value.length === 0 ? /* @__PURE__ */ jsx17("div", { class: `${p15}-list-loading`, role: "status", children: strings.conversationLoading }) : null,
5531
+ loading && messages.value.length === 0 ? /* @__PURE__ */ jsx18("div", { class: `${p17}-list-loading`, role: "status", children: strings.conversationLoading }) : null,
5435
5532
  rows,
5436
- form ? /* @__PURE__ */ jsx17(FormGate, { form: form.form, strings, onSubmit: form.onSubmit, onSkip: form.onSkip }) : null
5533
+ form ? /* @__PURE__ */ jsx18(FormGate, { form: form.form, strings, onSubmit: form.onSubmit, onSkip: form.onSkip }) : null
5437
5534
  ]
5438
5535
  }
5439
5536
  ),
5440
- showJump ? /* @__PURE__ */ jsx17(
5537
+ showJump ? /* @__PURE__ */ jsx18(
5441
5538
  "button",
5442
5539
  {
5443
5540
  type: "button",
5444
- class: `${p15}-jump`,
5541
+ class: `${p17}-jump`,
5445
5542
  onClick: jumpToBottom,
5446
5543
  "aria-label": strings.scrollToBottom,
5447
5544
  title: strings.scrollToBottom,
5448
5545
  "data-testid": TID.scrollToBottom,
5449
- children: /* @__PURE__ */ jsx17(ChevronDownIcon, {})
5546
+ children: /* @__PURE__ */ jsx18(ChevronDownIcon, {})
5450
5547
  }
5451
5548
  ) : null
5452
5549
  ] });
@@ -5505,7 +5602,7 @@ function startOfDay(ms) {
5505
5602
  }
5506
5603
 
5507
5604
  // src/ui/conversation-list.tsx
5508
- import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs15 } from "preact/jsx-runtime";
5605
+ import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs16 } from "preact/jsx-runtime";
5509
5606
  var log12 = logger.scope("history");
5510
5607
  var DEFAULT_SKELETON_ROWS = 3;
5511
5608
  var MAX_SKELETON_ROWS = 6;
@@ -5532,7 +5629,7 @@ function ConversationList({
5532
5629
  onSelect,
5533
5630
  onNewConversation
5534
5631
  }) {
5535
- const p33 = BRAND.cssPrefix;
5632
+ const p35 = BRAND.cssPrefix;
5536
5633
  const seed = transport.peekConversations({ visitorId });
5537
5634
  const [state, setState] = useState7(seed ? "loaded" : "loading");
5538
5635
  const [conversations, setChats] = useState7(seed?.conversations ?? []);
@@ -5553,32 +5650,32 @@ function ConversationList({
5553
5650
  cancelled = true;
5554
5651
  };
5555
5652
  }, [transport, visitorId, persistence]);
5556
- const newChatButton = onNewConversation ? /* @__PURE__ */ jsx18("div", { class: `${p33}-history-footer`, children: /* @__PURE__ */ jsxs15(
5653
+ const newChatButton = onNewConversation ? /* @__PURE__ */ jsx19("div", { class: `${p35}-history-footer`, children: /* @__PURE__ */ jsxs16(
5557
5654
  "button",
5558
5655
  {
5559
5656
  type: "button",
5560
- class: `${p33}-history-new`,
5657
+ class: `${p35}-history-new`,
5561
5658
  onClick: onNewConversation,
5562
5659
  "data-testid": TID.sidebarNewConversation,
5563
5660
  children: [
5564
- /* @__PURE__ */ jsx18(PlusIcon, {}),
5661
+ /* @__PURE__ */ jsx19(PlusIcon, {}),
5565
5662
  strings.newConversation
5566
5663
  ]
5567
5664
  }
5568
5665
  ) }) : null;
5569
5666
  if (state === "loading") {
5570
5667
  const rows = Math.min(persistence.loadHistoryCount() ?? DEFAULT_SKELETON_ROWS, MAX_SKELETON_ROWS);
5571
- return /* @__PURE__ */ jsxs15(Fragment3, { children: [
5572
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history`, "aria-busy": "true", "aria-label": strings.historyLoading, children: /* @__PURE__ */ jsxs15("div", { class: `${p33}-history-group`, "aria-hidden": "true", children: [
5573
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history-heading`, children: /* @__PURE__ */ jsx18("span", { class: `${p33}-skeleton ${p33}-skeleton-heading` }) }),
5574
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history-card`, children: Array.from({ length: Math.max(1, rows) }, (_, i) => /* @__PURE__ */ jsxs15("div", { class: `${p33}-history-item ${p33}-history-item-skeleton`, children: [
5575
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-avatar ${p33}-skeleton` }),
5576
- /* @__PURE__ */ jsxs15("span", { class: `${p33}-history-body`, children: [
5577
- /* @__PURE__ */ jsxs15("span", { class: `${p33}-history-row`, children: [
5578
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-title`, children: /* @__PURE__ */ jsx18("span", { class: `${p33}-skeleton ${p33}-skeleton-title` }) }),
5579
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-time`, children: /* @__PURE__ */ jsx18("span", { class: `${p33}-skeleton ${p33}-skeleton-time` }) })
5668
+ return /* @__PURE__ */ jsxs16(Fragment3, { children: [
5669
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history`, "aria-busy": "true", "aria-label": strings.historyLoading, children: /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-group`, "aria-hidden": "true", children: [
5670
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history-heading`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-heading` }) }),
5671
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history-card`, children: Array.from({ length: Math.max(1, rows) }, (_, i) => /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-item ${p35}-history-item-skeleton`, children: [
5672
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-avatar ${p35}-skeleton` }),
5673
+ /* @__PURE__ */ jsxs16("span", { class: `${p35}-history-body`, children: [
5674
+ /* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
5675
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-title`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-title` }) }),
5676
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-time`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-time` }) })
5580
5677
  ] }),
5581
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-row`, children: /* @__PURE__ */ jsx18("span", { class: `${p33}-history-preview`, children: /* @__PURE__ */ jsx18("span", { class: `${p33}-skeleton ${p33}-skeleton-preview` }) }) })
5678
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-row`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-history-preview`, children: /* @__PURE__ */ jsx19("span", { class: `${p35}-skeleton ${p35}-skeleton-preview` }) }) })
5582
5679
  ] })
5583
5680
  ] }, i)) })
5584
5681
  ] }) }),
@@ -5586,36 +5683,36 @@ function ConversationList({
5586
5683
  ] });
5587
5684
  }
5588
5685
  if (state === "error" || conversations.length === 0) {
5589
- return /* @__PURE__ */ jsxs15(Fragment3, { children: [
5590
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history-empty`, children: strings.historyEmpty }),
5686
+ return /* @__PURE__ */ jsxs16(Fragment3, { children: [
5687
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history-empty`, children: strings.historyEmpty }),
5591
5688
  newChatButton
5592
5689
  ] });
5593
5690
  }
5594
5691
  const now = Date.now();
5595
5692
  const groups = groupByBucket(now, conversations);
5596
- return /* @__PURE__ */ jsxs15(Fragment3, { children: [
5597
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history`, role: "list", children: groups.map((group) => /* @__PURE__ */ jsxs15("div", { class: `${p33}-history-group`, children: [
5598
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history-heading`, children: strings[BUCKET_TO_STRING[group.bucket]] }),
5599
- /* @__PURE__ */ jsx18("div", { class: `${p33}-history-card`, children: group.conversations.map((chat) => /* @__PURE__ */ jsxs15(
5693
+ return /* @__PURE__ */ jsxs16(Fragment3, { children: [
5694
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history`, role: "list", children: groups.map((group) => /* @__PURE__ */ jsxs16("div", { class: `${p35}-history-group`, children: [
5695
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history-heading`, children: strings[BUCKET_TO_STRING[group.bucket]] }),
5696
+ /* @__PURE__ */ jsx19("div", { class: `${p35}-history-card`, children: group.conversations.map((chat) => /* @__PURE__ */ jsxs16(
5600
5697
  "button",
5601
5698
  {
5602
5699
  type: "button",
5603
5700
  role: "listitem",
5604
- class: `${p33}-history-item`,
5701
+ class: `${p35}-history-item`,
5605
5702
  onClick: () => onSelect(chat),
5606
5703
  "data-closed": chat.canContinue ? void 0 : "true",
5607
5704
  "data-unread": (chat.unreadCount ?? 0) > 0 ? "true" : void 0,
5608
5705
  "data-testid": tid(TID.historyItem, chat.conversationId),
5609
5706
  children: [
5610
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx18(MessageIcon, {}) }),
5611
- /* @__PURE__ */ jsxs15("span", { class: `${p33}-history-body`, children: [
5612
- /* @__PURE__ */ jsxs15("span", { class: `${p33}-history-row`, children: [
5613
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-title`, children: chat.title }),
5614
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-time`, children: rowTime(chat.lastMessageAt, now, locale) })
5707
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx19(MessageIcon, {}) }),
5708
+ /* @__PURE__ */ jsxs16("span", { class: `${p35}-history-body`, children: [
5709
+ /* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
5710
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-title`, children: chat.title }),
5711
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-time`, children: rowTime(chat.lastMessageAt, now, locale) })
5615
5712
  ] }),
5616
- /* @__PURE__ */ jsxs15("span", { class: `${p33}-history-row`, children: [
5617
- /* @__PURE__ */ jsx18("span", { class: `${p33}-history-preview`, children: chat.preview ?? (chat.canContinue ? strings.historyContinue : strings.conversationClosed) }),
5618
- (chat.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx18("span", { class: `${p33}-history-dot` }) : null
5713
+ /* @__PURE__ */ jsxs16("span", { class: `${p35}-history-row`, children: [
5714
+ /* @__PURE__ */ jsx19("span", { class: `${p35}-history-preview`, children: chat.preview ?? (chat.canContinue ? strings.historyContinue : strings.conversationClosed) }),
5715
+ (chat.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx19("span", { class: `${p35}-history-dot` }) : null
5619
5716
  ] })
5620
5717
  ] })
5621
5718
  ]
@@ -5628,15 +5725,15 @@ function ConversationList({
5628
5725
  }
5629
5726
 
5630
5727
  // src/ui/suggestions.tsx
5631
- import { jsx as jsx19 } from "preact/jsx-runtime";
5632
- var p16 = BRAND.cssPrefix;
5728
+ import { jsx as jsx20 } from "preact/jsx-runtime";
5729
+ var p18 = BRAND.cssPrefix;
5633
5730
  function Suggestions({ suggestions, onPick }) {
5634
5731
  if (suggestions.length === 0) return null;
5635
- return /* @__PURE__ */ jsx19("div", { class: `${p16}-suggestions`, role: "group", "aria-label": "Suggested replies", children: suggestions.map((s, i) => /* @__PURE__ */ jsx19(
5732
+ return /* @__PURE__ */ jsx20("div", { class: `${p18}-suggestions`, role: "group", "aria-label": "Suggested replies", children: suggestions.map((s, i) => /* @__PURE__ */ jsx20(
5636
5733
  "button",
5637
5734
  {
5638
5735
  type: "button",
5639
- class: `${p16}-suggestion`,
5736
+ class: `${p18}-suggestion`,
5640
5737
  onClick: () => onPick(s),
5641
5738
  "data-testid": tid(TID.suggestion, i),
5642
5739
  children: s.label
@@ -5646,8 +5743,8 @@ function Suggestions({ suggestions, onPick }) {
5646
5743
  }
5647
5744
 
5648
5745
  // src/ui/panel.tsx
5649
- import { Fragment as Fragment4, jsx as jsx20, jsxs as jsxs16 } from "preact/jsx-runtime";
5650
- var p17 = BRAND.cssPrefix;
5746
+ import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs17 } from "preact/jsx-runtime";
5747
+ var p19 = BRAND.cssPrefix;
5651
5748
  function Panel(props2) {
5652
5749
  const { options, onClose } = props2;
5653
5750
  const s = options.strings;
@@ -5671,18 +5768,18 @@ function Panel(props2) {
5671
5768
  }, []);
5672
5769
  const { visible: dragOver } = useFileDrop({ containerRef, onDrop: onDropItems });
5673
5770
  useDragMove(containerRef.current, options.mode === "modal");
5674
- return /* @__PURE__ */ jsxs16(
5771
+ return /* @__PURE__ */ jsxs17(
5675
5772
  "div",
5676
5773
  {
5677
5774
  ref: containerRef,
5678
- class: `${p17}-panel`,
5775
+ class: `${p19}-panel`,
5679
5776
  role: "dialog",
5680
5777
  "aria-modal": "false",
5681
5778
  "aria-label": s.panelTitle,
5682
5779
  style: { position: "relative" },
5683
5780
  "data-testid": TID.panel,
5684
5781
  children: [
5685
- /* @__PURE__ */ jsx20(
5782
+ /* @__PURE__ */ jsx21(
5686
5783
  PanelContent,
5687
5784
  {
5688
5785
  ...props2,
@@ -5691,7 +5788,7 @@ function Panel(props2) {
5691
5788
  composerAttachApiRef
5692
5789
  }
5693
5790
  ),
5694
- /* @__PURE__ */ jsx20(PoweredByBar, { poweredBy: props2.options.poweredBy })
5791
+ /* @__PURE__ */ jsx21(PoweredByBar, { poweredBy: props2.options.poweredBy })
5695
5792
  ]
5696
5793
  }
5697
5794
  );
@@ -5738,9 +5835,9 @@ function PanelContent(props2) {
5738
5835
  if (activeForm) {
5739
5836
  composerArea = null;
5740
5837
  } else if (canSend) {
5741
- composerArea = /* @__PURE__ */ jsxs16(Fragment4, { children: [
5742
- /* @__PURE__ */ jsx20(Suggestions, { suggestions, onPick: onSuggestion }),
5743
- /* @__PURE__ */ jsx20(
5838
+ composerArea = /* @__PURE__ */ jsxs17(Fragment4, { children: [
5839
+ /* @__PURE__ */ jsx21(Suggestions, { suggestions, onPick: onSuggestion }),
5840
+ /* @__PURE__ */ jsx21(
5744
5841
  Composer,
5745
5842
  {
5746
5843
  options,
@@ -5755,10 +5852,10 @@ function PanelContent(props2) {
5755
5852
  )
5756
5853
  ] });
5757
5854
  } else {
5758
- composerArea = /* @__PURE__ */ jsx20(ReadOnlyBanner, { label: s.conversationClosed, ctaLabel: s.startNewConversation, onNewConversation: onClear });
5855
+ composerArea = /* @__PURE__ */ jsx21(ReadOnlyBanner, { label: s.conversationClosed, ctaLabel: s.startNewConversation, onNewConversation: onClear });
5759
5856
  }
5760
- return /* @__PURE__ */ jsxs16(Fragment4, { children: [
5761
- view === "history" ? /* @__PURE__ */ jsx20(
5857
+ return /* @__PURE__ */ jsxs17(Fragment4, { children: [
5858
+ view === "history" ? /* @__PURE__ */ jsx21(
5762
5859
  HistoryHeader,
5763
5860
  {
5764
5861
  strings: s,
@@ -5766,22 +5863,22 @@ function PanelContent(props2) {
5766
5863
  onClose,
5767
5864
  showClose: canShowClose(options.mode, panelSize, options.actions)
5768
5865
  }
5769
- ) : /* @__PURE__ */ jsxs16("header", { class: `${p17}-header`, "data-testid": TID.panelHeader, children: [
5770
- onBack ? /* @__PURE__ */ jsx20(
5866
+ ) : /* @__PURE__ */ jsxs17("header", { class: `${p19}-header`, "data-testid": TID.panelHeader, children: [
5867
+ onBack ? /* @__PURE__ */ jsx21(
5771
5868
  "button",
5772
5869
  {
5773
5870
  type: "button",
5774
- class: `${p17}-icon-btn`,
5871
+ class: `${p19}-icon-btn`,
5775
5872
  onClick: onBack,
5776
5873
  "aria-label": s.moduleBack,
5777
5874
  title: s.moduleBack,
5778
- children: /* @__PURE__ */ jsx20(BackIcon, {})
5875
+ children: /* @__PURE__ */ jsx21(BackIcon, {})
5779
5876
  }
5780
5877
  ) : null,
5781
- agent ? /* @__PURE__ */ jsx20(AgentBadge, { agent, strings: s }) : /* @__PURE__ */ jsx20("h1", { children: s.panelTitle }),
5782
- /* @__PURE__ */ jsx20(HeaderActions, { panelProps: props2, variant: "chat" })
5878
+ agent ? /* @__PURE__ */ jsx21(AgentBadge, { agent, strings: s }) : /* @__PURE__ */ jsx21("h1", { children: s.panelTitle }),
5879
+ /* @__PURE__ */ jsx21(HeaderActions, { panelProps: props2, variant: "chat" })
5783
5880
  ] }),
5784
- view === "history" ? /* @__PURE__ */ jsx20(
5881
+ view === "history" ? /* @__PURE__ */ jsx21(
5785
5882
  ConversationList,
5786
5883
  {
5787
5884
  transport,
@@ -5792,9 +5889,9 @@ function PanelContent(props2) {
5792
5889
  onSelect: (conversation) => onSelectHistoryConversation(conversation.conversationId),
5793
5890
  onNewConversation
5794
5891
  }
5795
- ) : /* @__PURE__ */ jsxs16(Fragment4, { children: [
5796
- /* @__PURE__ */ jsx20(DropZone, { visible: dragOver, strings: s }),
5797
- /* @__PURE__ */ jsx20(
5892
+ ) : /* @__PURE__ */ jsxs17(Fragment4, { children: [
5893
+ /* @__PURE__ */ jsx21(DropZone, { visible: dragOver, strings: s }),
5894
+ /* @__PURE__ */ jsx21(
5798
5895
  MessageList,
5799
5896
  {
5800
5897
  messagesSig,
@@ -5802,6 +5899,7 @@ function PanelContent(props2) {
5802
5899
  responseMode: options.responseMode,
5803
5900
  showReasoning: options.showReasoning,
5804
5901
  showToolCalls: options.showToolCalls,
5902
+ showSources: options.showSources,
5805
5903
  loading: loadingMessages,
5806
5904
  idle: !isStreaming,
5807
5905
  tool,
@@ -5811,9 +5909,9 @@ function PanelContent(props2) {
5811
5909
  }
5812
5910
  ),
5813
5911
  composerArea,
5814
- /* @__PURE__ */ jsx20(ComposerFooter, { disclaimer: options.composerDisclaimer })
5912
+ /* @__PURE__ */ jsx21(ComposerFooter, { disclaimer: options.composerDisclaimer })
5815
5913
  ] }),
5816
- options.size.resize?.enabled ? /* @__PURE__ */ jsx20(
5914
+ options.size.resize?.enabled ? /* @__PURE__ */ jsx21(
5817
5915
  ResizeGrip,
5818
5916
  {
5819
5917
  panelEl: containerEl,
@@ -5832,28 +5930,28 @@ function HistoryHeader({
5832
5930
  onClose,
5833
5931
  showClose
5834
5932
  }) {
5835
- return /* @__PURE__ */ jsxs16("header", { class: `${p17}-header`, children: [
5836
- /* @__PURE__ */ jsx20(
5933
+ return /* @__PURE__ */ jsxs17("header", { class: `${p19}-header`, children: [
5934
+ /* @__PURE__ */ jsx21(
5837
5935
  "button",
5838
5936
  {
5839
5937
  type: "button",
5840
- class: `${p17}-icon-btn`,
5938
+ class: `${p19}-icon-btn`,
5841
5939
  onClick: onBack,
5842
5940
  "aria-label": strings.historyBack,
5843
5941
  title: strings.historyBack,
5844
- children: /* @__PURE__ */ jsx20(BackIcon, {})
5942
+ children: /* @__PURE__ */ jsx21(BackIcon, {})
5845
5943
  }
5846
5944
  ),
5847
- /* @__PURE__ */ jsx20("h1", { children: strings.historyTitle }),
5848
- showClose ? /* @__PURE__ */ jsx20(
5945
+ /* @__PURE__ */ jsx21("h1", { children: strings.historyTitle }),
5946
+ showClose ? /* @__PURE__ */ jsx21(
5849
5947
  "button",
5850
5948
  {
5851
5949
  type: "button",
5852
- class: `${p17}-icon-btn`,
5950
+ class: `${p19}-icon-btn`,
5853
5951
  onClick: onClose,
5854
5952
  "aria-label": strings.close,
5855
5953
  title: strings.close,
5856
- children: /* @__PURE__ */ jsx20(CloseIcon, {})
5954
+ children: /* @__PURE__ */ jsx21(CloseIcon, {})
5857
5955
  }
5858
5956
  ) : null
5859
5957
  ] });
@@ -5863,28 +5961,28 @@ function ReadOnlyBanner({
5863
5961
  ctaLabel,
5864
5962
  onNewConversation
5865
5963
  }) {
5866
- return /* @__PURE__ */ jsxs16("div", { class: `${p17}-readonly-banner`, role: "note", children: [
5867
- /* @__PURE__ */ jsx20("span", { class: `${p17}-readonly-label`, children: label }),
5868
- /* @__PURE__ */ jsx20("button", { type: "button", class: `${p17}-readonly-cta`, onClick: onNewConversation, children: ctaLabel })
5964
+ return /* @__PURE__ */ jsxs17("div", { class: `${p19}-readonly-banner`, role: "note", children: [
5965
+ /* @__PURE__ */ jsx21("span", { class: `${p19}-readonly-label`, children: label }),
5966
+ /* @__PURE__ */ jsx21("button", { type: "button", class: `${p19}-readonly-cta`, onClick: onNewConversation, children: ctaLabel })
5869
5967
  ] });
5870
5968
  }
5871
5969
  function ComposerFooter({ disclaimer }) {
5872
5970
  if (!disclaimer) return null;
5873
- return /* @__PURE__ */ jsx20("div", { class: `${p17}-composer-footer`, children: /* @__PURE__ */ jsx20("div", { class: `${p17}-disclaimer`, children: disclaimer }) });
5971
+ return /* @__PURE__ */ jsx21("div", { class: `${p19}-composer-footer`, children: /* @__PURE__ */ jsx21("div", { class: `${p19}-disclaimer`, children: disclaimer }) });
5874
5972
  }
5875
5973
  function PoweredByBar({ poweredBy }) {
5876
5974
  if (!poweredBy) return null;
5877
- return /* @__PURE__ */ jsx20("div", { class: `${p17}-poweredby-bar`, children: /* @__PURE__ */ jsx20(PoweredBy, { logoUrl: poweredBy.logoUrl, text: poweredBy.text, href: poweredBy.href }) });
5975
+ return /* @__PURE__ */ jsx21("div", { class: `${p19}-poweredby-bar`, children: /* @__PURE__ */ jsx21(PoweredBy, { logoUrl: poweredBy.logoUrl, text: poweredBy.text, href: poweredBy.href }) });
5878
5976
  }
5879
5977
  function PoweredBy({ logoUrl, text, href }) {
5880
- const inner = /* @__PURE__ */ jsxs16(Fragment4, { children: [
5881
- logoUrl ? /* @__PURE__ */ jsx20("img", { class: `${p17}-poweredby-logo`, src: logoUrl, alt: "", loading: "lazy" }) : null,
5882
- text ? /* @__PURE__ */ jsx20("span", { children: text }) : null
5978
+ const inner = /* @__PURE__ */ jsxs17(Fragment4, { children: [
5979
+ logoUrl ? /* @__PURE__ */ jsx21("img", { class: `${p19}-poweredby-logo`, src: logoUrl, alt: "", loading: "lazy" }) : null,
5980
+ text ? /* @__PURE__ */ jsx21("span", { children: text }) : null
5883
5981
  ] });
5884
5982
  if (href) {
5885
- return /* @__PURE__ */ jsx20("a", { class: `${p17}-poweredby`, href, target: "_blank", rel: "noopener noreferrer", children: inner });
5983
+ return /* @__PURE__ */ jsx21("a", { class: `${p19}-poweredby`, href, target: "_blank", rel: "noopener noreferrer", children: inner });
5886
5984
  }
5887
- return /* @__PURE__ */ jsx20("span", { class: `${p17}-poweredby`, children: inner });
5985
+ return /* @__PURE__ */ jsx21("span", { class: `${p19}-poweredby`, children: inner });
5888
5986
  }
5889
5987
 
5890
5988
  // src/ui/form/form-controller.ts
@@ -5967,34 +6065,34 @@ function whenPasses(form, d) {
5967
6065
  }
5968
6066
 
5969
6067
  // src/ui/sidebar.tsx
5970
- import { Fragment as Fragment5, jsx as jsx21, jsxs as jsxs17 } from "preact/jsx-runtime";
6068
+ import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs18 } from "preact/jsx-runtime";
5971
6069
  function Sidebar(props2) {
5972
- const p33 = BRAND.cssPrefix;
6070
+ const p35 = BRAND.cssPrefix;
5973
6071
  const { site, blocks, strings, collapsed } = props2;
5974
6072
  const navigation = blocks?.navigation ?? [];
5975
6073
  const linkCards = blocks?.linkCards ?? [];
5976
6074
  const toggleLabel = collapsed ? strings.expandSidebar : strings.collapseSidebar;
5977
- return /* @__PURE__ */ jsxs17("aside", { class: `${p33}-sidebar`, "data-collapsed": collapsed ? "true" : "false", "data-testid": TID.sidebar, children: [
5978
- /* @__PURE__ */ jsxs17("div", { class: `${p33}-sidebar-header`, children: [
5979
- /* @__PURE__ */ jsx21(SidebarBrand, { site }),
5980
- /* @__PURE__ */ jsx21(
6075
+ return /* @__PURE__ */ jsxs18("aside", { class: `${p35}-sidebar`, "data-collapsed": collapsed ? "true" : "false", "data-testid": TID.sidebar, children: [
6076
+ /* @__PURE__ */ jsxs18("div", { class: `${p35}-sidebar-header`, children: [
6077
+ /* @__PURE__ */ jsx22(SidebarBrand, { site }),
6078
+ /* @__PURE__ */ jsx22(
5981
6079
  "button",
5982
6080
  {
5983
6081
  type: "button",
5984
- class: `${p33}-sidebar-toggle`,
6082
+ class: `${p35}-sidebar-toggle`,
5985
6083
  "aria-label": toggleLabel,
5986
6084
  "aria-expanded": collapsed ? "false" : "true",
5987
6085
  title: toggleLabel,
5988
6086
  onClick: props2.onToggleCollapsed,
5989
6087
  "data-testid": TID.sidebarToggle,
5990
- children: /* @__PURE__ */ jsx21(SidebarToggleIcon, { collapsed })
6088
+ children: /* @__PURE__ */ jsx22(SidebarToggleIcon, { collapsed })
5991
6089
  }
5992
6090
  )
5993
6091
  ] }),
5994
- collapsed ? null : /* @__PURE__ */ jsxs17(Fragment5, { children: [
5995
- navigation.length > 0 ? /* @__PURE__ */ jsx21("nav", { class: `${p33}-sidebar-section`, "data-section": "navigation", children: /* @__PURE__ */ jsx21(SidebarNav, { items: navigation }) }) : null,
5996
- linkCards.length > 0 ? /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-section`, "data-section": "link-cards", children: /* @__PURE__ */ jsx21(SidebarCards, { items: linkCards }) }) : null,
5997
- props2.showConversations ? /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-conversations`, children: /* @__PURE__ */ jsx21(
6092
+ collapsed ? null : /* @__PURE__ */ jsxs18(Fragment5, { children: [
6093
+ navigation.length > 0 ? /* @__PURE__ */ jsx22("nav", { class: `${p35}-sidebar-section`, "data-section": "navigation", children: /* @__PURE__ */ jsx22(SidebarNav, { items: navigation }) }) : null,
6094
+ linkCards.length > 0 ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-section`, "data-section": "link-cards", children: /* @__PURE__ */ jsx22(SidebarCards, { items: linkCards }) }) : null,
6095
+ props2.showConversations ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-conversations`, children: /* @__PURE__ */ jsx22(
5998
6096
  ConversationList,
5999
6097
  {
6000
6098
  transport: props2.transport,
@@ -6010,18 +6108,18 @@ function Sidebar(props2) {
6010
6108
  ] });
6011
6109
  }
6012
6110
  function SidebarBrand({ site }) {
6013
- const p33 = BRAND.cssPrefix;
6111
+ const p35 = BRAND.cssPrefix;
6014
6112
  if (site?.logo?.url) {
6015
6113
  const alt = site.logo.alt ?? site.title ?? "Logo";
6016
- return /* @__PURE__ */ jsxs17("picture", { children: [
6017
- site.logoDark?.url ? /* @__PURE__ */ jsx21("source", { srcset: site.logoDark.url, media: "(prefers-color-scheme: dark)" }) : null,
6018
- /* @__PURE__ */ jsx21("img", { class: `${p33}-sidebar-logo`, src: site.logo.url, alt })
6114
+ return /* @__PURE__ */ jsxs18("picture", { children: [
6115
+ site.logoDark?.url ? /* @__PURE__ */ jsx22("source", { srcset: site.logoDark.url, media: "(prefers-color-scheme: dark)" }) : null,
6116
+ /* @__PURE__ */ jsx22("img", { class: `${p35}-sidebar-logo`, src: site.logo.url, alt })
6019
6117
  ] });
6020
6118
  }
6021
- return /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-title`, children: site?.title ?? BRAND.name });
6119
+ return /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-title`, children: site?.title ?? BRAND.name });
6022
6120
  }
6023
6121
  function SidebarToggleIcon({ collapsed }) {
6024
- return /* @__PURE__ */ jsx21(
6122
+ return /* @__PURE__ */ jsx22(
6025
6123
  "svg",
6026
6124
  {
6027
6125
  width: "16",
@@ -6031,38 +6129,38 @@ function SidebarToggleIcon({ collapsed }) {
6031
6129
  stroke: "currentColor",
6032
6130
  "stroke-width": "2",
6033
6131
  "aria-hidden": "true",
6034
- children: collapsed ? /* @__PURE__ */ jsx21("polyline", { points: "9 6 15 12 9 18" }) : /* @__PURE__ */ jsx21("polyline", { points: "15 6 9 12 15 18" })
6132
+ children: collapsed ? /* @__PURE__ */ jsx22("polyline", { points: "9 6 15 12 9 18" }) : /* @__PURE__ */ jsx22("polyline", { points: "15 6 9 12 15 18" })
6035
6133
  }
6036
6134
  );
6037
6135
  }
6038
6136
  function SidebarNav({ items }) {
6039
- const p33 = BRAND.cssPrefix;
6040
- return /* @__PURE__ */ jsx21("ul", { class: `${p33}-sidebar-nav`, children: items.map((item) => /* @__PURE__ */ jsx21("li", { children: /* @__PURE__ */ jsxs17(
6137
+ const p35 = BRAND.cssPrefix;
6138
+ return /* @__PURE__ */ jsx22("ul", { class: `${p35}-sidebar-nav`, children: items.map((item) => /* @__PURE__ */ jsx22("li", { children: /* @__PURE__ */ jsxs18(
6041
6139
  "a",
6042
6140
  {
6043
- class: `${p33}-sidebar-nav-item`,
6141
+ class: `${p35}-sidebar-nav-item`,
6044
6142
  href: item.href,
6045
6143
  target: item.href ? "_blank" : void 0,
6046
6144
  rel: item.href ? "noreferrer" : void 0,
6047
6145
  children: [
6048
- item.icon ? /* @__PURE__ */ jsx21("span", { class: `${p33}-sidebar-nav-icon`, "data-icon": item.icon }) : null,
6049
- /* @__PURE__ */ jsx21("span", { class: `${p33}-sidebar-nav-label`, children: item.label })
6146
+ item.icon ? /* @__PURE__ */ jsx22("span", { class: `${p35}-sidebar-nav-icon`, "data-icon": item.icon }) : null,
6147
+ /* @__PURE__ */ jsx22("span", { class: `${p35}-sidebar-nav-label`, children: item.label })
6050
6148
  ]
6051
6149
  }
6052
6150
  ) }, item.id ?? item.label)) });
6053
6151
  }
6054
6152
  function SidebarCards({ items }) {
6055
- const p33 = BRAND.cssPrefix;
6056
- return /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-cards`, children: items.map((item) => /* @__PURE__ */ jsxs17(
6153
+ const p35 = BRAND.cssPrefix;
6154
+ return /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-cards`, children: items.map((item) => /* @__PURE__ */ jsxs18(
6057
6155
  "a",
6058
6156
  {
6059
- class: `${p33}-sidebar-card`,
6157
+ class: `${p35}-sidebar-card`,
6060
6158
  href: item.href,
6061
6159
  target: item.href ? "_blank" : void 0,
6062
6160
  rel: item.href ? "noreferrer" : void 0,
6063
6161
  children: [
6064
- /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-card-label`, children: item.label }),
6065
- item.description ? /* @__PURE__ */ jsx21("div", { class: `${p33}-sidebar-card-desc`, children: item.description }) : null
6162
+ /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-card-label`, children: item.label }),
6163
+ item.description ? /* @__PURE__ */ jsx22("div", { class: `${p35}-sidebar-card-desc`, children: item.description }) : null
6066
6164
  ]
6067
6165
  },
6068
6166
  item.id ?? item.label
@@ -6070,11 +6168,11 @@ function SidebarCards({ items }) {
6070
6168
  }
6071
6169
 
6072
6170
  // src/ui/page-shell.tsx
6073
- import { jsx as jsx22, jsxs as jsxs18 } from "preact/jsx-runtime";
6074
- var p18 = BRAND.cssPrefix;
6171
+ import { jsx as jsx23, jsxs as jsxs19 } from "preact/jsx-runtime";
6172
+ var p20 = BRAND.cssPrefix;
6075
6173
  function PageShell(props2) {
6076
- return /* @__PURE__ */ jsxs18("main", { class: `${p18}-page-shell`, "data-sidebar-collapsed": props2.sidebarCollapsed ? "true" : "false", children: [
6077
- /* @__PURE__ */ jsx22(
6174
+ return /* @__PURE__ */ jsxs19("main", { class: `${p20}-page-shell`, "data-sidebar-collapsed": props2.sidebarCollapsed ? "true" : "false", children: [
6175
+ /* @__PURE__ */ jsx23(
6078
6176
  Sidebar,
6079
6177
  {
6080
6178
  site: props2.site,
@@ -6091,7 +6189,7 @@ function PageShell(props2) {
6091
6189
  onToggleCollapsed: props2.onToggleSidebarCollapsed
6092
6190
  }
6093
6191
  ),
6094
- /* @__PURE__ */ jsx22("section", { class: `${p18}-page-chat`, "aria-label": "Chat", children: props2.children })
6192
+ /* @__PURE__ */ jsx23("section", { class: `${p20}-page-chat`, "aria-label": "Chat", children: props2.children })
6095
6193
  ] });
6096
6194
  }
6097
6195
 
@@ -6129,7 +6227,7 @@ var atTabRoot = (s) => activeStack(s).length === 0;
6129
6227
 
6130
6228
  // src/ui/messenger-home.tsx
6131
6229
  import { useCallback as useCallback4, useEffect as useEffect14, useRef as useRef8 } from "preact/hooks";
6132
- import { useComputed as useComputed6 } from "@preact/signals";
6230
+ import { useComputed as useComputed7 } from "@preact/signals";
6133
6231
 
6134
6232
  // src/ui/modules/chat.tsx
6135
6233
  var chatLayout = {
@@ -6141,80 +6239,80 @@ var chatLayout = {
6141
6239
  import { useEffect as useEffect10, useMemo as useMemo2, useState as useState8 } from "preact/hooks";
6142
6240
 
6143
6241
  // src/ui/back-header.tsx
6144
- import { jsx as jsx23, jsxs as jsxs19 } from "preact/jsx-runtime";
6145
- var p19 = BRAND.cssPrefix;
6242
+ import { jsx as jsx24, jsxs as jsxs20 } from "preact/jsx-runtime";
6243
+ var p21 = BRAND.cssPrefix;
6146
6244
  function TitleBar({ title, actions }) {
6147
- return /* @__PURE__ */ jsxs19("header", { class: `${p19}-back-header`, "data-variant": "title", children: [
6148
- /* @__PURE__ */ jsx23("span", { class: `${p19}-back-spacer`, "aria-hidden": "true" }),
6149
- /* @__PURE__ */ jsx23("h1", { class: `${p19}-back-title`, children: title }),
6150
- actions ?? /* @__PURE__ */ jsx23("span", { class: `${p19}-back-spacer`, "aria-hidden": "true" })
6245
+ return /* @__PURE__ */ jsxs20("header", { class: `${p21}-back-header`, "data-variant": "title", children: [
6246
+ /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" }),
6247
+ /* @__PURE__ */ jsx24("h1", { class: `${p21}-back-title`, children: title }),
6248
+ actions ?? /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" })
6151
6249
  ] });
6152
6250
  }
6153
6251
  function BackHeader({ title, backLabel, onBack, actions, testid }) {
6154
- return /* @__PURE__ */ jsxs19("header", { class: `${p19}-back-header`, "data-testid": testid, children: [
6155
- /* @__PURE__ */ jsx23("button", { type: "button", class: `${p19}-icon-btn`, onClick: onBack, "aria-label": backLabel, title: backLabel, children: /* @__PURE__ */ jsx23(BackIcon, {}) }),
6156
- /* @__PURE__ */ jsx23("h1", { class: `${p19}-back-title`, children: title }),
6157
- actions ?? /* @__PURE__ */ jsx23("span", { class: `${p19}-back-spacer`, "aria-hidden": "true" })
6252
+ return /* @__PURE__ */ jsxs20("header", { class: `${p21}-back-header`, "data-testid": testid, children: [
6253
+ /* @__PURE__ */ jsx24("button", { type: "button", class: `${p21}-icon-btn`, onClick: onBack, "aria-label": backLabel, title: backLabel, children: /* @__PURE__ */ jsx24(BackIcon, {}) }),
6254
+ /* @__PURE__ */ jsx24("h1", { class: `${p21}-back-title`, children: title }),
6255
+ actions ?? /* @__PURE__ */ jsx24("span", { class: `${p21}-back-spacer`, "aria-hidden": "true" })
6158
6256
  ] });
6159
6257
  }
6160
6258
 
6161
6259
  // src/ui/home-search.tsx
6162
- import { jsx as jsx24, jsxs as jsxs20 } from "preact/jsx-runtime";
6163
- var p20 = BRAND.cssPrefix;
6260
+ import { jsx as jsx25, jsxs as jsxs21 } from "preact/jsx-runtime";
6261
+ var p22 = BRAND.cssPrefix;
6164
6262
  function HomeSearchButton({ placeholder, onActivate }) {
6165
- return /* @__PURE__ */ jsxs20("button", { type: "button", class: `${p20}-home-search`, onClick: onActivate, "data-testid": TID.homeSearch, children: [
6166
- /* @__PURE__ */ jsx24("span", { class: `${p20}-home-search-text`, children: placeholder }),
6167
- /* @__PURE__ */ jsx24("span", { class: `${p20}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx24(SearchIcon, {}) })
6263
+ return /* @__PURE__ */ jsxs21("button", { type: "button", class: `${p22}-home-search`, onClick: onActivate, "data-testid": TID.homeSearch, children: [
6264
+ /* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-text`, children: placeholder }),
6265
+ /* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(SearchIcon, {}) })
6168
6266
  ] });
6169
6267
  }
6170
6268
  function HelpSearchInput({ placeholder, value, onInput }) {
6171
- return /* @__PURE__ */ jsxs20("div", { class: `${p20}-home-search`, "data-input": "true", children: [
6172
- /* @__PURE__ */ jsx24(
6269
+ return /* @__PURE__ */ jsxs21("div", { class: `${p22}-home-search`, "data-input": "true", children: [
6270
+ /* @__PURE__ */ jsx25(
6173
6271
  "input",
6174
6272
  {
6175
6273
  type: "search",
6176
- class: `${p20}-home-search-input`,
6274
+ class: `${p22}-home-search-input`,
6177
6275
  placeholder,
6178
6276
  value,
6179
6277
  onInput: (e) => onInput(e.currentTarget.value),
6180
6278
  "data-testid": TID.helpSearch
6181
6279
  }
6182
6280
  ),
6183
- /* @__PURE__ */ jsx24("span", { class: `${p20}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx24(SearchIcon, {}) })
6281
+ /* @__PURE__ */ jsx25("span", { class: `${p22}-home-search-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(SearchIcon, {}) })
6184
6282
  ] });
6185
6283
  }
6186
6284
 
6187
6285
  // src/ui/list-row.tsx
6188
- import { jsx as jsx25, jsxs as jsxs21 } from "preact/jsx-runtime";
6189
- var p21 = BRAND.cssPrefix;
6286
+ import { jsx as jsx26, jsxs as jsxs22 } from "preact/jsx-runtime";
6287
+ var p23 = BRAND.cssPrefix;
6190
6288
  function ListRow({ title, subtitle, onClick, testid }) {
6191
- return /* @__PURE__ */ jsxs21("button", { type: "button", class: `${p21}-list-row`, onClick, "data-testid": testid, children: [
6192
- /* @__PURE__ */ jsxs21("span", { class: `${p21}-list-row-body`, children: [
6193
- /* @__PURE__ */ jsx25("span", { class: `${p21}-list-row-title`, children: title }),
6194
- subtitle ? /* @__PURE__ */ jsx25("span", { class: `${p21}-list-row-sub`, children: subtitle }) : null
6289
+ return /* @__PURE__ */ jsxs22("button", { type: "button", class: `${p23}-list-row`, onClick, "data-testid": testid, children: [
6290
+ /* @__PURE__ */ jsxs22("span", { class: `${p23}-list-row-body`, children: [
6291
+ /* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-title`, children: title }),
6292
+ subtitle ? /* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-sub`, children: subtitle }) : null
6195
6293
  ] }),
6196
- /* @__PURE__ */ jsx25("span", { class: `${p21}-list-row-chevron`, "aria-hidden": "true", children: /* @__PURE__ */ jsx25(ChevronRightIcon, {}) })
6294
+ /* @__PURE__ */ jsx26("span", { class: `${p23}-list-row-chevron`, "aria-hidden": "true", children: /* @__PURE__ */ jsx26(ChevronRightIcon, {}) })
6197
6295
  ] });
6198
6296
  }
6199
6297
 
6200
6298
  // src/ui/module-state.tsx
6201
- import { jsx as jsx26, jsxs as jsxs22 } from "preact/jsx-runtime";
6202
- var p22 = BRAND.cssPrefix;
6299
+ import { jsx as jsx27, jsxs as jsxs23 } from "preact/jsx-runtime";
6300
+ var p24 = BRAND.cssPrefix;
6203
6301
  function ModuleState({
6204
6302
  tone = "info",
6205
6303
  message,
6206
6304
  onRetry,
6207
6305
  strings
6208
6306
  }) {
6209
- return /* @__PURE__ */ jsxs22("div", { class: `${p22}-module-empty`, role: tone === "error" ? "alert" : "status", "aria-live": "polite", children: [
6210
- /* @__PURE__ */ jsx26("span", { children: message }),
6211
- onRetry ? /* @__PURE__ */ jsx26("button", { type: "button", class: `${p22}-module-retry`, onClick: onRetry, children: strings.errorRetry }) : null
6307
+ return /* @__PURE__ */ jsxs23("div", { class: `${p24}-module-empty`, role: tone === "error" ? "alert" : "status", "aria-live": "polite", children: [
6308
+ /* @__PURE__ */ jsx27("span", { children: message }),
6309
+ onRetry ? /* @__PURE__ */ jsx27("button", { type: "button", class: `${p24}-module-retry`, onClick: onRetry, children: strings.errorRetry }) : null
6212
6310
  ] });
6213
6311
  }
6214
6312
 
6215
6313
  // src/ui/modules/help.tsx
6216
- import { jsx as jsx27, jsxs as jsxs23 } from "preact/jsx-runtime";
6217
- var p23 = BRAND.cssPrefix;
6314
+ import { jsx as jsx28, jsxs as jsxs24 } from "preact/jsx-runtime";
6315
+ var p25 = BRAND.cssPrefix;
6218
6316
  var log13 = logger.scope("help");
6219
6317
  var openArticle = (nav, a) => a.url ? nav.push({ kind: "iframe", url: a.url, title: a.title }) : nav.push({ kind: "content", id: a.id, title: a.title });
6220
6318
  function groupByCategory(items) {
@@ -6243,7 +6341,7 @@ function fuzzySearch(items, query) {
6243
6341
  return items.map((item) => ({ item, score: Math.max(fuzzyScore(q, item.title) * 2, fuzzyScore(q, item.description ?? "")) })).filter((r) => r.score > 0).toSorted((a, b) => b.score - a.score).map((r) => r.item);
6244
6342
  }
6245
6343
  function ArticleRow({ article, nav }) {
6246
- return /* @__PURE__ */ jsx27(
6344
+ return /* @__PURE__ */ jsx28(
6247
6345
  ListRow,
6248
6346
  {
6249
6347
  title: article.title,
@@ -6288,46 +6386,46 @@ function HelpRoot({ transport, strings, config, nav, bus, panelProps }) {
6288
6386
  }, [query, results, bus]);
6289
6387
  function renderBody() {
6290
6388
  if (query.trim().length > 0) {
6291
- if (results.length === 0) return /* @__PURE__ */ jsx27(ModuleState, { message: strings.helpSearchEmpty, strings });
6292
- return /* @__PURE__ */ jsx27("div", { class: `${p23}-help-card`, children: results.map((a) => /* @__PURE__ */ jsx27(ArticleRow, { article: a, nav }, a.id)) });
6389
+ if (results.length === 0) return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpSearchEmpty, strings });
6390
+ return /* @__PURE__ */ jsx28("div", { class: `${p25}-help-card`, children: results.map((a) => /* @__PURE__ */ jsx28(ArticleRow, { article: a, nav }, a.id)) });
6293
6391
  }
6294
- if (state === "loading") return /* @__PURE__ */ jsx27(ModuleState, { message: strings.helpLoading, strings });
6392
+ if (state === "loading") return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpLoading, strings });
6295
6393
  if (state === "error") {
6296
- return /* @__PURE__ */ jsx27(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
6394
+ return /* @__PURE__ */ jsx28(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
6297
6395
  }
6298
- if (items.length === 0) return /* @__PURE__ */ jsx27(ModuleState, { message: strings.helpEmpty, strings });
6299
- return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */ jsxs23("section", { class: `${p23}-help-group`, children: [
6300
- category ? /* @__PURE__ */ jsx27("h2", { class: `${p23}-help-section-title`, children: category }) : null,
6301
- /* @__PURE__ */ jsx27("div", { class: `${p23}-help-card`, children: rows.map((a) => /* @__PURE__ */ jsx27(ArticleRow, { article: a, nav }, a.id)) })
6396
+ if (items.length === 0) return /* @__PURE__ */ jsx28(ModuleState, { message: strings.helpEmpty, strings });
6397
+ return groupByCategory(items).map(([category, rows]) => /* @__PURE__ */ jsxs24("section", { class: `${p25}-help-group`, children: [
6398
+ category ? /* @__PURE__ */ jsx28("h2", { class: `${p25}-help-section-title`, children: category }) : null,
6399
+ /* @__PURE__ */ jsx28("div", { class: `${p25}-help-card`, children: rows.map((a) => /* @__PURE__ */ jsx28(ArticleRow, { article: a, nav }, a.id)) })
6302
6400
  ] }, category));
6303
6401
  }
6304
- return /* @__PURE__ */ jsxs23("div", { class: `${p23}-module`, children: [
6305
- /* @__PURE__ */ jsx27(TitleBar, { title: strings.helpTitle, actions: /* @__PURE__ */ jsx27(HeaderActions, { panelProps, variant: "plain" }) }),
6306
- /* @__PURE__ */ jsx27("div", { class: `${p23}-module-pad`, children: /* @__PURE__ */ jsx27(HelpSearchInput, { placeholder: strings.helpSearchPlaceholder, value: query, onInput: setQuery }) }),
6307
- /* @__PURE__ */ jsx27("div", { class: `${p23}-help-list`, children: renderBody() })
6402
+ return /* @__PURE__ */ jsxs24("div", { class: `${p25}-module`, children: [
6403
+ /* @__PURE__ */ jsx28(TitleBar, { title: strings.helpTitle, actions: /* @__PURE__ */ jsx28(HeaderActions, { panelProps, variant: "plain" }) }),
6404
+ /* @__PURE__ */ jsx28("div", { class: `${p25}-module-pad`, children: /* @__PURE__ */ jsx28(HelpSearchInput, { placeholder: strings.helpSearchPlaceholder, value: query, onInput: setQuery }) }),
6405
+ /* @__PURE__ */ jsx28("div", { class: `${p25}-help-list`, children: renderBody() })
6308
6406
  ] });
6309
6407
  }
6310
6408
  var helpLayout = {
6311
6409
  Icon: HelpIcon,
6312
- Root: (props2) => /* @__PURE__ */ jsx27(HelpRoot, { ...props2 })
6410
+ Root: (props2) => /* @__PURE__ */ jsx28(HelpRoot, { ...props2 })
6313
6411
  };
6314
6412
 
6315
6413
  // src/ui/modules/home.tsx
6316
6414
  import { useEffect as useEffect11, useState as useState9 } from "preact/hooks";
6317
6415
 
6318
6416
  // src/ui/home-card.tsx
6319
- import { jsx as jsx28 } from "preact/jsx-runtime";
6320
- var p24 = BRAND.cssPrefix;
6417
+ import { jsx as jsx29 } from "preact/jsx-runtime";
6418
+ var p26 = BRAND.cssPrefix;
6321
6419
  function HomeCard({ onClick, children, testid }) {
6322
6420
  if (onClick) {
6323
- return /* @__PURE__ */ jsx28("button", { type: "button", class: `${p24}-home-card`, "data-interactive": "true", onClick, "data-testid": testid, children });
6421
+ return /* @__PURE__ */ jsx29("button", { type: "button", class: `${p26}-home-card`, "data-interactive": "true", onClick, "data-testid": testid, children });
6324
6422
  }
6325
- return /* @__PURE__ */ jsx28("div", { class: `${p24}-home-card`, "data-testid": testid, children });
6423
+ return /* @__PURE__ */ jsx29("div", { class: `${p26}-home-card`, "data-testid": testid, children });
6326
6424
  }
6327
6425
 
6328
6426
  // src/ui/modules/home.tsx
6329
- import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs24 } from "preact/jsx-runtime";
6330
- var p25 = BRAND.cssPrefix;
6427
+ import { Fragment as Fragment6, jsx as jsx30, jsxs as jsxs25 } from "preact/jsx-runtime";
6428
+ var p27 = BRAND.cssPrefix;
6331
6429
  var log14 = logger.scope("home");
6332
6430
  function resolveGreeting(props2) {
6333
6431
  const name = props2.options.userContext?.name;
@@ -6370,49 +6468,49 @@ function HomeRoot(props2) {
6370
6468
  const status = config.status;
6371
6469
  const statusText = status?.text ? localizeText(strings, status.text) : strings.homeStatus;
6372
6470
  const contentTitle = config.contentBlockTitle ? localizeText(strings, config.contentBlockTitle) : strings.homeContentTitle;
6373
- return /* @__PURE__ */ jsx29("div", { class: `${p25}-module ${p25}-home`, "data-testid": TID.homeView, children: /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-scroll`, children: [
6374
- /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-hero`, children: [
6375
- /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-hero-top`, children: [
6376
- config.brandName ? /* @__PURE__ */ jsx29("span", { class: `${p25}-home-brand`, "data-testid": TID.homeBrand, children: config.brandName }) : /* @__PURE__ */ jsx29("span", { class: `${p25}-home-brand-spacer`, "aria-hidden": "true" }),
6377
- /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-hero-actions`, children: [
6378
- avatars.length > 0 ? /* @__PURE__ */ jsx29("div", { class: `${p25}-home-avatars`, children: avatars.map((a) => /* @__PURE__ */ jsx29("span", { class: `${p25}-home-avatar`, title: a.role ? `${a.name} \xB7 ${a.role}` : a.name, children: a.avatar ? /* @__PURE__ */ jsx29("img", { src: a.avatar, alt: "", loading: "lazy" }) : /* @__PURE__ */ jsx29("span", { children: initials(a.name) }) }, a.name)) }) : null,
6379
- /* @__PURE__ */ jsx29(HeaderActions, { panelProps, variant: "plain" })
6471
+ return /* @__PURE__ */ jsx30("div", { class: `${p27}-module ${p27}-home`, "data-testid": TID.homeView, children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-scroll`, children: [
6472
+ /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero`, children: [
6473
+ /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero-top`, children: [
6474
+ config.brandName ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-brand`, "data-testid": TID.homeBrand, children: config.brandName }) : /* @__PURE__ */ jsx30("span", { class: `${p27}-home-brand-spacer`, "aria-hidden": "true" }),
6475
+ /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-hero-actions`, children: [
6476
+ avatars.length > 0 ? /* @__PURE__ */ jsx30("div", { class: `${p27}-home-avatars`, children: avatars.map((a) => /* @__PURE__ */ jsx30("span", { class: `${p27}-home-avatar`, title: a.role ? `${a.name} \xB7 ${a.role}` : a.name, children: a.avatar ? /* @__PURE__ */ jsx30("img", { src: a.avatar, alt: "", loading: "lazy" }) : /* @__PURE__ */ jsx30("span", { children: initials(a.name) }) }, a.name)) }) : null,
6477
+ /* @__PURE__ */ jsx30(HeaderActions, { panelProps, variant: "plain" })
6380
6478
  ] })
6381
6479
  ] }),
6382
- config.showGreeting !== false ? /* @__PURE__ */ jsxs24(Fragment6, { children: [
6383
- /* @__PURE__ */ jsx29("h1", { class: `${p25}-home-greeting`, "data-testid": TID.homeGreeting, children: greeting.title }),
6384
- greeting.subtitle ? /* @__PURE__ */ jsx29("p", { class: `${p25}-home-lead`, children: greeting.subtitle }) : null
6480
+ config.showGreeting !== false ? /* @__PURE__ */ jsxs25(Fragment6, { children: [
6481
+ /* @__PURE__ */ jsx30("h1", { class: `${p27}-home-greeting`, "data-testid": TID.homeGreeting, children: greeting.title }),
6482
+ greeting.subtitle ? /* @__PURE__ */ jsx30("p", { class: `${p27}-home-lead`, children: greeting.subtitle }) : null
6385
6483
  ] }) : null
6386
6484
  ] }),
6387
- /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-cards`, children: [
6388
- config.showSearchBar !== false ? /* @__PURE__ */ jsx29(
6485
+ /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-cards`, children: [
6486
+ config.showSearchBar !== false ? /* @__PURE__ */ jsx30(
6389
6487
  HomeSearchButton,
6390
6488
  {
6391
6489
  placeholder: strings.homeSearchPlaceholder,
6392
6490
  onActivate: () => nav.switchToLayout("help")
6393
6491
  }
6394
6492
  ) : null,
6395
- recent ? /* @__PURE__ */ jsx29(HomeCard, { onClick: () => nav.selectConversation(recent.conversationId), testid: TID.homeRecent, children: /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-recent-row`, "data-unread": (recent.unreadCount ?? 0) > 0 ? "true" : void 0, children: [
6396
- /* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx29(BubblesIcon, {}) }),
6397
- /* @__PURE__ */ jsxs24("span", { class: `${p25}-home-recent-body`, children: [
6398
- /* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-title`, children: recent.title }),
6399
- recent.preview ? /* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-preview`, children: recent.preview }) : null
6493
+ recent ? /* @__PURE__ */ jsx30(HomeCard, { onClick: () => nav.selectConversation(recent.conversationId), testid: TID.homeRecent, children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-recent-row`, "data-unread": (recent.unreadCount ?? 0) > 0 ? "true" : void 0, children: [
6494
+ /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-avatar`, "aria-hidden": "true", children: /* @__PURE__ */ jsx30(BubblesIcon, {}) }),
6495
+ /* @__PURE__ */ jsxs25("span", { class: `${p27}-home-recent-body`, children: [
6496
+ /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-title`, children: recent.title }),
6497
+ recent.preview ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-preview`, children: recent.preview }) : null
6400
6498
  ] }),
6401
- (recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx29("span", { class: `${p25}-home-recent-dot`, "aria-label": "Unread" }) : null
6499
+ (recent.unreadCount ?? 0) > 0 ? /* @__PURE__ */ jsx30("span", { class: `${p27}-home-recent-dot`, "aria-label": "Unread" }) : null
6402
6500
  ] }) }) : null,
6403
- status ? /* @__PURE__ */ jsx29(
6501
+ status ? /* @__PURE__ */ jsx30(
6404
6502
  HomeCard,
6405
6503
  {
6406
6504
  onClick: status.url ? () => nav.push({ kind: "iframe", url: status.url, title: statusText }) : void 0,
6407
- children: /* @__PURE__ */ jsxs24("div", { class: `${p25}-home-status`, "data-level": status.level ?? "operational", children: [
6408
- /* @__PURE__ */ jsx29("span", { class: `${p25}-home-status-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx29(StatusOkIcon, {}) }),
6409
- /* @__PURE__ */ jsx29("span", { class: `${p25}-home-status-text`, children: statusText })
6505
+ children: /* @__PURE__ */ jsxs25("div", { class: `${p27}-home-status`, "data-level": status.level ?? "operational", children: [
6506
+ /* @__PURE__ */ jsx30("span", { class: `${p27}-home-status-icon`, "aria-hidden": "true", children: /* @__PURE__ */ jsx30(StatusOkIcon, {}) }),
6507
+ /* @__PURE__ */ jsx30("span", { class: `${p27}-home-status-text`, children: statusText })
6410
6508
  ] })
6411
6509
  }
6412
6510
  ) : null,
6413
- content.length > 0 ? /* @__PURE__ */ jsxs24("section", { class: `${p25}-home-content`, children: [
6414
- /* @__PURE__ */ jsx29("div", { class: `${p25}-home-content-title`, children: contentTitle }),
6415
- /* @__PURE__ */ jsx29("div", { class: `${p25}-home-content-list`, children: content.map((item) => /* @__PURE__ */ jsx29(
6511
+ content.length > 0 ? /* @__PURE__ */ jsxs25("section", { class: `${p27}-home-content`, children: [
6512
+ /* @__PURE__ */ jsx30("div", { class: `${p27}-home-content-title`, children: contentTitle }),
6513
+ /* @__PURE__ */ jsx30("div", { class: `${p27}-home-content-list`, children: content.map((item) => /* @__PURE__ */ jsx30(
6416
6514
  ListRow,
6417
6515
  {
6418
6516
  title: item.title,
@@ -6428,13 +6526,13 @@ function HomeRoot(props2) {
6428
6526
  }
6429
6527
  var homeLayout = {
6430
6528
  Icon: HomeIcon,
6431
- Root: (props2) => /* @__PURE__ */ jsx29(HomeRoot, { ...props2 })
6529
+ Root: (props2) => /* @__PURE__ */ jsx30(HomeRoot, { ...props2 })
6432
6530
  };
6433
6531
 
6434
6532
  // src/ui/modules/news.tsx
6435
6533
  import { useEffect as useEffect12, useState as useState10 } from "preact/hooks";
6436
- import { jsx as jsx30, jsxs as jsxs25 } from "preact/jsx-runtime";
6437
- var p26 = BRAND.cssPrefix;
6534
+ import { jsx as jsx31, jsxs as jsxs26 } from "preact/jsx-runtime";
6535
+ var p28 = BRAND.cssPrefix;
6438
6536
  var log15 = logger.scope("news");
6439
6537
  function NewsRoot({ transport, strings, config, nav, bus, panelProps }) {
6440
6538
  const tags = config.contentTags;
@@ -6462,37 +6560,37 @@ function NewsRoot({ transport, strings, config, nav, bus, panelProps }) {
6462
6560
  };
6463
6561
  }, [transport, tags, reloadKey, bus]);
6464
6562
  function renderBody() {
6465
- if (state === "loading") return /* @__PURE__ */ jsx30(ModuleState, { message: strings.newsLoading, strings });
6563
+ if (state === "loading") return /* @__PURE__ */ jsx31(ModuleState, { message: strings.newsLoading, strings });
6466
6564
  if (state === "error") {
6467
- return /* @__PURE__ */ jsx30(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
6565
+ return /* @__PURE__ */ jsx31(ModuleState, { tone: "error", message: errorMsg, onRetry: () => setReloadKey((k) => k + 1), strings });
6468
6566
  }
6469
- if (items.length === 0) return /* @__PURE__ */ jsx30(ModuleState, { message: strings.newsEmpty, strings });
6470
- return /* @__PURE__ */ jsx30("div", { class: `${p26}-news-list`, children: items.map((item) => /* @__PURE__ */ jsxs25(
6567
+ if (items.length === 0) return /* @__PURE__ */ jsx31(ModuleState, { message: strings.newsEmpty, strings });
6568
+ return /* @__PURE__ */ jsx31("div", { class: `${p28}-news-list`, children: items.map((item) => /* @__PURE__ */ jsxs26(
6471
6569
  "button",
6472
6570
  {
6473
6571
  type: "button",
6474
- class: `${p26}-news-card`,
6572
+ class: `${p28}-news-card`,
6475
6573
  onClick: () => nav.push({ kind: "content", id: item.id, title: item.title }),
6476
6574
  "data-testid": tid(TID.newsItem, item.id),
6477
6575
  children: [
6478
- item.image ? /* @__PURE__ */ jsx30("img", { class: `${p26}-news-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
6479
- /* @__PURE__ */ jsxs25("span", { class: `${p26}-news-body`, children: [
6480
- /* @__PURE__ */ jsx30("span", { class: `${p26}-news-title`, children: item.title }),
6481
- item.description ? /* @__PURE__ */ jsx30("span", { class: `${p26}-news-summary`, children: item.description }) : null
6576
+ item.image ? /* @__PURE__ */ jsx31("img", { class: `${p28}-news-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
6577
+ /* @__PURE__ */ jsxs26("span", { class: `${p28}-news-body`, children: [
6578
+ /* @__PURE__ */ jsx31("span", { class: `${p28}-news-title`, children: item.title }),
6579
+ item.description ? /* @__PURE__ */ jsx31("span", { class: `${p28}-news-summary`, children: item.description }) : null
6482
6580
  ] })
6483
6581
  ]
6484
6582
  },
6485
6583
  item.id
6486
6584
  )) });
6487
6585
  }
6488
- return /* @__PURE__ */ jsxs25("div", { class: `${p26}-module`, children: [
6489
- /* @__PURE__ */ jsx30(TitleBar, { title: strings.newsTitle, actions: /* @__PURE__ */ jsx30(HeaderActions, { panelProps, variant: "plain" }) }),
6490
- /* @__PURE__ */ jsx30("div", { class: `${p26}-module-scroll`, children: renderBody() })
6586
+ return /* @__PURE__ */ jsxs26("div", { class: `${p28}-module`, children: [
6587
+ /* @__PURE__ */ jsx31(TitleBar, { title: strings.newsTitle, actions: /* @__PURE__ */ jsx31(HeaderActions, { panelProps, variant: "plain" }) }),
6588
+ /* @__PURE__ */ jsx31("div", { class: `${p28}-module-scroll`, children: renderBody() })
6491
6589
  ] });
6492
6590
  }
6493
6591
  var newsLayout = {
6494
6592
  Icon: NewsIcon,
6495
- Root: (props2) => /* @__PURE__ */ jsx30(NewsRoot, { ...props2 })
6593
+ Root: (props2) => /* @__PURE__ */ jsx31(NewsRoot, { ...props2 })
6496
6594
  };
6497
6595
 
6498
6596
  // src/ui/modules/registry.ts
@@ -6504,28 +6602,28 @@ var LAYOUTS = {
6504
6602
  };
6505
6603
 
6506
6604
  // src/ui/home-tab-bar.tsx
6507
- import { jsx as jsx31, jsxs as jsxs26 } from "preact/jsx-runtime";
6508
- var p27 = BRAND.cssPrefix;
6605
+ import { jsx as jsx32, jsxs as jsxs27 } from "preact/jsx-runtime";
6606
+ var p29 = BRAND.cssPrefix;
6509
6607
  function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
6510
- return /* @__PURE__ */ jsx31("nav", { class: `${p27}-tabbar`, role: "tablist", "aria-label": strings.panelTitle, children: modules.map((m) => {
6608
+ return /* @__PURE__ */ jsx32("nav", { class: `${p29}-tabbar`, role: "tablist", "aria-label": strings.panelTitle, children: modules.map((m) => {
6511
6609
  const Icon = LAYOUTS[m.layout].Icon;
6512
6610
  const selected = m.id === activeTab;
6513
6611
  const badge = m.layout === "chat" && unreadCount > 0 ? unreadCount > 9 ? "9+" : String(unreadCount) : null;
6514
- return /* @__PURE__ */ jsxs26(
6612
+ return /* @__PURE__ */ jsxs27(
6515
6613
  "button",
6516
6614
  {
6517
6615
  type: "button",
6518
6616
  role: "tab",
6519
6617
  "aria-selected": selected,
6520
- class: `${p27}-tab`,
6618
+ class: `${p29}-tab`,
6521
6619
  onClick: () => onSelect(m.id),
6522
6620
  "data-testid": tid(TID.tab, m.id),
6523
6621
  children: [
6524
- /* @__PURE__ */ jsxs26("span", { class: `${p27}-tab-icon`, "aria-hidden": "true", children: [
6525
- /* @__PURE__ */ jsx31(Icon, {}),
6526
- badge ? /* @__PURE__ */ jsx31("span", { class: `${p27}-tab-badge`, "data-testid": TID.tabBadge, children: badge }) : null
6622
+ /* @__PURE__ */ jsxs27("span", { class: `${p29}-tab-icon`, "aria-hidden": "true", children: [
6623
+ /* @__PURE__ */ jsx32(Icon, {}),
6624
+ badge ? /* @__PURE__ */ jsx32("span", { class: `${p29}-tab-badge`, "data-testid": TID.tabBadge, children: badge }) : null
6527
6625
  ] }),
6528
- /* @__PURE__ */ jsx31("span", { class: `${p27}-tab-label`, children: localizeText(strings, m.label) })
6626
+ /* @__PURE__ */ jsx32("span", { class: `${p29}-tab-label`, children: localizeText(strings, m.label) })
6529
6627
  ]
6530
6628
  },
6531
6629
  m.id
@@ -6534,12 +6632,12 @@ function HomeTabBar({ modules, activeTab, strings, unreadCount, onSelect }) {
6534
6632
  }
6535
6633
 
6536
6634
  // src/ui/iframe-view.tsx
6537
- import { jsx as jsx32, jsxs as jsxs27 } from "preact/jsx-runtime";
6538
- var p28 = BRAND.cssPrefix;
6635
+ import { jsx as jsx33, jsxs as jsxs28 } from "preact/jsx-runtime";
6636
+ var p30 = BRAND.cssPrefix;
6539
6637
  var SANDBOX = "allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads";
6540
6638
  function IframeView({ url, title, strings, onBack, actions }) {
6541
- return /* @__PURE__ */ jsxs27("div", { class: `${p28}-module`, children: [
6542
- /* @__PURE__ */ jsx32(
6639
+ return /* @__PURE__ */ jsxs28("div", { class: `${p30}-module`, children: [
6640
+ /* @__PURE__ */ jsx33(
6543
6641
  BackHeader,
6544
6642
  {
6545
6643
  title: title || strings.moduleBack,
@@ -6548,10 +6646,10 @@ function IframeView({ url, title, strings, onBack, actions }) {
6548
6646
  actions
6549
6647
  }
6550
6648
  ),
6551
- /* @__PURE__ */ jsx32(
6649
+ /* @__PURE__ */ jsx33(
6552
6650
  "iframe",
6553
6651
  {
6554
- class: `${p28}-content-frame`,
6652
+ class: `${p30}-content-frame`,
6555
6653
  src: url,
6556
6654
  title: title || "content",
6557
6655
  sandbox: SANDBOX,
@@ -6565,8 +6663,8 @@ function IframeView({ url, title, strings, onBack, actions }) {
6565
6663
 
6566
6664
  // src/ui/content-view.tsx
6567
6665
  import { useCallback as useCallback3, useEffect as useEffect13, useState as useState11 } from "preact/hooks";
6568
- import { jsx as jsx33, jsxs as jsxs28 } from "preact/jsx-runtime";
6569
- var p29 = BRAND.cssPrefix;
6666
+ import { jsx as jsx34, jsxs as jsxs29 } from "preact/jsx-runtime";
6667
+ var p31 = BRAND.cssPrefix;
6570
6668
  var log16 = logger.scope("content");
6571
6669
  var READ_DWELL_MS = 5e3;
6572
6670
  function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
@@ -6610,16 +6708,16 @@ function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
6610
6708
  [bus, id]
6611
6709
  );
6612
6710
  function renderBody() {
6613
- if (failed) return /* @__PURE__ */ jsx33(ModuleState, { tone: "error", message: strings.errorGeneric, onRetry: retry, strings });
6614
- if (item === null) return /* @__PURE__ */ jsx33(ModuleState, { message: strings.contentLoading, strings });
6615
- return /* @__PURE__ */ jsxs28("article", { class: `${p29}-content`, "data-testid": TID.contentView, onClick: onArticleClick, children: [
6616
- item.image ? /* @__PURE__ */ jsx33("img", { class: `${p29}-content-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
6617
- item.description ? /* @__PURE__ */ jsx33("p", { class: `${p29}-content-subtitle`, children: item.description }) : null,
6618
- /* @__PURE__ */ jsx33(StaticMarkdown, { text: item.content ?? "" })
6711
+ if (failed) return /* @__PURE__ */ jsx34(ModuleState, { tone: "error", message: strings.errorGeneric, onRetry: retry, strings });
6712
+ if (item === null) return /* @__PURE__ */ jsx34(ModuleState, { message: strings.contentLoading, strings });
6713
+ return /* @__PURE__ */ jsxs29("article", { class: `${p31}-content`, "data-testid": TID.contentView, onClick: onArticleClick, children: [
6714
+ item.image ? /* @__PURE__ */ jsx34("img", { class: `${p31}-content-hero`, src: item.image, alt: "", loading: "lazy" }) : null,
6715
+ item.description ? /* @__PURE__ */ jsx34("p", { class: `${p31}-content-subtitle`, children: item.description }) : null,
6716
+ /* @__PURE__ */ jsx34(StaticMarkdown, { text: item.content ?? "" })
6619
6717
  ] });
6620
6718
  }
6621
- return /* @__PURE__ */ jsxs28("div", { class: `${p29}-module`, children: [
6622
- /* @__PURE__ */ jsx33(
6719
+ return /* @__PURE__ */ jsxs29("div", { class: `${p31}-module`, children: [
6720
+ /* @__PURE__ */ jsx34(
6623
6721
  BackHeader,
6624
6722
  {
6625
6723
  title: item?.title || title || strings.moduleBack,
@@ -6629,13 +6727,13 @@ function ContentView({ id, title, transport, strings, bus, onBack, actions }) {
6629
6727
  testid: TID.backHeader
6630
6728
  }
6631
6729
  ),
6632
- /* @__PURE__ */ jsx33("div", { class: `${p29}-module-scroll`, "data-testid": TID.contentScroll, children: renderBody() })
6730
+ /* @__PURE__ */ jsx34("div", { class: `${p31}-module-scroll`, "data-testid": TID.contentScroll, children: renderBody() })
6633
6731
  ] });
6634
6732
  }
6635
6733
 
6636
6734
  // src/ui/messenger-home.tsx
6637
- import { jsx as jsx34, jsxs as jsxs29 } from "preact/jsx-runtime";
6638
- var p30 = BRAND.cssPrefix;
6735
+ import { jsx as jsx35, jsxs as jsxs30 } from "preact/jsx-runtime";
6736
+ var p32 = BRAND.cssPrefix;
6639
6737
  function MessengerHome({
6640
6738
  panelProps,
6641
6739
  enabledModules,
@@ -6669,7 +6767,7 @@ function MessengerHome({
6669
6767
  }, []);
6670
6768
  const { visible: dragOver } = useFileDrop({ containerRef, onDrop: onDropItems });
6671
6769
  useDragMove(containerRef.current, options.mode === "modal");
6672
- const navState = useComputed6(() => nav.sig.value).value;
6770
+ const navState = useComputed7(() => nav.sig.value).value;
6673
6771
  const top = topScreen(navState);
6674
6772
  const activeModule = options.modules.byId[navState.activeTab];
6675
6773
  const isReader = top?.kind === "iframe" || top?.kind === "content";
@@ -6706,12 +6804,12 @@ function MessengerHome({
6706
6804
  bus,
6707
6805
  panelProps
6708
6806
  });
6709
- const plainActions = /* @__PURE__ */ jsx34(HeaderActions, { panelProps, variant: "plain" });
6807
+ const plainActions = /* @__PURE__ */ jsx35(HeaderActions, { panelProps, variant: "plain" });
6710
6808
  if (activeModule) visitedRef.current.add(activeModule.id);
6711
6809
  const visitedTabs = enabledModules.filter((m) => visitedRef.current.has(m.id));
6712
6810
  const tabRoot = (module) => {
6713
6811
  if (module.layout === "chat") {
6714
- return /* @__PURE__ */ jsx34(
6812
+ return /* @__PURE__ */ jsx35(
6715
6813
  PanelContent,
6716
6814
  {
6717
6815
  ...panelProps,
@@ -6722,14 +6820,14 @@ function MessengerHome({
6722
6820
  );
6723
6821
  }
6724
6822
  const Root = LAYOUTS[module.layout].Root;
6725
- return Root ? /* @__PURE__ */ jsx34(Root, { ...screenProps(module) }) : null;
6823
+ return Root ? /* @__PURE__ */ jsx35(Root, { ...screenProps(module) }) : null;
6726
6824
  };
6727
6825
  const renderReader = () => {
6728
6826
  if (top?.kind === "iframe") {
6729
- return /* @__PURE__ */ jsx34(IframeView, { url: top.url, title: top.title, strings, onBack: nav.pop, actions: plainActions });
6827
+ return /* @__PURE__ */ jsx35(IframeView, { url: top.url, title: top.title, strings, onBack: nav.pop, actions: plainActions });
6730
6828
  }
6731
6829
  if (top?.kind === "content") {
6732
- return /* @__PURE__ */ jsx34(
6830
+ return /* @__PURE__ */ jsx35(
6733
6831
  ContentView,
6734
6832
  {
6735
6833
  id: top.id,
@@ -6744,22 +6842,22 @@ function MessengerHome({
6744
6842
  }
6745
6843
  return null;
6746
6844
  };
6747
- return /* @__PURE__ */ jsxs29(
6845
+ return /* @__PURE__ */ jsxs30(
6748
6846
  "div",
6749
6847
  {
6750
6848
  ref: containerRef,
6751
- class: `${p30}-panel ${p30}-messenger`,
6849
+ class: `${p32}-panel ${p32}-messenger`,
6752
6850
  role: "dialog",
6753
6851
  "aria-modal": "false",
6754
6852
  "aria-label": strings.panelTitle,
6755
6853
  style: { position: "relative" },
6756
6854
  "data-testid": TID.messengerHome,
6757
6855
  children: [
6758
- /* @__PURE__ */ jsxs29("div", { class: `${p30}-messenger-body`, children: [
6759
- visitedTabs.map((m) => /* @__PURE__ */ jsx34("div", { class: `${p30}-messenger-pane`, hidden: isReader || m.id !== activeModule?.id, children: tabRoot(m) }, m.id)),
6856
+ /* @__PURE__ */ jsxs30("div", { class: `${p32}-messenger-body`, children: [
6857
+ visitedTabs.map((m) => /* @__PURE__ */ jsx35("div", { class: `${p32}-messenger-pane`, hidden: isReader || m.id !== activeModule?.id, children: tabRoot(m) }, m.id)),
6760
6858
  renderReader()
6761
6859
  ] }),
6762
- showTabBar ? /* @__PURE__ */ jsx34(
6860
+ showTabBar ? /* @__PURE__ */ jsx35(
6763
6861
  HomeTabBar,
6764
6862
  {
6765
6863
  modules: enabledModules,
@@ -6769,8 +6867,8 @@ function MessengerHome({
6769
6867
  onSelect: nav.switchTab
6770
6868
  }
6771
6869
  ) : null,
6772
- /* @__PURE__ */ jsx34(PoweredByBar, { poweredBy: options.poweredBy }),
6773
- options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */ jsx34(
6870
+ /* @__PURE__ */ jsx35(PoweredByBar, { poweredBy: options.poweredBy }),
6871
+ options.size.resize?.enabled && !(activeModule?.layout === "chat" && !top) ? /* @__PURE__ */ jsx35(
6774
6872
  ResizeGrip,
6775
6873
  {
6776
6874
  panelEl: containerRef.current,
@@ -6787,29 +6885,29 @@ function MessengerHome({
6787
6885
  }
6788
6886
 
6789
6887
  // src/ui/modules-empty.tsx
6790
- import { jsx as jsx35, jsxs as jsxs30 } from "preact/jsx-runtime";
6791
- var p31 = BRAND.cssPrefix;
6888
+ import { jsx as jsx36, jsxs as jsxs31 } from "preact/jsx-runtime";
6889
+ var p33 = BRAND.cssPrefix;
6792
6890
  function ModulesEmpty({ strings, onClose }) {
6793
- return /* @__PURE__ */ jsxs30(
6891
+ return /* @__PURE__ */ jsxs31(
6794
6892
  "div",
6795
6893
  {
6796
- class: `${p31}-panel ${p31}-modules-empty`,
6894
+ class: `${p33}-panel ${p33}-modules-empty`,
6797
6895
  role: "dialog",
6798
6896
  "aria-label": strings.panelTitle,
6799
6897
  "data-testid": TID.modulesEmpty,
6800
6898
  children: [
6801
- onClose ? /* @__PURE__ */ jsx35(
6899
+ onClose ? /* @__PURE__ */ jsx36(
6802
6900
  "button",
6803
6901
  {
6804
6902
  type: "button",
6805
- class: `${p31}-icon-btn ${p31}-modules-empty-close`,
6903
+ class: `${p33}-icon-btn ${p33}-modules-empty-close`,
6806
6904
  onClick: onClose,
6807
6905
  "aria-label": strings.close,
6808
6906
  title: strings.close,
6809
- children: /* @__PURE__ */ jsx35(CloseIcon, {})
6907
+ children: /* @__PURE__ */ jsx36(CloseIcon, {})
6810
6908
  }
6811
6909
  ) : null,
6812
- /* @__PURE__ */ jsx35("p", { class: `${p31}-modules-empty-text`, children: strings.modulesEmpty })
6910
+ /* @__PURE__ */ jsx36("p", { class: `${p33}-modules-empty-text`, children: strings.modulesEmpty })
6813
6911
  ]
6814
6912
  }
6815
6913
  );
@@ -6832,9 +6930,9 @@ function useLauncherCallout({ callout, persistence }) {
6832
6930
  }
6833
6931
 
6834
6932
  // src/ui/app.tsx
6835
- import { jsx as jsx36, jsxs as jsxs31 } from "preact/jsx-runtime";
6933
+ import { jsx as jsx37, jsxs as jsxs32 } from "preact/jsx-runtime";
6836
6934
  var log17 = logger.scope("app");
6837
- var p32 = BRAND.cssPrefix;
6935
+ var p34 = BRAND.cssPrefix;
6838
6936
  function makeLocalizedWelcome(w, strings) {
6839
6937
  return makeInstantWelcomeMessage({ ...w, text: localizeText(strings, w.text) });
6840
6938
  }
@@ -7376,7 +7474,7 @@ function App({ options, hostElement, bus }) {
7376
7474
  bus.emit("toolResult", { toolCallId });
7377
7475
  resolveTool(toolCallId, TRIGGER.toolResult, (part) => {
7378
7476
  part.outputSig.value = output;
7379
- part.stateSig.value = "output";
7477
+ part.stateSig.value = "output-available";
7380
7478
  });
7381
7479
  },
7382
7480
  [bus, resolveTool]
@@ -7388,7 +7486,7 @@ function App({ options, hostElement, bus }) {
7388
7486
  resolveTool(toolCallId, TRIGGER.toolApproval, (part) => {
7389
7487
  const id = part.approvalSig.value?.id ?? toolCallId;
7390
7488
  part.approvalSig.value = { id, approved, reason };
7391
- part.stateSig.value = "output";
7489
+ part.stateSig.value = "approval-responded";
7392
7490
  });
7393
7491
  },
7394
7492
  [bus, resolveTool]
@@ -7429,12 +7527,12 @@ function App({ options, hostElement, bus }) {
7429
7527
  void transport.submitForm({ formId: form.id, conversationId: activeConversationId, trigger, values, skipped });
7430
7528
  }
7431
7529
  });
7432
- const activeForm = useComputed7(() => forms.activeForm.value);
7530
+ const activeForm = useComputed8(() => forms.activeForm.value);
7433
7531
  useEffect16(() => {
7434
7532
  forms.refresh();
7435
7533
  }, [effectiveForms, forms]);
7436
7534
  const pageArea = options.pageContext?.area ? String(options.pageContext.area) : void 0;
7437
- const msgCount = useComputed7(() => messagesSig.value.length);
7535
+ const msgCount = useComputed8(() => messagesSig.value.length);
7438
7536
  useEffect16(() => {
7439
7537
  if (conversationReady && formsReady) forms.fire("pre-chat");
7440
7538
  }, [conversationReady, formsReady, forms]);
@@ -7749,12 +7847,12 @@ function App({ options, hostElement, bus }) {
7749
7847
  const renderSurface = (size) => {
7750
7848
  const closeable = isActionVisible("close", effectiveOptions.mode, size);
7751
7849
  if (enabledModules.length === 0) {
7752
- return /* @__PURE__ */ jsx36(ModulesEmpty, { strings: effectiveOptions.strings, onClose: closeable ? handleClose : void 0 });
7850
+ return /* @__PURE__ */ jsx37(ModulesEmpty, { strings: effectiveOptions.strings, onClose: closeable ? handleClose : void 0 });
7753
7851
  }
7754
7852
  if (enabledModules.length === 1 && enabledModules[0]?.layout === "chat") {
7755
- return /* @__PURE__ */ jsx36(Panel, { ...panelProps, panelSize: size });
7853
+ return /* @__PURE__ */ jsx37(Panel, { ...panelProps, panelSize: size });
7756
7854
  }
7757
- return /* @__PURE__ */ jsx36(
7855
+ return /* @__PURE__ */ jsx37(
7758
7856
  MessengerHome,
7759
7857
  {
7760
7858
  panelProps: { ...panelProps, panelSize: size, onClose: closeable ? handleClose : void 0 },
@@ -7773,7 +7871,7 @@ function App({ options, hostElement, bus }) {
7773
7871
  void handleSelectHistoryConversation(chat.conversationId);
7774
7872
  };
7775
7873
  const conversationsEnabled = enabledModules.some((m) => m.layout === "chat");
7776
- return /* @__PURE__ */ jsx36("div", { class: `${p32}-anchor`, children: /* @__PURE__ */ jsx36(
7874
+ return /* @__PURE__ */ jsx37("div", { class: `${p34}-anchor`, children: /* @__PURE__ */ jsx37(
7777
7875
  PageShell,
7778
7876
  {
7779
7877
  site: parsedSite,
@@ -7794,15 +7892,15 @@ function App({ options, hostElement, bus }) {
7794
7892
  }
7795
7893
  if (isInlineLike) {
7796
7894
  const inlineSize = options.mode === "standalone" ? "fullscreen" : panelSize;
7797
- return /* @__PURE__ */ jsx36("div", { class: `${p32}-anchor`, children: renderSurface(inlineSize) });
7895
+ return /* @__PURE__ */ jsx37("div", { class: `${p34}-anchor`, children: renderSurface(inlineSize) });
7798
7896
  }
7799
7897
  const drawerEdgeTab = options.mode === "drawer";
7800
7898
  const triggerOwnedByPage = options.mode === "modal";
7801
7899
  const launcherVisible = !triggerOwnedByPage && !options.launcher.hidden && (!isOpen || launcherLeaving);
7802
7900
  const calloutToRender = launcherVisible && !launcherLeaving && !calloutDismissed && !drawerEdgeTab ? effectiveOptions.launcher.callout : null;
7803
- return /* @__PURE__ */ jsxs31("div", { class: `${p32}-anchor`, "data-launcher-size": effectiveOptions.launcher.size, children: [
7804
- isOpen || activated ? /* @__PURE__ */ jsx36("div", { class: `${p32}-surface`, hidden: !isOpen, children: renderSurface(panelSize) }) : null,
7805
- launcherVisible ? /* @__PURE__ */ jsx36(
7901
+ return /* @__PURE__ */ jsxs32("div", { class: `${p34}-anchor`, "data-launcher-size": effectiveOptions.launcher.size, children: [
7902
+ isOpen || activated ? /* @__PURE__ */ jsx37("div", { class: `${p34}-surface`, hidden: !isOpen, children: renderSurface(panelSize) }) : null,
7903
+ launcherVisible ? /* @__PURE__ */ jsx37(
7806
7904
  Launcher,
7807
7905
  {
7808
7906
  onToggle: handleOpen,
@@ -7812,7 +7910,7 @@ function App({ options, hostElement, bus }) {
7812
7910
  edgeTab: drawerEdgeTab
7813
7911
  }
7814
7912
  ) : null,
7815
- calloutToRender ? /* @__PURE__ */ jsx36(
7913
+ calloutToRender ? /* @__PURE__ */ jsx37(
7816
7914
  LauncherCallout,
7817
7915
  {
7818
7916
  callout: calloutToRender,
@@ -7877,34 +7975,34 @@ var TRACKED = {
7877
7975
  expand: (on) => ({ on }),
7878
7976
  fullscreen: (on) => ({ on }),
7879
7977
  // Conversation funnel. `send` is the key conversion; text never rides.
7880
- send: (p33) => ({ attachments: p33.attachmentCount }),
7881
- message: (p33) => ({ role: p33.role }),
7978
+ send: (p35) => ({ attachments: p35.attachmentCount }),
7979
+ message: (p35) => ({ role: p35.role }),
7882
7980
  stop: () => void 0,
7883
7981
  clear: () => void 0,
7884
7982
  suggestion: () => void 0,
7885
- toggleHistory: (p33) => ({ view: p33.view }),
7983
+ toggleHistory: (p35) => ({ view: p35.view }),
7886
7984
  handshake: () => void 0,
7887
7985
  // Forms + human-in-the-loop — ids and outcomes, never values.
7888
- formSubmit: (p33) => ({ formId: p33.formId, skipped: p33.skipped }),
7986
+ formSubmit: (p35) => ({ formId: p35.formId, skipped: p35.skipped }),
7889
7987
  toolResult: () => void 0,
7890
- toolDecision: (p33) => ({ approved: p33.approved }),
7988
+ toolDecision: (p35) => ({ approved: p35.approved }),
7891
7989
  // Content — ids, tags + counts only; titles/bodies never ride.
7892
- contentView: (p33) => ({ section: p33.section, tags: p33.tags, count: p33.count }),
7893
- contentOpen: (p33) => ({ contentId: p33.contentId, tags: p33.tags }),
7894
- contentSearch: (p33) => ({ qlen: p33.queryLength, hits: p33.hitCount }),
7895
- contentRead: (p33) => ({ contentId: p33.contentId }),
7896
- contentLinkClick: (p33) => ({ contentId: p33.contentId }),
7990
+ contentView: (p35) => ({ section: p35.section, tags: p35.tags, count: p35.count }),
7991
+ contentOpen: (p35) => ({ contentId: p35.contentId, tags: p35.tags }),
7992
+ contentSearch: (p35) => ({ qlen: p35.queryLength, hits: p35.hitCount }),
7993
+ contentRead: (p35) => ({ contentId: p35.contentId }),
7994
+ contentLinkClick: (p35) => ({ contentId: p35.contentId }),
7897
7995
  // Composer / attachments / voice.
7898
- attach: (p33) => ({ count: p33.count, bytes: p33.totalBytes }),
7996
+ attach: (p35) => ({ count: p35.count, bytes: p35.totalBytes }),
7899
7997
  voiceStart: () => void 0,
7900
- voiceStop: (p33) => ({ ms: p33.durationMs }),
7998
+ voiceStop: (p35) => ({ ms: p35.durationMs }),
7901
7999
  voiceCancel: () => void 0,
7902
8000
  // Preferences — how visitors tune the surface.
7903
8001
  localeChange: (locale) => ({ locale }),
7904
8002
  themeChange: (theme) => ({ theme }),
7905
8003
  textSizeChange: (size) => ({ size }),
7906
- soundToggle: (p33) => ({ muted: p33.muted }),
7907
- sidebarToggle: (p33) => ({ collapsed: p33.collapsed }),
8004
+ soundToggle: (p35) => ({ muted: p35.muted }),
8005
+ sidebarToggle: (p35) => ({ collapsed: p35.collapsed }),
7908
8006
  calloutDismiss: () => void 0,
7909
8007
  // Health signal only — the error object itself never leaves the page.
7910
8008
  error: () => void 0