@skippr/live-agent-sdk 0.112.0 → 0.114.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 { Fragment as Fragment8, useCallback as useCallback36, useEffect as useEffect49, useMemo as useMemo10, useRef as useRef45, useState as useState40 } from "react";
11
+ import { Fragment as Fragment8, useCallback as useCallback36, useEffect as useEffect50, useMemo as useMemo10, useRef as useRef45, useState as useState41 } from "react";
12
12
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/createLucideIcon.js
13
13
  import { forwardRef as forwardRef2, createElement as createElement3 } from "react";
14
14
 
@@ -362,7 +362,7 @@ var __iconNode32 = [
362
362
  ];
363
363
  var X = createLucideIcon("x", __iconNode32);
364
364
  // src/buddy/BuddyVoiceBar.tsx
365
- import { useCallback as useCallback8, useContext as useContext3, useEffect as useEffect9, useRef as useRef10, useState as useState7 } from "react";
365
+ import { useCallback as useCallback8, useContext as useContext3, useEffect as useEffect10, useRef as useRef10, useState as useState8 } from "react";
366
366
 
367
367
  // src/capture/widgetAnchor.ts
368
368
  var anchor = null;
@@ -1147,13 +1147,30 @@ function usePointerHold(onStart, onCommit) {
1147
1147
  return start;
1148
1148
  }
1149
1149
 
1150
+ // src/hooks/useTransientError.ts
1151
+ import { useEffect as useEffect5, useState as useState2 } from "react";
1152
+ var TRANSIENT_ERROR_VISIBLE_MS = 3000;
1153
+ function useTransientError(error, errorSeq) {
1154
+ const [visibleError, setVisibleError] = useState2("");
1155
+ useEffect5(() => {
1156
+ if (!error) {
1157
+ setVisibleError("");
1158
+ return;
1159
+ }
1160
+ setVisibleError(error);
1161
+ const timer = setTimeout(() => setVisibleError(""), TRANSIENT_ERROR_VISIBLE_MS);
1162
+ return () => clearTimeout(timer);
1163
+ }, [error, errorSeq]);
1164
+ return visibleError;
1165
+ }
1166
+
1150
1167
  // src/hooks/useVoiceTurn.ts
1151
1168
  import { useLocalParticipant } from "@livekit/components-react/hooks";
1152
- import { useCallback as useCallback4, useRef as useRef5, useState as useState2 } from "react";
1169
+ import { useCallback as useCallback4, useRef as useRef5, useState as useState3 } from "react";
1153
1170
  var textEncoder = new TextEncoder;
1154
1171
  function useVoiceTurn() {
1155
1172
  const { localParticipant } = useLocalParticipant();
1156
- const [isCapturingSpeech, setIsCapturingSpeech] = useState2(false);
1173
+ const [isCapturingSpeech, setIsCapturingSpeech] = useState3(false);
1157
1174
  const capturingRef = useRef5(false);
1158
1175
  const publish = useCallback4(async (type) => {
1159
1176
  await localParticipant.publishData(textEncoder.encode(JSON.stringify({ type })), {
@@ -1200,6 +1217,148 @@ function useVoiceTurn() {
1200
1217
  return { isCapturingSpeech, toggle, start, commit };
1201
1218
  }
1202
1219
 
1220
+ // src/lib/apiError.ts
1221
+ class ApiError extends Error {
1222
+ status;
1223
+ constructor(status, detail) {
1224
+ super(detail);
1225
+ this.name = "ApiError";
1226
+ this.status = status;
1227
+ }
1228
+ }
1229
+ async function parseApiError(resp) {
1230
+ const body = await resp.json().catch(() => null);
1231
+ const detail = typeof body?.detail === "string" && body.detail ? body.detail : `Request failed: ${resp.status}`;
1232
+ return new ApiError(resp.status, detail);
1233
+ }
1234
+ function isNetworkError(e) {
1235
+ return e instanceof TypeError;
1236
+ }
1237
+ function isClientError(e) {
1238
+ return e instanceof ApiError && e.status >= 400 && e.status < 500;
1239
+ }
1240
+
1241
+ // src/lib/errorCopy.ts
1242
+ var AGENT_NAME_PLACEHOLDER = "{agent}";
1243
+ var ERROR_COPY_DEFAULTS = {
1244
+ auth: "We couldn't verify your access. Please try again.",
1245
+ sessionStart: "We couldn't start your session. Please try again.",
1246
+ sessionPause: "We couldn't pause your session. Please try again.",
1247
+ otpRequest: "We couldn't send the verification code. Please try again.",
1248
+ otpVerify: "That code is invalid or has expired. Please try again.",
1249
+ modules: "We couldn't load the content. Please try again.",
1250
+ network: "We're having trouble connecting. Please try again.",
1251
+ unavailable: `${AGENT_NAME_PLACEHOLDER} isn't available right now. Please try again later.`,
1252
+ genericAgentName: "The AI agent",
1253
+ authFailedTitle: "We couldn't verify your session",
1254
+ authFailedHint: "Please contact administrator."
1255
+ };
1256
+ var ERROR_COPY_TRANSLATIONS = {
1257
+ fr: {
1258
+ auth: "Impossible de vérifier votre accès. Veuillez réessayer.",
1259
+ sessionStart: "Impossible de démarrer votre session. Veuillez réessayer.",
1260
+ sessionPause: "Impossible de mettre la session en pause. Veuillez réessayer.",
1261
+ otpRequest: "Impossible d'envoyer le code de vérification. Veuillez réessayer.",
1262
+ otpVerify: "Code invalide ou expiré. Veuillez réessayer.",
1263
+ modules: "Impossible de charger le contenu. Veuillez réessayer.",
1264
+ network: "Nous rencontrons un problème de connexion. Veuillez réessayer.",
1265
+ unavailable: `${AGENT_NAME_PLACEHOLDER} n'est pas disponible pour le moment. Veuillez réessayer plus tard.`,
1266
+ genericAgentName: "L'agent IA",
1267
+ authFailedTitle: "Impossible de vérifier votre session",
1268
+ authFailedHint: "Veuillez contacter l'administrateur."
1269
+ },
1270
+ de: {
1271
+ auth: "Ihr Zugriff konnte nicht überprüft werden. Bitte versuchen Sie es erneut.",
1272
+ sessionStart: "Ihre Sitzung konnte nicht gestartet werden. Bitte versuchen Sie es erneut.",
1273
+ sessionPause: "Die Sitzung konnte nicht pausiert werden. Bitte versuchen Sie es erneut.",
1274
+ otpRequest: "Der Bestätigungscode konnte nicht gesendet werden. Bitte versuchen Sie es erneut.",
1275
+ otpVerify: "Der Code ist ungültig oder abgelaufen. Bitte versuchen Sie es erneut.",
1276
+ modules: "Der Inhalt konnte nicht geladen werden. Bitte versuchen Sie es erneut.",
1277
+ network: "Es gibt ein Verbindungsproblem. Bitte versuchen Sie es erneut.",
1278
+ unavailable: `${AGENT_NAME_PLACEHOLDER} ist derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.`,
1279
+ genericAgentName: "Der KI-Agent",
1280
+ authFailedTitle: "Ihre Sitzung konnte nicht überprüft werden",
1281
+ authFailedHint: "Bitte kontaktieren Sie den Administrator."
1282
+ },
1283
+ it: {
1284
+ auth: "Impossibile verificare il tuo accesso. Riprova.",
1285
+ sessionStart: "Impossibile avviare la sessione. Riprova.",
1286
+ sessionPause: "Impossibile mettere in pausa la sessione. Riprova.",
1287
+ otpRequest: "Impossibile inviare il codice di verifica. Riprova.",
1288
+ otpVerify: "Codice non valido o scaduto. Riprova.",
1289
+ modules: "Impossibile caricare il contenuto. Riprova.",
1290
+ network: "Si è verificato un problema di connessione. Riprova.",
1291
+ unavailable: `${AGENT_NAME_PLACEHOLDER} non è disponibile in questo momento. Riprova più tardi.`,
1292
+ genericAgentName: "L'agente IA",
1293
+ authFailedTitle: "Impossibile verificare la tua sessione",
1294
+ authFailedHint: "Contatta l'amministratore."
1295
+ },
1296
+ es: {
1297
+ auth: "No se pudo verificar tu acceso. Inténtalo de nuevo.",
1298
+ sessionStart: "No se pudo iniciar la sesión. Inténtalo de nuevo.",
1299
+ sessionPause: "No se pudo pausar la sesión. Inténtalo de nuevo.",
1300
+ otpRequest: "No se pudo enviar el código de verificación. Inténtalo de nuevo.",
1301
+ otpVerify: "El código no es válido o ha caducado. Inténtalo de nuevo.",
1302
+ modules: "No se pudo cargar el contenido. Inténtalo de nuevo.",
1303
+ network: "Estamos teniendo problemas de conexión. Inténtalo de nuevo.",
1304
+ unavailable: `${AGENT_NAME_PLACEHOLDER} no está disponible en este momento. Inténtalo de nuevo más tarde.`,
1305
+ genericAgentName: "El agente de IA",
1306
+ authFailedTitle: "No se pudo verificar tu sesión",
1307
+ authFailedHint: "Ponte en contacto con el administrador."
1308
+ },
1309
+ "pt-PT": {
1310
+ auth: "Não foi possível verificar o seu acesso. Tente novamente.",
1311
+ sessionStart: "Não foi possível iniciar a sessão. Tente novamente.",
1312
+ sessionPause: "Não foi possível pausar a sessão. Tente novamente.",
1313
+ otpRequest: "Não foi possível enviar o código de verificação. Tente novamente.",
1314
+ otpVerify: "Código inválido ou expirado. Tente novamente.",
1315
+ modules: "Não foi possível carregar o conteúdo. Tente novamente.",
1316
+ network: "Estamos com problemas de ligação. Tente novamente.",
1317
+ unavailable: `${AGENT_NAME_PLACEHOLDER} não está disponível neste momento. Tente novamente mais tarde.`,
1318
+ genericAgentName: "O agente de IA",
1319
+ authFailedTitle: "Não foi possível verificar a sua sessão",
1320
+ authFailedHint: "Contacte o administrador."
1321
+ },
1322
+ "pt-BR": {
1323
+ auth: "Não foi possível verificar seu acesso. Tente novamente.",
1324
+ sessionStart: "Não foi possível iniciar a sessão. Tente novamente.",
1325
+ sessionPause: "Não foi possível pausar a sessão. Tente novamente.",
1326
+ otpRequest: "Não foi possível enviar o código de verificação. Tente novamente.",
1327
+ otpVerify: "Código inválido ou expirado. Tente novamente.",
1328
+ modules: "Não foi possível carregar o conteúdo. Tente novamente.",
1329
+ network: "Estamos com problemas de conexão. Tente novamente.",
1330
+ unavailable: `${AGENT_NAME_PLACEHOLDER} não está disponível neste momento. Tente novamente mais tarde.`,
1331
+ genericAgentName: "O agente de IA",
1332
+ authFailedTitle: "Não foi possível verificar sua sessão",
1333
+ authFailedHint: "Entre em contato com o administrador."
1334
+ }
1335
+ };
1336
+ var ERROR_COPY_BY_LOCALE = new Map(Object.entries(ERROR_COPY_TRANSLATIONS));
1337
+ function copyForLocale(tag) {
1338
+ if (!tag)
1339
+ return ERROR_COPY_DEFAULTS;
1340
+ const [language, region] = tag.trim().split("-");
1341
+ if (!language)
1342
+ return ERROR_COPY_DEFAULTS;
1343
+ const bare = language.toLowerCase();
1344
+ const exact = region ? `${bare}-${region.toUpperCase()}` : bare;
1345
+ return ERROR_COPY_BY_LOCALE.get(exact) ?? ERROR_COPY_BY_LOCALE.get(bare) ?? (bare === "pt" ? ERROR_COPY_BY_LOCALE.get("pt-PT") : undefined) ?? ERROR_COPY_DEFAULTS;
1346
+ }
1347
+ function resolveAuthFailedCopy(locale) {
1348
+ const copy = copyForLocale(locale);
1349
+ return { title: copy.authFailedTitle, hint: copy.authFailedHint };
1350
+ }
1351
+ function resolveErrorMessage(context, locale, error, agentName) {
1352
+ const copy = copyForLocale(locale);
1353
+ if (error !== undefined && isNetworkError(error)) {
1354
+ return copy.network;
1355
+ }
1356
+ if (context === "sessionStart" /* SessionStart */ && isClientError(error)) {
1357
+ return copy.unavailable.replace(AGENT_NAME_PLACEHOLDER, agentName?.trim() || copy.genericAgentName);
1358
+ }
1359
+ return copy[context];
1360
+ }
1361
+
1203
1362
  // src/buddy/BuddyFace.tsx
1204
1363
  import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
1205
1364
  function BuddyFace({
@@ -2527,23 +2686,23 @@ function seedBuddyEdgePosFromAppearance(position, verticalAlign, viewport, sizeP
2527
2686
  }
2528
2687
 
2529
2688
  // src/buddy/hooks/useBuddyEdgeDrag.ts
2530
- import { useCallback as useCallback5, useEffect as useEffect5, useRef as useRef6, useState as useState3 } from "react";
2689
+ import { useCallback as useCallback5, useEffect as useEffect6, useRef as useRef6, useState as useState4 } from "react";
2531
2690
  function useBuddyEdgeDrag({
2532
2691
  appearancePosition,
2533
2692
  appearanceVerticalAlign,
2534
2693
  sizePx = BUDDY_SIZE_PX
2535
2694
  }) {
2536
- const [pos, setPos] = useState3(() => {
2695
+ const [pos, setPos] = useState4(() => {
2537
2696
  const saved = readSavedBuddyEdgePos(sizePx);
2538
2697
  if (saved)
2539
2698
  return saved;
2540
2699
  return seedBuddyEdgePosFromAppearance(appearancePosition, appearanceVerticalAlign, { innerWidth: window.innerWidth, innerHeight: window.innerHeight }, sizePx);
2541
2700
  });
2542
- const [isDragging, setIsDragging] = useState3(false);
2701
+ const [isDragging, setIsDragging] = useState4(false);
2543
2702
  const posRef = useRef6(pos);
2544
2703
  posRef.current = pos;
2545
2704
  const dragCleanupRef = useRef6(null);
2546
- useEffect5(() => {
2705
+ useEffect6(() => {
2547
2706
  const onResize = () => setPos((current) => ({
2548
2707
  edge: current.edge,
2549
2708
  top: clampBuddyTop(current.top, sizePx),
@@ -2552,7 +2711,7 @@ function useBuddyEdgeDrag({
2552
2711
  window.addEventListener("resize", onResize);
2553
2712
  return () => window.removeEventListener("resize", onResize);
2554
2713
  }, [sizePx]);
2555
- useEffect5(() => () => dragCleanupRef.current?.(), []);
2714
+ useEffect6(() => () => dragCleanupRef.current?.(), []);
2556
2715
  const startDrag = useCallback5((event) => {
2557
2716
  dragCleanupRef.current?.();
2558
2717
  if (event.button !== 0)
@@ -2606,17 +2765,17 @@ function useBuddyEdgeDrag({
2606
2765
  }
2607
2766
 
2608
2767
  // src/buddy/hooks/useBuddyEyeTracking.ts
2609
- import { useEffect as useEffect6, useRef as useRef7, useState as useState4 } from "react";
2768
+ import { useEffect as useEffect7, useRef as useRef7, useState as useState5 } from "react";
2610
2769
  var EYE_MAX_OFFSET_PX = 3;
2611
2770
  var ZERO = { eyeDx: 0, eyeDy: 0 };
2612
2771
  function useBuddyEyeTracking({
2613
2772
  containerRef,
2614
2773
  disabled = false
2615
2774
  }) {
2616
- const [deltas, setDeltas] = useState4(ZERO);
2775
+ const [deltas, setDeltas] = useState5(ZERO);
2617
2776
  const pendingRef = useRef7(null);
2618
2777
  const rafRef = useRef7(null);
2619
- useEffect6(() => {
2778
+ useEffect7(() => {
2620
2779
  if (disabled) {
2621
2780
  setDeltas(ZERO);
2622
2781
  return;
@@ -2664,28 +2823,28 @@ function useBuddyEyeTracking({
2664
2823
  }
2665
2824
 
2666
2825
  // src/buddy/hooks/useBuddyFreeDrag.ts
2667
- import { useCallback as useCallback6, useEffect as useEffect7, useRef as useRef8, useState as useState5 } from "react";
2826
+ import { useCallback as useCallback6, useEffect as useEffect8, useRef as useRef8, useState as useState6 } from "react";
2668
2827
  function useBuddyFreeDrag({
2669
2828
  appearancePosition,
2670
2829
  appearanceVerticalAlign,
2671
2830
  sizePx = BUDDY_SIZE_PX
2672
2831
  }) {
2673
- const [pos, setPos] = useState5(() => {
2832
+ const [pos, setPos] = useState6(() => {
2674
2833
  const saved = readSavedBuddyPos();
2675
2834
  if (saved)
2676
2835
  return clampBuddyPos(saved, sizePx);
2677
2836
  return seedBuddyPosFromAppearance(appearancePosition, appearanceVerticalAlign, { innerWidth: window.innerWidth, innerHeight: window.innerHeight }, sizePx);
2678
2837
  });
2679
- const [isDragging, setIsDragging] = useState5(false);
2838
+ const [isDragging, setIsDragging] = useState6(false);
2680
2839
  const posRef = useRef8(pos);
2681
2840
  posRef.current = pos;
2682
2841
  const dragCleanupRef = useRef8(null);
2683
- useEffect7(() => {
2842
+ useEffect8(() => {
2684
2843
  const onResize = () => setPos((current) => clampBuddyPos(current, sizePx));
2685
2844
  window.addEventListener("resize", onResize);
2686
2845
  return () => window.removeEventListener("resize", onResize);
2687
2846
  }, [sizePx]);
2688
- useEffect7(() => () => dragCleanupRef.current?.(), []);
2847
+ useEffect8(() => () => dragCleanupRef.current?.(), []);
2689
2848
  const startDrag = useCallback6((event) => {
2690
2849
  if (event.button !== 0)
2691
2850
  return { didDrag: () => false };
@@ -2733,13 +2892,13 @@ function useBuddyFreeDrag({
2733
2892
  }
2734
2893
 
2735
2894
  // src/buddy/hooks/useBuddyIdleMode.ts
2736
- import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef9, useState as useState6 } from "react";
2895
+ import { useCallback as useCallback7, useEffect as useEffect9, useRef as useRef9, useState as useState7 } from "react";
2737
2896
  function useBuddyIdleMode({
2738
2897
  isConnected,
2739
2898
  isSpeaking,
2740
2899
  isListening
2741
2900
  }) {
2742
- const [mode, setMode] = useState6(BUDDY_MODE.Idle);
2901
+ const [mode, setMode] = useState7(BUDDY_MODE.Idle);
2743
2902
  const sleepTimerRef = useRef9(null);
2744
2903
  const happyTimerRef = useRef9(null);
2745
2904
  const clearSleep = useCallback7(() => {
@@ -2769,7 +2928,7 @@ function useBuddyIdleMode({
2769
2928
  armSleep();
2770
2929
  }, BUDDY_HAPPY_MS);
2771
2930
  }, [armSleep, isConnected]);
2772
- useEffect8(() => {
2931
+ useEffect9(() => {
2773
2932
  if (isConnected) {
2774
2933
  clearSleep();
2775
2934
  if (happyTimerRef.current) {
@@ -2787,7 +2946,7 @@ function useBuddyIdleMode({
2787
2946
  armSleep();
2788
2947
  return clearSleep;
2789
2948
  }, [isConnected, isSpeaking, isListening, armSleep, clearSleep]);
2790
- useEffect8(() => () => {
2949
+ useEffect9(() => () => {
2791
2950
  if (sleepTimerRef.current)
2792
2951
  clearTimeout(sleepTimerRef.current);
2793
2952
  if (happyTimerRef.current)
@@ -2839,6 +2998,13 @@ function loginCardWrapperStyle(edge) {
2839
2998
  ...edge === "top" ? { top: "calc(100% + 8px)" } : { bottom: "calc(100% + 8px)" }
2840
2999
  };
2841
3000
  }
3001
+ function bubbleAnchorStyle(edge) {
3002
+ if (edge === "left")
3003
+ return { left: 0 };
3004
+ if (edge === "right")
3005
+ return { right: 0 };
3006
+ return { left: "50%", transform: "translateX(-50%)" };
3007
+ }
2842
3008
  function edgeAnchor(pos) {
2843
3009
  const half = BUDDY_SIZE_PX / 2;
2844
3010
  if (pos.edge === "left")
@@ -2888,11 +3054,18 @@ function BuddyVoiceBar({ revealed }) {
2888
3054
  appearance,
2889
3055
  startDefaultSession,
2890
3056
  disconnect,
2891
- setAutoStartAfterLogin
3057
+ setAutoStartAfterLogin,
3058
+ error,
3059
+ errorSeq,
3060
+ authFailed,
3061
+ modulesError,
3062
+ locale
2892
3063
  } = ctx;
2893
3064
  const needsLogin = !usesHostAuth && !isAuthenticated;
2894
- const [loginOpen, setLoginOpen] = useState7(false);
2895
- useEffect9(() => {
3065
+ const transientError = useTransientError(error, errorSeq);
3066
+ const authFailedCopy = authFailed ? resolveAuthFailedCopy(locale) : null;
3067
+ const [loginOpen, setLoginOpen] = useState8(false);
3068
+ useEffect10(() => {
2896
3069
  if (!needsLogin)
2897
3070
  setLoginOpen(false);
2898
3071
  }, [needsLogin]);
@@ -2917,7 +3090,7 @@ function BuddyVoiceBar({ revealed }) {
2917
3090
  });
2918
3091
  const voiceTurn = useVoiceTurn();
2919
3092
  const edgePos = edgeDrag.pos;
2920
- useEffect9(() => {
3093
+ useEffect10(() => {
2921
3094
  setWidgetAnchor(isConnected ? { x: pos.x + BUDDY_SIZE_PX / 2, y: pos.y + BUDDY_SIZE_PX / 2 } : edgeAnchor(edgePos));
2922
3095
  return () => setWidgetAnchor(null);
2923
3096
  }, [isConnected, pos.x, pos.y, edgePos]);
@@ -2957,17 +3130,17 @@ function BuddyVoiceBar({ revealed }) {
2957
3130
  }
2958
3131
  };
2959
3132
  }, [reportHover]);
2960
- const [isIdleLauncherHovered, setIsIdleLauncherHovered] = useState7(false);
2961
- const [showWakeBubble, setShowWakeBubble] = useState7(false);
2962
- const [autoOffNotice, setAutoOffNotice] = useState7(false);
2963
- const [holdHintSeen, setHoldHintSeen] = useState7(false);
2964
- const [keyboardFocus, setKeyboardFocus] = useState7(false);
3133
+ const [isIdleLauncherHovered, setIsIdleLauncherHovered] = useState8(false);
3134
+ const [showWakeBubble, setShowWakeBubble] = useState8(false);
3135
+ const [autoOffNotice, setAutoOffNotice] = useState8(false);
3136
+ const [holdHintSeen, setHoldHintSeen] = useState8(false);
3137
+ const [keyboardFocus, setKeyboardFocus] = useState8(false);
2965
3138
  useIdleAutoOff({
2966
3139
  enabled: isConnected && !autoOffNotice,
2967
3140
  active: isSpeaking || isListening || voiceTurn.isCapturingSpeech,
2968
3141
  onExpire: () => setAutoOffNotice(true)
2969
3142
  });
2970
- useEffect9(() => {
3143
+ useEffect10(() => {
2971
3144
  if (!autoOffNotice)
2972
3145
  return;
2973
3146
  if (!isConnected) {
@@ -2999,14 +3172,14 @@ function BuddyVoiceBar({ revealed }) {
2999
3172
  code: "Space",
3000
3173
  requireCtrl: true
3001
3174
  });
3002
- useEffect9(() => {
3175
+ useEffect10(() => {
3003
3176
  if (!showWakeBubble)
3004
3177
  return;
3005
3178
  const timer = window.setTimeout(() => setShowWakeBubble(false), WAKE_BUBBLE_MS);
3006
3179
  return () => window.clearTimeout(timer);
3007
3180
  }, [showWakeBubble]);
3008
3181
  const wasConnectedRef = useRef10(isConnected);
3009
- useEffect9(() => {
3182
+ useEffect10(() => {
3010
3183
  if (isConnected && !wasConnectedRef.current)
3011
3184
  setShowWakeBubble(true);
3012
3185
  wasConnectedRef.current = isConnected;
@@ -3134,7 +3307,11 @@ function BuddyVoiceBar({ revealed }) {
3134
3307
  ]
3135
3308
  })
3136
3309
  }),
3137
- showWakeBubble ? /* @__PURE__ */ jsxs10("div", {
3310
+ transientError ? /* @__PURE__ */ jsx14("div", {
3311
+ role: "alert",
3312
+ className: "skippr:pointer-events-none skippr:absolute skippr:bottom-[calc(100%+8px)] skippr:left-1/2 skippr:w-[150px] skippr:-translate-x-1/2 skippr:rounded-2xl skippr:bg-white skippr:px-2.5 skippr:py-1.5 skippr:text-center skippr:text-[11px] skippr:leading-[1.2] skippr:text-destructive skippr:shadow-[0_6px_16px_rgba(45,45,63,0.14)]",
3313
+ children: transientError
3314
+ }) : showWakeBubble ? /* @__PURE__ */ jsxs10("div", {
3138
3315
  className: "skippr:absolute skippr:-top-8 skippr:left-1/2 skippr:flex skippr:-translate-x-1/2 skippr:items-center skippr:gap-1.5 skippr:whitespace-nowrap skippr:rounded-full skippr:bg-white skippr:px-3 skippr:py-1 skippr:text-[11px] skippr:font-medium skippr:text-[#2D2D3F] skippr:shadow-[0_6px_16px_rgba(45,45,63,0.14)]",
3139
3316
  role: "status",
3140
3317
  children: [
@@ -3212,17 +3389,39 @@ function BuddyVoiceBar({ revealed }) {
3212
3389
  })
3213
3390
  ]
3214
3391
  }),
3215
- isIdleLauncherHovered && !loginOpen && /* @__PURE__ */ jsx14(ConsentBubble, {
3392
+ !loginOpen && authFailedCopy ? /* @__PURE__ */ jsxs10("div", {
3393
+ role: "alert",
3394
+ className: "skippr:pointer-events-none skippr:absolute skippr:bottom-[calc(100%+8px)] skippr:w-[150px] skippr:rounded-2xl skippr:bg-white skippr:px-2.5 skippr:py-1.5 skippr:text-center skippr:shadow-[0_6px_16px_rgba(45,45,63,0.14)]",
3395
+ style: bubbleAnchorStyle(edgeDrag.pos.edge),
3396
+ children: [
3397
+ /* @__PURE__ */ jsx14("p", {
3398
+ className: "skippr:text-[11px] skippr:font-medium skippr:leading-[1.2] skippr:text-destructive",
3399
+ children: authFailedCopy.title
3400
+ }),
3401
+ /* @__PURE__ */ jsx14("p", {
3402
+ className: "skippr:mt-0.5 skippr:text-[10px] skippr:leading-[1.2] skippr:text-muted-foreground",
3403
+ children: authFailedCopy.hint
3404
+ })
3405
+ ]
3406
+ }) : !loginOpen && (modulesError || transientError) ? /* @__PURE__ */ jsx14("div", {
3407
+ className: "skippr:pointer-events-none skippr:absolute skippr:bottom-[calc(100%+8px)] skippr:w-[150px] skippr:rounded-2xl skippr:bg-white skippr:px-2.5 skippr:py-1.5 skippr:shadow-[0_6px_16px_rgba(45,45,63,0.14)]",
3408
+ style: bubbleAnchorStyle(edgeDrag.pos.edge),
3409
+ children: /* @__PURE__ */ jsx14("p", {
3410
+ role: "alert",
3411
+ className: "skippr:text-[11px] skippr:leading-[1.2] skippr:text-destructive skippr:text-center",
3412
+ children: modulesError || transientError
3413
+ })
3414
+ }) : isIdleLauncherHovered && !loginOpen && /* @__PURE__ */ jsx14(ConsentBubble, {
3216
3415
  template: CONSENT_NOTICE_AGENT_SESSION_START,
3217
3416
  className: "skippr:absolute skippr:bottom-[calc(100%+8px)] skippr:w-[150px]",
3218
- style: edgeDrag.pos.edge === "left" ? { left: 0 } : edgeDrag.pos.edge === "right" ? { right: 0 } : { left: "50%", transform: "translateX(-50%)" }
3417
+ style: bubbleAnchorStyle(edgeDrag.pos.edge)
3219
3418
  })
3220
3419
  ]
3221
3420
  })
3222
3421
  });
3223
3422
  }
3224
3423
  // src/capture/useAgentCursor.ts
3225
- import { useEffect as useEffect10, useState as useState8 } from "react";
3424
+ import { useEffect as useEffect11, useState as useState9 } from "react";
3226
3425
 
3227
3426
  // src/capture/cursorController.ts
3228
3427
  var targetListeners = new Set;
@@ -3264,8 +3463,8 @@ function subscribeCursorTarget(listener) {
3264
3463
 
3265
3464
  // src/capture/useAgentCursor.ts
3266
3465
  function useAgentCursor() {
3267
- const [target, setTarget] = useState8(null);
3268
- useEffect10(() => subscribeCursorTarget(setTarget), []);
3466
+ const [target, setTarget] = useState9(null);
3467
+ useEffect11(() => subscribeCursorTarget(setTarget), []);
3269
3468
  return target;
3270
3469
  }
3271
3470
 
@@ -3311,7 +3510,7 @@ function useLiveAgent() {
3311
3510
  // src/hooks/useSessionHold.ts
3312
3511
  import { useLocalParticipant as useLocalParticipant3 } from "@livekit/components-react/hooks";
3313
3512
  import { Track } from "livekit-client";
3314
- import { useCallback as useCallback10, useEffect as useEffect11, useRef as useRef11, useState as useState9 } from "react";
3513
+ import { useCallback as useCallback10, useEffect as useEffect12, useRef as useRef11, useState as useState10 } from "react";
3315
3514
 
3316
3515
  // src/capture/agentActionSignal.ts
3317
3516
  var isDispatchingAgentAction = false;
@@ -3500,8 +3699,8 @@ function useSessionHold({
3500
3699
  }) {
3501
3700
  const { localParticipant } = useLocalParticipant3();
3502
3701
  const timeoutSeconds = pauseTimeoutSeconds ?? FALLBACK_PAUSE_TIMEOUT_SECONDS;
3503
- const [isHeld, setIsHeld] = useState9(false);
3504
- const [countdown, setCountdown] = useState9(timeoutSeconds);
3702
+ const [isHeld, setIsHeld] = useState10(false);
3703
+ const [countdown, setCountdown] = useState10(timeoutSeconds);
3505
3704
  const screenWasSharedBeforeHoldRef = useRef11(false);
3506
3705
  const holdTransitionInFlightRef = useRef11(false);
3507
3706
  const clearPausedCaptureRef = useRef11(null);
@@ -3560,7 +3759,7 @@ function useSessionHold({
3560
3759
  console.error("Failed to release session:", error);
3561
3760
  }
3562
3761
  }, [localParticipant, publish, resumeScreenShareOnResume]);
3563
- useEffect11(() => {
3762
+ useEffect12(() => {
3564
3763
  if (!isHeld) {
3565
3764
  setCountdown(timeoutSeconds);
3566
3765
  return;
@@ -3570,7 +3769,7 @@ function useSessionHold({
3570
3769
  }, 1000);
3571
3770
  return () => clearInterval(id);
3572
3771
  }, [isHeld, timeoutSeconds]);
3573
- useEffect11(() => {
3772
+ useEffect12(() => {
3574
3773
  if (isHeld && countdown === 0) {
3575
3774
  setIsHeld(false);
3576
3775
  pauseSession();
@@ -3653,7 +3852,7 @@ function useVoiceTurnContext() {
3653
3852
  }
3654
3853
 
3655
3854
  // src/hooks/useAdoptionGoals.ts
3656
- import { useCallback as useCallback11, useEffect as useEffect12, useMemo as useMemo2, useState as useState10 } from "react";
3855
+ import { useCallback as useCallback11, useEffect as useEffect13, useMemo as useMemo2, useState as useState11 } from "react";
3657
3856
 
3658
3857
  // src/lib/hashMatch.ts
3659
3858
  function globToRegExp(pattern) {
@@ -3721,9 +3920,9 @@ function useAdoptionGoals({
3721
3920
  bearerToken,
3722
3921
  authedFetch
3723
3922
  }) {
3724
- const [candidates, setCandidates] = useState10([]);
3725
- const [hasResolved, setHasResolved] = useState10(false);
3726
- const [hash, setHash] = useState10(window.location.hash);
3923
+ const [candidates, setCandidates] = useState11([]);
3924
+ const [hasResolved, setHasResolved] = useState11(false);
3925
+ const [hash, setHash] = useState11(window.location.hash);
3727
3926
  const match = useCallback11(async () => {
3728
3927
  try {
3729
3928
  const resp = await authedFetch(`${API_URL}/v1/adoption/goals/match`, {
@@ -3744,7 +3943,7 @@ function useAdoptionGoals({
3744
3943
  setHasResolved(true);
3745
3944
  }
3746
3945
  }, [authedFetch]);
3747
- useEffect12(() => {
3946
+ useEffect13(() => {
3748
3947
  if (!enabled || !bearerToken) {
3749
3948
  setCandidates([]);
3750
3949
  setHasResolved(false);
@@ -3791,7 +3990,7 @@ function useAdoptionGoals({
3791
3990
  }
3792
3991
 
3793
3992
  // src/hooks/useAuth.ts
3794
- import { useCallback as useCallback12, useEffect as useEffect13, useState as useState11 } from "react";
3993
+ import { useCallback as useCallback12, useEffect as useEffect14, useState as useState12 } from "react";
3795
3994
  var API_URL2 = "https://app.skippr.ai/api";
3796
3995
  function storageKey(appKey) {
3797
3996
  return `skippr_auth_${appKey}`;
@@ -3817,14 +4016,14 @@ function clearStoredToken(appKey) {
3817
4016
  console.error("[Skippr] Failed to clear auth token:", e);
3818
4017
  }
3819
4018
  }
3820
- function useAuth({ appKey }) {
3821
- const [authToken, setAuthToken] = useState11(null);
3822
- const [isValidating, setIsValidating] = useState11(false);
3823
- const [hasResolvedStoredToken, setHasResolvedStoredToken] = useState11(false);
3824
- const [isSubmitting, setIsSubmitting] = useState11(false);
3825
- const [error, setError] = useState11("");
4019
+ function useAuth({ appKey, locale }) {
4020
+ const [authToken, setAuthToken] = useState12(null);
4021
+ const [isValidating, setIsValidating] = useState12(false);
4022
+ const [hasResolvedStoredToken, setHasResolvedStoredToken] = useState12(false);
4023
+ const [isSubmitting, setIsSubmitting] = useState12(false);
4024
+ const [error, setError] = useState12("");
3826
4025
  const isAuthenticated = authToken !== null;
3827
- useEffect13(() => {
4026
+ useEffect14(() => {
3828
4027
  if (!appKey) {
3829
4028
  setHasResolvedStoredToken(true);
3830
4029
  return;
@@ -3855,7 +4054,7 @@ function useAuth({ appKey }) {
3855
4054
  }
3856
4055
  validateStoredToken();
3857
4056
  }, [appKey]);
3858
- useEffect13(() => {
4057
+ useEffect14(() => {
3859
4058
  function handleLogout() {
3860
4059
  setAuthToken(null);
3861
4060
  setError("");
@@ -3879,17 +4078,17 @@ function useAuth({ appKey }) {
3879
4078
  body: JSON.stringify({ email })
3880
4079
  });
3881
4080
  if (!resp.ok) {
3882
- const body = await resp.json().catch(() => ({}));
3883
- throw new Error(body.detail || "Failed to send verification code");
4081
+ throw await parseApiError(resp);
3884
4082
  }
3885
4083
  return true;
3886
4084
  } catch (e) {
3887
- setError(e instanceof Error ? e.message : "Failed to send verification code");
4085
+ console.warn("[Skippr] OTP request failed:", e);
4086
+ setError(resolveErrorMessage("otpRequest" /* OtpRequest */, locale, e));
3888
4087
  return false;
3889
4088
  } finally {
3890
4089
  setIsSubmitting(false);
3891
4090
  }
3892
- }, [appKey]);
4091
+ }, [appKey, locale]);
3893
4092
  const verifyOtp = useCallback12(async (email, code, options) => {
3894
4093
  if (!appKey)
3895
4094
  return;
@@ -3911,19 +4110,19 @@ function useAuth({ appKey }) {
3911
4110
  })
3912
4111
  });
3913
4112
  if (!resp.ok) {
3914
- const body = await resp.json().catch(() => ({}));
3915
- throw new Error(body.detail || "Invalid or expired verification code");
4113
+ throw await parseApiError(resp);
3916
4114
  }
3917
4115
  const { token } = await resp.json();
3918
4116
  setStoredToken(appKey, token);
3919
4117
  setAuthToken(token);
3920
4118
  } catch (e) {
3921
- setError(e instanceof Error ? e.message : "Verification failed");
4119
+ console.warn("[Skippr] OTP verification failed:", e);
4120
+ setError(resolveErrorMessage("otpVerify" /* OtpVerify */, locale, e));
3922
4121
  return;
3923
4122
  } finally {
3924
4123
  setIsSubmitting(false);
3925
4124
  }
3926
- }, [appKey]);
4125
+ }, [appKey, locale]);
3927
4126
  const logout = useCallback12(async () => {
3928
4127
  const token = authToken;
3929
4128
  if (appKey)
@@ -3956,7 +4155,7 @@ function useAuth({ appKey }) {
3956
4155
  }
3957
4156
 
3958
4157
  // src/hooks/useAutoStart.ts
3959
- import { useEffect as useEffect14, useMemo as useMemo3, useRef as useRef12 } from "react";
4158
+ import { useEffect as useEffect15, useMemo as useMemo3, useRef as useRef12 } from "react";
3960
4159
 
3961
4160
  // src/lib/agentMode.ts
3962
4161
  var AGENT_MODE = {
@@ -4046,7 +4245,7 @@ function useAutoStart({
4046
4245
  const state = getModuleSessionState(m.currentSession, m.mode);
4047
4246
  return state !== "completed" && state !== "expired";
4048
4247
  }) ?? null, [availableModules]);
4049
- useEffect14(() => {
4248
+ useEffect15(() => {
4050
4249
  if (!autoStartModule || hasAutoStartedRef.current)
4051
4250
  return;
4052
4251
  if (suppressed || !bearerToken)
@@ -4078,7 +4277,7 @@ function useAutoStart({
4078
4277
  }
4079
4278
 
4080
4279
  // src/hooks/useAvailableModules.ts
4081
- import { useCallback as useCallback13, useEffect as useEffect15, useRef as useRef13, useState as useState12 } from "react";
4280
+ import { useCallback as useCallback13, useEffect as useEffect16, useRef as useRef13, useState as useState13 } from "react";
4082
4281
  var EMPTY_DEFAULT = { agentId: null, sessionId: null };
4083
4282
  var API_URL3 = "https://app.skippr.ai/api";
4084
4283
  function useAvailableModules({
@@ -4088,13 +4287,13 @@ function useAvailableModules({
4088
4287
  agentId,
4089
4288
  locale
4090
4289
  }) {
4091
- const [modules, setModules] = useState12([]);
4092
- const [defaultSelection, setDefaultSelection] = useState12(EMPTY_DEFAULT);
4093
- const [appearance, setAppearance] = useState12(null);
4094
- const [splashOverlayOptedOut, setSplashOverlayOptedOut] = useState12(false);
4095
- const [isLoading, setIsLoading] = useState12(false);
4096
- const [hasResolved, setHasResolved] = useState12(false);
4097
- const [error, setError] = useState12(null);
4290
+ const [modules, setModules] = useState13([]);
4291
+ const [defaultSelection, setDefaultSelection] = useState13(EMPTY_DEFAULT);
4292
+ const [appearance, setAppearance] = useState13(null);
4293
+ const [splashOverlayOptedOut, setSplashOverlayOptedOut] = useState13(false);
4294
+ const [isLoading, setIsLoading] = useState13(false);
4295
+ const [hasResolved, setHasResolved] = useState13(false);
4296
+ const [error, setError] = useState13(null);
4098
4297
  const requestGenRef = useRef13(0);
4099
4298
  const fetchModules = useCallback13(async (signal) => {
4100
4299
  const gen = ++requestGenRef.current;
@@ -4113,8 +4312,7 @@ function useAvailableModules({
4113
4312
  signal: signal ?? null
4114
4313
  });
4115
4314
  if (!resp.ok) {
4116
- const body = await resp.json().catch(() => null);
4117
- throw new Error(body?.detail || `Failed to load modules: ${resp.status}`);
4315
+ throw await parseApiError(resp);
4118
4316
  }
4119
4317
  const data = await resp.json();
4120
4318
  if (isStale())
@@ -4126,7 +4324,8 @@ function useAvailableModules({
4126
4324
  } catch (e) {
4127
4325
  if (isStale())
4128
4326
  return;
4129
- setError(e instanceof Error ? e.message : "Failed to load modules");
4327
+ console.warn("[Skippr] Module fetch failed:", e);
4328
+ setError(resolveErrorMessage("modules" /* Modules */, locale, e));
4130
4329
  } finally {
4131
4330
  if (!isStale()) {
4132
4331
  setIsLoading(false);
@@ -4134,14 +4333,14 @@ function useAvailableModules({
4134
4333
  }
4135
4334
  }
4136
4335
  }, [authedFetch, agentId, locale]);
4137
- useEffect15(() => {
4336
+ useEffect16(() => {
4138
4337
  if (!enabled || !bearerToken)
4139
4338
  return;
4140
4339
  const controller = new AbortController;
4141
4340
  fetchModules(controller.signal);
4142
4341
  return () => controller.abort();
4143
4342
  }, [enabled, bearerToken, fetchModules]);
4144
- useEffect15(() => () => void requestGenRef.current++, []);
4343
+ useEffect16(() => () => void requestGenRef.current++, []);
4145
4344
  const refetch = useCallback13(() => fetchModules(), [fetchModules]);
4146
4345
  return {
4147
4346
  modules,
@@ -4156,10 +4355,10 @@ function useAvailableModules({
4156
4355
  }
4157
4356
 
4158
4357
  // src/hooks/useOnceTrue.ts
4159
- import { useEffect as useEffect16, useState as useState13 } from "react";
4358
+ import { useEffect as useEffect17, useState as useState14 } from "react";
4160
4359
  function useOnceTrue(value) {
4161
- const [latched, setLatched] = useState13(false);
4162
- useEffect16(() => {
4360
+ const [latched, setLatched] = useState14(false);
4361
+ useEffect17(() => {
4163
4362
  if (value)
4164
4363
  setLatched(true);
4165
4364
  }, [value]);
@@ -4172,11 +4371,11 @@ import { useCallback as useCallback14 } from "react";
4172
4371
 
4173
4372
  // src/hooks/useAgentState.ts
4174
4373
  import { useRemoteParticipants } from "@livekit/components-react/hooks";
4175
- import { useEffect as useEffect17, useState as useState14 } from "react";
4374
+ import { useEffect as useEffect18, useState as useState15 } from "react";
4176
4375
  function useAgentState(attributeKey, parse, initial) {
4177
- const [value, setValue] = useState14(initial);
4376
+ const [value, setValue] = useState15(initial);
4178
4377
  const remoteParticipants = useRemoteParticipants();
4179
- useEffect17(() => {
4378
+ useEffect18(() => {
4180
4379
  const agentParticipant = remoteParticipants.find((p) => p.attributes?.[attributeKey]);
4181
4380
  if (agentParticipant) {
4182
4381
  const attr = agentParticipant.attributes?.[attributeKey];
@@ -4233,7 +4432,7 @@ function usePlanUpdates() {
4233
4432
  }
4234
4433
 
4235
4434
  // src/hooks/useSession.ts
4236
- import { useCallback as useCallback15, useEffect as useEffect18, useRef as useRef14, useState as useState15 } from "react";
4435
+ import { useCallback as useCallback15, useEffect as useEffect19, useRef as useRef14, useState as useState16 } from "react";
4237
4436
  var API_URL4 = "https://app.skippr.ai/api";
4238
4437
  async function fetchSessionMessages(sessionId, authedFetch) {
4239
4438
  try {
@@ -4270,13 +4469,14 @@ async function exchangeForBearerToken(appKey, userToken) {
4270
4469
  }
4271
4470
  });
4272
4471
  if (!resp.ok) {
4273
- throw new Error(`Token exchange failed: ${resp.status}`);
4472
+ throw await parseApiError(resp);
4274
4473
  }
4275
4474
  const { token, expiresAt } = await resp.json();
4276
4475
  return { token, expiresAt: new Date(expiresAt).getTime() };
4277
4476
  }
4278
4477
  function useSession({
4279
4478
  captureMode = DEFAULT_CAPTURE_MODE,
4479
+ locale,
4280
4480
  authToken,
4281
4481
  appKey,
4282
4482
  getUserToken,
@@ -4286,20 +4486,26 @@ function useSession({
4286
4486
  onStartError,
4287
4487
  onDisconnect
4288
4488
  }) {
4289
- const [connection, setConnection] = useState15(null);
4290
- const [shouldConnect, setShouldConnect] = useState15(false);
4291
- const [isStarting, setIsStarting] = useState15(false);
4292
- const [isDisconnecting, setIsDisconnecting] = useState15(false);
4293
- const [error, setError] = useState15("");
4294
- const [errorCode, setErrorCode] = useState15(null);
4295
- const [sessionId, setSessionId] = useState15(null);
4296
- const [bearerToken, setBearerToken] = useState15(authToken ?? null);
4297
- const [pendingScreenStream, setPendingScreenStream] = useState15(null);
4298
- const [isPaused, setIsPaused] = useState15(false);
4299
- const [isPausing, setIsPausing] = useState15(false);
4300
- const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState15(null);
4301
- const [historyMessages, setHistoryMessages] = useState15([]);
4302
- const [authFailed, setAuthFailed] = useState15(false);
4489
+ const [connection, setConnection] = useState16(null);
4490
+ const [shouldConnect, setShouldConnect] = useState16(false);
4491
+ const [isStarting, setIsStarting] = useState16(false);
4492
+ const [isDisconnecting, setIsDisconnecting] = useState16(false);
4493
+ const [error, setErrorMessage] = useState16("");
4494
+ const [errorSeq, setErrorSeq] = useState16(0);
4495
+ const [errorCode, setErrorCode] = useState16(null);
4496
+ const setError = useCallback15((message) => {
4497
+ setErrorMessage(message);
4498
+ if (message)
4499
+ setErrorSeq((reported) => reported + 1);
4500
+ }, []);
4501
+ const [sessionId, setSessionId] = useState16(null);
4502
+ const [bearerToken, setBearerToken] = useState16(authToken ?? null);
4503
+ const [pendingScreenStream, setPendingScreenStream] = useState16(null);
4504
+ const [isPaused, setIsPaused] = useState16(false);
4505
+ const [isPausing, setIsPausing] = useState16(false);
4506
+ const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState16(null);
4507
+ const [historyMessages, setHistoryMessages] = useState16([]);
4508
+ const [authFailed, setAuthFailed] = useState16(false);
4303
4509
  const tokenRef = useRef14(authToken ? { token: authToken, expiresAt: null } : null);
4304
4510
  const getUserTokenRef = useRef14(getUserToken);
4305
4511
  getUserTokenRef.current = getUserToken ?? (userToken ? () => Promise.resolve(userToken) : undefined);
@@ -4380,7 +4586,7 @@ function useSession({
4380
4586
  setAuthFailed(false);
4381
4587
  return resp;
4382
4588
  }, [canExchange, getValidBearer, reExchange]);
4383
- useEffect18(() => {
4589
+ useEffect19(() => {
4384
4590
  let stale = false;
4385
4591
  if (authToken) {
4386
4592
  tokenRef.current = { token: authToken, expiresAt: null };
@@ -4391,7 +4597,8 @@ function useSession({
4391
4597
  reExchange().catch((e) => {
4392
4598
  if (stale)
4393
4599
  return;
4394
- setError(e instanceof Error ? e.message : "Token exchange failed");
4600
+ console.warn("[Skippr] Token exchange failed:", e);
4601
+ setError(resolveErrorMessage("auth" /* Auth */, locale, e));
4395
4602
  setAuthFailed(true);
4396
4603
  });
4397
4604
  return () => {
@@ -4403,7 +4610,7 @@ function useSession({
4403
4610
  return () => {
4404
4611
  stale = true;
4405
4612
  };
4406
- }, [authToken, canExchange, reExchange]);
4613
+ }, [authToken, canExchange, reExchange, locale, setError]);
4407
4614
  const isStartingRef = useRef14(false);
4408
4615
  const armedScreenStreamRef = useRef14(null);
4409
4616
  const armScreenStream = useCallback15((stream) => {
@@ -4411,7 +4618,7 @@ function useSession({
4411
4618
  }, []);
4412
4619
  const pauseOnUnloadRef = useRef14(null);
4413
4620
  pauseOnUnloadRef.current = connection !== null && !isPaused && sessionId && bearerToken ? { sessionId, bearerToken } : null;
4414
- useEffect18(() => {
4621
+ useEffect19(() => {
4415
4622
  const onPageHide = () => {
4416
4623
  const pending = pauseOnUnloadRef.current;
4417
4624
  if (!pending)
@@ -4428,6 +4635,7 @@ function useSession({
4428
4635
  }, []);
4429
4636
  const startSession = useCallback15(async ({
4430
4637
  agentId,
4638
+ agentName,
4431
4639
  agentControls,
4432
4640
  existingSessionId,
4433
4641
  adoptionGoalId,
@@ -4435,18 +4643,20 @@ function useSession({
4435
4643
  }) => {
4436
4644
  if (isStartingRef.current)
4437
4645
  return;
4646
+ setError("");
4647
+ setErrorCode(null);
4438
4648
  if (!bearerToken) {
4439
- setError("No auth token available");
4649
+ console.warn("[Skippr] Session start blocked: no auth token available");
4650
+ setError(resolveErrorMessage("sessionStart" /* SessionStart */, locale));
4440
4651
  return;
4441
4652
  }
4442
4653
  if (!agentId && !existingSessionId) {
4443
- setError("No agent selected");
4654
+ console.warn("[Skippr] Session start blocked: no agent selected");
4655
+ setError(resolveErrorMessage("sessionStart" /* SessionStart */, locale));
4444
4656
  return;
4445
4657
  }
4446
4658
  isStartingRef.current = true;
4447
4659
  setIsStarting(true);
4448
- setError("");
4449
- setErrorCode(null);
4450
4660
  onStart?.();
4451
4661
  let screenStream = null;
4452
4662
  if (captureMode === CAPTURE_MODE.Screenshare) {
@@ -4482,9 +4692,7 @@ function useSession({
4482
4692
  })
4483
4693
  });
4484
4694
  if (!createResp.ok) {
4485
- const body = await createResp.json().catch(() => null);
4486
- setErrorCode(createResp.status);
4487
- throw new Error(body?.detail || `Failed to create session: ${createResp.status}`);
4695
+ throw await parseApiError(createResp);
4488
4696
  }
4489
4697
  const { session: session2 } = await createResp.json();
4490
4698
  resolvedSessionId = session2.id;
@@ -4501,9 +4709,7 @@ function useSession({
4501
4709
  })
4502
4710
  });
4503
4711
  if (!startResp.ok) {
4504
- const body = await startResp.json().catch(() => null);
4505
- setErrorCode(startResp.status);
4506
- throw new Error(body?.detail || `Failed to start session: ${startResp.status}`);
4712
+ throw await parseApiError(startResp);
4507
4713
  }
4508
4714
  const {
4509
4715
  session,
@@ -4523,27 +4729,31 @@ function useSession({
4523
4729
  setPauseTimeoutSeconds(typeof pauseTimeout === "number" ? pauseTimeout : null);
4524
4730
  } catch (e) {
4525
4731
  stopStream(screenStream);
4526
- setError(e instanceof Error ? e.message : "Failed to start session");
4732
+ console.warn("[Skippr] Session start failed:", e);
4733
+ if (e instanceof ApiError)
4734
+ setErrorCode(e.status);
4735
+ setError(resolveErrorMessage("sessionStart" /* SessionStart */, locale, e, agentName));
4527
4736
  onStartError?.();
4528
4737
  } finally {
4529
4738
  isStartingRef.current = false;
4530
4739
  setIsStarting(false);
4531
4740
  }
4532
- }, [captureMode, bearerToken, authedFetch, onStart, onStartError, userContext]);
4741
+ }, [captureMode, locale, bearerToken, authedFetch, onStart, onStartError, userContext, setError]);
4533
4742
  const pauseSession = useCallback15(async () => {
4534
4743
  if (!sessionId || !bearerToken)
4535
4744
  return;
4536
4745
  setIsPausing(true);
4746
+ setError("");
4537
4747
  try {
4538
4748
  const resp = await authedFetch(`${API_URL4}/v1/sessions/${sessionId}/pause`, {
4539
4749
  method: "POST"
4540
4750
  });
4541
4751
  if (!resp.ok) {
4542
- const body = await resp.json().catch(() => null);
4543
- throw new Error(body?.detail || `Failed to pause: ${resp.status}`);
4752
+ throw await parseApiError(resp);
4544
4753
  }
4545
4754
  } catch (e) {
4546
- setError(e instanceof Error ? e.message : "Failed to pause session");
4755
+ console.warn("[Skippr] Session pause failed:", e);
4756
+ setError(resolveErrorMessage("sessionPause" /* SessionPause */, locale, e));
4547
4757
  setIsPausing(false);
4548
4758
  return;
4549
4759
  }
@@ -4555,7 +4765,7 @@ function useSession({
4555
4765
  setHistoryMessages(history2);
4556
4766
  setIsPaused(true);
4557
4767
  setIsPausing(false);
4558
- }, [sessionId, bearerToken, authedFetch, pendingScreenStream]);
4768
+ }, [sessionId, bearerToken, authedFetch, pendingScreenStream, locale, setError]);
4559
4769
  const disconnect = useCallback15(async () => {
4560
4770
  setIsDisconnecting(true);
4561
4771
  try {
@@ -4578,13 +4788,14 @@ function useSession({
4578
4788
  } finally {
4579
4789
  setIsDisconnecting(false);
4580
4790
  }
4581
- }, [sessionId, bearerToken, authedFetch, pendingScreenStream, onDisconnect]);
4791
+ }, [sessionId, bearerToken, authedFetch, pendingScreenStream, onDisconnect, setError]);
4582
4792
  return {
4583
4793
  connection,
4584
4794
  shouldConnect,
4585
4795
  isStarting,
4586
4796
  isDisconnecting,
4587
4797
  error,
4798
+ errorSeq,
4588
4799
  errorCode,
4589
4800
  startSession,
4590
4801
  pauseSession,
@@ -4602,7 +4813,7 @@ function useSession({
4602
4813
  }
4603
4814
 
4604
4815
  // src/hooks/useSessionHistory.ts
4605
- import { useEffect as useEffect19, useState as useState16 } from "react";
4816
+ import { useEffect as useEffect20, useState as useState17 } from "react";
4606
4817
  var API_URL5 = "https://app.skippr.ai/api";
4607
4818
  var EMPTY = { messages: [], phases: [] };
4608
4819
  function useSessionHistory({
@@ -4610,11 +4821,11 @@ function useSessionHistory({
4610
4821
  enabled,
4611
4822
  authedFetch
4612
4823
  }) {
4613
- const [history2, setHistory] = useState16(EMPTY);
4614
- const [loadedAgentId, setLoadedAgentId] = useState16(null);
4824
+ const [history2, setHistory] = useState17(EMPTY);
4825
+ const [loadedAgentId, setLoadedAgentId] = useState17(null);
4615
4826
  const activeAgentId = enabled && agentId ? agentId : null;
4616
4827
  const isLoading = activeAgentId !== null && activeAgentId !== loadedAgentId;
4617
- useEffect19(() => {
4828
+ useEffect20(() => {
4618
4829
  if (!enabled || !agentId) {
4619
4830
  setHistory(EMPTY);
4620
4831
  setLoadedAgentId(null);
@@ -4651,14 +4862,14 @@ function useSessionHistory({
4651
4862
  }
4652
4863
 
4653
4864
  // src/hooks/useSplashMedia.ts
4654
- import { useCallback as useCallback16, useEffect as useEffect20, useMemo as useMemo4, useRef as useRef15, useState as useState17 } from "react";
4865
+ import { useCallback as useCallback16, useEffect as useEffect21, useMemo as useMemo4, useRef as useRef15, useState as useState18 } from "react";
4655
4866
  function useSplashMedia({
4656
4867
  armScreenStream,
4657
4868
  isSplashVisible,
4658
4869
  isSessionLive
4659
4870
  }) {
4660
- const [micEnabled, setMicEnabled] = useState17(false);
4661
- const [screenEnabled, setScreenEnabled] = useState17(false);
4871
+ const [micEnabled, setMicEnabled] = useState18(false);
4872
+ const [screenEnabled, setScreenEnabled] = useState18(false);
4662
4873
  const heldScreenStreamRef = useRef15(null);
4663
4874
  const screenRequestInFlightRef = useRef15(false);
4664
4875
  const isStagingRef = useRef15(false);
@@ -4676,7 +4887,7 @@ function useSplashMedia({
4676
4887
  setMicEnabled(true);
4677
4888
  })();
4678
4889
  }, []);
4679
- useEffect20(() => {
4890
+ useEffect21(() => {
4680
4891
  let cancelled = false;
4681
4892
  (async () => {
4682
4893
  if (!navigator.permissions?.query)
@@ -4732,10 +4943,10 @@ function useSplashMedia({
4732
4943
  })();
4733
4944
  }, [armScreenStream, releaseScreen]);
4734
4945
  const isStaging = isSplashVisible && !isSessionLive;
4735
- useEffect20(() => {
4946
+ useEffect21(() => {
4736
4947
  isStagingRef.current = isStaging;
4737
4948
  }, [isStaging]);
4738
- useEffect20(() => {
4949
+ useEffect21(() => {
4739
4950
  if (isSessionLive) {
4740
4951
  heldScreenStreamRef.current = null;
4741
4952
  setScreenEnabled(false);
@@ -4748,10 +4959,10 @@ function useSplashMedia({
4748
4959
  }
4749
4960
 
4750
4961
  // src/hooks/useSplashOverlayOptOut.ts
4751
- import { useCallback as useCallback17, useState as useState18 } from "react";
4962
+ import { useCallback as useCallback17, useState as useState19 } from "react";
4752
4963
  var API_URL6 = "https://app.skippr.ai/api";
4753
4964
  function useSplashOverlayOptOut(authedFetch, recordedForUser) {
4754
- const [recordedLocally, setRecordedLocally] = useState18(false);
4965
+ const [recordedLocally, setRecordedLocally] = useState19(false);
4755
4966
  const optOut = useCallback17(() => {
4756
4967
  setRecordedLocally(true);
4757
4968
  authedFetch(`${API_URL6}/v1/users/splash-opt-out`, { method: "POST" }).catch((e) => console.warn("[Skippr] splash overlay opt-out failed", e));
@@ -4966,7 +5177,7 @@ function dockStyleFlush(dock) {
4966
5177
  }
4967
5178
 
4968
5179
  // src/components/AgentCursor.tsx
4969
- import { useContext as useContext8, useEffect as useEffect21, useLayoutEffect, useRef as useRef16, useState as useState19 } from "react";
5180
+ import { useContext as useContext8, useEffect as useEffect22, useLayoutEffect, useRef as useRef16, useState as useState20 } from "react";
4970
5181
 
4971
5182
  // src/capture/elementRef.ts
4972
5183
  function safeGetIframeDocument(iframe) {
@@ -5180,12 +5391,12 @@ function AgentCursor({
5180
5391
  animated = false
5181
5392
  }) {
5182
5393
  const ctx = useContext8(LiveAgentContext);
5183
- const [cursor, setCursor] = useState19(null);
5184
- const [glideMs, setGlideMs] = useState19(0);
5185
- const [phase, setPhase] = useState19("idle");
5186
- const [ringBox, setRingBox] = useState19(null);
5187
- const [clickPulse, setClickPulse] = useState19(0);
5188
- const [measuredLabelWidth, setMeasuredLabelWidth] = useState19(0);
5394
+ const [cursor, setCursor] = useState20(null);
5395
+ const [glideMs, setGlideMs] = useState20(0);
5396
+ const [phase, setPhase] = useState20("idle");
5397
+ const [ringBox, setRingBox] = useState20(null);
5398
+ const [clickPulse, setClickPulse] = useState20(0);
5399
+ const [measuredLabelWidth, setMeasuredLabelWidth] = useState20(0);
5189
5400
  const labelRef = useRef16(null);
5190
5401
  const cursorElRef = useRef16(null);
5191
5402
  const pathRef = useRef16(null);
@@ -5309,7 +5520,7 @@ function AgentCursor({
5309
5520
  });
5310
5521
  return cancelAnimation;
5311
5522
  }, [target, animated]);
5312
- useEffect21(() => {
5523
+ useEffect22(() => {
5313
5524
  if (!target || target.kind === "gesture" || phase === "idle")
5314
5525
  return;
5315
5526
  const track = () => {
@@ -5349,7 +5560,7 @@ function AgentCursor({
5349
5560
  setMeasuredLabelWidth(renderedLabelWidth);
5350
5561
  }
5351
5562
  }, [phase, measuredLabelWidth, target?.label]);
5352
- useEffect21(() => {
5563
+ useEffect22(() => {
5353
5564
  return () => {
5354
5565
  traceRef.current?.cancel();
5355
5566
  for (const t of timersRef.current)
@@ -5449,7 +5660,7 @@ function AgentCursor({
5449
5660
  // src/components/AutoStartMedia.tsx
5450
5661
  import { useConnectionState, useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
5451
5662
  import { ConnectionState, Track as Track2 } from "livekit-client";
5452
- import { useEffect as useEffect22, useRef as useRef17 } from "react";
5663
+ import { useEffect as useEffect23, useRef as useRef17 } from "react";
5453
5664
  function AutoStartMedia({
5454
5665
  pendingScreenStream,
5455
5666
  pushOrTapMicMode = false,
@@ -5458,7 +5669,7 @@ function AutoStartMedia({
5458
5669
  const { localParticipant } = useLocalParticipant4();
5459
5670
  const connectionState = useConnectionState();
5460
5671
  const didStartRef = useRef17(false);
5461
- useEffect22(() => {
5672
+ useEffect23(() => {
5462
5673
  if (didStartRef.current)
5463
5674
  return;
5464
5675
  if (connectionState !== ConnectionState.Connected)
@@ -5485,7 +5696,7 @@ function AutoStartMedia({
5485
5696
  // src/components/DomCapture.tsx
5486
5697
  import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
5487
5698
  import { ConnectionState as ConnectionState2, ScreenSharePresets as ScreenSharePresets2, Track as Track3 } from "livekit-client";
5488
- import { useContext as useContext9, useEffect as useEffect23, useMemo as useMemo5, useRef as useRef18 } from "react";
5699
+ import { useContext as useContext9, useEffect as useEffect24, useMemo as useMemo5, useRef as useRef18 } from "react";
5489
5700
 
5490
5701
  // src/capture/a11yUtils.ts
5491
5702
  var ROLE_BY_TAG = {
@@ -6718,7 +6929,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6718
6929
  const pausedRef = useRef18(false);
6719
6930
  const freezeCaptureRef = useRef18(null);
6720
6931
  const resumeCaptureRef = useRef18(null);
6721
- useEffect23(() => {
6932
+ useEffect24(() => {
6722
6933
  if (didStartRef.current)
6723
6934
  return;
6724
6935
  if (connectionState !== ConnectionState2.Connected)
@@ -6955,7 +7166,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6955
7166
  track.stop();
6956
7167
  };
6957
7168
  }, [connectionState, localParticipant, pushOrTapMicMode, startMuted, clearPausedCaptureRef]);
6958
- useEffect23(() => {
7169
+ useEffect24(() => {
6959
7170
  if (isHeld) {
6960
7171
  freezeCaptureRef.current?.();
6961
7172
  } else {
@@ -6967,8 +7178,9 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6967
7178
 
6968
7179
  // src/components/HighlightOverlay.tsx
6969
7180
  import { useDataChannel } from "@livekit/components-react/hooks";
6970
- import { useCallback as useCallback18, useEffect as useEffect24, useRef as useRef19 } from "react";
7181
+ import { useCallback as useCallback18, useEffect as useEffect25, useRef as useRef19 } from "react";
6971
7182
  var HIGHLIGHT_AUTO_CLEAR_MS = 25000;
7183
+ var HIGHLIGHT_RETARGET_INTERVAL_MS = 250;
6972
7184
  var textDecoder = new TextDecoder;
6973
7185
  function parseHighlightMessage(payload) {
6974
7186
  try {
@@ -6991,12 +7203,14 @@ function parseHighlightMessage(payload) {
6991
7203
  }
6992
7204
  function HighlightOverlay() {
6993
7205
  const targetRef = useRef19(null);
7206
+ const shownRef = useRef19(null);
6994
7207
  const autoClearRef = useRef19(null);
6995
7208
  const clear = useCallback18(() => {
6996
7209
  if (autoClearRef.current)
6997
7210
  clearTimeout(autoClearRef.current);
6998
7211
  autoClearRef.current = null;
6999
7212
  targetRef.current = null;
7213
+ shownRef.current = null;
7000
7214
  clearCursorTarget("guide");
7001
7215
  setHighlightActive(false);
7002
7216
  }, []);
@@ -7016,6 +7230,7 @@ function HighlightOverlay() {
7016
7230
  if (autoClearRef.current)
7017
7231
  clearTimeout(autoClearRef.current);
7018
7232
  targetRef.current = element;
7233
+ shownRef.current = parsed;
7019
7234
  setCursorTarget("guide", {
7020
7235
  element,
7021
7236
  label: parsed.message || "Click here",
@@ -7025,8 +7240,28 @@ function HighlightOverlay() {
7025
7240
  autoClearRef.current = setTimeout(clear, HIGHLIGHT_AUTO_CLEAR_MS);
7026
7241
  }, [clear]);
7027
7242
  useDataChannel(HIGHLIGHT_TOPIC, onHighlightMessage);
7028
- useEffect24(() => onHighlightCleared(clear), [clear]);
7029
- useEffect24(() => {
7243
+ useEffect25(() => onHighlightCleared(clear), [clear]);
7244
+ useEffect25(() => {
7245
+ const timer = setInterval(() => {
7246
+ const shown = shownRef.current;
7247
+ const target = targetRef.current;
7248
+ if (!shown || !target || target.isConnected)
7249
+ return;
7250
+ const replacement = findElementByRef(shown.ref);
7251
+ if (!replacement) {
7252
+ clear();
7253
+ return;
7254
+ }
7255
+ targetRef.current = replacement;
7256
+ setCursorTarget("guide", {
7257
+ element: replacement,
7258
+ label: shown.message || "Click here",
7259
+ mode: "guide"
7260
+ });
7261
+ }, HIGHLIGHT_RETARGET_INTERVAL_MS);
7262
+ return () => clearInterval(timer);
7263
+ }, [clear]);
7264
+ useEffect25(() => {
7030
7265
  const onClick = (event) => {
7031
7266
  const target = targetRef.current;
7032
7267
  const node = event.target;
@@ -7036,15 +7271,15 @@ function HighlightOverlay() {
7036
7271
  document.addEventListener("click", onClick, { capture: true });
7037
7272
  return () => document.removeEventListener("click", onClick, { capture: true });
7038
7273
  }, [clear]);
7039
- useEffect24(() => clear, [clear]);
7274
+ useEffect25(() => clear, [clear]);
7040
7275
  return null;
7041
7276
  }
7042
7277
 
7043
7278
  // src/components/MinimizedBubble.tsx
7044
- import { useContext as useContext10, useEffect as useEffect26, useRef as useRef21, useState as useState20 } from "react";
7279
+ import { useContext as useContext10, useEffect as useEffect27, useRef as useRef21, useState as useState21 } from "react";
7045
7280
 
7046
7281
  // src/hooks/useLauncherDrag.ts
7047
- import { useEffect as useEffect25, useRef as useRef20 } from "react";
7282
+ import { useEffect as useEffect26, useRef as useRef20 } from "react";
7048
7283
  import { flushSync } from "react-dom";
7049
7284
  var DRAG_THRESHOLD_PX = 5;
7050
7285
  function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging, enabled = true) {
@@ -7055,7 +7290,7 @@ function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging, enabl
7055
7290
  followTargetsRef.current = followRefs;
7056
7291
  const reportDraggingRef = useRef20(reportDragging);
7057
7292
  reportDraggingRef.current = reportDragging;
7058
- useEffect25(() => {
7293
+ useEffect26(() => {
7059
7294
  if (!enabled)
7060
7295
  return;
7061
7296
  const el = containerRef.current;
@@ -7410,7 +7645,7 @@ function WelcomeBubble({
7410
7645
  onDismiss,
7411
7646
  onClick
7412
7647
  }) {
7413
- useEffect26(() => {
7648
+ useEffect27(() => {
7414
7649
  const timer = setTimeout(onDismiss, 5000);
7415
7650
  return () => clearTimeout(timer);
7416
7651
  }, [onDismiss]);
@@ -7455,14 +7690,14 @@ function MinimizedBubble({
7455
7690
  commitLauncherDrop,
7456
7691
  appearance
7457
7692
  } = ctx;
7458
- const [goalsAutoHidden, setGoalsAutoHidden] = useState20(false);
7459
- const [isLauncherHovered, setIsLauncherHovered] = useState20(false);
7460
- const [visitHref, setVisitHref] = useState20(() => window.location.href);
7693
+ const [goalsAutoHidden, setGoalsAutoHidden] = useState21(false);
7694
+ const [isLauncherHovered, setIsLauncherHovered] = useState21(false);
7695
+ const [visitHref, setVisitHref] = useState21(() => window.location.href);
7461
7696
  const revealedHrefRef = useRef21(null);
7462
7697
  const hoverContainerRef = useRef21(null);
7463
7698
  const closeTimerRef = useRef21(null);
7464
- useEffect26(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
7465
- useEffect26(() => {
7699
+ useEffect27(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
7700
+ useEffect27(() => {
7466
7701
  const el = hoverContainerRef.current;
7467
7702
  if (!el)
7468
7703
  return;
@@ -7501,7 +7736,7 @@ function MinimizedBubble({
7501
7736
  const onboardingModule = pillCandidates.find((module) => module.type === "onboarding");
7502
7737
  const modulePills = onboardingModule ? [onboardingModule] : pillCandidates.slice(0, MAX_MODULE_PILLS).reverse();
7503
7738
  const goalsEligible = adoptionGoals.length > 0 && !onboardingModule && hasResolvedModules;
7504
- useEffect26(() => {
7739
+ useEffect27(() => {
7505
7740
  if (!goalsEligible)
7506
7741
  return;
7507
7742
  if (revealedHrefRef.current === visitHref) {
@@ -7515,8 +7750,8 @@ function MinimizedBubble({
7515
7750
  }, [goalsEligible, visitHref]);
7516
7751
  const matchedGoals = goalsEligible ? adoptionGoals.slice(0, MAX_GOAL_BUBBLES) : [];
7517
7752
  const goalsHidden = goalsAutoHidden && !isLauncherHovered;
7518
- const [goalsUnmounted, setGoalsUnmounted] = useState20(false);
7519
- useEffect26(() => {
7753
+ const [goalsUnmounted, setGoalsUnmounted] = useState21(false);
7754
+ useEffect27(() => {
7520
7755
  if (!goalsHidden) {
7521
7756
  setGoalsUnmounted(false);
7522
7757
  return;
@@ -7601,7 +7836,7 @@ function MinimizedBubble({
7601
7836
 
7602
7837
  // src/components/PageActionHandler.tsx
7603
7838
  import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
7604
- import { useCallback as useCallback19, useEffect as useEffect27, useRef as useRef22 } from "react";
7839
+ import { useCallback as useCallback19, useEffect as useEffect28, useRef as useRef22 } from "react";
7605
7840
  var STEP_MAX_WAIT_MS = 5000;
7606
7841
  var POST_ACTION_SETTLE_SNAPSHOT_MS = 300;
7607
7842
  var TRAILING_ACTION_FLUSH_AFTER_STOP_MS = 1000;
@@ -7939,7 +8174,7 @@ function PageActionHandler() {
7939
8174
  queueRef.current.push(action);
7940
8175
  drain();
7941
8176
  }, [drain]);
7942
- useEffect27(() => {
8177
+ useEffect28(() => {
7943
8178
  mountedRef.current = true;
7944
8179
  drainingRef.current = false;
7945
8180
  return () => {
@@ -7951,7 +8186,7 @@ function PageActionHandler() {
7951
8186
  setActionsBusy(false);
7952
8187
  };
7953
8188
  }, []);
7954
- useEffect27(() => {
8189
+ useEffect28(() => {
7955
8190
  return onActionsStopped(() => {
7956
8191
  actionsStoppedRef.current = true;
7957
8192
  ignoreActionsArrivingBeforeRef.current = Date.now() + TRAILING_ACTION_FLUSH_AFTER_STOP_MS;
@@ -7969,17 +8204,17 @@ function PageActionHandler() {
7969
8204
  }
7970
8205
 
7971
8206
  // src/components/SessionControlBar.tsx
7972
- import { useCallback as useCallback22, useContext as useContext11, useEffect as useEffect31, useState as useState23 } from "react";
8207
+ import { useCallback as useCallback22, useContext as useContext11, useEffect as useEffect32, useState as useState24 } from "react";
7973
8208
 
7974
8209
  // src/hooks/useActionControl.ts
7975
8210
  import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
7976
- import { useCallback as useCallback20, useEffect as useEffect28, useState as useState21 } from "react";
8211
+ import { useCallback as useCallback20, useEffect as useEffect29, useState as useState22 } from "react";
7977
8212
  var textEncoder5 = new TextEncoder;
7978
8213
  function useActionControl() {
7979
8214
  const { localParticipant } = useLocalParticipant6();
7980
8215
  const plan = usePlanUpdates();
7981
- const [busy, setBusy] = useState21(isActionsBusy);
7982
- useEffect28(() => subscribeActionsBusy(setBusy), []);
8216
+ const [busy, setBusy] = useState22(isActionsBusy);
8217
+ useEffect29(() => subscribeActionsBusy(setBusy), []);
7983
8218
  const actionsActive = busy || plan?.state === "executing";
7984
8219
  const requestStop = useCallback20(async () => {
7985
8220
  stopActions();
@@ -7996,13 +8231,13 @@ function useActionControl() {
7996
8231
  }
7997
8232
 
7998
8233
  // src/hooks/useAudioLevelBars.ts
7999
- import { useEffect as useEffect29, useRef as useRef23, useState as useState22 } from "react";
8234
+ import { useEffect as useEffect30, useRef as useRef23, useState as useState23 } from "react";
8000
8235
  var TALKING_LEVEL_THRESHOLD = 0.2;
8001
8236
  var TALKING_HOLD_MS = 400;
8002
8237
  function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowthPx, noiseGate }) {
8003
8238
  const barRefs = useRef23([]);
8004
- const [isTalking, setIsTalking] = useState22(false);
8005
- useEffect29(() => {
8239
+ const [isTalking, setIsTalking] = useState23(false);
8240
+ useEffect30(() => {
8006
8241
  if (!mediaStreamTrack) {
8007
8242
  for (const bar of barRefs.current) {
8008
8243
  if (bar)
@@ -8053,7 +8288,7 @@ function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowth
8053
8288
  }
8054
8289
 
8055
8290
  // src/hooks/useIdleAutoPause.ts
8056
- import { useCallback as useCallback21, useEffect as useEffect30, useRef as useRef24 } from "react";
8291
+ import { useCallback as useCallback21, useEffect as useEffect31, useRef as useRef24 } from "react";
8057
8292
  function useIdleAutoPause({
8058
8293
  enabled,
8059
8294
  active,
@@ -8077,7 +8312,7 @@ function useIdleAutoPause({
8077
8312
  if (enabled && !isHeld)
8078
8313
  armTimer();
8079
8314
  }, [enabled, isHeld, armTimer]);
8080
- useEffect30(() => {
8315
+ useEffect31(() => {
8081
8316
  if (!enabled || isHeld || active) {
8082
8317
  clearTimer();
8083
8318
  return;
@@ -8445,7 +8680,7 @@ function SessionControlBar() {
8445
8680
  togglePause();
8446
8681
  }
8447
8682
  });
8448
- const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState23(false);
8683
+ const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState24(false);
8449
8684
  const startPushToTalk = useCallback22(() => {
8450
8685
  start();
8451
8686
  reportActivity();
@@ -8463,7 +8698,7 @@ function SessionControlBar() {
8463
8698
  onCommit: commitPushToTalk,
8464
8699
  onKeyUsed: dismissPushToTalkHint
8465
8700
  });
8466
- useEffect31(() => {
8701
+ useEffect32(() => {
8467
8702
  if (isHeld)
8468
8703
  minimizePanel();
8469
8704
  }, [isHeld, minimizePanel]);
@@ -8716,7 +8951,7 @@ function SessionControlBar() {
8716
8951
  }
8717
8952
 
8718
8953
  // src/components/ShadowHost.tsx
8719
- import { useLayoutEffect as useLayoutEffect2, useRef as useRef26, useState as useState24 } from "react";
8954
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef26, useState as useState25 } from "react";
8720
8955
  import { createPortal } from "react-dom";
8721
8956
  import { jsx as jsx27, Fragment as Fragment3 } from "react/jsx-runtime";
8722
8957
  var PROPERTIES_STYLE_ID = "skippr-tw-properties";
@@ -8738,9 +8973,9 @@ function ShadowHost({
8738
8973
  className
8739
8974
  }) {
8740
8975
  const hostRef = useRef26(null);
8741
- const [shadowRoot, setShadowRoot] = useState24(null);
8976
+ const [shadowRoot, setShadowRoot] = useState25(null);
8742
8977
  const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
8743
- @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-tracking: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;--tw-outline-style:solid}}}@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-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-font-weight-bold:700;--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-auto{pointer-events:auto}.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-\\[3px\\]{inset:-3px}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:inset-y-0{inset-block:calc(var(--skippr-spacing)*0)}.skippr\\:-top-1{top:calc(var(--skippr-spacing)*-1)}.skippr\\:-top-6{top:calc(var(--skippr-spacing)*-6)}.skippr\\:-top-8{top:calc(var(--skippr-spacing)*-8)}.skippr\\:-top-\\[2px\\]{top:-2px}.skippr\\:-top-\\[3px\\]{top:-3px}.skippr\\:-top-\\[13px\\]{top:-13px}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-\\[8px\\]{top:8px}.skippr\\:top-full{top:100%}.skippr\\:-right-1{right:calc(var(--skippr-spacing)*-1)}.skippr\\:-right-8{right:calc(var(--skippr-spacing)*-8)}.skippr\\:-right-\\[2px\\]{right:-2px}.skippr\\:-right-\\[6px\\]{right:-6px}.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\\:right-\\[4px\\]{right:4px}.skippr\\:right-\\[8px\\]{right:8px}.skippr\\:-bottom-\\[2px\\]{bottom:-2px}.skippr\\:bottom-3{bottom:calc(var(--skippr-spacing)*3)}.skippr\\:bottom-4{bottom:calc(var(--skippr-spacing)*4)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-\\[calc\\(100\\%\\+8px\\)\\]{bottom:calc(100% + 8px)}.skippr\\:bottom-\\[calc\\(100\\%\\+11px\\)\\]{bottom:calc(100% + 11px)}.skippr\\:bottom-full{bottom:100%}.skippr\\:-left-8{left:calc(var(--skippr-spacing)*-8)}.skippr\\:-left-\\[2px\\]{left:-2px}.skippr\\:-left-\\[6px\\]{left:-6px}.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-\\[1\\]{z-index:1}.skippr\\:z-\\[2\\]{z-index:2}.skippr\\:z-\\[4\\]{z-index:4}.skippr\\:z-\\[5\\]{z-index:5}.skippr\\:z-\\[6\\]{z-index:6}.skippr\\:z-\\[7\\]{z-index:7}.skippr\\:z-\\[8\\]{z-index:8}.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-1{margin-top:calc(var(--skippr-spacing)*-1)}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.skippr\\:-mt-\\[27px\\]{margin-top:-27px}.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\\:mt-\\[1px\\]{margin-top:1px}.skippr\\:mt-\\[6px\\]{margin-top:6px}.skippr\\:mt-\\[8px\\]{margin-top:8px}.skippr\\:mt-\\[9px\\]{margin-top:9px}.skippr\\:-mr-1{margin-right:calc(var(--skippr-spacing)*-1)}.skippr\\:mr-7{margin-right:calc(var(--skippr-spacing)*7)}.skippr\\:mr-\\[22px\\]{margin-right:22px}.skippr\\:-mb-\\[5px\\]{margin-bottom:-5px}.skippr\\:mb-1{margin-bottom:calc(var(--skippr-spacing)*1)}.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\\:mb-\\[14px\\]{margin-bottom:14px}.skippr\\:-ml-\\[2px\\]{margin-left:-2px}.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\\:ml-auto{margin-left:auto}.skippr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skippr\\:block{display:block}.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-\\[3px\\]{width:3px;height:3px}.skippr\\:size-\\[4px\\]{width:4px;height:4px}.skippr\\:size-\\[5px\\]{width:5px;height:5px}.skippr\\:size-\\[6px\\]{width:6px;height:6px}.skippr\\:size-\\[7px\\]{width:7px;height:7px}.skippr\\:size-\\[8px\\]{width:8px;height:8px}.skippr\\:size-\\[9px\\]{width:9px;height:9px}.skippr\\:size-\\[10px\\]{width:10px;height:10px}.skippr\\:size-\\[11px\\]{width:11px;height:11px}.skippr\\:size-\\[12px\\]{width:12px;height:12px}.skippr\\:size-\\[13px\\]{width:13px;height:13px}.skippr\\:size-\\[14px\\]{width:14px;height:14px}.skippr\\:size-\\[15px\\]{width:15px;height:15px}.skippr\\:size-\\[16px\\]{width:16px;height:16px}.skippr\\:size-\\[17px\\]{width:17px;height:17px}.skippr\\:size-\\[18px\\]{width:18px;height:18px}.skippr\\:size-\\[19px\\]{width:19px;height:19px}.skippr\\:size-\\[20px\\]{width:20px;height:20px}.skippr\\:size-\\[22px\\]{width:22px;height:22px}.skippr\\:size-\\[26px\\]{width:26px;height:26px}.skippr\\:size-\\[28px\\]{width:28px;height:28px}.skippr\\:size-\\[30px\\]{width:30px;height:30px}.skippr\\:size-\\[32px\\]{width:32px;height:32px}.skippr\\:size-\\[34px\\]{width:34px;height:34px}.skippr\\:size-\\[38px\\]{width:38px;height:38px}.skippr\\:size-\\[46px\\]{width:46px;height:46px}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.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-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-\\[5px\\]{height:5px}.skippr\\:h-\\[11px\\]{height:11px}.skippr\\:h-\\[14px\\]{height:14px}.skippr\\:h-\\[16px\\]{height:16px}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[18px\\]{height:18px}.skippr\\:h-\\[22px\\]{height:22px}.skippr\\:h-\\[24px\\]{height:24px}.skippr\\:h-\\[26px\\]{height:26px}.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\\:h-px{height:1px}.skippr\\:max-h-\\[132px\\]{max-height:132px}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:min-h-11{min-height:calc(var(--skippr-spacing)*11)}.skippr\\:min-h-\\[16px\\]{min-height:16px}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.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-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-40{width:calc(var(--skippr-spacing)*40)}.skippr\\:w-\\[2\\.5px\\]{width:2.5px}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-\\[3px\\]{width:3px}.skippr\\:w-\\[9px\\]{width:9px}.skippr\\:w-\\[14px\\]{width:14px}.skippr\\:w-\\[15\\.4px\\]{width:15.4px}.skippr\\:w-\\[15px\\]{width:15px}.skippr\\:w-\\[16px\\]{width:16px}.skippr\\:w-\\[22px\\]{width:22px}.skippr\\:w-\\[36px\\]{width:36px}.skippr\\:w-\\[38px\\]{width:38px}.skippr\\:w-\\[50px\\]{width:50px}.skippr\\:w-\\[148px\\]{width:148px}.skippr\\:w-\\[150px\\]{width:150px}.skippr\\:w-\\[220px\\]{width:220px}.skippr\\:w-\\[225px\\]{width:225px}.skippr\\:w-\\[240px\\]{width:240px}.skippr\\:w-\\[255px\\]{width:255px}.skippr\\:w-\\[320px\\]{width:320px}.skippr\\:w-fit{width:fit-content}.skippr\\:w-full{width:100%}.skippr\\:w-px{width:1px}.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\\:min-w-\\[96px\\]{min-width:96px}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom{transform-origin:bottom}.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{transform-origin:top}.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\\:-translate-y-\\[4px\\]{--tw-translate-y:calc(4px*-1);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-block-reveal_320ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.32s cubic-bezier(.22,1,.36,1) skippr-block-reveal}.skippr\\:\\[animation\\:skippr-breathe_1\\.1s_ease-in-out_0\\.18s_infinite\\]{animation:1.1s ease-in-out .18s infinite skippr-breathe}.skippr\\:\\[animation\\:skippr-breathe_1\\.1s_ease-in-out_0\\.36s_infinite\\]{animation:1.1s ease-in-out .36s infinite skippr-breathe}.skippr\\:\\[animation\\:skippr-breathe_1\\.1s_ease-in-out_0s_infinite\\]{animation:1.1s ease-in-out infinite skippr-breathe}.skippr\\:\\[animation\\:skippr-evaporate_3\\.2s_ease-in_forwards\\]{animation:3.2s ease-in forwards skippr-evaporate}.skippr\\:\\[animation\\:skippr-fade-in_0\\.2s_ease\\]{animation:.2s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.16s_ease\\]{animation:.16s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.22s_ease\\]{animation:.22s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.24s_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.24s cubic-bezier(.22,1,.36,1) skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.25s_ease\\]{animation:.25s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-out_0\\.18s_ease-in_forwards\\]{animation:.18s ease-in forwards skippr-fade-out}.skippr\\:\\[animation\\:skippr-finger-tap_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-finger-tap}.skippr\\:\\[animation\\:skippr-mote-rise_1\\.6s_ease-out_infinite\\]{animation:1.6s ease-out infinite skippr-mote-rise}.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-pop_0\\.2s_ease\\]{animation:.2s skippr-pop}.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\\)\\]{animation:.36s cubic-bezier(.34,1.3,.64,1) skippr-tip-in}.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-flow{animation:3.6s linear infinite skippr-flow}.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-skippr-voice-pulse{animation:1.6s ease-out infinite skippr-voice-pulse}.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\\:appearance-none{appearance:none}.skippr\\:flex-col{flex-direction:column}.skippr\\:flex-col-reverse{flex-direction:column-reverse}.skippr\\:flex-row{flex-direction:row}.skippr\\:flex-row-reverse{flex-direction:row-reverse}.skippr\\:items-baseline{align-items:baseline}.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-\\[1px\\]{gap:1px}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}.skippr\\:gap-\\[4px\\]{gap:4px}.skippr\\:gap-\\[5px\\]{gap:5px}.skippr\\:gap-\\[6px\\]{gap:6px}.skippr\\:gap-\\[7px\\]{gap:7px}.skippr\\:gap-\\[8px\\]{gap:8px}.skippr\\:gap-\\[9px\\]{gap:9px}.skippr\\:gap-\\[10px\\]{gap:10px}.skippr\\:gap-\\[14px\\]{gap:14px}.skippr\\:gap-px{gap:1px}: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)))}:where(.skippr\\:space-y-\\[6px\\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(6px*var(--tw-space-y-reverse));margin-block-end:calc(6px*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-visible{overflow:visible}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:overscroll-contain{overscroll-behavior:contain}.skippr\\:rounded{border-radius:.25rem}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[4px\\]{border-radius:4px}.skippr\\:rounded-\\[5px\\]{border-radius:5px}.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-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:rounded-t-\\[6px\\]{border-top-left-radius:6px;border-top-right-radius:6px}.skippr\\:rounded-t-\\[18px\\]{border-top-left-radius:18px;border-top-right-radius:18px}.skippr\\:rounded-t-full{border-top-left-radius:3.40282e38px;border-top-right-radius:3.40282e38px}.skippr\\:rounded-l-\\[6px\\]{border-top-left-radius:6px;border-bottom-left-radius:6px}.skippr\\:rounded-l-\\[18px\\]{border-top-left-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.skippr\\:rounded-tl-\\[6px\\]{border-top-left-radius:6px}.skippr\\:rounded-tl-md{border-top-left-radius:.5rem}.skippr\\:rounded-r-\\[6px\\]{border-top-right-radius:6px;border-bottom-right-radius:6px}.skippr\\:rounded-r-\\[18px\\]{border-top-right-radius:18px;border-bottom-right-radius:18px}.skippr\\:rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.skippr\\:rounded-tr-\\[6px\\]{border-top-right-radius:6px}.skippr\\:rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.skippr\\:rounded-b-\\[18px\\]{border-bottom-right-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-b-full{border-bottom-right-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.skippr\\:rounded-bl-\\[6px\\]{border-bottom-left-radius:6px}.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-\\[2\\.5px\\]{border-style:var(--tw-border-style);border-width:2.5px}.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-none{--tw-border-style:none;border-style:none}.skippr\\:border-\\[\\#d8d3ca\\]{border-color:#d8d3ca}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.1\\)\\]{border-color:#2d2d3f1a}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.06\\)\\]{border-color:#2d2d3f0f}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.08\\)\\]{border-color:#2d2d3f14}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.12\\)\\]{border-color:#2d2d3f1f}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.14\\)\\]{border-color:#2d2d3f24}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.28\\)\\]{border-color:#2d2d3f47}.skippr\\:border-\\[var\\(--skippr-brand-ring\\)\\]{border-color:var(--skippr-brand-ring)}.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{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-brand{border-color:var(--skippr-brand,#2bc0ae)}.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary,.skippr\\:border-primary\\/20{border-color:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:border-primary\\/20{border-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)20%,transparent)}}.skippr\\:border-transparent{border-color:#0000}.skippr\\:border-white,.skippr\\:border-white\\/30{border-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:border-white\\/30{border-color:color-mix(in oklab,var(--skippr-color-white)30%,transparent)}}.skippr\\:border-t-brand{border-top-color:var(--skippr-brand,#2bc0ae)}.skippr\\:border-t-white{border-top-color:var(--skippr-color-white)}.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-\\[\\#2D2D3F\\]{background-color:#2d2d3f}.skippr\\:bg-\\[\\#F1EFEA\\]{background-color:#f1efea}.skippr\\:bg-\\[\\#b9b4ab\\]{background-color:#b9b4ab}.skippr\\:bg-\\[\\#dc2626\\]{background-color:#dc2626}.skippr\\:bg-\\[\\#eeeae4\\]{background-color:#eeeae4}.skippr\\:bg-\\[\\#f2f0eb\\]{background-color:#f2f0eb}.skippr\\:bg-\\[\\#f4ecd8\\]{background-color:#f4ecd8}.skippr\\:bg-\\[\\#f4f2ee\\]{background-color:#f4f2ee}.skippr\\:bg-\\[rgba\\(45\\,45\\,63\\,0\\.03\\)\\]{background-color:#2d2d3f08}.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-brand,.skippr\\:bg-brand\\/50{background-color:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-brand\\/50{background-color:color-mix(in oklab,var(--skippr-brand,#2bc0ae)50%,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-foreground\\/10{background-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:bg-launcher{background-color:#2d2d3f}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-neutral-100{background-color:var(--skippr-color-neutral-100)}.skippr\\:bg-primary,.skippr\\:bg-primary\\/10{background-color:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-primary\\/10{background-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)10%,transparent)}}.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-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\\/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\\:bg-white\\/80{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/80{background-color:color-mix(in oklab,var(--skippr-color-white)80%,transparent)}}.skippr\\:bg-white\\/95{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/95{background-color:color-mix(in oklab,var(--skippr-color-white)95%,transparent)}}.skippr\\:fill-brand{fill:var(--skippr-brand,#2bc0ae)}.skippr\\:fill-current{fill:currentColor}.skippr\\:fill-primary\\/30{fill:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:fill-primary\\/30{fill:color-mix(in oklab,var(--skippr-brand,#2d2b3d)30%,transparent)}}.skippr\\:fill-white{fill:var(--skippr-color-white)}.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\\:object-contain{object-fit:contain}.skippr\\:object-cover{object-fit:cover}.skippr\\:p-0{padding:calc(var(--skippr-spacing)*0)}.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\\:p-\\[2px\\]{padding:2px}.skippr\\:p-\\[3px\\]{padding:3px}.skippr\\:p-\\[9px\\]{padding:9px}.skippr\\:p-\\[14px\\]{padding:14px}.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-5{padding-inline:calc(var(--skippr-spacing)*5)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:px-\\[5px\\]{padding-inline:5px}.skippr\\:px-\\[7px\\]{padding-inline:7px}.skippr\\:px-\\[9px\\]{padding-inline:9px}.skippr\\:px-\\[10px\\]{padding-inline:10px}.skippr\\:px-\\[11px\\]{padding-inline:11px}.skippr\\:px-\\[12px\\]{padding-inline:12px}.skippr\\:px-\\[18px\\]{padding-inline:18px}.skippr\\:px-\\[22px\\]{padding-inline:22px}.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\\:py-\\[1px\\]{padding-block:1px}.skippr\\:py-\\[3px\\]{padding-block:3px}.skippr\\:py-\\[4px\\]{padding-block:4px}.skippr\\:py-\\[5px\\]{padding-block:5px}.skippr\\:py-\\[6px\\]{padding-block:6px}.skippr\\:py-\\[7px\\]{padding-block:7px}.skippr\\:py-\\[13px\\]{padding-block:13px}.skippr\\:pt-1{padding-top:calc(var(--skippr-spacing)*1)}.skippr\\:pt-5{padding-top:calc(var(--skippr-spacing)*5)}.skippr\\:pt-\\[8px\\]{padding-top:8px}.skippr\\:pt-\\[9px\\]{padding-top:9px}.skippr\\:pt-\\[10px\\]{padding-top:10px}.skippr\\:pt-\\[18px\\]{padding-top:18px}.skippr\\:pt-\\[22px\\]{padding-top:22px}.skippr\\:pr-2\\.5{padding-right:calc(var(--skippr-spacing)*2.5)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pr-\\[5px\\]{padding-right:5px}.skippr\\:pr-\\[6px\\]{padding-right:6px}.skippr\\:pr-\\[9px\\]{padding-right:9px}.skippr\\:pr-\\[10px\\]{padding-right:10px}.skippr\\:pb-0\\.5{padding-bottom:calc(var(--skippr-spacing)*.5)}.skippr\\:pb-1{padding-bottom:calc(var(--skippr-spacing)*1)}.skippr\\:pb-4{padding-bottom:calc(var(--skippr-spacing)*4)}.skippr\\:pb-\\[8px\\]{padding-bottom:8px}.skippr\\:pb-\\[10px\\]{padding-bottom:10px}.skippr\\:pb-\\[22px\\]{padding-bottom:22px}.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\\:pl-\\[9px\\]{padding-left:9px}.skippr\\:pl-\\[13px\\]{padding-left:13px}.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-\\[8\\.5px\\]{font-size:8.5px}.skippr\\:text-\\[9\\.5px\\]{font-size:9.5px}.skippr\\:text-\\[9px\\]{font-size:9px}.skippr\\:text-\\[10\\.5px\\]{font-size:10.5px}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11\\.5px\\]{font-size:11.5px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:text-\\[12\\.5px\\]{font-size:12.5px}.skippr\\:text-\\[12px\\]{font-size:12px}.skippr\\:text-\\[13px\\]{font-size:13px}.skippr\\:text-\\[14px\\]{font-size:14px}.skippr\\:text-\\[16px\\]{font-size:16px}.skippr\\:text-\\[18px\\]{font-size:18px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-\\[1\\.2\\]{--tw-leading:1.2;line-height:1.2}.skippr\\:leading-\\[1\\.25\\]{--tw-leading:1.25;line-height:1.25}.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\\:font-bold{--tw-font-weight:var(--skippr-font-weight-bold);font-weight:var(--skippr-font-weight-bold)}.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\\:tracking-\\[-0\\.01em\\]{--tw-tracking:-.01em;letter-spacing:-.01em}.skippr\\:tracking-\\[-0\\.0125em\\]{--tw-tracking:-.0125em;letter-spacing:-.0125em}.skippr\\:tracking-\\[0\\.02em\\]{--tw-tracking:.02em;letter-spacing:.02em}.skippr\\:tracking-\\[0\\.05em\\]{--tw-tracking:.05em;letter-spacing:.05em}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-\\[\\#2D2D3F\\]{color:#2d2d3f}.skippr\\:text-\\[\\#5a5650\\]{color:#5a5650}.skippr\\:text-\\[\\#5c5850\\]{color:#5c5850}.skippr\\:text-\\[\\#6b6660\\]{color:#6b6660}.skippr\\:text-\\[\\#6b6875\\]{color:#6b6875}.skippr\\:text-\\[\\#8b877f\\]{color:#8b877f}.skippr\\:text-\\[\\#92400e\\]{color:#92400e}.skippr\\:text-\\[\\#a8a49c\\]{color:#a8a49c}.skippr\\:text-\\[\\#b8b4ac\\]{color:#b8b4ac}.skippr\\:text-\\[\\#c9c5bd\\]{color:#c9c5bd}.skippr\\:text-\\[\\#cbc7bf\\]{color:#cbc7bf}.skippr\\:text-\\[\\#dc2626\\]{color:#dc2626}.skippr\\:text-\\[var\\(--skippr-brand-deep\\)\\]{color:var(--skippr-brand-deep)}.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:var(--skippr-brand,#2bc0ae)}.skippr\\:text-brand-on-white{color:var(--skippr-brand-on-white,#1e8478)}.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-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\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-neutral-500{color:var(--skippr-color-neutral-500)}.skippr\\:text-neutral-700{color:var(--skippr-color-neutral-700)}.skippr\\:text-primary{color:var(--skippr-brand,#2d2b3d)}.skippr\\:text-primary-foreground{color:var(--skippr-brand-foreground,#fff)}.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\\:uppercase{text-transform:uppercase}.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\\:underline{text-decoration-line:underline}.skippr\\:decoration-muted-foreground\\/40{text-decoration-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:underline-offset-2,.skippr\\:underline-offset-\\[2px\\]{text-underline-offset:2px}.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-85{opacity:.85}.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-\\[-3px_0_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:-3px 0 14px var(--tw-shadow-color,var(--skippr-brand-halo));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-\\[-4px_6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:-4px 6px 18px var(--tw-shadow-color,#2d2d3f29);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_-3px_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:0 -3px 14px var(--tw-shadow-color,var(--skippr-brand-halo));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_-6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:0 -6px 18px var(--tw-shadow-color,#2d2d3f29);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_0_0_1\\.5px_rgba\\(255\\,255\\,255\\,0\\.85\\)\\]{--tw-shadow:0 0 0 1.5px var(--tw-shadow-color,#ffffffd9);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_0_0_1px_rgba\\(45\\,45\\,63\\,0\\.10\\)\\,0_1px_2px_rgba\\(45\\,45\\,63\\,0\\.04\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#2d2d3f1a),0 1px 2px var(--tw-shadow-color,#2d2d3f0a);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_0_0_4px_var\\(--skippr-brand-ring\\)\\]{--tw-shadow:0 0 0 4px var(--tw-shadow-color,var(--skippr-brand-ring));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_1px_2px_rgba\\(45\\,45\\,63\\,0\\.05\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#2d2d3f0d);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_1px_2px_rgba\\(45\\,45\\,63\\,0\\.08\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#2d2d3f14);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_2px_6px_rgba\\(45\\,45\\,63\\,0\\.14\\)\\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#2d2d3f24);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_3px_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:0 3px 14px var(--tw-shadow-color,var(--skippr-brand-halo));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_12px_rgba\\(45\\,45\\,63\\,0\\.1\\)\\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#2d2d3f1a);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_6px_16px_rgba\\(45\\,45\\,63\\,0\\.14\\)\\]{--tw-shadow:0 6px 16px var(--tw-shadow-color,#2d2d3f24);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_6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#2d2d3f29);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_22px_rgba\\(45\\,45\\,63\\,0\\.12\\)\\,0_1px_3px_rgba\\(45\\,45\\,63\\,0\\.04\\)\\]{--tw-shadow:0 8px 22px var(--tw-shadow-color,#2d2d3f1f),0 1px 3px var(--tw-shadow-color,#2d2d3f0a);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\\(45\\,45\\,63\\,0\\.14\\)\\,0_2px_6px_rgba\\(45\\,45\\,63\\,0\\.06\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#2d2d3f24),0 2px 6px var(--tw-shadow-color,#2d2d3f0f);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_26px_rgba\\(45\\,45\\,63\\,0\\.13\\)\\,0_2px_6px_rgba\\(45\\,45\\,63\\,0\\.05\\)\\]{--tw-shadow:0 10px 26px var(--tw-shadow-color,#2d2d3f21),0 2px 6px var(--tw-shadow-color,#2d2d3f0d);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_28px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:0 10px 28px var(--tw-shadow-color,#2d2d3f29);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_30px_rgba\\(45\\,45\\,63\\,0\\.14\\)\\,0_0_0_1\\.5px_var\\(--skippr-brand-ring\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#2d2d3f24),0 0 0 1.5px var(--tw-shadow-color,var(--skippr-brand-ring));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-\\[0_14px_34px_rgba\\(45\\,45\\,63\\,0\\.15\\)\\,0_2px_6px_rgba\\(45\\,45\\,63\\,0\\.06\\)\\]{--tw-shadow:0 14px 34px var(--tw-shadow-color,#2d2d3f26),0 2px 6px var(--tw-shadow-color,#2d2d3f0f);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-\\[3px_0_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:3px 0 14px var(--tw-shadow-color,var(--skippr-brand-halo));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-\\[4px_6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:4px 6px 18px var(--tw-shadow-color,#2d2d3f29);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-\\[inset_0_0_0_1\\.5px_var\\(--skippr-brand\\,\\#2bc0ae\\)\\]{--tw-shadow:inset 0 0 0 1.5px var(--tw-shadow-color,var(--skippr-brand,#2bc0ae));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-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:var(--skippr-brand,#2bc0ae)}.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-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-\\[filter\\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[gap\\]{transition-property:gap;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.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-\\[left\\]{transition-property:left;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\\,color\\]{transition-property:opacity,color;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-\\[opacity\\,transform\\]{transition-property:opacity,transform;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\\,height\\,background-color\\,border-color\\]{transition-property:width,height,background-color,border-color;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-shadow{transition-property:box-shadow;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\\.3\\,0\\.64\\,1\\)\\]{--tw-ease:cubic-bezier(.34,1.3,.64,1);transition-timing-function:cubic-bezier(.34,1.3,.64,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\\:select-text{-webkit-user-select:text;user-select:text}.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-\\[\\#b0aca4\\]::placeholder{color:#b0aca4}.skippr\\:first\\:mt-0:first-child{margin-top:calc(var(--skippr-spacing)*0)}@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\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:hover\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.45\\)\\]:hover{border-color:#2d2d3f73}.skippr\\:hover\\:bg-\\[\\#3a384b\\]:hover{background-color:#3a384b}.skippr\\:hover\\:bg-\\[\\#3d3d52\\]:hover{background-color:#3d3d52}.skippr\\:hover\\:bg-\\[\\#f2f0eb\\]:hover{background-color:#f2f0eb}.skippr\\:hover\\:bg-\\[\\#f4f2ee\\]:hover{background-color:#f4f2ee}.skippr\\:hover\\:bg-\\[\\#f6f4f0\\]:hover{background-color:#f6f4f0}.skippr\\:hover\\:bg-\\[rgba\\(45\\,45\\,63\\,0\\.04\\)\\]:hover{background-color:#2d2d3f0a}.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-foreground\\/8:hover{background-color:oklab(14.7% .00261104 .00303026/.08)}.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:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)90%,transparent)}}.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-transparent:hover{background-color:#0000}.skippr\\:hover\\:text-\\[\\#2D2D3F\\]:hover{color:#2d2d3f}.skippr\\:hover\\:text-\\[\\#5a5650\\]:hover{color:#5a5650}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-destructive:hover{color:#d94f4f}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:underline:hover{text-decoration-line:underline}.skippr\\:hover\\:decoration-muted-foreground:hover{text-decoration-color:oklch(55.3% .013 58.071)}.skippr\\:hover\\:opacity-80:hover{opacity:.8}.skippr\\:hover\\:opacity-100:hover{opacity:1}.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\\:hover\\:brightness-\\[1\\.04\\]:hover{--tw-brightness:brightness(1.04);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\\:hover\\:brightness-\\[1\\.06\\]:hover{--tw-brightness:brightness(1.06);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\\:border-primary:focus{border-color:var(--skippr-brand,#2d2b3d)}.skippr\\:focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus\\:ring-primary\\/30:focus{--tw-ring-color:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:focus\\:ring-primary\\/30:focus{--tw-ring-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)30%,transparent)}}.skippr\\:focus-visible\\:border-\\[var\\(--skippr-brand-ring\\)\\]:focus-visible{border-color:var(--skippr-brand-ring)}.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-\\[var\\(--skippr-brand-ring\\)\\]:focus-visible{--tw-ring-color:var(--skippr-brand-ring)}.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-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.skippr\\:focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.skippr\\:focus-visible\\:outline-\\[var\\(--skippr-brand\\)\\]:focus-visible{outline-color:var(--skippr-brand)}.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\\:active\\:scale-\\[0\\.98\\]:active{scale:.98}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-default:disabled{cursor:default}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}.skippr\\:disabled\\:opacity-80:disabled{opacity:.8}@media (hover:hover){.skippr\\:disabled\\:hover\\:bg-\\[\\#2D2D3F\\]:disabled:hover{background-color:#2d2d3f}.skippr\\:disabled\\:hover\\:bg-white:disabled:hover{background-color:var(--skippr-color-white)}}@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)}}:host{--skippr-brand-active:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-active:color-mix(in srgb,var(--skippr-brand,#2bc0ae)93%,#000)}}:host{--skippr-brand-deep:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-deep:color-mix(in srgb,var(--skippr-brand,#2bc0ae)78%,#000)}}:host{--skippr-brand-ring:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-ring:color-mix(in srgb,var(--skippr-brand,#2bc0ae)22%,transparent)}}:host{--skippr-brand-halo:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-halo:color-mix(in srgb,var(--skippr-brand,#2bc0ae)40%,transparent)}}:host{--skippr-brand-glow:linear-gradient(90deg,var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae))}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-glow:linear-gradient(90deg,var(--skippr-brand,#2bc0ae),color-mix(in srgb,var(--skippr-brand,#2bc0ae)55%,#fff),color-mix(in srgb,var(--skippr-brand,#2bc0ae)72%,#fff),var(--skippr-brand,#2bc0ae),color-mix(in srgb,var(--skippr-brand,#2bc0ae)42%,#fff))}}@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 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)55%,transparent)}70%{box-shadow:0 0 0 11px #0000}to{box-shadow:0 0 #0000}}@keyframes skippr-voice-pulse{0%{box-shadow:0 0 0 0 var(--skippr-pulse-color,#2bc0ae80)}70%{box-shadow:0 0 0 8px #0000}to{box-shadow:0 0 #0000}}@keyframes skippr-ptt-transmit{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)60%,transparent),0 0 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)35%,transparent)}70%{box-shadow:0 0 0 9px #0000,0 0 0 16px #0000}to{box-shadow:0 0 #0000,0 0 #0000}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)50%,transparent)}50%{box-shadow:0 0 0 6px #0000}}@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-evaporate{0%{opacity:1;filter:blur();transform:translateY(0)scale(1)}55%{opacity:.85;filter:blur()}to{opacity:0;filter:blur(2.5px);transform:translateY(-7px)scale(.965)}}@keyframes skippr-mote-rise{0%{opacity:0;transform:translateY(2px)scale(.5)}25%{opacity:.85}to{opacity:0;transform:translateY(-24px)scale(1)}}@keyframes skippr-flow{0%{background-position:0%}50%{background-position:100%}to{background-position: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)}}@keyframes skippr-pop{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:none}}@keyframes skippr-blink{0%,40%{transform:scaleY(1)}41.3%,42%{transform:scaleY(.08)}43.3%,70%{transform:scaleY(1)}71.3%,72%{transform:scaleY(.08)}73.3%,to{transform:scaleY(1)}}.skippr-buddy-blink{transform-box:fill-box;transform-origin:50%;animation:5s linear infinite skippr-blink}@keyframes skippr-avatar-eyes-bob{0%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(0)}18%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(24px)}33.33%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(-30px)}48%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(-7px)}64%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(-30px)}82%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(31px)}96%,to{transform:translateY(0)}}@keyframes skippr-avatar-pupil-glance{0%,21.33%{transform:translate(0)}28%,68%{transform:translate(-30px)}74%,to{transform:translate(0)}}@keyframes skippr-avatar-body-vibe{0%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1)}17.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1.08,.95)}33.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1)}49.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1.08,.95)}65.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1)}81.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1.08,.95)}96%,to{transform:scale(1)}}@keyframes skippr-avatar-blink{0%,40%{transform:scaleY(1)}41.3%,42%{transform:scaleY(.08)}43.3%,70%{transform:scaleY(1)}71.3%,72%{transform:scaleY(.08)}73.3%,to{transform:scaleY(1)}}@keyframes skippr-avatar-bub-tail-drift{0%,10%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translate(0)}45%,60%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translate(-24px)}95%,to{transform:translate(0)}}@keyframes skippr-avatar-antenna-shake{0%,to{transform:rotate(-4deg)}25%{transform:rotate(4deg)}50%{transform:rotate(-3deg)}75%{transform:rotate(3deg)}}.skippr-avatar-eyes{animation:5s infinite skippr-avatar-eyes-bob}.skippr-avatar-pupil{animation:5s linear infinite skippr-avatar-pupil-glance}.skippr-avatar-body{transform-box:fill-box;transform-origin:50% 100%;animation:5s infinite skippr-avatar-body-vibe}.skippr-avatar-blink{transform-box:fill-box;transform-origin:50%;animation:5s infinite skippr-avatar-blink}.skippr-avatar-body .skippr-avatar-antenna{transform-box:view-box;transform-origin:48px 22px;animation:1.6s ease-in-out infinite skippr-avatar-antenna-shake}.skippr-avatar-body .skippr-avatar-bub-tail{animation:5s infinite skippr-avatar-bub-tail-drift}@keyframes skippr-buddy-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes skippr-buddy-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}@keyframes skippr-buddy-pop{0%{transform:scale(1)}50%{transform:scale(1.06)}to{transform:scale(1)}}@keyframes skippr-buddy-sleep{0%,to{transform:translateY(0)scale(1)}50%{transform:translateY(1px)scale(.995)}}@keyframes skippr-buddy-zfloat{0%{opacity:0;transform:translateY(0)}20%{opacity:1}to{opacity:0;transform:translateY(-10px)}}@keyframes skippr-peek-left{0%,20%{transform:translate(-58%)}46%,66%{transform:translate(0)}92%,to{transform:translate(-58%)}}@keyframes skippr-peek-right{0%,20%{transform:translate(58%)}46%,66%{transform:translate(0)}92%,to{transform:translate(58%)}}@keyframes skippr-peek-top{0%,20%{transform:translateY(-58%)}46%,66%{transform:translateY(0)}92%,to{transform:translateY(-58%)}}@keyframes skippr-peek-bottom{0%,20%{transform:translateY(58%)}46%,66%{transform:translateY(0)}92%,to{transform:translateY(58%)}}.skippr-peek-left{animation:3.6s ease-in-out infinite skippr-peek-left}.skippr-peek-right{animation:3.6s ease-in-out infinite skippr-peek-right}.skippr-peek-top{animation:3.6s ease-in-out infinite skippr-peek-top}.skippr-peek-bottom{animation:3.6s ease-in-out infinite skippr-peek-bottom}.skippr-peek-out{animation:none;transform:none}@keyframes skippr-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}@keyframes skippr-block-reveal{0%{opacity:0;max-height:0;transform:translateY(-4px)}55%{opacity:1}to{opacity:1;max-height:260px;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.skippr-buddy-blink,[style*=skippr-blink],[style*=skippr-buddy-bob],[style*=skippr-buddy-breathe],[style*=skippr-buddy-pop],[style*=skippr-buddy-sleep],[style*=skippr-buddy-zfloat],.skippr-avatar-eyes,.skippr-avatar-pupil,.skippr-avatar-body,.skippr-avatar-blink,.skippr-avatar-body .skippr-avatar-antenna,.skippr-avatar-body .skippr-avatar-bub-tail,.skippr-peek-left,.skippr-peek-right,.skippr-peek-top,.skippr-peek-bottom{animation-play-state:paused}}.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-tracking{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}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}}`;
8978
+ @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-tracking: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;--tw-outline-style:solid}}}@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-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-font-weight-bold:700;--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-auto{pointer-events:auto}.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-\\[3px\\]{inset:-3px}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:inset-y-0{inset-block:calc(var(--skippr-spacing)*0)}.skippr\\:-top-1{top:calc(var(--skippr-spacing)*-1)}.skippr\\:-top-6{top:calc(var(--skippr-spacing)*-6)}.skippr\\:-top-8{top:calc(var(--skippr-spacing)*-8)}.skippr\\:-top-\\[2px\\]{top:-2px}.skippr\\:-top-\\[3px\\]{top:-3px}.skippr\\:-top-\\[13px\\]{top:-13px}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-\\[8px\\]{top:8px}.skippr\\:top-full{top:100%}.skippr\\:-right-1{right:calc(var(--skippr-spacing)*-1)}.skippr\\:-right-8{right:calc(var(--skippr-spacing)*-8)}.skippr\\:-right-\\[2px\\]{right:-2px}.skippr\\:-right-\\[6px\\]{right:-6px}.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\\:right-\\[4px\\]{right:4px}.skippr\\:right-\\[8px\\]{right:8px}.skippr\\:-bottom-\\[2px\\]{bottom:-2px}.skippr\\:bottom-3{bottom:calc(var(--skippr-spacing)*3)}.skippr\\:bottom-4{bottom:calc(var(--skippr-spacing)*4)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-\\[calc\\(100\\%\\+8px\\)\\]{bottom:calc(100% + 8px)}.skippr\\:bottom-\\[calc\\(100\\%\\+11px\\)\\]{bottom:calc(100% + 11px)}.skippr\\:bottom-full{bottom:100%}.skippr\\:-left-8{left:calc(var(--skippr-spacing)*-8)}.skippr\\:-left-\\[2px\\]{left:-2px}.skippr\\:-left-\\[6px\\]{left:-6px}.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-\\[1\\]{z-index:1}.skippr\\:z-\\[2\\]{z-index:2}.skippr\\:z-\\[4\\]{z-index:4}.skippr\\:z-\\[5\\]{z-index:5}.skippr\\:z-\\[6\\]{z-index:6}.skippr\\:z-\\[7\\]{z-index:7}.skippr\\:z-\\[8\\]{z-index:8}.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-1{margin-top:calc(var(--skippr-spacing)*-1)}.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\\:mt-\\[1px\\]{margin-top:1px}.skippr\\:mt-\\[6px\\]{margin-top:6px}.skippr\\:mt-\\[8px\\]{margin-top:8px}.skippr\\:mt-\\[9px\\]{margin-top:9px}.skippr\\:-mr-1{margin-right:calc(var(--skippr-spacing)*-1)}.skippr\\:mr-7{margin-right:calc(var(--skippr-spacing)*7)}.skippr\\:mr-\\[22px\\]{margin-right:22px}.skippr\\:-mb-\\[5px\\]{margin-bottom:-5px}.skippr\\:mb-1{margin-bottom:calc(var(--skippr-spacing)*1)}.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\\:mb-\\[14px\\]{margin-bottom:14px}.skippr\\:-ml-\\[2px\\]{margin-left:-2px}.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\\:ml-auto{margin-left:auto}.skippr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skippr\\:block{display:block}.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-\\[3px\\]{width:3px;height:3px}.skippr\\:size-\\[4px\\]{width:4px;height:4px}.skippr\\:size-\\[5px\\]{width:5px;height:5px}.skippr\\:size-\\[6px\\]{width:6px;height:6px}.skippr\\:size-\\[7px\\]{width:7px;height:7px}.skippr\\:size-\\[8px\\]{width:8px;height:8px}.skippr\\:size-\\[9px\\]{width:9px;height:9px}.skippr\\:size-\\[10px\\]{width:10px;height:10px}.skippr\\:size-\\[11px\\]{width:11px;height:11px}.skippr\\:size-\\[12px\\]{width:12px;height:12px}.skippr\\:size-\\[13px\\]{width:13px;height:13px}.skippr\\:size-\\[14px\\]{width:14px;height:14px}.skippr\\:size-\\[15px\\]{width:15px;height:15px}.skippr\\:size-\\[16px\\]{width:16px;height:16px}.skippr\\:size-\\[17px\\]{width:17px;height:17px}.skippr\\:size-\\[18px\\]{width:18px;height:18px}.skippr\\:size-\\[19px\\]{width:19px;height:19px}.skippr\\:size-\\[20px\\]{width:20px;height:20px}.skippr\\:size-\\[22px\\]{width:22px;height:22px}.skippr\\:size-\\[26px\\]{width:26px;height:26px}.skippr\\:size-\\[28px\\]{width:28px;height:28px}.skippr\\:size-\\[30px\\]{width:30px;height:30px}.skippr\\:size-\\[32px\\]{width:32px;height:32px}.skippr\\:size-\\[34px\\]{width:34px;height:34px}.skippr\\:size-\\[38px\\]{width:38px;height:38px}.skippr\\:size-\\[46px\\]{width:46px;height:46px}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.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-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-\\[5px\\]{height:5px}.skippr\\:h-\\[11px\\]{height:11px}.skippr\\:h-\\[14px\\]{height:14px}.skippr\\:h-\\[16px\\]{height:16px}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[18px\\]{height:18px}.skippr\\:h-\\[22px\\]{height:22px}.skippr\\:h-\\[24px\\]{height:24px}.skippr\\:h-\\[26px\\]{height:26px}.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\\:h-px{height:1px}.skippr\\:max-h-\\[132px\\]{max-height:132px}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:min-h-11{min-height:calc(var(--skippr-spacing)*11)}.skippr\\:min-h-\\[16px\\]{min-height:16px}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.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-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-40{width:calc(var(--skippr-spacing)*40)}.skippr\\:w-\\[2\\.5px\\]{width:2.5px}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-\\[3px\\]{width:3px}.skippr\\:w-\\[9px\\]{width:9px}.skippr\\:w-\\[14px\\]{width:14px}.skippr\\:w-\\[15\\.4px\\]{width:15.4px}.skippr\\:w-\\[15px\\]{width:15px}.skippr\\:w-\\[16px\\]{width:16px}.skippr\\:w-\\[22px\\]{width:22px}.skippr\\:w-\\[36px\\]{width:36px}.skippr\\:w-\\[38px\\]{width:38px}.skippr\\:w-\\[50px\\]{width:50px}.skippr\\:w-\\[148px\\]{width:148px}.skippr\\:w-\\[150px\\]{width:150px}.skippr\\:w-\\[220px\\]{width:220px}.skippr\\:w-\\[225px\\]{width:225px}.skippr\\:w-\\[240px\\]{width:240px}.skippr\\:w-\\[255px\\]{width:255px}.skippr\\:w-\\[320px\\]{width:320px}.skippr\\:w-fit{width:fit-content}.skippr\\:w-full{width:100%}.skippr\\:w-px{width:1px}.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\\:min-w-\\[96px\\]{min-width:96px}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom{transform-origin:bottom}.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{transform-origin:top}.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\\:-translate-y-\\[4px\\]{--tw-translate-y:calc(4px*-1);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-block-reveal_320ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.32s cubic-bezier(.22,1,.36,1) skippr-block-reveal}.skippr\\:\\[animation\\:skippr-breathe_1\\.1s_ease-in-out_0\\.18s_infinite\\]{animation:1.1s ease-in-out .18s infinite skippr-breathe}.skippr\\:\\[animation\\:skippr-breathe_1\\.1s_ease-in-out_0\\.36s_infinite\\]{animation:1.1s ease-in-out .36s infinite skippr-breathe}.skippr\\:\\[animation\\:skippr-breathe_1\\.1s_ease-in-out_0s_infinite\\]{animation:1.1s ease-in-out infinite skippr-breathe}.skippr\\:\\[animation\\:skippr-evaporate_3\\.2s_ease-in_forwards\\]{animation:3.2s ease-in forwards skippr-evaporate}.skippr\\:\\[animation\\:skippr-fade-in_0\\.2s_ease\\]{animation:.2s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.16s_ease\\]{animation:.16s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.22s_ease\\]{animation:.22s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.24s_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.24s cubic-bezier(.22,1,.36,1) skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-in_0\\.25s_ease\\]{animation:.25s skippr-fade-in}.skippr\\:\\[animation\\:skippr-fade-out_0\\.18s_ease-in_forwards\\]{animation:.18s ease-in forwards skippr-fade-out}.skippr\\:\\[animation\\:skippr-finger-tap_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-finger-tap}.skippr\\:\\[animation\\:skippr-mote-rise_1\\.6s_ease-out_infinite\\]{animation:1.6s ease-out infinite skippr-mote-rise}.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-pop_0\\.2s_ease\\]{animation:.2s skippr-pop}.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\\)\\]{animation:.36s cubic-bezier(.34,1.3,.64,1) skippr-tip-in}.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-flow{animation:3.6s linear infinite skippr-flow}.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-skippr-voice-pulse{animation:1.6s ease-out infinite skippr-voice-pulse}.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\\:appearance-none{appearance:none}.skippr\\:flex-col{flex-direction:column}.skippr\\:flex-col-reverse{flex-direction:column-reverse}.skippr\\:flex-row{flex-direction:row}.skippr\\:flex-row-reverse{flex-direction:row-reverse}.skippr\\:items-baseline{align-items:baseline}.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-\\[1px\\]{gap:1px}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}.skippr\\:gap-\\[4px\\]{gap:4px}.skippr\\:gap-\\[5px\\]{gap:5px}.skippr\\:gap-\\[6px\\]{gap:6px}.skippr\\:gap-\\[7px\\]{gap:7px}.skippr\\:gap-\\[8px\\]{gap:8px}.skippr\\:gap-\\[9px\\]{gap:9px}.skippr\\:gap-\\[10px\\]{gap:10px}.skippr\\:gap-\\[14px\\]{gap:14px}.skippr\\:gap-px{gap:1px}: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)))}:where(.skippr\\:space-y-\\[6px\\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(6px*var(--tw-space-y-reverse));margin-block-end:calc(6px*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-visible{overflow:visible}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:overscroll-contain{overscroll-behavior:contain}.skippr\\:rounded{border-radius:.25rem}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[4px\\]{border-radius:4px}.skippr\\:rounded-\\[5px\\]{border-radius:5px}.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-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:rounded-t-\\[6px\\]{border-top-left-radius:6px;border-top-right-radius:6px}.skippr\\:rounded-t-\\[18px\\]{border-top-left-radius:18px;border-top-right-radius:18px}.skippr\\:rounded-t-full{border-top-left-radius:3.40282e38px;border-top-right-radius:3.40282e38px}.skippr\\:rounded-l-\\[6px\\]{border-top-left-radius:6px;border-bottom-left-radius:6px}.skippr\\:rounded-l-\\[18px\\]{border-top-left-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.skippr\\:rounded-tl-\\[6px\\]{border-top-left-radius:6px}.skippr\\:rounded-tl-md{border-top-left-radius:.5rem}.skippr\\:rounded-r-\\[6px\\]{border-top-right-radius:6px;border-bottom-right-radius:6px}.skippr\\:rounded-r-\\[18px\\]{border-top-right-radius:18px;border-bottom-right-radius:18px}.skippr\\:rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.skippr\\:rounded-tr-\\[6px\\]{border-top-right-radius:6px}.skippr\\:rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.skippr\\:rounded-b-\\[18px\\]{border-bottom-right-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-b-full{border-bottom-right-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.skippr\\:rounded-bl-\\[6px\\]{border-bottom-left-radius:6px}.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-\\[2\\.5px\\]{border-style:var(--tw-border-style);border-width:2.5px}.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-none{--tw-border-style:none;border-style:none}.skippr\\:border-\\[\\#d8d3ca\\]{border-color:#d8d3ca}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.1\\)\\]{border-color:#2d2d3f1a}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.06\\)\\]{border-color:#2d2d3f0f}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.08\\)\\]{border-color:#2d2d3f14}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.12\\)\\]{border-color:#2d2d3f1f}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.14\\)\\]{border-color:#2d2d3f24}.skippr\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.28\\)\\]{border-color:#2d2d3f47}.skippr\\:border-\\[var\\(--skippr-brand-ring\\)\\]{border-color:var(--skippr-brand-ring)}.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{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-brand{border-color:var(--skippr-brand,#2bc0ae)}.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary,.skippr\\:border-primary\\/20{border-color:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:border-primary\\/20{border-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)20%,transparent)}}.skippr\\:border-transparent{border-color:#0000}.skippr\\:border-white,.skippr\\:border-white\\/30{border-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:border-white\\/30{border-color:color-mix(in oklab,var(--skippr-color-white)30%,transparent)}}.skippr\\:border-t-brand{border-top-color:var(--skippr-brand,#2bc0ae)}.skippr\\:border-t-white{border-top-color:var(--skippr-color-white)}.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-\\[\\#2D2D3F\\]{background-color:#2d2d3f}.skippr\\:bg-\\[\\#F1EFEA\\]{background-color:#f1efea}.skippr\\:bg-\\[\\#b9b4ab\\]{background-color:#b9b4ab}.skippr\\:bg-\\[\\#dc2626\\]{background-color:#dc2626}.skippr\\:bg-\\[\\#eeeae4\\]{background-color:#eeeae4}.skippr\\:bg-\\[\\#f2f0eb\\]{background-color:#f2f0eb}.skippr\\:bg-\\[\\#f4ecd8\\]{background-color:#f4ecd8}.skippr\\:bg-\\[\\#f4f2ee\\]{background-color:#f4f2ee}.skippr\\:bg-\\[rgba\\(45\\,45\\,63\\,0\\.03\\)\\]{background-color:#2d2d3f08}.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-brand,.skippr\\:bg-brand\\/50{background-color:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-brand\\/50{background-color:color-mix(in oklab,var(--skippr-brand,#2bc0ae)50%,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-foreground\\/10{background-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:bg-launcher{background-color:#2d2d3f}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-neutral-100{background-color:var(--skippr-color-neutral-100)}.skippr\\:bg-primary,.skippr\\:bg-primary\\/10{background-color:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-primary\\/10{background-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)10%,transparent)}}.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-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\\/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\\:bg-white\\/80{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/80{background-color:color-mix(in oklab,var(--skippr-color-white)80%,transparent)}}.skippr\\:bg-white\\/95{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/95{background-color:color-mix(in oklab,var(--skippr-color-white)95%,transparent)}}.skippr\\:fill-brand{fill:var(--skippr-brand,#2bc0ae)}.skippr\\:fill-current{fill:currentColor}.skippr\\:fill-primary\\/30{fill:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:fill-primary\\/30{fill:color-mix(in oklab,var(--skippr-brand,#2d2b3d)30%,transparent)}}.skippr\\:fill-white{fill:var(--skippr-color-white)}.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\\:object-contain{object-fit:contain}.skippr\\:object-cover{object-fit:cover}.skippr\\:p-0{padding:calc(var(--skippr-spacing)*0)}.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\\:p-\\[2px\\]{padding:2px}.skippr\\:p-\\[3px\\]{padding:3px}.skippr\\:p-\\[9px\\]{padding:9px}.skippr\\:p-\\[14px\\]{padding:14px}.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-5{padding-inline:calc(var(--skippr-spacing)*5)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:px-\\[5px\\]{padding-inline:5px}.skippr\\:px-\\[7px\\]{padding-inline:7px}.skippr\\:px-\\[9px\\]{padding-inline:9px}.skippr\\:px-\\[10px\\]{padding-inline:10px}.skippr\\:px-\\[11px\\]{padding-inline:11px}.skippr\\:px-\\[12px\\]{padding-inline:12px}.skippr\\:px-\\[18px\\]{padding-inline:18px}.skippr\\:px-\\[22px\\]{padding-inline:22px}.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\\:py-\\[1px\\]{padding-block:1px}.skippr\\:py-\\[3px\\]{padding-block:3px}.skippr\\:py-\\[4px\\]{padding-block:4px}.skippr\\:py-\\[5px\\]{padding-block:5px}.skippr\\:py-\\[6px\\]{padding-block:6px}.skippr\\:py-\\[7px\\]{padding-block:7px}.skippr\\:py-\\[13px\\]{padding-block:13px}.skippr\\:pt-1{padding-top:calc(var(--skippr-spacing)*1)}.skippr\\:pt-5{padding-top:calc(var(--skippr-spacing)*5)}.skippr\\:pt-\\[8px\\]{padding-top:8px}.skippr\\:pt-\\[9px\\]{padding-top:9px}.skippr\\:pt-\\[10px\\]{padding-top:10px}.skippr\\:pt-\\[18px\\]{padding-top:18px}.skippr\\:pt-\\[22px\\]{padding-top:22px}.skippr\\:pr-2\\.5{padding-right:calc(var(--skippr-spacing)*2.5)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pr-\\[5px\\]{padding-right:5px}.skippr\\:pr-\\[6px\\]{padding-right:6px}.skippr\\:pr-\\[9px\\]{padding-right:9px}.skippr\\:pr-\\[10px\\]{padding-right:10px}.skippr\\:pb-0\\.5{padding-bottom:calc(var(--skippr-spacing)*.5)}.skippr\\:pb-1{padding-bottom:calc(var(--skippr-spacing)*1)}.skippr\\:pb-4{padding-bottom:calc(var(--skippr-spacing)*4)}.skippr\\:pb-\\[8px\\]{padding-bottom:8px}.skippr\\:pb-\\[10px\\]{padding-bottom:10px}.skippr\\:pb-\\[22px\\]{padding-bottom:22px}.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\\:pl-\\[9px\\]{padding-left:9px}.skippr\\:pl-\\[13px\\]{padding-left:13px}.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-\\[8\\.5px\\]{font-size:8.5px}.skippr\\:text-\\[9\\.5px\\]{font-size:9.5px}.skippr\\:text-\\[9px\\]{font-size:9px}.skippr\\:text-\\[10\\.5px\\]{font-size:10.5px}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11\\.5px\\]{font-size:11.5px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:text-\\[12\\.5px\\]{font-size:12.5px}.skippr\\:text-\\[12px\\]{font-size:12px}.skippr\\:text-\\[13px\\]{font-size:13px}.skippr\\:text-\\[14px\\]{font-size:14px}.skippr\\:text-\\[16px\\]{font-size:16px}.skippr\\:text-\\[18px\\]{font-size:18px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-\\[1\\.2\\]{--tw-leading:1.2;line-height:1.2}.skippr\\:leading-\\[1\\.25\\]{--tw-leading:1.25;line-height:1.25}.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\\:font-bold{--tw-font-weight:var(--skippr-font-weight-bold);font-weight:var(--skippr-font-weight-bold)}.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\\:tracking-\\[-0\\.01em\\]{--tw-tracking:-.01em;letter-spacing:-.01em}.skippr\\:tracking-\\[-0\\.0125em\\]{--tw-tracking:-.0125em;letter-spacing:-.0125em}.skippr\\:tracking-\\[0\\.02em\\]{--tw-tracking:.02em;letter-spacing:.02em}.skippr\\:tracking-\\[0\\.05em\\]{--tw-tracking:.05em;letter-spacing:.05em}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-\\[\\#2D2D3F\\]{color:#2d2d3f}.skippr\\:text-\\[\\#5a5650\\]{color:#5a5650}.skippr\\:text-\\[\\#5c5850\\]{color:#5c5850}.skippr\\:text-\\[\\#6b6660\\]{color:#6b6660}.skippr\\:text-\\[\\#6b6875\\]{color:#6b6875}.skippr\\:text-\\[\\#8b877f\\]{color:#8b877f}.skippr\\:text-\\[\\#92400e\\]{color:#92400e}.skippr\\:text-\\[\\#a8a49c\\]{color:#a8a49c}.skippr\\:text-\\[\\#b8b4ac\\]{color:#b8b4ac}.skippr\\:text-\\[\\#c9c5bd\\]{color:#c9c5bd}.skippr\\:text-\\[\\#cbc7bf\\]{color:#cbc7bf}.skippr\\:text-\\[\\#dc2626\\]{color:#dc2626}.skippr\\:text-\\[var\\(--skippr-brand-deep\\)\\]{color:var(--skippr-brand-deep)}.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:var(--skippr-brand,#2bc0ae)}.skippr\\:text-brand-on-white{color:var(--skippr-brand-on-white,#1e8478)}.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-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\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-neutral-500{color:var(--skippr-color-neutral-500)}.skippr\\:text-neutral-700{color:var(--skippr-color-neutral-700)}.skippr\\:text-primary{color:var(--skippr-brand,#2d2b3d)}.skippr\\:text-primary-foreground{color:var(--skippr-brand-foreground,#fff)}.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\\:uppercase{text-transform:uppercase}.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\\:underline{text-decoration-line:underline}.skippr\\:decoration-muted-foreground\\/40{text-decoration-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:underline-offset-2,.skippr\\:underline-offset-\\[2px\\]{text-underline-offset:2px}.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-85{opacity:.85}.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-\\[-3px_0_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:-3px 0 14px var(--tw-shadow-color,var(--skippr-brand-halo));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-\\[-4px_6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:-4px 6px 18px var(--tw-shadow-color,#2d2d3f29);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_-3px_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:0 -3px 14px var(--tw-shadow-color,var(--skippr-brand-halo));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_-6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:0 -6px 18px var(--tw-shadow-color,#2d2d3f29);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_0_0_1\\.5px_rgba\\(255\\,255\\,255\\,0\\.85\\)\\]{--tw-shadow:0 0 0 1.5px var(--tw-shadow-color,#ffffffd9);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_0_0_1px_rgba\\(45\\,45\\,63\\,0\\.10\\)\\,0_1px_2px_rgba\\(45\\,45\\,63\\,0\\.04\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#2d2d3f1a),0 1px 2px var(--tw-shadow-color,#2d2d3f0a);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_0_0_4px_var\\(--skippr-brand-ring\\)\\]{--tw-shadow:0 0 0 4px var(--tw-shadow-color,var(--skippr-brand-ring));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_1px_2px_rgba\\(45\\,45\\,63\\,0\\.05\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#2d2d3f0d);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_1px_2px_rgba\\(45\\,45\\,63\\,0\\.08\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#2d2d3f14);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_2px_6px_rgba\\(45\\,45\\,63\\,0\\.14\\)\\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#2d2d3f24);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_3px_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:0 3px 14px var(--tw-shadow-color,var(--skippr-brand-halo));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_12px_rgba\\(45\\,45\\,63\\,0\\.1\\)\\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#2d2d3f1a);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_6px_16px_rgba\\(45\\,45\\,63\\,0\\.14\\)\\]{--tw-shadow:0 6px 16px var(--tw-shadow-color,#2d2d3f24);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_6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:0 6px 18px var(--tw-shadow-color,#2d2d3f29);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_22px_rgba\\(45\\,45\\,63\\,0\\.12\\)\\,0_1px_3px_rgba\\(45\\,45\\,63\\,0\\.04\\)\\]{--tw-shadow:0 8px 22px var(--tw-shadow-color,#2d2d3f1f),0 1px 3px var(--tw-shadow-color,#2d2d3f0a);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\\(45\\,45\\,63\\,0\\.14\\)\\,0_2px_6px_rgba\\(45\\,45\\,63\\,0\\.06\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#2d2d3f24),0 2px 6px var(--tw-shadow-color,#2d2d3f0f);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_26px_rgba\\(45\\,45\\,63\\,0\\.13\\)\\,0_2px_6px_rgba\\(45\\,45\\,63\\,0\\.05\\)\\]{--tw-shadow:0 10px 26px var(--tw-shadow-color,#2d2d3f21),0 2px 6px var(--tw-shadow-color,#2d2d3f0d);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_28px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:0 10px 28px var(--tw-shadow-color,#2d2d3f29);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_30px_rgba\\(45\\,45\\,63\\,0\\.14\\)\\,0_0_0_1\\.5px_var\\(--skippr-brand-ring\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#2d2d3f24),0 0 0 1.5px var(--tw-shadow-color,var(--skippr-brand-ring));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-\\[0_14px_34px_rgba\\(45\\,45\\,63\\,0\\.15\\)\\,0_2px_6px_rgba\\(45\\,45\\,63\\,0\\.06\\)\\]{--tw-shadow:0 14px 34px var(--tw-shadow-color,#2d2d3f26),0 2px 6px var(--tw-shadow-color,#2d2d3f0f);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-\\[3px_0_14px_var\\(--skippr-brand-halo\\)\\]{--tw-shadow:3px 0 14px var(--tw-shadow-color,var(--skippr-brand-halo));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-\\[4px_6px_18px_rgba\\(45\\,45\\,63\\,0\\.16\\)\\]{--tw-shadow:4px 6px 18px var(--tw-shadow-color,#2d2d3f29);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-\\[inset_0_0_0_1\\.5px_var\\(--skippr-brand\\,\\#2bc0ae\\)\\]{--tw-shadow:inset 0 0 0 1.5px var(--tw-shadow-color,var(--skippr-brand,#2bc0ae));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-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:var(--skippr-brand,#2bc0ae)}.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-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-\\[filter\\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[gap\\]{transition-property:gap;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.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-\\[left\\]{transition-property:left;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\\,color\\]{transition-property:opacity,color;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-\\[opacity\\,transform\\]{transition-property:opacity,transform;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\\,height\\,background-color\\,border-color\\]{transition-property:width,height,background-color,border-color;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-shadow{transition-property:box-shadow;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\\.3\\,0\\.64\\,1\\)\\]{--tw-ease:cubic-bezier(.34,1.3,.64,1);transition-timing-function:cubic-bezier(.34,1.3,.64,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\\:select-text{-webkit-user-select:text;user-select:text}.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-\\[\\#b0aca4\\]::placeholder{color:#b0aca4}.skippr\\:first\\:mt-0:first-child{margin-top:calc(var(--skippr-spacing)*0)}@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\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:hover\\:border-\\[rgba\\(45\\,45\\,63\\,0\\.45\\)\\]:hover{border-color:#2d2d3f73}.skippr\\:hover\\:bg-\\[\\#3a384b\\]:hover{background-color:#3a384b}.skippr\\:hover\\:bg-\\[\\#3d3d52\\]:hover{background-color:#3d3d52}.skippr\\:hover\\:bg-\\[\\#f2f0eb\\]:hover{background-color:#f2f0eb}.skippr\\:hover\\:bg-\\[\\#f4f2ee\\]:hover{background-color:#f4f2ee}.skippr\\:hover\\:bg-\\[\\#f6f4f0\\]:hover{background-color:#f6f4f0}.skippr\\:hover\\:bg-\\[rgba\\(45\\,45\\,63\\,0\\.04\\)\\]:hover{background-color:#2d2d3f0a}.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-foreground\\/8:hover{background-color:oklab(14.7% .00261104 .00303026/.08)}.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:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)90%,transparent)}}.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-transparent:hover{background-color:#0000}.skippr\\:hover\\:text-\\[\\#2D2D3F\\]:hover{color:#2d2d3f}.skippr\\:hover\\:text-\\[\\#5a5650\\]:hover{color:#5a5650}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-destructive:hover{color:#d94f4f}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:underline:hover{text-decoration-line:underline}.skippr\\:hover\\:decoration-muted-foreground:hover{text-decoration-color:oklch(55.3% .013 58.071)}.skippr\\:hover\\:opacity-80:hover{opacity:.8}.skippr\\:hover\\:opacity-100:hover{opacity:1}.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\\:hover\\:brightness-\\[1\\.04\\]:hover{--tw-brightness:brightness(1.04);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\\:hover\\:brightness-\\[1\\.06\\]:hover{--tw-brightness:brightness(1.06);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\\:border-primary:focus{border-color:var(--skippr-brand,#2d2b3d)}.skippr\\:focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus\\:ring-primary\\/30:focus{--tw-ring-color:var(--skippr-brand,#2d2b3d)}@supports (color:color-mix(in lab, red, red)){.skippr\\:focus\\:ring-primary\\/30:focus{--tw-ring-color:color-mix(in oklab,var(--skippr-brand,#2d2b3d)30%,transparent)}}.skippr\\:focus-visible\\:border-\\[var\\(--skippr-brand-ring\\)\\]:focus-visible{border-color:var(--skippr-brand-ring)}.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-\\[var\\(--skippr-brand-ring\\)\\]:focus-visible{--tw-ring-color:var(--skippr-brand-ring)}.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-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.skippr\\:focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.skippr\\:focus-visible\\:outline-\\[var\\(--skippr-brand\\)\\]:focus-visible{outline-color:var(--skippr-brand)}.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\\:active\\:scale-\\[0\\.98\\]:active{scale:.98}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-default:disabled{cursor:default}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}.skippr\\:disabled\\:opacity-80:disabled{opacity:.8}@media (hover:hover){.skippr\\:disabled\\:hover\\:bg-\\[\\#2D2D3F\\]:disabled:hover{background-color:#2d2d3f}.skippr\\:disabled\\:hover\\:bg-white:disabled:hover{background-color:var(--skippr-color-white)}}@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)}}:host{--skippr-brand-active:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-active:color-mix(in srgb,var(--skippr-brand,#2bc0ae)93%,#000)}}:host{--skippr-brand-deep:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-deep:color-mix(in srgb,var(--skippr-brand,#2bc0ae)78%,#000)}}:host{--skippr-brand-ring:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-ring:color-mix(in srgb,var(--skippr-brand,#2bc0ae)22%,transparent)}}:host{--skippr-brand-halo:var(--skippr-brand,#2bc0ae)}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-halo:color-mix(in srgb,var(--skippr-brand,#2bc0ae)40%,transparent)}}:host{--skippr-brand-glow:linear-gradient(90deg,var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae),var(--skippr-brand,#2bc0ae))}@supports (color:color-mix(in lab, red, red)){:host{--skippr-brand-glow:linear-gradient(90deg,var(--skippr-brand,#2bc0ae),color-mix(in srgb,var(--skippr-brand,#2bc0ae)55%,#fff),color-mix(in srgb,var(--skippr-brand,#2bc0ae)72%,#fff),var(--skippr-brand,#2bc0ae),color-mix(in srgb,var(--skippr-brand,#2bc0ae)42%,#fff))}}@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 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)55%,transparent)}70%{box-shadow:0 0 0 11px #0000}to{box-shadow:0 0 #0000}}@keyframes skippr-voice-pulse{0%{box-shadow:0 0 0 0 var(--skippr-pulse-color,#2bc0ae80)}70%{box-shadow:0 0 0 8px #0000}to{box-shadow:0 0 #0000}}@keyframes skippr-ptt-transmit{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)60%,transparent),0 0 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)35%,transparent)}70%{box-shadow:0 0 0 9px #0000,0 0 0 16px #0000}to{box-shadow:0 0 #0000,0 0 #0000}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 0 0 color-mix(in srgb,var(--skippr-brand,#2bc0ae)50%,transparent)}50%{box-shadow:0 0 0 6px #0000}}@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-evaporate{0%{opacity:1;filter:blur();transform:translateY(0)scale(1)}55%{opacity:.85;filter:blur()}to{opacity:0;filter:blur(2.5px);transform:translateY(-7px)scale(.965)}}@keyframes skippr-mote-rise{0%{opacity:0;transform:translateY(2px)scale(.5)}25%{opacity:.85}to{opacity:0;transform:translateY(-24px)scale(1)}}@keyframes skippr-flow{0%{background-position:0%}50%{background-position:100%}to{background-position: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)}}@keyframes skippr-pop{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:none}}@keyframes skippr-blink{0%,40%{transform:scaleY(1)}41.3%,42%{transform:scaleY(.08)}43.3%,70%{transform:scaleY(1)}71.3%,72%{transform:scaleY(.08)}73.3%,to{transform:scaleY(1)}}.skippr-buddy-blink{transform-box:fill-box;transform-origin:50%;animation:5s linear infinite skippr-blink}@keyframes skippr-avatar-eyes-bob{0%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(0)}18%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(24px)}33.33%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(-30px)}48%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(-7px)}64%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(-30px)}82%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translateY(31px)}96%,to{transform:translateY(0)}}@keyframes skippr-avatar-pupil-glance{0%,21.33%{transform:translate(0)}28%,68%{transform:translate(-30px)}74%,to{transform:translate(0)}}@keyframes skippr-avatar-body-vibe{0%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1)}17.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1.08,.95)}33.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1)}49.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1.08,.95)}65.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1)}81.67%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:scale(1.08,.95)}96%,to{transform:scale(1)}}@keyframes skippr-avatar-blink{0%,40%{transform:scaleY(1)}41.3%,42%{transform:scaleY(.08)}43.3%,70%{transform:scaleY(1)}71.3%,72%{transform:scaleY(.08)}73.3%,to{transform:scaleY(1)}}@keyframes skippr-avatar-bub-tail-drift{0%,10%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translate(0)}45%,60%{animation-timing-function:cubic-bezier(.65,0,.36,1);transform:translate(-24px)}95%,to{transform:translate(0)}}@keyframes skippr-avatar-antenna-shake{0%,to{transform:rotate(-4deg)}25%{transform:rotate(4deg)}50%{transform:rotate(-3deg)}75%{transform:rotate(3deg)}}.skippr-avatar-eyes{animation:5s infinite skippr-avatar-eyes-bob}.skippr-avatar-pupil{animation:5s linear infinite skippr-avatar-pupil-glance}.skippr-avatar-body{transform-box:fill-box;transform-origin:50% 100%;animation:5s infinite skippr-avatar-body-vibe}.skippr-avatar-blink{transform-box:fill-box;transform-origin:50%;animation:5s infinite skippr-avatar-blink}.skippr-avatar-body .skippr-avatar-antenna{transform-box:view-box;transform-origin:48px 22px;animation:1.6s ease-in-out infinite skippr-avatar-antenna-shake}.skippr-avatar-body .skippr-avatar-bub-tail{animation:5s infinite skippr-avatar-bub-tail-drift}@keyframes skippr-buddy-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes skippr-buddy-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}@keyframes skippr-buddy-pop{0%{transform:scale(1)}50%{transform:scale(1.06)}to{transform:scale(1)}}@keyframes skippr-buddy-sleep{0%,to{transform:translateY(0)scale(1)}50%{transform:translateY(1px)scale(.995)}}@keyframes skippr-buddy-zfloat{0%{opacity:0;transform:translateY(0)}20%{opacity:1}to{opacity:0;transform:translateY(-10px)}}@keyframes skippr-peek-left{0%,20%{transform:translate(-58%)}46%,66%{transform:translate(0)}92%,to{transform:translate(-58%)}}@keyframes skippr-peek-right{0%,20%{transform:translate(58%)}46%,66%{transform:translate(0)}92%,to{transform:translate(58%)}}@keyframes skippr-peek-top{0%,20%{transform:translateY(-58%)}46%,66%{transform:translateY(0)}92%,to{transform:translateY(-58%)}}@keyframes skippr-peek-bottom{0%,20%{transform:translateY(58%)}46%,66%{transform:translateY(0)}92%,to{transform:translateY(58%)}}.skippr-peek-left{animation:3.6s ease-in-out infinite skippr-peek-left}.skippr-peek-right{animation:3.6s ease-in-out infinite skippr-peek-right}.skippr-peek-top{animation:3.6s ease-in-out infinite skippr-peek-top}.skippr-peek-bottom{animation:3.6s ease-in-out infinite skippr-peek-bottom}.skippr-peek-out{animation:none;transform:none}@keyframes skippr-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}@keyframes skippr-block-reveal{0%{opacity:0;max-height:0;transform:translateY(-4px)}55%{opacity:1}to{opacity:1;max-height:260px;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.skippr-buddy-blink,[style*=skippr-blink],[style*=skippr-buddy-bob],[style*=skippr-buddy-breathe],[style*=skippr-buddy-pop],[style*=skippr-buddy-sleep],[style*=skippr-buddy-zfloat],.skippr-avatar-eyes,.skippr-avatar-pupil,.skippr-avatar-body,.skippr-avatar-blink,.skippr-avatar-body .skippr-avatar-antenna,.skippr-avatar-body .skippr-avatar-bub-tail,.skippr-peek-left,.skippr-peek-right,.skippr-peek-top,.skippr-peek-bottom{animation-play-state:paused}}.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-tracking{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}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}}`;
8744
8979
  const hostStyle = accentColor && isHexColor(accentColor) ? {
8745
8980
  "--skippr-brand": accentColor,
8746
8981
  "--skippr-brand-foreground": brandForeground(accentColor),
@@ -8772,7 +9007,7 @@ function ShadowHost({
8772
9007
  }
8773
9008
 
8774
9009
  // src/components/Sidebar.tsx
8775
- import { useCallback as useCallback28, useContext as useContext18, useEffect as useEffect37, useRef as useRef33 } from "react";
9010
+ import { useCallback as useCallback28, useContext as useContext18, useEffect as useEffect38, useRef as useRef33 } from "react";
8776
9011
 
8777
9012
  // src/hooks/useCombinedMessages.ts
8778
9013
  import { useContext as useContext12, useMemo as useMemo8 } from "react";
@@ -8905,7 +9140,7 @@ function useLinkCard() {
8905
9140
  }
8906
9141
 
8907
9142
  // src/hooks/usePhaseUpdates.ts
8908
- import { useCallback as useCallback24, useContext as useContext13, useEffect as useEffect32 } from "react";
9143
+ import { useCallback as useCallback24, useContext as useContext13, useEffect as useEffect33 } from "react";
8909
9144
  function parsePhases(json) {
8910
9145
  try {
8911
9146
  const data = JSON.parse(json);
@@ -8919,7 +9154,7 @@ function usePhaseUpdates() {
8919
9154
  const parse = useCallback24(parsePhases, []);
8920
9155
  const livePhases = useAgentState("phases", parse, []);
8921
9156
  const ctx = useContext13(LiveAgentContext);
8922
- useEffect32(() => {
9157
+ useEffect33(() => {
8923
9158
  if (livePhases.length > 0)
8924
9159
  ctx?.setPhasesSnapshot(livePhases);
8925
9160
  }, [livePhases, ctx?.setPhasesSnapshot]);
@@ -8928,7 +9163,7 @@ function usePhaseUpdates() {
8928
9163
  }
8929
9164
 
8930
9165
  // src/hooks/useSessionRemaining.ts
8931
- import { useEffect as useEffect33, useRef as useRef28, useState as useState25 } from "react";
9166
+ import { useEffect as useEffect34, useRef as useRef28, useState as useState26 } from "react";
8932
9167
 
8933
9168
  // src/lib/format.ts
8934
9169
  function formatTime(seconds) {
@@ -8945,8 +9180,8 @@ function parseNumber(s) {
8945
9180
  function useSessionRemaining() {
8946
9181
  const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
8947
9182
  const endTimeRef = useRef28(null);
8948
- const [remaining, setRemaining] = useState25(null);
8949
- useEffect33(() => {
9183
+ const [remaining, setRemaining] = useState26(null);
9184
+ useEffect34(() => {
8950
9185
  if (maxCallDuration === null || endTimeRef.current !== null)
8951
9186
  return;
8952
9187
  const endTime = Date.now() + maxCallDuration * 1000;
@@ -9217,26 +9452,26 @@ function LogoMark({ className, decorative }) {
9217
9452
  }
9218
9453
 
9219
9454
  // src/components/MessageList.tsx
9220
- import { useCallback as useCallback27, useLayoutEffect as useLayoutEffect3, useRef as useRef32, useState as useState29 } from "react";
9455
+ import { useCallback as useCallback27, useLayoutEffect as useLayoutEffect3, useRef as useRef32, useState as useState30 } from "react";
9221
9456
 
9222
9457
  // src/components/ChatInput.tsx
9223
- import { useContext as useContext16, useEffect as useEffect34, useRef as useRef30, useState as useState26 } from "react";
9458
+ import { useContext as useContext16, useEffect as useEffect35, useRef as useRef30, useState as useState27 } from "react";
9224
9459
  import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
9225
9460
  var MAX_INPUT_HEIGHT = 60;
9226
9461
  function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
9227
9462
  const ctx = useContext16(LiveAgentContext);
9228
9463
  const reportChatActivity = ctx?.reportChatActivity;
9229
9464
  const isPanelOpen = ctx?.isPanelOpen;
9230
- const [localDraft, setLocalDraft] = useState26("");
9465
+ const [localDraft, setLocalDraft] = useState27("");
9231
9466
  const inputText = ctx?.chatDraft ?? localDraft;
9232
9467
  const setInputText = ctx?.setChatDraft ?? setLocalDraft;
9233
9468
  const textareaRef = useRef30(null);
9234
9469
  const canSend = inputText.trim().length > 0 && !isSendingChat;
9235
- useEffect34(() => {
9470
+ useEffect35(() => {
9236
9471
  if (autoFocus && isPanelOpen !== false)
9237
9472
  textareaRef.current?.focus();
9238
9473
  }, [autoFocus, isPanelOpen]);
9239
- useEffect34(() => {
9474
+ useEffect35(() => {
9240
9475
  const el = textareaRef.current;
9241
9476
  if (!el)
9242
9477
  return;
@@ -9327,7 +9562,7 @@ function ChatMessage({ message }) {
9327
9562
  }
9328
9563
 
9329
9564
  // src/components/LinkCard.tsx
9330
- import { useCallback as useCallback26, useEffect as useEffect35, useRef as useRef31, useState as useState27 } from "react";
9565
+ import { useCallback as useCallback26, useEffect as useEffect36, useRef as useRef31, useState as useState28 } from "react";
9331
9566
 
9332
9567
  // src/lib/clipboard.ts
9333
9568
  async function copyToClipboard(text) {
@@ -9344,15 +9579,15 @@ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
9344
9579
  var COPIED_RESET_MS = 2000;
9345
9580
  var DISMISS_AFTER_COPY_MS = 3000;
9346
9581
  function LinkCard({ card, onDismiss }) {
9347
- const [copied, setCopied] = useState27(false);
9582
+ const [copied, setCopied] = useState28(false);
9348
9583
  const dismissTimerRef = useRef31(null);
9349
- useEffect35(() => {
9584
+ useEffect36(() => {
9350
9585
  if (!copied)
9351
9586
  return;
9352
9587
  const timer = setTimeout(() => setCopied(false), COPIED_RESET_MS);
9353
9588
  return () => clearTimeout(timer);
9354
9589
  }, [copied]);
9355
- useEffect35(() => {
9590
+ useEffect36(() => {
9356
9591
  return () => {
9357
9592
  if (dismissTimerRef.current)
9358
9593
  clearTimeout(dismissTimerRef.current);
@@ -9427,7 +9662,7 @@ function LinkCard({ card, onDismiss }) {
9427
9662
  }
9428
9663
 
9429
9664
  // src/components/PlanCard.tsx
9430
- import { useEffect as useEffect36, useState as useState28 } from "react";
9665
+ import { useEffect as useEffect37, useState as useState29 } from "react";
9431
9666
  import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
9432
9667
  var APPROVE_MESSAGE = "Yes, go ahead.";
9433
9668
  var CANCEL_MESSAGE = "No, cancel that.";
@@ -9455,8 +9690,8 @@ function StepIcon({ status }) {
9455
9690
  }
9456
9691
  function PlanCard({ plan, sendChatMessage, onDismiss }) {
9457
9692
  const awaitingApproval = plan.state === "proposed";
9458
- const [isApproving, setIsApproving] = useState28(false);
9459
- const [lastPlanId, setLastPlanId] = useState28(plan.planId);
9693
+ const [isApproving, setIsApproving] = useState29(false);
9694
+ const [lastPlanId, setLastPlanId] = useState29(plan.planId);
9460
9695
  if (plan.planId !== lastPlanId) {
9461
9696
  setLastPlanId(plan.planId);
9462
9697
  setIsApproving(false);
@@ -9468,13 +9703,13 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9468
9703
  setIsApproving(false);
9469
9704
  });
9470
9705
  };
9471
- useEffect36(() => {
9706
+ useEffect37(() => {
9472
9707
  if (!isApproving)
9473
9708
  return;
9474
9709
  const timer = setTimeout(() => setIsApproving(false), APPROVING_RESET_MS);
9475
9710
  return () => clearTimeout(timer);
9476
9711
  }, [isApproving]);
9477
- useEffect36(() => {
9712
+ useEffect37(() => {
9478
9713
  if (plan.state !== "completed")
9479
9714
  return;
9480
9715
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
@@ -9575,14 +9810,14 @@ function MessageList({
9575
9810
  const containerRef = useRef32(null);
9576
9811
  const isPinnedToBottom = useRef32(true);
9577
9812
  const lastSeenMessageId = useRef32(undefined);
9578
- const [showJumpToLatest, setShowJumpToLatest] = useState29(false);
9813
+ const [showJumpToLatest, setShowJumpToLatest] = useState30(false);
9579
9814
  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
9580
- const [dismissedPlanId, setDismissedPlanId] = useState29(null);
9815
+ const [dismissedPlanId, setDismissedPlanId] = useState30(null);
9581
9816
  const dismissPlan = useCallback27(() => {
9582
9817
  if (plan)
9583
9818
  setDismissedPlanId(plan.planId);
9584
9819
  }, [plan]);
9585
- const [dismissedLinkCardId, setDismissedLinkCardId] = useState29(null);
9820
+ const [dismissedLinkCardId, setDismissedLinkCardId] = useState30(null);
9586
9821
  const dismissLinkCard = useCallback27(() => {
9587
9822
  if (linkCard)
9588
9823
  setDismissedLinkCardId(linkCard.cardId);
@@ -9854,7 +10089,7 @@ function Sidebar({
9854
10089
  ...anchor2.style,
9855
10090
  height: panelExpanded ? anchor2.availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${anchor2.availableHeight})`
9856
10091
  } : undefined;
9857
- useEffect37(() => {
10092
+ useEffect38(() => {
9858
10093
  if (!isSidebar)
9859
10094
  return;
9860
10095
  const prop = position === "right" ? "marginRight" : "marginLeft";
@@ -9880,7 +10115,9 @@ function Sidebar({
9880
10115
  draggable: followsPanel,
9881
10116
  headerRef
9882
10117
  }),
9883
- authFailed ? /* @__PURE__ */ jsx39(AuthError, {}) : isAuthenticated && hasResolvedModules ? /* @__PURE__ */ jsx39(AuthenticatedContent, {
10118
+ authFailed ? /* @__PURE__ */ jsx39(AuthError, {
10119
+ locale: internalCtx?.locale
10120
+ }) : isAuthenticated && hasResolvedModules ? /* @__PURE__ */ jsx39(AuthenticatedContent, {
9884
10121
  isConnected,
9885
10122
  isPaused,
9886
10123
  isPausing,
@@ -9991,7 +10228,8 @@ function AuthenticatedContent({
9991
10228
  ]
9992
10229
  });
9993
10230
  }
9994
- function AuthError() {
10231
+ function AuthError({ locale }) {
10232
+ const copy = resolveAuthFailedCopy(locale);
9995
10233
  return /* @__PURE__ */ jsxs31("div", {
9996
10234
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
9997
10235
  children: [
@@ -10000,11 +10238,11 @@ function AuthError() {
10000
10238
  }),
10001
10239
  /* @__PURE__ */ jsx39("p", {
10002
10240
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
10003
- children: "We couldn't verify your session"
10241
+ children: copy.title
10004
10242
  }),
10005
10243
  /* @__PURE__ */ jsx39("p", {
10006
10244
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
10007
- children: "Please contact administrator."
10245
+ children: copy.hint
10008
10246
  })
10009
10247
  ]
10010
10248
  });
@@ -10197,7 +10435,7 @@ import {
10197
10435
  } from "react";
10198
10436
 
10199
10437
  // src/hooks/useSplash.ts
10200
- import { useCallback as useCallback29, useContext as useContext21, useMemo as useMemo9, useState as useState30 } from "react";
10438
+ import { useCallback as useCallback29, useContext as useContext21, useMemo as useMemo9, useState as useState31 } from "react";
10201
10439
 
10202
10440
  // src/lib/splashPresentation.ts
10203
10441
  function resolveSplashSections(sections, iconUrls) {
@@ -10276,7 +10514,7 @@ function useSplash(surface, onDismiss) {
10276
10514
  const splash = appearance?.splash ?? null;
10277
10515
  const { micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen } = splashMedia;
10278
10516
  const toggleStartMuted = useCallback29(() => setStartMuted(!startMuted), [setStartMuted, startMuted]);
10279
- const [optOutChecked, setOptOutChecked] = useState30(false);
10517
+ const [optOutChecked, setOptOutChecked] = useState31(false);
10280
10518
  const toggleOptOut = useCallback29(() => setOptOutChecked((checked) => !checked), []);
10281
10519
  const commitOptOut = useCallback29(() => {
10282
10520
  if (optOutChecked)
@@ -11233,14 +11471,14 @@ function useBarNotifications() {
11233
11471
 
11234
11472
  // src/components/VoiceBarFrame.tsx
11235
11473
  import { useIsSpeaking, useLocalParticipant as useLocalParticipant12 } from "@livekit/components-react/hooks";
11236
- import { useCallback as useCallback34, useContext as useContext26, useEffect as useEffect46, useRef as useRef42, useState as useState37 } from "react";
11474
+ import { useCallback as useCallback34, useContext as useContext26, useEffect as useEffect47, useRef as useRef42, useState as useState38 } from "react";
11237
11475
 
11238
11476
  // src/hooks/useKeyboardStop.ts
11239
- import { useEffect as useEffect38, useRef as useRef36 } from "react";
11477
+ import { useEffect as useEffect39, useRef as useRef36 } from "react";
11240
11478
  function useKeyboardStop({ enabled, onStop }) {
11241
11479
  const handler = useRef36(onStop);
11242
11480
  handler.current = onStop;
11243
- useEffect38(() => {
11481
+ useEffect39(() => {
11244
11482
  if (!enabled)
11245
11483
  return;
11246
11484
  const onKeyDown = (event) => {
@@ -11257,18 +11495,18 @@ function useKeyboardStop({ enabled, onStop }) {
11257
11495
  }
11258
11496
 
11259
11497
  // src/hooks/useSessionTimer.ts
11260
- import { useEffect as useEffect40, useState as useState32 } from "react";
11498
+ import { useEffect as useEffect41, useState as useState33 } from "react";
11261
11499
 
11262
11500
  // src/hooks/useElapsedSeconds.ts
11263
- import { useEffect as useEffect39, useRef as useRef37, useState as useState31 } from "react";
11501
+ import { useEffect as useEffect40, useRef as useRef37, useState as useState32 } from "react";
11264
11502
  function useElapsedSeconds(isRunning, resetSignal) {
11265
- const [elapsed, setElapsed] = useState31(0);
11503
+ const [elapsed, setElapsed] = useState32(0);
11266
11504
  const accumulatedSecondsRef = useRef37(0);
11267
- useEffect39(() => {
11505
+ useEffect40(() => {
11268
11506
  accumulatedSecondsRef.current = 0;
11269
11507
  setElapsed(0);
11270
11508
  }, [resetSignal]);
11271
- useEffect39(() => {
11509
+ useEffect40(() => {
11272
11510
  if (!isRunning)
11273
11511
  return;
11274
11512
  const resumedAt = Date.now();
@@ -11293,8 +11531,8 @@ function useSessionTimer(isRunning, resetSignal) {
11293
11531
  const active = isRunning && remaining !== null;
11294
11532
  const warning = active && remaining !== null && remaining <= SESSION_TIMER_WARNING_S;
11295
11533
  const revealCycle = !active ? null : warning ? "warning" : "normal";
11296
- const [revealed, setRevealed] = useState32(false);
11297
- useEffect40(() => {
11534
+ const [revealed, setRevealed] = useState33(false);
11535
+ useEffect41(() => {
11298
11536
  if (!revealCycle) {
11299
11537
  setRevealed(false);
11300
11538
  return;
@@ -11322,7 +11560,7 @@ function useSessionTimer(isRunning, resetSignal) {
11322
11560
  }
11323
11561
 
11324
11562
  // src/hooks/useVoiceBarDrag.ts
11325
- import { useEffect as useEffect41, useRef as useRef38 } from "react";
11563
+ import { useEffect as useEffect42, useRef as useRef38 } from "react";
11326
11564
  import { flushSync as flushSync2 } from "react-dom";
11327
11565
  var DRAG_THRESHOLD_PX2 = 5;
11328
11566
  function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
@@ -11333,7 +11571,7 @@ function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11333
11571
  followTargetsRef.current = followRefs;
11334
11572
  const reportDraggingRef = useRef38(reportDragging);
11335
11573
  reportDraggingRef.current = reportDragging;
11336
- useEffect41(() => {
11574
+ useEffect42(() => {
11337
11575
  const el = containerRef.current;
11338
11576
  if (!el)
11339
11577
  return;
@@ -11483,7 +11721,7 @@ function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11483
11721
  }
11484
11722
 
11485
11723
  // src/components/VoiceBarChatLine.tsx
11486
- import { useCallback as useCallback32, useContext as useContext25, useEffect as useEffect42, useRef as useRef39, useState as useState33 } from "react";
11724
+ import { useCallback as useCallback32, useContext as useContext25, useEffect as useEffect43, useRef as useRef39, useState as useState34 } from "react";
11487
11725
  import { jsx as jsx48, jsxs as jsxs37 } from "react/jsx-runtime";
11488
11726
  var IDLE_HIDE_MS = 6000;
11489
11727
  function VoiceBarChatLine({
@@ -11495,7 +11733,7 @@ function VoiceBarChatLine({
11495
11733
  const { sendChatMessage, isSendingChat } = useChatMessages();
11496
11734
  const ctx = useContext25(LiveAgentContext);
11497
11735
  const reportChatActivity = ctx?.reportChatActivity;
11498
- const [localDraft, setLocalDraft] = useState33("");
11736
+ const [localDraft, setLocalDraft] = useState34("");
11499
11737
  const text = ctx?.chatDraft ?? localDraft;
11500
11738
  const setText = ctx?.setChatDraft ?? setLocalDraft;
11501
11739
  const inputRef = useRef39(null);
@@ -11507,7 +11745,7 @@ function VoiceBarChatLine({
11507
11745
  clearTimeout(idleTimerRef.current);
11508
11746
  idleTimerRef.current = setTimeout(() => onCloseRef.current(), IDLE_HIDE_MS);
11509
11747
  }, []);
11510
- useEffect42(() => {
11748
+ useEffect43(() => {
11511
11749
  inputRef.current?.focus();
11512
11750
  armIdle();
11513
11751
  return () => {
@@ -11576,20 +11814,20 @@ function VoiceBarChatLine({
11576
11814
  }
11577
11815
 
11578
11816
  // src/components/VoiceBarLinkCard.tsx
11579
- import { useCallback as useCallback33, useEffect as useEffect43, useRef as useRef40, useState as useState34 } from "react";
11817
+ import { useCallback as useCallback33, useEffect as useEffect44, useRef as useRef40, useState as useState35 } from "react";
11580
11818
  import { jsx as jsx49, jsxs as jsxs38 } from "react/jsx-runtime";
11581
11819
  var COPIED_RESET_MS2 = 2000;
11582
11820
  var DISMISS_AFTER_COPY_MS2 = 3000;
11583
11821
  function VoiceBarLinkCard({ card, onDismiss }) {
11584
- const [copied, setCopied] = useState34(false);
11822
+ const [copied, setCopied] = useState35(false);
11585
11823
  const dismissTimerRef = useRef40(null);
11586
- useEffect43(() => {
11824
+ useEffect44(() => {
11587
11825
  if (!copied)
11588
11826
  return;
11589
11827
  const timer = setTimeout(() => setCopied(false), COPIED_RESET_MS2);
11590
11828
  return () => clearTimeout(timer);
11591
11829
  }, [copied]);
11592
- useEffect43(() => {
11830
+ useEffect44(() => {
11593
11831
  return () => {
11594
11832
  if (dismissTimerRef.current)
11595
11833
  clearTimeout(dismissTimerRef.current);
@@ -11663,13 +11901,13 @@ function VoiceBarLinkCard({ card, onDismiss }) {
11663
11901
  }
11664
11902
 
11665
11903
  // src/components/VoiceBarNotification.tsx
11666
- import { useEffect as useEffect44, useRef as useRef41, useState as useState35 } from "react";
11904
+ import { useEffect as useEffect45, useRef as useRef41, useState as useState36 } from "react";
11667
11905
  import { jsx as jsx50, jsxs as jsxs39 } from "react/jsx-runtime";
11668
11906
  function VoiceBarNotification({ notifications, pos, onDismiss }) {
11669
- const [index2, setIndex] = useState35(0);
11670
- const [paused, setPaused] = useState35(false);
11907
+ const [index2, setIndex] = useState36(0);
11908
+ const [paused, setPaused] = useState36(false);
11671
11909
  const cardRef = useRef41(null);
11672
- useEffect44(() => {
11910
+ useEffect45(() => {
11673
11911
  const el = cardRef.current;
11674
11912
  if (!el)
11675
11913
  return;
@@ -11682,7 +11920,7 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
11682
11920
  el.removeEventListener("mouseleave", leave);
11683
11921
  };
11684
11922
  }, []);
11685
- useEffect44(() => {
11923
+ useEffect45(() => {
11686
11924
  if (paused)
11687
11925
  return;
11688
11926
  const rotate = setInterval(() => setIndex((current) => (current + 1) % notifications.length), TIP_ROTATE_MS);
@@ -11754,7 +11992,7 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
11754
11992
  }
11755
11993
 
11756
11994
  // src/components/VoiceBarPlanCard.tsx
11757
- import { useEffect as useEffect45, useState as useState36 } from "react";
11995
+ import { useEffect as useEffect46, useState as useState37 } from "react";
11758
11996
  import { jsx as jsx51, jsxs as jsxs40 } from "react/jsx-runtime";
11759
11997
  var APPROVING_RESET_MS2 = 8000;
11760
11998
  function StepIndicator({ step }) {
@@ -11789,8 +12027,8 @@ function VoiceBarPlanCard({
11789
12027
  embedded = false
11790
12028
  }) {
11791
12029
  const awaitingApproval = plan.state === "proposed";
11792
- const [isApproving, setIsApproving] = useState36(false);
11793
- const [lastPlanId, setLastPlanId] = useState36(plan.planId);
12030
+ const [isApproving, setIsApproving] = useState37(false);
12031
+ const [lastPlanId, setLastPlanId] = useState37(plan.planId);
11794
12032
  if (plan.planId !== lastPlanId) {
11795
12033
  setLastPlanId(plan.planId);
11796
12034
  setIsApproving(false);
@@ -11805,13 +12043,13 @@ function VoiceBarPlanCard({
11805
12043
  const cancel = () => {
11806
12044
  sendChatMessage(CANCEL_MESSAGE).catch((e) => console.warn("[Skippr] plan reply failed", e));
11807
12045
  };
11808
- useEffect45(() => {
12046
+ useEffect46(() => {
11809
12047
  if (!isApproving)
11810
12048
  return;
11811
12049
  const timer = setTimeout(() => setIsApproving(false), APPROVING_RESET_MS2);
11812
12050
  return () => clearTimeout(timer);
11813
12051
  }, [isApproving]);
11814
- useEffect45(() => {
12052
+ useEffect46(() => {
11815
12053
  if (plan.state !== "completed")
11816
12054
  return;
11817
12055
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
@@ -12024,8 +12262,8 @@ function ShortcutHint({
12024
12262
  children
12025
12263
  }) {
12026
12264
  const ref = useRef42(null);
12027
- const [visible, setVisible] = useState37(false);
12028
- useEffect46(() => {
12265
+ const [visible, setVisible] = useState38(false);
12266
+ useEffect47(() => {
12029
12267
  if (!enabled)
12030
12268
  return;
12031
12269
  const el = ref.current;
@@ -12140,15 +12378,22 @@ function VoiceBarFrame({
12140
12378
  textMode,
12141
12379
  captureMode,
12142
12380
  chatActivityAt,
12143
- setAutoStartAfterLogin
12381
+ setAutoStartAfterLogin,
12382
+ error,
12383
+ errorSeq,
12384
+ authFailed,
12385
+ modulesError,
12386
+ locale
12144
12387
  } = ctx;
12145
12388
  const needsLogin = !usesHostAuth && !isAuthenticated;
12146
- const [loginOpen, setLoginOpen] = useState37(false);
12147
- useEffect46(() => {
12389
+ const transientError = useTransientError(error, errorSeq);
12390
+ const authFailedCopy = authFailed ? resolveAuthFailedCopy(locale) : null;
12391
+ const [loginOpen, setLoginOpen] = useState38(false);
12392
+ useEffect47(() => {
12148
12393
  if (!needsLogin)
12149
12394
  setLoginOpen(false);
12150
12395
  }, [needsLogin]);
12151
- const [bannerOpen, setBannerOpen] = useState37(false);
12396
+ const [bannerOpen, setBannerOpen] = useState38(false);
12152
12397
  const hasNotifications = notifications.length > 0;
12153
12398
  const notifAccent = notifications[0]?.accentColor;
12154
12399
  const closeBanner = useCallback34(() => setBannerOpen(false), []);
@@ -12171,9 +12416,9 @@ function VoiceBarFrame({
12171
12416
  const plan = usePlanUpdates();
12172
12417
  const linkCard = useLinkCard();
12173
12418
  const { sendChatMessage } = useChatMessages();
12174
- const [dismissedFloatingPlanId, setDismissedFloatingPlanId] = useState37(null);
12175
- const [dismissedBlockPlanId, setDismissedBlockPlanId] = useState37(null);
12176
- const [dismissedLinkCardId, setDismissedLinkCardId] = useState37(null);
12419
+ const [dismissedFloatingPlanId, setDismissedFloatingPlanId] = useState38(null);
12420
+ const [dismissedBlockPlanId, setDismissedBlockPlanId] = useState38(null);
12421
+ const [dismissedLinkCardId, setDismissedLinkCardId] = useState38(null);
12177
12422
  const micMode = agentControls?.micMode;
12178
12423
  const pushOrTap = isRequestResponseMicMode(micMode);
12179
12424
  const isPushToTalk = micMode === MIC_MODE.PushToTalk;
@@ -12182,9 +12427,9 @@ function VoiceBarFrame({
12182
12427
  const showActionControl = isConnected && captureMode === CAPTURE_MODE.Auto && actionsActive;
12183
12428
  const chatSurface = agentControls?.chat ?? DEFAULT_CHAT_SURFACE;
12184
12429
  const isRoomChat = chatSurface === CHAT_SURFACE.Room;
12185
- const [chatLineOpen, setChatLineOpen] = useState37(false);
12186
- const [chatLineMounted, setChatLineMounted] = useState37(false);
12187
- const [chatLineClosing, setChatLineClosing] = useState37(false);
12430
+ const [chatLineOpen, setChatLineOpen] = useState38(false);
12431
+ const [chatLineMounted, setChatLineMounted] = useState38(false);
12432
+ const [chatLineClosing, setChatLineClosing] = useState38(false);
12188
12433
  const chatOpen = isRoomChat ? isPanelOpen : chatLineOpen;
12189
12434
  const lineBlockOpen = !isRoomChat && chatLineMounted;
12190
12435
  const toggleChat = () => {
@@ -12194,7 +12439,7 @@ function VoiceBarFrame({
12194
12439
  setChatLineOpen((open) => !open);
12195
12440
  }
12196
12441
  };
12197
- useEffect46(() => {
12442
+ useEffect47(() => {
12198
12443
  if (chatLineOpen) {
12199
12444
  setChatLineMounted(true);
12200
12445
  setChatLineClosing(false);
@@ -12223,7 +12468,7 @@ function VoiceBarFrame({
12223
12468
  const showLivePill = !isLoading && isConnected && !textMode && !pushOrTap;
12224
12469
  const barWidthPx = !showLivePill ? VOICE_BAR_WIDTH_PX : isHeld ? 120 : 156;
12225
12470
  barWidthRef.current = barWidthPx;
12226
- useEffect46(() => {
12471
+ useEffect47(() => {
12227
12472
  const inBounds = clampBarPos(pos, barWidthPx);
12228
12473
  if (inBounds.x !== pos.x)
12229
12474
  onDrop(inBounds, barWidthPx);
@@ -12249,17 +12494,17 @@ function VoiceBarFrame({
12249
12494
  const requestLabel = agentStateLabel ?? (isCapturingSpeech ? "listening…" : idleRequestLabel);
12250
12495
  const livePillBg = agentActive && !isHeld ? "var(--skippr-brand-active)" : "var(--skippr-brand, #2bc0ae)";
12251
12496
  const glow = isConnected && !isHeld && agentActive;
12252
- const [autoOffClosing, setAutoOffClosing] = useState37(false);
12497
+ const [autoOffClosing, setAutoOffClosing] = useState38(false);
12253
12498
  const { reportActivity } = useIdleAutoOff({
12254
12499
  enabled: isConnected && !autoOffClosing,
12255
12500
  active: agentActive || isCapturingSpeech || isUserSpeaking,
12256
12501
  onExpire: () => setAutoOffClosing(true)
12257
12502
  });
12258
- useEffect46(() => {
12503
+ useEffect47(() => {
12259
12504
  if (chatActivityAt)
12260
12505
  reportActivity();
12261
12506
  }, [chatActivityAt, reportActivity]);
12262
- useEffect46(() => {
12507
+ useEffect47(() => {
12263
12508
  if (!autoOffClosing)
12264
12509
  return;
12265
12510
  if (!isConnected) {
@@ -12275,12 +12520,12 @@ function VoiceBarFrame({
12275
12520
  const floatingPlanActive = planEnabled && !isRoomChat && !lineBlockOpen && activePlan.planId !== dismissedFloatingPlanId;
12276
12521
  const planInLineBlock = planEnabled && lineBlockOpen && activePlan.planId !== dismissedBlockPlanId;
12277
12522
  const planCardActive = floatingPlanActive || planInLineBlock;
12278
- useEffect46(() => {
12523
+ useEffect47(() => {
12279
12524
  if (lineBlockOpen)
12280
12525
  setDismissedBlockPlanId(null);
12281
12526
  }, [lineBlockOpen]);
12282
- const [autoOpenedPlanId, setAutoOpenedPlanId] = useState37(null);
12283
- useEffect46(() => {
12527
+ const [autoOpenedPlanId, setAutoOpenedPlanId] = useState38(null);
12528
+ useEffect47(() => {
12284
12529
  if (!isRoomChat || !planEnabled || !activePlan)
12285
12530
  return;
12286
12531
  if (activePlan.planId === autoOpenedPlanId)
@@ -12292,7 +12537,8 @@ function VoiceBarFrame({
12292
12537
  const visibleLinkCard = linkCard && linkCard.cardId !== dismissedLinkCardId ? linkCard : null;
12293
12538
  const linkCardActive = !!visibleLinkCard && isConnected && !planCardActive && !(isRoomChat && chatOpen) && !isCapturingSpeech && !isHeld && !autoOffClosing;
12294
12539
  const bannerActive = hasNotifications && bannerOpen;
12295
- const slotClaimed = chatOpen || bannerActive || lineBlockOpen;
12540
+ const midSessionError = sessionLive && !isRoomChat && !!transientError && !planCardActive && !linkCardActive;
12541
+ const slotClaimed = chatOpen || bannerActive || lineBlockOpen || midSessionError;
12296
12542
  const autoBase = showLivePill && !autoOffClosing;
12297
12543
  const showLiveStrip = !slotClaimed && autoBase && !isHeld && !planCardActive && (state === "thinking" || showActionControl);
12298
12544
  const showTimerStrip = !slotClaimed && !autoOffClosing && !isCapturingSpeech && !planCardActive && !showLiveStrip && !isHeld && !!sessionTimer;
@@ -12433,13 +12679,30 @@ function VoiceBarFrame({
12433
12679
  }
12434
12680
  })
12435
12681
  }),
12436
- !sessionLive && !needsLogin && !bannerActive && /* @__PURE__ */ jsx52("div", {
12682
+ (!sessionLive || midSessionError) && !needsLogin && !bannerActive && /* @__PURE__ */ jsx52("div", {
12437
12683
  style: planCardStyle,
12438
12684
  className: "skippr:z-[6]",
12439
12685
  "data-skippr-no-drag": "",
12440
12686
  children: /* @__PURE__ */ jsx52("div", {
12441
12687
  className: "skippr:w-[220px] skippr:rounded-[14px] skippr:border skippr:border-[rgba(45,45,63,0.08)] skippr:bg-white skippr:px-3 skippr:py-2 skippr:shadow-[0_10px_28px_rgba(45,45,63,0.16)] skippr:[animation:skippr-tip-in_360ms_cubic-bezier(0.34,1.3,0.64,1)]",
12442
- children: /* @__PURE__ */ jsx52(ConsentNotice, {
12688
+ children: !isRoomChat && authFailedCopy ? /* @__PURE__ */ jsxs41("div", {
12689
+ role: "alert",
12690
+ className: "skippr:text-center",
12691
+ children: [
12692
+ /* @__PURE__ */ jsx52("p", {
12693
+ className: "skippr:text-[11px] skippr:font-medium skippr:leading-[1.2] skippr:text-destructive",
12694
+ children: authFailedCopy.title
12695
+ }),
12696
+ /* @__PURE__ */ jsx52("p", {
12697
+ className: "skippr:mt-0.5 skippr:text-[10px] skippr:leading-[1.2] skippr:text-muted-foreground",
12698
+ children: authFailedCopy.hint
12699
+ })
12700
+ ]
12701
+ }) : !isRoomChat && (modulesError || transientError) ? /* @__PURE__ */ jsx52("p", {
12702
+ role: "alert",
12703
+ className: "skippr:text-[11px] skippr:leading-[1.2] skippr:text-destructive skippr:text-center",
12704
+ children: modulesError || transientError
12705
+ }) : /* @__PURE__ */ jsx52(ConsentNotice, {
12443
12706
  template: CONSENT_NOTICE_SESSION_START
12444
12707
  })
12445
12708
  })
@@ -12644,10 +12907,10 @@ function VoiceBarFrame({
12644
12907
  }
12645
12908
 
12646
12909
  // src/components/VoiceBarLauncher.tsx
12647
- import { useCallback as useCallback35, useEffect as useEffect48, useRef as useRef44, useState as useState39 } from "react";
12910
+ import { useCallback as useCallback35, useEffect as useEffect49, useRef as useRef44, useState as useState40 } from "react";
12648
12911
 
12649
12912
  // src/components/LauncherNotification.tsx
12650
- import { useEffect as useEffect47, useRef as useRef43, useState as useState38 } from "react";
12913
+ import { useEffect as useEffect48, useRef as useRef43, useState as useState39 } from "react";
12651
12914
  import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
12652
12915
  function LauncherNotification({
12653
12916
  notifications,
@@ -12655,10 +12918,10 @@ function LauncherNotification({
12655
12918
  mode,
12656
12919
  onDismiss
12657
12920
  }) {
12658
- const [index2, setIndex] = useState38(0);
12659
- const [paused, setPaused] = useState38(false);
12921
+ const [index2, setIndex] = useState39(0);
12922
+ const [paused, setPaused] = useState39(false);
12660
12923
  const cardRef = useRef43(null);
12661
- useEffect47(() => {
12924
+ useEffect48(() => {
12662
12925
  const el = cardRef.current;
12663
12926
  if (!el)
12664
12927
  return;
@@ -12671,7 +12934,7 @@ function LauncherNotification({
12671
12934
  el.removeEventListener("mouseleave", leave);
12672
12935
  };
12673
12936
  }, []);
12674
- useEffect47(() => {
12937
+ useEffect48(() => {
12675
12938
  if (paused)
12676
12939
  return;
12677
12940
  const rotate = setInterval(() => setIndex((current) => (current + 1) % notifications.length), TIP_ROTATE_MS);
@@ -12896,16 +13159,16 @@ function VoiceBarLauncher({
12896
13159
  }, [onDrop]);
12897
13160
  const { wasDraggedRef } = useVoiceBarDrag(containerRef, onDropPos, null, setDragging);
12898
13161
  const horizontal = isHorizontalEdge(dock.edge);
12899
- const [cardOpen, setCardOpen] = useState39(false);
12900
- const [loginOpen, setLoginOpen] = useState39(false);
12901
- const [hovered, setHovered] = useState39(false);
12902
- useEffect48(() => {
13162
+ const [cardOpen, setCardOpen] = useState40(false);
13163
+ const [loginOpen, setLoginOpen] = useState40(false);
13164
+ const [hovered, setHovered] = useState40(false);
13165
+ useEffect49(() => {
12903
13166
  if (!needsLogin)
12904
13167
  setLoginOpen(false);
12905
13168
  }, [needsLogin]);
12906
13169
  const hasNotif = notifications.length > 0;
12907
13170
  const dotColor = notifications.find((item) => item.kind === NOTIFICATION_KIND.Module)?.accentColor ?? notifications[0]?.accentColor ?? NOTIF_ACCENT_COLOR;
12908
- useEffect48(() => {
13171
+ useEffect49(() => {
12909
13172
  const el = containerRef.current;
12910
13173
  if (!el)
12911
13174
  return;
@@ -13191,7 +13454,7 @@ function PlanPanelOpener() {
13191
13454
  const plan = usePlanUpdates();
13192
13455
  const { expandPanel } = useLiveAgent();
13193
13456
  const surfacedPlanIdRef = useRef45(null);
13194
- useEffect49(() => {
13457
+ useEffect50(() => {
13195
13458
  if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
13196
13459
  return;
13197
13460
  surfacedPlanIdRef.current = plan.planId;
@@ -13229,12 +13492,13 @@ function LiveAgent(props) {
13229
13492
  console.warn('[Skippr] agentControls requires captureMode: "auto"');
13230
13493
  }
13231
13494
  }
13232
- const auth = useAuth({ appKey });
13495
+ const locale = useDetectedLocale(hostLocale);
13496
+ const auth = useAuth({ appKey, locale });
13233
13497
  const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
13234
13498
  const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
13235
- const [activeModule, setActiveModule] = useState40(null);
13236
- const [sessionAgentMode, setSessionAgentMode] = useState40(null);
13237
- const [isExchanging, setIsExchanging] = useState40(false);
13499
+ const [activeModule, setActiveModule] = useState41(null);
13500
+ const [sessionAgentMode, setSessionAgentMode] = useState41(null);
13501
+ const [isExchanging, setIsExchanging] = useState41(false);
13238
13502
  const minimizeOnSessionStart = useCallback36(() => {
13239
13503
  if (minimizable) {
13240
13504
  setIsMinimized(true);
@@ -13264,6 +13528,7 @@ function LiveAgent(props) {
13264
13528
  isDisconnecting,
13265
13529
  isPausing,
13266
13530
  error,
13531
+ errorSeq,
13267
13532
  errorCode,
13268
13533
  startSession: startSessionRaw,
13269
13534
  pauseSession,
@@ -13278,6 +13543,7 @@ function LiveAgent(props) {
13278
13543
  authFailed
13279
13544
  } = useSession({
13280
13545
  captureMode,
13546
+ locale,
13281
13547
  authToken: effectiveAuthToken,
13282
13548
  appKey,
13283
13549
  getUserToken,
@@ -13302,29 +13568,28 @@ function LiveAgent(props) {
13302
13568
  return;
13303
13569
  disconnect();
13304
13570
  }, [disconnect]);
13305
- const [isPanelOpen, setIsPanelOpen] = useState40(defaultOpen);
13306
- const [panelEntry, setPanelEntry] = useState40(PANEL_ENTRY.Launcher);
13307
- const [isMinimized, setIsMinimized] = useState40(minimizable && !defaultOpen);
13308
- const [pendingStart, setPendingStart] = useState40(null);
13309
- const [sidebarTab, setSidebarTab] = useState40("agenda");
13310
- const [phasesSnapshot, setPhasesSnapshot] = useState40([]);
13311
- const [startMuted, setStartMuted] = useState40(false);
13312
- const [textMode, setTextMode] = useState40(false);
13313
- const [panelExpanded, setPanelExpanded] = useState40(false);
13571
+ const [isPanelOpen, setIsPanelOpen] = useState41(defaultOpen);
13572
+ const [panelEntry, setPanelEntry] = useState41(PANEL_ENTRY.Launcher);
13573
+ const [isMinimized, setIsMinimized] = useState41(minimizable && !defaultOpen);
13574
+ const [pendingStart, setPendingStart] = useState41(null);
13575
+ const [sidebarTab, setSidebarTab] = useState41("agenda");
13576
+ const [phasesSnapshot, setPhasesSnapshot] = useState41([]);
13577
+ const [startMuted, setStartMuted] = useState41(false);
13578
+ const [textMode, setTextMode] = useState41(false);
13579
+ const [panelExpanded, setPanelExpanded] = useState41(false);
13314
13580
  const togglePanelExpanded = useCallback36(() => setPanelExpanded((prev) => !prev), []);
13315
13581
  const panelRef = useRef45(null);
13316
13582
  const controlBarRef = useRef45(null);
13317
13583
  const voiceBarRef = useRef45(null);
13318
- const [isDragging, setIsDragging] = useState40(false);
13584
+ const [isDragging, setIsDragging] = useState41(false);
13319
13585
  const setTextModeState = useCallback36((enabled) => {
13320
13586
  setTextMode(enabled);
13321
13587
  }, []);
13322
13588
  const showControlBar = isConnected || isStarting || isPausing;
13323
- useEffect49(() => {
13589
+ useEffect50(() => {
13324
13590
  if (!isConnected)
13325
13591
  setTextModeState(false);
13326
13592
  }, [isConnected, setTextModeState]);
13327
- const locale = useDetectedLocale(hostLocale);
13328
13593
  const {
13329
13594
  modules: availableModules,
13330
13595
  defaultSelection,
@@ -13358,7 +13623,13 @@ function LiveAgent(props) {
13358
13623
  const buddyActive = isBuddyActive(appearance) && variant !== "sidebar" && !hostAgentId;
13359
13624
  const buddyShape = appearance?.buddy?.shape ?? DEFAULT_BUDDY_SHAPE;
13360
13625
  const effectiveHostAgentId = buddyActive ? undefined : hostAgentId;
13361
- const startSession = useCallback36((opts) => startSessionRaw(buddyActive ? { ...opts, agentControls: buddyEffectiveControls(opts.agentControls) } : opts), [startSessionRaw, buddyActive]);
13626
+ const startSession = useCallback36((opts) => {
13627
+ const named = {
13628
+ ...opts,
13629
+ agentName: availableModules.find((m) => m.id === opts.agentId)?.name
13630
+ };
13631
+ return startSessionRaw(buddyActive ? { ...named, agentControls: buddyEffectiveControls(named.agentControls) } : named);
13632
+ }, [startSessionRaw, buddyActive, availableModules]);
13362
13633
  const defaultAgentId = buddyActive ? defaultSelection.agentId : hostAgentId ?? defaultSelection.agentId;
13363
13634
  const defaultModule = availableModules.find((m) => m.id === defaultAgentId) ?? null;
13364
13635
  const operatingModule = buddyActive ? defaultModule : activeModule ?? (effectiveHostAgentId ? availableModules[0] ?? null : null);
@@ -13432,10 +13703,10 @@ function LiveAgent(props) {
13432
13703
  setPendingStart(pending);
13433
13704
  setIsMinimized(false);
13434
13705
  }, []);
13435
- const [welcomeDismissed, setWelcomeDismissed] = useState40(false);
13706
+ const [welcomeDismissed, setWelcomeDismissed] = useState41(false);
13436
13707
  const dismissWelcome = useCallback36(() => setWelcomeDismissed(true), []);
13437
- const [savedPosition] = useState40(readSavedPosition);
13438
- const [currentPosition, setCurrentPosition] = useState40(savedPosition ?? "right");
13708
+ const [savedPosition] = useState41(readSavedPosition);
13709
+ const [currentPosition, setCurrentPosition] = useState41(savedPosition ?? "right");
13439
13710
  const positionLockedRef = useRef45(savedPosition !== null);
13440
13711
  const setPositionWithPersist = useCallback36((pos) => {
13441
13712
  positionLockedRef.current = true;
@@ -13445,18 +13716,18 @@ function LiveAgent(props) {
13445
13716
  } catch {}
13446
13717
  }, []);
13447
13718
  const serverPosition = appearance?.position ?? null;
13448
- useEffect49(() => {
13719
+ useEffect50(() => {
13449
13720
  if (!serverPosition || positionLockedRef.current)
13450
13721
  return;
13451
13722
  setCurrentPosition(serverPosition);
13452
13723
  }, [serverPosition]);
13453
- const [savedLauncherBottom] = useState40(readSavedLauncherBottom);
13724
+ const [savedLauncherBottom] = useState41(readSavedLauncherBottom);
13454
13725
  const hasDraggedRef = useRef45(savedLauncherBottom !== null);
13455
13726
  const verticalAlignRef = useRef45(hostVerticalAlign ?? "bottom");
13456
- const [launcherBottomPx, setLauncherBottomPxState] = useState40(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlignRef.current));
13457
- const [popsDown, setPopsDown] = useState40(() => launcherPopsDown(launcherBottomPx));
13727
+ const [launcherBottomPx, setLauncherBottomPxState] = useState41(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlignRef.current));
13728
+ const [popsDown, setPopsDown] = useState41(() => launcherPopsDown(launcherBottomPx));
13458
13729
  const serverVerticalAlign = appearance?.verticalAlign ?? null;
13459
- useEffect49(() => {
13730
+ useEffect50(() => {
13460
13731
  if (!serverVerticalAlign || hostVerticalAlign !== undefined || hasDraggedRef.current)
13461
13732
  return;
13462
13733
  verticalAlignRef.current = serverVerticalAlign;
@@ -13474,18 +13745,18 @@ function LiveAgent(props) {
13474
13745
  }, []);
13475
13746
  const launcherBottomPxRef = useRef45(launcherBottomPx);
13476
13747
  launcherBottomPxRef.current = launcherBottomPx;
13477
- const [chatActivityAt, setChatActivityAt] = useState40(0);
13748
+ const [chatActivityAt, setChatActivityAt] = useState41(0);
13478
13749
  const reportChatActivity = useCallback36(() => {
13479
13750
  const now = Date.now();
13480
13751
  setChatActivityAt((last) => now - last < CHAT_ACTIVITY_THROTTLE_MS ? last : now);
13481
13752
  }, []);
13482
- const [chatDraft, setChatDraft] = useState40("");
13483
- const [autoStartAfterLogin, setAutoStartAfterLogin] = useState40(false);
13753
+ const [chatDraft, setChatDraft] = useState41("");
13754
+ const [autoStartAfterLogin, setAutoStartAfterLogin] = useState41(false);
13484
13755
  const commitLauncherDrop = useCallback36(({ side, bottomPx }) => {
13485
13756
  setPositionWithPersist(side);
13486
13757
  setLauncherBottomPx(bottomPx);
13487
13758
  }, [setPositionWithPersist, setLauncherBottomPx]);
13488
- const [barPos, setBarPosState] = useState40(() => readSavedBarPos());
13759
+ const [barPos, setBarPosState] = useState41(() => readSavedBarPos());
13489
13760
  const barPosRatioRef = useRef45(barPos === null ? null : barPosRatio(barPos));
13490
13761
  const setBarPos = useCallback36((next, widthPx) => {
13491
13762
  const placed = clampBarPos(next, widthPx);
@@ -13493,7 +13764,7 @@ function LiveAgent(props) {
13493
13764
  persistBarPos(placed);
13494
13765
  barPosRatioRef.current = barPosRatio(placed);
13495
13766
  }, []);
13496
- const [savedLauncherDock, setSavedLauncherDock] = useState40(() => readSavedDock("launcher"));
13767
+ const [savedLauncherDock, setSavedLauncherDock] = useState41(() => readSavedDock("launcher"));
13497
13768
  const setLauncherDock = useCallback36((next) => {
13498
13769
  setSavedLauncherDock(next);
13499
13770
  persistDock("launcher", next);
@@ -13503,7 +13774,7 @@ function LiveAgent(props) {
13503
13774
  edge: launcherEdge,
13504
13775
  offsetPx: defaultOffset(launcherEdge)
13505
13776
  };
13506
- useEffect49(() => {
13777
+ useEffect50(() => {
13507
13778
  const syncToViewport = () => {
13508
13779
  const next = hasDraggedRef.current ? clampLauncherBottom(launcherBottomPxRef.current) : verticalAlignToBottomPx(verticalAlignRef.current);
13509
13780
  setLauncherBottomPxState(next);
@@ -13513,7 +13784,7 @@ function LiveAgent(props) {
13513
13784
  window.addEventListener("resize", syncToViewport);
13514
13785
  return () => window.removeEventListener("resize", syncToViewport);
13515
13786
  }, []);
13516
- useEffect49(() => {
13787
+ useEffect50(() => {
13517
13788
  const syncBarToViewport = () => {
13518
13789
  const ratios = barPosRatioRef.current;
13519
13790
  const measured = voiceBarRef.current?.getBoundingClientRect().width;
@@ -13596,7 +13867,7 @@ function LiveAgent(props) {
13596
13867
  bearerToken,
13597
13868
  selectModule
13598
13869
  });
13599
- useEffect49(() => {
13870
+ useEffect50(() => {
13600
13871
  if (!autoStartAfterLogin)
13601
13872
  return;
13602
13873
  if (bearerToken === null || !hasResolvedModules || isSessionLive)
@@ -13629,7 +13900,7 @@ function LiveAgent(props) {
13629
13900
  phases: idleHistoryPhases,
13630
13901
  isLoading: isLoadingHistory
13631
13902
  }), [idleHistoryMessages, idleHistoryPhases, isLoadingHistory]);
13632
- const [pageSplashDismissed, setPageSplashDismissed] = useState40(false);
13903
+ const [pageSplashDismissed, setPageSplashDismissed] = useState41(false);
13633
13904
  const dismissSplash = useCallback36((surface) => {
13634
13905
  if (surface !== SPLASH_SURFACE.Panel) {
13635
13906
  setPageSplashDismissed(true);
@@ -13667,7 +13938,7 @@ function LiveAgent(props) {
13667
13938
  isSplashVisible: splashSurfaces.overlay || splashSurfaces.panel || splashSurfaces.applies && !pageSplashDismissed,
13668
13939
  isSessionLive
13669
13940
  });
13670
- useEffect49(() => {
13941
+ useEffect50(() => {
13671
13942
  const open = () => {
13672
13943
  reopenSplash();
13673
13944
  if (configuredSplashSurfaces.overlay)
@@ -13689,6 +13960,7 @@ function LiveAgent(props) {
13689
13960
  isDisconnecting,
13690
13961
  isPausing,
13691
13962
  error,
13963
+ errorSeq,
13692
13964
  errorCode,
13693
13965
  startSession,
13694
13966
  pauseSession: pauseSessionAndMinimize,
@@ -13736,6 +14008,7 @@ function LiveAgent(props) {
13736
14008
  isAuthenticated,
13737
14009
  usesHostAuth,
13738
14010
  authFailed,
14011
+ locale,
13739
14012
  isValidating: auth.isValidating,
13740
14013
  authError: auth.error,
13741
14014
  requestOtp: auth.requestOtp,
@@ -13792,6 +14065,7 @@ function LiveAgent(props) {
13792
14065
  isDisconnecting,
13793
14066
  isPausing,
13794
14067
  error,
14068
+ errorSeq,
13795
14069
  errorCode,
13796
14070
  startSession,
13797
14071
  pauseSessionAndMinimize,
@@ -13833,6 +14107,7 @@ function LiveAgent(props) {
13833
14107
  isAuthenticated,
13834
14108
  usesHostAuth,
13835
14109
  authFailed,
14110
+ locale,
13836
14111
  auth.isValidating,
13837
14112
  auth.error,
13838
14113
  auth.requestOtp,
@@ -13970,7 +14245,7 @@ function LiveAgent(props) {
13970
14245
  });
13971
14246
  }
13972
14247
  // src/components/SplashScreen.tsx
13973
- import { useContext as useContext28, useEffect as useEffect50, useRef as useRef46 } from "react";
14248
+ import { useContext as useContext28, useEffect as useEffect51, useRef as useRef46 } from "react";
13974
14249
  import { jsx as jsx57 } from "react/jsx-runtime";
13975
14250
  var SPLASH_DISABLED_WARNING = "[Skippr] <SplashScreen> is mounted but the splash screen is turned off for this workspace, so it will never render. Enable it under Appearance in the Skippr platform.";
13976
14251
  function SplashScreen({ className, onDismiss }) {
@@ -13981,7 +14256,7 @@ function SplashScreen({ className, onDismiss }) {
13981
14256
  const disabledWarnedRef = useRef46(false);
13982
14257
  const hasResolvedModules = ctx.hasResolvedModules;
13983
14258
  const isSplashConfigured = ctx.isSplashConfigured;
13984
- useEffect50(() => {
14259
+ useEffect51(() => {
13985
14260
  if (!hasResolvedModules || isSplashConfigured || disabledWarnedRef.current)
13986
14261
  return;
13987
14262
  disabledWarnedRef.current = true;