@skippr/live-agent-sdk 0.78.0 → 0.80.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 useCallback17, useEffect as useEffect28, useMemo as useMemo7, useRef as useRef21, useState as useState20 } from "react";
11
+ import { useCallback as useCallback18, useEffect as useEffect29, useMemo as useMemo7, useRef as useRef23, useState as useState21 } from "react";
12
12
 
13
13
  // src/capture/useAgentCursor.ts
14
14
  import { useEffect, useState } from "react";
@@ -68,7 +68,17 @@ 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";
71
+ var MIC_MODE_TURN_TOPIC = "skippr.mic-mode-turn";
72
+ var MIC_MODE = {
73
+ Live: "live",
74
+ PushToTalk: "pushToTalk",
75
+ TapToTalk: "tapToTalk"
76
+ };
77
+ var DEFAULT_MIC_MODE = MIC_MODE.Live;
78
+ function isRequestResponseMicMode(micMode) {
79
+ return micMode === MIC_MODE.PushToTalk || micMode === MIC_MODE.TapToTalk;
80
+ }
81
+ var PUSH_TO_TALK_KEY = "Backquote";
72
82
  var IDLE_AUTO_PAUSE_MS = 3 * 60 * 1000;
73
83
  var PLAN_ATTR = "skippr.action-plan";
74
84
  var NAME_MAX_CHARS = 80;
@@ -196,81 +206,95 @@ function useSessionHoldContext() {
196
206
  return useContext2(SessionHoldContext);
197
207
  }
198
208
 
199
- // src/context/TapToTalkContext.tsx
209
+ // src/context/TranscriptionsContext.tsx
210
+ import { useTranscriptions } from "@livekit/components-react/hooks";
200
211
  import { createContext as createContext3, useContext as useContext3 } from "react";
212
+ import { jsx as jsx2 } from "react/jsx-runtime";
213
+ var TranscriptionsContext = createContext3([]);
214
+ function TranscriptionsProvider({ children }) {
215
+ const transcriptions = useTranscriptions();
216
+ return /* @__PURE__ */ jsx2(TranscriptionsContext.Provider, {
217
+ value: transcriptions,
218
+ children
219
+ });
220
+ }
221
+ function useSharedTranscriptions() {
222
+ return useContext3(TranscriptionsContext);
223
+ }
224
+
225
+ // src/context/VoiceTurnContext.tsx
226
+ import { createContext as createContext4, useContext as useContext4 } from "react";
201
227
 
202
- // src/hooks/useTapToTalk.ts
228
+ // src/hooks/useVoiceTurn.ts
203
229
  import { useLocalParticipant as useLocalParticipant2 } from "@livekit/components-react/hooks";
204
- import { useCallback as useCallback2, useState as useState3 } from "react";
230
+ import { useCallback as useCallback2, useRef, useState as useState3 } from "react";
205
231
  var textEncoder2 = new TextEncoder;
206
- function useTapToTalk() {
232
+ function useVoiceTurn() {
207
233
  const { localParticipant } = useLocalParticipant2();
208
234
  const [isCapturingSpeech, setIsCapturingSpeech] = useState3(false);
235
+ const capturingRef = useRef(false);
209
236
  const publish = useCallback2(async (type) => {
210
237
  await localParticipant.publishData(textEncoder2.encode(JSON.stringify({ type })), {
211
238
  reliable: true,
212
- topic: TAP_TO_TALK_TOPIC
239
+ topic: MIC_MODE_TURN_TOPIC
213
240
  });
214
241
  }, [localParticipant]);
215
242
  const startRecording = useCallback2(async () => {
216
243
  try {
217
244
  await localParticipant.setMicrophoneEnabled(true);
218
245
  await publish("start");
219
- setIsCapturingSpeech(true);
220
246
  } catch (error) {
221
- console.error("Failed to start tap-to-talk turn:", error);
247
+ console.error("Failed to start voice turn:", error);
222
248
  }
223
249
  }, [localParticipant, publish]);
224
250
  const commitRecording = useCallback2(async () => {
225
251
  try {
226
252
  await localParticipant.setMicrophoneEnabled(false);
227
253
  await publish("commit");
228
- setIsCapturingSpeech(false);
229
254
  } catch (error) {
230
- console.error("Failed to commit tap-to-talk turn:", error);
255
+ console.error("Failed to commit voice turn:", error);
231
256
  }
232
257
  }, [localParticipant, publish]);
258
+ const start = useCallback2(() => {
259
+ if (capturingRef.current)
260
+ return;
261
+ capturingRef.current = true;
262
+ setIsCapturingSpeech(true);
263
+ startRecording();
264
+ }, [startRecording]);
265
+ const commit = useCallback2(() => {
266
+ if (!capturingRef.current)
267
+ return;
268
+ capturingRef.current = false;
269
+ setIsCapturingSpeech(false);
270
+ commitRecording();
271
+ }, [commitRecording]);
233
272
  const toggle = useCallback2(() => {
234
- if (isCapturingSpeech) {
235
- commitRecording();
236
- } else {
237
- startRecording();
238
- }
239
- }, [isCapturingSpeech, startRecording, commitRecording]);
240
- return { isCapturingSpeech, toggle };
273
+ if (capturingRef.current)
274
+ commit();
275
+ else
276
+ start();
277
+ }, [start, commit]);
278
+ return { isCapturingSpeech, toggle, start, commit };
241
279
  }
242
280
 
243
- // src/context/TapToTalkContext.tsx
244
- import { jsx as jsx2 } from "react/jsx-runtime";
245
- var TapToTalkContext = createContext3({
281
+ // src/context/VoiceTurnContext.tsx
282
+ import { jsx as jsx3 } from "react/jsx-runtime";
283
+ var VoiceTurnContext = createContext4({
246
284
  isCapturingSpeech: false,
247
- toggle: () => {}
285
+ toggle: () => {},
286
+ start: () => {},
287
+ commit: () => {}
248
288
  });
249
- function TapToTalkProvider({ children }) {
250
- const tapToTalk = useTapToTalk();
251
- return /* @__PURE__ */ jsx2(TapToTalkContext.Provider, {
252
- value: tapToTalk,
289
+ function VoiceTurnProvider({ children }) {
290
+ const voiceTurn = useVoiceTurn();
291
+ return /* @__PURE__ */ jsx3(VoiceTurnContext.Provider, {
292
+ value: voiceTurn,
253
293
  children
254
294
  });
255
295
  }
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);
296
+ function useVoiceTurnContext() {
297
+ return useContext4(VoiceTurnContext);
274
298
  }
275
299
 
276
300
  // src/hooks/useAdoptionGoals.ts
@@ -561,7 +585,7 @@ function useAuth({ appKey }) {
561
585
  }
562
586
 
563
587
  // src/hooks/useAutoStart.ts
564
- import { useEffect as useEffect5, useMemo as useMemo2, useRef } from "react";
588
+ import { useEffect as useEffect5, useMemo as useMemo2, useRef as useRef2 } from "react";
565
589
 
566
590
  // src/lib/agentMode.ts
567
591
  var AGENT_MODE = {
@@ -641,7 +665,7 @@ function useAutoStart({
641
665
  bearerToken,
642
666
  selectModule
643
667
  }) {
644
- const hasAutoStartedRef = useRef(false);
668
+ const hasAutoStartedRef = useRef2(false);
645
669
  const autoStartModule = useMemo2(() => availableModules.find((m) => {
646
670
  if (!m.uiPreferences?.autoStart)
647
671
  return false;
@@ -790,7 +814,7 @@ function usePlanUpdates() {
790
814
  }
791
815
 
792
816
  // src/hooks/useSession.ts
793
- import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef2, useState as useState8 } from "react";
817
+ import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef3, useState as useState8 } from "react";
794
818
  var API_URL4 = "https://specialist.skippr.ai/api";
795
819
  async function fetchSessionMessages(sessionId, authedFetch) {
796
820
  try {
@@ -856,11 +880,11 @@ function useSession({
856
880
  const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState8(null);
857
881
  const [historyMessages, setHistoryMessages] = useState8([]);
858
882
  const [authFailed, setAuthFailed] = useState8(false);
859
- const tokenRef = useRef2(authToken ? { token: authToken, expiresAt: null } : null);
860
- const getUserTokenRef = useRef2(getUserToken);
883
+ const tokenRef = useRef3(authToken ? { token: authToken, expiresAt: null } : null);
884
+ const getUserTokenRef = useRef3(getUserToken);
861
885
  getUserTokenRef.current = getUserToken ?? (userToken ? () => Promise.resolve(userToken) : undefined);
862
- const failedBearerRef = useRef2(null);
863
- const inFlightExchangeRef = useRef2(null);
886
+ const failedBearerRef = useRef3(null);
887
+ const inFlightExchangeRef = useRef3(null);
864
888
  const canExchange = useCallback7(() => !!appKey && !!getUserTokenRef.current, [appKey]);
865
889
  const reExchange = useCallback7(async () => {
866
890
  if (inFlightExchangeRef.current)
@@ -955,8 +979,8 @@ function useSession({
955
979
  stale = true;
956
980
  };
957
981
  }, [authToken, canExchange, reExchange]);
958
- const isStartingRef = useRef2(false);
959
- const pauseOnUnloadRef = useRef2(null);
982
+ const isStartingRef = useRef3(false);
983
+ const pauseOnUnloadRef = useRef3(null);
960
984
  pauseOnUnloadRef.current = connection !== null && !isPaused && sessionId && bearerToken ? { sessionId, bearerToken } : null;
961
985
  useEffect8(() => {
962
986
  const onPageHide = () => {
@@ -1004,8 +1028,9 @@ function useSession({
1004
1028
  enabledControls.highlight = true;
1005
1029
  if (agentControls?.actions === true)
1006
1030
  enabledControls.actions = true;
1007
- if (agentControls?.tapToTalk === true)
1008
- enabledControls.tapToTalk = true;
1031
+ const micMode = agentControls?.micMode;
1032
+ if (isRequestResponseMicMode(micMode))
1033
+ enabledControls.micMode = micMode;
1009
1034
  const requestAgentControls = Object.keys(enabledControls).length > 0 ? enabledControls : undefined;
1010
1035
  try {
1011
1036
  let resolvedSessionId = existingSessionId;
@@ -1465,8 +1490,17 @@ var __iconNode20 = [
1465
1490
  ]
1466
1491
  ];
1467
1492
  var Play = createLucideIcon("play", __iconNode20);
1468
- // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/send.js
1493
+ // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/radio.js
1469
1494
  var __iconNode21 = [
1495
+ ["path", { d: "M16.247 7.761a6 6 0 0 1 0 8.478", key: "1fwjs5" }],
1496
+ ["path", { d: "M19.075 4.933a10 10 0 0 1 0 14.134", key: "ehdyv1" }],
1497
+ ["path", { d: "M4.925 19.067a10 10 0 0 1 0-14.134", key: "1q22gi" }],
1498
+ ["path", { d: "M7.753 16.239a6 6 0 0 1 0-8.478", key: "r2q7qm" }],
1499
+ ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }]
1500
+ ];
1501
+ var Radio = createLucideIcon("radio", __iconNode21);
1502
+ // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/send.js
1503
+ var __iconNode22 = [
1470
1504
  [
1471
1505
  "path",
1472
1506
  {
@@ -1476,20 +1510,20 @@ var __iconNode21 = [
1476
1510
  ],
1477
1511
  ["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
1478
1512
  ];
1479
- var Send = createLucideIcon("send", __iconNode21);
1513
+ var Send = createLucideIcon("send", __iconNode22);
1480
1514
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/square.js
1481
- var __iconNode22 = [
1515
+ var __iconNode23 = [
1482
1516
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
1483
1517
  ];
1484
- var Square = createLucideIcon("square", __iconNode22);
1518
+ var Square = createLucideIcon("square", __iconNode23);
1485
1519
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/x.js
1486
- var __iconNode23 = [
1520
+ var __iconNode24 = [
1487
1521
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
1488
1522
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
1489
1523
  ];
1490
- var X = createLucideIcon("x", __iconNode23);
1524
+ var X = createLucideIcon("x", __iconNode24);
1491
1525
  // src/components/AgentCursor.tsx
1492
- import { useContext as useContext6, useEffect as useEffect10, useLayoutEffect, useRef as useRef3, useState as useState10 } from "react";
1526
+ import { useContext as useContext6, useEffect as useEffect10, useLayoutEffect, useRef as useRef4, useState as useState10 } from "react";
1493
1527
 
1494
1528
  // src/capture/elementRef.ts
1495
1529
  function safeGetIframeDocument(iframe) {
@@ -1677,13 +1711,13 @@ function AgentCursor({
1677
1711
  const [phase, setPhase] = useState10("idle");
1678
1712
  const [ringBox, setRingBox] = useState10(null);
1679
1713
  const [clickPulse, setClickPulse] = useState10(0);
1680
- const cursorElRef = useRef3(null);
1681
- const pathRef = useRef3(null);
1682
- const prevCursorRef = useRef3(null);
1683
- const traceRef = useRef3(null);
1684
- const timersRef = useRef3(new Set);
1685
- const trackFrameRef = useRef3(null);
1686
- const glideFrameRef = useRef3(null);
1714
+ const cursorElRef = useRef4(null);
1715
+ const pathRef = useRef4(null);
1716
+ const prevCursorRef = useRef4(null);
1717
+ const traceRef = useRef4(null);
1718
+ const timersRef = useRef4(new Set);
1719
+ const trackFrameRef = useRef4(null);
1720
+ const glideFrameRef = useRef4(null);
1687
1721
  const clearTimers = () => {
1688
1722
  for (const t of timersRef.current)
1689
1723
  clearTimeout(t);
@@ -1924,18 +1958,21 @@ function AgentCursor({
1924
1958
  // src/components/AutoStartMedia.tsx
1925
1959
  import { useConnectionState, useLocalParticipant as useLocalParticipant3 } from "@livekit/components-react/hooks";
1926
1960
  import { ConnectionState, Track } from "livekit-client";
1927
- import { useEffect as useEffect11, useRef as useRef4 } from "react";
1928
- function AutoStartMedia({ pendingScreenStream, tapToTalk = false }) {
1961
+ import { useEffect as useEffect11, useRef as useRef5 } from "react";
1962
+ function AutoStartMedia({
1963
+ pendingScreenStream,
1964
+ pushOrTapMicMode = false
1965
+ }) {
1929
1966
  const { localParticipant } = useLocalParticipant3();
1930
1967
  const connectionState = useConnectionState();
1931
- const didStartRef = useRef4(false);
1968
+ const didStartRef = useRef5(false);
1932
1969
  useEffect11(() => {
1933
1970
  if (didStartRef.current)
1934
1971
  return;
1935
1972
  if (connectionState !== ConnectionState.Connected)
1936
1973
  return;
1937
1974
  didStartRef.current = true;
1938
- if (!tapToTalk) {
1975
+ if (!pushOrTapMicMode) {
1939
1976
  localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
1940
1977
  }
1941
1978
  if (pendingScreenStream) {
@@ -1949,14 +1986,14 @@ function AutoStartMedia({ pendingScreenStream, tapToTalk = false }) {
1949
1986
  });
1950
1987
  }
1951
1988
  }
1952
- }, [connectionState, localParticipant, pendingScreenStream, tapToTalk]);
1989
+ }, [connectionState, localParticipant, pendingScreenStream, pushOrTapMicMode]);
1953
1990
  return null;
1954
1991
  }
1955
1992
 
1956
1993
  // src/components/DomCapture.tsx
1957
1994
  import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
1958
1995
  import { ConnectionState as ConnectionState2, ScreenSharePresets, Track as Track2 } from "livekit-client";
1959
- import { useEffect as useEffect12, useRef as useRef5 } from "react";
1996
+ import { useEffect as useEffect12, useRef as useRef6 } from "react";
1960
1997
 
1961
1998
  // src/capture/a11yUtils.ts
1962
1999
  var ROLE_BY_TAG = {
@@ -2861,10 +2898,10 @@ async function unpublishAndStopTrack(localParticipant, videoTrack) {
2861
2898
  } catch {}
2862
2899
  videoTrack.stop();
2863
2900
  }
2864
- function DomCapture({ tapToTalk = false }) {
2901
+ function DomCapture({ pushOrTapMicMode = false }) {
2865
2902
  const { localParticipant } = useLocalParticipant4();
2866
2903
  const connectionState = useConnectionState2();
2867
- const didStartRef = useRef5(false);
2904
+ const didStartRef = useRef6(false);
2868
2905
  useEffect12(() => {
2869
2906
  if (didStartRef.current)
2870
2907
  return;
@@ -2886,7 +2923,7 @@ function DomCapture({ tapToTalk = false }) {
2886
2923
  let snapshotInFlight = false;
2887
2924
  let a11yPublishInFlight = false;
2888
2925
  let consecutiveCaptureFailures = 0;
2889
- if (!tapToTalk) {
2926
+ if (!pushOrTapMicMode) {
2890
2927
  localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
2891
2928
  }
2892
2929
  localParticipant.publishTrack(videoTrack, {
@@ -2971,13 +3008,13 @@ function DomCapture({ tapToTalk = false }) {
2971
3008
  for (const track of canvasStream.getTracks())
2972
3009
  track.stop();
2973
3010
  };
2974
- }, [connectionState, localParticipant, tapToTalk]);
3011
+ }, [connectionState, localParticipant, pushOrTapMicMode]);
2975
3012
  return null;
2976
3013
  }
2977
3014
 
2978
3015
  // src/components/HighlightOverlay.tsx
2979
3016
  import { useDataChannel } from "@livekit/components-react/hooks";
2980
- import { useCallback as useCallback8, useEffect as useEffect13, useRef as useRef6 } from "react";
3017
+ import { useCallback as useCallback8, useEffect as useEffect13, useRef as useRef7 } from "react";
2981
3018
  var HIGHLIGHT_AUTO_CLEAR_MS = 25000;
2982
3019
  var textDecoder = new TextDecoder;
2983
3020
  function parseHighlightMessage(payload) {
@@ -3000,8 +3037,8 @@ function parseHighlightMessage(payload) {
3000
3037
  }
3001
3038
  }
3002
3039
  function HighlightOverlay() {
3003
- const targetRef = useRef6(null);
3004
- const autoClearRef = useRef6(null);
3040
+ const targetRef = useRef7(null);
3041
+ const autoClearRef = useRef7(null);
3005
3042
  const clear = useCallback8(() => {
3006
3043
  if (autoClearRef.current)
3007
3044
  clearTimeout(autoClearRef.current);
@@ -3048,19 +3085,19 @@ function HighlightOverlay() {
3048
3085
  }
3049
3086
 
3050
3087
  // src/components/MinimizedBubble.tsx
3051
- import { useContext as useContext7, useEffect as useEffect15, useRef as useRef8, useState as useState11 } from "react";
3088
+ import { useContext as useContext7, useEffect as useEffect15, useRef as useRef9, useState as useState11 } from "react";
3052
3089
 
3053
3090
  // src/hooks/useLauncherDrag.ts
3054
- import { useEffect as useEffect14, useRef as useRef7 } from "react";
3091
+ import { useEffect as useEffect14, useRef as useRef8 } from "react";
3055
3092
  import { flushSync } from "react-dom";
3056
3093
  var DRAG_THRESHOLD_PX = 5;
3057
3094
  function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging) {
3058
- const wasDraggedRef = useRef7(false);
3059
- const onDropRef = useRef7(onDrop);
3095
+ const wasDraggedRef = useRef8(false);
3096
+ const onDropRef = useRef8(onDrop);
3060
3097
  onDropRef.current = onDrop;
3061
- const followTargetsRef = useRef7(followRefs);
3098
+ const followTargetsRef = useRef8(followRefs);
3062
3099
  followTargetsRef.current = followRefs;
3063
- const reportDraggingRef = useRef7(reportDragging);
3100
+ const reportDraggingRef = useRef8(reportDragging);
3064
3101
  reportDraggingRef.current = reportDragging;
3065
3102
  useEffect14(() => {
3066
3103
  const el = containerRef.current;
@@ -3442,8 +3479,8 @@ function MinimizedBubble({
3442
3479
  const [goalsAutoHidden, setGoalsAutoHidden] = useState11(false);
3443
3480
  const [isLauncherHovered, setIsLauncherHovered] = useState11(false);
3444
3481
  const [visitHref, setVisitHref] = useState11(() => window.location.href);
3445
- const revealedHrefRef = useRef8(null);
3446
- const hoverContainerRef = useRef8(null);
3482
+ const revealedHrefRef = useRef9(null);
3483
+ const hoverContainerRef = useRef9(null);
3447
3484
  useEffect15(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
3448
3485
  useEffect15(() => {
3449
3486
  const el = hoverContainerRef.current;
@@ -3557,7 +3594,7 @@ function MinimizedBubble({
3557
3594
 
3558
3595
  // src/components/PageActionHandler.tsx
3559
3596
  import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
3560
- import { useCallback as useCallback9, useEffect as useEffect16, useRef as useRef9 } from "react";
3597
+ import { useCallback as useCallback9, useEffect as useEffect16, useRef as useRef10 } from "react";
3561
3598
  var STEP_MAX_WAIT_MS = 5000;
3562
3599
  var POST_ACTION_SETTLE_SNAPSHOT_MS = 300;
3563
3600
  var textDecoder2 = new TextDecoder;
@@ -3774,11 +3811,11 @@ function labelFor(action) {
3774
3811
  }
3775
3812
  }
3776
3813
  function PageActionHandler() {
3777
- const mountedRef = useRef9(true);
3778
- const queueRef = useRef9([]);
3779
- const drainingRef = useRef9(false);
3780
- const settleTimerRef = useRef9(null);
3781
- const endStepRef = useRef9(null);
3814
+ const mountedRef = useRef10(true);
3815
+ const queueRef = useRef10([]);
3816
+ const drainingRef = useRef10(false);
3817
+ const settleTimerRef = useRef10(null);
3818
+ const endStepRef = useRef10(null);
3782
3819
  const runStep = useCallback9((action) => {
3783
3820
  return new Promise((resolve) => {
3784
3821
  if (action.type === "scroll_page") {
@@ -3914,7 +3951,7 @@ function PageActionHandler() {
3914
3951
  }
3915
3952
 
3916
3953
  // src/components/SessionControlBar.tsx
3917
- import { useContext as useContext8, useEffect as useEffect20 } from "react";
3954
+ import { useCallback as useCallback13, useContext as useContext8, useEffect as useEffect21, useState as useState14 } from "react";
3918
3955
 
3919
3956
  // src/hooks/useActionControl.ts
3920
3957
  import { useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
@@ -3953,11 +3990,11 @@ function useAgentVoiceState() {
3953
3990
  }
3954
3991
 
3955
3992
  // src/hooks/useAudioLevelBars.ts
3956
- import { useEffect as useEffect18, useRef as useRef10, useState as useState13 } from "react";
3993
+ import { useEffect as useEffect18, useRef as useRef11, useState as useState13 } from "react";
3957
3994
  var TALKING_LEVEL_THRESHOLD = 0.2;
3958
3995
  var TALKING_HOLD_MS = 400;
3959
3996
  function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowthPx, noiseGate }) {
3960
- const barRefs = useRef10([]);
3997
+ const barRefs = useRef11([]);
3961
3998
  const [isTalking, setIsTalking] = useState13(false);
3962
3999
  useEffect18(() => {
3963
4000
  if (!mediaStreamTrack) {
@@ -4010,15 +4047,15 @@ function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowth
4010
4047
  }
4011
4048
 
4012
4049
  // src/hooks/useIdleAutoPause.ts
4013
- import { useCallback as useCallback11, useEffect as useEffect19, useRef as useRef11 } from "react";
4050
+ import { useCallback as useCallback11, useEffect as useEffect19, useRef as useRef12 } from "react";
4014
4051
  function useIdleAutoPause({
4015
4052
  enabled,
4016
4053
  active,
4017
4054
  isHeld,
4018
4055
  pause
4019
4056
  }) {
4020
- const timerRef = useRef11(null);
4021
- const pauseRef = useRef11(pause);
4057
+ const timerRef = useRef12(null);
4058
+ const pauseRef = useRef12(pause);
4022
4059
  pauseRef.current = pause;
4023
4060
  const clearTimer = useCallback11(() => {
4024
4061
  if (timerRef.current) {
@@ -4045,15 +4082,79 @@ function useIdleAutoPause({
4045
4082
  return { reportActivity };
4046
4083
  }
4047
4084
 
4085
+ // src/hooks/useKeyboardPushToTalk.ts
4086
+ import { useEffect as useEffect20, useRef as useRef13 } from "react";
4087
+ function isEditableTarget() {
4088
+ const el = document.activeElement;
4089
+ if (!el)
4090
+ return false;
4091
+ const tag = el.tagName;
4092
+ return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || el.isContentEditable;
4093
+ }
4094
+ function useKeyboardPushToTalk({
4095
+ enabled,
4096
+ onStart,
4097
+ onCommit,
4098
+ onKeyUsed
4099
+ }) {
4100
+ const handlers = useRef13({ onStart, onCommit, onKeyUsed });
4101
+ handlers.current = { onStart, onCommit, onKeyUsed };
4102
+ useEffect20(() => {
4103
+ if (!enabled)
4104
+ return;
4105
+ let keyHeld = false;
4106
+ const release = () => {
4107
+ if (!keyHeld)
4108
+ return;
4109
+ keyHeld = false;
4110
+ handlers.current.onCommit();
4111
+ };
4112
+ const onKeyDown = (event) => {
4113
+ if (event.code !== PUSH_TO_TALK_KEY || event.repeat)
4114
+ return;
4115
+ if (isEditableTarget())
4116
+ return;
4117
+ event.preventDefault();
4118
+ if (keyHeld)
4119
+ return;
4120
+ keyHeld = true;
4121
+ handlers.current.onKeyUsed?.();
4122
+ handlers.current.onStart();
4123
+ };
4124
+ const onKeyUp = (event) => {
4125
+ if (event.code !== PUSH_TO_TALK_KEY)
4126
+ return;
4127
+ event.preventDefault();
4128
+ release();
4129
+ };
4130
+ const onWindowBlur = () => release();
4131
+ const onVisibilityChange = () => {
4132
+ if (document.hidden)
4133
+ release();
4134
+ };
4135
+ document.addEventListener("keydown", onKeyDown);
4136
+ document.addEventListener("keyup", onKeyUp);
4137
+ window.addEventListener("blur", onWindowBlur);
4138
+ document.addEventListener("visibilitychange", onVisibilityChange);
4139
+ return () => {
4140
+ release();
4141
+ document.removeEventListener("keydown", onKeyDown);
4142
+ document.removeEventListener("keyup", onKeyUp);
4143
+ window.removeEventListener("blur", onWindowBlur);
4144
+ document.removeEventListener("visibilitychange", onVisibilityChange);
4145
+ };
4146
+ }, [enabled]);
4147
+ }
4148
+
4048
4149
  // src/hooks/useLiveUserTranscript.ts
4049
4150
  import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
4050
- import { useRef as useRef12 } from "react";
4151
+ import { useRef as useRef14 } from "react";
4051
4152
  function useLiveUserTranscript(active) {
4052
4153
  const transcriptions = useSharedTranscriptions();
4053
4154
  const { localParticipant } = useLocalParticipant6();
4054
4155
  const localIdentity = localParticipant.identity;
4055
- const priorStreamIdsRef = useRef12(new Set);
4056
- const wasActiveRef = useRef12(false);
4156
+ const priorStreamIdsRef = useRef14(new Set);
4157
+ const wasActiveRef = useRef14(false);
4057
4158
  const userStreams = transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity);
4058
4159
  if (active && !wasActiveRef.current) {
4059
4160
  priorStreamIdsRef.current = new Set(userStreams.map((s) => s.streamInfo.id));
@@ -4134,13 +4235,93 @@ function PausedCountdown({ secondsRemaining }) {
4134
4235
  });
4135
4236
  }
4136
4237
 
4137
- // src/components/TapToTalkMic.tsx
4238
+ // src/components/PushToTalkHint.tsx
4138
4239
  import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
4240
+ function PushToTalkHint() {
4241
+ return /* @__PURE__ */ jsxs6("div", {
4242
+ className: cn("skippr:absolute skippr:top-full skippr:left-2 skippr:mt-2 skippr:flex skippr:w-fit skippr:items-center skippr:gap-1.5 skippr:whitespace-nowrap skippr:rounded-full skippr:bg-[#f4ecd8] skippr:px-2.5 skippr:py-1 skippr:text-[10px] skippr:font-medium skippr:text-black skippr:shadow-[0_4px_14px_rgba(0,0,0,0.12)] skippr:[animation:skippr-agent-in_200ms_ease-out]"),
4243
+ children: [
4244
+ /* @__PURE__ */ jsx8("span", {
4245
+ children: "Hold the"
4246
+ }),
4247
+ /* @__PURE__ */ jsxs6("kbd", {
4248
+ className: "skippr:flex skippr:items-center skippr:gap-0.5 skippr:rounded skippr:border skippr:border-black/25 skippr:bg-white/70 skippr:px-1.5 skippr:py-0.5 skippr:font-mono skippr:text-[11px] skippr:leading-none skippr:text-black",
4249
+ children: [
4250
+ /* @__PURE__ */ jsx8("span", {
4251
+ children: "~"
4252
+ }),
4253
+ /* @__PURE__ */ jsx8("span", {
4254
+ className: "skippr:text-black/40",
4255
+ children: "/"
4256
+ }),
4257
+ /* @__PURE__ */ jsx8("span", {
4258
+ children: "`"
4259
+ })
4260
+ ]
4261
+ }),
4262
+ /* @__PURE__ */ jsx8("span", {
4263
+ children: "tilde / backquote key to talk"
4264
+ })
4265
+ ]
4266
+ });
4267
+ }
4268
+
4269
+ // src/components/PushToTalkMic.tsx
4270
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
4271
+ function PushToTalkMic({
4272
+ isCapturingSpeech,
4273
+ showLabel,
4274
+ onStart,
4275
+ onCommit
4276
+ }) {
4277
+ const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
4278
+ const label = isCapturingSpeech ? "Release to send" : "Hold to talk";
4279
+ const withLabel = isCapturingSpeech || showLabel;
4280
+ return /* @__PURE__ */ jsxs7("button", {
4281
+ type: "button",
4282
+ onPointerDown: onStart,
4283
+ onPointerUp: onCommit,
4284
+ onPointerLeave: onCommit,
4285
+ onPointerCancel: onCommit,
4286
+ "aria-label": "Hold to talk",
4287
+ "aria-pressed": isCapturingSpeech,
4288
+ title: label,
4289
+ "data-holding": isCapturingSpeech,
4290
+ className: cn("skippr:relative 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 skippr:touch-none skippr:select-none", withLabel ? "skippr:px-3.5" : "skippr:w-[38px]", isCapturingSpeech ? "skippr:scale-[0.94] skippr:shadow-inner skippr:animate-skippr-ptt-transmit skippr:transition-transform skippr:duration-100 skippr:ease-out skippr:motion-reduce:animate-none skippr:motion-reduce:scale-100" : "skippr:shadow-[0_2px_6px_rgba(0,0,0,0.28)] skippr:ring-1 skippr:ring-white/15 skippr:transition-transform skippr:duration-200 skippr:ease-[cubic-bezier(0.34,1.56,0.64,1)] skippr:hover:bg-[#3a384b]"),
4291
+ children: [
4292
+ /* @__PURE__ */ jsx9("span", {
4293
+ className: "skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center",
4294
+ children: isCapturingSpeech ? /* @__PURE__ */ jsx9(Radio, {
4295
+ className: "skippr:size-5 skippr:text-brand"
4296
+ }) : /* @__PURE__ */ jsx9(Mic, {
4297
+ className: "skippr:size-5"
4298
+ })
4299
+ }),
4300
+ withLabel && /* @__PURE__ */ jsx9("span", {
4301
+ className: "skippr:whitespace-nowrap skippr:text-[13px] skippr:font-medium",
4302
+ children: label
4303
+ }),
4304
+ isCapturingSpeech && isTalking && /* @__PURE__ */ jsx9("span", {
4305
+ className: "skippr:flex skippr:h-6 skippr:shrink-0 skippr:items-center skippr:gap-[3px]",
4306
+ children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx9("span", {
4307
+ ref: (el) => {
4308
+ barRefs.current[index2] = el;
4309
+ },
4310
+ className: "skippr:w-[3px] skippr:rounded-full skippr:bg-white skippr:transition-[height] skippr:duration-75",
4311
+ style: { height: 5 }
4312
+ }, index2))
4313
+ })
4314
+ ]
4315
+ });
4316
+ }
4317
+
4318
+ // src/components/TapToTalkMic.tsx
4319
+ import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
4139
4320
  function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
4140
4321
  const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
4141
4322
  const label = isCapturingSpeech ? "Tap to send" : "Tap to talk";
4142
4323
  const withLabel = isCapturingSpeech || showLabel;
4143
- return /* @__PURE__ */ jsxs6("button", {
4324
+ return /* @__PURE__ */ jsxs8("button", {
4144
4325
  type: "button",
4145
4326
  onClick: onToggle,
4146
4327
  "aria-label": "Tap to talk",
@@ -4148,22 +4329,22 @@ function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
4148
4329
  title: label,
4149
4330
  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
4331
  children: [
4151
- /* @__PURE__ */ jsx8("span", {
4332
+ /* @__PURE__ */ jsx10("span", {
4152
4333
  className: "skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center",
4153
- children: isCapturingSpeech ? /* @__PURE__ */ jsx8(Square, {
4334
+ children: isCapturingSpeech ? /* @__PURE__ */ jsx10(Square, {
4154
4335
  className: "skippr:size-4 skippr:text-brand",
4155
4336
  fill: "currentColor"
4156
- }) : /* @__PURE__ */ jsx8(Mic, {
4337
+ }) : /* @__PURE__ */ jsx10(Mic, {
4157
4338
  className: "skippr:size-5"
4158
4339
  })
4159
4340
  }),
4160
- withLabel && /* @__PURE__ */ jsx8("span", {
4341
+ withLabel && /* @__PURE__ */ jsx10("span", {
4161
4342
  className: "skippr:whitespace-nowrap skippr:text-[13px] skippr:font-medium",
4162
4343
  children: label
4163
4344
  }),
4164
- isCapturingSpeech && isTalking && /* @__PURE__ */ jsx8("span", {
4345
+ isCapturingSpeech && isTalking && /* @__PURE__ */ jsx10("span", {
4165
4346
  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", {
4347
+ children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx10("span", {
4167
4348
  ref: (el) => {
4168
4349
  barRefs.current[index2] = el;
4169
4350
  },
@@ -4176,7 +4357,7 @@ function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
4176
4357
  }
4177
4358
 
4178
4359
  // src/components/SessionControlBar.tsx
4179
- import { jsx as jsx9, jsxs as jsxs7, Fragment } from "react/jsx-runtime";
4360
+ import { jsx as jsx11, jsxs as jsxs9, Fragment } from "react/jsx-runtime";
4180
4361
  var STANDBY_BAR_WIDTH = 168;
4181
4362
  var READY_BAR_WIDTH = 238;
4182
4363
  var PAUSED_BAR_WIDTH = 248;
@@ -4209,21 +4390,21 @@ function AgentActivity({
4209
4390
  noiseGate: AGENT_NOISE_GATE
4210
4391
  });
4211
4392
  const label = isActing ? "Working" : AGENT_STATE_LABELS[state] ?? "";
4212
- return /* @__PURE__ */ jsxs7("span", {
4393
+ return /* @__PURE__ */ jsxs9("span", {
4213
4394
  role: "status",
4214
4395
  className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-bubble",
4215
4396
  "aria-label": isActing ? "Agent is acting" : `Agent is ${state}`,
4216
4397
  children: [
4217
- /* @__PURE__ */ jsx9("span", {
4398
+ /* @__PURE__ */ jsx11("span", {
4218
4399
  className: "skippr:flex skippr:size-5 skippr:shrink-0 skippr:items-center skippr:justify-center",
4219
- children: isActing ? /* @__PURE__ */ jsx9(MousePointerClick, {
4400
+ children: isActing ? /* @__PURE__ */ jsx11(MousePointerClick, {
4220
4401
  strokeWidth: 2,
4221
4402
  className: "skippr:size-5 skippr:[animation:skippr-finger-tap_1.1s_ease-in-out_infinite]"
4222
- }) : /* @__PURE__ */ jsxs7(Fragment, {
4403
+ }) : /* @__PURE__ */ jsxs9(Fragment, {
4223
4404
  children: [
4224
- state === "speaking" && /* @__PURE__ */ jsx9("span", {
4405
+ state === "speaking" && /* @__PURE__ */ jsx11("span", {
4225
4406
  className: "skippr:flex skippr:h-5 skippr:items-center skippr:gap-[2px]",
4226
- children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */ jsx9("span", {
4407
+ children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */ jsx11("span", {
4227
4408
  ref: (el) => {
4228
4409
  barRefs.current[index2] = el;
4229
4410
  },
@@ -4231,21 +4412,21 @@ function AgentActivity({
4231
4412
  style: { height: AGENT_BAR_IDLE_HEIGHT_PX }
4232
4413
  }, index2))
4233
4414
  }),
4234
- state === "thinking" && /* @__PURE__ */ jsxs7("span", {
4415
+ state === "thinking" && /* @__PURE__ */ jsxs9("span", {
4235
4416
  className: "skippr:flex skippr:items-center skippr:gap-[3px]",
4236
4417
  children: [
4237
- /* @__PURE__ */ jsx9("span", {
4418
+ /* @__PURE__ */ jsx11("span", {
4238
4419
  className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:0ms]"
4239
4420
  }),
4240
- /* @__PURE__ */ jsx9("span", {
4421
+ /* @__PURE__ */ jsx11("span", {
4241
4422
  className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:150ms]"
4242
4423
  }),
4243
- /* @__PURE__ */ jsx9("span", {
4424
+ /* @__PURE__ */ jsx11("span", {
4244
4425
  className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:300ms]"
4245
4426
  })
4246
4427
  ]
4247
4428
  }),
4248
- state === "listening" && /* @__PURE__ */ jsxs7("svg", {
4429
+ state === "listening" && /* @__PURE__ */ jsxs9("svg", {
4249
4430
  viewBox: "0 0 24 24",
4250
4431
  className: "skippr:size-5",
4251
4432
  fill: "none",
@@ -4255,10 +4436,10 @@ function AgentActivity({
4255
4436
  strokeLinejoin: "round",
4256
4437
  "aria-hidden": "true",
4257
4438
  children: [
4258
- /* @__PURE__ */ jsx9("path", {
4439
+ /* @__PURE__ */ jsx11("path", {
4259
4440
  d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"
4260
4441
  }),
4261
- /* @__PURE__ */ jsx9("circle", {
4442
+ /* @__PURE__ */ jsx11("circle", {
4262
4443
  cx: "12",
4263
4444
  cy: "12",
4264
4445
  r: "2.5",
@@ -4271,7 +4452,7 @@ function AgentActivity({
4271
4452
  ]
4272
4453
  })
4273
4454
  }),
4274
- /* @__PURE__ */ jsx9("span", {
4455
+ /* @__PURE__ */ jsx11("span", {
4275
4456
  className: "skippr:text-[11px] skippr:font-medium skippr:capitalize",
4276
4457
  children: label
4277
4458
  })
@@ -4312,12 +4493,14 @@ function SessionControlBar() {
4312
4493
  const { state, mediaStreamTrack: agentMediaStreamTrack } = useAgentVoiceState();
4313
4494
  const { actionsActive, actionsPaused: actionsPaused2, togglePaused } = useActionControl();
4314
4495
  const { isHeld, countdown, toggle: togglePause } = useSessionHoldContext();
4315
- const tapToTalk = agentControls?.tapToTalk === true;
4496
+ const micMode = agentControls?.micMode;
4497
+ const pushOrTapMicMode = isRequestResponseMicMode(micMode);
4498
+ const isPushToTalk = micMode === MIC_MODE.PushToTalk;
4316
4499
  const agentActive = state === "speaking" || state === "thinking";
4317
- const { isCapturingSpeech, toggle: toggleTapToTalk } = useTapToTalkContext();
4500
+ const { isCapturingSpeech, toggle: toggleTapToTalk, start, commit } = useVoiceTurnContext();
4318
4501
  const liveUserTranscript = useLiveUserTranscript(isCapturingSpeech);
4319
4502
  const { reportActivity } = useIdleAutoPause({
4320
- enabled: tapToTalk,
4503
+ enabled: pushOrTapMicMode,
4321
4504
  active: agentActive || isCapturingSpeech,
4322
4505
  isHeld,
4323
4506
  pause: () => {
@@ -4325,15 +4508,34 @@ function SessionControlBar() {
4325
4508
  togglePause();
4326
4509
  }
4327
4510
  });
4328
- useEffect20(() => {
4511
+ const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState14(false);
4512
+ const startPushToTalk = useCallback13(() => {
4513
+ start();
4514
+ reportActivity();
4515
+ }, [start, reportActivity]);
4516
+ const commitPushToTalk = useCallback13(() => {
4517
+ commit();
4518
+ reportActivity();
4519
+ }, [commit, reportActivity]);
4520
+ const dismissPushToTalkHint = useCallback13(() => {
4521
+ setPushToTalkHintSeen(true);
4522
+ }, []);
4523
+ useKeyboardPushToTalk({
4524
+ enabled: isPushToTalk,
4525
+ onStart: startPushToTalk,
4526
+ onCommit: commitPushToTalk,
4527
+ onKeyUsed: dismissPushToTalkHint
4528
+ });
4529
+ useEffect21(() => {
4329
4530
  if (isHeld)
4330
4531
  minimizePanel();
4331
4532
  }, [isHeld, minimizePanel]);
4332
4533
  const isReady = state === "listening" || state === "thinking" || state === "speaking";
4333
4534
  const { barRefs, isTalking } = useMicLevel(isReady && !isMuted && !textMode && !isHeld);
4535
+ const showPushToTalkHint = isPushToTalk && isReady && !isHeld && !isCapturingSpeech && !isPanelOpen && !pushToTalkHintSeen;
4334
4536
  const showScreenShareToggle = captureMode === CAPTURE_MODE.Screenshare;
4335
4537
  const showActionControl = captureMode === CAPTURE_MODE.Auto && actionsActive;
4336
- const tapToTalkAgentBusy = agentActive || showActionControl && !actionsPaused2;
4538
+ const voiceTurnAgentBusy = agentActive || showActionControl && !actionsPaused2;
4337
4539
  const screenShareExtra = showScreenShareToggle ? SCREEN_SHARE_EXTRA_WIDTH : 0;
4338
4540
  const actionControlExtra = showActionControl ? ACTION_CONTROL_EXTRA_WIDTH : 0;
4339
4541
  let barWidth = STANDBY_BAR_WIDTH;
@@ -4360,93 +4562,98 @@ function SessionControlBar() {
4360
4562
  return;
4361
4563
  action();
4362
4564
  };
4363
- const panelToggleButton = /* @__PURE__ */ jsx9("button", {
4565
+ const panelToggleButton = /* @__PURE__ */ jsx11("button", {
4364
4566
  type: "button",
4365
4567
  onClick: ifNotDragged(togglePanel),
4366
4568
  "aria-label": isPanelOpen ? "Close panel" : agendaModule && !textMode ? "Open agenda" : "Open chat",
4367
4569
  className: cn(SQUARE_BUTTON, "skippr:text-neutral-700", textMode ? "skippr:hover:bg-neutral-100" : "skippr:bg-neutral-100 skippr:hover:bg-neutral-200"),
4368
- children: /* @__PURE__ */ jsx9(MessageSquare, {
4570
+ children: /* @__PURE__ */ jsx11(MessageSquare, {
4369
4571
  className: "skippr:size-5"
4370
4572
  })
4371
4573
  });
4372
- return /* @__PURE__ */ jsxs7("div", {
4574
+ return /* @__PURE__ */ jsxs9("div", {
4373
4575
  ref: controlBarRef,
4374
4576
  style: { bottom: launcherBottomPx },
4375
4577
  className: cn("skippr:fixed skippr:z-[9999] skippr:touch-none skippr:cursor-grab", position === "right" ? "skippr:right-3" : "skippr:left-3"),
4376
4578
  children: [
4377
- isCapturingSpeech && !isPanelOpen && /* @__PURE__ */ jsx9("div", {
4579
+ isCapturingSpeech && !isPanelOpen && /* @__PURE__ */ jsx11("div", {
4378
4580
  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", {
4581
+ children: liveUserTranscript ? liveUserTranscript : /* @__PURE__ */ jsx11("span", {
4380
4582
  className: "skippr:text-white/60",
4381
4583
  children: "Listening…"
4382
4584
  })
4383
4585
  }),
4384
- /* @__PURE__ */ jsxs7("div", {
4385
- style: { width: isReady && tapToTalk ? "auto" : barWidth },
4586
+ /* @__PURE__ */ jsxs9("div", {
4587
+ style: { width: isReady && pushOrTapMicMode ? "auto" : barWidth },
4386
4588
  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")),
4387
4589
  children: [
4388
- !isReady && /* @__PURE__ */ jsxs7("span", {
4590
+ !isReady && /* @__PURE__ */ jsxs9("span", {
4389
4591
  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]",
4390
4592
  children: [
4391
- /* @__PURE__ */ jsxs7("span", {
4593
+ /* @__PURE__ */ jsxs9("span", {
4392
4594
  className: "skippr:flex skippr:items-center skippr:gap-[3px]",
4393
4595
  children: [
4394
- /* @__PURE__ */ jsx9("span", {
4596
+ /* @__PURE__ */ jsx11("span", {
4395
4597
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:0ms]"
4396
4598
  }),
4397
- /* @__PURE__ */ jsx9("span", {
4599
+ /* @__PURE__ */ jsx11("span", {
4398
4600
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:150ms]"
4399
4601
  }),
4400
- /* @__PURE__ */ jsx9("span", {
4602
+ /* @__PURE__ */ jsx11("span", {
4401
4603
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:300ms]"
4402
4604
  })
4403
4605
  ]
4404
4606
  }),
4405
- /* @__PURE__ */ jsx9("span", {
4607
+ /* @__PURE__ */ jsx11("span", {
4406
4608
  children: "Standing by…"
4407
4609
  })
4408
4610
  ]
4409
4611
  }),
4410
- isReady && /* @__PURE__ */ jsxs7("div", {
4612
+ isReady && /* @__PURE__ */ jsxs9("div", {
4411
4613
  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"),
4412
4614
  children: [
4413
- /* @__PURE__ */ jsx9("button", {
4615
+ /* @__PURE__ */ jsx11("button", {
4414
4616
  type: "button",
4415
4617
  onClick: ifNotDragged(togglePause),
4416
4618
  "aria-label": isHeld ? "Resume" : "Pause",
4417
4619
  title: isHeld ? "Resume" : "Pause",
4418
4620
  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"),
4419
- children: isHeld ? /* @__PURE__ */ jsx9(Play, {
4621
+ children: isHeld ? /* @__PURE__ */ jsx11(Play, {
4420
4622
  className: "skippr:size-5",
4421
4623
  fill: "currentColor"
4422
- }) : /* @__PURE__ */ jsx9(Pause, {
4624
+ }) : /* @__PURE__ */ jsx11(Pause, {
4423
4625
  className: "skippr:size-5",
4424
4626
  fill: "currentColor"
4425
4627
  })
4426
4628
  }),
4427
- isHeld ? /* @__PURE__ */ jsxs7(Fragment, {
4629
+ isHeld ? /* @__PURE__ */ jsxs9(Fragment, {
4428
4630
  children: [
4429
- /* @__PURE__ */ jsx9(PausedCountdown, {
4631
+ /* @__PURE__ */ jsx11(PausedCountdown, {
4430
4632
  secondsRemaining: countdown
4431
4633
  }),
4432
4634
  panelToggleButton
4433
4635
  ]
4434
- }) : /* @__PURE__ */ jsxs7(Fragment, {
4636
+ }) : /* @__PURE__ */ jsxs9(Fragment, {
4435
4637
  children: [
4436
- !textMode && tapToTalk && /* @__PURE__ */ jsxs7("div", {
4638
+ !textMode && pushOrTapMicMode && /* @__PURE__ */ jsxs9("div", {
4437
4639
  className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:gap-2",
4438
4640
  children: [
4439
- /* @__PURE__ */ jsx9(TapToTalkMic, {
4641
+ micMode === MIC_MODE.PushToTalk ? /* @__PURE__ */ jsx11(PushToTalkMic, {
4642
+ isCapturingSpeech,
4643
+ showLabel: !voiceTurnAgentBusy,
4644
+ onStart: startPushToTalk,
4645
+ onCommit: commitPushToTalk
4646
+ }) : /* @__PURE__ */ jsx11(TapToTalkMic, {
4440
4647
  isCapturingSpeech,
4441
- showLabel: !tapToTalkAgentBusy,
4648
+ showLabel: !voiceTurnAgentBusy,
4442
4649
  onToggle: () => {
4443
4650
  toggleTapToTalk();
4444
4651
  reportActivity();
4445
4652
  }
4446
4653
  }),
4447
- tapToTalkAgentBusy && /* @__PURE__ */ jsx9("span", {
4654
+ voiceTurnAgentBusy && /* @__PURE__ */ jsx11("span", {
4448
4655
  className: "skippr:flex skippr:items-center skippr:[animation:skippr-agent-in_200ms_ease-out_240ms_both]",
4449
- children: /* @__PURE__ */ jsx9(AgentActivity, {
4656
+ children: /* @__PURE__ */ jsx11(AgentActivity, {
4450
4657
  state,
4451
4658
  isActing: showActionControl && !actionsPaused2,
4452
4659
  mediaStreamTrack: agentMediaStreamTrack
@@ -4454,37 +4661,37 @@ function SessionControlBar() {
4454
4661
  })
4455
4662
  ]
4456
4663
  }),
4457
- !textMode && !tapToTalk && /* @__PURE__ */ jsxs7("div", {
4664
+ !textMode && !pushOrTapMicMode && /* @__PURE__ */ jsxs9("div", {
4458
4665
  className: "skippr:relative skippr:h-[38px]",
4459
4666
  style: { width: MIC_REGION_WIDTH },
4460
4667
  children: [
4461
- !isTalking && /* @__PURE__ */ jsx9("span", {
4668
+ !isTalking && /* @__PURE__ */ jsx11("span", {
4462
4669
  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]",
4463
4670
  style: { width: AGENT_ACTIVITY_WIDTH },
4464
- children: /* @__PURE__ */ jsx9(AgentActivity, {
4671
+ children: /* @__PURE__ */ jsx11(AgentActivity, {
4465
4672
  state,
4466
4673
  isActing: showActionControl && !actionsPaused2,
4467
4674
  mediaStreamTrack: agentMediaStreamTrack
4468
4675
  })
4469
4676
  }),
4470
- /* @__PURE__ */ jsxs7("button", {
4677
+ /* @__PURE__ */ jsxs9("button", {
4471
4678
  type: "button",
4472
4679
  onClick: ifNotDragged(() => void toggleMute()),
4473
4680
  "aria-label": isMuted ? "Unmute" : "Mute",
4474
4681
  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"),
4475
4682
  style: { width: isTalking ? MIC_REGION_WIDTH : MIC_SQUARE_WIDTH },
4476
4683
  children: [
4477
- /* @__PURE__ */ jsx9("span", {
4684
+ /* @__PURE__ */ jsx11("span", {
4478
4685
  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"),
4479
- children: isMuted ? /* @__PURE__ */ jsx9(MicOff, {
4686
+ children: isMuted ? /* @__PURE__ */ jsx11(MicOff, {
4480
4687
  className: "skippr:size-5"
4481
- }) : /* @__PURE__ */ jsx9(Mic, {
4688
+ }) : /* @__PURE__ */ jsx11(Mic, {
4482
4689
  className: "skippr:size-5"
4483
4690
  })
4484
4691
  }),
4485
- /* @__PURE__ */ jsx9("span", {
4692
+ /* @__PURE__ */ jsx11("span", {
4486
4693
  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"),
4487
- children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx9("span", {
4694
+ children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx11("span", {
4488
4695
  ref: (el) => {
4489
4696
  barRefs.current[index2] = el;
4490
4697
  },
@@ -4496,28 +4703,28 @@ function SessionControlBar() {
4496
4703
  })
4497
4704
  ]
4498
4705
  }),
4499
- showScreenShareToggle && /* @__PURE__ */ jsx9("button", {
4706
+ showScreenShareToggle && /* @__PURE__ */ jsx11("button", {
4500
4707
  type: "button",
4501
4708
  onClick: ifNotDragged(() => void toggleScreenShare()),
4502
4709
  "aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
4503
4710
  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"),
4504
- children: isScreenSharing ? /* @__PURE__ */ jsx9(MonitorOff, {
4711
+ children: isScreenSharing ? /* @__PURE__ */ jsx11(MonitorOff, {
4505
4712
  className: "skippr:size-5"
4506
- }) : /* @__PURE__ */ jsx9(Monitor, {
4713
+ }) : /* @__PURE__ */ jsx11(Monitor, {
4507
4714
  className: "skippr:size-5"
4508
4715
  })
4509
4716
  }),
4510
4717
  panelToggleButton,
4511
- showActionControl && /* @__PURE__ */ jsx9("button", {
4718
+ showActionControl && /* @__PURE__ */ jsx11("button", {
4512
4719
  type: "button",
4513
4720
  onClick: ifNotDragged(() => void togglePaused()),
4514
4721
  "aria-label": actionsPaused2 ? "Resume actions" : "Stop actions",
4515
4722
  title: actionsPaused2 ? "Resume" : "Stop",
4516
4723
  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"),
4517
- children: actionsPaused2 ? /* @__PURE__ */ jsx9(Play, {
4724
+ children: actionsPaused2 ? /* @__PURE__ */ jsx11(Play, {
4518
4725
  className: "skippr:size-5",
4519
4726
  fill: "currentColor"
4520
- }) : /* @__PURE__ */ jsx9(Square, {
4727
+ }) : /* @__PURE__ */ jsx11(Square, {
4521
4728
  className: "skippr:size-5",
4522
4729
  fill: "currentColor"
4523
4730
  })
@@ -4528,27 +4735,28 @@ function SessionControlBar() {
4528
4735
  }, textMode ? "ready-text" : "ready")
4529
4736
  ]
4530
4737
  }),
4531
- isReady && !isDragging && /* @__PURE__ */ jsx9("button", {
4738
+ showPushToTalkHint && /* @__PURE__ */ jsx11(PushToTalkHint, {}),
4739
+ isReady && !isDragging && /* @__PURE__ */ jsx11("button", {
4532
4740
  type: "button",
4533
4741
  onClick: ifNotDragged(() => void pauseSession()),
4534
4742
  disabled: isPausing,
4535
4743
  "aria-label": "End session",
4536
4744
  "aria-busy": isPausing,
4537
4745
  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"),
4538
- children: /* @__PURE__ */ jsxs7("span", {
4746
+ children: /* @__PURE__ */ jsxs9("span", {
4539
4747
  className: "skippr:relative skippr:flex skippr:size-5 skippr:items-center skippr:justify-center",
4540
4748
  children: [
4541
- /* @__PURE__ */ jsx9(X, {
4749
+ /* @__PURE__ */ jsx11(X, {
4542
4750
  className: cn("skippr:size-4 skippr:transition-opacity skippr:duration-200", isPausing && "skippr:opacity-40"),
4543
4751
  strokeWidth: 2.5
4544
4752
  }),
4545
- isPausing && /* @__PURE__ */ jsxs7("svg", {
4753
+ isPausing && /* @__PURE__ */ jsxs9("svg", {
4546
4754
  viewBox: "0 0 24 24",
4547
4755
  fill: "none",
4548
4756
  "aria-hidden": "true",
4549
4757
  className: "skippr:absolute skippr:inset-0 skippr:size-full skippr:animate-spin skippr:motion-reduce:hidden",
4550
4758
  children: [
4551
- /* @__PURE__ */ jsx9("circle", {
4759
+ /* @__PURE__ */ jsx11("circle", {
4552
4760
  cx: "12",
4553
4761
  cy: "12",
4554
4762
  r: "10.5",
@@ -4556,7 +4764,7 @@ function SessionControlBar() {
4556
4764
  strokeOpacity: "0.2",
4557
4765
  strokeWidth: "1.5"
4558
4766
  }),
4559
- /* @__PURE__ */ jsx9("circle", {
4767
+ /* @__PURE__ */ jsx11("circle", {
4560
4768
  cx: "12",
4561
4769
  cy: "12",
4562
4770
  r: "10.5",
@@ -4575,9 +4783,9 @@ function SessionControlBar() {
4575
4783
  }
4576
4784
 
4577
4785
  // src/components/ShadowHost.tsx
4578
- import { useLayoutEffect as useLayoutEffect2, useRef as useRef13, useState as useState14 } from "react";
4786
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef15, useState as useState15 } from "react";
4579
4787
  import { createPortal } from "react-dom";
4580
- import { jsx as jsx10, Fragment as Fragment2 } from "react/jsx-runtime";
4788
+ import { jsx as jsx12, Fragment as Fragment2 } from "react/jsx-runtime";
4581
4789
  var PROPERTIES_STYLE_ID = "skippr-tw-properties";
4582
4790
  var PROPERTY_RULE = /@property\s+[^{]+\{[^}]*\}/g;
4583
4791
  function hoistTailwindProperties(css) {
@@ -4592,10 +4800,10 @@ function hoistTailwindProperties(css) {
4592
4800
  return css.replace(PROPERTY_RULE, "");
4593
4801
  }
4594
4802
  function ShadowHost({ children }) {
4595
- const hostRef = useRef13(null);
4596
- const [shadowRoot, setShadowRoot] = useState14(null);
4803
+ const hostRef = useRef15(null);
4804
+ const [shadowRoot, setShadowRoot] = useState15(null);
4597
4805
  const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
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}}`;
4806
+ @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-2{left:calc(var(--skippr-spacing)*2)}.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-fit{width:fit-content}.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\\:scale-\\[0\\.94\\]{scale:.94}.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-ptt-transmit{animation:1.4s ease-out infinite skippr-ptt-transmit}.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{border-radius:.25rem}.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-black\\/25{border-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:border-black\\/25{border-color:color-mix(in oklab,var(--skippr-color-black)25%,transparent)}}.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-\\[\\#f4ecd8\\]{background-color:#f4ecd8}.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\\:bg-white\\/70{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/70{background-color:color-mix(in oklab,var(--skippr-color-white)70%,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-none{--tw-leading:1;line-height:1}.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,.skippr\\:text-black\\/40{color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:text-black\\/40{color:color-mix(in oklab,var(--skippr-color-black)40%,transparent)}}.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_2px_6px_rgba\\(0\\,0\\,0\\,0\\.28\\)\\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#00000047);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\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:0 4px 14px 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-inner{--tw-shadow:inset 0 2px 4px 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\\: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\\/15{--tw-ring-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-white\\/15{--tw-ring-color:color-mix(in oklab,var(--skippr-color-white)15%,transparent)}}.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-100{--tw-duration:.1s;transition-duration:.1s}.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-\\[cubic-bezier\\(0\\.34\\,1\\.56\\,0\\.64\\,1\\)\\]{--tw-ease:cubic-bezier(.34,1.56,.64,1);transition-timing-function:cubic-bezier(.34,1.56,.64,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\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.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-ptt-transmit{0%{box-shadow:0 0 #2bc0ae99,0 0 #2bc0ae59}70%{box-shadow:0 0 0 9px #2bc0ae00,0 0 0 16px #2bc0ae00}to{box-shadow:0 0 #2bc0ae00,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}}`;
4599
4807
  useLayoutEffect2(() => {
4600
4808
  const host = hostRef.current;
4601
4809
  if (!host || !css)
@@ -4610,17 +4818,17 @@ function ShadowHost({ children }) {
4610
4818
  setShadowRoot(root);
4611
4819
  }, [css]);
4612
4820
  if (!css)
4613
- return /* @__PURE__ */ jsx10(Fragment2, {
4821
+ return /* @__PURE__ */ jsx12(Fragment2, {
4614
4822
  children
4615
4823
  });
4616
- return /* @__PURE__ */ jsx10("div", {
4824
+ return /* @__PURE__ */ jsx12("div", {
4617
4825
  ref: hostRef,
4618
4826
  children: shadowRoot && createPortal(children, shadowRoot)
4619
4827
  });
4620
4828
  }
4621
4829
 
4622
4830
  // src/components/Sidebar.tsx
4623
- import { useContext as useContext13, useEffect as useEffect27 } from "react";
4831
+ import { useContext as useContext13, useEffect as useEffect28 } from "react";
4624
4832
 
4625
4833
  // src/hooks/useCombinedMessages.ts
4626
4834
  import { useContext as useContext9, useMemo as useMemo6 } from "react";
@@ -4655,14 +4863,14 @@ function useChatMessages() {
4655
4863
 
4656
4864
  // src/hooks/useStreamingTranscript.ts
4657
4865
  import { useLocalParticipant as useLocalParticipant10 } from "@livekit/components-react/hooks";
4658
- import { useMemo as useMemo5, useRef as useRef14 } from "react";
4866
+ import { useMemo as useMemo5, useRef as useRef16 } from "react";
4659
4867
  function useStreamingTranscript() {
4660
4868
  const transcriptions = useSharedTranscriptions();
4661
4869
  const { localParticipant } = useLocalParticipant10();
4662
- const { isCapturingSpeech } = useTapToTalkContext();
4870
+ const { isCapturingSpeech } = useVoiceTurnContext();
4663
4871
  const localIdentity = localParticipant.identity;
4664
- const priorUserStreamIdsRef = useRef14(new Set);
4665
- const wasCapturingSpeechRef = useRef14(false);
4872
+ const priorUserStreamIdsRef = useRef16(new Set);
4873
+ const wasCapturingSpeechRef = useRef16(false);
4666
4874
  if (isCapturingSpeech && !wasCapturingSpeechRef.current) {
4667
4875
  priorUserStreamIdsRef.current = new Set(transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity).map((stream) => stream.streamInfo.id));
4668
4876
  }
@@ -4723,7 +4931,7 @@ function useCombinedMessages() {
4723
4931
  }
4724
4932
 
4725
4933
  // src/hooks/usePhaseUpdates.ts
4726
- import { useCallback as useCallback13, useContext as useContext10, useEffect as useEffect21 } from "react";
4934
+ import { useCallback as useCallback14, useContext as useContext10, useEffect as useEffect22 } from "react";
4727
4935
  function parsePhases(json) {
4728
4936
  try {
4729
4937
  const data = JSON.parse(json);
@@ -4734,10 +4942,10 @@ function parsePhases(json) {
4734
4942
  return null;
4735
4943
  }
4736
4944
  function usePhaseUpdates() {
4737
- const parse = useCallback13(parsePhases, []);
4945
+ const parse = useCallback14(parsePhases, []);
4738
4946
  const livePhases = useAgentState("phases", parse, []);
4739
4947
  const ctx = useContext10(LiveAgentContext);
4740
- useEffect21(() => {
4948
+ useEffect22(() => {
4741
4949
  if (livePhases.length > 0)
4742
4950
  ctx?.setPhasesSnapshot(livePhases);
4743
4951
  }, [livePhases, ctx?.setPhasesSnapshot]);
@@ -4746,7 +4954,7 @@ function usePhaseUpdates() {
4746
4954
  }
4747
4955
 
4748
4956
  // src/hooks/useSessionRemaining.ts
4749
- import { useEffect as useEffect22, useRef as useRef15, useState as useState15 } from "react";
4957
+ import { useEffect as useEffect23, useRef as useRef17, useState as useState16 } from "react";
4750
4958
 
4751
4959
  // src/lib/format.ts
4752
4960
  function formatTime(seconds) {
@@ -4762,9 +4970,9 @@ function parseNumber(s) {
4762
4970
  // src/hooks/useSessionRemaining.ts
4763
4971
  function useSessionRemaining() {
4764
4972
  const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
4765
- const endTimeRef = useRef15(null);
4766
- const [remaining, setRemaining] = useState15(null);
4767
- useEffect22(() => {
4973
+ const endTimeRef = useRef17(null);
4974
+ const [remaining, setRemaining] = useState16(null);
4975
+ useEffect23(() => {
4768
4976
  if (maxCallDuration === null || endTimeRef.current !== null)
4769
4977
  return;
4770
4978
  const endTime = Date.now() + maxCallDuration * 1000;
@@ -4781,13 +4989,13 @@ function useSessionRemaining() {
4781
4989
  }
4782
4990
 
4783
4991
  // src/components/ChatHeader.tsx
4784
- import { useContext as useContext12, useRef as useRef17 } from "react";
4992
+ import { useContext as useContext12, useRef as useRef19 } from "react";
4785
4993
 
4786
4994
  // src/hooks/useElapsedSeconds.ts
4787
- import { useEffect as useEffect23, useState as useState16 } from "react";
4995
+ import { useEffect as useEffect24, useState as useState17 } from "react";
4788
4996
  function useElapsedSeconds(isRunning) {
4789
- const [elapsed, setElapsed] = useState16(0);
4790
- useEffect23(() => {
4997
+ const [elapsed, setElapsed] = useState17(0);
4998
+ useEffect24(() => {
4791
4999
  if (!isRunning) {
4792
5000
  setElapsed(0);
4793
5001
  return;
@@ -4804,7 +5012,7 @@ function useElapsedSeconds(isRunning) {
4804
5012
 
4805
5013
  // src/hooks/useTextMode.ts
4806
5014
  import { useLocalParticipant as useLocalParticipant11 } from "@livekit/components-react/hooks";
4807
- import { useCallback as useCallback14, useContext as useContext11, useRef as useRef16 } from "react";
5015
+ import { useCallback as useCallback15, useContext as useContext11, useRef as useRef18 } from "react";
4808
5016
  var textEncoder6 = new TextEncoder;
4809
5017
  function useTextMode() {
4810
5018
  const ctx = useContext11(LiveAgentContext);
@@ -4813,8 +5021,8 @@ function useTextMode() {
4813
5021
  }
4814
5022
  const { textMode, setTextModeState, sidebarTab, setSidebarTab } = ctx;
4815
5023
  const { localParticipant } = useLocalParticipant11();
4816
- const confirmedTextModeRef = useRef16(false);
4817
- const toggleTextMode = useCallback14(async () => {
5024
+ const confirmedTextModeRef = useRef18(false);
5025
+ const toggleTextMode = useCallback15(async () => {
4818
5026
  const next = !textMode;
4819
5027
  setTextModeState(next);
4820
5028
  if (next && sidebarTab === "agenda") {
@@ -4836,7 +5044,7 @@ function useTextMode() {
4836
5044
  }
4837
5045
 
4838
5046
  // src/components/ChatHeader.tsx
4839
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
5047
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
4840
5048
  function ChatHeader() {
4841
5049
  const ctx = useContext12(LiveAgentContext);
4842
5050
  if (!ctx) {
@@ -4854,37 +5062,37 @@ function ChatHeader() {
4854
5062
  setIsDragging
4855
5063
  } = ctx;
4856
5064
  const elapsed = useElapsedSeconds(isConnected);
4857
- const headerRef = useRef17(null);
5065
+ const headerRef = useRef19(null);
4858
5066
  const followsPanel = variant === "floating" && isPanelOpen;
4859
5067
  const dragFollowers = followsPanel ? [panelRef, controlBarRef] : null;
4860
5068
  const { wasDraggedRef } = useLauncherDrag(headerRef, commitLauncherDrop, dragFollowers, setIsDragging);
4861
- return /* @__PURE__ */ jsxs8("header", {
5069
+ return /* @__PURE__ */ jsxs10("header", {
4862
5070
  ref: headerRef,
4863
5071
  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"),
4864
5072
  children: [
4865
- /* @__PURE__ */ jsxs8("div", {
5073
+ /* @__PURE__ */ jsxs10("div", {
4866
5074
  className: "skippr:flex skippr:items-center skippr:gap-3",
4867
5075
  children: [
4868
- isConnected && /* @__PURE__ */ jsx11(HeaderModeToggle, {}),
4869
- isConnected && /* @__PURE__ */ jsxs8("div", {
5076
+ isConnected && /* @__PURE__ */ jsx13(HeaderModeToggle, {}),
5077
+ isConnected && /* @__PURE__ */ jsxs10("div", {
4870
5078
  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",
4871
5079
  children: [
4872
- /* @__PURE__ */ jsxs8("span", {
5080
+ /* @__PURE__ */ jsxs10("span", {
4873
5081
  className: "skippr:relative skippr:flex skippr:size-1.5",
4874
5082
  children: [
4875
- /* @__PURE__ */ jsx11("span", {
5083
+ /* @__PURE__ */ jsx13("span", {
4876
5084
  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"
4877
5085
  }),
4878
- /* @__PURE__ */ jsx11("span", {
5086
+ /* @__PURE__ */ jsx13("span", {
4879
5087
  className: "skippr:relative skippr:inline-flex skippr:size-1.5 skippr:rounded-full skippr:bg-red-400"
4880
5088
  })
4881
5089
  ]
4882
5090
  }),
4883
- /* @__PURE__ */ jsx11("span", {
5091
+ /* @__PURE__ */ jsx13("span", {
4884
5092
  className: "skippr:text-[10px] skippr:font-medium skippr:text-primary-foreground",
4885
5093
  children: "REC"
4886
5094
  }),
4887
- /* @__PURE__ */ jsx11("span", {
5095
+ /* @__PURE__ */ jsx13("span", {
4888
5096
  className: "skippr:text-[10px] skippr:font-mono skippr:text-primary-foreground",
4889
5097
  children: formatTime(elapsed)
4890
5098
  })
@@ -4892,7 +5100,7 @@ function ChatHeader() {
4892
5100
  })
4893
5101
  ]
4894
5102
  }),
4895
- minimizable && /* @__PURE__ */ jsx11("button", {
5103
+ minimizable && /* @__PURE__ */ jsx13("button", {
4896
5104
  type: "button",
4897
5105
  onClick: () => {
4898
5106
  if (!wasDraggedRef.current)
@@ -4901,7 +5109,7 @@ function ChatHeader() {
4901
5109
  "aria-label": "Close",
4902
5110
  title: "Close",
4903
5111
  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",
4904
- children: /* @__PURE__ */ jsx11(X, {
5112
+ children: /* @__PURE__ */ jsx13(X, {
4905
5113
  className: "skippr:h-4 skippr:w-4"
4906
5114
  })
4907
5115
  })
@@ -4911,12 +5119,12 @@ function ChatHeader() {
4911
5119
  function HeaderModeToggle() {
4912
5120
  const { textMode, toggleTextMode } = useTextMode();
4913
5121
  const { isHeld } = useSessionHoldContext();
4914
- return /* @__PURE__ */ jsxs8("fieldset", {
5122
+ return /* @__PURE__ */ jsxs10("fieldset", {
4915
5123
  "aria-label": "Response mode",
4916
5124
  disabled: isHeld,
4917
5125
  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",
4918
5126
  children: [
4919
- /* @__PURE__ */ jsx11("button", {
5127
+ /* @__PURE__ */ jsx13("button", {
4920
5128
  type: "button",
4921
5129
  "aria-pressed": !textMode,
4922
5130
  disabled: isHeld,
@@ -4927,7 +5135,7 @@ function HeaderModeToggle() {
4927
5135
  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"),
4928
5136
  children: "Voice"
4929
5137
  }),
4930
- /* @__PURE__ */ jsx11("button", {
5138
+ /* @__PURE__ */ jsx13("button", {
4931
5139
  type: "button",
4932
5140
  "aria-pressed": textMode,
4933
5141
  disabled: isHeld,
@@ -4943,26 +5151,26 @@ function HeaderModeToggle() {
4943
5151
  }
4944
5152
 
4945
5153
  // src/components/LoadingDots.tsx
4946
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
5154
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
4947
5155
  function LoadingDots({ label }) {
4948
- return /* @__PURE__ */ jsxs9("div", {
5156
+ return /* @__PURE__ */ jsxs11("div", {
4949
5157
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:py-4",
4950
5158
  children: [
4951
- /* @__PURE__ */ jsxs9("div", {
5159
+ /* @__PURE__ */ jsxs11("div", {
4952
5160
  className: "skippr:flex skippr:gap-1",
4953
5161
  children: [
4954
- /* @__PURE__ */ jsx12("span", {
5162
+ /* @__PURE__ */ jsx14("span", {
4955
5163
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:0ms]"
4956
5164
  }),
4957
- /* @__PURE__ */ jsx12("span", {
5165
+ /* @__PURE__ */ jsx14("span", {
4958
5166
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:150ms]"
4959
5167
  }),
4960
- /* @__PURE__ */ jsx12("span", {
5168
+ /* @__PURE__ */ jsx14("span", {
4961
5169
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:300ms]"
4962
5170
  })
4963
5171
  ]
4964
5172
  }),
4965
- /* @__PURE__ */ jsx12("p", {
5173
+ /* @__PURE__ */ jsx14("p", {
4966
5174
  className: "skippr:text-xs skippr:text-muted-foreground",
4967
5175
  children: label
4968
5176
  })
@@ -4971,11 +5179,11 @@ function LoadingDots({ label }) {
4971
5179
  }
4972
5180
 
4973
5181
  // src/components/LoginFlow.tsx
4974
- import { useCallback as useCallback15, useEffect as useEffect24, useRef as useRef18, useState as useState17 } from "react";
5182
+ import { useCallback as useCallback16, useEffect as useEffect25, useRef as useRef20, useState as useState18 } from "react";
4975
5183
 
4976
5184
  // src/components/ui/button.tsx
4977
5185
  import { forwardRef as forwardRef3 } from "react";
4978
- import { jsx as jsx13 } from "react/jsx-runtime";
5186
+ import { jsx as jsx15 } from "react/jsx-runtime";
4979
5187
  var variantClasses = {
4980
5188
  default: "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90",
4981
5189
  destructive: "skippr:bg-destructive skippr:text-white skippr:hover:bg-destructive/90",
@@ -4994,7 +5202,7 @@ var sizeClasses = {
4994
5202
  "icon-lg": "skippr:size-10"
4995
5203
  };
4996
5204
  var Button = forwardRef3(({ className, variant = "default", size = "default", ...props }, ref) => {
4997
- return /* @__PURE__ */ jsx13("button", {
5205
+ return /* @__PURE__ */ jsx15("button", {
4998
5206
  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),
4999
5207
  ref,
5000
5208
  ...props
@@ -5003,28 +5211,28 @@ var Button = forwardRef3(({ className, variant = "default", size = "default", ..
5003
5211
  Button.displayName = "Button";
5004
5212
 
5005
5213
  // src/components/LoginFlow.tsx
5006
- import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
5214
+ import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
5007
5215
  var OTP_LENGTH = 6;
5008
5216
  var DIGIT_KEYS = ["d0", "d1", "d2", "d3", "d4", "d5"];
5009
5217
  function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
5010
- const [step, setStep] = useState17("email");
5011
- const [email, setEmail] = useState17("");
5012
- const handleRequestOtp = useCallback15(async (emailValue) => {
5218
+ const [step, setStep] = useState18("email");
5219
+ const [email, setEmail] = useState18("");
5220
+ const handleRequestOtp = useCallback16(async (emailValue) => {
5013
5221
  const success = await requestOtp(emailValue);
5014
5222
  if (success)
5015
5223
  setStep("otp");
5016
5224
  }, [requestOtp]);
5017
- const handleVerifyOtp = useCallback15(async (code) => {
5225
+ const handleVerifyOtp = useCallback16(async (code) => {
5018
5226
  await verifyOtp(email, code);
5019
5227
  }, [verifyOtp, email]);
5020
- const handleBack = useCallback15(() => {
5228
+ const handleBack = useCallback16(() => {
5021
5229
  setStep("email");
5022
5230
  }, []);
5023
- const handleResend = useCallback15(async () => {
5231
+ const handleResend = useCallback16(async () => {
5024
5232
  await requestOtp(email);
5025
5233
  }, [requestOtp, email]);
5026
5234
  if (step === "otp") {
5027
- return /* @__PURE__ */ jsx14(OtpStep, {
5235
+ return /* @__PURE__ */ jsx16(OtpStep, {
5028
5236
  email,
5029
5237
  onSubmit: handleVerifyOtp,
5030
5238
  onResend: handleResend,
@@ -5033,7 +5241,7 @@ function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
5033
5241
  isSubmitting
5034
5242
  });
5035
5243
  }
5036
- return /* @__PURE__ */ jsx14(EmailStep, {
5244
+ return /* @__PURE__ */ jsx16(EmailStep, {
5037
5245
  email,
5038
5246
  onEmailChange: setEmail,
5039
5247
  onSubmit: handleRequestOtp,
@@ -5047,30 +5255,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
5047
5255
  if (email.trim())
5048
5256
  onSubmit(email.trim());
5049
5257
  }
5050
- return /* @__PURE__ */ jsxs10("div", {
5258
+ return /* @__PURE__ */ jsxs12("div", {
5051
5259
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
5052
5260
  children: [
5053
- /* @__PURE__ */ jsxs10("div", {
5261
+ /* @__PURE__ */ jsxs12("div", {
5054
5262
  className: "skippr:mb-4 skippr:text-center",
5055
5263
  children: [
5056
- /* @__PURE__ */ jsx14(Mail, {
5264
+ /* @__PURE__ */ jsx16(Mail, {
5057
5265
  className: "skippr:mx-auto skippr:mb-2 skippr:size-6 skippr:text-primary"
5058
5266
  }),
5059
- /* @__PURE__ */ jsx14("p", {
5267
+ /* @__PURE__ */ jsx16("p", {
5060
5268
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
5061
5269
  children: "Sign in to continue"
5062
5270
  }),
5063
- /* @__PURE__ */ jsx14("p", {
5271
+ /* @__PURE__ */ jsx16("p", {
5064
5272
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
5065
5273
  children: "Your email will be used to identify you across sessions"
5066
5274
  })
5067
5275
  ]
5068
5276
  }),
5069
- /* @__PURE__ */ jsxs10("form", {
5277
+ /* @__PURE__ */ jsxs12("form", {
5070
5278
  onSubmit: handleSubmit,
5071
5279
  className: "skippr:flex skippr:flex-col skippr:gap-3",
5072
5280
  children: [
5073
- /* @__PURE__ */ jsx14("input", {
5281
+ /* @__PURE__ */ jsx16("input", {
5074
5282
  type: "email",
5075
5283
  placeholder: "you@example.com",
5076
5284
  value: email,
@@ -5079,15 +5287,15 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
5079
5287
  required: true,
5080
5288
  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"
5081
5289
  }),
5082
- /* @__PURE__ */ jsx14(Button, {
5290
+ /* @__PURE__ */ jsx16(Button, {
5083
5291
  type: "submit",
5084
5292
  disabled: isSubmitting || !email.trim(),
5085
5293
  className: "skippr:w-full",
5086
- children: isSubmitting ? /* @__PURE__ */ jsx14(LoaderCircle, {
5294
+ children: isSubmitting ? /* @__PURE__ */ jsx16(LoaderCircle, {
5087
5295
  className: "skippr:size-4 skippr:animate-spin"
5088
5296
  }) : "Continue"
5089
5297
  }),
5090
- error && /* @__PURE__ */ jsx14("p", {
5298
+ error && /* @__PURE__ */ jsx16("p", {
5091
5299
  className: "skippr:text-xs skippr:text-center skippr:text-destructive",
5092
5300
  children: error
5093
5301
  })
@@ -5097,30 +5305,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
5097
5305
  });
5098
5306
  }
5099
5307
  function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
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(() => {
5308
+ const [digits, setDigits] = useState18(Array(OTP_LENGTH).fill(""));
5309
+ const [resendCooldown, setResendCooldown] = useState18(0);
5310
+ const inputRefs = useRef20([]);
5311
+ const submittedRef = useRef20(false);
5312
+ useEffect25(() => {
5105
5313
  inputRefs.current[0]?.focus();
5106
5314
  }, []);
5107
- useEffect24(() => {
5315
+ useEffect25(() => {
5108
5316
  if (error)
5109
5317
  submittedRef.current = false;
5110
5318
  }, [error]);
5111
- useEffect24(() => {
5319
+ useEffect25(() => {
5112
5320
  if (resendCooldown <= 0)
5113
5321
  return;
5114
5322
  const timer = setTimeout(() => setResendCooldown((c) => c - 1), 1000);
5115
5323
  return () => clearTimeout(timer);
5116
5324
  }, [resendCooldown]);
5117
- const submitCode = useCallback15((code) => {
5325
+ const submitCode = useCallback16((code) => {
5118
5326
  if (submittedRef.current || isSubmitting)
5119
5327
  return;
5120
5328
  submittedRef.current = true;
5121
5329
  onSubmit(code);
5122
5330
  }, [onSubmit, isSubmitting]);
5123
- const handleDigitChange = useCallback15((index2, value) => {
5331
+ const handleDigitChange = useCallback16((index2, value) => {
5124
5332
  const digit = value.replace(/\D/g, "").slice(-1);
5125
5333
  const newDigits = [...digits];
5126
5334
  newDigits[index2] = digit;
@@ -5134,12 +5342,12 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
5134
5342
  submitCode(code);
5135
5343
  }
5136
5344
  }, [digits, submitCode]);
5137
- const handleKeyDown = useCallback15((index2, e) => {
5345
+ const handleKeyDown = useCallback16((index2, e) => {
5138
5346
  if (e.key === "Backspace" && !digits[index2] && index2 > 0) {
5139
5347
  inputRefs.current[index2 - 1]?.focus();
5140
5348
  }
5141
5349
  }, [digits]);
5142
- const handlePaste = useCallback15((e) => {
5350
+ const handlePaste = useCallback16((e) => {
5143
5351
  e.preventDefault();
5144
5352
  const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, OTP_LENGTH);
5145
5353
  if (pasted.length > 0) {
@@ -5167,22 +5375,22 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
5167
5375
  submittedRef.current = false;
5168
5376
  inputRefs.current[0]?.focus();
5169
5377
  }
5170
- return /* @__PURE__ */ jsxs10("div", {
5378
+ return /* @__PURE__ */ jsxs12("div", {
5171
5379
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
5172
5380
  children: [
5173
- /* @__PURE__ */ jsxs10("div", {
5381
+ /* @__PURE__ */ jsxs12("div", {
5174
5382
  className: "skippr:mb-4 skippr:text-center",
5175
5383
  children: [
5176
- /* @__PURE__ */ jsx14("p", {
5384
+ /* @__PURE__ */ jsx16("p", {
5177
5385
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
5178
5386
  children: "Enter verification code"
5179
5387
  }),
5180
- /* @__PURE__ */ jsxs10("p", {
5388
+ /* @__PURE__ */ jsxs12("p", {
5181
5389
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
5182
5390
  children: [
5183
5391
  "We sent a 6-digit code to",
5184
5392
  " ",
5185
- /* @__PURE__ */ jsx14("span", {
5393
+ /* @__PURE__ */ jsx16("span", {
5186
5394
  className: "skippr:font-medium skippr:text-foreground",
5187
5395
  children: email
5188
5396
  })
@@ -5190,13 +5398,13 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
5190
5398
  })
5191
5399
  ]
5192
5400
  }),
5193
- /* @__PURE__ */ jsxs10("form", {
5401
+ /* @__PURE__ */ jsxs12("form", {
5194
5402
  onSubmit: handleSubmit,
5195
5403
  className: "skippr:flex skippr:flex-col skippr:gap-3",
5196
5404
  children: [
5197
- /* @__PURE__ */ jsx14("div", {
5405
+ /* @__PURE__ */ jsx16("div", {
5198
5406
  className: "skippr:flex skippr:justify-center skippr:gap-1.5",
5199
- children: digits.map((digit, index2) => /* @__PURE__ */ jsx14("input", {
5407
+ children: digits.map((digit, index2) => /* @__PURE__ */ jsx16("input", {
5200
5408
  ref: (el) => {
5201
5409
  inputRefs.current[index2] = el;
5202
5410
  },
@@ -5211,29 +5419,29 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
5211
5419
  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"
5212
5420
  }, DIGIT_KEYS[index2]))
5213
5421
  }),
5214
- error && /* @__PURE__ */ jsx14("p", {
5422
+ error && /* @__PURE__ */ jsx16("p", {
5215
5423
  className: "skippr:text-xs skippr:text-center skippr:text-destructive",
5216
5424
  children: error
5217
5425
  }),
5218
- /* @__PURE__ */ jsx14(Button, {
5426
+ /* @__PURE__ */ jsx16(Button, {
5219
5427
  type: "submit",
5220
5428
  disabled: isSubmitting || digits.join("").length !== OTP_LENGTH,
5221
5429
  className: "skippr:w-full",
5222
- children: isSubmitting ? /* @__PURE__ */ jsx14(LoaderCircle, {
5430
+ children: isSubmitting ? /* @__PURE__ */ jsx16(LoaderCircle, {
5223
5431
  className: "skippr:size-4 skippr:animate-spin"
5224
5432
  }) : "Verify"
5225
5433
  }),
5226
- /* @__PURE__ */ jsxs10("div", {
5434
+ /* @__PURE__ */ jsxs12("div", {
5227
5435
  className: "skippr:flex skippr:items-center skippr:justify-between skippr:text-xs",
5228
5436
  children: [
5229
- /* @__PURE__ */ jsx14("button", {
5437
+ /* @__PURE__ */ jsx16("button", {
5230
5438
  type: "button",
5231
5439
  onClick: onBack,
5232
5440
  disabled: isSubmitting,
5233
5441
  className: "skippr:text-muted-foreground hover:skippr:text-foreground skippr:transition-colors disabled:skippr:opacity-50",
5234
5442
  children: "Change email"
5235
5443
  }),
5236
- /* @__PURE__ */ jsx14("button", {
5444
+ /* @__PURE__ */ jsx16("button", {
5237
5445
  type: "button",
5238
5446
  onClick: handleResend,
5239
5447
  disabled: isSubmitting || resendCooldown > 0,
@@ -5249,17 +5457,17 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
5249
5457
  }
5250
5458
 
5251
5459
  // src/components/MessageList.tsx
5252
- import { useCallback as useCallback16, useLayoutEffect as useLayoutEffect3, useRef as useRef20, useState as useState19 } from "react";
5460
+ import { useCallback as useCallback17, useLayoutEffect as useLayoutEffect3, useRef as useRef22, useState as useState20 } from "react";
5253
5461
 
5254
5462
  // src/components/ChatInput.tsx
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";
5463
+ import { useEffect as useEffect26, useRef as useRef21, useState as useState19 } from "react";
5464
+ import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
5257
5465
  var MAX_INPUT_HEIGHT = 60;
5258
5466
  function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5259
- const [inputText, setInputText] = useState18("");
5260
- const textareaRef = useRef19(null);
5467
+ const [inputText, setInputText] = useState19("");
5468
+ const textareaRef = useRef21(null);
5261
5469
  const canSend = inputText.trim().length > 0 && !isSendingChat;
5262
- useEffect25(() => {
5470
+ useEffect26(() => {
5263
5471
  if (autoFocus)
5264
5472
  textareaRef.current?.focus();
5265
5473
  }, [autoFocus]);
@@ -5290,13 +5498,13 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5290
5498
  handleSubmit(e);
5291
5499
  }
5292
5500
  }
5293
- return /* @__PURE__ */ jsx15("form", {
5501
+ return /* @__PURE__ */ jsx17("form", {
5294
5502
  onSubmit: handleSubmit,
5295
5503
  className: "skippr:border-t skippr:border-border skippr:p-3",
5296
- children: /* @__PURE__ */ jsxs11("div", {
5504
+ children: /* @__PURE__ */ jsxs13("div", {
5297
5505
  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",
5298
5506
  children: [
5299
- /* @__PURE__ */ jsx15("textarea", {
5507
+ /* @__PURE__ */ jsx17("textarea", {
5300
5508
  ref: textareaRef,
5301
5509
  rows: 1,
5302
5510
  value: inputText,
@@ -5306,12 +5514,12 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5306
5514
  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",
5307
5515
  style: { maxHeight: `${MAX_INPUT_HEIGHT}px` }
5308
5516
  }),
5309
- /* @__PURE__ */ jsx15("button", {
5517
+ /* @__PURE__ */ jsx17("button", {
5310
5518
  type: "submit",
5311
5519
  disabled: !canSend,
5312
5520
  "aria-label": "Send message",
5313
5521
  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"),
5314
- children: /* @__PURE__ */ jsx15(Send, {
5522
+ children: /* @__PURE__ */ jsx17(Send, {
5315
5523
  className: "skippr:size-3.5"
5316
5524
  })
5317
5525
  })
@@ -5321,7 +5529,7 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
5321
5529
  }
5322
5530
 
5323
5531
  // src/components/ChatMessage.tsx
5324
- import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
5532
+ import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
5325
5533
  function formatTimestamp(ts) {
5326
5534
  return new Date(ts).toLocaleTimeString("en-US", {
5327
5535
  hour: "numeric",
@@ -5331,16 +5539,16 @@ function formatTimestamp(ts) {
5331
5539
  }
5332
5540
  function ChatMessage({ message }) {
5333
5541
  const isAgent = message.role === "assistant";
5334
- return /* @__PURE__ */ jsx16("div", {
5542
+ return /* @__PURE__ */ jsx18("div", {
5335
5543
  className: cn("skippr:flex skippr:gap-2", isAgent ? "skippr:items-start" : "skippr:justify-end"),
5336
- children: /* @__PURE__ */ jsxs12("div", {
5544
+ children: /* @__PURE__ */ jsxs14("div", {
5337
5545
  className: cn("skippr:flex skippr:max-w-[80%] skippr:flex-col", isAgent ? "skippr:items-start" : "skippr:items-end"),
5338
5546
  children: [
5339
- /* @__PURE__ */ jsx16("div", {
5547
+ /* @__PURE__ */ jsx18("div", {
5340
5548
  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"),
5341
5549
  children: message.content
5342
5550
  }),
5343
- message.timestamp && /* @__PURE__ */ jsx16("span", {
5551
+ message.timestamp && /* @__PURE__ */ jsx18("span", {
5344
5552
  className: "skippr:mt-1 skippr:px-1 skippr:text-[10px] skippr:text-muted-foreground/60",
5345
5553
  children: formatTimestamp(message.timestamp)
5346
5554
  })
@@ -5350,70 +5558,70 @@ function ChatMessage({ message }) {
5350
5558
  }
5351
5559
 
5352
5560
  // src/components/PlanCard.tsx
5353
- import { useEffect as useEffect26 } from "react";
5354
- import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
5561
+ import { useEffect as useEffect27 } from "react";
5562
+ import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
5355
5563
  var APPROVE_MESSAGE = "Yes, go ahead.";
5356
5564
  var CANCEL_MESSAGE = "No, cancel that.";
5357
5565
  var COMPLETED_CARD_VISIBLE_MS = 2500;
5358
5566
  function StepIcon({ status }) {
5359
5567
  if (status === "done") {
5360
- return /* @__PURE__ */ jsx17(CircleCheck, {
5568
+ return /* @__PURE__ */ jsx19(CircleCheck, {
5361
5569
  className: "skippr:size-4 skippr:text-chart-3"
5362
5570
  });
5363
5571
  }
5364
5572
  if (status === "failed") {
5365
- return /* @__PURE__ */ jsx17(CircleX, {
5573
+ return /* @__PURE__ */ jsx19(CircleX, {
5366
5574
  className: "skippr:size-4 skippr:text-destructive"
5367
5575
  });
5368
5576
  }
5369
5577
  if (status === "active") {
5370
- return /* @__PURE__ */ jsx17(Circle, {
5578
+ return /* @__PURE__ */ jsx19(Circle, {
5371
5579
  className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
5372
5580
  });
5373
5581
  }
5374
- return /* @__PURE__ */ jsx17(Circle, {
5582
+ return /* @__PURE__ */ jsx19(Circle, {
5375
5583
  className: "skippr:size-4 skippr:text-muted-foreground/30"
5376
5584
  });
5377
5585
  }
5378
5586
  function PlanCard({ plan, sendChatMessage, onDismiss }) {
5379
5587
  const awaitingApproval = plan.state === "proposed";
5380
- useEffect26(() => {
5588
+ useEffect27(() => {
5381
5589
  if (plan.state !== "completed")
5382
5590
  return;
5383
5591
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
5384
5592
  return () => clearTimeout(timer);
5385
5593
  }, [plan.state, onDismiss]);
5386
- return /* @__PURE__ */ jsxs13("div", {
5594
+ return /* @__PURE__ */ jsxs15("div", {
5387
5595
  className: "skippr:rounded-2xl skippr:rounded-tl-md skippr:bg-card skippr:p-3.5 skippr:ring-2 skippr:ring-brand",
5388
5596
  children: [
5389
- /* @__PURE__ */ jsx17("p", {
5597
+ /* @__PURE__ */ jsx19("p", {
5390
5598
  className: "skippr:mb-3 skippr:text-sm skippr:font-semibold skippr:leading-snug skippr:text-foreground",
5391
5599
  children: "Plan"
5392
5600
  }),
5393
- /* @__PURE__ */ jsx17("div", {
5601
+ /* @__PURE__ */ jsx19("div", {
5394
5602
  className: "skippr:space-y-2",
5395
- children: plan.steps.map((step) => /* @__PURE__ */ jsxs13("div", {
5603
+ children: plan.steps.map((step) => /* @__PURE__ */ jsxs15("div", {
5396
5604
  className: "skippr:flex skippr:items-center skippr:gap-2",
5397
5605
  children: [
5398
- /* @__PURE__ */ jsx17(StepIcon, {
5606
+ /* @__PURE__ */ jsx19(StepIcon, {
5399
5607
  status: step.status
5400
5608
  }),
5401
- /* @__PURE__ */ jsx17("p", {
5609
+ /* @__PURE__ */ jsx19("p", {
5402
5610
  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"),
5403
5611
  children: step.label
5404
5612
  })
5405
5613
  ]
5406
5614
  }, step.index))
5407
5615
  }),
5408
- awaitingApproval && /* @__PURE__ */ jsxs13("div", {
5616
+ awaitingApproval && /* @__PURE__ */ jsxs15("div", {
5409
5617
  className: "skippr:mt-3.5 skippr:flex skippr:gap-2",
5410
5618
  children: [
5411
- /* @__PURE__ */ jsx17(Button, {
5619
+ /* @__PURE__ */ jsx19(Button, {
5412
5620
  className: "skippr:flex-1 skippr:py-2",
5413
5621
  onClick: () => sendChatMessage(APPROVE_MESSAGE),
5414
5622
  children: "Approve"
5415
5623
  }),
5416
- /* @__PURE__ */ jsx17(Button, {
5624
+ /* @__PURE__ */ jsx19(Button, {
5417
5625
  variant: "outline",
5418
5626
  className: "skippr:flex-1 skippr:py-2",
5419
5627
  onClick: () => sendChatMessage(CANCEL_MESSAGE),
@@ -5426,26 +5634,26 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
5426
5634
  }
5427
5635
 
5428
5636
  // src/components/TypingIndicator.tsx
5429
- import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
5637
+ import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
5430
5638
  function TypingIndicator() {
5431
- return /* @__PURE__ */ jsx18("div", {
5639
+ return /* @__PURE__ */ jsx20("div", {
5432
5640
  className: "skippr:flex skippr:items-start skippr:gap-2 skippr:animate-skippr-tab-fade",
5433
- children: /* @__PURE__ */ jsxs14("div", {
5641
+ children: /* @__PURE__ */ jsxs16("div", {
5434
5642
  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",
5435
5643
  children: [
5436
- /* @__PURE__ */ jsx18("span", {
5644
+ /* @__PURE__ */ jsx20("span", {
5437
5645
  children: "Agent is analyzing your screen"
5438
5646
  }),
5439
- /* @__PURE__ */ jsxs14("span", {
5647
+ /* @__PURE__ */ jsxs16("span", {
5440
5648
  className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
5441
5649
  children: [
5442
- /* @__PURE__ */ jsx18("span", {
5650
+ /* @__PURE__ */ jsx20("span", {
5443
5651
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:0ms]"
5444
5652
  }),
5445
- /* @__PURE__ */ jsx18("span", {
5653
+ /* @__PURE__ */ jsx20("span", {
5446
5654
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:200ms]"
5447
5655
  }),
5448
- /* @__PURE__ */ jsx18("span", {
5656
+ /* @__PURE__ */ jsx20("span", {
5449
5657
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:400ms]"
5450
5658
  })
5451
5659
  ]
@@ -5456,7 +5664,7 @@ function TypingIndicator() {
5456
5664
  }
5457
5665
 
5458
5666
  // src/components/MessageList.tsx
5459
- import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
5667
+ import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
5460
5668
  var BOTTOM_THRESHOLD_PX = 32;
5461
5669
  function isPlanVisible(plan) {
5462
5670
  return !!plan && plan.steps.length > 0 && plan.state !== "abandoned";
@@ -5470,17 +5678,17 @@ function MessageList({
5470
5678
  autoFocus = false,
5471
5679
  readOnly = false
5472
5680
  }) {
5473
- const containerRef = useRef20(null);
5474
- const isPinnedToBottom = useRef20(true);
5475
- const lastSeenMessageId = useRef20(undefined);
5476
- const [showJumpToLatest, setShowJumpToLatest] = useState19(false);
5681
+ const containerRef = useRef22(null);
5682
+ const isPinnedToBottom = useRef22(true);
5683
+ const lastSeenMessageId = useRef22(undefined);
5684
+ const [showJumpToLatest, setShowJumpToLatest] = useState20(false);
5477
5685
  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
5478
- const [dismissedPlanId, setDismissedPlanId] = useState19(null);
5479
- const dismissPlan = useCallback16(() => {
5686
+ const [dismissedPlanId, setDismissedPlanId] = useState20(null);
5687
+ const dismissPlan = useCallback17(() => {
5480
5688
  if (plan)
5481
5689
  setDismissedPlanId(plan.planId);
5482
5690
  }, [plan]);
5483
- const handleScroll = useCallback16(() => {
5691
+ const handleScroll = useCallback17(() => {
5484
5692
  const container = containerRef.current;
5485
5693
  if (!container)
5486
5694
  return;
@@ -5489,7 +5697,7 @@ function MessageList({
5489
5697
  isPinnedToBottom.current = pinned;
5490
5698
  setShowJumpToLatest(!pinned);
5491
5699
  }, []);
5492
- const jumpToLatest = useCallback16(() => {
5700
+ const jumpToLatest = useCallback17(() => {
5493
5701
  const container = containerRef.current;
5494
5702
  if (!container)
5495
5703
  return;
@@ -5512,49 +5720,49 @@ function MessageList({
5512
5720
  container.scrollTop = container.scrollHeight;
5513
5721
  }, [messages.length, lastMessage?.content]);
5514
5722
  const showTyping = isStreaming && lastMessage?.role === "assistant" && lastMessage.content === "";
5515
- return /* @__PURE__ */ jsxs15("div", {
5723
+ return /* @__PURE__ */ jsxs17("div", {
5516
5724
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
5517
5725
  children: [
5518
- /* @__PURE__ */ jsxs15("div", {
5726
+ /* @__PURE__ */ jsxs17("div", {
5519
5727
  className: "skippr:relative skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
5520
5728
  children: [
5521
- /* @__PURE__ */ jsxs15("div", {
5729
+ /* @__PURE__ */ jsxs17("div", {
5522
5730
  ref: containerRef,
5523
5731
  onScroll: handleScroll,
5524
5732
  className: "skippr:min-h-0 skippr:flex-1 skippr:space-y-4 skippr:overflow-y-auto skippr:p-4 skippr:[overflow-anchor:none]",
5525
5733
  children: [
5526
- messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */ jsx19("p", {
5734
+ messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */ jsx21("p", {
5527
5735
  className: "skippr:px-2 skippr:py-6 skippr:text-center skippr:text-sm skippr:text-muted-foreground",
5528
5736
  children: "No messages in this conversation yet."
5529
- }) : /* @__PURE__ */ jsx19(LoadingDots, {
5737
+ }) : /* @__PURE__ */ jsx21(LoadingDots, {
5530
5738
  label: "Waiting for conversation to begin..."
5531
5739
  })),
5532
- messages.map((message) => /* @__PURE__ */ jsx19(ChatMessage, {
5740
+ messages.map((message) => /* @__PURE__ */ jsx21(ChatMessage, {
5533
5741
  message
5534
5742
  }, message.id)),
5535
- showTyping && /* @__PURE__ */ jsx19(TypingIndicator, {})
5743
+ showTyping && /* @__PURE__ */ jsx21(TypingIndicator, {})
5536
5744
  ]
5537
5745
  }),
5538
- showJumpToLatest && /* @__PURE__ */ jsx19("button", {
5746
+ showJumpToLatest && /* @__PURE__ */ jsx21("button", {
5539
5747
  type: "button",
5540
5748
  onClick: jumpToLatest,
5541
5749
  "aria-label": "Jump to latest message",
5542
5750
  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",
5543
- children: /* @__PURE__ */ jsx19(ChevronDown, {
5751
+ children: /* @__PURE__ */ jsx21(ChevronDown, {
5544
5752
  className: "skippr:size-4"
5545
5753
  })
5546
5754
  })
5547
5755
  ]
5548
5756
  }),
5549
- sendChatMessage && isPlanVisible(plan) && plan.planId !== dismissedPlanId && /* @__PURE__ */ jsx19("div", {
5757
+ sendChatMessage && isPlanVisible(plan) && plan.planId !== dismissedPlanId && /* @__PURE__ */ jsx21("div", {
5550
5758
  className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:p-3",
5551
- children: /* @__PURE__ */ jsx19(PlanCard, {
5759
+ children: /* @__PURE__ */ jsx21(PlanCard, {
5552
5760
  plan,
5553
5761
  sendChatMessage,
5554
5762
  onDismiss: dismissPlan
5555
5763
  }, plan.planId)
5556
5764
  }),
5557
- !readOnly && sendChatMessage && /* @__PURE__ */ jsx19(ChatInput, {
5765
+ !readOnly && sendChatMessage && /* @__PURE__ */ jsx21(ChatInput, {
5558
5766
  sendChatMessage,
5559
5767
  isSendingChat,
5560
5768
  autoFocus
@@ -5564,49 +5772,49 @@ function MessageList({
5564
5772
  }
5565
5773
 
5566
5774
  // src/components/SessionAgenda.tsx
5567
- import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
5775
+ import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
5568
5776
  function SessionAgenda({ phases, hasStarted }) {
5569
5777
  if (phases.length === 0 || !hasStarted) {
5570
- return /* @__PURE__ */ jsx20("div", {
5778
+ return /* @__PURE__ */ jsx22("div", {
5571
5779
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5572
- children: /* @__PURE__ */ jsx20(LoadingDots, {
5780
+ children: /* @__PURE__ */ jsx22(LoadingDots, {
5573
5781
  label: "Waiting for agenda to load..."
5574
5782
  })
5575
5783
  });
5576
5784
  }
5577
- return /* @__PURE__ */ jsx20("div", {
5785
+ return /* @__PURE__ */ jsx22("div", {
5578
5786
  className: "skippr:flex-1 skippr:overflow-y-auto skippr:px-4 skippr:py-4",
5579
- children: /* @__PURE__ */ jsx20("div", {
5787
+ children: /* @__PURE__ */ jsx22("div", {
5580
5788
  className: "skippr:space-y-1",
5581
5789
  children: phases.map((phase) => {
5582
5790
  const isActive = phase.status === "active";
5583
5791
  const isCompleted = phase.status === "completed";
5584
- return /* @__PURE__ */ jsxs16("div", {
5792
+ return /* @__PURE__ */ jsxs18("div", {
5585
5793
  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"),
5586
5794
  children: [
5587
- /* @__PURE__ */ jsx20("div", {
5795
+ /* @__PURE__ */ jsx22("div", {
5588
5796
  className: "skippr:mt-0.5",
5589
- children: isCompleted ? /* @__PURE__ */ jsx20(CircleCheck, {
5797
+ children: isCompleted ? /* @__PURE__ */ jsx22(CircleCheck, {
5590
5798
  className: "skippr:size-4 skippr:text-chart-3"
5591
- }) : isActive ? /* @__PURE__ */ jsx20(Circle, {
5799
+ }) : isActive ? /* @__PURE__ */ jsx22(Circle, {
5592
5800
  className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
5593
- }) : /* @__PURE__ */ jsx20(Circle, {
5801
+ }) : /* @__PURE__ */ jsx22(Circle, {
5594
5802
  className: "skippr:size-4 skippr:text-muted-foreground/30"
5595
5803
  })
5596
5804
  }),
5597
- /* @__PURE__ */ jsxs16("div", {
5805
+ /* @__PURE__ */ jsxs18("div", {
5598
5806
  className: "skippr:min-w-0 skippr:flex-1",
5599
5807
  children: [
5600
- /* @__PURE__ */ jsx20("p", {
5808
+ /* @__PURE__ */ jsx22("p", {
5601
5809
  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"),
5602
5810
  children: phase.name
5603
5811
  }),
5604
- phase.highlights.length > 0 && /* @__PURE__ */ jsx20("ul", {
5812
+ phase.highlights.length > 0 && /* @__PURE__ */ jsx22("ul", {
5605
5813
  className: "skippr:mt-1 skippr:space-y-0.5",
5606
- children: phase.highlights.map((text) => /* @__PURE__ */ jsxs16("li", {
5814
+ children: phase.highlights.map((text) => /* @__PURE__ */ jsxs18("li", {
5607
5815
  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"),
5608
5816
  children: [
5609
- /* @__PURE__ */ jsx20("span", {
5817
+ /* @__PURE__ */ jsx22("span", {
5610
5818
  className: "skippr:size-1 skippr:shrink-0 skippr:rounded-full skippr:bg-current"
5611
5819
  }),
5612
5820
  text
@@ -5623,12 +5831,12 @@ function SessionAgenda({ phases, hasStarted }) {
5623
5831
  }
5624
5832
 
5625
5833
  // src/components/SessionWarningBanner.tsx
5626
- import { jsx as jsx21 } from "react/jsx-runtime";
5834
+ import { jsx as jsx23 } from "react/jsx-runtime";
5627
5835
  var SESSION_WARNING_THRESHOLD_SECS = 60;
5628
5836
  function SessionWarningBanner({ remaining }) {
5629
5837
  if (remaining === null || remaining <= 0 || remaining > SESSION_WARNING_THRESHOLD_SECS)
5630
5838
  return null;
5631
- return /* @__PURE__ */ jsx21("div", {
5839
+ return /* @__PURE__ */ jsx23("div", {
5632
5840
  "data-testid": "session-warning-banner",
5633
5841
  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",
5634
5842
  children: "Session ending soon"
@@ -5636,7 +5844,7 @@ function SessionWarningBanner({ remaining }) {
5636
5844
  }
5637
5845
 
5638
5846
  // src/components/Sidebar.tsx
5639
- import { jsx as jsx22, jsxs as jsxs17, Fragment as Fragment3 } from "react/jsx-runtime";
5847
+ import { jsx as jsx24, jsxs as jsxs19, Fragment as Fragment3 } from "react/jsx-runtime";
5640
5848
  var PANEL_GAP_PX = 12;
5641
5849
  var PANEL_VIEWPORT_MARGIN_PX = 24;
5642
5850
  var PANEL_MAX_HEIGHT_PX = 460;
@@ -5696,7 +5904,7 @@ function Sidebar({
5696
5904
  height: panelExpanded ? availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${availableHeight})`
5697
5905
  };
5698
5906
  }
5699
- useEffect27(() => {
5907
+ useEffect28(() => {
5700
5908
  if (!isSidebar)
5701
5909
  return;
5702
5910
  const prop = position === "right" ? "marginRight" : "marginLeft";
@@ -5710,13 +5918,13 @@ function Sidebar({
5710
5918
  document.body.style.transition = "";
5711
5919
  };
5712
5920
  }, [isSidebar, isPanelOpen, position]);
5713
- return /* @__PURE__ */ jsxs17("div", {
5921
+ return /* @__PURE__ */ jsxs19("div", {
5714
5922
  ref: internalCtx?.panelRef,
5715
5923
  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"),
5716
5924
  style: { width: isPanelOpen ? SIDEBAR_WIDTH : undefined, ...floatingStyle },
5717
5925
  children: [
5718
- !hideHeader && /* @__PURE__ */ jsx22(ChatHeader, {}),
5719
- authFailed ? /* @__PURE__ */ jsx22(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx22(AuthenticatedContent, {
5926
+ !hideHeader && /* @__PURE__ */ jsx24(ChatHeader, {}),
5927
+ authFailed ? /* @__PURE__ */ jsx24(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx24(AuthenticatedContent, {
5720
5928
  isConnected,
5721
5929
  isPaused,
5722
5930
  isPausing,
@@ -5732,12 +5940,12 @@ function Sidebar({
5732
5940
  onTalk: startDefaultSession,
5733
5941
  talkLabel: startSessionLabel,
5734
5942
  talkDisabled
5735
- }) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx22("div", {
5943
+ }) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx24("div", {
5736
5944
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5737
- children: /* @__PURE__ */ jsx22(LoadingDots, {
5945
+ children: /* @__PURE__ */ jsx24(LoadingDots, {
5738
5946
  label: "Loading..."
5739
5947
  })
5740
- }) : /* @__PURE__ */ jsx22(LoginFlow, {
5948
+ }) : /* @__PURE__ */ jsx24(LoginFlow, {
5741
5949
  requestOtp,
5742
5950
  verifyOtp,
5743
5951
  error: authError,
@@ -5769,61 +5977,61 @@ function AuthenticatedContent({
5769
5977
  if (isStarting && !isConnected) {
5770
5978
  transitionLabel = "Reconnecting...";
5771
5979
  }
5772
- return /* @__PURE__ */ jsxs17(Fragment3, {
5980
+ return /* @__PURE__ */ jsxs19(Fragment3, {
5773
5981
  children: [
5774
- isConnected && /* @__PURE__ */ jsx22(ConnectedBanner, {}),
5775
- showAgenda && /* @__PURE__ */ jsxs17("div", {
5982
+ isConnected && /* @__PURE__ */ jsx24(ConnectedBanner, {}),
5983
+ showAgenda && /* @__PURE__ */ jsxs19("div", {
5776
5984
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:border-b skippr:border-border skippr:px-3 skippr:py-1",
5777
5985
  children: [
5778
- /* @__PURE__ */ jsxs17("button", {
5986
+ /* @__PURE__ */ jsxs19("button", {
5779
5987
  type: "button",
5780
5988
  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"),
5781
5989
  onClick: () => onTabChange("chat"),
5782
5990
  children: [
5783
- /* @__PURE__ */ jsx22(MessageCircle, {
5991
+ /* @__PURE__ */ jsx24(MessageCircle, {
5784
5992
  className: "skippr:size-3.5"
5785
5993
  }),
5786
5994
  "Chat",
5787
- activeTab === "chat" && /* @__PURE__ */ jsx22("span", {
5995
+ activeTab === "chat" && /* @__PURE__ */ jsx24("span", {
5788
5996
  className: "skippr:absolute skippr:-bottom-1 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
5789
5997
  })
5790
5998
  ]
5791
5999
  }),
5792
- /* @__PURE__ */ jsxs17("button", {
6000
+ /* @__PURE__ */ jsxs19("button", {
5793
6001
  type: "button",
5794
6002
  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"),
5795
6003
  onClick: () => onTabChange("agenda"),
5796
6004
  children: [
5797
- /* @__PURE__ */ jsx22(Calendar, {
6005
+ /* @__PURE__ */ jsx24(Calendar, {
5798
6006
  className: "skippr:size-3.5"
5799
6007
  }),
5800
6008
  "Agenda",
5801
- activeTab === "agenda" && /* @__PURE__ */ jsx22("span", {
6009
+ activeTab === "agenda" && /* @__PURE__ */ jsx24("span", {
5802
6010
  className: "skippr:absolute skippr:-bottom-1 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
5803
6011
  })
5804
6012
  ]
5805
6013
  })
5806
6014
  ]
5807
6015
  }),
5808
- /* @__PURE__ */ jsx22("div", {
6016
+ /* @__PURE__ */ jsx24("div", {
5809
6017
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
5810
- children: isDisconnecting ? /* @__PURE__ */ jsx22("div", {
6018
+ children: isDisconnecting ? /* @__PURE__ */ jsx24("div", {
5811
6019
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5812
- children: /* @__PURE__ */ jsx22(LoadingDots, {
6020
+ children: /* @__PURE__ */ jsx24(LoadingDots, {
5813
6021
  label: "Ending session..."
5814
6022
  })
5815
- }) : inSession ? /* @__PURE__ */ jsxs17(Fragment3, {
6023
+ }) : inSession ? /* @__PURE__ */ jsxs19(Fragment3, {
5816
6024
  children: [
5817
- transitionLabel && /* @__PURE__ */ jsx22("div", {
6025
+ transitionLabel && /* @__PURE__ */ jsx24("div", {
5818
6026
  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",
5819
6027
  children: transitionLabel
5820
6028
  }),
5821
- /* @__PURE__ */ jsx22(ConnectedBody, {
6029
+ /* @__PURE__ */ jsx24(ConnectedBody, {
5822
6030
  activeTab: effectiveTab,
5823
6031
  autoFocusChat
5824
6032
  })
5825
6033
  ]
5826
- }) : /* @__PURE__ */ jsx22(IdleHistory, {
6034
+ }) : /* @__PURE__ */ jsx24(IdleHistory, {
5827
6035
  activeTab: effectiveTab,
5828
6036
  history: idleHistory,
5829
6037
  onTalk,
@@ -5832,22 +6040,22 @@ function AuthenticatedContent({
5832
6040
  error
5833
6041
  })
5834
6042
  }),
5835
- !hideControls && /* @__PURE__ */ jsx22("div", {
6043
+ !hideControls && /* @__PURE__ */ jsx24("div", {
5836
6044
  className: "skippr:shrink-0 skippr:border-t skippr:border-border",
5837
- children: /* @__PURE__ */ jsxs17("div", {
6045
+ children: /* @__PURE__ */ jsxs19("div", {
5838
6046
  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",
5839
6047
  children: [
5840
- /* @__PURE__ */ jsxs17("svg", {
6048
+ /* @__PURE__ */ jsxs19("svg", {
5841
6049
  viewBox: "21 21 109 109",
5842
6050
  className: "skippr:size-3",
5843
6051
  fill: "none",
5844
6052
  "aria-hidden": "true",
5845
6053
  children: [
5846
- /* @__PURE__ */ jsx22("path", {
6054
+ /* @__PURE__ */ jsx24("path", {
5847
6055
  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",
5848
6056
  fill: "currentColor"
5849
6057
  }),
5850
- /* @__PURE__ */ jsx22("path", {
6058
+ /* @__PURE__ */ jsx24("path", {
5851
6059
  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",
5852
6060
  className: "skippr:fill-brand"
5853
6061
  })
@@ -5861,17 +6069,17 @@ function AuthenticatedContent({
5861
6069
  });
5862
6070
  }
5863
6071
  function AuthError() {
5864
- return /* @__PURE__ */ jsxs17("div", {
6072
+ return /* @__PURE__ */ jsxs19("div", {
5865
6073
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
5866
6074
  children: [
5867
- /* @__PURE__ */ jsx22(CircleAlert, {
6075
+ /* @__PURE__ */ jsx24(CircleAlert, {
5868
6076
  className: "skippr:mb-3 skippr:size-7 skippr:text-destructive"
5869
6077
  }),
5870
- /* @__PURE__ */ jsx22("p", {
6078
+ /* @__PURE__ */ jsx24("p", {
5871
6079
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
5872
6080
  children: "We couldn't verify your session"
5873
6081
  }),
5874
- /* @__PURE__ */ jsx22("p", {
6082
+ /* @__PURE__ */ jsx24("p", {
5875
6083
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
5876
6084
  children: "Please contact administrator."
5877
6085
  })
@@ -5880,7 +6088,7 @@ function AuthError() {
5880
6088
  }
5881
6089
  function ConnectedBanner() {
5882
6090
  const remaining = useSessionRemaining();
5883
- return /* @__PURE__ */ jsx22(SessionWarningBanner, {
6091
+ return /* @__PURE__ */ jsx24(SessionWarningBanner, {
5884
6092
  remaining
5885
6093
  });
5886
6094
  }
@@ -5893,43 +6101,43 @@ function IdleHistory({
5893
6101
  error
5894
6102
  }) {
5895
6103
  if (history2.isLoading) {
5896
- return /* @__PURE__ */ jsx22("div", {
6104
+ return /* @__PURE__ */ jsx24("div", {
5897
6105
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
5898
- children: /* @__PURE__ */ jsx22(LoadingDots, {
6106
+ children: /* @__PURE__ */ jsx24(LoadingDots, {
5899
6107
  label: "Loading conversation..."
5900
6108
  })
5901
6109
  });
5902
6110
  }
5903
- return /* @__PURE__ */ jsxs17("div", {
6111
+ return /* @__PURE__ */ jsxs19("div", {
5904
6112
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
5905
6113
  children: [
5906
- activeTab === "agenda" ? /* @__PURE__ */ jsx22("div", {
6114
+ activeTab === "agenda" ? /* @__PURE__ */ jsx24("div", {
5907
6115
  className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto",
5908
- children: /* @__PURE__ */ jsx22(SessionAgenda, {
6116
+ children: /* @__PURE__ */ jsx24(SessionAgenda, {
5909
6117
  phases: history2.phases,
5910
6118
  hasStarted: history2.phases.length > 0
5911
6119
  })
5912
- }) : /* @__PURE__ */ jsx22(MessageList, {
6120
+ }) : /* @__PURE__ */ jsx24(MessageList, {
5913
6121
  messages: history2.messages,
5914
6122
  isStreaming: false,
5915
6123
  readOnly: true
5916
6124
  }),
5917
- /* @__PURE__ */ jsxs17("div", {
6125
+ /* @__PURE__ */ jsxs19("div", {
5918
6126
  className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:p-3",
5919
6127
  children: [
5920
- /* @__PURE__ */ jsxs17("button", {
6128
+ /* @__PURE__ */ jsxs19("button", {
5921
6129
  type: "button",
5922
6130
  onClick: onTalk,
5923
6131
  disabled: talkDisabled,
5924
6132
  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",
5925
6133
  children: [
5926
- /* @__PURE__ */ jsx22(Mic, {
6134
+ /* @__PURE__ */ jsx24(Mic, {
5927
6135
  className: "skippr:size-4"
5928
6136
  }),
5929
6137
  talkLabel
5930
6138
  ]
5931
6139
  }),
5932
- error && /* @__PURE__ */ jsx22("p", {
6140
+ error && /* @__PURE__ */ jsx24("p", {
5933
6141
  className: "skippr:mt-2 skippr:text-center skippr:text-xs skippr:text-destructive",
5934
6142
  children: error
5935
6143
  })
@@ -5948,17 +6156,17 @@ function ConnectedBody({
5948
6156
  const { agentControls, isPaused } = useLiveAgent();
5949
6157
  const { isHeld } = useSessionHoldContext();
5950
6158
  if (activeTab === "agenda") {
5951
- return /* @__PURE__ */ jsx22("div", {
6159
+ return /* @__PURE__ */ jsx24("div", {
5952
6160
  className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto skippr:animate-skippr-tab-fade",
5953
- children: /* @__PURE__ */ jsx22(SessionAgenda, {
6161
+ children: /* @__PURE__ */ jsx24(SessionAgenda, {
5954
6162
  phases,
5955
6163
  hasStarted: allMessages.length > 0 || agentState === "speaking"
5956
6164
  })
5957
6165
  }, "agenda");
5958
6166
  }
5959
- return /* @__PURE__ */ jsx22("div", {
6167
+ return /* @__PURE__ */ jsx24("div", {
5960
6168
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
5961
- children: /* @__PURE__ */ jsx22(MessageList, {
6169
+ children: /* @__PURE__ */ jsx24(MessageList, {
5962
6170
  messages: allMessages,
5963
6171
  isStreaming: agentState === "speaking",
5964
6172
  sendChatMessage,
@@ -5974,9 +6182,9 @@ function ConnectedBody({
5974
6182
  import { useContext as useContext14 } from "react";
5975
6183
 
5976
6184
  // src/components/Logo.tsx
5977
- import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
6185
+ import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
5978
6186
  function Logo({ className }) {
5979
- return /* @__PURE__ */ jsxs18("svg", {
6187
+ return /* @__PURE__ */ jsxs20("svg", {
5980
6188
  width: "1em",
5981
6189
  height: "1em",
5982
6190
  viewBox: "0 0 200 200",
@@ -5986,20 +6194,20 @@ function Logo({ className }) {
5986
6194
  "aria-label": "Skippr",
5987
6195
  className,
5988
6196
  children: [
5989
- /* @__PURE__ */ jsx23("rect", {
6197
+ /* @__PURE__ */ jsx25("rect", {
5990
6198
  width: "200",
5991
6199
  height: "200",
5992
6200
  rx: "40",
5993
6201
  fill: "#2D2D3F"
5994
6202
  }),
5995
- /* @__PURE__ */ jsxs18("g", {
6203
+ /* @__PURE__ */ jsxs20("g", {
5996
6204
  transform: "translate(100 100) scale(0.8) translate(-100 -100)",
5997
6205
  children: [
5998
- /* @__PURE__ */ jsx23("path", {
6206
+ /* @__PURE__ */ jsx25("path", {
5999
6207
  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",
6000
6208
  fill: "white"
6001
6209
  }),
6002
- /* @__PURE__ */ jsx23("path", {
6210
+ /* @__PURE__ */ jsx25("path", {
6003
6211
  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",
6004
6212
  className: "skippr:fill-brand"
6005
6213
  })
@@ -6010,7 +6218,7 @@ function Logo({ className }) {
6010
6218
  }
6011
6219
 
6012
6220
  // src/components/SidebarTrigger.tsx
6013
- import { jsx as jsx24 } from "react/jsx-runtime";
6221
+ import { jsx as jsx26 } from "react/jsx-runtime";
6014
6222
  function SidebarTrigger() {
6015
6223
  const {
6016
6224
  isPanelOpen,
@@ -6029,23 +6237,23 @@ function SidebarTrigger() {
6029
6237
  if (isMinimized || isConnected || isStarting || isPausing)
6030
6238
  return null;
6031
6239
  const handleClick = isPanelOpen && minimizable ? minimizePanel : togglePanel;
6032
- return /* @__PURE__ */ jsx24("button", {
6240
+ return /* @__PURE__ */ jsx26("button", {
6033
6241
  type: "button",
6034
6242
  onClick: handleClick,
6035
6243
  title: isPanelOpen ? "Close chat" : "Open chat",
6036
6244
  "aria-label": isPanelOpen ? "Close chat" : "Open chat",
6037
6245
  style: { bottom: triggerBottomPx(launcherBottomPx, popsDown) },
6038
6246
  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"),
6039
- children: isPanelOpen ? /* @__PURE__ */ jsx24(ChevronDown, {
6247
+ children: isPanelOpen ? /* @__PURE__ */ jsx26(ChevronDown, {
6040
6248
  className: "skippr:size-5"
6041
- }) : /* @__PURE__ */ jsx24(Logo, {
6249
+ }) : /* @__PURE__ */ jsx26(Logo, {
6042
6250
  className: "skippr:size-12"
6043
6251
  })
6044
6252
  });
6045
6253
  }
6046
6254
 
6047
6255
  // src/components/LiveAgent.tsx
6048
- import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
6256
+ import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
6049
6257
  function readSavedLauncherBottom() {
6050
6258
  try {
6051
6259
  const saved = Number.parseInt(localStorage.getItem("skippr_widget_bottom") ?? "", 10);
@@ -6055,7 +6263,7 @@ function readSavedLauncherBottom() {
6055
6263
  }
6056
6264
  }
6057
6265
  function AgentCursorMount({ animated }) {
6058
- return /* @__PURE__ */ jsx25(AgentCursor, {
6266
+ return /* @__PURE__ */ jsx27(AgentCursor, {
6059
6267
  target: useAgentCursor(),
6060
6268
  animated
6061
6269
  });
@@ -6063,8 +6271,8 @@ function AgentCursorMount({ animated }) {
6063
6271
  function PlanPanelOpener() {
6064
6272
  const plan = usePlanUpdates();
6065
6273
  const { expandPanel } = useLiveAgent();
6066
- const surfacedPlanIdRef = useRef21(null);
6067
- useEffect28(() => {
6274
+ const surfacedPlanIdRef = useRef23(null);
6275
+ useEffect29(() => {
6068
6276
  if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
6069
6277
  return;
6070
6278
  surfacedPlanIdRef.current = plan.planId;
@@ -6104,18 +6312,18 @@ function LiveAgent(props) {
6104
6312
  const auth = useAuth({ appKey });
6105
6313
  const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
6106
6314
  const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
6107
- const [activeModule, setActiveModule] = useState20(null);
6108
- const minimizeOnSessionStart = useCallback17(() => {
6315
+ const [activeModule, setActiveModule] = useState21(null);
6316
+ const minimizeOnSessionStart = useCallback18(() => {
6109
6317
  if (minimizable) {
6110
6318
  setIsMinimized(true);
6111
6319
  setIsPanelOpen(false);
6112
6320
  }
6113
6321
  }, [minimizable]);
6114
- const expandOnSessionStartError = useCallback17(() => {
6322
+ const expandOnSessionStartError = useCallback18(() => {
6115
6323
  setIsMinimized(false);
6116
6324
  setIsPanelOpen(true);
6117
6325
  }, []);
6118
- const minimizeOnSessionDisconnect = useCallback17(() => {
6326
+ const minimizeOnSessionDisconnect = useCallback18(() => {
6119
6327
  setActiveModule(null);
6120
6328
  if (minimizable) {
6121
6329
  setIsMinimized(true);
@@ -6150,30 +6358,30 @@ function LiveAgent(props) {
6150
6358
  onStartError: expandOnSessionStartError,
6151
6359
  onDisconnect: minimizeOnSessionDisconnect
6152
6360
  });
6153
- const teardownInFlightRef = useRef21(false);
6361
+ const teardownInFlightRef = useRef23(false);
6154
6362
  teardownInFlightRef.current = isPaused || isPausing || isDisconnecting;
6155
- const handleRoomDisconnected = useCallback17(() => {
6363
+ const handleRoomDisconnected = useCallback18(() => {
6156
6364
  if (teardownInFlightRef.current)
6157
6365
  return;
6158
6366
  disconnect();
6159
6367
  }, [disconnect]);
6160
6368
  const isSessionLive = connection !== null || isStarting || isPausing || isDisconnecting;
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) => {
6369
+ const [isPanelOpen, setIsPanelOpen] = useState21(defaultOpen);
6370
+ const [isMinimized, setIsMinimized] = useState21(minimizable && !defaultOpen);
6371
+ const [sidebarTab, setSidebarTab] = useState21("agenda");
6372
+ const [phasesSnapshot, setPhasesSnapshot] = useState21([]);
6373
+ const [textMode, setTextMode] = useState21(false);
6374
+ const [panelExpanded, setPanelExpanded] = useState21(false);
6375
+ const togglePanelExpanded = useCallback18(() => setPanelExpanded((prev) => !prev), []);
6376
+ const panelRef = useRef23(null);
6377
+ const controlBarRef = useRef23(null);
6378
+ const [isDragging, setIsDragging] = useState21(false);
6379
+ const setTextModeState = useCallback18((enabled) => {
6172
6380
  setTextMode(enabled);
6173
6381
  }, []);
6174
6382
  const isConnected = connection !== null;
6175
6383
  const showControlBar = isConnected || isStarting || isPausing;
6176
- useEffect28(() => {
6384
+ useEffect29(() => {
6177
6385
  if (!isConnected)
6178
6386
  setTextModeState(false);
6179
6387
  }, [isConnected, setTextModeState]);
@@ -6201,7 +6409,7 @@ function LiveAgent(props) {
6201
6409
  const agentMode = operatingModule?.mode ?? null;
6202
6410
  const shouldAnimateCursor = operatingModule?.uiPreferences?.animateCursor ?? animateAgentCursor;
6203
6411
  const resumableSession = useMemo7(() => getResumableSession(operatingModule), [operatingModule]);
6204
- const resumeSession = useCallback17(async () => {
6412
+ const resumeSession = useCallback18(async () => {
6205
6413
  if (!resumableSession)
6206
6414
  return;
6207
6415
  await startSession({
@@ -6210,7 +6418,7 @@ function LiveAgent(props) {
6210
6418
  existingSessionId: resumableSession.id
6211
6419
  });
6212
6420
  }, [resumableSession, startSession, agentControls]);
6213
- const selectModule = useCallback17((moduleId, opts) => {
6421
+ const selectModule = useCallback18((moduleId, opts) => {
6214
6422
  const found = availableModules.find((m) => m.id === moduleId);
6215
6423
  if (!found)
6216
6424
  return;
@@ -6222,7 +6430,7 @@ function LiveAgent(props) {
6222
6430
  autoStarted: opts?.autoStarted
6223
6431
  });
6224
6432
  }, [availableModules, startSession]);
6225
- const startAdoptionSession = useCallback17((goal) => {
6433
+ const startAdoptionSession = useCallback18((goal) => {
6226
6434
  attendGoal(goal.goalId);
6227
6435
  const found = availableModules.find((m) => m.id === goal.agentId);
6228
6436
  if (found)
@@ -6233,9 +6441,9 @@ function LiveAgent(props) {
6233
6441
  adoptionGoalId: goal.goalId
6234
6442
  });
6235
6443
  }, [attendGoal, availableModules, startSession]);
6236
- const [welcomeDismissed, setWelcomeDismissed] = useState20(false);
6237
- const dismissWelcome = useCallback17(() => setWelcomeDismissed(true), []);
6238
- const [currentPosition, setCurrentPosition] = useState20(() => {
6444
+ const [welcomeDismissed, setWelcomeDismissed] = useState21(false);
6445
+ const dismissWelcome = useCallback18(() => setWelcomeDismissed(true), []);
6446
+ const [currentPosition, setCurrentPosition] = useState21(() => {
6239
6447
  try {
6240
6448
  const saved = localStorage.getItem("skippr_widget_position");
6241
6449
  if (saved === "left" || saved === "right")
@@ -6243,18 +6451,18 @@ function LiveAgent(props) {
6243
6451
  } catch {}
6244
6452
  return position;
6245
6453
  });
6246
- const setPositionWithPersist = useCallback17((pos) => {
6454
+ const setPositionWithPersist = useCallback18((pos) => {
6247
6455
  setCurrentPosition(pos);
6248
6456
  try {
6249
6457
  localStorage.setItem("skippr_widget_position", pos);
6250
6458
  } catch {}
6251
6459
  }, []);
6252
6460
  const savedLauncherBottom = readSavedLauncherBottom();
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) => {
6461
+ const hasDraggedRef = useRef23(savedLauncherBottom !== null);
6462
+ const verticalAlignRef = useRef23(verticalAlign);
6463
+ const [launcherBottomPx, setLauncherBottomPxState] = useState21(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlign));
6464
+ const [popsDown, setPopsDown] = useState21(() => launcherPopsDown(launcherBottomPx));
6465
+ const setLauncherBottomPx = useCallback18((px) => {
6258
6466
  hasDraggedRef.current = true;
6259
6467
  setLauncherBottomPxState(px);
6260
6468
  setPopsDown(launcherPopsDown(px));
@@ -6262,13 +6470,13 @@ function LiveAgent(props) {
6262
6470
  localStorage.setItem("skippr_widget_bottom", String(px));
6263
6471
  } catch {}
6264
6472
  }, []);
6265
- const launcherBottomPxRef = useRef21(launcherBottomPx);
6473
+ const launcherBottomPxRef = useRef23(launcherBottomPx);
6266
6474
  launcherBottomPxRef.current = launcherBottomPx;
6267
- const commitLauncherDrop = useCallback17(({ side, bottomPx }) => {
6475
+ const commitLauncherDrop = useCallback18(({ side, bottomPx }) => {
6268
6476
  setPositionWithPersist(side);
6269
6477
  setLauncherBottomPx(bottomPx);
6270
6478
  }, [setPositionWithPersist, setLauncherBottomPx]);
6271
- useEffect28(() => {
6479
+ useEffect29(() => {
6272
6480
  const syncToViewport = () => {
6273
6481
  const next = hasDraggedRef.current ? clampLauncherBottom(launcherBottomPxRef.current) : verticalAlignToBottomPx(verticalAlignRef.current);
6274
6482
  setLauncherBottomPxState(next);
@@ -6278,26 +6486,26 @@ function LiveAgent(props) {
6278
6486
  window.addEventListener("resize", syncToViewport);
6279
6487
  return () => window.removeEventListener("resize", syncToViewport);
6280
6488
  }, []);
6281
- const openPanel = useCallback17(() => setIsPanelOpen(true), []);
6282
- const closePanel = useCallback17(() => setIsPanelOpen(false), []);
6283
- const togglePanel = useCallback17(() => setIsPanelOpen((prev) => !prev), []);
6284
- const expandPanel = useCallback17(() => {
6489
+ const openPanel = useCallback18(() => setIsPanelOpen(true), []);
6490
+ const closePanel = useCallback18(() => setIsPanelOpen(false), []);
6491
+ const togglePanel = useCallback18(() => setIsPanelOpen((prev) => !prev), []);
6492
+ const expandPanel = useCallback18(() => {
6285
6493
  setIsMinimized(false);
6286
6494
  setIsPanelOpen(true);
6287
6495
  }, []);
6288
- const minimizePanel = useCallback17(() => {
6496
+ const minimizePanel = useCallback18(() => {
6289
6497
  if (!minimizable)
6290
6498
  return;
6291
6499
  setIsMinimized(true);
6292
6500
  setIsPanelOpen(false);
6293
6501
  }, [minimizable]);
6294
- const pauseSessionAndMinimize = useCallback17(async () => {
6502
+ const pauseSessionAndMinimize = useCallback18(async () => {
6295
6503
  await pauseSession();
6296
6504
  minimizePanel();
6297
6505
  }, [pauseSession, minimizePanel]);
6298
6506
  const isAuthenticated = bearerToken !== null || auth.isAuthenticated;
6299
6507
  const defaultAgentId = hostAgentId ?? defaultSelection.agentId;
6300
- const startDefaultSession = useCallback17(() => {
6508
+ const startDefaultSession = useCallback18(() => {
6301
6509
  const target = availableModules.find((m) => m.id === defaultAgentId);
6302
6510
  if (!target)
6303
6511
  return;
@@ -6460,45 +6668,45 @@ function LiveAgent(props) {
6460
6668
  adoptionGoals,
6461
6669
  startAdoptionSession
6462
6670
  ]);
6463
- return /* @__PURE__ */ jsx25(LiveAgentContext.Provider, {
6671
+ return /* @__PURE__ */ jsx27(LiveAgentContext.Provider, {
6464
6672
  value: ctx,
6465
- children: /* @__PURE__ */ jsxs19(LiveKitRoom, {
6673
+ children: /* @__PURE__ */ jsxs21(LiveKitRoom, {
6466
6674
  serverUrl: connection?.livekitUrl,
6467
6675
  token: connection?.token,
6468
6676
  connect: shouldConnect,
6469
6677
  audio: true,
6470
6678
  onDisconnected: handleRoomDisconnected,
6471
6679
  children: [
6472
- connection && !textMode && /* @__PURE__ */ jsx25(RoomAudioRenderer, {}),
6473
- connection && captureMode === CAPTURE_MODE.Screenshare && /* @__PURE__ */ jsx25(AutoStartMedia, {
6680
+ connection && !textMode && /* @__PURE__ */ jsx27(RoomAudioRenderer, {}),
6681
+ connection && captureMode === CAPTURE_MODE.Screenshare && /* @__PURE__ */ jsx27(AutoStartMedia, {
6474
6682
  pendingScreenStream,
6475
- tapToTalk: agentControls?.tapToTalk === true
6683
+ pushOrTapMicMode: isRequestResponseMicMode(agentControls?.micMode)
6476
6684
  }),
6477
- connection && captureMode === CAPTURE_MODE.Auto && /* @__PURE__ */ jsx25(DomCapture, {
6478
- tapToTalk: agentControls?.tapToTalk === true
6685
+ connection && captureMode === CAPTURE_MODE.Auto && /* @__PURE__ */ jsx27(DomCapture, {
6686
+ pushOrTapMicMode: isRequestResponseMicMode(agentControls?.micMode)
6479
6687
  }),
6480
- /* @__PURE__ */ jsxs19(ShadowHost, {
6688
+ /* @__PURE__ */ jsxs21(ShadowHost, {
6481
6689
  children: [
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, {
6690
+ connection && captureMode === CAPTURE_MODE.Auto && agentControls?.highlight && /* @__PURE__ */ jsx27(HighlightOverlay, {}),
6691
+ connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx27(PageActionHandler, {}),
6692
+ connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx27(PlanPanelOpener, {}),
6693
+ connection && captureMode === CAPTURE_MODE.Auto && (agentControls?.highlight || agentControls?.actions) && /* @__PURE__ */ jsx27(AgentCursorMount, {
6486
6694
  animated: shouldAnimateCursor
6487
6695
  }),
6488
- /* @__PURE__ */ jsx25(SessionHoldProvider, {
6489
- children: /* @__PURE__ */ jsx25(TapToTalkProvider, {
6490
- children: /* @__PURE__ */ jsx25(TranscriptionsProvider, {
6491
- children: /* @__PURE__ */ jsxs19("div", {
6696
+ /* @__PURE__ */ jsx27(SessionHoldProvider, {
6697
+ children: /* @__PURE__ */ jsx27(VoiceTurnProvider, {
6698
+ children: /* @__PURE__ */ jsx27(TranscriptionsProvider, {
6699
+ children: /* @__PURE__ */ jsxs21("div", {
6492
6700
  id: WIDGET_ROOT_ID,
6493
6701
  children: [
6494
- isMinimized && !showControlBar && /* @__PURE__ */ jsx25(MinimizedBubble, {
6702
+ isMinimized && !showControlBar && /* @__PURE__ */ jsx27(MinimizedBubble, {
6495
6703
  welcomeMessage,
6496
6704
  welcomeDismissed,
6497
6705
  onDismissWelcome: dismissWelcome
6498
6706
  }),
6499
- showControlBar && !hideControls && /* @__PURE__ */ jsx25(SessionControlBar, {}),
6500
- /* @__PURE__ */ jsx25(SidebarTrigger, {}),
6501
- /* @__PURE__ */ jsx25(Sidebar, {
6707
+ showControlBar && !hideControls && /* @__PURE__ */ jsx27(SessionControlBar, {}),
6708
+ /* @__PURE__ */ jsx27(SidebarTrigger, {}),
6709
+ /* @__PURE__ */ jsx27(Sidebar, {
6502
6710
  hideControls,
6503
6711
  hideHeader,
6504
6712
  startSessionLabel