@skippr/live-agent-sdk 0.77.0 → 0.78.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.
@@ -8,7 +8,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
8
8
 
9
9
  // src/components/LiveAgent.tsx
10
10
  import { LiveKitRoom, RoomAudioRenderer } from "@livekit/components-react";
11
- import { useCallback as useCallback15, useEffect as useEffect27, useMemo as useMemo7, useRef as useRef18, useState as useState19 } from "react";
11
+ import { useCallback as useCallback17, useEffect as useEffect28, useMemo as useMemo7, useRef as useRef21, useState as useState20 } from "react";
12
12
 
13
13
  // src/capture/useAgentCursor.ts
14
14
  import { useEffect, useState } from "react";
@@ -68,6 +68,8 @@ var PAGE_ACTIONS_TOPIC = "skippr.page-actions";
68
68
  var TEXT_MODE_TOPIC = "skippr.text-mode";
69
69
  var ACTION_CONTROL_TOPIC = "skippr.action-control";
70
70
  var SESSION_HOLD_TOPIC = "skippr.session-hold";
71
+ var TAP_TO_TALK_TOPIC = "skippr.tap-to-talk";
72
+ var IDLE_AUTO_PAUSE_MS = 3 * 60 * 1000;
71
73
  var PLAN_ATTR = "skippr.action-plan";
72
74
  var NAME_MAX_CHARS = 80;
73
75
 
@@ -194,8 +196,85 @@ function useSessionHoldContext() {
194
196
  return useContext2(SessionHoldContext);
195
197
  }
196
198
 
199
+ // src/context/TapToTalkContext.tsx
200
+ import { createContext as createContext3, useContext as useContext3 } from "react";
201
+
202
+ // src/hooks/useTapToTalk.ts
203
+ import { useLocalParticipant as useLocalParticipant2 } from "@livekit/components-react/hooks";
204
+ import { useCallback as useCallback2, useState as useState3 } from "react";
205
+ var textEncoder2 = new TextEncoder;
206
+ function useTapToTalk() {
207
+ const { localParticipant } = useLocalParticipant2();
208
+ const [isCapturingSpeech, setIsCapturingSpeech] = useState3(false);
209
+ const publish = useCallback2(async (type) => {
210
+ await localParticipant.publishData(textEncoder2.encode(JSON.stringify({ type })), {
211
+ reliable: true,
212
+ topic: TAP_TO_TALK_TOPIC
213
+ });
214
+ }, [localParticipant]);
215
+ const startRecording = useCallback2(async () => {
216
+ try {
217
+ await localParticipant.setMicrophoneEnabled(true);
218
+ await publish("start");
219
+ setIsCapturingSpeech(true);
220
+ } catch (error) {
221
+ console.error("Failed to start tap-to-talk turn:", error);
222
+ }
223
+ }, [localParticipant, publish]);
224
+ const commitRecording = useCallback2(async () => {
225
+ try {
226
+ await localParticipant.setMicrophoneEnabled(false);
227
+ await publish("commit");
228
+ setIsCapturingSpeech(false);
229
+ } catch (error) {
230
+ console.error("Failed to commit tap-to-talk turn:", error);
231
+ }
232
+ }, [localParticipant, publish]);
233
+ const toggle = useCallback2(() => {
234
+ if (isCapturingSpeech) {
235
+ commitRecording();
236
+ } else {
237
+ startRecording();
238
+ }
239
+ }, [isCapturingSpeech, startRecording, commitRecording]);
240
+ return { isCapturingSpeech, toggle };
241
+ }
242
+
243
+ // src/context/TapToTalkContext.tsx
244
+ import { jsx as jsx2 } from "react/jsx-runtime";
245
+ var TapToTalkContext = createContext3({
246
+ isCapturingSpeech: false,
247
+ toggle: () => {}
248
+ });
249
+ function TapToTalkProvider({ children }) {
250
+ const tapToTalk = useTapToTalk();
251
+ return /* @__PURE__ */ jsx2(TapToTalkContext.Provider, {
252
+ value: tapToTalk,
253
+ children
254
+ });
255
+ }
256
+ function useTapToTalkContext() {
257
+ return useContext3(TapToTalkContext);
258
+ }
259
+
260
+ // src/context/TranscriptionsContext.tsx
261
+ import { useTranscriptions } from "@livekit/components-react/hooks";
262
+ import { createContext as createContext4, useContext as useContext4 } from "react";
263
+ import { jsx as jsx3 } from "react/jsx-runtime";
264
+ var TranscriptionsContext = createContext4([]);
265
+ function TranscriptionsProvider({ children }) {
266
+ const transcriptions = useTranscriptions();
267
+ return /* @__PURE__ */ jsx3(TranscriptionsContext.Provider, {
268
+ value: transcriptions,
269
+ children
270
+ });
271
+ }
272
+ function useSharedTranscriptions() {
273
+ return useContext4(TranscriptionsContext);
274
+ }
275
+
197
276
  // src/hooks/useAdoptionGoals.ts
198
- import { useCallback as useCallback2, useEffect as useEffect3, useMemo, useState as useState3 } from "react";
277
+ import { useCallback as useCallback3, useEffect as useEffect3, useMemo, useState as useState4 } from "react";
199
278
 
200
279
  // src/lib/hashMatch.ts
201
280
  function globToRegExp(pattern) {
@@ -263,9 +342,9 @@ function useAdoptionGoals({
263
342
  bearerToken,
264
343
  authedFetch
265
344
  }) {
266
- const [candidates, setCandidates] = useState3([]);
267
- const [hash, setHash] = useState3(window.location.hash);
268
- const match = useCallback2(async () => {
345
+ const [candidates, setCandidates] = useState4([]);
346
+ const [hash, setHash] = useState4(window.location.hash);
347
+ const match = useCallback3(async () => {
269
348
  try {
270
349
  const resp = await authedFetch(`${API_URL}/v1/adoption/goals/match`, {
271
350
  method: "POST",
@@ -315,21 +394,21 @@ function useAdoptionGoals({
315
394
  return hashSpecific;
316
395
  return candidates.filter((goal) => goal.hashPattern === null);
317
396
  }, [candidates, hash]);
318
- const postStatus = useCallback2((goalId, status) => {
397
+ const postStatus = useCallback3((goalId, status) => {
319
398
  authedFetch(`${API_URL}/v1/adoption/goals/${goalId}/status`, {
320
399
  method: "POST",
321
400
  headers: { "Content-Type": "application/json" },
322
401
  body: JSON.stringify({ status })
323
402
  }).catch((e) => console.warn("[Skippr] adoption status update failed", e));
324
403
  }, [authedFetch]);
325
- const attendGoal = useCallback2((goalId) => {
404
+ const attendGoal = useCallback3((goalId) => {
326
405
  postStatus(goalId, "attended" /* Attended */);
327
406
  }, [postStatus]);
328
407
  return { goals, attendGoal };
329
408
  }
330
409
 
331
410
  // src/hooks/useAuth.ts
332
- import { useCallback as useCallback3, useEffect as useEffect4, useState as useState4 } from "react";
411
+ import { useCallback as useCallback4, useEffect as useEffect4, useState as useState5 } from "react";
333
412
  var API_URL2 = "https://specialist.skippr.ai/api";
334
413
  function storageKey(appKey) {
335
414
  return `skippr_auth_${appKey}`;
@@ -356,10 +435,10 @@ function clearStoredToken(appKey) {
356
435
  }
357
436
  }
358
437
  function useAuth({ appKey }) {
359
- const [authToken, setAuthToken] = useState4(null);
360
- const [isValidating, setIsValidating] = useState4(false);
361
- const [isSubmitting, setIsSubmitting] = useState4(false);
362
- const [error, setError] = useState4("");
438
+ const [authToken, setAuthToken] = useState5(null);
439
+ const [isValidating, setIsValidating] = useState5(false);
440
+ const [isSubmitting, setIsSubmitting] = useState5(false);
441
+ const [error, setError] = useState5("");
363
442
  const isAuthenticated = authToken !== null;
364
443
  useEffect4(() => {
365
444
  if (!appKey)
@@ -395,7 +474,7 @@ function useAuth({ appKey }) {
395
474
  window.addEventListener("skippr:logout", handleLogout);
396
475
  return () => window.removeEventListener("skippr:logout", handleLogout);
397
476
  }, []);
398
- const requestOtp = useCallback3(async (email) => {
477
+ const requestOtp = useCallback4(async (email) => {
399
478
  if (!appKey)
400
479
  return false;
401
480
  setIsSubmitting(true);
@@ -422,7 +501,7 @@ function useAuth({ appKey }) {
422
501
  setIsSubmitting(false);
423
502
  }
424
503
  }, [appKey]);
425
- const verifyOtp = useCallback3(async (email, code) => {
504
+ const verifyOtp = useCallback4(async (email, code) => {
426
505
  if (!appKey)
427
506
  return;
428
507
  setIsSubmitting(true);
@@ -451,7 +530,7 @@ function useAuth({ appKey }) {
451
530
  setIsSubmitting(false);
452
531
  }
453
532
  }, [appKey]);
454
- const logout = useCallback3(async () => {
533
+ const logout = useCallback4(async () => {
455
534
  const token = authToken;
456
535
  if (appKey)
457
536
  clearStoredToken(appKey);
@@ -601,7 +680,7 @@ function useAutoStart({
601
680
  }
602
681
 
603
682
  // src/hooks/useAvailableModules.ts
604
- import { useCallback as useCallback4, useEffect as useEffect6, useState as useState5 } from "react";
683
+ import { useCallback as useCallback5, useEffect as useEffect6, useState as useState6 } from "react";
605
684
  var EMPTY_DEFAULT = { agentId: null, sessionId: null };
606
685
  var API_URL3 = "https://specialist.skippr.ai/api";
607
686
  function useAvailableModules({
@@ -610,12 +689,12 @@ function useAvailableModules({
610
689
  authedFetch,
611
690
  agentId
612
691
  }) {
613
- const [modules, setModules] = useState5([]);
614
- const [defaultSelection, setDefaultSelection] = useState5(EMPTY_DEFAULT);
615
- const [isLoading, setIsLoading] = useState5(false);
616
- const [hasResolved, setHasResolved] = useState5(false);
617
- const [error, setError] = useState5(null);
618
- const fetchModules = useCallback4(async () => {
692
+ const [modules, setModules] = useState6([]);
693
+ const [defaultSelection, setDefaultSelection] = useState6(EMPTY_DEFAULT);
694
+ const [isLoading, setIsLoading] = useState6(false);
695
+ const [hasResolved, setHasResolved] = useState6(false);
696
+ const [error, setError] = useState6(null);
697
+ const fetchModules = useCallback5(async () => {
619
698
  setIsLoading(true);
620
699
  setHasResolved(false);
621
700
  setError(null);
@@ -652,13 +731,13 @@ function useAvailableModules({
652
731
  }
653
732
 
654
733
  // src/hooks/usePlanUpdates.ts
655
- import { useCallback as useCallback5 } from "react";
734
+ import { useCallback as useCallback6 } from "react";
656
735
 
657
736
  // src/hooks/useAgentState.ts
658
737
  import { useRemoteParticipants } from "@livekit/components-react/hooks";
659
- import { useEffect as useEffect7, useState as useState6 } from "react";
738
+ import { useEffect as useEffect7, useState as useState7 } from "react";
660
739
  function useAgentState(attributeKey, parse, initial) {
661
- const [value, setValue] = useState6(initial);
740
+ const [value, setValue] = useState7(initial);
662
741
  const remoteParticipants = useRemoteParticipants();
663
742
  useEffect7(() => {
664
743
  const agentParticipant = remoteParticipants.find((p) => p.attributes?.[attributeKey]);
@@ -706,12 +785,12 @@ function parsePlan(json) {
706
785
  return null;
707
786
  }
708
787
  function usePlanUpdates() {
709
- const parse = useCallback5(parsePlan, []);
788
+ const parse = useCallback6(parsePlan, []);
710
789
  return useAgentState(PLAN_ATTR, parse, null);
711
790
  }
712
791
 
713
792
  // src/hooks/useSession.ts
714
- import { useCallback as useCallback6, useEffect as useEffect8, useRef as useRef2, useState as useState7 } from "react";
793
+ import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef2, useState as useState8 } from "react";
715
794
  var API_URL4 = "https://specialist.skippr.ai/api";
716
795
  async function fetchSessionMessages(sessionId, authedFetch) {
717
796
  try {
@@ -763,27 +842,27 @@ function useSession({
763
842
  onStartError,
764
843
  onDisconnect
765
844
  }) {
766
- const [connection, setConnection] = useState7(null);
767
- const [shouldConnect, setShouldConnect] = useState7(false);
768
- const [isStarting, setIsStarting] = useState7(false);
769
- const [isDisconnecting, setIsDisconnecting] = useState7(false);
770
- const [error, setError] = useState7("");
771
- const [errorCode, setErrorCode] = useState7(null);
772
- const [sessionId, setSessionId] = useState7(null);
773
- const [bearerToken, setBearerToken] = useState7(authToken ?? null);
774
- const [pendingScreenStream, setPendingScreenStream] = useState7(null);
775
- const [isPaused, setIsPaused] = useState7(false);
776
- const [isPausing, setIsPausing] = useState7(false);
777
- const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState7(null);
778
- const [historyMessages, setHistoryMessages] = useState7([]);
779
- const [authFailed, setAuthFailed] = useState7(false);
845
+ const [connection, setConnection] = useState8(null);
846
+ const [shouldConnect, setShouldConnect] = useState8(false);
847
+ const [isStarting, setIsStarting] = useState8(false);
848
+ const [isDisconnecting, setIsDisconnecting] = useState8(false);
849
+ const [error, setError] = useState8("");
850
+ const [errorCode, setErrorCode] = useState8(null);
851
+ const [sessionId, setSessionId] = useState8(null);
852
+ const [bearerToken, setBearerToken] = useState8(authToken ?? null);
853
+ const [pendingScreenStream, setPendingScreenStream] = useState8(null);
854
+ const [isPaused, setIsPaused] = useState8(false);
855
+ const [isPausing, setIsPausing] = useState8(false);
856
+ const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState8(null);
857
+ const [historyMessages, setHistoryMessages] = useState8([]);
858
+ const [authFailed, setAuthFailed] = useState8(false);
780
859
  const tokenRef = useRef2(authToken ? { token: authToken, expiresAt: null } : null);
781
860
  const getUserTokenRef = useRef2(getUserToken);
782
861
  getUserTokenRef.current = getUserToken ?? (userToken ? () => Promise.resolve(userToken) : undefined);
783
862
  const failedBearerRef = useRef2(null);
784
863
  const inFlightExchangeRef = useRef2(null);
785
- const canExchange = useCallback6(() => !!appKey && !!getUserTokenRef.current, [appKey]);
786
- const reExchange = useCallback6(async () => {
864
+ const canExchange = useCallback7(() => !!appKey && !!getUserTokenRef.current, [appKey]);
865
+ const reExchange = useCallback7(async () => {
787
866
  if (inFlightExchangeRef.current)
788
867
  return inFlightExchangeRef.current;
789
868
  const provider = getUserTokenRef.current;
@@ -803,7 +882,7 @@ function useSession({
803
882
  inFlightExchangeRef.current = null;
804
883
  }
805
884
  }, [appKey]);
806
- const getValidBearer = useCallback6(async () => {
885
+ const getValidBearer = useCallback7(async () => {
807
886
  const current = tokenRef.current;
808
887
  if (current) {
809
888
  if (current.expiresAt === null)
@@ -815,7 +894,7 @@ function useSession({
815
894
  return reExchange();
816
895
  return current?.token ?? null;
817
896
  }, [canExchange, reExchange]);
818
- const authedFetch = useCallback6(async (input, init = {}) => {
897
+ const authedFetch = useCallback7(async (input, init = {}) => {
819
898
  const isSecretMode = canExchange();
820
899
  const onTerminalAuthFailure = () => {
821
900
  if (isSecretMode)
@@ -894,7 +973,7 @@ function useSession({
894
973
  window.addEventListener("pagehide", onPageHide);
895
974
  return () => window.removeEventListener("pagehide", onPageHide);
896
975
  }, []);
897
- const startSession = useCallback6(async ({
976
+ const startSession = useCallback7(async ({
898
977
  agentId,
899
978
  agentControls,
900
979
  existingSessionId,
@@ -925,6 +1004,8 @@ function useSession({
925
1004
  enabledControls.highlight = true;
926
1005
  if (agentControls?.actions === true)
927
1006
  enabledControls.actions = true;
1007
+ if (agentControls?.tapToTalk === true)
1008
+ enabledControls.tapToTalk = true;
928
1009
  const requestAgentControls = Object.keys(enabledControls).length > 0 ? enabledControls : undefined;
929
1010
  try {
930
1011
  let resolvedSessionId = existingSessionId;
@@ -986,7 +1067,7 @@ function useSession({
986
1067
  setIsStarting(false);
987
1068
  }
988
1069
  }, [captureMode, bearerToken, authedFetch, onStart, onStartError]);
989
- const pauseSession = useCallback6(async () => {
1070
+ const pauseSession = useCallback7(async () => {
990
1071
  if (!sessionId || !bearerToken)
991
1072
  return;
992
1073
  setIsPausing(true);
@@ -1012,7 +1093,7 @@ function useSession({
1012
1093
  setIsPaused(true);
1013
1094
  setIsPausing(false);
1014
1095
  }, [sessionId, bearerToken, authedFetch, pendingScreenStream]);
1015
- const disconnect = useCallback6(async () => {
1096
+ const disconnect = useCallback7(async () => {
1016
1097
  setIsDisconnecting(true);
1017
1098
  try {
1018
1099
  if (sessionId && bearerToken) {
@@ -1057,7 +1138,7 @@ function useSession({
1057
1138
  }
1058
1139
 
1059
1140
  // src/hooks/useSessionHistory.ts
1060
- import { useEffect as useEffect9, useState as useState8 } from "react";
1141
+ import { useEffect as useEffect9, useState as useState9 } from "react";
1061
1142
  var API_URL5 = "https://specialist.skippr.ai/api";
1062
1143
  var EMPTY = { messages: [], phases: [] };
1063
1144
  function useSessionHistory({
@@ -1065,8 +1146,8 @@ function useSessionHistory({
1065
1146
  enabled,
1066
1147
  authedFetch
1067
1148
  }) {
1068
- const [history2, setHistory] = useState8(EMPTY);
1069
- const [loadedAgentId, setLoadedAgentId] = useState8(null);
1149
+ const [history2, setHistory] = useState9(EMPTY);
1150
+ const [loadedAgentId, setLoadedAgentId] = useState9(null);
1070
1151
  const activeAgentId = enabled && agentId ? agentId : null;
1071
1152
  const isLoading = activeAgentId !== null && activeAgentId !== loadedAgentId;
1072
1153
  useEffect9(() => {
@@ -1182,9 +1263,9 @@ var hasA11yProp = (props) => {
1182
1263
  };
1183
1264
 
1184
1265
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/context.js
1185
- import { createContext as createContext3, useContext as useContext3, useMemo as useMemo3, createElement } from "react";
1186
- var LucideContext = createContext3({});
1187
- var useLucideContext = () => useContext3(LucideContext);
1266
+ import { createContext as createContext5, useContext as useContext5, useMemo as useMemo3, createElement } from "react";
1267
+ var LucideContext = createContext5({});
1268
+ var useLucideContext = () => useContext5(LucideContext);
1188
1269
 
1189
1270
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/Icon.js
1190
1271
  var Icon = forwardRef(({ color, size, strokeWidth, absoluteStrokeWidth, className = "", children, iconNode, ...rest }, ref) => {
@@ -1408,7 +1489,7 @@ var __iconNode23 = [
1408
1489
  ];
1409
1490
  var X = createLucideIcon("x", __iconNode23);
1410
1491
  // src/components/AgentCursor.tsx
1411
- import { useContext as useContext4, useEffect as useEffect10, useLayoutEffect, useRef as useRef3, useState as useState9 } from "react";
1492
+ import { useContext as useContext6, useEffect as useEffect10, useLayoutEffect, useRef as useRef3, useState as useState10 } from "react";
1412
1493
 
1413
1494
  // src/capture/elementRef.ts
1414
1495
  function safeGetIframeDocument(iframe) {
@@ -1545,7 +1626,7 @@ function traceRing(path, durationMs, onFrame, onDone) {
1545
1626
  }
1546
1627
 
1547
1628
  // src/components/AgentCursor.tsx
1548
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
1629
+ import { jsx as jsx4, jsxs } from "react/jsx-runtime";
1549
1630
  var Z_INDEX = 2147483646;
1550
1631
  var BRAND_TEAL = "#2bc0ae";
1551
1632
  var GLIDE_EASE = "cubic-bezier(0.45, 0, 0.25, 1)";
@@ -1590,12 +1671,12 @@ function AgentCursor({
1590
1671
  target,
1591
1672
  animated = false
1592
1673
  }) {
1593
- const ctx = useContext4(LiveAgentContext);
1594
- const [cursor, setCursor] = useState9(null);
1595
- const [glideMs, setGlideMs] = useState9(0);
1596
- const [phase, setPhase] = useState9("idle");
1597
- const [ringBox, setRingBox] = useState9(null);
1598
- const [clickPulse, setClickPulse] = useState9(0);
1674
+ const ctx = useContext6(LiveAgentContext);
1675
+ const [cursor, setCursor] = useState10(null);
1676
+ const [glideMs, setGlideMs] = useState10(0);
1677
+ const [phase, setPhase] = useState10("idle");
1678
+ const [ringBox, setRingBox] = useState10(null);
1679
+ const [clickPulse, setClickPulse] = useState10(0);
1599
1680
  const cursorElRef = useRef3(null);
1600
1681
  const pathRef = useRef3(null);
1601
1682
  const prevCursorRef = useRef3(null);
@@ -1767,10 +1848,10 @@ function AgentCursor({
1767
1848
  "data-skippr-private": "true",
1768
1849
  "aria-hidden": "true",
1769
1850
  children: [
1770
- drawing && ringBox && /* @__PURE__ */ jsx2("svg", {
1851
+ drawing && ringBox && /* @__PURE__ */ jsx4("svg", {
1771
1852
  "aria-hidden": "true",
1772
1853
  style: { ...ringBoxStyle(ringBox, Z_INDEX), overflow: "visible" },
1773
- children: /* @__PURE__ */ jsx2("path", {
1854
+ children: /* @__PURE__ */ jsx4("path", {
1774
1855
  ref: pathRef,
1775
1856
  d: ringPathD(ringBox),
1776
1857
  fill: "none",
@@ -1784,20 +1865,20 @@ function AgentCursor({
1784
1865
  style: ringBoxStyle(ringBox, Z_INDEX),
1785
1866
  className: "skippr:relative",
1786
1867
  children: [
1787
- /* @__PURE__ */ jsx2("div", {
1868
+ /* @__PURE__ */ jsx4("div", {
1788
1869
  className: "skippr:absolute skippr:inset-0 skippr:rounded-[1rem] skippr:border-2 skippr:border-[#2bc0ae] skippr:animate-skippr-annotation-pulse"
1789
1870
  }),
1790
- /* @__PURE__ */ jsx2("div", {
1871
+ /* @__PURE__ */ jsx4("div", {
1791
1872
  role: "status",
1792
1873
  className: "skippr:absolute skippr:-bottom-9 skippr:left-1/2 skippr:-translate-x-1/2 skippr:flex skippr:items-center skippr:gap-1.5 skippr:rounded-full skippr:bg-[#2bc0ae] skippr:px-2.5 skippr:py-1 skippr:shadow-[0_4px_12px_rgba(0,0,0,0.12)]",
1793
- children: /* @__PURE__ */ jsx2("span", {
1874
+ children: /* @__PURE__ */ jsx4("span", {
1794
1875
  className: "skippr:text-[11px] skippr:font-medium skippr:text-white skippr:whitespace-nowrap",
1795
1876
  children: target.label
1796
1877
  })
1797
1878
  })
1798
1879
  ]
1799
1880
  }),
1800
- target.kind === "gesture" && /* @__PURE__ */ jsx2("div", {
1881
+ target.kind === "gesture" && /* @__PURE__ */ jsx4("div", {
1801
1882
  role: "status",
1802
1883
  className: "skippr:fixed skippr:-translate-x-1/2 skippr:flex skippr:items-center skippr:gap-1.5 skippr:rounded-full skippr:bg-[#2bc0ae] skippr:px-2.5 skippr:py-1 skippr:shadow-[0_4px_12px_rgba(0,0,0,0.12)]",
1803
1884
  style: {
@@ -1807,12 +1888,12 @@ function AgentCursor({
1807
1888
  pointerEvents: "none",
1808
1889
  transition: `left ${glideMs}ms ${GLIDE_EASE}, top ${glideMs}ms ${GLIDE_EASE}`
1809
1890
  },
1810
- children: /* @__PURE__ */ jsx2("span", {
1891
+ children: /* @__PURE__ */ jsx4("span", {
1811
1892
  className: "skippr:text-[11px] skippr:font-medium skippr:text-white skippr:whitespace-nowrap",
1812
1893
  children: target.label
1813
1894
  })
1814
1895
  }),
1815
- /* @__PURE__ */ jsx2("div", {
1896
+ /* @__PURE__ */ jsx4("div", {
1816
1897
  ref: cursorElRef,
1817
1898
  style: {
1818
1899
  position: "fixed",
@@ -1822,12 +1903,12 @@ function AgentCursor({
1822
1903
  zIndex: Z_INDEX,
1823
1904
  transition: `left ${glideMs}ms ${GLIDE_EASE}, top ${glideMs}ms ${GLIDE_EASE}`
1824
1905
  },
1825
- children: /* @__PURE__ */ jsx2(MousePointer2, {
1906
+ children: /* @__PURE__ */ jsx4(MousePointer2, {
1826
1907
  className: `skippr:h-5 skippr:w-5 skippr:text-[#2bc0ae] skippr:drop-shadow-[0_2px_5px_rgba(0,0,0,0.4)] ${clickPulse > 0 ? "skippr:animate-skippr-press" : "skippr:animate-skippr-cursor-pop"}`,
1827
1908
  fill: "currentColor"
1828
1909
  }, clickPulse)
1829
1910
  }),
1830
- clickPulse > 0 && rippleCenter && /* @__PURE__ */ jsx2("span", {
1911
+ clickPulse > 0 && rippleCenter && /* @__PURE__ */ jsx4("span", {
1831
1912
  className: "skippr:fixed skippr:h-7 skippr:w-7 skippr:rounded-full skippr:bg-[#2bc0ae]/50 skippr:animate-skippr-click-ping",
1832
1913
  style: {
1833
1914
  left: `${rippleCenter.x}px`,
@@ -1841,11 +1922,11 @@ function AgentCursor({
1841
1922
  }
1842
1923
 
1843
1924
  // src/components/AutoStartMedia.tsx
1844
- import { useConnectionState, useLocalParticipant as useLocalParticipant2 } from "@livekit/components-react/hooks";
1925
+ import { useConnectionState, useLocalParticipant as useLocalParticipant3 } from "@livekit/components-react/hooks";
1845
1926
  import { ConnectionState, Track } from "livekit-client";
1846
1927
  import { useEffect as useEffect11, useRef as useRef4 } from "react";
1847
- function AutoStartMedia({ pendingScreenStream }) {
1848
- const { localParticipant } = useLocalParticipant2();
1928
+ function AutoStartMedia({ pendingScreenStream, tapToTalk = false }) {
1929
+ const { localParticipant } = useLocalParticipant3();
1849
1930
  const connectionState = useConnectionState();
1850
1931
  const didStartRef = useRef4(false);
1851
1932
  useEffect11(() => {
@@ -1854,7 +1935,9 @@ function AutoStartMedia({ pendingScreenStream }) {
1854
1935
  if (connectionState !== ConnectionState.Connected)
1855
1936
  return;
1856
1937
  didStartRef.current = true;
1857
- localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
1938
+ if (!tapToTalk) {
1939
+ localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
1940
+ }
1858
1941
  if (pendingScreenStream) {
1859
1942
  const videoTrack = pendingScreenStream.getVideoTracks()[0];
1860
1943
  if (videoTrack) {
@@ -1866,12 +1949,12 @@ function AutoStartMedia({ pendingScreenStream }) {
1866
1949
  });
1867
1950
  }
1868
1951
  }
1869
- }, [connectionState, localParticipant, pendingScreenStream]);
1952
+ }, [connectionState, localParticipant, pendingScreenStream, tapToTalk]);
1870
1953
  return null;
1871
1954
  }
1872
1955
 
1873
1956
  // src/components/DomCapture.tsx
1874
- import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant3 } from "@livekit/components-react/hooks";
1957
+ import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
1875
1958
  import { ConnectionState as ConnectionState2, ScreenSharePresets, Track as Track2 } from "livekit-client";
1876
1959
  import { useEffect as useEffect12, useRef as useRef5 } from "react";
1877
1960
 
@@ -2488,7 +2571,7 @@ function subscribeActionsBusy(cb) {
2488
2571
 
2489
2572
  // src/capture/domEvents.ts
2490
2573
  var MUTATION_DEBOUNCE_MS = 250;
2491
- var textEncoder2 = new TextEncoder;
2574
+ var textEncoder3 = new TextEncoder;
2492
2575
  function isInsideWidget(target) {
2493
2576
  if (!(target instanceof Node))
2494
2577
  return false;
@@ -2514,7 +2597,7 @@ function installDomEventListeners(localParticipant, options = {}) {
2514
2597
  const { onTriggerEvent } = options;
2515
2598
  function publishDomEvent(event) {
2516
2599
  try {
2517
- localParticipant.publishData(textEncoder2.encode(JSON.stringify(event)), {
2600
+ localParticipant.publishData(textEncoder3.encode(JSON.stringify(event)), {
2518
2601
  reliable: true,
2519
2602
  topic: DOM_EVENTS_TOPIC
2520
2603
  }).catch(() => {
@@ -2680,7 +2763,7 @@ var CAPTURE_BITRATE = 4000000;
2680
2763
  var DOM_SNAPSHOT_GZIP_THRESHOLD_BYTES = 14000;
2681
2764
  var MAX_CANVAS_DPR = 1.5;
2682
2765
  var CONSECUTIVE_FAILURES_BEFORE_REPORT = 3;
2683
- var textEncoder3 = new TextEncoder;
2766
+ var textEncoder4 = new TextEncoder;
2684
2767
  function shouldIncludeInSnapshot(element) {
2685
2768
  if (!(element instanceof Element))
2686
2769
  return true;
@@ -2755,7 +2838,7 @@ async function buildDomSnapshotFrame() {
2755
2838
  title: document.title,
2756
2839
  capturedAt: new Date().toISOString()
2757
2840
  });
2758
- const snapshotBytes = textEncoder3.encode(snapshotJson);
2841
+ const snapshotBytes = textEncoder4.encode(snapshotJson);
2759
2842
  const { bytes, compressionFlag } = await gzipIfBeneficial(snapshotBytes);
2760
2843
  const frame = new Uint8Array(bytes.byteLength + 1);
2761
2844
  frame[0] = compressionFlag;
@@ -2764,7 +2847,7 @@ async function buildDomSnapshotFrame() {
2764
2847
  }
2765
2848
  function reportCaptureError(localParticipant) {
2766
2849
  try {
2767
- localParticipant.publishData(textEncoder3.encode(JSON.stringify({ type: "capture_error" })), {
2850
+ localParticipant.publishData(textEncoder4.encode(JSON.stringify({ type: "capture_error" })), {
2768
2851
  reliable: true,
2769
2852
  topic: DOM_SNAPSHOT_TOPIC
2770
2853
  }).catch(() => {
@@ -2778,8 +2861,8 @@ async function unpublishAndStopTrack(localParticipant, videoTrack) {
2778
2861
  } catch {}
2779
2862
  videoTrack.stop();
2780
2863
  }
2781
- function DomCapture() {
2782
- const { localParticipant } = useLocalParticipant3();
2864
+ function DomCapture({ tapToTalk = false }) {
2865
+ const { localParticipant } = useLocalParticipant4();
2783
2866
  const connectionState = useConnectionState2();
2784
2867
  const didStartRef = useRef5(false);
2785
2868
  useEffect12(() => {
@@ -2803,7 +2886,9 @@ function DomCapture() {
2803
2886
  let snapshotInFlight = false;
2804
2887
  let a11yPublishInFlight = false;
2805
2888
  let consecutiveCaptureFailures = 0;
2806
- localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
2889
+ if (!tapToTalk) {
2890
+ localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
2891
+ }
2807
2892
  localParticipant.publishTrack(videoTrack, {
2808
2893
  source: Track2.Source.ScreenShare,
2809
2894
  videoEncoding: {
@@ -2886,14 +2971,14 @@ function DomCapture() {
2886
2971
  for (const track of canvasStream.getTracks())
2887
2972
  track.stop();
2888
2973
  };
2889
- }, [connectionState, localParticipant]);
2974
+ }, [connectionState, localParticipant, tapToTalk]);
2890
2975
  return null;
2891
2976
  }
2892
2977
 
2893
2978
  // src/components/HighlightOverlay.tsx
2894
2979
  import { useDataChannel } from "@livekit/components-react/hooks";
2895
- import { useCallback as useCallback7, useEffect as useEffect13, useRef as useRef6 } from "react";
2896
- var HIGHLIGHT_AUTO_CLEAR_MS = 1e4;
2980
+ import { useCallback as useCallback8, useEffect as useEffect13, useRef as useRef6 } from "react";
2981
+ var HIGHLIGHT_AUTO_CLEAR_MS = 25000;
2897
2982
  var textDecoder = new TextDecoder;
2898
2983
  function parseHighlightMessage(payload) {
2899
2984
  try {
@@ -2917,14 +3002,14 @@ function parseHighlightMessage(payload) {
2917
3002
  function HighlightOverlay() {
2918
3003
  const targetRef = useRef6(null);
2919
3004
  const autoClearRef = useRef6(null);
2920
- const clear = useCallback7(() => {
3005
+ const clear = useCallback8(() => {
2921
3006
  if (autoClearRef.current)
2922
3007
  clearTimeout(autoClearRef.current);
2923
3008
  autoClearRef.current = null;
2924
3009
  targetRef.current = null;
2925
3010
  clearCursorTarget("guide");
2926
3011
  }, []);
2927
- const onHighlightMessage = useCallback7((msg) => {
3012
+ const onHighlightMessage = useCallback8((msg) => {
2928
3013
  const parsed = parseHighlightMessage(msg.payload);
2929
3014
  if (!parsed)
2930
3015
  return;
@@ -2963,7 +3048,7 @@ function HighlightOverlay() {
2963
3048
  }
2964
3049
 
2965
3050
  // src/components/MinimizedBubble.tsx
2966
- import { useContext as useContext5, useEffect as useEffect15, useRef as useRef8, useState as useState10 } from "react";
3051
+ import { useContext as useContext7, useEffect as useEffect15, useRef as useRef8, useState as useState11 } from "react";
2967
3052
 
2968
3053
  // src/hooks/useLauncherDrag.ts
2969
3054
  import { useEffect as useEffect14, useRef as useRef7 } from "react";
@@ -3126,7 +3211,7 @@ function cn(...inputs) {
3126
3211
  }
3127
3212
 
3128
3213
  // src/components/AdoptionBubble.tsx
3129
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
3214
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
3130
3215
  function AdoptionBubble({
3131
3216
  goal,
3132
3217
  onAttend,
@@ -3134,7 +3219,7 @@ function AdoptionBubble({
3134
3219
  exitDelayMs = 0,
3135
3220
  hidden = false
3136
3221
  }) {
3137
- return /* @__PURE__ */ jsx3("div", {
3222
+ return /* @__PURE__ */ jsx5("div", {
3138
3223
  style: {
3139
3224
  animationDelay: `${appearDelayMs}ms`,
3140
3225
  transitionDelay: hidden ? `${exitDelayMs}ms` : "0ms"
@@ -3145,18 +3230,18 @@ function AdoptionBubble({
3145
3230
  onClick: () => onAttend(goal),
3146
3231
  className: cn("skippr:flex skippr:max-w-72 skippr:items-center skippr:gap-2", "skippr:rounded-[14px] skippr:bg-amber-50 skippr:py-1.5 skippr:pr-3 skippr:pl-1.5", "skippr:text-left skippr:shadow-[0_8px_24px_rgba(0,0,0,0.18)]", "skippr:transition-colors skippr:cursor-pointer skippr:hover:bg-amber-100", "skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-bubble/60"),
3147
3232
  children: [
3148
- /* @__PURE__ */ jsx3("span", {
3233
+ /* @__PURE__ */ jsx5("span", {
3149
3234
  className: cn("skippr:flex skippr:h-6 skippr:w-6 skippr:shrink-0 skippr:items-center skippr:justify-center", "skippr:text-amber-700"),
3150
- children: /* @__PURE__ */ jsx3(Lightbulb, {
3235
+ children: /* @__PURE__ */ jsx5(Lightbulb, {
3151
3236
  className: "skippr:h-3.5 skippr:w-3.5",
3152
3237
  fill: "currentColor"
3153
3238
  })
3154
3239
  }),
3155
- /* @__PURE__ */ jsx3("span", {
3240
+ /* @__PURE__ */ jsx5("span", {
3156
3241
  className: "skippr:min-w-0 skippr:truncate skippr:text-[13px] skippr:font-semibold skippr:text-amber-950",
3157
3242
  children: goal.displayMessage
3158
3243
  }),
3159
- /* @__PURE__ */ jsx3(ArrowRight, {
3244
+ /* @__PURE__ */ jsx5(ArrowRight, {
3160
3245
  className: "skippr:h-3.5 skippr:w-3.5 skippr:shrink-0 skippr:text-amber-700"
3161
3246
  })
3162
3247
  ]
@@ -3165,7 +3250,7 @@ function AdoptionBubble({
3165
3250
  }
3166
3251
 
3167
3252
  // src/components/ModulePill.tsx
3168
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
3253
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
3169
3254
  var RING_RADIUS = 8;
3170
3255
  var RING_CIRCUMFERENCE = 2 * Math.PI * RING_RADIUS;
3171
3256
  function ModulePill({ module, onSelect }) {
@@ -3183,7 +3268,7 @@ function ModulePill({ module, onSelect }) {
3183
3268
  className: "skippr:size-4 skippr:shrink-0 skippr:-rotate-90",
3184
3269
  "aria-hidden": "true",
3185
3270
  children: [
3186
- /* @__PURE__ */ jsx4("circle", {
3271
+ /* @__PURE__ */ jsx6("circle", {
3187
3272
  cx: "10",
3188
3273
  cy: "10",
3189
3274
  r: RING_RADIUS,
@@ -3191,7 +3276,7 @@ function ModulePill({ module, onSelect }) {
3191
3276
  strokeWidth: "2.5",
3192
3277
  className: "skippr:stroke-black/15"
3193
3278
  }),
3194
- /* @__PURE__ */ jsx4("circle", {
3279
+ /* @__PURE__ */ jsx6("circle", {
3195
3280
  cx: "10",
3196
3281
  cy: "10",
3197
3282
  r: RING_RADIUS,
@@ -3204,7 +3289,7 @@ function ModulePill({ module, onSelect }) {
3204
3289
  })
3205
3290
  ]
3206
3291
  }),
3207
- /* @__PURE__ */ jsx4("span", {
3292
+ /* @__PURE__ */ jsx6("span", {
3208
3293
  className: "skippr:min-w-0 skippr:flex-1 skippr:truncate skippr:text-left",
3209
3294
  children: module.name
3210
3295
  }),
@@ -3221,7 +3306,7 @@ function ModulePill({ module, onSelect }) {
3221
3306
  }
3222
3307
 
3223
3308
  // src/components/MinimizedBubble.tsx
3224
- import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
3309
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
3225
3310
  var GOALS_AUTO_HIDE_MS = 1e4;
3226
3311
  var GOAL_FADE_OUT_MS = 300;
3227
3312
  var GOAL_APPEAR_STAGGER_MS = 150;
@@ -3229,17 +3314,17 @@ var GOAL_EXIT_STAGGER_MS = 250;
3229
3314
  var MAX_GOAL_BUBBLES = 3;
3230
3315
  var MAX_MODULE_PILLS = 3;
3231
3316
  function SkipprMark({ onStart }) {
3232
- return /* @__PURE__ */ jsx5("button", {
3317
+ return /* @__PURE__ */ jsx7("button", {
3233
3318
  type: "button",
3234
3319
  onClick: onStart,
3235
3320
  "aria-label": "Ask Me Anything",
3236
3321
  className: "skippr:flex skippr:h-[36px] skippr:w-[36px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:bg-transparent skippr:p-0",
3237
- children: /* @__PURE__ */ jsx5("svg", {
3322
+ children: /* @__PURE__ */ jsx7("svg", {
3238
3323
  viewBox: "0 0 15.4044 18.4853",
3239
3324
  className: "skippr:h-[18.5px] skippr:w-[15.4px]",
3240
3325
  fill: "none",
3241
3326
  "aria-hidden": "true",
3242
- children: /* @__PURE__ */ jsx5("path", {
3327
+ children: /* @__PURE__ */ jsx7("path", {
3243
3328
  d: "M2.25789 0.295419C1.33925 -0.413932 0 0.234459 0 1.38715V17.0972C0 18.4106 1.67407 18.987 2.49664 17.9562L6.40435 13.061C6.54853 12.8805 6.73209 12.7348 6.94126 12.6347C7.15043 12.5345 7.37978 12.4826 7.6121 12.4828H14.0025C15.3343 12.4828 15.9134 10.8128 14.8614 10.0037L2.25789 0.295419Z",
3244
3329
  className: "skippr:fill-brand"
3245
3330
  })
@@ -3251,7 +3336,7 @@ function ChatButton({
3251
3336
  position,
3252
3337
  onClick
3253
3338
  }) {
3254
- return /* @__PURE__ */ jsx5("button", {
3339
+ return /* @__PURE__ */ jsx7("button", {
3255
3340
  type: "button",
3256
3341
  onClick,
3257
3342
  "aria-label": "Open chat",
@@ -3263,9 +3348,9 @@ function ChatButton({
3263
3348
  transform: revealed ? "scale(1)" : "scale(0.55)",
3264
3349
  cursor: revealed ? "pointer" : "default"
3265
3350
  },
3266
- children: /* @__PURE__ */ jsx5("span", {
3351
+ children: /* @__PURE__ */ jsx7("span", {
3267
3352
  className: "skippr:flex skippr:h-[36px] skippr:w-[36px] skippr:items-center skippr:justify-center skippr:rounded-[11px] skippr:bg-white",
3268
- children: /* @__PURE__ */ jsx5("svg", {
3353
+ children: /* @__PURE__ */ jsx7("svg", {
3269
3354
  width: "18",
3270
3355
  height: "18",
3271
3356
  viewBox: "0 0 24 24",
@@ -3275,7 +3360,7 @@ function ChatButton({
3275
3360
  strokeLinecap: "round",
3276
3361
  strokeLinejoin: "round",
3277
3362
  "aria-hidden": "true",
3278
- children: /* @__PURE__ */ jsx5("path", {
3363
+ children: /* @__PURE__ */ jsx7("path", {
3279
3364
  d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"
3280
3365
  })
3281
3366
  })
@@ -3292,12 +3377,12 @@ function IdleLauncher({
3292
3377
  className: cn("skippr:flex skippr:h-[48px] skippr:items-center", "skippr:bg-launcher skippr:p-1.5 skippr:shadow-[-6px_8px_30px_rgba(15,18,26,0.32)]", "skippr:[animation:skippr-orb-in_320ms_cubic-bezier(0.34,1.3,0.64,1)]", "skippr:transition-transform skippr:duration-[400ms] skippr:ease-[cubic-bezier(0.22,1,0.36,1)]", position === "right" ? "skippr:rounded-l-[18px] skippr:origin-right" : "skippr:rounded-r-[18px] skippr:origin-left", position === "right" ? isHovered ? "skippr:translate-x-3" : "skippr:translate-x-7" : isHovered ? "skippr:-translate-x-3" : "skippr:-translate-x-7"),
3293
3378
  style: { gap: isHovered ? 8 : 0 },
3294
3379
  children: [
3295
- /* @__PURE__ */ jsx5(ChatButton, {
3380
+ /* @__PURE__ */ jsx7(ChatButton, {
3296
3381
  revealed: isHovered,
3297
3382
  position,
3298
3383
  onClick: onChat
3299
3384
  }),
3300
- /* @__PURE__ */ jsx5(SkipprMark, {
3385
+ /* @__PURE__ */ jsx7(SkipprMark, {
3301
3386
  onStart
3302
3387
  })
3303
3388
  ]
@@ -3321,7 +3406,7 @@ function WelcomeBubble({
3321
3406
  "aria-label": "Dismiss",
3322
3407
  children: [
3323
3408
  message,
3324
- /* @__PURE__ */ jsx5("span", {
3409
+ /* @__PURE__ */ jsx7("span", {
3325
3410
  className: cn("skippr:absolute skippr:size-2.5", "skippr:border-l skippr:border-t skippr:border-border skippr:bg-card", popsDown ? "skippr:bottom-full skippr:rotate-45 skippr:-mb-[5px]" : "skippr:top-full skippr:rotate-[225deg] skippr:-mt-[5px]", position === "right" ? "skippr:right-5" : "skippr:left-5")
3326
3411
  })
3327
3412
  ]
@@ -3332,7 +3417,7 @@ function MinimizedBubble({
3332
3417
  welcomeDismissed,
3333
3418
  onDismissWelcome
3334
3419
  }) {
3335
- const ctx = useContext5(LiveAgentContext);
3420
+ const ctx = useContext7(LiveAgentContext);
3336
3421
  if (!ctx) {
3337
3422
  throw new Error("MinimizedBubble must be used within a <LiveAgent> provider");
3338
3423
  }
@@ -3354,9 +3439,9 @@ function MinimizedBubble({
3354
3439
  setSidebarTab,
3355
3440
  commitLauncherDrop
3356
3441
  } = ctx;
3357
- const [goalsAutoHidden, setGoalsAutoHidden] = useState10(false);
3358
- const [isLauncherHovered, setIsLauncherHovered] = useState10(false);
3359
- const [visitHref, setVisitHref] = useState10(() => window.location.href);
3442
+ const [goalsAutoHidden, setGoalsAutoHidden] = useState11(false);
3443
+ const [isLauncherHovered, setIsLauncherHovered] = useState11(false);
3444
+ const [visitHref, setVisitHref] = useState11(() => window.location.href);
3360
3445
  const revealedHrefRef = useRef8(null);
3361
3446
  const hoverContainerRef = useRef8(null);
3362
3447
  useEffect15(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
@@ -3396,7 +3481,7 @@ function MinimizedBubble({
3396
3481
  }, [goalsEligible, visitHref]);
3397
3482
  const matchedGoals = goalsEligible ? adoptionGoals.slice(0, MAX_GOAL_BUBBLES) : [];
3398
3483
  const goalsHidden = goalsAutoHidden && !isLauncherHovered;
3399
- const [goalsUnmounted, setGoalsUnmounted] = useState10(false);
3484
+ const [goalsUnmounted, setGoalsUnmounted] = useState11(false);
3400
3485
  useEffect15(() => {
3401
3486
  if (!goalsHidden) {
3402
3487
  setGoalsUnmounted(false);
@@ -3431,7 +3516,7 @@ function MinimizedBubble({
3431
3516
  (modulePills.length > 0 || visibleGoals.length > 0) && /* @__PURE__ */ jsxs4("div", {
3432
3517
  className: cn("skippr:absolute skippr:gap-2", popsDown ? "skippr:top-full skippr:mt-3 skippr:flex skippr:flex-col-reverse" : "skippr:bottom-full skippr:mb-3 skippr:flex skippr:flex-col", position === "right" ? "skippr:right-0 skippr:items-end" : "skippr:left-0 skippr:items-start"),
3433
3518
  children: [
3434
- visibleGoals.map((goal, index2) => /* @__PURE__ */ jsx5(AdoptionBubble, {
3519
+ visibleGoals.map((goal, index2) => /* @__PURE__ */ jsx7(AdoptionBubble, {
3435
3520
  goal,
3436
3521
  onAttend: (attended) => {
3437
3522
  if (!wasDraggedRef.current)
@@ -3441,7 +3526,7 @@ function MinimizedBubble({
3441
3526
  exitDelayMs: (visibleGoals.length - 1 - index2) * GOAL_EXIT_STAGGER_MS,
3442
3527
  hidden: goalsHidden
3443
3528
  }, goal.goalId)),
3444
- modulePills.map((module) => /* @__PURE__ */ jsx5(ModulePill, {
3529
+ modulePills.map((module) => /* @__PURE__ */ jsx7(ModulePill, {
3445
3530
  module,
3446
3531
  onSelect: (id) => {
3447
3532
  if (!wasDraggedRef.current)
@@ -3450,7 +3535,7 @@ function MinimizedBubble({
3450
3535
  }, module.id))
3451
3536
  ]
3452
3537
  }),
3453
- welcomeMessage && !welcomeDismissed && adoptionGoals.length === 0 && modulePills.length === 0 && /* @__PURE__ */ jsx5(WelcomeBubble, {
3538
+ welcomeMessage && !welcomeDismissed && adoptionGoals.length === 0 && modulePills.length === 0 && /* @__PURE__ */ jsx7(WelcomeBubble, {
3454
3539
  message: welcomeMessage,
3455
3540
  position,
3456
3541
  popsDown,
@@ -3460,7 +3545,7 @@ function MinimizedBubble({
3460
3545
  onDismissWelcome();
3461
3546
  }
3462
3547
  }),
3463
- /* @__PURE__ */ jsx5(IdleLauncher, {
3548
+ /* @__PURE__ */ jsx7(IdleLauncher, {
3464
3549
  position,
3465
3550
  isHovered: isLauncherHovered,
3466
3551
  onStart: launchDefaultSession,
@@ -3472,7 +3557,7 @@ function MinimizedBubble({
3472
3557
 
3473
3558
  // src/components/PageActionHandler.tsx
3474
3559
  import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
3475
- import { useCallback as useCallback8, useEffect as useEffect16, useRef as useRef9 } from "react";
3560
+ import { useCallback as useCallback9, useEffect as useEffect16, useRef as useRef9 } from "react";
3476
3561
  var STEP_MAX_WAIT_MS = 5000;
3477
3562
  var POST_ACTION_SETTLE_SNAPSHOT_MS = 300;
3478
3563
  var textDecoder2 = new TextDecoder;
@@ -3694,7 +3779,7 @@ function PageActionHandler() {
3694
3779
  const drainingRef = useRef9(false);
3695
3780
  const settleTimerRef = useRef9(null);
3696
3781
  const endStepRef = useRef9(null);
3697
- const runStep = useCallback8((action) => {
3782
+ const runStep = useCallback9((action) => {
3698
3783
  return new Promise((resolve) => {
3699
3784
  if (action.type === "scroll_page") {
3700
3785
  let scrolled = false;
@@ -3763,7 +3848,7 @@ function PageActionHandler() {
3763
3848
  });
3764
3849
  });
3765
3850
  }, []);
3766
- const drain = useCallback8(async () => {
3851
+ const drain = useCallback9(async () => {
3767
3852
  if (drainingRef.current)
3768
3853
  return;
3769
3854
  drainingRef.current = true;
@@ -3794,7 +3879,7 @@ function PageActionHandler() {
3794
3879
  }
3795
3880
  }
3796
3881
  }, [runStep]);
3797
- const onMessage = useCallback8((msg) => {
3882
+ const onMessage = useCallback9((msg) => {
3798
3883
  const action = parsePageAction(msg.payload);
3799
3884
  if (!action)
3800
3885
  return;
@@ -3829,25 +3914,25 @@ function PageActionHandler() {
3829
3914
  }
3830
3915
 
3831
3916
  // src/components/SessionControlBar.tsx
3832
- import { useContext as useContext6, useEffect as useEffect19 } from "react";
3917
+ import { useContext as useContext8, useEffect as useEffect20 } from "react";
3833
3918
 
3834
3919
  // src/hooks/useActionControl.ts
3835
- import { useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
3836
- import { useCallback as useCallback9, useEffect as useEffect17, useState as useState11 } from "react";
3837
- var textEncoder4 = new TextEncoder;
3920
+ import { useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
3921
+ import { useCallback as useCallback10, useEffect as useEffect17, useState as useState12 } from "react";
3922
+ var textEncoder5 = new TextEncoder;
3838
3923
  function useActionControl() {
3839
- const { localParticipant } = useLocalParticipant4();
3924
+ const { localParticipant } = useLocalParticipant5();
3840
3925
  const plan = usePlanUpdates();
3841
- const [busy, setBusy] = useState11(isActionsBusy);
3842
- const [actionsPaused2, setPaused] = useState11(false);
3926
+ const [busy, setBusy] = useState12(isActionsBusy);
3927
+ const [actionsPaused2, setPaused] = useState12(false);
3843
3928
  useEffect17(() => subscribeActionsBusy(setBusy), []);
3844
3929
  const actionsActive = busy || plan?.state === "executing";
3845
- const togglePaused = useCallback9(async () => {
3930
+ const togglePaused = useCallback10(async () => {
3846
3931
  const next = !actionsPaused2;
3847
3932
  setPaused(next);
3848
3933
  setActionsPaused(next);
3849
3934
  try {
3850
- await localParticipant.publishData(textEncoder4.encode(JSON.stringify({ type: next ? "pause" : "resume" })), { reliable: true, topic: ACTION_CONTROL_TOPIC });
3935
+ await localParticipant.publishData(textEncoder5.encode(JSON.stringify({ type: next ? "pause" : "resume" })), { reliable: true, topic: ACTION_CONTROL_TOPIC });
3851
3936
  } catch (error) {
3852
3937
  console.error("Failed to send action pause/resume:", error);
3853
3938
  }
@@ -3868,12 +3953,12 @@ function useAgentVoiceState() {
3868
3953
  }
3869
3954
 
3870
3955
  // src/hooks/useAudioLevelBars.ts
3871
- import { useEffect as useEffect18, useRef as useRef10, useState as useState12 } from "react";
3956
+ import { useEffect as useEffect18, useRef as useRef10, useState as useState13 } from "react";
3872
3957
  var TALKING_LEVEL_THRESHOLD = 0.2;
3873
3958
  var TALKING_HOLD_MS = 400;
3874
3959
  function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowthPx, noiseGate }) {
3875
3960
  const barRefs = useRef10([]);
3876
- const [isTalking, setIsTalking] = useState12(false);
3961
+ const [isTalking, setIsTalking] = useState13(false);
3877
3962
  useEffect18(() => {
3878
3963
  if (!mediaStreamTrack) {
3879
3964
  for (const bar of barRefs.current) {
@@ -3924,27 +4009,82 @@ function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowth
3924
4009
  return { barRefs, isTalking };
3925
4010
  }
3926
4011
 
4012
+ // src/hooks/useIdleAutoPause.ts
4013
+ import { useCallback as useCallback11, useEffect as useEffect19, useRef as useRef11 } from "react";
4014
+ function useIdleAutoPause({
4015
+ enabled,
4016
+ active,
4017
+ isHeld,
4018
+ pause
4019
+ }) {
4020
+ const timerRef = useRef11(null);
4021
+ const pauseRef = useRef11(pause);
4022
+ pauseRef.current = pause;
4023
+ const clearTimer = useCallback11(() => {
4024
+ if (timerRef.current) {
4025
+ clearTimeout(timerRef.current);
4026
+ timerRef.current = null;
4027
+ }
4028
+ }, []);
4029
+ const armTimer = useCallback11(() => {
4030
+ clearTimer();
4031
+ timerRef.current = setTimeout(() => pauseRef.current(), IDLE_AUTO_PAUSE_MS);
4032
+ }, [clearTimer]);
4033
+ const reportActivity = useCallback11(() => {
4034
+ if (enabled && !isHeld)
4035
+ armTimer();
4036
+ }, [enabled, isHeld, armTimer]);
4037
+ useEffect19(() => {
4038
+ if (!enabled || isHeld || active) {
4039
+ clearTimer();
4040
+ return;
4041
+ }
4042
+ armTimer();
4043
+ return clearTimer;
4044
+ }, [enabled, isHeld, active, armTimer, clearTimer]);
4045
+ return { reportActivity };
4046
+ }
4047
+
4048
+ // src/hooks/useLiveUserTranscript.ts
4049
+ import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
4050
+ import { useRef as useRef12 } from "react";
4051
+ function useLiveUserTranscript(active) {
4052
+ const transcriptions = useSharedTranscriptions();
4053
+ const { localParticipant } = useLocalParticipant6();
4054
+ const localIdentity = localParticipant.identity;
4055
+ const priorStreamIdsRef = useRef12(new Set);
4056
+ const wasActiveRef = useRef12(false);
4057
+ const userStreams = transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity);
4058
+ if (active && !wasActiveRef.current) {
4059
+ priorStreamIdsRef.current = new Set(userStreams.map((s) => s.streamInfo.id));
4060
+ }
4061
+ wasActiveRef.current = active;
4062
+ if (!active)
4063
+ return "";
4064
+ return userStreams.filter((stream) => !priorStreamIdsRef.current.has(stream.streamInfo.id)).map((stream) => stream.text.trim()).filter((text) => text.length > 0).join(" ");
4065
+ }
4066
+
3927
4067
  // src/hooks/useMediaControls.ts
3928
- import { useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
4068
+ import { useLocalParticipant as useLocalParticipant7 } from "@livekit/components-react/hooks";
3929
4069
  import { ScreenSharePresets as ScreenSharePresets2 } from "livekit-client";
3930
- import { useCallback as useCallback10 } from "react";
4070
+ import { useCallback as useCallback12 } from "react";
3931
4071
  var SCREEN_SHARE_OPTIONS = {
3932
4072
  video: { displaySurface: "browser" },
3933
4073
  resolution: ScreenSharePresets2.h720fps30.resolution,
3934
4074
  contentHint: "detail"
3935
4075
  };
3936
4076
  function useMediaControls() {
3937
- const { localParticipant } = useLocalParticipant5();
4077
+ const { localParticipant } = useLocalParticipant7();
3938
4078
  const isMuted = !localParticipant.isMicrophoneEnabled;
3939
4079
  const isScreenSharing = localParticipant.isScreenShareEnabled;
3940
- const toggleMute = useCallback10(async () => {
4080
+ const toggleMute = useCallback12(async () => {
3941
4081
  try {
3942
4082
  await localParticipant.setMicrophoneEnabled(isMuted);
3943
4083
  } catch (error) {
3944
4084
  console.error("Failed to toggle microphone:", error);
3945
4085
  }
3946
4086
  }, [localParticipant, isMuted]);
3947
- const toggleScreenShare = useCallback10(async () => {
4087
+ const toggleScreenShare = useCallback12(async () => {
3948
4088
  try {
3949
4089
  await localParticipant.setScreenShareEnabled(!isScreenSharing, SCREEN_SHARE_OPTIONS);
3950
4090
  } catch (error) {
@@ -3955,13 +4095,13 @@ function useMediaControls() {
3955
4095
  }
3956
4096
 
3957
4097
  // src/hooks/useMicLevel.ts
3958
- import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
4098
+ import { useLocalParticipant as useLocalParticipant8 } from "@livekit/components-react/hooks";
3959
4099
  var MIC_BARS = 5;
3960
4100
  var IDLE_BAR_HEIGHT_PX = 5;
3961
4101
  var MAX_BAR_GROWTH_PX = 17;
3962
4102
  var MIC_NOISE_GATE = 0.15;
3963
4103
  function useMicLevel(enabled) {
3964
- const { microphoneTrack } = useLocalParticipant6();
4104
+ const { microphoneTrack } = useLocalParticipant8();
3965
4105
  const mediaStreamTrack = microphoneTrack?.track?.mediaStreamTrack;
3966
4106
  return useAudioLevelBars(enabled ? mediaStreamTrack : undefined, {
3967
4107
  barCount: MIC_BARS,
@@ -3994,8 +4134,49 @@ function PausedCountdown({ secondsRemaining }) {
3994
4134
  });
3995
4135
  }
3996
4136
 
4137
+ // src/components/TapToTalkMic.tsx
4138
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
4139
+ function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
4140
+ const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
4141
+ const label = isCapturingSpeech ? "Tap to send" : "Tap to talk";
4142
+ const withLabel = isCapturingSpeech || showLabel;
4143
+ return /* @__PURE__ */ jsxs6("button", {
4144
+ type: "button",
4145
+ onClick: onToggle,
4146
+ "aria-label": "Tap to talk",
4147
+ "aria-pressed": isCapturingSpeech,
4148
+ title: label,
4149
+ className: cn("skippr:flex skippr:h-[38px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:gap-2 skippr:rounded-full skippr:bg-bubble skippr:text-white skippr:cursor-pointer", withLabel ? "skippr:px-3.5" : "skippr:w-[38px]", isCapturingSpeech ? "skippr:animate-skippr-rec-ring skippr:motion-reduce:animate-none" : "skippr:hover:bg-[#3a384b]"),
4150
+ children: [
4151
+ /* @__PURE__ */ jsx8("span", {
4152
+ className: "skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center",
4153
+ children: isCapturingSpeech ? /* @__PURE__ */ jsx8(Square, {
4154
+ className: "skippr:size-4 skippr:text-brand",
4155
+ fill: "currentColor"
4156
+ }) : /* @__PURE__ */ jsx8(Mic, {
4157
+ className: "skippr:size-5"
4158
+ })
4159
+ }),
4160
+ withLabel && /* @__PURE__ */ jsx8("span", {
4161
+ className: "skippr:whitespace-nowrap skippr:text-[13px] skippr:font-medium",
4162
+ children: label
4163
+ }),
4164
+ isCapturingSpeech && isTalking && /* @__PURE__ */ jsx8("span", {
4165
+ className: "skippr:flex skippr:h-6 skippr:shrink-0 skippr:items-center skippr:gap-[3px]",
4166
+ children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx8("span", {
4167
+ ref: (el) => {
4168
+ barRefs.current[index2] = el;
4169
+ },
4170
+ className: "skippr:w-[3px] skippr:rounded-full skippr:bg-white skippr:transition-[height] skippr:duration-75",
4171
+ style: { height: 5 }
4172
+ }, index2))
4173
+ })
4174
+ ]
4175
+ });
4176
+ }
4177
+
3997
4178
  // src/components/SessionControlBar.tsx
3998
- import { jsx as jsx6, jsxs as jsxs6, Fragment } from "react/jsx-runtime";
4179
+ import { jsx as jsx9, jsxs as jsxs7, Fragment } from "react/jsx-runtime";
3999
4180
  var STANDBY_BAR_WIDTH = 168;
4000
4181
  var READY_BAR_WIDTH = 238;
4001
4182
  var PAUSED_BAR_WIDTH = 248;
@@ -4028,21 +4209,21 @@ function AgentActivity({
4028
4209
  noiseGate: AGENT_NOISE_GATE
4029
4210
  });
4030
4211
  const label = isActing ? "Working" : AGENT_STATE_LABELS[state] ?? "";
4031
- return /* @__PURE__ */ jsxs6("span", {
4212
+ return /* @__PURE__ */ jsxs7("span", {
4032
4213
  role: "status",
4033
4214
  className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-bubble",
4034
4215
  "aria-label": isActing ? "Agent is acting" : `Agent is ${state}`,
4035
4216
  children: [
4036
- /* @__PURE__ */ jsx6("span", {
4217
+ /* @__PURE__ */ jsx9("span", {
4037
4218
  className: "skippr:flex skippr:size-5 skippr:shrink-0 skippr:items-center skippr:justify-center",
4038
- children: isActing ? /* @__PURE__ */ jsx6(MousePointerClick, {
4219
+ children: isActing ? /* @__PURE__ */ jsx9(MousePointerClick, {
4039
4220
  strokeWidth: 2,
4040
4221
  className: "skippr:size-5 skippr:[animation:skippr-finger-tap_1.1s_ease-in-out_infinite]"
4041
- }) : /* @__PURE__ */ jsxs6(Fragment, {
4222
+ }) : /* @__PURE__ */ jsxs7(Fragment, {
4042
4223
  children: [
4043
- state === "speaking" && /* @__PURE__ */ jsx6("span", {
4224
+ state === "speaking" && /* @__PURE__ */ jsx9("span", {
4044
4225
  className: "skippr:flex skippr:h-5 skippr:items-center skippr:gap-[2px]",
4045
- children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */ jsx6("span", {
4226
+ children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */ jsx9("span", {
4046
4227
  ref: (el) => {
4047
4228
  barRefs.current[index2] = el;
4048
4229
  },
@@ -4050,21 +4231,21 @@ function AgentActivity({
4050
4231
  style: { height: AGENT_BAR_IDLE_HEIGHT_PX }
4051
4232
  }, index2))
4052
4233
  }),
4053
- state === "thinking" && /* @__PURE__ */ jsxs6("span", {
4234
+ state === "thinking" && /* @__PURE__ */ jsxs7("span", {
4054
4235
  className: "skippr:flex skippr:items-center skippr:gap-[3px]",
4055
4236
  children: [
4056
- /* @__PURE__ */ jsx6("span", {
4237
+ /* @__PURE__ */ jsx9("span", {
4057
4238
  className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:0ms]"
4058
4239
  }),
4059
- /* @__PURE__ */ jsx6("span", {
4240
+ /* @__PURE__ */ jsx9("span", {
4060
4241
  className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:150ms]"
4061
4242
  }),
4062
- /* @__PURE__ */ jsx6("span", {
4243
+ /* @__PURE__ */ jsx9("span", {
4063
4244
  className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:300ms]"
4064
4245
  })
4065
4246
  ]
4066
4247
  }),
4067
- state === "listening" && /* @__PURE__ */ jsxs6("svg", {
4248
+ state === "listening" && /* @__PURE__ */ jsxs7("svg", {
4068
4249
  viewBox: "0 0 24 24",
4069
4250
  className: "skippr:size-5",
4070
4251
  fill: "none",
@@ -4074,10 +4255,10 @@ function AgentActivity({
4074
4255
  strokeLinejoin: "round",
4075
4256
  "aria-hidden": "true",
4076
4257
  children: [
4077
- /* @__PURE__ */ jsx6("path", {
4258
+ /* @__PURE__ */ jsx9("path", {
4078
4259
  d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"
4079
4260
  }),
4080
- /* @__PURE__ */ jsx6("circle", {
4261
+ /* @__PURE__ */ jsx9("circle", {
4081
4262
  cx: "12",
4082
4263
  cy: "12",
4083
4264
  r: "2.5",
@@ -4090,7 +4271,7 @@ function AgentActivity({
4090
4271
  ]
4091
4272
  })
4092
4273
  }),
4093
- /* @__PURE__ */ jsx6("span", {
4274
+ /* @__PURE__ */ jsx9("span", {
4094
4275
  className: "skippr:text-[11px] skippr:font-medium skippr:capitalize",
4095
4276
  children: label
4096
4277
  })
@@ -4108,9 +4289,10 @@ function SessionControlBar() {
4108
4289
  setSidebarTab,
4109
4290
  activeModule,
4110
4291
  position,
4111
- variant
4292
+ variant,
4293
+ agentControls
4112
4294
  } = useLiveAgent();
4113
- const internalCtx = useContext6(LiveAgentContext);
4295
+ const internalCtx = useContext8(LiveAgentContext);
4114
4296
  if (!internalCtx) {
4115
4297
  throw new Error("SessionControlBar must be used within a <LiveAgent> provider");
4116
4298
  }
@@ -4130,7 +4312,20 @@ function SessionControlBar() {
4130
4312
  const { state, mediaStreamTrack: agentMediaStreamTrack } = useAgentVoiceState();
4131
4313
  const { actionsActive, actionsPaused: actionsPaused2, togglePaused } = useActionControl();
4132
4314
  const { isHeld, countdown, toggle: togglePause } = useSessionHoldContext();
4133
- useEffect19(() => {
4315
+ const tapToTalk = agentControls?.tapToTalk === true;
4316
+ const agentActive = state === "speaking" || state === "thinking";
4317
+ const { isCapturingSpeech, toggle: toggleTapToTalk } = useTapToTalkContext();
4318
+ const liveUserTranscript = useLiveUserTranscript(isCapturingSpeech);
4319
+ const { reportActivity } = useIdleAutoPause({
4320
+ enabled: tapToTalk,
4321
+ active: agentActive || isCapturingSpeech,
4322
+ isHeld,
4323
+ pause: () => {
4324
+ if (!isHeld)
4325
+ togglePause();
4326
+ }
4327
+ });
4328
+ useEffect20(() => {
4134
4329
  if (isHeld)
4135
4330
  minimizePanel();
4136
4331
  }, [isHeld, minimizePanel]);
@@ -4138,6 +4333,7 @@ function SessionControlBar() {
4138
4333
  const { barRefs, isTalking } = useMicLevel(isReady && !isMuted && !textMode && !isHeld);
4139
4334
  const showScreenShareToggle = captureMode === CAPTURE_MODE.Screenshare;
4140
4335
  const showActionControl = captureMode === CAPTURE_MODE.Auto && actionsActive;
4336
+ const tapToTalkAgentBusy = agentActive || showActionControl && !actionsPaused2;
4141
4337
  const screenShareExtra = showScreenShareToggle ? SCREEN_SHARE_EXTRA_WIDTH : 0;
4142
4338
  const actionControlExtra = showActionControl ? ACTION_CONTROL_EXTRA_WIDTH : 0;
4143
4339
  let barWidth = STANDBY_BAR_WIDTH;
@@ -4164,103 +4360,131 @@ function SessionControlBar() {
4164
4360
  return;
4165
4361
  action();
4166
4362
  };
4167
- const panelToggleButton = /* @__PURE__ */ jsx6("button", {
4363
+ const panelToggleButton = /* @__PURE__ */ jsx9("button", {
4168
4364
  type: "button",
4169
4365
  onClick: ifNotDragged(togglePanel),
4170
4366
  "aria-label": isPanelOpen ? "Close panel" : agendaModule && !textMode ? "Open agenda" : "Open chat",
4171
4367
  className: cn(SQUARE_BUTTON, "skippr:text-neutral-700", textMode ? "skippr:hover:bg-neutral-100" : "skippr:bg-neutral-100 skippr:hover:bg-neutral-200"),
4172
- children: /* @__PURE__ */ jsx6(MessageSquare, {
4368
+ children: /* @__PURE__ */ jsx9(MessageSquare, {
4173
4369
  className: "skippr:size-5"
4174
4370
  })
4175
4371
  });
4176
- return /* @__PURE__ */ jsxs6("div", {
4372
+ return /* @__PURE__ */ jsxs7("div", {
4177
4373
  ref: controlBarRef,
4178
4374
  style: { bottom: launcherBottomPx },
4179
4375
  className: cn("skippr:fixed skippr:z-[9999] skippr:touch-none skippr:cursor-grab", position === "right" ? "skippr:right-3" : "skippr:left-3"),
4180
4376
  children: [
4181
- /* @__PURE__ */ jsxs6("div", {
4182
- style: { width: barWidth },
4377
+ isCapturingSpeech && !isPanelOpen && /* @__PURE__ */ jsx9("div", {
4378
+ className: cn("skippr:absolute skippr:bottom-full skippr:z-[10000] skippr:mb-2 skippr:max-w-[280px] skippr:rounded-[14px] skippr:bg-bubble skippr:px-3.5 skippr:py-2 skippr:text-[13px] skippr:text-white skippr:shadow-[0_10px_32px_rgba(0,0,0,0.18)] skippr:[animation:skippr-agent-in_200ms_ease-out]", position === "right" ? "skippr:right-0" : "skippr:left-0"),
4379
+ children: liveUserTranscript ? liveUserTranscript : /* @__PURE__ */ jsx9("span", {
4380
+ className: "skippr:text-white/60",
4381
+ children: "Listening…"
4382
+ })
4383
+ }),
4384
+ /* @__PURE__ */ jsxs7("div", {
4385
+ style: { width: isReady && tapToTalk ? "auto" : barWidth },
4183
4386
  className: cn("skippr:group skippr:relative skippr:flex skippr:h-[54px] skippr:items-center skippr:justify-center skippr:gap-2", "skippr:rounded-[20px] skippr:bg-white skippr:p-2", "skippr:shadow-[0_10px_32px_rgba(0,0,0,0.18)] skippr:ring-1 skippr:ring-black/5", "skippr:transition-[width,margin] skippr:duration-300 skippr:ease-out", "skippr:[animation:skippr-toolset-pop_440ms_cubic-bezier(0.22,1,0.36,1)]", isReady && (position === "right" ? "skippr:mr-7" : "skippr:ml-7")),
4184
4387
  children: [
4185
- !isReady && /* @__PURE__ */ jsxs6("span", {
4388
+ !isReady && /* @__PURE__ */ jsxs7("span", {
4186
4389
  className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:justify-center skippr:gap-2 skippr:text-[13px] skippr:font-medium skippr:text-bubble skippr:[animation:skippr-stage-fade_240ms_ease-out]",
4187
4390
  children: [
4188
- /* @__PURE__ */ jsxs6("span", {
4391
+ /* @__PURE__ */ jsxs7("span", {
4189
4392
  className: "skippr:flex skippr:items-center skippr:gap-[3px]",
4190
4393
  children: [
4191
- /* @__PURE__ */ jsx6("span", {
4394
+ /* @__PURE__ */ jsx9("span", {
4192
4395
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:0ms]"
4193
4396
  }),
4194
- /* @__PURE__ */ jsx6("span", {
4397
+ /* @__PURE__ */ jsx9("span", {
4195
4398
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:150ms]"
4196
4399
  }),
4197
- /* @__PURE__ */ jsx6("span", {
4400
+ /* @__PURE__ */ jsx9("span", {
4198
4401
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:300ms]"
4199
4402
  })
4200
4403
  ]
4201
4404
  }),
4202
- /* @__PURE__ */ jsx6("span", {
4405
+ /* @__PURE__ */ jsx9("span", {
4203
4406
  children: "Standing by…"
4204
4407
  })
4205
4408
  ]
4206
4409
  }),
4207
- isReady && /* @__PURE__ */ jsxs6("div", {
4410
+ isReady && /* @__PURE__ */ jsxs7("div", {
4208
4411
  className: cn("skippr:flex skippr:items-center skippr:gap-2 skippr:[animation:skippr-stage-fade_240ms_ease-out]", isHeld && "skippr:w-full skippr:justify-start"),
4209
4412
  children: [
4210
- /* @__PURE__ */ jsx6("button", {
4413
+ /* @__PURE__ */ jsx9("button", {
4211
4414
  type: "button",
4212
4415
  onClick: ifNotDragged(togglePause),
4213
4416
  "aria-label": isHeld ? "Resume" : "Pause",
4214
4417
  title: isHeld ? "Resume" : "Pause",
4215
4418
  className: cn(SQUARE_BUTTON, isHeld ? "skippr:bg-bubble skippr:text-white skippr:hover:bg-[#3a384b]" : "skippr:bg-neutral-100 skippr:text-neutral-700 skippr:hover:bg-neutral-200"),
4216
- children: isHeld ? /* @__PURE__ */ jsx6(Play, {
4419
+ children: isHeld ? /* @__PURE__ */ jsx9(Play, {
4217
4420
  className: "skippr:size-5",
4218
4421
  fill: "currentColor"
4219
- }) : /* @__PURE__ */ jsx6(Pause, {
4422
+ }) : /* @__PURE__ */ jsx9(Pause, {
4220
4423
  className: "skippr:size-5",
4221
4424
  fill: "currentColor"
4222
4425
  })
4223
4426
  }),
4224
- isHeld ? /* @__PURE__ */ jsxs6(Fragment, {
4427
+ isHeld ? /* @__PURE__ */ jsxs7(Fragment, {
4225
4428
  children: [
4226
- /* @__PURE__ */ jsx6(PausedCountdown, {
4429
+ /* @__PURE__ */ jsx9(PausedCountdown, {
4227
4430
  secondsRemaining: countdown
4228
4431
  }),
4229
4432
  panelToggleButton
4230
4433
  ]
4231
- }) : /* @__PURE__ */ jsxs6(Fragment, {
4434
+ }) : /* @__PURE__ */ jsxs7(Fragment, {
4232
4435
  children: [
4233
- !textMode && /* @__PURE__ */ jsxs6("div", {
4436
+ !textMode && tapToTalk && /* @__PURE__ */ jsxs7("div", {
4437
+ className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:gap-2",
4438
+ children: [
4439
+ /* @__PURE__ */ jsx9(TapToTalkMic, {
4440
+ isCapturingSpeech,
4441
+ showLabel: !tapToTalkAgentBusy,
4442
+ onToggle: () => {
4443
+ toggleTapToTalk();
4444
+ reportActivity();
4445
+ }
4446
+ }),
4447
+ tapToTalkAgentBusy && /* @__PURE__ */ jsx9("span", {
4448
+ className: "skippr:flex skippr:items-center skippr:[animation:skippr-agent-in_200ms_ease-out_240ms_both]",
4449
+ children: /* @__PURE__ */ jsx9(AgentActivity, {
4450
+ state,
4451
+ isActing: showActionControl && !actionsPaused2,
4452
+ mediaStreamTrack: agentMediaStreamTrack
4453
+ })
4454
+ })
4455
+ ]
4456
+ }),
4457
+ !textMode && !tapToTalk && /* @__PURE__ */ jsxs7("div", {
4234
4458
  className: "skippr:relative skippr:h-[38px]",
4235
4459
  style: { width: MIC_REGION_WIDTH },
4236
4460
  children: [
4237
- !isTalking && /* @__PURE__ */ jsx6("span", {
4461
+ !isTalking && /* @__PURE__ */ jsx9("span", {
4238
4462
  className: "skippr:absolute skippr:inset-y-0 skippr:right-0 skippr:flex skippr:items-center skippr:justify-center skippr:[animation:skippr-agent-in_200ms_ease-out_240ms_both]",
4239
4463
  style: { width: AGENT_ACTIVITY_WIDTH },
4240
- children: /* @__PURE__ */ jsx6(AgentActivity, {
4464
+ children: /* @__PURE__ */ jsx9(AgentActivity, {
4241
4465
  state,
4242
4466
  isActing: showActionControl && !actionsPaused2,
4243
4467
  mediaStreamTrack: agentMediaStreamTrack
4244
4468
  })
4245
4469
  }),
4246
- /* @__PURE__ */ jsxs6("button", {
4470
+ /* @__PURE__ */ jsxs7("button", {
4247
4471
  type: "button",
4248
4472
  onClick: ifNotDragged(() => void toggleMute()),
4249
4473
  "aria-label": isMuted ? "Unmute" : "Mute",
4250
4474
  className: cn("skippr:group skippr:absolute skippr:top-0 skippr:left-0 skippr:z-10 skippr:flex skippr:h-[38px] skippr:items-center skippr:gap-2.5 skippr:overflow-hidden skippr:rounded-[12px] skippr:bg-bubble skippr:text-white skippr:cursor-pointer skippr:transition-[width] skippr:duration-300 skippr:ease-out", isTalking ? "skippr:justify-start skippr:pl-3.5" : "skippr:justify-center"),
4251
4475
  style: { width: isTalking ? MIC_REGION_WIDTH : MIC_SQUARE_WIDTH },
4252
4476
  children: [
4253
- /* @__PURE__ */ jsx6("span", {
4477
+ /* @__PURE__ */ jsx9("span", {
4254
4478
  className: cn("skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center skippr:transition-colors", isMuted ? "skippr:text-red-400 skippr:group-hover:text-red-300" : "skippr:text-white skippr:group-hover:text-white/80"),
4255
- children: isMuted ? /* @__PURE__ */ jsx6(MicOff, {
4479
+ children: isMuted ? /* @__PURE__ */ jsx9(MicOff, {
4256
4480
  className: "skippr:size-5"
4257
- }) : /* @__PURE__ */ jsx6(Mic, {
4481
+ }) : /* @__PURE__ */ jsx9(Mic, {
4258
4482
  className: "skippr:size-5"
4259
4483
  })
4260
4484
  }),
4261
- /* @__PURE__ */ jsx6("span", {
4485
+ /* @__PURE__ */ jsx9("span", {
4262
4486
  className: cn("skippr:h-6 skippr:flex-1 skippr:items-center skippr:justify-center skippr:gap-[3px] skippr:transition-opacity skippr:duration-200", isTalking ? "skippr:flex skippr:opacity-100" : "skippr:hidden"),
4263
- children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx6("span", {
4487
+ children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx9("span", {
4264
4488
  ref: (el) => {
4265
4489
  barRefs.current[index2] = el;
4266
4490
  },
@@ -4272,28 +4496,28 @@ function SessionControlBar() {
4272
4496
  })
4273
4497
  ]
4274
4498
  }),
4275
- showScreenShareToggle && /* @__PURE__ */ jsx6("button", {
4499
+ showScreenShareToggle && /* @__PURE__ */ jsx9("button", {
4276
4500
  type: "button",
4277
4501
  onClick: ifNotDragged(() => void toggleScreenShare()),
4278
4502
  "aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
4279
4503
  className: cn(SQUARE_BUTTON, isScreenSharing ? "skippr:bg-bubble skippr:text-white skippr:hover:bg-[#3a384b]" : "skippr:bg-neutral-100 skippr:text-neutral-700 skippr:hover:bg-neutral-200"),
4280
- children: isScreenSharing ? /* @__PURE__ */ jsx6(MonitorOff, {
4504
+ children: isScreenSharing ? /* @__PURE__ */ jsx9(MonitorOff, {
4281
4505
  className: "skippr:size-5"
4282
- }) : /* @__PURE__ */ jsx6(Monitor, {
4506
+ }) : /* @__PURE__ */ jsx9(Monitor, {
4283
4507
  className: "skippr:size-5"
4284
4508
  })
4285
4509
  }),
4286
4510
  panelToggleButton,
4287
- showActionControl && /* @__PURE__ */ jsx6("button", {
4511
+ showActionControl && /* @__PURE__ */ jsx9("button", {
4288
4512
  type: "button",
4289
4513
  onClick: ifNotDragged(() => void togglePaused()),
4290
4514
  "aria-label": actionsPaused2 ? "Resume actions" : "Stop actions",
4291
4515
  title: actionsPaused2 ? "Resume" : "Stop",
4292
4516
  className: cn(SQUARE_BUTTON, actionsPaused2 ? "skippr:bg-green-100 skippr:text-green-700 skippr:hover:bg-green-200" : "skippr:bg-red-100 skippr:text-red-600 skippr:hover:bg-red-200"),
4293
- children: actionsPaused2 ? /* @__PURE__ */ jsx6(Play, {
4517
+ children: actionsPaused2 ? /* @__PURE__ */ jsx9(Play, {
4294
4518
  className: "skippr:size-5",
4295
4519
  fill: "currentColor"
4296
- }) : /* @__PURE__ */ jsx6(Square, {
4520
+ }) : /* @__PURE__ */ jsx9(Square, {
4297
4521
  className: "skippr:size-5",
4298
4522
  fill: "currentColor"
4299
4523
  })
@@ -4304,27 +4528,27 @@ function SessionControlBar() {
4304
4528
  }, textMode ? "ready-text" : "ready")
4305
4529
  ]
4306
4530
  }),
4307
- isReady && !isDragging && /* @__PURE__ */ jsx6("button", {
4531
+ isReady && !isDragging && /* @__PURE__ */ jsx9("button", {
4308
4532
  type: "button",
4309
4533
  onClick: ifNotDragged(() => void pauseSession()),
4310
4534
  disabled: isPausing,
4311
4535
  "aria-label": "End session",
4312
4536
  "aria-busy": isPausing,
4313
4537
  className: cn("skippr:absolute skippr:top-1/2 skippr:z-20 skippr:flex skippr:h-[54px] skippr:w-[50px] skippr:-mt-[27px] skippr:items-center", position === "right" ? "skippr:-right-8 skippr:justify-start skippr:pl-2.5" : "skippr:-left-8 skippr:justify-end skippr:pr-2.5", "skippr:rounded-[16px] skippr:bg-red-500 skippr:text-white", "skippr:shadow-[0_4px_14px_rgba(239,68,68,0.45)]", "skippr:transition-colors skippr:duration-150", "skippr:[animation:skippr-toolset-pop_280ms_cubic-bezier(0.22,1,0.36,1)]", isPausing ? "skippr:cursor-default" : "skippr:cursor-pointer skippr:hover:bg-red-600"),
4314
- children: /* @__PURE__ */ jsxs6("span", {
4538
+ children: /* @__PURE__ */ jsxs7("span", {
4315
4539
  className: "skippr:relative skippr:flex skippr:size-5 skippr:items-center skippr:justify-center",
4316
4540
  children: [
4317
- /* @__PURE__ */ jsx6(X, {
4541
+ /* @__PURE__ */ jsx9(X, {
4318
4542
  className: cn("skippr:size-4 skippr:transition-opacity skippr:duration-200", isPausing && "skippr:opacity-40"),
4319
4543
  strokeWidth: 2.5
4320
4544
  }),
4321
- isPausing && /* @__PURE__ */ jsxs6("svg", {
4545
+ isPausing && /* @__PURE__ */ jsxs7("svg", {
4322
4546
  viewBox: "0 0 24 24",
4323
4547
  fill: "none",
4324
4548
  "aria-hidden": "true",
4325
4549
  className: "skippr:absolute skippr:inset-0 skippr:size-full skippr:animate-spin skippr:motion-reduce:hidden",
4326
4550
  children: [
4327
- /* @__PURE__ */ jsx6("circle", {
4551
+ /* @__PURE__ */ jsx9("circle", {
4328
4552
  cx: "12",
4329
4553
  cy: "12",
4330
4554
  r: "10.5",
@@ -4332,7 +4556,7 @@ function SessionControlBar() {
4332
4556
  strokeOpacity: "0.2",
4333
4557
  strokeWidth: "1.5"
4334
4558
  }),
4335
- /* @__PURE__ */ jsx6("circle", {
4559
+ /* @__PURE__ */ jsx9("circle", {
4336
4560
  cx: "12",
4337
4561
  cy: "12",
4338
4562
  r: "10.5",
@@ -4351,9 +4575,9 @@ function SessionControlBar() {
4351
4575
  }
4352
4576
 
4353
4577
  // src/components/ShadowHost.tsx
4354
- import { useLayoutEffect as useLayoutEffect2, useRef as useRef11, useState as useState13 } from "react";
4578
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef13, useState as useState14 } from "react";
4355
4579
  import { createPortal } from "react-dom";
4356
- import { jsx as jsx7, Fragment as Fragment2 } from "react/jsx-runtime";
4580
+ import { jsx as jsx10, Fragment as Fragment2 } from "react/jsx-runtime";
4357
4581
  var PROPERTIES_STYLE_ID = "skippr-tw-properties";
4358
4582
  var PROPERTY_RULE = /@property\s+[^{]+\{[^}]*\}/g;
4359
4583
  function hoistTailwindProperties(css) {
@@ -4368,10 +4592,10 @@ function hoistTailwindProperties(css) {
4368
4592
  return css.replace(PROPERTY_RULE, "");
4369
4593
  }
4370
4594
  function ShadowHost({ children }) {
4371
- const hostRef = useRef11(null);
4372
- const [shadowRoot, setShadowRoot] = useState13(null);
4595
+ const hostRef = useRef13(null);
4596
+ const [shadowRoot, setShadowRoot] = useState14(null);
4373
4597
  const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
4374
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--skippr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--skippr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--skippr-color-red-50:oklch(97.1% .013 17.38);--skippr-color-red-100:oklch(93.6% .032 17.717);--skippr-color-red-200:oklch(88.5% .062 18.334);--skippr-color-red-300:oklch(80.8% .114 19.571);--skippr-color-red-400:oklch(70.4% .191 22.216);--skippr-color-red-500:oklch(63.7% .237 25.331);--skippr-color-red-600:oklch(57.7% .245 27.325);--skippr-color-red-700:oklch(50.5% .213 27.518);--skippr-color-amber-50:oklch(98.7% .022 95.277);--skippr-color-amber-100:oklch(96.2% .059 95.617);--skippr-color-amber-400:oklch(82.8% .189 84.429);--skippr-color-amber-700:oklch(55.5% .163 48.998);--skippr-color-amber-950:oklch(27.9% .077 45.635);--skippr-color-green-100:oklch(96.2% .044 156.743);--skippr-color-green-200:oklch(92.5% .084 155.995);--skippr-color-green-700:oklch(52.7% .154 150.069);--skippr-color-emerald-400:oklch(76.5% .177 163.223);--skippr-color-neutral-100:oklch(97% 0 0);--skippr-color-neutral-200:oklch(92.2% 0 0);--skippr-color-neutral-500:oklch(55.6% 0 0);--skippr-color-neutral-700:oklch(37.1% 0 0);--skippr-color-black:#000;--skippr-color-white:#fff;--skippr-spacing:.25rem;--skippr-text-xs:.75rem;--skippr-text-xs--line-height:calc(1/.75);--skippr-text-sm:.875rem;--skippr-text-sm--line-height:calc(1.25/.875);--skippr-font-weight-medium:500;--skippr-font-weight-semibold:600;--skippr-leading-tight:1.25;--skippr-leading-snug:1.375;--skippr-leading-relaxed:1.625;--skippr-ease-out:cubic-bezier(0,0,.2,1);--skippr-ease-in-out:cubic-bezier(.4,0,.2,1);--skippr-animate-spin:spin 1s linear infinite;--skippr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--skippr-animate-bounce:bounce 1s infinite;--skippr-blur-sm:8px;--skippr-default-transition-duration:.15s;--skippr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--skippr-default-font-family:var(--skippr-font-sans);--skippr-default-mono-font-family:var(--skippr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--skippr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--skippr-default-font-feature-settings,normal);font-variation-settings:var(--skippr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--skippr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--skippr-default-mono-font-feature-settings,normal);font-variation-settings:var(--skippr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.skippr\\:pointer-events-none{pointer-events:none}.skippr\\:absolute{position:absolute}.skippr\\:fixed{position:fixed}.skippr\\:relative{position:relative}.skippr\\:sticky{position:sticky}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:inset-y-0{inset-block:calc(var(--skippr-spacing)*0)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-full{top:100%}.skippr\\:-right-8{right:calc(var(--skippr-spacing)*-8)}.skippr\\:right-0{right:calc(var(--skippr-spacing)*0)}.skippr\\:right-3{right:calc(var(--skippr-spacing)*3)}.skippr\\:right-5{right:calc(var(--skippr-spacing)*5)}.skippr\\:right-6{right:calc(var(--skippr-spacing)*6)}.skippr\\:-bottom-1{bottom:calc(var(--skippr-spacing)*-1)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-3{bottom:calc(var(--skippr-spacing)*3)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-full{bottom:100%}.skippr\\:-left-8{left:calc(var(--skippr-spacing)*-8)}.skippr\\:left-0{left:calc(var(--skippr-spacing)*0)}.skippr\\:left-1\\/2{left:50%}.skippr\\:left-3{left:calc(var(--skippr-spacing)*3)}.skippr\\:left-5{left:calc(var(--skippr-spacing)*5)}.skippr\\:left-6{left:calc(var(--skippr-spacing)*6)}.skippr\\:z-10{z-index:10}.skippr\\:z-20{z-index:20}.skippr\\:z-\\[9998\\]{z-index:9998}.skippr\\:z-\\[9999\\]{z-index:9999}.skippr\\:order-first{order:-9999}.skippr\\:order-last{order:9999}.skippr\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.skippr\\:-mt-\\[27px\\]{margin-top:-27px}.skippr\\:mt-0\\.5{margin-top:calc(var(--skippr-spacing)*.5)}.skippr\\:mt-1{margin-top:calc(var(--skippr-spacing)*1)}.skippr\\:mt-1\\.5{margin-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:mt-2{margin-top:calc(var(--skippr-spacing)*2)}.skippr\\:mt-3{margin-top:calc(var(--skippr-spacing)*3)}.skippr\\:mt-3\\.5{margin-top:calc(var(--skippr-spacing)*3.5)}.skippr\\:mr-7{margin-right:calc(var(--skippr-spacing)*7)}.skippr\\:-mb-\\[5px\\]{margin-bottom:-5px}.skippr\\:mb-1\\.5{margin-bottom:calc(var(--skippr-spacing)*1.5)}.skippr\\:mb-2{margin-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:mb-3{margin-bottom:calc(var(--skippr-spacing)*3)}.skippr\\:mb-4{margin-bottom:calc(var(--skippr-spacing)*4)}.skippr\\:ml-0\\.5{margin-left:calc(var(--skippr-spacing)*.5)}.skippr\\:ml-1{margin-left:calc(var(--skippr-spacing)*1)}.skippr\\:ml-7{margin-left:calc(var(--skippr-spacing)*7)}.skippr\\:flex{display:flex}.skippr\\:hidden{display:none}.skippr\\:inline-flex{display:inline-flex}.skippr\\:size-1{width:calc(var(--skippr-spacing)*1);height:calc(var(--skippr-spacing)*1)}.skippr\\:size-1\\.5{width:calc(var(--skippr-spacing)*1.5);height:calc(var(--skippr-spacing)*1.5)}.skippr\\:size-2{width:calc(var(--skippr-spacing)*2);height:calc(var(--skippr-spacing)*2)}.skippr\\:size-2\\.5{width:calc(var(--skippr-spacing)*2.5);height:calc(var(--skippr-spacing)*2.5)}.skippr\\:size-3{width:calc(var(--skippr-spacing)*3);height:calc(var(--skippr-spacing)*3)}.skippr\\:size-3\\.5{width:calc(var(--skippr-spacing)*3.5);height:calc(var(--skippr-spacing)*3.5)}.skippr\\:size-4{width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}.skippr\\:size-5{width:calc(var(--skippr-spacing)*5);height:calc(var(--skippr-spacing)*5)}.skippr\\:size-6{width:calc(var(--skippr-spacing)*6);height:calc(var(--skippr-spacing)*6)}.skippr\\:size-7{width:calc(var(--skippr-spacing)*7);height:calc(var(--skippr-spacing)*7)}.skippr\\:size-8{width:calc(var(--skippr-spacing)*8);height:calc(var(--skippr-spacing)*8)}.skippr\\:size-9{width:calc(var(--skippr-spacing)*9);height:calc(var(--skippr-spacing)*9)}.skippr\\:size-10{width:calc(var(--skippr-spacing)*10);height:calc(var(--skippr-spacing)*10)}.skippr\\:size-12{width:calc(var(--skippr-spacing)*12);height:calc(var(--skippr-spacing)*12)}.skippr\\:size-\\[5px\\]{width:5px;height:5px}.skippr\\:size-\\[38px\\]{width:38px;height:38px}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.skippr\\:h-0\\.5{height:calc(var(--skippr-spacing)*.5)}.skippr\\:h-1{height:calc(var(--skippr-spacing)*1)}.skippr\\:h-1\\.5{height:calc(var(--skippr-spacing)*1.5)}.skippr\\:h-2{height:calc(var(--skippr-spacing)*2)}.skippr\\:h-3{height:calc(var(--skippr-spacing)*3)}.skippr\\:h-3\\.5{height:calc(var(--skippr-spacing)*3.5)}.skippr\\:h-4{height:calc(var(--skippr-spacing)*4)}.skippr\\:h-5{height:calc(var(--skippr-spacing)*5)}.skippr\\:h-6{height:calc(var(--skippr-spacing)*6)}.skippr\\:h-7{height:calc(var(--skippr-spacing)*7)}.skippr\\:h-8{height:calc(var(--skippr-spacing)*8)}.skippr\\:h-9{height:calc(var(--skippr-spacing)*9)}.skippr\\:h-10{height:calc(var(--skippr-spacing)*10)}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[36px\\]{height:36px}.skippr\\:h-\\[38px\\]{height:38px}.skippr\\:h-\\[48px\\]{height:48px}.skippr\\:h-\\[54px\\]{height:54px}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:min-h-11{min-height:calc(var(--skippr-spacing)*11)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.skippr\\:w-4{width:calc(var(--skippr-spacing)*4)}.skippr\\:w-5{width:calc(var(--skippr-spacing)*5)}.skippr\\:w-6{width:calc(var(--skippr-spacing)*6)}.skippr\\:w-7{width:calc(var(--skippr-spacing)*7)}.skippr\\:w-8{width:calc(var(--skippr-spacing)*8)}.skippr\\:w-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-40{width:calc(var(--skippr-spacing)*40)}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-\\[3px\\]{width:3px}.skippr\\:w-\\[15\\.4px\\]{width:15.4px}.skippr\\:w-\\[36px\\]{width:36px}.skippr\\:w-\\[50px\\]{width:50px}.skippr\\:w-full{width:100%}.skippr\\:max-w-64{max-width:calc(var(--skippr-spacing)*64)}.skippr\\:max-w-72{max-width:calc(var(--skippr-spacing)*72)}.skippr\\:max-w-\\[80\\%\\]{max-width:80%}.skippr\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.skippr\\:min-w-11{min-width:calc(var(--skippr-spacing)*11)}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom-left{transform-origin:0 100%}.skippr\\:origin-bottom-right{transform-origin:100% 100%}.skippr\\:origin-center{transform-origin:50%}.skippr\\:origin-left{transform-origin:0}.skippr\\:origin-right{transform-origin:100%}.skippr\\:origin-top-left{transform-origin:0 0}.skippr\\:origin-top-right{transform-origin:100% 0}.skippr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*-7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:-rotate-90{rotate:-90deg}.skippr\\:rotate-45{rotate:45deg}.skippr\\:rotate-\\[225deg\\]{rotate:225deg}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out_240ms_both\\]{animation:.2s ease-out .24s both skippr-agent-in}.skippr\\:\\[animation\\:skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:\\[animation\\:skippr-finger-tap_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-finger-tap}.skippr\\:\\[animation\\:skippr-orb-in_320ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)\\]{animation:.32s cubic-bezier(.34,1.3,.64,1) skippr-orb-in}.skippr\\:\\[animation\\:skippr-stage-fade_240ms_ease-out\\]{animation:.24s ease-out skippr-stage-fade}.skippr\\:\\[animation\\:skippr-tip-in_360ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)_backwards\\]{animation:.36s cubic-bezier(.34,1.3,.64,1) backwards skippr-tip-in}.skippr\\:\\[animation\\:skippr-toolset-pop_280ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.28s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:\\[animation\\:skippr-toolset-pop_440ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.44s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:animate-\\[skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:animate-\\[skippr-bubble-in_0\\.28s_ease-out\\]{animation:.28s ease-out skippr-bubble-in}.skippr\\:animate-\\[skippr-fade-in_0\\.3s_ease-out\\]{animation:.3s ease-out skippr-fade-in}.skippr\\:animate-\\[skippr-pill-content_0\\.22s_ease-out\\]{animation:.22s ease-out skippr-pill-content}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.3s_infinite\\]{animation:1.1s ease-in-out .3s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.6s_infinite\\]{animation:1.1s ease-in-out .6s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.15s_infinite\\]{animation:1.1s ease-in-out .15s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.45s_infinite\\]{animation:1.1s ease-in-out .45s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-speak}.skippr\\:animate-bounce{animation:var(--skippr-animate-bounce)}.skippr\\:animate-ping{animation:var(--skippr-animate-ping)}.skippr\\:animate-skippr-annotation-pulse{animation:1.8s ease-in-out infinite skippr-annotation-pulse}.skippr\\:animate-skippr-click-ping{animation:.5s ease-out forwards skippr-click-ping}.skippr\\:animate-skippr-cursor-pop{animation:.22s ease-out skippr-cursor-pop}.skippr\\:animate-skippr-press{animation:.5s ease-in-out skippr-press}.skippr\\:animate-skippr-tab-fade{animation:.2s ease-out skippr-tab-fade}.skippr\\:animate-skippr-thinking-dot{animation:1.2s ease-in-out infinite skippr-thinking-dot}.skippr\\:animate-spin{animation:var(--skippr-animate-spin)}.skippr\\:cursor-default{cursor:default}.skippr\\:cursor-grab{cursor:grab}.skippr\\:cursor-not-allowed{cursor:not-allowed}.skippr\\:cursor-pointer{cursor:pointer}.skippr\\:touch-none{touch-action:none}.skippr\\:resize-none{resize:none}.skippr\\:flex-col{flex-direction:column}.skippr\\:flex-col-reverse{flex-direction:column-reverse}.skippr\\:items-center{align-items:center}.skippr\\:items-end{align-items:flex-end}.skippr\\:items-start{align-items:flex-start}.skippr\\:justify-between{justify-content:space-between}.skippr\\:justify-center{justify-content:center}.skippr\\:justify-end{justify-content:flex-end}.skippr\\:justify-start{justify-content:flex-start}.skippr\\:gap-0\\.5{gap:calc(var(--skippr-spacing)*.5)}.skippr\\:gap-1{gap:calc(var(--skippr-spacing)*1)}.skippr\\:gap-1\\.5{gap:calc(var(--skippr-spacing)*1.5)}.skippr\\:gap-2{gap:calc(var(--skippr-spacing)*2)}.skippr\\:gap-2\\.5{gap:calc(var(--skippr-spacing)*2.5)}.skippr\\:gap-3{gap:calc(var(--skippr-spacing)*3)}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}:where(.skippr\\:space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[10px\\]{border-radius:10px}.skippr\\:rounded-\\[11px\\]{border-radius:11px}.skippr\\:rounded-\\[12px\\]{border-radius:12px}.skippr\\:rounded-\\[14px\\]{border-radius:14px}.skippr\\:rounded-\\[16px\\]{border-radius:16px}.skippr\\:rounded-\\[20px\\]{border-radius:20px}.skippr\\:rounded-full{border-radius:3.40282e38px}.skippr\\:rounded-lg{border-radius:.625rem}.skippr\\:rounded-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:rounded-l-\\[18px\\]{border-top-left-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-tl-md{border-top-left-radius:.5rem}.skippr\\:rounded-r-\\[18px\\]{border-top-right-radius:18px;border-bottom-right-radius:18px}.skippr\\:border{border-style:var(--tw-border-style);border-width:1px}.skippr\\:border-0{border-style:var(--tw-border-style);border-width:0}.skippr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.skippr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.skippr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.skippr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.skippr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.skippr\\:border-\\[\\#2bc0ae\\]{border-color:#2bc0ae}.skippr\\:border-border,.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary\\/20{border-color:oklab(29.9244% .0107414 -.0305411/.2)}.skippr\\:border-r-border{border-right-color:oklch(92.3% .003 48.717)}.skippr\\:border-l-border{border-left-color:oklch(92.3% .003 48.717)}.skippr\\:bg-\\[\\#2bc0ae\\]{background-color:#2bc0ae}.skippr\\:bg-\\[\\#2bc0ae\\]\\/50{background-color:oklab(72.9347% -.121518 -.00545585/.5)}.skippr\\:bg-amber-50{background-color:var(--skippr-color-amber-50)}.skippr\\:bg-amber-400{background-color:var(--skippr-color-amber-400)}.skippr\\:bg-background{background-color:oklch(100% 0 0)}.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:color-mix(in oklab,var(--skippr-color-black)7.0%,transparent)}}.skippr\\:bg-bubble{background-color:#2d2b3d}.skippr\\:bg-bubble\\/95{background-color:oklab(29.9244% .0107414 -.0305411/.95)}.skippr\\:bg-card{background-color:oklch(100% 0 0)}.skippr\\:bg-current{background-color:currentColor}.skippr\\:bg-destructive{background-color:#d94f4f}.skippr\\:bg-emerald-400{background-color:var(--skippr-color-emerald-400)}.skippr\\:bg-foreground{background-color:oklch(14.7% .004 49.25)}.skippr\\:bg-green-100{background-color:var(--skippr-color-green-100)}.skippr\\:bg-launcher{background-color:#2d2d3f}.skippr\\:bg-muted-foreground\\/20{background-color:oklab(55.3% .00687528 .0110332/.2)}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-muted\\/50{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:bg-neutral-100{background-color:var(--skippr-color-neutral-100)}.skippr\\:bg-primary{background-color:#2d2b3d}.skippr\\:bg-primary-foreground\\/20{background-color:oklab(100% 0 5.96046e-8/.2)}.skippr\\:bg-primary\\/10{background-color:oklab(29.9244% .0107414 -.0305411/.1)}.skippr\\:bg-red-50{background-color:var(--skippr-color-red-50)}.skippr\\:bg-red-100{background-color:var(--skippr-color-red-100)}.skippr\\:bg-red-400{background-color:var(--skippr-color-red-400)}.skippr\\:bg-red-500{background-color:var(--skippr-color-red-500)}.skippr\\:bg-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white,.skippr\\:bg-white\\/15{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/15{background-color:color-mix(in oklab,var(--skippr-color-white)15%,transparent)}}.skippr\\:fill-brand{fill:#2bc0ae}.skippr\\:fill-primary\\/30{fill:oklab(29.9244% .0107414 -.0305411/.3)}.skippr\\:stroke-black\\/15{stroke:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:stroke-black\\/15{stroke:color-mix(in oklab,var(--skippr-color-black)15%,transparent)}}.skippr\\:stroke-bubble{stroke:#2d2b3d}.skippr\\:p-0{padding:calc(var(--skippr-spacing)*0)}.skippr\\:p-0\\.5{padding:calc(var(--skippr-spacing)*.5)}.skippr\\:p-1\\.5{padding:calc(var(--skippr-spacing)*1.5)}.skippr\\:p-2{padding:calc(var(--skippr-spacing)*2)}.skippr\\:p-3{padding:calc(var(--skippr-spacing)*3)}.skippr\\:p-3\\.5{padding:calc(var(--skippr-spacing)*3.5)}.skippr\\:p-4{padding:calc(var(--skippr-spacing)*4)}.skippr\\:px-1{padding-inline:calc(var(--skippr-spacing)*1)}.skippr\\:px-1\\.5{padding-inline:calc(var(--skippr-spacing)*1.5)}.skippr\\:px-2{padding-inline:calc(var(--skippr-spacing)*2)}.skippr\\:px-2\\.5{padding-inline:calc(var(--skippr-spacing)*2.5)}.skippr\\:px-3{padding-inline:calc(var(--skippr-spacing)*3)}.skippr\\:px-4{padding-inline:calc(var(--skippr-spacing)*4)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:py-0\\.5{padding-block:calc(var(--skippr-spacing)*.5)}.skippr\\:py-1{padding-block:calc(var(--skippr-spacing)*1)}.skippr\\:py-1\\.5{padding-block:calc(var(--skippr-spacing)*1.5)}.skippr\\:py-2{padding-block:calc(var(--skippr-spacing)*2)}.skippr\\:py-2\\.5{padding-block:calc(var(--skippr-spacing)*2.5)}.skippr\\:py-3{padding-block:calc(var(--skippr-spacing)*3)}.skippr\\:py-4{padding-block:calc(var(--skippr-spacing)*4)}.skippr\\:py-6{padding-block:calc(var(--skippr-spacing)*6)}.skippr\\:pt-1\\.5{padding-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:pr-2\\.5{padding-right:calc(var(--skippr-spacing)*2.5)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pb-2{padding-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:pl-1\\.5{padding-left:calc(var(--skippr-spacing)*1.5)}.skippr\\:pl-2\\.5{padding-left:calc(var(--skippr-spacing)*2.5)}.skippr\\:pl-3\\.5{padding-left:calc(var(--skippr-spacing)*3.5)}.skippr\\:text-center{text-align:center}.skippr\\:text-left{text-align:left}.skippr\\:font-mono{font-family:var(--skippr-font-mono)}.skippr\\:text-sm{font-size:var(--skippr-text-sm);line-height:var(--tw-leading,var(--skippr-text-sm--line-height))}.skippr\\:text-xs{font-size:var(--skippr-text-xs);line-height:var(--tw-leading,var(--skippr-text-xs--line-height))}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:text-\\[13px\\]{font-size:13px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-relaxed{--tw-leading:var(--skippr-leading-relaxed);line-height:var(--skippr-leading-relaxed)}.skippr\\:leading-snug{--tw-leading:var(--skippr-leading-snug);line-height:var(--skippr-leading-snug)}.skippr\\:leading-tight{--tw-leading:var(--skippr-leading-tight);line-height:var(--skippr-leading-tight)}.skippr\\:font-medium{--tw-font-weight:var(--skippr-font-weight-medium);font-weight:var(--skippr-font-weight-medium)}.skippr\\:font-semibold{--tw-font-weight:var(--skippr-font-weight-semibold);font-weight:var(--skippr-font-weight-semibold)}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-\\[\\#2bc0ae\\]{color:#2bc0ae}.skippr\\:text-amber-700{color:var(--skippr-color-amber-700)}.skippr\\:text-amber-950{color:var(--skippr-color-amber-950)}.skippr\\:text-background{color:oklch(100% 0 0)}.skippr\\:text-black{color:var(--skippr-color-black)}.skippr\\:text-bubble{color:#2d2b3d}.skippr\\:text-chart-3{color:oklch(66.6% .179 58.318)}.skippr\\:text-destructive{color:#d94f4f}.skippr\\:text-foreground{color:oklch(14.7% .004 49.25)}.skippr\\:text-green-700{color:var(--skippr-color-green-700)}.skippr\\:text-muted-foreground{color:oklch(55.3% .013 58.071)}.skippr\\:text-muted-foreground\\/30{color:oklab(55.3% .00687528 .0110332/.3)}.skippr\\:text-muted-foreground\\/40{color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:text-muted-foreground\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-muted-foreground\\/70{color:oklab(55.3% .00687528 .0110332/.7)}.skippr\\:text-neutral-500{color:var(--skippr-color-neutral-500)}.skippr\\:text-neutral-700{color:var(--skippr-color-neutral-700)}.skippr\\:text-primary{color:#2d2b3d}.skippr\\:text-primary-foreground{color:#fff}.skippr\\:text-primary-foreground\\/70{color:oklab(100% 0 5.96046e-8/.7)}.skippr\\:text-red-400{color:var(--skippr-color-red-400)}.skippr\\:text-red-600{color:var(--skippr-color-red-600)}.skippr\\:text-red-700{color:var(--skippr-color-red-700)}.skippr\\:text-secondary-foreground{color:#613700}.skippr\\:text-white{color:var(--skippr-color-white)}.skippr\\:capitalize{text-transform:capitalize}.skippr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.skippr\\:line-through{text-decoration-line:line-through}.skippr\\:placeholder-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}.skippr\\:opacity-0{opacity:0}.skippr\\:opacity-40{opacity:.4}.skippr\\:opacity-75{opacity:.75}.skippr\\:opacity-100{opacity:1}.skippr\\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[-6px_8px_30px_rgba\\(15\\,18\\,26\\,0\\.32\\)\\]{--tw-shadow:-6px 8px 30px var(--tw-shadow-color,#0f121a52);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_14px_rgba\\(239\\,68\\,68\\,0\\.45\\)\\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#ef444473);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_16px_rgba\\(45\\,43\\,61\\,0\\.45\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#2d2b3d73),0 2px 4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(45\\,43\\,61\\,0\\.35\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#2d2b3d59);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_30px_rgba\\(0\\,0\\,0\\,0\\.16\\)\\,0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000029),0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_10px_32px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 10px 32px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-black\\/5{--tw-ring-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--skippr-color-black)5%,transparent)}}.skippr\\:ring-brand{--tw-ring-color:#2bc0ae}.skippr\\:ring-foreground\\/10{--tw-ring-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:ring-white\\/30{--tw-ring-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-white\\/30{--tw-ring-color:color-mix(in oklab,var(--skippr-color-white)30%,transparent)}}.skippr\\:ring-offset-background{--tw-ring-offset-color:oklch(100% 0 0)}.skippr\\:drop-shadow-\\[0_2px_5px_rgba\\(0\\,0\\,0\\,0\\.4\\)\\]{--tw-drop-shadow-size:drop-shadow(0 2px 5px var(--tw-drop-shadow-color,#0006));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.skippr\\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--skippr-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.skippr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[opacity\\,transform\\,height\\]{transition-property:opacity,transform,height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\,margin\\]{transition-property:width,margin;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:duration-75{--tw-duration:75ms;transition-duration:75ms}.skippr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.skippr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.skippr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.skippr\\:duration-\\[400ms\\]{--tw-duration:.4s;transition-duration:.4s}.skippr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.skippr\\:ease-in-out{--tw-ease:var(--skippr-ease-in-out);transition-timing-function:var(--skippr-ease-in-out)}.skippr\\:ease-out{--tw-ease:var(--skippr-ease-out);transition-timing-function:var(--skippr-ease-out)}.skippr\\:outline-none{--tw-outline-style:none;outline-style:none}.skippr\\:select-none{-webkit-user-select:none;user-select:none}.skippr\\:\\[animation-delay\\:0ms\\]{animation-delay:0s}.skippr\\:\\[animation-delay\\:150ms\\]{animation-delay:.15s}.skippr\\:\\[animation-delay\\:200ms\\]{animation-delay:.2s}.skippr\\:\\[animation-delay\\:300ms\\]{animation-delay:.3s}.skippr\\:\\[animation-delay\\:400ms\\]{animation-delay:.4s}.skippr\\:\\[overflow-anchor\\:none\\]{overflow-anchor:none}.skippr\\:group-focus-within\\:scale-100:is(:where(.skippr\\:group):focus-within *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-focus-within\\:opacity-100:is(:where(.skippr\\:group):focus-within *){opacity:1}@media (hover:hover){.skippr\\:group-hover\\:scale-100:is(:where(.skippr\\:group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-hover\\:text-red-300:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-red-300)}.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:color-mix(in oklab,var(--skippr-color-white)80%,transparent)}}.skippr\\:group-hover\\:opacity-100:is(:where(.skippr\\:group):hover *){opacity:1}}.skippr\\:placeholder\\:text-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}@media (hover:hover){.skippr\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--skippr-spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:hover\\:bg-\\[\\#3a384b\\]:hover{background-color:#3a384b}.skippr\\:hover\\:bg-accent:hover{background-color:#e7e5e4}.skippr\\:hover\\:bg-amber-100:hover{background-color:var(--skippr-color-amber-100)}.skippr\\:hover\\:bg-bubble:hover{background-color:#2d2b3d}.skippr\\:hover\\:bg-destructive\\/90:hover{background-color:oklab(61.4357% .15892 .0698893/.9)}.skippr\\:hover\\:bg-green-200:hover{background-color:var(--skippr-color-green-200)}.skippr\\:hover\\:bg-muted:hover{background-color:oklch(97% .001 106.424)}.skippr\\:hover\\:bg-neutral-100:hover{background-color:var(--skippr-color-neutral-100)}.skippr\\:hover\\:bg-neutral-200:hover{background-color:var(--skippr-color-neutral-200)}.skippr\\:hover\\:bg-primary\\/90:hover{background-color:oklab(29.9244% .0107414 -.0305411/.9)}.skippr\\:hover\\:bg-red-200:hover{background-color:var(--skippr-color-red-200)}.skippr\\:hover\\:bg-red-600:hover{background-color:var(--skippr-color-red-600)}.skippr\\:hover\\:bg-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.skippr\\:hover\\:bg-white\\/10:hover{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--skippr-color-white)10%,transparent)}}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:text-primary-foreground:hover{color:#fff}.skippr\\:hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.skippr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus-visible\\:ring-brand:focus-visible{--tw-ring-color:#2bc0ae}.skippr\\:focus-visible\\:ring-bubble\\/60:focus-visible{--tw-ring-color:oklab(29.9244% .0107414 -.0305411/.6)}.skippr\\:focus-visible\\:ring-ring:focus-visible{--tw-ring-color:oklch(70.9% .01 56.259)}.skippr\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.skippr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.skippr\\:active\\:translate-y-0:active{--tw-translate-y:calc(var(--skippr-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}@media (prefers-reduced-motion:reduce){.skippr\\:motion-reduce\\:hidden{display:none}}.skippr\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.skippr\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.skippr\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}}@keyframes skippr-tap{0%{transform:scale(1)}45%{transform:scale(.7)}to{transform:scale(1)}}@keyframes skippr-press{0%{transform:scale(1)}55%{transform:scale(1)}85%{transform:scale(.68)}to{transform:scale(1)}}@keyframes skippr-cursor-pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes skippr-click-ping{0%{opacity:.9;transform:translate(-50%,-50%)scale(.4)}to{opacity:0;transform:translate(-50%,-50%)scale(2.4)}}@keyframes skippr-tab-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-speak{0%,to{opacity:.6;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-thinking-dot{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes skippr-pulse-ring{0%,to{box-shadow:0 0 #2d2b3d66}50%{box-shadow:0 0 0 10px #2d2b3d00}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 #2bc0ae80}50%{box-shadow:0 0 0 6px #2bc0ae00}}@keyframes skippr-speak-ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.8)}}@keyframes skippr-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes skippr-breathe{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes skippr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-wave{0%,to{opacity:.4;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-bubble-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-tip-in{0%{opacity:0;transform:translateY(14px)scale(.96)}60%{opacity:1;transform:translateY(-2px)scale(1.01)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-pill-content{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes skippr-banner-look{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@keyframes skippr-finger-tap{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(2px)rotate(-6deg)}}@keyframes skippr-toolset-pop{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes skippr-stage-fade{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes skippr-agent-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}@keyframes skippr-orb-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.skippr-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.skippr-no-scrollbar::-webkit-scrollbar{display:none}:host{color:var(--color-foreground)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}`;
4598
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--skippr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--skippr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--skippr-color-red-50:oklch(97.1% .013 17.38);--skippr-color-red-100:oklch(93.6% .032 17.717);--skippr-color-red-200:oklch(88.5% .062 18.334);--skippr-color-red-300:oklch(80.8% .114 19.571);--skippr-color-red-400:oklch(70.4% .191 22.216);--skippr-color-red-500:oklch(63.7% .237 25.331);--skippr-color-red-600:oklch(57.7% .245 27.325);--skippr-color-red-700:oklch(50.5% .213 27.518);--skippr-color-amber-50:oklch(98.7% .022 95.277);--skippr-color-amber-100:oklch(96.2% .059 95.617);--skippr-color-amber-400:oklch(82.8% .189 84.429);--skippr-color-amber-700:oklch(55.5% .163 48.998);--skippr-color-amber-950:oklch(27.9% .077 45.635);--skippr-color-green-100:oklch(96.2% .044 156.743);--skippr-color-green-200:oklch(92.5% .084 155.995);--skippr-color-green-700:oklch(52.7% .154 150.069);--skippr-color-emerald-400:oklch(76.5% .177 163.223);--skippr-color-neutral-100:oklch(97% 0 0);--skippr-color-neutral-200:oklch(92.2% 0 0);--skippr-color-neutral-500:oklch(55.6% 0 0);--skippr-color-neutral-700:oklch(37.1% 0 0);--skippr-color-black:#000;--skippr-color-white:#fff;--skippr-spacing:.25rem;--skippr-text-xs:.75rem;--skippr-text-xs--line-height:calc(1/.75);--skippr-text-sm:.875rem;--skippr-text-sm--line-height:calc(1.25/.875);--skippr-font-weight-medium:500;--skippr-font-weight-semibold:600;--skippr-leading-tight:1.25;--skippr-leading-snug:1.375;--skippr-leading-relaxed:1.625;--skippr-ease-out:cubic-bezier(0,0,.2,1);--skippr-ease-in-out:cubic-bezier(.4,0,.2,1);--skippr-animate-spin:spin 1s linear infinite;--skippr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--skippr-animate-bounce:bounce 1s infinite;--skippr-blur-sm:8px;--skippr-default-transition-duration:.15s;--skippr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--skippr-default-font-family:var(--skippr-font-sans);--skippr-default-mono-font-family:var(--skippr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--skippr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--skippr-default-font-feature-settings,normal);font-variation-settings:var(--skippr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--skippr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--skippr-default-mono-font-feature-settings,normal);font-variation-settings:var(--skippr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.skippr\\:pointer-events-none{pointer-events:none}.skippr\\:absolute{position:absolute}.skippr\\:fixed{position:fixed}.skippr\\:relative{position:relative}.skippr\\:sticky{position:sticky}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:inset-y-0{inset-block:calc(var(--skippr-spacing)*0)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-full{top:100%}.skippr\\:-right-8{right:calc(var(--skippr-spacing)*-8)}.skippr\\:right-0{right:calc(var(--skippr-spacing)*0)}.skippr\\:right-3{right:calc(var(--skippr-spacing)*3)}.skippr\\:right-5{right:calc(var(--skippr-spacing)*5)}.skippr\\:right-6{right:calc(var(--skippr-spacing)*6)}.skippr\\:-bottom-1{bottom:calc(var(--skippr-spacing)*-1)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-3{bottom:calc(var(--skippr-spacing)*3)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-full{bottom:100%}.skippr\\:-left-8{left:calc(var(--skippr-spacing)*-8)}.skippr\\:left-0{left:calc(var(--skippr-spacing)*0)}.skippr\\:left-1\\/2{left:50%}.skippr\\:left-3{left:calc(var(--skippr-spacing)*3)}.skippr\\:left-5{left:calc(var(--skippr-spacing)*5)}.skippr\\:left-6{left:calc(var(--skippr-spacing)*6)}.skippr\\:z-10{z-index:10}.skippr\\:z-20{z-index:20}.skippr\\:z-\\[9998\\]{z-index:9998}.skippr\\:z-\\[9999\\]{z-index:9999}.skippr\\:z-\\[10000\\]{z-index:10000}.skippr\\:order-first{order:-9999}.skippr\\:order-last{order:9999}.skippr\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.skippr\\:-mt-\\[27px\\]{margin-top:-27px}.skippr\\:mt-0\\.5{margin-top:calc(var(--skippr-spacing)*.5)}.skippr\\:mt-1{margin-top:calc(var(--skippr-spacing)*1)}.skippr\\:mt-1\\.5{margin-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:mt-2{margin-top:calc(var(--skippr-spacing)*2)}.skippr\\:mt-3{margin-top:calc(var(--skippr-spacing)*3)}.skippr\\:mt-3\\.5{margin-top:calc(var(--skippr-spacing)*3.5)}.skippr\\:mr-7{margin-right:calc(var(--skippr-spacing)*7)}.skippr\\:-mb-\\[5px\\]{margin-bottom:-5px}.skippr\\:mb-1\\.5{margin-bottom:calc(var(--skippr-spacing)*1.5)}.skippr\\:mb-2{margin-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:mb-3{margin-bottom:calc(var(--skippr-spacing)*3)}.skippr\\:mb-4{margin-bottom:calc(var(--skippr-spacing)*4)}.skippr\\:ml-0\\.5{margin-left:calc(var(--skippr-spacing)*.5)}.skippr\\:ml-1{margin-left:calc(var(--skippr-spacing)*1)}.skippr\\:ml-7{margin-left:calc(var(--skippr-spacing)*7)}.skippr\\:flex{display:flex}.skippr\\:hidden{display:none}.skippr\\:inline-flex{display:inline-flex}.skippr\\:size-1{width:calc(var(--skippr-spacing)*1);height:calc(var(--skippr-spacing)*1)}.skippr\\:size-1\\.5{width:calc(var(--skippr-spacing)*1.5);height:calc(var(--skippr-spacing)*1.5)}.skippr\\:size-2{width:calc(var(--skippr-spacing)*2);height:calc(var(--skippr-spacing)*2)}.skippr\\:size-2\\.5{width:calc(var(--skippr-spacing)*2.5);height:calc(var(--skippr-spacing)*2.5)}.skippr\\:size-3{width:calc(var(--skippr-spacing)*3);height:calc(var(--skippr-spacing)*3)}.skippr\\:size-3\\.5{width:calc(var(--skippr-spacing)*3.5);height:calc(var(--skippr-spacing)*3.5)}.skippr\\:size-4{width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}.skippr\\:size-5{width:calc(var(--skippr-spacing)*5);height:calc(var(--skippr-spacing)*5)}.skippr\\:size-6{width:calc(var(--skippr-spacing)*6);height:calc(var(--skippr-spacing)*6)}.skippr\\:size-7{width:calc(var(--skippr-spacing)*7);height:calc(var(--skippr-spacing)*7)}.skippr\\:size-8{width:calc(var(--skippr-spacing)*8);height:calc(var(--skippr-spacing)*8)}.skippr\\:size-9{width:calc(var(--skippr-spacing)*9);height:calc(var(--skippr-spacing)*9)}.skippr\\:size-10{width:calc(var(--skippr-spacing)*10);height:calc(var(--skippr-spacing)*10)}.skippr\\:size-12{width:calc(var(--skippr-spacing)*12);height:calc(var(--skippr-spacing)*12)}.skippr\\:size-\\[5px\\]{width:5px;height:5px}.skippr\\:size-\\[38px\\]{width:38px;height:38px}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.skippr\\:h-0\\.5{height:calc(var(--skippr-spacing)*.5)}.skippr\\:h-1{height:calc(var(--skippr-spacing)*1)}.skippr\\:h-1\\.5{height:calc(var(--skippr-spacing)*1.5)}.skippr\\:h-2{height:calc(var(--skippr-spacing)*2)}.skippr\\:h-3{height:calc(var(--skippr-spacing)*3)}.skippr\\:h-3\\.5{height:calc(var(--skippr-spacing)*3.5)}.skippr\\:h-4{height:calc(var(--skippr-spacing)*4)}.skippr\\:h-5{height:calc(var(--skippr-spacing)*5)}.skippr\\:h-6{height:calc(var(--skippr-spacing)*6)}.skippr\\:h-7{height:calc(var(--skippr-spacing)*7)}.skippr\\:h-8{height:calc(var(--skippr-spacing)*8)}.skippr\\:h-9{height:calc(var(--skippr-spacing)*9)}.skippr\\:h-10{height:calc(var(--skippr-spacing)*10)}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[36px\\]{height:36px}.skippr\\:h-\\[38px\\]{height:38px}.skippr\\:h-\\[48px\\]{height:48px}.skippr\\:h-\\[54px\\]{height:54px}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:min-h-11{min-height:calc(var(--skippr-spacing)*11)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.skippr\\:w-4{width:calc(var(--skippr-spacing)*4)}.skippr\\:w-5{width:calc(var(--skippr-spacing)*5)}.skippr\\:w-6{width:calc(var(--skippr-spacing)*6)}.skippr\\:w-7{width:calc(var(--skippr-spacing)*7)}.skippr\\:w-8{width:calc(var(--skippr-spacing)*8)}.skippr\\:w-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-40{width:calc(var(--skippr-spacing)*40)}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-\\[3px\\]{width:3px}.skippr\\:w-\\[15\\.4px\\]{width:15.4px}.skippr\\:w-\\[36px\\]{width:36px}.skippr\\:w-\\[38px\\]{width:38px}.skippr\\:w-\\[50px\\]{width:50px}.skippr\\:w-full{width:100%}.skippr\\:max-w-64{max-width:calc(var(--skippr-spacing)*64)}.skippr\\:max-w-72{max-width:calc(var(--skippr-spacing)*72)}.skippr\\:max-w-\\[80\\%\\]{max-width:80%}.skippr\\:max-w-\\[280px\\]{max-width:280px}.skippr\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.skippr\\:min-w-11{min-width:calc(var(--skippr-spacing)*11)}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom-left{transform-origin:0 100%}.skippr\\:origin-bottom-right{transform-origin:100% 100%}.skippr\\:origin-center{transform-origin:50%}.skippr\\:origin-left{transform-origin:0}.skippr\\:origin-right{transform-origin:100%}.skippr\\:origin-top-left{transform-origin:0 0}.skippr\\:origin-top-right{transform-origin:100% 0}.skippr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*-7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:-rotate-90{rotate:-90deg}.skippr\\:rotate-45{rotate:45deg}.skippr\\:rotate-\\[225deg\\]{rotate:225deg}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out\\]{animation:.2s ease-out skippr-agent-in}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out_240ms_both\\]{animation:.2s ease-out .24s both skippr-agent-in}.skippr\\:\\[animation\\:skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:\\[animation\\:skippr-finger-tap_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-finger-tap}.skippr\\:\\[animation\\:skippr-orb-in_320ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)\\]{animation:.32s cubic-bezier(.34,1.3,.64,1) skippr-orb-in}.skippr\\:\\[animation\\:skippr-stage-fade_240ms_ease-out\\]{animation:.24s ease-out skippr-stage-fade}.skippr\\:\\[animation\\:skippr-tip-in_360ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)_backwards\\]{animation:.36s cubic-bezier(.34,1.3,.64,1) backwards skippr-tip-in}.skippr\\:\\[animation\\:skippr-toolset-pop_280ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.28s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:\\[animation\\:skippr-toolset-pop_440ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.44s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:animate-\\[skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:animate-\\[skippr-bubble-in_0\\.28s_ease-out\\]{animation:.28s ease-out skippr-bubble-in}.skippr\\:animate-\\[skippr-fade-in_0\\.3s_ease-out\\]{animation:.3s ease-out skippr-fade-in}.skippr\\:animate-\\[skippr-pill-content_0\\.22s_ease-out\\]{animation:.22s ease-out skippr-pill-content}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.3s_infinite\\]{animation:1.1s ease-in-out .3s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.6s_infinite\\]{animation:1.1s ease-in-out .6s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.15s_infinite\\]{animation:1.1s ease-in-out .15s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.45s_infinite\\]{animation:1.1s ease-in-out .45s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-speak}.skippr\\:animate-bounce{animation:var(--skippr-animate-bounce)}.skippr\\:animate-ping{animation:var(--skippr-animate-ping)}.skippr\\:animate-skippr-annotation-pulse{animation:1.8s ease-in-out infinite skippr-annotation-pulse}.skippr\\:animate-skippr-click-ping{animation:.5s ease-out forwards skippr-click-ping}.skippr\\:animate-skippr-cursor-pop{animation:.22s ease-out skippr-cursor-pop}.skippr\\:animate-skippr-press{animation:.5s ease-in-out skippr-press}.skippr\\:animate-skippr-rec-ring{animation:2s ease-out infinite skippr-rec-ring}.skippr\\:animate-skippr-tab-fade{animation:.2s ease-out skippr-tab-fade}.skippr\\:animate-skippr-thinking-dot{animation:1.2s ease-in-out infinite skippr-thinking-dot}.skippr\\:animate-spin{animation:var(--skippr-animate-spin)}.skippr\\:cursor-default{cursor:default}.skippr\\:cursor-grab{cursor:grab}.skippr\\:cursor-not-allowed{cursor:not-allowed}.skippr\\:cursor-pointer{cursor:pointer}.skippr\\:touch-none{touch-action:none}.skippr\\:resize-none{resize:none}.skippr\\:flex-col{flex-direction:column}.skippr\\:flex-col-reverse{flex-direction:column-reverse}.skippr\\:items-center{align-items:center}.skippr\\:items-end{align-items:flex-end}.skippr\\:items-start{align-items:flex-start}.skippr\\:justify-between{justify-content:space-between}.skippr\\:justify-center{justify-content:center}.skippr\\:justify-end{justify-content:flex-end}.skippr\\:justify-start{justify-content:flex-start}.skippr\\:gap-0\\.5{gap:calc(var(--skippr-spacing)*.5)}.skippr\\:gap-1{gap:calc(var(--skippr-spacing)*1)}.skippr\\:gap-1\\.5{gap:calc(var(--skippr-spacing)*1.5)}.skippr\\:gap-2{gap:calc(var(--skippr-spacing)*2)}.skippr\\:gap-2\\.5{gap:calc(var(--skippr-spacing)*2.5)}.skippr\\:gap-3{gap:calc(var(--skippr-spacing)*3)}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}:where(.skippr\\:space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[10px\\]{border-radius:10px}.skippr\\:rounded-\\[11px\\]{border-radius:11px}.skippr\\:rounded-\\[12px\\]{border-radius:12px}.skippr\\:rounded-\\[14px\\]{border-radius:14px}.skippr\\:rounded-\\[16px\\]{border-radius:16px}.skippr\\:rounded-\\[20px\\]{border-radius:20px}.skippr\\:rounded-full{border-radius:3.40282e38px}.skippr\\:rounded-lg{border-radius:.625rem}.skippr\\:rounded-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:rounded-l-\\[18px\\]{border-top-left-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-tl-md{border-top-left-radius:.5rem}.skippr\\:rounded-r-\\[18px\\]{border-top-right-radius:18px;border-bottom-right-radius:18px}.skippr\\:border{border-style:var(--tw-border-style);border-width:1px}.skippr\\:border-0{border-style:var(--tw-border-style);border-width:0}.skippr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.skippr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.skippr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.skippr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.skippr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.skippr\\:border-\\[\\#2bc0ae\\]{border-color:#2bc0ae}.skippr\\:border-border,.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary\\/20{border-color:oklab(29.9244% .0107414 -.0305411/.2)}.skippr\\:border-r-border{border-right-color:oklch(92.3% .003 48.717)}.skippr\\:border-l-border{border-left-color:oklch(92.3% .003 48.717)}.skippr\\:bg-\\[\\#2bc0ae\\]{background-color:#2bc0ae}.skippr\\:bg-\\[\\#2bc0ae\\]\\/50{background-color:oklab(72.9347% -.121518 -.00545585/.5)}.skippr\\:bg-amber-50{background-color:var(--skippr-color-amber-50)}.skippr\\:bg-amber-400{background-color:var(--skippr-color-amber-400)}.skippr\\:bg-background{background-color:oklch(100% 0 0)}.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:color-mix(in oklab,var(--skippr-color-black)7.0%,transparent)}}.skippr\\:bg-bubble{background-color:#2d2b3d}.skippr\\:bg-bubble\\/95{background-color:oklab(29.9244% .0107414 -.0305411/.95)}.skippr\\:bg-card{background-color:oklch(100% 0 0)}.skippr\\:bg-current{background-color:currentColor}.skippr\\:bg-destructive{background-color:#d94f4f}.skippr\\:bg-emerald-400{background-color:var(--skippr-color-emerald-400)}.skippr\\:bg-foreground{background-color:oklch(14.7% .004 49.25)}.skippr\\:bg-green-100{background-color:var(--skippr-color-green-100)}.skippr\\:bg-launcher{background-color:#2d2d3f}.skippr\\:bg-muted-foreground\\/20{background-color:oklab(55.3% .00687528 .0110332/.2)}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-muted\\/50{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:bg-neutral-100{background-color:var(--skippr-color-neutral-100)}.skippr\\:bg-primary{background-color:#2d2b3d}.skippr\\:bg-primary-foreground\\/20{background-color:oklab(100% 0 5.96046e-8/.2)}.skippr\\:bg-primary\\/10{background-color:oklab(29.9244% .0107414 -.0305411/.1)}.skippr\\:bg-red-50{background-color:var(--skippr-color-red-50)}.skippr\\:bg-red-100{background-color:var(--skippr-color-red-100)}.skippr\\:bg-red-400{background-color:var(--skippr-color-red-400)}.skippr\\:bg-red-500{background-color:var(--skippr-color-red-500)}.skippr\\:bg-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white,.skippr\\:bg-white\\/15{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/15{background-color:color-mix(in oklab,var(--skippr-color-white)15%,transparent)}}.skippr\\:fill-brand{fill:#2bc0ae}.skippr\\:fill-primary\\/30{fill:oklab(29.9244% .0107414 -.0305411/.3)}.skippr\\:stroke-black\\/15{stroke:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:stroke-black\\/15{stroke:color-mix(in oklab,var(--skippr-color-black)15%,transparent)}}.skippr\\:stroke-bubble{stroke:#2d2b3d}.skippr\\:p-0{padding:calc(var(--skippr-spacing)*0)}.skippr\\:p-0\\.5{padding:calc(var(--skippr-spacing)*.5)}.skippr\\:p-1\\.5{padding:calc(var(--skippr-spacing)*1.5)}.skippr\\:p-2{padding:calc(var(--skippr-spacing)*2)}.skippr\\:p-3{padding:calc(var(--skippr-spacing)*3)}.skippr\\:p-3\\.5{padding:calc(var(--skippr-spacing)*3.5)}.skippr\\:p-4{padding:calc(var(--skippr-spacing)*4)}.skippr\\:px-1{padding-inline:calc(var(--skippr-spacing)*1)}.skippr\\:px-1\\.5{padding-inline:calc(var(--skippr-spacing)*1.5)}.skippr\\:px-2{padding-inline:calc(var(--skippr-spacing)*2)}.skippr\\:px-2\\.5{padding-inline:calc(var(--skippr-spacing)*2.5)}.skippr\\:px-3{padding-inline:calc(var(--skippr-spacing)*3)}.skippr\\:px-3\\.5{padding-inline:calc(var(--skippr-spacing)*3.5)}.skippr\\:px-4{padding-inline:calc(var(--skippr-spacing)*4)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:py-0\\.5{padding-block:calc(var(--skippr-spacing)*.5)}.skippr\\:py-1{padding-block:calc(var(--skippr-spacing)*1)}.skippr\\:py-1\\.5{padding-block:calc(var(--skippr-spacing)*1.5)}.skippr\\:py-2{padding-block:calc(var(--skippr-spacing)*2)}.skippr\\:py-2\\.5{padding-block:calc(var(--skippr-spacing)*2.5)}.skippr\\:py-3{padding-block:calc(var(--skippr-spacing)*3)}.skippr\\:py-4{padding-block:calc(var(--skippr-spacing)*4)}.skippr\\:py-6{padding-block:calc(var(--skippr-spacing)*6)}.skippr\\:pt-1\\.5{padding-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:pr-2\\.5{padding-right:calc(var(--skippr-spacing)*2.5)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pb-2{padding-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:pl-1\\.5{padding-left:calc(var(--skippr-spacing)*1.5)}.skippr\\:pl-2\\.5{padding-left:calc(var(--skippr-spacing)*2.5)}.skippr\\:pl-3\\.5{padding-left:calc(var(--skippr-spacing)*3.5)}.skippr\\:text-center{text-align:center}.skippr\\:text-left{text-align:left}.skippr\\:font-mono{font-family:var(--skippr-font-mono)}.skippr\\:text-sm{font-size:var(--skippr-text-sm);line-height:var(--tw-leading,var(--skippr-text-sm--line-height))}.skippr\\:text-xs{font-size:var(--skippr-text-xs);line-height:var(--tw-leading,var(--skippr-text-xs--line-height))}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:text-\\[13px\\]{font-size:13px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-relaxed{--tw-leading:var(--skippr-leading-relaxed);line-height:var(--skippr-leading-relaxed)}.skippr\\:leading-snug{--tw-leading:var(--skippr-leading-snug);line-height:var(--skippr-leading-snug)}.skippr\\:leading-tight{--tw-leading:var(--skippr-leading-tight);line-height:var(--skippr-leading-tight)}.skippr\\:font-medium{--tw-font-weight:var(--skippr-font-weight-medium);font-weight:var(--skippr-font-weight-medium)}.skippr\\:font-semibold{--tw-font-weight:var(--skippr-font-weight-semibold);font-weight:var(--skippr-font-weight-semibold)}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-\\[\\#2bc0ae\\]{color:#2bc0ae}.skippr\\:text-amber-700{color:var(--skippr-color-amber-700)}.skippr\\:text-amber-950{color:var(--skippr-color-amber-950)}.skippr\\:text-background{color:oklch(100% 0 0)}.skippr\\:text-black{color:var(--skippr-color-black)}.skippr\\:text-brand{color:#2bc0ae}.skippr\\:text-bubble{color:#2d2b3d}.skippr\\:text-chart-3{color:oklch(66.6% .179 58.318)}.skippr\\:text-destructive{color:#d94f4f}.skippr\\:text-foreground{color:oklch(14.7% .004 49.25)}.skippr\\:text-green-700{color:var(--skippr-color-green-700)}.skippr\\:text-muted-foreground{color:oklch(55.3% .013 58.071)}.skippr\\:text-muted-foreground\\/30{color:oklab(55.3% .00687528 .0110332/.3)}.skippr\\:text-muted-foreground\\/40{color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:text-muted-foreground\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-muted-foreground\\/70{color:oklab(55.3% .00687528 .0110332/.7)}.skippr\\:text-neutral-500{color:var(--skippr-color-neutral-500)}.skippr\\:text-neutral-700{color:var(--skippr-color-neutral-700)}.skippr\\:text-primary{color:#2d2b3d}.skippr\\:text-primary-foreground{color:#fff}.skippr\\:text-primary-foreground\\/70{color:oklab(100% 0 5.96046e-8/.7)}.skippr\\:text-red-400{color:var(--skippr-color-red-400)}.skippr\\:text-red-600{color:var(--skippr-color-red-600)}.skippr\\:text-red-700{color:var(--skippr-color-red-700)}.skippr\\:text-secondary-foreground{color:#613700}.skippr\\:text-white,.skippr\\:text-white\\/60{color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:text-white\\/60{color:color-mix(in oklab,var(--skippr-color-white)60%,transparent)}}.skippr\\:capitalize{text-transform:capitalize}.skippr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.skippr\\:line-through{text-decoration-line:line-through}.skippr\\:placeholder-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}.skippr\\:opacity-0{opacity:0}.skippr\\:opacity-40{opacity:.4}.skippr\\:opacity-75{opacity:.75}.skippr\\:opacity-100{opacity:1}.skippr\\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[-6px_8px_30px_rgba\\(15\\,18\\,26\\,0\\.32\\)\\]{--tw-shadow:-6px 8px 30px var(--tw-shadow-color,#0f121a52);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_14px_rgba\\(239\\,68\\,68\\,0\\.45\\)\\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#ef444473);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_16px_rgba\\(45\\,43\\,61\\,0\\.45\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#2d2b3d73),0 2px 4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(45\\,43\\,61\\,0\\.35\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#2d2b3d59);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_30px_rgba\\(0\\,0\\,0\\,0\\.16\\)\\,0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000029),0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_10px_32px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 10px 32px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-black\\/5{--tw-ring-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--skippr-color-black)5%,transparent)}}.skippr\\:ring-brand{--tw-ring-color:#2bc0ae}.skippr\\:ring-foreground\\/10{--tw-ring-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:ring-white\\/30{--tw-ring-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-white\\/30{--tw-ring-color:color-mix(in oklab,var(--skippr-color-white)30%,transparent)}}.skippr\\:ring-offset-background{--tw-ring-offset-color:oklch(100% 0 0)}.skippr\\:drop-shadow-\\[0_2px_5px_rgba\\(0\\,0\\,0\\,0\\.4\\)\\]{--tw-drop-shadow-size:drop-shadow(0 2px 5px var(--tw-drop-shadow-color,#0006));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.skippr\\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--skippr-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.skippr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[opacity\\,transform\\,height\\]{transition-property:opacity,transform,height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\,margin\\]{transition-property:width,margin;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:duration-75{--tw-duration:75ms;transition-duration:75ms}.skippr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.skippr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.skippr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.skippr\\:duration-\\[400ms\\]{--tw-duration:.4s;transition-duration:.4s}.skippr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.skippr\\:ease-in-out{--tw-ease:var(--skippr-ease-in-out);transition-timing-function:var(--skippr-ease-in-out)}.skippr\\:ease-out{--tw-ease:var(--skippr-ease-out);transition-timing-function:var(--skippr-ease-out)}.skippr\\:outline-none{--tw-outline-style:none;outline-style:none}.skippr\\:select-none{-webkit-user-select:none;user-select:none}.skippr\\:\\[animation-delay\\:0ms\\]{animation-delay:0s}.skippr\\:\\[animation-delay\\:150ms\\]{animation-delay:.15s}.skippr\\:\\[animation-delay\\:200ms\\]{animation-delay:.2s}.skippr\\:\\[animation-delay\\:300ms\\]{animation-delay:.3s}.skippr\\:\\[animation-delay\\:400ms\\]{animation-delay:.4s}.skippr\\:\\[overflow-anchor\\:none\\]{overflow-anchor:none}.skippr\\:group-focus-within\\:scale-100:is(:where(.skippr\\:group):focus-within *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-focus-within\\:opacity-100:is(:where(.skippr\\:group):focus-within *){opacity:1}@media (hover:hover){.skippr\\:group-hover\\:scale-100:is(:where(.skippr\\:group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-hover\\:text-red-300:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-red-300)}.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:color-mix(in oklab,var(--skippr-color-white)80%,transparent)}}.skippr\\:group-hover\\:opacity-100:is(:where(.skippr\\:group):hover *){opacity:1}}.skippr\\:placeholder\\:text-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}@media (hover:hover){.skippr\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--skippr-spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:hover\\:bg-\\[\\#3a384b\\]:hover{background-color:#3a384b}.skippr\\:hover\\:bg-accent:hover{background-color:#e7e5e4}.skippr\\:hover\\:bg-amber-100:hover{background-color:var(--skippr-color-amber-100)}.skippr\\:hover\\:bg-bubble:hover{background-color:#2d2b3d}.skippr\\:hover\\:bg-destructive\\/90:hover{background-color:oklab(61.4357% .15892 .0698893/.9)}.skippr\\:hover\\:bg-green-200:hover{background-color:var(--skippr-color-green-200)}.skippr\\:hover\\:bg-muted:hover{background-color:oklch(97% .001 106.424)}.skippr\\:hover\\:bg-neutral-100:hover{background-color:var(--skippr-color-neutral-100)}.skippr\\:hover\\:bg-neutral-200:hover{background-color:var(--skippr-color-neutral-200)}.skippr\\:hover\\:bg-primary\\/90:hover{background-color:oklab(29.9244% .0107414 -.0305411/.9)}.skippr\\:hover\\:bg-red-200:hover{background-color:var(--skippr-color-red-200)}.skippr\\:hover\\:bg-red-600:hover{background-color:var(--skippr-color-red-600)}.skippr\\:hover\\:bg-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.skippr\\:hover\\:bg-white\\/10:hover{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--skippr-color-white)10%,transparent)}}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:text-primary-foreground:hover{color:#fff}.skippr\\:hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.skippr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus-visible\\:ring-brand:focus-visible{--tw-ring-color:#2bc0ae}.skippr\\:focus-visible\\:ring-bubble\\/60:focus-visible{--tw-ring-color:oklab(29.9244% .0107414 -.0305411/.6)}.skippr\\:focus-visible\\:ring-ring:focus-visible{--tw-ring-color:oklch(70.9% .01 56.259)}.skippr\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.skippr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.skippr\\:active\\:translate-y-0:active{--tw-translate-y:calc(var(--skippr-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}@media (prefers-reduced-motion:reduce){.skippr\\:motion-reduce\\:hidden{display:none}.skippr\\:motion-reduce\\:animate-none{animation:none}}.skippr\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.skippr\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.skippr\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}}@keyframes skippr-tap{0%{transform:scale(1)}45%{transform:scale(.7)}to{transform:scale(1)}}@keyframes skippr-press{0%{transform:scale(1)}55%{transform:scale(1)}85%{transform:scale(.68)}to{transform:scale(1)}}@keyframes skippr-cursor-pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes skippr-click-ping{0%{opacity:.9;transform:translate(-50%,-50%)scale(.4)}to{opacity:0;transform:translate(-50%,-50%)scale(2.4)}}@keyframes skippr-tab-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-speak{0%,to{opacity:.6;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-thinking-dot{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes skippr-pulse-ring{0%,to{box-shadow:0 0 #2d2b3d66}50%{box-shadow:0 0 0 10px #2d2b3d00}}@keyframes skippr-rec-ring{0%{box-shadow:0 0 #2bc0ae8c}70%{box-shadow:0 0 0 11px #2bc0ae00}to{box-shadow:0 0 #2bc0ae00}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 #2bc0ae80}50%{box-shadow:0 0 0 6px #2bc0ae00}}@keyframes skippr-speak-ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.8)}}@keyframes skippr-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes skippr-breathe{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes skippr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-wave{0%,to{opacity:.4;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-bubble-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-tip-in{0%{opacity:0;transform:translateY(14px)scale(.96)}60%{opacity:1;transform:translateY(-2px)scale(1.01)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-pill-content{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes skippr-banner-look{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@keyframes skippr-finger-tap{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(2px)rotate(-6deg)}}@keyframes skippr-toolset-pop{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes skippr-stage-fade{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes skippr-agent-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}@keyframes skippr-orb-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.skippr-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.skippr-no-scrollbar::-webkit-scrollbar{display:none}:host{color:var(--color-foreground)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}`;
4375
4599
  useLayoutEffect2(() => {
4376
4600
  const host = hostRef.current;
4377
4601
  if (!host || !css)
@@ -4386,23 +4610,23 @@ function ShadowHost({ children }) {
4386
4610
  setShadowRoot(root);
4387
4611
  }, [css]);
4388
4612
  if (!css)
4389
- return /* @__PURE__ */ jsx7(Fragment2, {
4613
+ return /* @__PURE__ */ jsx10(Fragment2, {
4390
4614
  children
4391
4615
  });
4392
- return /* @__PURE__ */ jsx7("div", {
4616
+ return /* @__PURE__ */ jsx10("div", {
4393
4617
  ref: hostRef,
4394
4618
  children: shadowRoot && createPortal(children, shadowRoot)
4395
4619
  });
4396
4620
  }
4397
4621
 
4398
4622
  // src/components/Sidebar.tsx
4399
- import { useContext as useContext11, useEffect as useEffect26 } from "react";
4623
+ import { useContext as useContext13, useEffect as useEffect27 } from "react";
4400
4624
 
4401
4625
  // src/hooks/useCombinedMessages.ts
4402
- import { useContext as useContext7, useMemo as useMemo6 } from "react";
4626
+ import { useContext as useContext9, useMemo as useMemo6 } from "react";
4403
4627
 
4404
4628
  // src/hooks/useChatMessages.ts
4405
- import { useChat, useLocalParticipant as useLocalParticipant7 } from "@livekit/components-react/hooks";
4629
+ import { useChat, useLocalParticipant as useLocalParticipant9 } from "@livekit/components-react/hooks";
4406
4630
  import { useMemo as useMemo4 } from "react";
4407
4631
 
4408
4632
  // src/lib/filterSystemMessages.ts
@@ -4414,7 +4638,7 @@ function filterSystemMessages(messages) {
4414
4638
  // src/hooks/useChatMessages.ts
4415
4639
  function useChatMessages() {
4416
4640
  const { chatMessages: rawMessages, send, isSending } = useChat();
4417
- const { localParticipant } = useLocalParticipant7();
4641
+ const { localParticipant } = useLocalParticipant9();
4418
4642
  const localIdentity = localParticipant.identity;
4419
4643
  const chatMessages = useMemo4(() => {
4420
4644
  const sortedMessages = rawMessages.map((msg) => ({
@@ -4430,19 +4654,33 @@ function useChatMessages() {
4430
4654
  }
4431
4655
 
4432
4656
  // src/hooks/useStreamingTranscript.ts
4433
- import { useLocalParticipant as useLocalParticipant8, useTranscriptions } from "@livekit/components-react/hooks";
4434
- import { useMemo as useMemo5 } from "react";
4657
+ import { useLocalParticipant as useLocalParticipant10 } from "@livekit/components-react/hooks";
4658
+ import { useMemo as useMemo5, useRef as useRef14 } from "react";
4435
4659
  function useStreamingTranscript() {
4436
- const transcriptions = useTranscriptions();
4437
- const { localParticipant } = useLocalParticipant8();
4660
+ const transcriptions = useSharedTranscriptions();
4661
+ const { localParticipant } = useLocalParticipant10();
4662
+ const { isCapturingSpeech } = useTapToTalkContext();
4438
4663
  const localIdentity = localParticipant.identity;
4439
- const transcriptMessages = useMemo5(() => filterSystemMessages(transcriptions.filter((stream) => stream.text.trim().length > 0).map((stream) => ({
4664
+ const priorUserStreamIdsRef = useRef14(new Set);
4665
+ const wasCapturingSpeechRef = useRef14(false);
4666
+ if (isCapturingSpeech && !wasCapturingSpeechRef.current) {
4667
+ priorUserStreamIdsRef.current = new Set(transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity).map((stream) => stream.streamInfo.id));
4668
+ }
4669
+ wasCapturingSpeechRef.current = isCapturingSpeech;
4670
+ const transcriptMessages = useMemo5(() => filterSystemMessages(transcriptions.filter((stream) => stream.text.trim().length > 0).filter((stream) => {
4671
+ if (!isCapturingSpeech)
4672
+ return true;
4673
+ const isUser = stream.participantInfo.identity === localIdentity;
4674
+ if (!isUser)
4675
+ return true;
4676
+ return priorUserStreamIdsRef.current.has(stream.streamInfo.id);
4677
+ }).map((stream) => ({
4440
4678
  id: stream.streamInfo.id,
4441
4679
  role: stream.participantInfo.identity === localIdentity ? "user" : "assistant",
4442
4680
  content: stream.text,
4443
4681
  source: "voice-transcript",
4444
4682
  timestamp: stream.streamInfo.timestamp
4445
- }))), [transcriptions, localIdentity]);
4683
+ }))), [transcriptions, localIdentity, isCapturingSpeech]);
4446
4684
  return { transcriptMessages };
4447
4685
  }
4448
4686
 
@@ -4467,7 +4705,7 @@ function useCombinedMessages() {
4467
4705
  const { transcriptMessages } = useStreamingTranscript();
4468
4706
  const { chatMessages, sendChatMessage, isSendingChat } = useChatMessages();
4469
4707
  const { state: agentState } = useAgentVoiceState();
4470
- const historyMessages = useContext7(LiveAgentContext)?.historyMessages ?? [];
4708
+ const historyMessages = useContext9(LiveAgentContext)?.historyMessages ?? [];
4471
4709
  const liveMessages = useMemo6(() => {
4472
4710
  if (chatMessages.length === 0)
4473
4711
  return transcriptMessages;
@@ -4485,7 +4723,7 @@ function useCombinedMessages() {
4485
4723
  }
4486
4724
 
4487
4725
  // src/hooks/usePhaseUpdates.ts
4488
- import { useCallback as useCallback11, useContext as useContext8, useEffect as useEffect20 } from "react";
4726
+ import { useCallback as useCallback13, useContext as useContext10, useEffect as useEffect21 } from "react";
4489
4727
  function parsePhases(json) {
4490
4728
  try {
4491
4729
  const data = JSON.parse(json);
@@ -4496,10 +4734,10 @@ function parsePhases(json) {
4496
4734
  return null;
4497
4735
  }
4498
4736
  function usePhaseUpdates() {
4499
- const parse = useCallback11(parsePhases, []);
4737
+ const parse = useCallback13(parsePhases, []);
4500
4738
  const livePhases = useAgentState("phases", parse, []);
4501
- const ctx = useContext8(LiveAgentContext);
4502
- useEffect20(() => {
4739
+ const ctx = useContext10(LiveAgentContext);
4740
+ useEffect21(() => {
4503
4741
  if (livePhases.length > 0)
4504
4742
  ctx?.setPhasesSnapshot(livePhases);
4505
4743
  }, [livePhases, ctx?.setPhasesSnapshot]);
@@ -4508,7 +4746,7 @@ function usePhaseUpdates() {
4508
4746
  }
4509
4747
 
4510
4748
  // src/hooks/useSessionRemaining.ts
4511
- import { useEffect as useEffect21, useRef as useRef12, useState as useState14 } from "react";
4749
+ import { useEffect as useEffect22, useRef as useRef15, useState as useState15 } from "react";
4512
4750
 
4513
4751
  // src/lib/format.ts
4514
4752
  function formatTime(seconds) {
@@ -4524,9 +4762,9 @@ function parseNumber(s) {
4524
4762
  // src/hooks/useSessionRemaining.ts
4525
4763
  function useSessionRemaining() {
4526
4764
  const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
4527
- const endTimeRef = useRef12(null);
4528
- const [remaining, setRemaining] = useState14(null);
4529
- useEffect21(() => {
4765
+ const endTimeRef = useRef15(null);
4766
+ const [remaining, setRemaining] = useState15(null);
4767
+ useEffect22(() => {
4530
4768
  if (maxCallDuration === null || endTimeRef.current !== null)
4531
4769
  return;
4532
4770
  const endTime = Date.now() + maxCallDuration * 1000;
@@ -4543,13 +4781,13 @@ function useSessionRemaining() {
4543
4781
  }
4544
4782
 
4545
4783
  // src/components/ChatHeader.tsx
4546
- import { useContext as useContext10, useRef as useRef14 } from "react";
4784
+ import { useContext as useContext12, useRef as useRef17 } from "react";
4547
4785
 
4548
4786
  // src/hooks/useElapsedSeconds.ts
4549
- import { useEffect as useEffect22, useState as useState15 } from "react";
4787
+ import { useEffect as useEffect23, useState as useState16 } from "react";
4550
4788
  function useElapsedSeconds(isRunning) {
4551
- const [elapsed, setElapsed] = useState15(0);
4552
- useEffect22(() => {
4789
+ const [elapsed, setElapsed] = useState16(0);
4790
+ useEffect23(() => {
4553
4791
  if (!isRunning) {
4554
4792
  setElapsed(0);
4555
4793
  return;
@@ -4565,25 +4803,25 @@ function useElapsedSeconds(isRunning) {
4565
4803
  }
4566
4804
 
4567
4805
  // src/hooks/useTextMode.ts
4568
- import { useLocalParticipant as useLocalParticipant9 } from "@livekit/components-react/hooks";
4569
- import { useCallback as useCallback12, useContext as useContext9, useRef as useRef13 } from "react";
4570
- var textEncoder5 = new TextEncoder;
4806
+ import { useLocalParticipant as useLocalParticipant11 } from "@livekit/components-react/hooks";
4807
+ import { useCallback as useCallback14, useContext as useContext11, useRef as useRef16 } from "react";
4808
+ var textEncoder6 = new TextEncoder;
4571
4809
  function useTextMode() {
4572
- const ctx = useContext9(LiveAgentContext);
4810
+ const ctx = useContext11(LiveAgentContext);
4573
4811
  if (!ctx) {
4574
4812
  throw new Error("useTextMode must be used within a <LiveAgent> provider");
4575
4813
  }
4576
4814
  const { textMode, setTextModeState, sidebarTab, setSidebarTab } = ctx;
4577
- const { localParticipant } = useLocalParticipant9();
4578
- const confirmedTextModeRef = useRef13(false);
4579
- const toggleTextMode = useCallback12(async () => {
4815
+ const { localParticipant } = useLocalParticipant11();
4816
+ const confirmedTextModeRef = useRef16(false);
4817
+ const toggleTextMode = useCallback14(async () => {
4580
4818
  const next = !textMode;
4581
4819
  setTextModeState(next);
4582
4820
  if (next && sidebarTab === "agenda") {
4583
4821
  setSidebarTab("chat");
4584
4822
  }
4585
4823
  try {
4586
- await localParticipant.publishData(textEncoder5.encode(JSON.stringify({ textMode: next })), {
4824
+ await localParticipant.publishData(textEncoder6.encode(JSON.stringify({ textMode: next })), {
4587
4825
  reliable: true,
4588
4826
  topic: TEXT_MODE_TOPIC
4589
4827
  });
@@ -4598,9 +4836,9 @@ function useTextMode() {
4598
4836
  }
4599
4837
 
4600
4838
  // src/components/ChatHeader.tsx
4601
- import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
4839
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
4602
4840
  function ChatHeader() {
4603
- const ctx = useContext10(LiveAgentContext);
4841
+ const ctx = useContext12(LiveAgentContext);
4604
4842
  if (!ctx) {
4605
4843
  throw new Error("ChatHeader must be used within a <LiveAgent> provider");
4606
4844
  }
@@ -4616,37 +4854,37 @@ function ChatHeader() {
4616
4854
  setIsDragging
4617
4855
  } = ctx;
4618
4856
  const elapsed = useElapsedSeconds(isConnected);
4619
- const headerRef = useRef14(null);
4857
+ const headerRef = useRef17(null);
4620
4858
  const followsPanel = variant === "floating" && isPanelOpen;
4621
4859
  const dragFollowers = followsPanel ? [panelRef, controlBarRef] : null;
4622
4860
  const { wasDraggedRef } = useLauncherDrag(headerRef, commitLauncherDrop, dragFollowers, setIsDragging);
4623
- return /* @__PURE__ */ jsxs7("header", {
4861
+ return /* @__PURE__ */ jsxs8("header", {
4624
4862
  ref: headerRef,
4625
4863
  className: cn("skippr:sticky skippr:top-0 skippr:z-10 skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-between skippr:border-b skippr:border-border skippr:bg-primary skippr:px-4 skippr:py-3", followsPanel && "skippr:cursor-grab skippr:touch-none skippr:select-none"),
4626
4864
  children: [
4627
- /* @__PURE__ */ jsxs7("div", {
4865
+ /* @__PURE__ */ jsxs8("div", {
4628
4866
  className: "skippr:flex skippr:items-center skippr:gap-3",
4629
4867
  children: [
4630
- isConnected && /* @__PURE__ */ jsx8(HeaderModeToggle, {}),
4631
- isConnected && /* @__PURE__ */ jsxs7("div", {
4868
+ isConnected && /* @__PURE__ */ jsx11(HeaderModeToggle, {}),
4869
+ isConnected && /* @__PURE__ */ jsxs8("div", {
4632
4870
  className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:rounded-full skippr:bg-primary-foreground/20 skippr:px-2.5 skippr:py-1",
4633
4871
  children: [
4634
- /* @__PURE__ */ jsxs7("span", {
4872
+ /* @__PURE__ */ jsxs8("span", {
4635
4873
  className: "skippr:relative skippr:flex skippr:size-1.5",
4636
4874
  children: [
4637
- /* @__PURE__ */ jsx8("span", {
4875
+ /* @__PURE__ */ jsx11("span", {
4638
4876
  className: "skippr:absolute skippr:inline-flex skippr:h-full skippr:w-full skippr:animate-ping skippr:rounded-full skippr:bg-red-400 skippr:opacity-75"
4639
4877
  }),
4640
- /* @__PURE__ */ jsx8("span", {
4878
+ /* @__PURE__ */ jsx11("span", {
4641
4879
  className: "skippr:relative skippr:inline-flex skippr:size-1.5 skippr:rounded-full skippr:bg-red-400"
4642
4880
  })
4643
4881
  ]
4644
4882
  }),
4645
- /* @__PURE__ */ jsx8("span", {
4883
+ /* @__PURE__ */ jsx11("span", {
4646
4884
  className: "skippr:text-[10px] skippr:font-medium skippr:text-primary-foreground",
4647
4885
  children: "REC"
4648
4886
  }),
4649
- /* @__PURE__ */ jsx8("span", {
4887
+ /* @__PURE__ */ jsx11("span", {
4650
4888
  className: "skippr:text-[10px] skippr:font-mono skippr:text-primary-foreground",
4651
4889
  children: formatTime(elapsed)
4652
4890
  })
@@ -4654,7 +4892,7 @@ function ChatHeader() {
4654
4892
  })
4655
4893
  ]
4656
4894
  }),
4657
- minimizable && /* @__PURE__ */ jsx8("button", {
4895
+ minimizable && /* @__PURE__ */ jsx11("button", {
4658
4896
  type: "button",
4659
4897
  onClick: () => {
4660
4898
  if (!wasDraggedRef.current)
@@ -4663,7 +4901,7 @@ function ChatHeader() {
4663
4901
  "aria-label": "Close",
4664
4902
  title: "Close",
4665
4903
  className: "skippr:flex skippr:h-8 skippr:w-8 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-lg skippr:text-primary-foreground/70 skippr:transition-colors skippr:hover:bg-white/10 skippr:hover:text-primary-foreground skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-brand",
4666
- children: /* @__PURE__ */ jsx8(X, {
4904
+ children: /* @__PURE__ */ jsx11(X, {
4667
4905
  className: "skippr:h-4 skippr:w-4"
4668
4906
  })
4669
4907
  })
@@ -4673,12 +4911,12 @@ function ChatHeader() {
4673
4911
  function HeaderModeToggle() {
4674
4912
  const { textMode, toggleTextMode } = useTextMode();
4675
4913
  const { isHeld } = useSessionHoldContext();
4676
- return /* @__PURE__ */ jsxs7("fieldset", {
4914
+ return /* @__PURE__ */ jsxs8("fieldset", {
4677
4915
  "aria-label": "Response mode",
4678
4916
  disabled: isHeld,
4679
4917
  className: "skippr:flex skippr:items-center skippr:gap-0.5 skippr:rounded-lg skippr:bg-white/15 skippr:p-0.5 skippr:text-xs skippr:font-medium skippr:ring-1 skippr:ring-white/30 skippr:disabled:opacity-50",
4680
4918
  children: [
4681
- /* @__PURE__ */ jsx8("button", {
4919
+ /* @__PURE__ */ jsx11("button", {
4682
4920
  type: "button",
4683
4921
  "aria-pressed": !textMode,
4684
4922
  disabled: isHeld,
@@ -4689,7 +4927,7 @@ function HeaderModeToggle() {
4689
4927
  className: cn("skippr:rounded-md skippr:px-2.5 skippr:py-1 skippr:transition-colors skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-brand skippr:disabled:cursor-not-allowed", isHeld ? "skippr:cursor-not-allowed" : "skippr:cursor-pointer", textMode ? "skippr:font-semibold skippr:text-primary-foreground" : "skippr:bg-white skippr:text-primary skippr:shadow-sm"),
4690
4928
  children: "Voice"
4691
4929
  }),
4692
- /* @__PURE__ */ jsx8("button", {
4930
+ /* @__PURE__ */ jsx11("button", {
4693
4931
  type: "button",
4694
4932
  "aria-pressed": textMode,
4695
4933
  disabled: isHeld,
@@ -4705,26 +4943,26 @@ function HeaderModeToggle() {
4705
4943
  }
4706
4944
 
4707
4945
  // src/components/LoadingDots.tsx
4708
- import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
4946
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
4709
4947
  function LoadingDots({ label }) {
4710
- return /* @__PURE__ */ jsxs8("div", {
4948
+ return /* @__PURE__ */ jsxs9("div", {
4711
4949
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:py-4",
4712
4950
  children: [
4713
- /* @__PURE__ */ jsxs8("div", {
4951
+ /* @__PURE__ */ jsxs9("div", {
4714
4952
  className: "skippr:flex skippr:gap-1",
4715
4953
  children: [
4716
- /* @__PURE__ */ jsx9("span", {
4954
+ /* @__PURE__ */ jsx12("span", {
4717
4955
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:0ms]"
4718
4956
  }),
4719
- /* @__PURE__ */ jsx9("span", {
4957
+ /* @__PURE__ */ jsx12("span", {
4720
4958
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:150ms]"
4721
4959
  }),
4722
- /* @__PURE__ */ jsx9("span", {
4960
+ /* @__PURE__ */ jsx12("span", {
4723
4961
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:300ms]"
4724
4962
  })
4725
4963
  ]
4726
4964
  }),
4727
- /* @__PURE__ */ jsx9("p", {
4965
+ /* @__PURE__ */ jsx12("p", {
4728
4966
  className: "skippr:text-xs skippr:text-muted-foreground",
4729
4967
  children: label
4730
4968
  })
@@ -4733,11 +4971,11 @@ function LoadingDots({ label }) {
4733
4971
  }
4734
4972
 
4735
4973
  // src/components/LoginFlow.tsx
4736
- import { useCallback as useCallback13, useEffect as useEffect23, useRef as useRef15, useState as useState16 } from "react";
4974
+ import { useCallback as useCallback15, useEffect as useEffect24, useRef as useRef18, useState as useState17 } from "react";
4737
4975
 
4738
4976
  // src/components/ui/button.tsx
4739
4977
  import { forwardRef as forwardRef3 } from "react";
4740
- import { jsx as jsx10 } from "react/jsx-runtime";
4978
+ import { jsx as jsx13 } from "react/jsx-runtime";
4741
4979
  var variantClasses = {
4742
4980
  default: "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90",
4743
4981
  destructive: "skippr:bg-destructive skippr:text-white skippr:hover:bg-destructive/90",
@@ -4756,7 +4994,7 @@ var sizeClasses = {
4756
4994
  "icon-lg": "skippr:size-10"
4757
4995
  };
4758
4996
  var Button = forwardRef3(({ className, variant = "default", size = "default", ...props }, ref) => {
4759
- return /* @__PURE__ */ jsx10("button", {
4997
+ return /* @__PURE__ */ jsx13("button", {
4760
4998
  className: cn("skippr:inline-flex skippr:items-center skippr:justify-center skippr:gap-2 skippr:whitespace-nowrap skippr:rounded-md skippr:text-sm skippr:font-medium skippr:ring-offset-background skippr:transition-all skippr:cursor-pointer skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-ring skippr:focus-visible:ring-offset-2 skippr:disabled:pointer-events-none skippr:disabled:opacity-50 skippr:shrink-0 skippr:[&_svg]:pointer-events-none skippr:[&_svg:not([class*='size-'])]:size-4 skippr:[&_svg]:shrink-0", variantClasses[variant], sizeClasses[size], className),
4761
4999
  ref,
4762
5000
  ...props
@@ -4765,28 +5003,28 @@ var Button = forwardRef3(({ className, variant = "default", size = "default", ..
4765
5003
  Button.displayName = "Button";
4766
5004
 
4767
5005
  // src/components/LoginFlow.tsx
4768
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
5006
+ import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
4769
5007
  var OTP_LENGTH = 6;
4770
5008
  var DIGIT_KEYS = ["d0", "d1", "d2", "d3", "d4", "d5"];
4771
5009
  function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
4772
- const [step, setStep] = useState16("email");
4773
- const [email, setEmail] = useState16("");
4774
- const handleRequestOtp = useCallback13(async (emailValue) => {
5010
+ const [step, setStep] = useState17("email");
5011
+ const [email, setEmail] = useState17("");
5012
+ const handleRequestOtp = useCallback15(async (emailValue) => {
4775
5013
  const success = await requestOtp(emailValue);
4776
5014
  if (success)
4777
5015
  setStep("otp");
4778
5016
  }, [requestOtp]);
4779
- const handleVerifyOtp = useCallback13(async (code) => {
5017
+ const handleVerifyOtp = useCallback15(async (code) => {
4780
5018
  await verifyOtp(email, code);
4781
5019
  }, [verifyOtp, email]);
4782
- const handleBack = useCallback13(() => {
5020
+ const handleBack = useCallback15(() => {
4783
5021
  setStep("email");
4784
5022
  }, []);
4785
- const handleResend = useCallback13(async () => {
5023
+ const handleResend = useCallback15(async () => {
4786
5024
  await requestOtp(email);
4787
5025
  }, [requestOtp, email]);
4788
5026
  if (step === "otp") {
4789
- return /* @__PURE__ */ jsx11(OtpStep, {
5027
+ return /* @__PURE__ */ jsx14(OtpStep, {
4790
5028
  email,
4791
5029
  onSubmit: handleVerifyOtp,
4792
5030
  onResend: handleResend,
@@ -4795,7 +5033,7 @@ function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
4795
5033
  isSubmitting
4796
5034
  });
4797
5035
  }
4798
- return /* @__PURE__ */ jsx11(EmailStep, {
5036
+ return /* @__PURE__ */ jsx14(EmailStep, {
4799
5037
  email,
4800
5038
  onEmailChange: setEmail,
4801
5039
  onSubmit: handleRequestOtp,
@@ -4809,30 +5047,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
4809
5047
  if (email.trim())
4810
5048
  onSubmit(email.trim());
4811
5049
  }
4812
- return /* @__PURE__ */ jsxs9("div", {
5050
+ return /* @__PURE__ */ jsxs10("div", {
4813
5051
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
4814
5052
  children: [
4815
- /* @__PURE__ */ jsxs9("div", {
5053
+ /* @__PURE__ */ jsxs10("div", {
4816
5054
  className: "skippr:mb-4 skippr:text-center",
4817
5055
  children: [
4818
- /* @__PURE__ */ jsx11(Mail, {
5056
+ /* @__PURE__ */ jsx14(Mail, {
4819
5057
  className: "skippr:mx-auto skippr:mb-2 skippr:size-6 skippr:text-primary"
4820
5058
  }),
4821
- /* @__PURE__ */ jsx11("p", {
5059
+ /* @__PURE__ */ jsx14("p", {
4822
5060
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
4823
5061
  children: "Sign in to continue"
4824
5062
  }),
4825
- /* @__PURE__ */ jsx11("p", {
5063
+ /* @__PURE__ */ jsx14("p", {
4826
5064
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
4827
5065
  children: "Your email will be used to identify you across sessions"
4828
5066
  })
4829
5067
  ]
4830
5068
  }),
4831
- /* @__PURE__ */ jsxs9("form", {
5069
+ /* @__PURE__ */ jsxs10("form", {
4832
5070
  onSubmit: handleSubmit,
4833
5071
  className: "skippr:flex skippr:flex-col skippr:gap-3",
4834
5072
  children: [
4835
- /* @__PURE__ */ jsx11("input", {
5073
+ /* @__PURE__ */ jsx14("input", {
4836
5074
  type: "email",
4837
5075
  placeholder: "you@example.com",
4838
5076
  value: email,
@@ -4841,15 +5079,15 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
4841
5079
  required: true,
4842
5080
  className: "skippr:w-full skippr:rounded-md skippr:border skippr:border-border skippr:bg-background skippr:px-3 skippr:py-2 skippr:text-sm skippr:text-foreground skippr:placeholder-muted-foreground skippr:outline-none focus:skippr:ring-2 focus:skippr:ring-primary/30 focus:skippr:border-primary disabled:skippr:opacity-50"
4843
5081
  }),
4844
- /* @__PURE__ */ jsx11(Button, {
5082
+ /* @__PURE__ */ jsx14(Button, {
4845
5083
  type: "submit",
4846
5084
  disabled: isSubmitting || !email.trim(),
4847
5085
  className: "skippr:w-full",
4848
- children: isSubmitting ? /* @__PURE__ */ jsx11(LoaderCircle, {
5086
+ children: isSubmitting ? /* @__PURE__ */ jsx14(LoaderCircle, {
4849
5087
  className: "skippr:size-4 skippr:animate-spin"
4850
5088
  }) : "Continue"
4851
5089
  }),
4852
- error && /* @__PURE__ */ jsx11("p", {
5090
+ error && /* @__PURE__ */ jsx14("p", {
4853
5091
  className: "skippr:text-xs skippr:text-center skippr:text-destructive",
4854
5092
  children: error
4855
5093
  })
@@ -4859,30 +5097,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
4859
5097
  });
4860
5098
  }
4861
5099
  function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
4862
- const [digits, setDigits] = useState16(Array(OTP_LENGTH).fill(""));
4863
- const [resendCooldown, setResendCooldown] = useState16(0);
4864
- const inputRefs = useRef15([]);
4865
- const submittedRef = useRef15(false);
4866
- useEffect23(() => {
5100
+ const [digits, setDigits] = useState17(Array(OTP_LENGTH).fill(""));
5101
+ const [resendCooldown, setResendCooldown] = useState17(0);
5102
+ const inputRefs = useRef18([]);
5103
+ const submittedRef = useRef18(false);
5104
+ useEffect24(() => {
4867
5105
  inputRefs.current[0]?.focus();
4868
5106
  }, []);
4869
- useEffect23(() => {
5107
+ useEffect24(() => {
4870
5108
  if (error)
4871
5109
  submittedRef.current = false;
4872
5110
  }, [error]);
4873
- useEffect23(() => {
5111
+ useEffect24(() => {
4874
5112
  if (resendCooldown <= 0)
4875
5113
  return;
4876
5114
  const timer = setTimeout(() => setResendCooldown((c) => c - 1), 1000);
4877
5115
  return () => clearTimeout(timer);
4878
5116
  }, [resendCooldown]);
4879
- const submitCode = useCallback13((code) => {
5117
+ const submitCode = useCallback15((code) => {
4880
5118
  if (submittedRef.current || isSubmitting)
4881
5119
  return;
4882
5120
  submittedRef.current = true;
4883
5121
  onSubmit(code);
4884
5122
  }, [onSubmit, isSubmitting]);
4885
- const handleDigitChange = useCallback13((index2, value) => {
5123
+ const handleDigitChange = useCallback15((index2, value) => {
4886
5124
  const digit = value.replace(/\D/g, "").slice(-1);
4887
5125
  const newDigits = [...digits];
4888
5126
  newDigits[index2] = digit;
@@ -4896,12 +5134,12 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
4896
5134
  submitCode(code);
4897
5135
  }
4898
5136
  }, [digits, submitCode]);
4899
- const handleKeyDown = useCallback13((index2, e) => {
5137
+ const handleKeyDown = useCallback15((index2, e) => {
4900
5138
  if (e.key === "Backspace" && !digits[index2] && index2 > 0) {
4901
5139
  inputRefs.current[index2 - 1]?.focus();
4902
5140
  }
4903
5141
  }, [digits]);
4904
- const handlePaste = useCallback13((e) => {
5142
+ const handlePaste = useCallback15((e) => {
4905
5143
  e.preventDefault();
4906
5144
  const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, OTP_LENGTH);
4907
5145
  if (pasted.length > 0) {
@@ -4929,22 +5167,22 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
4929
5167
  submittedRef.current = false;
4930
5168
  inputRefs.current[0]?.focus();
4931
5169
  }
4932
- return /* @__PURE__ */ jsxs9("div", {
5170
+ return /* @__PURE__ */ jsxs10("div", {
4933
5171
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
4934
5172
  children: [
4935
- /* @__PURE__ */ jsxs9("div", {
5173
+ /* @__PURE__ */ jsxs10("div", {
4936
5174
  className: "skippr:mb-4 skippr:text-center",
4937
5175
  children: [
4938
- /* @__PURE__ */ jsx11("p", {
5176
+ /* @__PURE__ */ jsx14("p", {
4939
5177
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
4940
5178
  children: "Enter verification code"
4941
5179
  }),
4942
- /* @__PURE__ */ jsxs9("p", {
5180
+ /* @__PURE__ */ jsxs10("p", {
4943
5181
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
4944
5182
  children: [
4945
5183
  "We sent a 6-digit code to",
4946
5184
  " ",
4947
- /* @__PURE__ */ jsx11("span", {
5185
+ /* @__PURE__ */ jsx14("span", {
4948
5186
  className: "skippr:font-medium skippr:text-foreground",
4949
5187
  children: email
4950
5188
  })
@@ -4952,13 +5190,13 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
4952
5190
  })
4953
5191
  ]
4954
5192
  }),
4955
- /* @__PURE__ */ jsxs9("form", {
5193
+ /* @__PURE__ */ jsxs10("form", {
4956
5194
  onSubmit: handleSubmit,
4957
5195
  className: "skippr:flex skippr:flex-col skippr:gap-3",
4958
5196
  children: [
4959
- /* @__PURE__ */ jsx11("div", {
5197
+ /* @__PURE__ */ jsx14("div", {
4960
5198
  className: "skippr:flex skippr:justify-center skippr:gap-1.5",
4961
- children: digits.map((digit, index2) => /* @__PURE__ */ jsx11("input", {
5199
+ children: digits.map((digit, index2) => /* @__PURE__ */ jsx14("input", {
4962
5200
  ref: (el) => {
4963
5201
  inputRefs.current[index2] = el;
4964
5202
  },
@@ -4973,29 +5211,29 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
4973
5211
  className: "skippr:h-10 skippr:w-10 skippr:rounded-md skippr:border skippr:border-border skippr:bg-background skippr:text-center skippr:text-sm skippr:font-semibold skippr:text-foreground skippr:outline-none focus:skippr:ring-2 focus:skippr:ring-primary/30 focus:skippr:border-primary disabled:skippr:opacity-50"
4974
5212
  }, DIGIT_KEYS[index2]))
4975
5213
  }),
4976
- error && /* @__PURE__ */ jsx11("p", {
5214
+ error && /* @__PURE__ */ jsx14("p", {
4977
5215
  className: "skippr:text-xs skippr:text-center skippr:text-destructive",
4978
5216
  children: error
4979
5217
  }),
4980
- /* @__PURE__ */ jsx11(Button, {
5218
+ /* @__PURE__ */ jsx14(Button, {
4981
5219
  type: "submit",
4982
5220
  disabled: isSubmitting || digits.join("").length !== OTP_LENGTH,
4983
5221
  className: "skippr:w-full",
4984
- children: isSubmitting ? /* @__PURE__ */ jsx11(LoaderCircle, {
5222
+ children: isSubmitting ? /* @__PURE__ */ jsx14(LoaderCircle, {
4985
5223
  className: "skippr:size-4 skippr:animate-spin"
4986
5224
  }) : "Verify"
4987
5225
  }),
4988
- /* @__PURE__ */ jsxs9("div", {
5226
+ /* @__PURE__ */ jsxs10("div", {
4989
5227
  className: "skippr:flex skippr:items-center skippr:justify-between skippr:text-xs",
4990
5228
  children: [
4991
- /* @__PURE__ */ jsx11("button", {
5229
+ /* @__PURE__ */ jsx14("button", {
4992
5230
  type: "button",
4993
5231
  onClick: onBack,
4994
5232
  disabled: isSubmitting,
4995
5233
  className: "skippr:text-muted-foreground hover:skippr:text-foreground skippr:transition-colors disabled:skippr:opacity-50",
4996
5234
  children: "Change email"
4997
5235
  }),
4998
- /* @__PURE__ */ jsx11("button", {
5236
+ /* @__PURE__ */ jsx14("button", {
4999
5237
  type: "button",
5000
5238
  onClick: handleResend,
5001
5239
  disabled: isSubmitting || resendCooldown > 0,
@@ -5011,17 +5249,17 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
5011
5249
  }
5012
5250
 
5013
5251
  // src/components/MessageList.tsx
5014
- import { useCallback as useCallback14, useLayoutEffect as useLayoutEffect3, useRef as useRef17, useState as useState18 } from "react";
5252
+ import { useCallback as useCallback16, useLayoutEffect as useLayoutEffect3, useRef as useRef20, useState as useState19 } from "react";
5015
5253
 
5016
5254
  // src/components/ChatInput.tsx
5017
- import { useEffect as useEffect24, useRef as useRef16, useState as useState17 } from "react";
5018
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
5255
+ import { useEffect as useEffect25, useRef as useRef19, useState as useState18 } from "react";
5256
+ import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
5019
5257
  var MAX_INPUT_HEIGHT = 60;
5020
5258
  function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5021
- const [inputText, setInputText] = useState17("");
5022
- const textareaRef = useRef16(null);
5259
+ const [inputText, setInputText] = useState18("");
5260
+ const textareaRef = useRef19(null);
5023
5261
  const canSend = inputText.trim().length > 0 && !isSendingChat;
5024
- useEffect24(() => {
5262
+ useEffect25(() => {
5025
5263
  if (autoFocus)
5026
5264
  textareaRef.current?.focus();
5027
5265
  }, [autoFocus]);
@@ -5052,13 +5290,13 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5052
5290
  handleSubmit(e);
5053
5291
  }
5054
5292
  }
5055
- return /* @__PURE__ */ jsx12("form", {
5293
+ return /* @__PURE__ */ jsx15("form", {
5056
5294
  onSubmit: handleSubmit,
5057
5295
  className: "skippr:border-t skippr:border-border skippr:p-3",
5058
- children: /* @__PURE__ */ jsxs10("div", {
5296
+ children: /* @__PURE__ */ jsxs11("div", {
5059
5297
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:rounded-xl skippr:bg-background skippr:ring-1 skippr:ring-foreground/10 skippr:px-3 skippr:py-2",
5060
5298
  children: [
5061
- /* @__PURE__ */ jsx12("textarea", {
5299
+ /* @__PURE__ */ jsx15("textarea", {
5062
5300
  ref: textareaRef,
5063
5301
  rows: 1,
5064
5302
  value: inputText,
@@ -5068,12 +5306,12 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5068
5306
  className: "skippr:flex-1 skippr:resize-none skippr:overflow-y-auto skippr:bg-transparent skippr:text-sm skippr:leading-5 skippr:text-foreground skippr:placeholder:text-muted-foreground skippr:outline-none",
5069
5307
  style: { maxHeight: `${MAX_INPUT_HEIGHT}px` }
5070
5308
  }),
5071
- /* @__PURE__ */ jsx12("button", {
5309
+ /* @__PURE__ */ jsx15("button", {
5072
5310
  type: "submit",
5073
5311
  disabled: !canSend,
5074
5312
  "aria-label": "Send message",
5075
5313
  className: cn("skippr:flex skippr:size-8 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-lg skippr:transition-colors", canSend ? "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90" : "skippr:bg-muted-foreground/20 skippr:text-muted-foreground/60"),
5076
- children: /* @__PURE__ */ jsx12(Send, {
5314
+ children: /* @__PURE__ */ jsx15(Send, {
5077
5315
  className: "skippr:size-3.5"
5078
5316
  })
5079
5317
  })
@@ -5083,7 +5321,7 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5083
5321
  }
5084
5322
 
5085
5323
  // src/components/ChatMessage.tsx
5086
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
5324
+ import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
5087
5325
  function formatTimestamp(ts) {
5088
5326
  return new Date(ts).toLocaleTimeString("en-US", {
5089
5327
  hour: "numeric",
@@ -5093,16 +5331,16 @@ function formatTimestamp(ts) {
5093
5331
  }
5094
5332
  function ChatMessage({ message }) {
5095
5333
  const isAgent = message.role === "assistant";
5096
- return /* @__PURE__ */ jsx13("div", {
5334
+ return /* @__PURE__ */ jsx16("div", {
5097
5335
  className: cn("skippr:flex skippr:gap-2", isAgent ? "skippr:items-start" : "skippr:justify-end"),
5098
- children: /* @__PURE__ */ jsxs11("div", {
5336
+ children: /* @__PURE__ */ jsxs12("div", {
5099
5337
  className: cn("skippr:flex skippr:max-w-[80%] skippr:flex-col", isAgent ? "skippr:items-start" : "skippr:items-end"),
5100
5338
  children: [
5101
- /* @__PURE__ */ jsx13("div", {
5339
+ /* @__PURE__ */ jsx16("div", {
5102
5340
  className: cn("skippr:rounded-2xl skippr:px-4 skippr:py-2.5 skippr:text-sm skippr:leading-relaxed", isAgent ? "skippr:border skippr:border-border skippr:bg-card skippr:text-foreground" : "skippr:bg-primary skippr:text-primary-foreground"),
5103
5341
  children: message.content
5104
5342
  }),
5105
- message.timestamp && /* @__PURE__ */ jsx13("span", {
5343
+ message.timestamp && /* @__PURE__ */ jsx16("span", {
5106
5344
  className: "skippr:mt-1 skippr:px-1 skippr:text-[10px] skippr:text-muted-foreground/60",
5107
5345
  children: formatTimestamp(message.timestamp)
5108
5346
  })
@@ -5112,70 +5350,70 @@ function ChatMessage({ message }) {
5112
5350
  }
5113
5351
 
5114
5352
  // src/components/PlanCard.tsx
5115
- import { useEffect as useEffect25 } from "react";
5116
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
5353
+ import { useEffect as useEffect26 } from "react";
5354
+ import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
5117
5355
  var APPROVE_MESSAGE = "Yes, go ahead.";
5118
5356
  var CANCEL_MESSAGE = "No, cancel that.";
5119
5357
  var COMPLETED_CARD_VISIBLE_MS = 2500;
5120
5358
  function StepIcon({ status }) {
5121
5359
  if (status === "done") {
5122
- return /* @__PURE__ */ jsx14(CircleCheck, {
5360
+ return /* @__PURE__ */ jsx17(CircleCheck, {
5123
5361
  className: "skippr:size-4 skippr:text-chart-3"
5124
5362
  });
5125
5363
  }
5126
5364
  if (status === "failed") {
5127
- return /* @__PURE__ */ jsx14(CircleX, {
5365
+ return /* @__PURE__ */ jsx17(CircleX, {
5128
5366
  className: "skippr:size-4 skippr:text-destructive"
5129
5367
  });
5130
5368
  }
5131
5369
  if (status === "active") {
5132
- return /* @__PURE__ */ jsx14(Circle, {
5370
+ return /* @__PURE__ */ jsx17(Circle, {
5133
5371
  className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
5134
5372
  });
5135
5373
  }
5136
- return /* @__PURE__ */ jsx14(Circle, {
5374
+ return /* @__PURE__ */ jsx17(Circle, {
5137
5375
  className: "skippr:size-4 skippr:text-muted-foreground/30"
5138
5376
  });
5139
5377
  }
5140
5378
  function PlanCard({ plan, sendChatMessage, onDismiss }) {
5141
5379
  const awaitingApproval = plan.state === "proposed";
5142
- useEffect25(() => {
5380
+ useEffect26(() => {
5143
5381
  if (plan.state !== "completed")
5144
5382
  return;
5145
5383
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
5146
5384
  return () => clearTimeout(timer);
5147
5385
  }, [plan.state, onDismiss]);
5148
- return /* @__PURE__ */ jsxs12("div", {
5386
+ return /* @__PURE__ */ jsxs13("div", {
5149
5387
  className: "skippr:rounded-2xl skippr:rounded-tl-md skippr:bg-card skippr:p-3.5 skippr:ring-2 skippr:ring-brand",
5150
5388
  children: [
5151
- /* @__PURE__ */ jsx14("p", {
5389
+ /* @__PURE__ */ jsx17("p", {
5152
5390
  className: "skippr:mb-3 skippr:text-sm skippr:font-semibold skippr:leading-snug skippr:text-foreground",
5153
5391
  children: "Plan"
5154
5392
  }),
5155
- /* @__PURE__ */ jsx14("div", {
5393
+ /* @__PURE__ */ jsx17("div", {
5156
5394
  className: "skippr:space-y-2",
5157
- children: plan.steps.map((step) => /* @__PURE__ */ jsxs12("div", {
5395
+ children: plan.steps.map((step) => /* @__PURE__ */ jsxs13("div", {
5158
5396
  className: "skippr:flex skippr:items-center skippr:gap-2",
5159
5397
  children: [
5160
- /* @__PURE__ */ jsx14(StepIcon, {
5398
+ /* @__PURE__ */ jsx17(StepIcon, {
5161
5399
  status: step.status
5162
5400
  }),
5163
- /* @__PURE__ */ jsx14("p", {
5401
+ /* @__PURE__ */ jsx17("p", {
5164
5402
  className: cn("skippr:text-sm skippr:leading-snug", step.status === "done" && "skippr:text-muted-foreground skippr:line-through", step.status === "active" && "skippr:font-medium skippr:text-foreground", step.status === "pending" && "skippr:text-muted-foreground", step.status === "failed" && "skippr:text-destructive"),
5165
5403
  children: step.label
5166
5404
  })
5167
5405
  ]
5168
5406
  }, step.index))
5169
5407
  }),
5170
- awaitingApproval && /* @__PURE__ */ jsxs12("div", {
5408
+ awaitingApproval && /* @__PURE__ */ jsxs13("div", {
5171
5409
  className: "skippr:mt-3.5 skippr:flex skippr:gap-2",
5172
5410
  children: [
5173
- /* @__PURE__ */ jsx14(Button, {
5411
+ /* @__PURE__ */ jsx17(Button, {
5174
5412
  className: "skippr:flex-1 skippr:py-2",
5175
5413
  onClick: () => sendChatMessage(APPROVE_MESSAGE),
5176
5414
  children: "Approve"
5177
5415
  }),
5178
- /* @__PURE__ */ jsx14(Button, {
5416
+ /* @__PURE__ */ jsx17(Button, {
5179
5417
  variant: "outline",
5180
5418
  className: "skippr:flex-1 skippr:py-2",
5181
5419
  onClick: () => sendChatMessage(CANCEL_MESSAGE),
@@ -5188,26 +5426,26 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
5188
5426
  }
5189
5427
 
5190
5428
  // src/components/TypingIndicator.tsx
5191
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
5429
+ import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
5192
5430
  function TypingIndicator() {
5193
- return /* @__PURE__ */ jsx15("div", {
5431
+ return /* @__PURE__ */ jsx18("div", {
5194
5432
  className: "skippr:flex skippr:items-start skippr:gap-2 skippr:animate-skippr-tab-fade",
5195
- children: /* @__PURE__ */ jsxs13("div", {
5433
+ children: /* @__PURE__ */ jsxs14("div", {
5196
5434
  className: "skippr:inline-flex skippr:items-center skippr:gap-1 skippr:rounded-2xl skippr:border skippr:border-primary/20 skippr:bg-primary/10 skippr:px-4 skippr:py-2 skippr:text-xs skippr:text-primary",
5197
5435
  children: [
5198
- /* @__PURE__ */ jsx15("span", {
5436
+ /* @__PURE__ */ jsx18("span", {
5199
5437
  children: "Agent is analyzing your screen"
5200
5438
  }),
5201
- /* @__PURE__ */ jsxs13("span", {
5439
+ /* @__PURE__ */ jsxs14("span", {
5202
5440
  className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
5203
5441
  children: [
5204
- /* @__PURE__ */ jsx15("span", {
5442
+ /* @__PURE__ */ jsx18("span", {
5205
5443
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:0ms]"
5206
5444
  }),
5207
- /* @__PURE__ */ jsx15("span", {
5445
+ /* @__PURE__ */ jsx18("span", {
5208
5446
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:200ms]"
5209
5447
  }),
5210
- /* @__PURE__ */ jsx15("span", {
5448
+ /* @__PURE__ */ jsx18("span", {
5211
5449
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:400ms]"
5212
5450
  })
5213
5451
  ]
@@ -5218,7 +5456,7 @@ function TypingIndicator() {
5218
5456
  }
5219
5457
 
5220
5458
  // src/components/MessageList.tsx
5221
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
5459
+ import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
5222
5460
  var BOTTOM_THRESHOLD_PX = 32;
5223
5461
  function isPlanVisible(plan) {
5224
5462
  return !!plan && plan.steps.length > 0 && plan.state !== "abandoned";
@@ -5232,17 +5470,17 @@ function MessageList({
5232
5470
  autoFocus = false,
5233
5471
  readOnly = false
5234
5472
  }) {
5235
- const containerRef = useRef17(null);
5236
- const isPinnedToBottom = useRef17(true);
5237
- const lastSeenMessageId = useRef17(undefined);
5238
- const [showJumpToLatest, setShowJumpToLatest] = useState18(false);
5473
+ const containerRef = useRef20(null);
5474
+ const isPinnedToBottom = useRef20(true);
5475
+ const lastSeenMessageId = useRef20(undefined);
5476
+ const [showJumpToLatest, setShowJumpToLatest] = useState19(false);
5239
5477
  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
5240
- const [dismissedPlanId, setDismissedPlanId] = useState18(null);
5241
- const dismissPlan = useCallback14(() => {
5478
+ const [dismissedPlanId, setDismissedPlanId] = useState19(null);
5479
+ const dismissPlan = useCallback16(() => {
5242
5480
  if (plan)
5243
5481
  setDismissedPlanId(plan.planId);
5244
5482
  }, [plan]);
5245
- const handleScroll = useCallback14(() => {
5483
+ const handleScroll = useCallback16(() => {
5246
5484
  const container = containerRef.current;
5247
5485
  if (!container)
5248
5486
  return;
@@ -5251,7 +5489,7 @@ function MessageList({
5251
5489
  isPinnedToBottom.current = pinned;
5252
5490
  setShowJumpToLatest(!pinned);
5253
5491
  }, []);
5254
- const jumpToLatest = useCallback14(() => {
5492
+ const jumpToLatest = useCallback16(() => {
5255
5493
  const container = containerRef.current;
5256
5494
  if (!container)
5257
5495
  return;
@@ -5274,49 +5512,49 @@ function MessageList({
5274
5512
  container.scrollTop = container.scrollHeight;
5275
5513
  }, [messages.length, lastMessage?.content]);
5276
5514
  const showTyping = isStreaming && lastMessage?.role === "assistant" && lastMessage.content === "";
5277
- return /* @__PURE__ */ jsxs14("div", {
5515
+ return /* @__PURE__ */ jsxs15("div", {
5278
5516
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
5279
5517
  children: [
5280
- /* @__PURE__ */ jsxs14("div", {
5518
+ /* @__PURE__ */ jsxs15("div", {
5281
5519
  className: "skippr:relative skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
5282
5520
  children: [
5283
- /* @__PURE__ */ jsxs14("div", {
5521
+ /* @__PURE__ */ jsxs15("div", {
5284
5522
  ref: containerRef,
5285
5523
  onScroll: handleScroll,
5286
5524
  className: "skippr:min-h-0 skippr:flex-1 skippr:space-y-4 skippr:overflow-y-auto skippr:p-4 skippr:[overflow-anchor:none]",
5287
5525
  children: [
5288
- messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */ jsx16("p", {
5526
+ messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */ jsx19("p", {
5289
5527
  className: "skippr:px-2 skippr:py-6 skippr:text-center skippr:text-sm skippr:text-muted-foreground",
5290
5528
  children: "No messages in this conversation yet."
5291
- }) : /* @__PURE__ */ jsx16(LoadingDots, {
5529
+ }) : /* @__PURE__ */ jsx19(LoadingDots, {
5292
5530
  label: "Waiting for conversation to begin..."
5293
5531
  })),
5294
- messages.map((message) => /* @__PURE__ */ jsx16(ChatMessage, {
5532
+ messages.map((message) => /* @__PURE__ */ jsx19(ChatMessage, {
5295
5533
  message
5296
5534
  }, message.id)),
5297
- showTyping && /* @__PURE__ */ jsx16(TypingIndicator, {})
5535
+ showTyping && /* @__PURE__ */ jsx19(TypingIndicator, {})
5298
5536
  ]
5299
5537
  }),
5300
- showJumpToLatest && /* @__PURE__ */ jsx16("button", {
5538
+ showJumpToLatest && /* @__PURE__ */ jsx19("button", {
5301
5539
  type: "button",
5302
5540
  onClick: jumpToLatest,
5303
5541
  "aria-label": "Jump to latest message",
5304
5542
  className: "skippr:-translate-x-1/2 skippr:absolute skippr:bottom-3 skippr:left-1/2 skippr:flex skippr:min-h-11 skippr:min-w-11 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:border skippr:border-border skippr:bg-background skippr:p-1.5 skippr:text-foreground skippr:shadow-md skippr:transition-colors skippr:hover:bg-muted",
5305
- children: /* @__PURE__ */ jsx16(ChevronDown, {
5543
+ children: /* @__PURE__ */ jsx19(ChevronDown, {
5306
5544
  className: "skippr:size-4"
5307
5545
  })
5308
5546
  })
5309
5547
  ]
5310
5548
  }),
5311
- sendChatMessage && isPlanVisible(plan) && plan.planId !== dismissedPlanId && /* @__PURE__ */ jsx16("div", {
5549
+ sendChatMessage && isPlanVisible(plan) && plan.planId !== dismissedPlanId && /* @__PURE__ */ jsx19("div", {
5312
5550
  className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:p-3",
5313
- children: /* @__PURE__ */ jsx16(PlanCard, {
5551
+ children: /* @__PURE__ */ jsx19(PlanCard, {
5314
5552
  plan,
5315
5553
  sendChatMessage,
5316
5554
  onDismiss: dismissPlan
5317
5555
  }, plan.planId)
5318
5556
  }),
5319
- !readOnly && sendChatMessage && /* @__PURE__ */ jsx16(ChatInput, {
5557
+ !readOnly && sendChatMessage && /* @__PURE__ */ jsx19(ChatInput, {
5320
5558
  sendChatMessage,
5321
5559
  isSendingChat,
5322
5560
  autoFocus
@@ -5326,49 +5564,49 @@ function MessageList({
5326
5564
  }
5327
5565
 
5328
5566
  // src/components/SessionAgenda.tsx
5329
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
5567
+ import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
5330
5568
  function SessionAgenda({ phases, hasStarted }) {
5331
5569
  if (phases.length === 0 || !hasStarted) {
5332
- return /* @__PURE__ */ jsx17("div", {
5570
+ return /* @__PURE__ */ jsx20("div", {
5333
5571
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5334
- children: /* @__PURE__ */ jsx17(LoadingDots, {
5572
+ children: /* @__PURE__ */ jsx20(LoadingDots, {
5335
5573
  label: "Waiting for agenda to load..."
5336
5574
  })
5337
5575
  });
5338
5576
  }
5339
- return /* @__PURE__ */ jsx17("div", {
5577
+ return /* @__PURE__ */ jsx20("div", {
5340
5578
  className: "skippr:flex-1 skippr:overflow-y-auto skippr:px-4 skippr:py-4",
5341
- children: /* @__PURE__ */ jsx17("div", {
5579
+ children: /* @__PURE__ */ jsx20("div", {
5342
5580
  className: "skippr:space-y-1",
5343
5581
  children: phases.map((phase) => {
5344
5582
  const isActive = phase.status === "active";
5345
5583
  const isCompleted = phase.status === "completed";
5346
- return /* @__PURE__ */ jsxs15("div", {
5584
+ return /* @__PURE__ */ jsxs16("div", {
5347
5585
  className: cn("skippr:flex skippr:items-start skippr:gap-2.5 skippr:rounded-lg skippr:p-2 skippr:transition-colors", isActive && "skippr:bg-primary/10"),
5348
5586
  children: [
5349
- /* @__PURE__ */ jsx17("div", {
5587
+ /* @__PURE__ */ jsx20("div", {
5350
5588
  className: "skippr:mt-0.5",
5351
- children: isCompleted ? /* @__PURE__ */ jsx17(CircleCheck, {
5589
+ children: isCompleted ? /* @__PURE__ */ jsx20(CircleCheck, {
5352
5590
  className: "skippr:size-4 skippr:text-chart-3"
5353
- }) : isActive ? /* @__PURE__ */ jsx17(Circle, {
5591
+ }) : isActive ? /* @__PURE__ */ jsx20(Circle, {
5354
5592
  className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
5355
- }) : /* @__PURE__ */ jsx17(Circle, {
5593
+ }) : /* @__PURE__ */ jsx20(Circle, {
5356
5594
  className: "skippr:size-4 skippr:text-muted-foreground/30"
5357
5595
  })
5358
5596
  }),
5359
- /* @__PURE__ */ jsxs15("div", {
5597
+ /* @__PURE__ */ jsxs16("div", {
5360
5598
  className: "skippr:min-w-0 skippr:flex-1",
5361
5599
  children: [
5362
- /* @__PURE__ */ jsx17("p", {
5600
+ /* @__PURE__ */ jsx20("p", {
5363
5601
  className: cn("skippr:text-sm", isCompleted && "skippr:text-muted-foreground skippr:line-through", isActive && "skippr:font-medium skippr:text-foreground", phase.status === "pending" && "skippr:text-muted-foreground"),
5364
5602
  children: phase.name
5365
5603
  }),
5366
- phase.highlights.length > 0 && /* @__PURE__ */ jsx17("ul", {
5604
+ phase.highlights.length > 0 && /* @__PURE__ */ jsx20("ul", {
5367
5605
  className: "skippr:mt-1 skippr:space-y-0.5",
5368
- children: phase.highlights.map((text) => /* @__PURE__ */ jsxs15("li", {
5606
+ children: phase.highlights.map((text) => /* @__PURE__ */ jsxs16("li", {
5369
5607
  className: cn("skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-[11px] skippr:leading-tight", isCompleted ? "skippr:text-muted-foreground/40 skippr:line-through" : "skippr:text-muted-foreground/70"),
5370
5608
  children: [
5371
- /* @__PURE__ */ jsx17("span", {
5609
+ /* @__PURE__ */ jsx20("span", {
5372
5610
  className: "skippr:size-1 skippr:shrink-0 skippr:rounded-full skippr:bg-current"
5373
5611
  }),
5374
5612
  text
@@ -5385,12 +5623,12 @@ function SessionAgenda({ phases, hasStarted }) {
5385
5623
  }
5386
5624
 
5387
5625
  // src/components/SessionWarningBanner.tsx
5388
- import { jsx as jsx18 } from "react/jsx-runtime";
5626
+ import { jsx as jsx21 } from "react/jsx-runtime";
5389
5627
  var SESSION_WARNING_THRESHOLD_SECS = 60;
5390
5628
  function SessionWarningBanner({ remaining }) {
5391
5629
  if (remaining === null || remaining <= 0 || remaining > SESSION_WARNING_THRESHOLD_SECS)
5392
5630
  return null;
5393
- return /* @__PURE__ */ jsx18("div", {
5631
+ return /* @__PURE__ */ jsx21("div", {
5394
5632
  "data-testid": "session-warning-banner",
5395
5633
  className: "skippr:bg-red-50 skippr:px-4 skippr:py-1.5 skippr:text-center skippr:text-xs skippr:font-medium skippr:text-red-700",
5396
5634
  children: "Session ending soon"
@@ -5398,7 +5636,7 @@ function SessionWarningBanner({ remaining }) {
5398
5636
  }
5399
5637
 
5400
5638
  // src/components/Sidebar.tsx
5401
- import { jsx as jsx19, jsxs as jsxs16, Fragment as Fragment3 } from "react/jsx-runtime";
5639
+ import { jsx as jsx22, jsxs as jsxs17, Fragment as Fragment3 } from "react/jsx-runtime";
5402
5640
  var PANEL_GAP_PX = 12;
5403
5641
  var PANEL_VIEWPORT_MARGIN_PX = 24;
5404
5642
  var PANEL_MAX_HEIGHT_PX = 460;
@@ -5429,7 +5667,7 @@ function Sidebar({
5429
5667
  agentMode,
5430
5668
  displayModules
5431
5669
  } = useLiveAgent();
5432
- const internalCtx = useContext11(LiveAgentContext);
5670
+ const internalCtx = useContext13(LiveAgentContext);
5433
5671
  const defaultAgentId = internalCtx?.defaultAgentId ?? null;
5434
5672
  const startDefaultSession = internalCtx?.startDefaultSession ?? (() => {});
5435
5673
  const talkDisabled = !(internalCtx?.hasResolvedModules ?? false);
@@ -5458,7 +5696,7 @@ function Sidebar({
5458
5696
  height: panelExpanded ? availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${availableHeight})`
5459
5697
  };
5460
5698
  }
5461
- useEffect26(() => {
5699
+ useEffect27(() => {
5462
5700
  if (!isSidebar)
5463
5701
  return;
5464
5702
  const prop = position === "right" ? "marginRight" : "marginLeft";
@@ -5472,13 +5710,13 @@ function Sidebar({
5472
5710
  document.body.style.transition = "";
5473
5711
  };
5474
5712
  }, [isSidebar, isPanelOpen, position]);
5475
- return /* @__PURE__ */ jsxs16("div", {
5713
+ return /* @__PURE__ */ jsxs17("div", {
5476
5714
  ref: internalCtx?.panelRef,
5477
5715
  className: cn("skippr:fixed skippr:z-[9999]", "skippr:bg-card", "skippr:flex skippr:flex-col", "skippr:overflow-hidden", isFloating && "skippr:border skippr:border-border skippr:rounded-2xl skippr:shadow-[0_8px_30px_rgba(0,0,0,0.16),0_4px_12px_rgba(0,0,0,0.08)]", isFloating && (position === "right" ? "skippr:right-6" : "skippr:left-6"), isFloating && "skippr:transition-[opacity,transform,height] skippr:duration-300 skippr:ease-in-out", isFloating && (popsDown ? position === "right" ? "skippr:origin-top-right" : "skippr:origin-top-left" : position === "right" ? "skippr:origin-bottom-right" : "skippr:origin-bottom-left"), isFloating && !isPanelOpen && "skippr:scale-0 skippr:opacity-0 skippr:pointer-events-none", isFloating && isPanelOpen && "skippr:scale-100 skippr:opacity-100", isSidebar && "skippr:top-0 skippr:h-full", isSidebar && "skippr:transition-[width] skippr:duration-300 skippr:ease-in-out", isSidebar && position === "right" && "skippr:right-0 skippr:border-l skippr:border-l-border", isSidebar && position === "left" && "skippr:left-0 skippr:border-r skippr:border-r-border", isSidebar && !isPanelOpen && "skippr:w-0 skippr:border-0"),
5478
5716
  style: { width: isPanelOpen ? SIDEBAR_WIDTH : undefined, ...floatingStyle },
5479
5717
  children: [
5480
- !hideHeader && /* @__PURE__ */ jsx19(ChatHeader, {}),
5481
- authFailed ? /* @__PURE__ */ jsx19(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx19(AuthenticatedContent, {
5718
+ !hideHeader && /* @__PURE__ */ jsx22(ChatHeader, {}),
5719
+ authFailed ? /* @__PURE__ */ jsx22(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx22(AuthenticatedContent, {
5482
5720
  isConnected,
5483
5721
  isPaused,
5484
5722
  isPausing,
@@ -5494,12 +5732,12 @@ function Sidebar({
5494
5732
  onTalk: startDefaultSession,
5495
5733
  talkLabel: startSessionLabel,
5496
5734
  talkDisabled
5497
- }) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx19("div", {
5735
+ }) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx22("div", {
5498
5736
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5499
- children: /* @__PURE__ */ jsx19(LoadingDots, {
5737
+ children: /* @__PURE__ */ jsx22(LoadingDots, {
5500
5738
  label: "Loading..."
5501
5739
  })
5502
- }) : /* @__PURE__ */ jsx19(LoginFlow, {
5740
+ }) : /* @__PURE__ */ jsx22(LoginFlow, {
5503
5741
  requestOtp,
5504
5742
  verifyOtp,
5505
5743
  error: authError,
@@ -5531,61 +5769,61 @@ function AuthenticatedContent({
5531
5769
  if (isStarting && !isConnected) {
5532
5770
  transitionLabel = "Reconnecting...";
5533
5771
  }
5534
- return /* @__PURE__ */ jsxs16(Fragment3, {
5772
+ return /* @__PURE__ */ jsxs17(Fragment3, {
5535
5773
  children: [
5536
- isConnected && /* @__PURE__ */ jsx19(ConnectedBanner, {}),
5537
- showAgenda && /* @__PURE__ */ jsxs16("div", {
5774
+ isConnected && /* @__PURE__ */ jsx22(ConnectedBanner, {}),
5775
+ showAgenda && /* @__PURE__ */ jsxs17("div", {
5538
5776
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:border-b skippr:border-border skippr:px-3 skippr:py-1",
5539
5777
  children: [
5540
- /* @__PURE__ */ jsxs16("button", {
5778
+ /* @__PURE__ */ jsxs17("button", {
5541
5779
  type: "button",
5542
5780
  className: cn("skippr:relative skippr:inline-flex skippr:cursor-pointer skippr:items-center skippr:gap-1.5 skippr:rounded-lg skippr:px-3 skippr:py-1.5 skippr:text-sm skippr:font-medium skippr:transition-all", activeTab === "chat" ? "skippr:text-foreground" : "skippr:text-muted-foreground skippr:hover:text-foreground"),
5543
5781
  onClick: () => onTabChange("chat"),
5544
5782
  children: [
5545
- /* @__PURE__ */ jsx19(MessageCircle, {
5783
+ /* @__PURE__ */ jsx22(MessageCircle, {
5546
5784
  className: "skippr:size-3.5"
5547
5785
  }),
5548
5786
  "Chat",
5549
- activeTab === "chat" && /* @__PURE__ */ jsx19("span", {
5787
+ activeTab === "chat" && /* @__PURE__ */ jsx22("span", {
5550
5788
  className: "skippr:absolute skippr:-bottom-1 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
5551
5789
  })
5552
5790
  ]
5553
5791
  }),
5554
- /* @__PURE__ */ jsxs16("button", {
5792
+ /* @__PURE__ */ jsxs17("button", {
5555
5793
  type: "button",
5556
5794
  className: cn("skippr:relative skippr:inline-flex skippr:cursor-pointer skippr:items-center skippr:gap-1.5 skippr:rounded-lg skippr:px-3 skippr:py-1.5 skippr:text-sm skippr:font-medium skippr:transition-all", activeTab === "agenda" ? "skippr:text-foreground" : "skippr:text-muted-foreground skippr:hover:text-foreground"),
5557
5795
  onClick: () => onTabChange("agenda"),
5558
5796
  children: [
5559
- /* @__PURE__ */ jsx19(Calendar, {
5797
+ /* @__PURE__ */ jsx22(Calendar, {
5560
5798
  className: "skippr:size-3.5"
5561
5799
  }),
5562
5800
  "Agenda",
5563
- activeTab === "agenda" && /* @__PURE__ */ jsx19("span", {
5801
+ activeTab === "agenda" && /* @__PURE__ */ jsx22("span", {
5564
5802
  className: "skippr:absolute skippr:-bottom-1 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
5565
5803
  })
5566
5804
  ]
5567
5805
  })
5568
5806
  ]
5569
5807
  }),
5570
- /* @__PURE__ */ jsx19("div", {
5808
+ /* @__PURE__ */ jsx22("div", {
5571
5809
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
5572
- children: isDisconnecting ? /* @__PURE__ */ jsx19("div", {
5810
+ children: isDisconnecting ? /* @__PURE__ */ jsx22("div", {
5573
5811
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5574
- children: /* @__PURE__ */ jsx19(LoadingDots, {
5812
+ children: /* @__PURE__ */ jsx22(LoadingDots, {
5575
5813
  label: "Ending session..."
5576
5814
  })
5577
- }) : inSession ? /* @__PURE__ */ jsxs16(Fragment3, {
5815
+ }) : inSession ? /* @__PURE__ */ jsxs17(Fragment3, {
5578
5816
  children: [
5579
- transitionLabel && /* @__PURE__ */ jsx19("div", {
5817
+ transitionLabel && /* @__PURE__ */ jsx22("div", {
5580
5818
  className: "skippr:shrink-0 skippr:border-b skippr:border-border skippr:bg-muted/50 skippr:px-3 skippr:py-1.5 skippr:text-center skippr:text-xs skippr:text-muted-foreground",
5581
5819
  children: transitionLabel
5582
5820
  }),
5583
- /* @__PURE__ */ jsx19(ConnectedBody, {
5821
+ /* @__PURE__ */ jsx22(ConnectedBody, {
5584
5822
  activeTab: effectiveTab,
5585
5823
  autoFocusChat
5586
5824
  })
5587
5825
  ]
5588
- }) : /* @__PURE__ */ jsx19(IdleHistory, {
5826
+ }) : /* @__PURE__ */ jsx22(IdleHistory, {
5589
5827
  activeTab: effectiveTab,
5590
5828
  history: idleHistory,
5591
5829
  onTalk,
@@ -5594,22 +5832,22 @@ function AuthenticatedContent({
5594
5832
  error
5595
5833
  })
5596
5834
  }),
5597
- !hideControls && /* @__PURE__ */ jsx19("div", {
5835
+ !hideControls && /* @__PURE__ */ jsx22("div", {
5598
5836
  className: "skippr:shrink-0 skippr:border-t skippr:border-border",
5599
- children: /* @__PURE__ */ jsxs16("div", {
5837
+ children: /* @__PURE__ */ jsxs17("div", {
5600
5838
  className: "skippr:flex skippr:items-center skippr:justify-center skippr:gap-1 skippr:px-4 skippr:pt-1.5 skippr:pb-2 skippr:text-[10px] skippr:text-muted-foreground",
5601
5839
  children: [
5602
- /* @__PURE__ */ jsxs16("svg", {
5840
+ /* @__PURE__ */ jsxs17("svg", {
5603
5841
  viewBox: "21 21 109 109",
5604
5842
  className: "skippr:size-3",
5605
5843
  fill: "none",
5606
5844
  "aria-hidden": "true",
5607
5845
  children: [
5608
- /* @__PURE__ */ jsx19("path", {
5846
+ /* @__PURE__ */ jsx22("path", {
5609
5847
  d: "M119.497 24C124.193 24 128 27.8071 128 32.5033V81.3974C128 83.0339 127.536 84.5616 126.735 85.8587L89.8936 57.4811L89.8943 57.4804C80.4203 50.1648 66.2971 56.7058 66.297 69.0147V89.9007H29.5033C24.8071 89.9007 21 86.0936 21 81.3974V32.5033C21 27.8071 24.8071 24 29.5033 24H119.497ZM76.2715 69.0147C76.2716 65.1724 80.7356 63.0111 83.7978 65.3755L115.637 89.9007H76.2715V69.0147Z",
5610
5848
  fill: "currentColor"
5611
5849
  }),
5612
- /* @__PURE__ */ jsx19("path", {
5850
+ /* @__PURE__ */ jsx22("path", {
5613
5851
  d: "M83.7979 64.8856C80.7358 62.5211 76.2716 64.6824 76.2716 68.5247V120.892C76.2716 125.27 81.8518 127.191 84.5938 123.755L97.6194 107.437C98.1001 106.836 98.7119 106.35 99.4091 106.016C100.106 105.683 100.871 105.51 101.645 105.51H122.946C127.386 105.51 129.316 99.9436 125.81 97.2466L83.7979 64.8856Z",
5614
5852
  className: "skippr:fill-brand"
5615
5853
  })
@@ -5623,17 +5861,17 @@ function AuthenticatedContent({
5623
5861
  });
5624
5862
  }
5625
5863
  function AuthError() {
5626
- return /* @__PURE__ */ jsxs16("div", {
5864
+ return /* @__PURE__ */ jsxs17("div", {
5627
5865
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
5628
5866
  children: [
5629
- /* @__PURE__ */ jsx19(CircleAlert, {
5867
+ /* @__PURE__ */ jsx22(CircleAlert, {
5630
5868
  className: "skippr:mb-3 skippr:size-7 skippr:text-destructive"
5631
5869
  }),
5632
- /* @__PURE__ */ jsx19("p", {
5870
+ /* @__PURE__ */ jsx22("p", {
5633
5871
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
5634
5872
  children: "We couldn't verify your session"
5635
5873
  }),
5636
- /* @__PURE__ */ jsx19("p", {
5874
+ /* @__PURE__ */ jsx22("p", {
5637
5875
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
5638
5876
  children: "Please contact administrator."
5639
5877
  })
@@ -5642,7 +5880,7 @@ function AuthError() {
5642
5880
  }
5643
5881
  function ConnectedBanner() {
5644
5882
  const remaining = useSessionRemaining();
5645
- return /* @__PURE__ */ jsx19(SessionWarningBanner, {
5883
+ return /* @__PURE__ */ jsx22(SessionWarningBanner, {
5646
5884
  remaining
5647
5885
  });
5648
5886
  }
@@ -5655,43 +5893,43 @@ function IdleHistory({
5655
5893
  error
5656
5894
  }) {
5657
5895
  if (history2.isLoading) {
5658
- return /* @__PURE__ */ jsx19("div", {
5896
+ return /* @__PURE__ */ jsx22("div", {
5659
5897
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5660
- children: /* @__PURE__ */ jsx19(LoadingDots, {
5898
+ children: /* @__PURE__ */ jsx22(LoadingDots, {
5661
5899
  label: "Loading conversation..."
5662
5900
  })
5663
5901
  });
5664
5902
  }
5665
- return /* @__PURE__ */ jsxs16("div", {
5903
+ return /* @__PURE__ */ jsxs17("div", {
5666
5904
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
5667
5905
  children: [
5668
- activeTab === "agenda" ? /* @__PURE__ */ jsx19("div", {
5906
+ activeTab === "agenda" ? /* @__PURE__ */ jsx22("div", {
5669
5907
  className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto",
5670
- children: /* @__PURE__ */ jsx19(SessionAgenda, {
5908
+ children: /* @__PURE__ */ jsx22(SessionAgenda, {
5671
5909
  phases: history2.phases,
5672
5910
  hasStarted: history2.phases.length > 0
5673
5911
  })
5674
- }) : /* @__PURE__ */ jsx19(MessageList, {
5912
+ }) : /* @__PURE__ */ jsx22(MessageList, {
5675
5913
  messages: history2.messages,
5676
5914
  isStreaming: false,
5677
5915
  readOnly: true
5678
5916
  }),
5679
- /* @__PURE__ */ jsxs16("div", {
5917
+ /* @__PURE__ */ jsxs17("div", {
5680
5918
  className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:p-3",
5681
5919
  children: [
5682
- /* @__PURE__ */ jsxs16("button", {
5920
+ /* @__PURE__ */ jsxs17("button", {
5683
5921
  type: "button",
5684
5922
  onClick: onTalk,
5685
5923
  disabled: talkDisabled,
5686
5924
  className: "skippr:flex skippr:w-full skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:gap-2 skippr:rounded-xl skippr:bg-primary skippr:px-4 skippr:py-3 skippr:font-semibold skippr:text-[13px] skippr:text-primary-foreground skippr:transition-colors skippr:hover:bg-primary/90 skippr:disabled:cursor-not-allowed skippr:disabled:opacity-50",
5687
5925
  children: [
5688
- /* @__PURE__ */ jsx19(Mic, {
5926
+ /* @__PURE__ */ jsx22(Mic, {
5689
5927
  className: "skippr:size-4"
5690
5928
  }),
5691
5929
  talkLabel
5692
5930
  ]
5693
5931
  }),
5694
- error && /* @__PURE__ */ jsx19("p", {
5932
+ error && /* @__PURE__ */ jsx22("p", {
5695
5933
  className: "skippr:mt-2 skippr:text-center skippr:text-xs skippr:text-destructive",
5696
5934
  children: error
5697
5935
  })
@@ -5710,17 +5948,17 @@ function ConnectedBody({
5710
5948
  const { agentControls, isPaused } = useLiveAgent();
5711
5949
  const { isHeld } = useSessionHoldContext();
5712
5950
  if (activeTab === "agenda") {
5713
- return /* @__PURE__ */ jsx19("div", {
5951
+ return /* @__PURE__ */ jsx22("div", {
5714
5952
  className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto skippr:animate-skippr-tab-fade",
5715
- children: /* @__PURE__ */ jsx19(SessionAgenda, {
5953
+ children: /* @__PURE__ */ jsx22(SessionAgenda, {
5716
5954
  phases,
5717
5955
  hasStarted: allMessages.length > 0 || agentState === "speaking"
5718
5956
  })
5719
5957
  }, "agenda");
5720
5958
  }
5721
- return /* @__PURE__ */ jsx19("div", {
5959
+ return /* @__PURE__ */ jsx22("div", {
5722
5960
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
5723
- children: /* @__PURE__ */ jsx19(MessageList, {
5961
+ children: /* @__PURE__ */ jsx22(MessageList, {
5724
5962
  messages: allMessages,
5725
5963
  isStreaming: agentState === "speaking",
5726
5964
  sendChatMessage,
@@ -5733,12 +5971,12 @@ function ConnectedBody({
5733
5971
  }
5734
5972
 
5735
5973
  // src/components/SidebarTrigger.tsx
5736
- import { useContext as useContext12 } from "react";
5974
+ import { useContext as useContext14 } from "react";
5737
5975
 
5738
5976
  // src/components/Logo.tsx
5739
- import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
5977
+ import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
5740
5978
  function Logo({ className }) {
5741
- return /* @__PURE__ */ jsxs17("svg", {
5979
+ return /* @__PURE__ */ jsxs18("svg", {
5742
5980
  width: "1em",
5743
5981
  height: "1em",
5744
5982
  viewBox: "0 0 200 200",
@@ -5748,20 +5986,20 @@ function Logo({ className }) {
5748
5986
  "aria-label": "Skippr",
5749
5987
  className,
5750
5988
  children: [
5751
- /* @__PURE__ */ jsx20("rect", {
5989
+ /* @__PURE__ */ jsx23("rect", {
5752
5990
  width: "200",
5753
5991
  height: "200",
5754
5992
  rx: "40",
5755
5993
  fill: "#2D2D3F"
5756
5994
  }),
5757
- /* @__PURE__ */ jsxs17("g", {
5995
+ /* @__PURE__ */ jsxs18("g", {
5758
5996
  transform: "translate(100 100) scale(0.8) translate(-100 -100)",
5759
5997
  children: [
5760
- /* @__PURE__ */ jsx20("path", {
5998
+ /* @__PURE__ */ jsx23("path", {
5761
5999
  d: "M144.497 59C149.193 59 153 62.8071 153 67.5033V116.397C153 118.034 152.536 119.562 151.735 120.859L114.894 92.4811L114.894 92.4804C105.42 85.1648 91.2971 91.7058 91.297 104.015V124.901H54.5033C49.8071 124.901 46 121.094 46 116.397V67.5033C46 62.8071 49.8071 59 54.5033 59H144.497ZM101.272 104.015C101.272 100.172 105.736 98.0111 108.798 100.375L140.637 124.901H101.272V104.015Z",
5762
6000
  fill: "white"
5763
6001
  }),
5764
- /* @__PURE__ */ jsx20("path", {
6002
+ /* @__PURE__ */ jsx23("path", {
5765
6003
  d: "M108.798 99.8856C105.736 97.5211 101.271 99.6824 101.271 103.525V155.892C101.271 160.27 106.852 162.191 109.594 158.755L122.619 142.437C123.1 141.836 123.712 141.35 124.409 141.016C125.106 140.683 125.871 140.51 126.645 140.51H147.946C152.386 140.51 154.316 134.944 150.81 132.247L108.798 99.8856Z",
5766
6004
  className: "skippr:fill-brand"
5767
6005
  })
@@ -5772,7 +6010,7 @@ function Logo({ className }) {
5772
6010
  }
5773
6011
 
5774
6012
  // src/components/SidebarTrigger.tsx
5775
- import { jsx as jsx21 } from "react/jsx-runtime";
6013
+ import { jsx as jsx24 } from "react/jsx-runtime";
5776
6014
  function SidebarTrigger() {
5777
6015
  const {
5778
6016
  isPanelOpen,
@@ -5785,29 +6023,29 @@ function SidebarTrigger() {
5785
6023
  isStarting,
5786
6024
  isPausing
5787
6025
  } = useLiveAgent();
5788
- const internalCtx = useContext12(LiveAgentContext);
6026
+ const internalCtx = useContext14(LiveAgentContext);
5789
6027
  const launcherBottomPx = internalCtx?.launcherBottomPx ?? DEFAULT_LAUNCHER_BOTTOM_PX;
5790
6028
  const popsDown = internalCtx?.popsDown ?? false;
5791
6029
  if (isMinimized || isConnected || isStarting || isPausing)
5792
6030
  return null;
5793
6031
  const handleClick = isPanelOpen && minimizable ? minimizePanel : togglePanel;
5794
- return /* @__PURE__ */ jsx21("button", {
6032
+ return /* @__PURE__ */ jsx24("button", {
5795
6033
  type: "button",
5796
6034
  onClick: handleClick,
5797
6035
  title: isPanelOpen ? "Close chat" : "Open chat",
5798
6036
  "aria-label": isPanelOpen ? "Close chat" : "Open chat",
5799
6037
  style: { bottom: triggerBottomPx(launcherBottomPx, popsDown) },
5800
6038
  className: cn("skippr:fixed skippr:z-[9998]", "skippr:flex skippr:size-12 skippr:items-center skippr:justify-center", "skippr:shadow-[0_4px_16px_rgba(45,43,61,0.45),0_2px_4px_rgba(0,0,0,0.1)] skippr:transition-all", "skippr:cursor-pointer skippr:hover:brightness-110 skippr:hover:-translate-y-0.5 skippr:active:translate-y-0", isPanelOpen ? "skippr:rounded-[14px] skippr:bg-bubble skippr:text-white" : "skippr:rounded-[10px] skippr:overflow-hidden", position === "right" ? "skippr:right-6" : "skippr:left-6"),
5801
- children: isPanelOpen ? /* @__PURE__ */ jsx21(ChevronDown, {
6039
+ children: isPanelOpen ? /* @__PURE__ */ jsx24(ChevronDown, {
5802
6040
  className: "skippr:size-5"
5803
- }) : /* @__PURE__ */ jsx21(Logo, {
6041
+ }) : /* @__PURE__ */ jsx24(Logo, {
5804
6042
  className: "skippr:size-12"
5805
6043
  })
5806
6044
  });
5807
6045
  }
5808
6046
 
5809
6047
  // src/components/LiveAgent.tsx
5810
- import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
6048
+ import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
5811
6049
  function readSavedLauncherBottom() {
5812
6050
  try {
5813
6051
  const saved = Number.parseInt(localStorage.getItem("skippr_widget_bottom") ?? "", 10);
@@ -5817,7 +6055,7 @@ function readSavedLauncherBottom() {
5817
6055
  }
5818
6056
  }
5819
6057
  function AgentCursorMount({ animated }) {
5820
- return /* @__PURE__ */ jsx22(AgentCursor, {
6058
+ return /* @__PURE__ */ jsx25(AgentCursor, {
5821
6059
  target: useAgentCursor(),
5822
6060
  animated
5823
6061
  });
@@ -5825,8 +6063,8 @@ function AgentCursorMount({ animated }) {
5825
6063
  function PlanPanelOpener() {
5826
6064
  const plan = usePlanUpdates();
5827
6065
  const { expandPanel } = useLiveAgent();
5828
- const surfacedPlanIdRef = useRef18(null);
5829
- useEffect27(() => {
6066
+ const surfacedPlanIdRef = useRef21(null);
6067
+ useEffect28(() => {
5830
6068
  if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
5831
6069
  return;
5832
6070
  surfacedPlanIdRef.current = plan.planId;
@@ -5866,18 +6104,18 @@ function LiveAgent(props) {
5866
6104
  const auth = useAuth({ appKey });
5867
6105
  const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
5868
6106
  const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
5869
- const [activeModule, setActiveModule] = useState19(null);
5870
- const minimizeOnSessionStart = useCallback15(() => {
6107
+ const [activeModule, setActiveModule] = useState20(null);
6108
+ const minimizeOnSessionStart = useCallback17(() => {
5871
6109
  if (minimizable) {
5872
6110
  setIsMinimized(true);
5873
6111
  setIsPanelOpen(false);
5874
6112
  }
5875
6113
  }, [minimizable]);
5876
- const expandOnSessionStartError = useCallback15(() => {
6114
+ const expandOnSessionStartError = useCallback17(() => {
5877
6115
  setIsMinimized(false);
5878
6116
  setIsPanelOpen(true);
5879
6117
  }, []);
5880
- const minimizeOnSessionDisconnect = useCallback15(() => {
6118
+ const minimizeOnSessionDisconnect = useCallback17(() => {
5881
6119
  setActiveModule(null);
5882
6120
  if (minimizable) {
5883
6121
  setIsMinimized(true);
@@ -5912,30 +6150,30 @@ function LiveAgent(props) {
5912
6150
  onStartError: expandOnSessionStartError,
5913
6151
  onDisconnect: minimizeOnSessionDisconnect
5914
6152
  });
5915
- const teardownInFlightRef = useRef18(false);
6153
+ const teardownInFlightRef = useRef21(false);
5916
6154
  teardownInFlightRef.current = isPaused || isPausing || isDisconnecting;
5917
- const handleRoomDisconnected = useCallback15(() => {
6155
+ const handleRoomDisconnected = useCallback17(() => {
5918
6156
  if (teardownInFlightRef.current)
5919
6157
  return;
5920
6158
  disconnect();
5921
6159
  }, [disconnect]);
5922
6160
  const isSessionLive = connection !== null || isStarting || isPausing || isDisconnecting;
5923
- const [isPanelOpen, setIsPanelOpen] = useState19(defaultOpen);
5924
- const [isMinimized, setIsMinimized] = useState19(minimizable && !defaultOpen);
5925
- const [sidebarTab, setSidebarTab] = useState19("agenda");
5926
- const [phasesSnapshot, setPhasesSnapshot] = useState19([]);
5927
- const [textMode, setTextMode] = useState19(false);
5928
- const [panelExpanded, setPanelExpanded] = useState19(false);
5929
- const togglePanelExpanded = useCallback15(() => setPanelExpanded((prev) => !prev), []);
5930
- const panelRef = useRef18(null);
5931
- const controlBarRef = useRef18(null);
5932
- const [isDragging, setIsDragging] = useState19(false);
5933
- const setTextModeState = useCallback15((enabled) => {
6161
+ const [isPanelOpen, setIsPanelOpen] = useState20(defaultOpen);
6162
+ const [isMinimized, setIsMinimized] = useState20(minimizable && !defaultOpen);
6163
+ const [sidebarTab, setSidebarTab] = useState20("agenda");
6164
+ const [phasesSnapshot, setPhasesSnapshot] = useState20([]);
6165
+ const [textMode, setTextMode] = useState20(false);
6166
+ const [panelExpanded, setPanelExpanded] = useState20(false);
6167
+ const togglePanelExpanded = useCallback17(() => setPanelExpanded((prev) => !prev), []);
6168
+ const panelRef = useRef21(null);
6169
+ const controlBarRef = useRef21(null);
6170
+ const [isDragging, setIsDragging] = useState20(false);
6171
+ const setTextModeState = useCallback17((enabled) => {
5934
6172
  setTextMode(enabled);
5935
6173
  }, []);
5936
6174
  const isConnected = connection !== null;
5937
6175
  const showControlBar = isConnected || isStarting || isPausing;
5938
- useEffect27(() => {
6176
+ useEffect28(() => {
5939
6177
  if (!isConnected)
5940
6178
  setTextModeState(false);
5941
6179
  }, [isConnected, setTextModeState]);
@@ -5963,7 +6201,7 @@ function LiveAgent(props) {
5963
6201
  const agentMode = operatingModule?.mode ?? null;
5964
6202
  const shouldAnimateCursor = operatingModule?.uiPreferences?.animateCursor ?? animateAgentCursor;
5965
6203
  const resumableSession = useMemo7(() => getResumableSession(operatingModule), [operatingModule]);
5966
- const resumeSession = useCallback15(async () => {
6204
+ const resumeSession = useCallback17(async () => {
5967
6205
  if (!resumableSession)
5968
6206
  return;
5969
6207
  await startSession({
@@ -5972,7 +6210,7 @@ function LiveAgent(props) {
5972
6210
  existingSessionId: resumableSession.id
5973
6211
  });
5974
6212
  }, [resumableSession, startSession, agentControls]);
5975
- const selectModule = useCallback15((moduleId, opts) => {
6213
+ const selectModule = useCallback17((moduleId, opts) => {
5976
6214
  const found = availableModules.find((m) => m.id === moduleId);
5977
6215
  if (!found)
5978
6216
  return;
@@ -5984,7 +6222,7 @@ function LiveAgent(props) {
5984
6222
  autoStarted: opts?.autoStarted
5985
6223
  });
5986
6224
  }, [availableModules, startSession]);
5987
- const startAdoptionSession = useCallback15((goal) => {
6225
+ const startAdoptionSession = useCallback17((goal) => {
5988
6226
  attendGoal(goal.goalId);
5989
6227
  const found = availableModules.find((m) => m.id === goal.agentId);
5990
6228
  if (found)
@@ -5995,9 +6233,9 @@ function LiveAgent(props) {
5995
6233
  adoptionGoalId: goal.goalId
5996
6234
  });
5997
6235
  }, [attendGoal, availableModules, startSession]);
5998
- const [welcomeDismissed, setWelcomeDismissed] = useState19(false);
5999
- const dismissWelcome = useCallback15(() => setWelcomeDismissed(true), []);
6000
- const [currentPosition, setCurrentPosition] = useState19(() => {
6236
+ const [welcomeDismissed, setWelcomeDismissed] = useState20(false);
6237
+ const dismissWelcome = useCallback17(() => setWelcomeDismissed(true), []);
6238
+ const [currentPosition, setCurrentPosition] = useState20(() => {
6001
6239
  try {
6002
6240
  const saved = localStorage.getItem("skippr_widget_position");
6003
6241
  if (saved === "left" || saved === "right")
@@ -6005,18 +6243,18 @@ function LiveAgent(props) {
6005
6243
  } catch {}
6006
6244
  return position;
6007
6245
  });
6008
- const setPositionWithPersist = useCallback15((pos) => {
6246
+ const setPositionWithPersist = useCallback17((pos) => {
6009
6247
  setCurrentPosition(pos);
6010
6248
  try {
6011
6249
  localStorage.setItem("skippr_widget_position", pos);
6012
6250
  } catch {}
6013
6251
  }, []);
6014
6252
  const savedLauncherBottom = readSavedLauncherBottom();
6015
- const hasDraggedRef = useRef18(savedLauncherBottom !== null);
6016
- const verticalAlignRef = useRef18(verticalAlign);
6017
- const [launcherBottomPx, setLauncherBottomPxState] = useState19(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlign));
6018
- const [popsDown, setPopsDown] = useState19(() => launcherPopsDown(launcherBottomPx));
6019
- const setLauncherBottomPx = useCallback15((px) => {
6253
+ const hasDraggedRef = useRef21(savedLauncherBottom !== null);
6254
+ const verticalAlignRef = useRef21(verticalAlign);
6255
+ const [launcherBottomPx, setLauncherBottomPxState] = useState20(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlign));
6256
+ const [popsDown, setPopsDown] = useState20(() => launcherPopsDown(launcherBottomPx));
6257
+ const setLauncherBottomPx = useCallback17((px) => {
6020
6258
  hasDraggedRef.current = true;
6021
6259
  setLauncherBottomPxState(px);
6022
6260
  setPopsDown(launcherPopsDown(px));
@@ -6024,13 +6262,13 @@ function LiveAgent(props) {
6024
6262
  localStorage.setItem("skippr_widget_bottom", String(px));
6025
6263
  } catch {}
6026
6264
  }, []);
6027
- const launcherBottomPxRef = useRef18(launcherBottomPx);
6265
+ const launcherBottomPxRef = useRef21(launcherBottomPx);
6028
6266
  launcherBottomPxRef.current = launcherBottomPx;
6029
- const commitLauncherDrop = useCallback15(({ side, bottomPx }) => {
6267
+ const commitLauncherDrop = useCallback17(({ side, bottomPx }) => {
6030
6268
  setPositionWithPersist(side);
6031
6269
  setLauncherBottomPx(bottomPx);
6032
6270
  }, [setPositionWithPersist, setLauncherBottomPx]);
6033
- useEffect27(() => {
6271
+ useEffect28(() => {
6034
6272
  const syncToViewport = () => {
6035
6273
  const next = hasDraggedRef.current ? clampLauncherBottom(launcherBottomPxRef.current) : verticalAlignToBottomPx(verticalAlignRef.current);
6036
6274
  setLauncherBottomPxState(next);
@@ -6040,26 +6278,26 @@ function LiveAgent(props) {
6040
6278
  window.addEventListener("resize", syncToViewport);
6041
6279
  return () => window.removeEventListener("resize", syncToViewport);
6042
6280
  }, []);
6043
- const openPanel = useCallback15(() => setIsPanelOpen(true), []);
6044
- const closePanel = useCallback15(() => setIsPanelOpen(false), []);
6045
- const togglePanel = useCallback15(() => setIsPanelOpen((prev) => !prev), []);
6046
- const expandPanel = useCallback15(() => {
6281
+ const openPanel = useCallback17(() => setIsPanelOpen(true), []);
6282
+ const closePanel = useCallback17(() => setIsPanelOpen(false), []);
6283
+ const togglePanel = useCallback17(() => setIsPanelOpen((prev) => !prev), []);
6284
+ const expandPanel = useCallback17(() => {
6047
6285
  setIsMinimized(false);
6048
6286
  setIsPanelOpen(true);
6049
6287
  }, []);
6050
- const minimizePanel = useCallback15(() => {
6288
+ const minimizePanel = useCallback17(() => {
6051
6289
  if (!minimizable)
6052
6290
  return;
6053
6291
  setIsMinimized(true);
6054
6292
  setIsPanelOpen(false);
6055
6293
  }, [minimizable]);
6056
- const pauseSessionAndMinimize = useCallback15(async () => {
6294
+ const pauseSessionAndMinimize = useCallback17(async () => {
6057
6295
  await pauseSession();
6058
6296
  minimizePanel();
6059
6297
  }, [pauseSession, minimizePanel]);
6060
6298
  const isAuthenticated = bearerToken !== null || auth.isAuthenticated;
6061
6299
  const defaultAgentId = hostAgentId ?? defaultSelection.agentId;
6062
- const startDefaultSession = useCallback15(() => {
6300
+ const startDefaultSession = useCallback17(() => {
6063
6301
  const target = availableModules.find((m) => m.id === defaultAgentId);
6064
6302
  if (!target)
6065
6303
  return;
@@ -6222,45 +6460,52 @@ function LiveAgent(props) {
6222
6460
  adoptionGoals,
6223
6461
  startAdoptionSession
6224
6462
  ]);
6225
- return /* @__PURE__ */ jsx22(LiveAgentContext.Provider, {
6463
+ return /* @__PURE__ */ jsx25(LiveAgentContext.Provider, {
6226
6464
  value: ctx,
6227
- children: /* @__PURE__ */ jsxs18(LiveKitRoom, {
6465
+ children: /* @__PURE__ */ jsxs19(LiveKitRoom, {
6228
6466
  serverUrl: connection?.livekitUrl,
6229
6467
  token: connection?.token,
6230
6468
  connect: shouldConnect,
6231
6469
  audio: true,
6232
6470
  onDisconnected: handleRoomDisconnected,
6233
6471
  children: [
6234
- connection && !textMode && /* @__PURE__ */ jsx22(RoomAudioRenderer, {}),
6235
- connection && captureMode === CAPTURE_MODE.Screenshare && /* @__PURE__ */ jsx22(AutoStartMedia, {
6236
- pendingScreenStream
6472
+ connection && !textMode && /* @__PURE__ */ jsx25(RoomAudioRenderer, {}),
6473
+ connection && captureMode === CAPTURE_MODE.Screenshare && /* @__PURE__ */ jsx25(AutoStartMedia, {
6474
+ pendingScreenStream,
6475
+ tapToTalk: agentControls?.tapToTalk === true
6237
6476
  }),
6238
- connection && captureMode === CAPTURE_MODE.Auto && /* @__PURE__ */ jsx22(DomCapture, {}),
6239
- /* @__PURE__ */ jsxs18(ShadowHost, {
6477
+ connection && captureMode === CAPTURE_MODE.Auto && /* @__PURE__ */ jsx25(DomCapture, {
6478
+ tapToTalk: agentControls?.tapToTalk === true
6479
+ }),
6480
+ /* @__PURE__ */ jsxs19(ShadowHost, {
6240
6481
  children: [
6241
- connection && captureMode === CAPTURE_MODE.Auto && agentControls?.highlight && /* @__PURE__ */ jsx22(HighlightOverlay, {}),
6242
- connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx22(PageActionHandler, {}),
6243
- connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx22(PlanPanelOpener, {}),
6244
- connection && captureMode === CAPTURE_MODE.Auto && (agentControls?.highlight || agentControls?.actions) && /* @__PURE__ */ jsx22(AgentCursorMount, {
6482
+ connection && captureMode === CAPTURE_MODE.Auto && agentControls?.highlight && /* @__PURE__ */ jsx25(HighlightOverlay, {}),
6483
+ connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx25(PageActionHandler, {}),
6484
+ connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx25(PlanPanelOpener, {}),
6485
+ connection && captureMode === CAPTURE_MODE.Auto && (agentControls?.highlight || agentControls?.actions) && /* @__PURE__ */ jsx25(AgentCursorMount, {
6245
6486
  animated: shouldAnimateCursor
6246
6487
  }),
6247
- /* @__PURE__ */ jsx22(SessionHoldProvider, {
6248
- children: /* @__PURE__ */ jsxs18("div", {
6249
- id: WIDGET_ROOT_ID,
6250
- children: [
6251
- isMinimized && !showControlBar && /* @__PURE__ */ jsx22(MinimizedBubble, {
6252
- welcomeMessage,
6253
- welcomeDismissed,
6254
- onDismissWelcome: dismissWelcome
6255
- }),
6256
- showControlBar && !hideControls && /* @__PURE__ */ jsx22(SessionControlBar, {}),
6257
- /* @__PURE__ */ jsx22(SidebarTrigger, {}),
6258
- /* @__PURE__ */ jsx22(Sidebar, {
6259
- hideControls,
6260
- hideHeader,
6261
- startSessionLabel
6488
+ /* @__PURE__ */ jsx25(SessionHoldProvider, {
6489
+ children: /* @__PURE__ */ jsx25(TapToTalkProvider, {
6490
+ children: /* @__PURE__ */ jsx25(TranscriptionsProvider, {
6491
+ children: /* @__PURE__ */ jsxs19("div", {
6492
+ id: WIDGET_ROOT_ID,
6493
+ children: [
6494
+ isMinimized && !showControlBar && /* @__PURE__ */ jsx25(MinimizedBubble, {
6495
+ welcomeMessage,
6496
+ welcomeDismissed,
6497
+ onDismissWelcome: dismissWelcome
6498
+ }),
6499
+ showControlBar && !hideControls && /* @__PURE__ */ jsx25(SessionControlBar, {}),
6500
+ /* @__PURE__ */ jsx25(SidebarTrigger, {}),
6501
+ /* @__PURE__ */ jsx25(Sidebar, {
6502
+ hideControls,
6503
+ hideHeader,
6504
+ startSessionLabel
6505
+ })
6506
+ ]
6262
6507
  })
6263
- ]
6508
+ })
6264
6509
  })
6265
6510
  })
6266
6511
  ]
@@ -6271,9 +6516,9 @@ function LiveAgent(props) {
6271
6516
  });
6272
6517
  }
6273
6518
  // src/hooks/useIsLocalSpeaking.ts
6274
- import { useIsSpeaking, useLocalParticipant as useLocalParticipant10 } from "@livekit/components-react/hooks";
6519
+ import { useIsSpeaking, useLocalParticipant as useLocalParticipant12 } from "@livekit/components-react/hooks";
6275
6520
  function useIsLocalSpeaking() {
6276
- const { localParticipant } = useLocalParticipant10();
6521
+ const { localParticipant } = useLocalParticipant12();
6277
6522
  return useIsSpeaking(localParticipant);
6278
6523
  }
6279
6524
  export {