@skippr/live-agent-sdk 0.111.0 → 0.113.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));
@@ -4890,20 +5101,24 @@ function readSavedBarPos() {
4890
5101
  return clampBarPos({
4891
5102
  x: xRatio * window.innerWidth,
4892
5103
  y: yRatio * window.innerHeight
4893
- });
5104
+ }, VOICE_BAR_WIDTH_PX);
4894
5105
  } catch {}
4895
5106
  return null;
4896
5107
  }
5108
+ function barPosRatio(pos) {
5109
+ return { xRatio: pos.x / window.innerWidth, yRatio: pos.y / window.innerHeight };
5110
+ }
4897
5111
  function persistBarPos(pos) {
4898
5112
  try {
4899
- localStorage.setItem(BAR_X_RATIO_KEY, String(pos.x / window.innerWidth));
4900
- localStorage.setItem(BAR_Y_RATIO_KEY, String(pos.y / window.innerHeight));
5113
+ const { xRatio, yRatio } = barPosRatio(pos);
5114
+ localStorage.setItem(BAR_X_RATIO_KEY, String(xRatio));
5115
+ localStorage.setItem(BAR_Y_RATIO_KEY, String(yRatio));
4901
5116
  } catch {}
4902
5117
  }
4903
- function clampBarPos(pos) {
5118
+ function clampBarPos(pos, widthPx) {
4904
5119
  const m = VOICE_BAR_EDGE_MARGIN_PX;
4905
5120
  return {
4906
- x: Math.round(Math.min(Math.max(pos.x, m), window.innerWidth - VOICE_BAR_WIDTH_PX - m)),
5121
+ x: Math.round(Math.min(Math.max(pos.x, m), window.innerWidth - widthPx - m)),
4907
5122
  y: Math.round(Math.min(Math.max(pos.y, m), window.innerHeight - VOICE_BAR_HEIGHT_PX - m))
4908
5123
  };
4909
5124
  }
@@ -4917,7 +5132,7 @@ function defaultBarPos() {
4917
5132
  return clampBarPos({
4918
5133
  x: window.innerWidth / 2 - VOICE_BAR_WIDTH_PX / 2,
4919
5134
  y: window.innerHeight - VOICE_BAR_EDGE_MARGIN_PX - VOICE_BAR_HEIGHT_PX
4920
- });
5135
+ }, VOICE_BAR_WIDTH_PX);
4921
5136
  }
4922
5137
  function barPosStyle(pos) {
4923
5138
  return {
@@ -4930,10 +5145,8 @@ function edgeExtent(edge) {
4930
5145
  return isHorizontalEdge(edge) ? window.innerWidth : window.innerHeight;
4931
5146
  }
4932
5147
  function clampOffset(edge, offsetPx) {
4933
- const halfSize = isHorizontalEdge(edge) ? VOICE_BAR_WIDTH_PX / 2 : VOICE_BAR_HEIGHT_PX / 2;
4934
- const min = VOICE_BAR_EDGE_MARGIN_PX + halfSize;
4935
- const max = edgeExtent(edge) - VOICE_BAR_EDGE_MARGIN_PX - halfSize;
4936
- return Math.round(Math.min(Math.max(offsetPx, min), max));
5148
+ const half = LAUNCHER_DOCK_THICKNESS_PX / 2;
5149
+ return Math.round(Math.min(Math.max(offsetPx, half), edgeExtent(edge) - half));
4937
5150
  }
4938
5151
  function defaultOffset(edge) {
4939
5152
  return clampOffset(edge, edgeExtent(edge) / 2);
@@ -4964,7 +5177,7 @@ function dockStyleFlush(dock) {
4964
5177
  }
4965
5178
 
4966
5179
  // src/components/AgentCursor.tsx
4967
- 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";
4968
5181
 
4969
5182
  // src/capture/elementRef.ts
4970
5183
  function safeGetIframeDocument(iframe) {
@@ -5178,12 +5391,12 @@ function AgentCursor({
5178
5391
  animated = false
5179
5392
  }) {
5180
5393
  const ctx = useContext8(LiveAgentContext);
5181
- const [cursor, setCursor] = useState19(null);
5182
- const [glideMs, setGlideMs] = useState19(0);
5183
- const [phase, setPhase] = useState19("idle");
5184
- const [ringBox, setRingBox] = useState19(null);
5185
- const [clickPulse, setClickPulse] = useState19(0);
5186
- 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);
5187
5400
  const labelRef = useRef16(null);
5188
5401
  const cursorElRef = useRef16(null);
5189
5402
  const pathRef = useRef16(null);
@@ -5307,7 +5520,7 @@ function AgentCursor({
5307
5520
  });
5308
5521
  return cancelAnimation;
5309
5522
  }, [target, animated]);
5310
- useEffect21(() => {
5523
+ useEffect22(() => {
5311
5524
  if (!target || target.kind === "gesture" || phase === "idle")
5312
5525
  return;
5313
5526
  const track = () => {
@@ -5347,7 +5560,7 @@ function AgentCursor({
5347
5560
  setMeasuredLabelWidth(renderedLabelWidth);
5348
5561
  }
5349
5562
  }, [phase, measuredLabelWidth, target?.label]);
5350
- useEffect21(() => {
5563
+ useEffect22(() => {
5351
5564
  return () => {
5352
5565
  traceRef.current?.cancel();
5353
5566
  for (const t of timersRef.current)
@@ -5447,7 +5660,7 @@ function AgentCursor({
5447
5660
  // src/components/AutoStartMedia.tsx
5448
5661
  import { useConnectionState, useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
5449
5662
  import { ConnectionState, Track as Track2 } from "livekit-client";
5450
- import { useEffect as useEffect22, useRef as useRef17 } from "react";
5663
+ import { useEffect as useEffect23, useRef as useRef17 } from "react";
5451
5664
  function AutoStartMedia({
5452
5665
  pendingScreenStream,
5453
5666
  pushOrTapMicMode = false,
@@ -5456,7 +5669,7 @@ function AutoStartMedia({
5456
5669
  const { localParticipant } = useLocalParticipant4();
5457
5670
  const connectionState = useConnectionState();
5458
5671
  const didStartRef = useRef17(false);
5459
- useEffect22(() => {
5672
+ useEffect23(() => {
5460
5673
  if (didStartRef.current)
5461
5674
  return;
5462
5675
  if (connectionState !== ConnectionState.Connected)
@@ -5483,7 +5696,7 @@ function AutoStartMedia({
5483
5696
  // src/components/DomCapture.tsx
5484
5697
  import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
5485
5698
  import { ConnectionState as ConnectionState2, ScreenSharePresets as ScreenSharePresets2, Track as Track3 } from "livekit-client";
5486
- 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";
5487
5700
 
5488
5701
  // src/capture/a11yUtils.ts
5489
5702
  var ROLE_BY_TAG = {
@@ -6716,7 +6929,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6716
6929
  const pausedRef = useRef18(false);
6717
6930
  const freezeCaptureRef = useRef18(null);
6718
6931
  const resumeCaptureRef = useRef18(null);
6719
- useEffect23(() => {
6932
+ useEffect24(() => {
6720
6933
  if (didStartRef.current)
6721
6934
  return;
6722
6935
  if (connectionState !== ConnectionState2.Connected)
@@ -6953,7 +7166,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6953
7166
  track.stop();
6954
7167
  };
6955
7168
  }, [connectionState, localParticipant, pushOrTapMicMode, startMuted, clearPausedCaptureRef]);
6956
- useEffect23(() => {
7169
+ useEffect24(() => {
6957
7170
  if (isHeld) {
6958
7171
  freezeCaptureRef.current?.();
6959
7172
  } else {
@@ -6965,7 +7178,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6965
7178
 
6966
7179
  // src/components/HighlightOverlay.tsx
6967
7180
  import { useDataChannel } from "@livekit/components-react/hooks";
6968
- 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";
6969
7182
  var HIGHLIGHT_AUTO_CLEAR_MS = 25000;
6970
7183
  var textDecoder = new TextDecoder;
6971
7184
  function parseHighlightMessage(payload) {
@@ -7023,8 +7236,8 @@ function HighlightOverlay() {
7023
7236
  autoClearRef.current = setTimeout(clear, HIGHLIGHT_AUTO_CLEAR_MS);
7024
7237
  }, [clear]);
7025
7238
  useDataChannel(HIGHLIGHT_TOPIC, onHighlightMessage);
7026
- useEffect24(() => onHighlightCleared(clear), [clear]);
7027
- useEffect24(() => {
7239
+ useEffect25(() => onHighlightCleared(clear), [clear]);
7240
+ useEffect25(() => {
7028
7241
  const onClick = (event) => {
7029
7242
  const target = targetRef.current;
7030
7243
  const node = event.target;
@@ -7034,15 +7247,15 @@ function HighlightOverlay() {
7034
7247
  document.addEventListener("click", onClick, { capture: true });
7035
7248
  return () => document.removeEventListener("click", onClick, { capture: true });
7036
7249
  }, [clear]);
7037
- useEffect24(() => clear, [clear]);
7250
+ useEffect25(() => clear, [clear]);
7038
7251
  return null;
7039
7252
  }
7040
7253
 
7041
7254
  // src/components/MinimizedBubble.tsx
7042
- import { useContext as useContext10, useEffect as useEffect26, useRef as useRef21, useState as useState20 } from "react";
7255
+ import { useContext as useContext10, useEffect as useEffect27, useRef as useRef21, useState as useState21 } from "react";
7043
7256
 
7044
7257
  // src/hooks/useLauncherDrag.ts
7045
- import { useEffect as useEffect25, useRef as useRef20 } from "react";
7258
+ import { useEffect as useEffect26, useRef as useRef20 } from "react";
7046
7259
  import { flushSync } from "react-dom";
7047
7260
  var DRAG_THRESHOLD_PX = 5;
7048
7261
  function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging, enabled = true) {
@@ -7053,7 +7266,7 @@ function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging, enabl
7053
7266
  followTargetsRef.current = followRefs;
7054
7267
  const reportDraggingRef = useRef20(reportDragging);
7055
7268
  reportDraggingRef.current = reportDragging;
7056
- useEffect25(() => {
7269
+ useEffect26(() => {
7057
7270
  if (!enabled)
7058
7271
  return;
7059
7272
  const el = containerRef.current;
@@ -7408,7 +7621,7 @@ function WelcomeBubble({
7408
7621
  onDismiss,
7409
7622
  onClick
7410
7623
  }) {
7411
- useEffect26(() => {
7624
+ useEffect27(() => {
7412
7625
  const timer = setTimeout(onDismiss, 5000);
7413
7626
  return () => clearTimeout(timer);
7414
7627
  }, [onDismiss]);
@@ -7453,14 +7666,14 @@ function MinimizedBubble({
7453
7666
  commitLauncherDrop,
7454
7667
  appearance
7455
7668
  } = ctx;
7456
- const [goalsAutoHidden, setGoalsAutoHidden] = useState20(false);
7457
- const [isLauncherHovered, setIsLauncherHovered] = useState20(false);
7458
- const [visitHref, setVisitHref] = useState20(() => window.location.href);
7669
+ const [goalsAutoHidden, setGoalsAutoHidden] = useState21(false);
7670
+ const [isLauncherHovered, setIsLauncherHovered] = useState21(false);
7671
+ const [visitHref, setVisitHref] = useState21(() => window.location.href);
7459
7672
  const revealedHrefRef = useRef21(null);
7460
7673
  const hoverContainerRef = useRef21(null);
7461
7674
  const closeTimerRef = useRef21(null);
7462
- useEffect26(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
7463
- useEffect26(() => {
7675
+ useEffect27(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
7676
+ useEffect27(() => {
7464
7677
  const el = hoverContainerRef.current;
7465
7678
  if (!el)
7466
7679
  return;
@@ -7499,7 +7712,7 @@ function MinimizedBubble({
7499
7712
  const onboardingModule = pillCandidates.find((module) => module.type === "onboarding");
7500
7713
  const modulePills = onboardingModule ? [onboardingModule] : pillCandidates.slice(0, MAX_MODULE_PILLS).reverse();
7501
7714
  const goalsEligible = adoptionGoals.length > 0 && !onboardingModule && hasResolvedModules;
7502
- useEffect26(() => {
7715
+ useEffect27(() => {
7503
7716
  if (!goalsEligible)
7504
7717
  return;
7505
7718
  if (revealedHrefRef.current === visitHref) {
@@ -7513,8 +7726,8 @@ function MinimizedBubble({
7513
7726
  }, [goalsEligible, visitHref]);
7514
7727
  const matchedGoals = goalsEligible ? adoptionGoals.slice(0, MAX_GOAL_BUBBLES) : [];
7515
7728
  const goalsHidden = goalsAutoHidden && !isLauncherHovered;
7516
- const [goalsUnmounted, setGoalsUnmounted] = useState20(false);
7517
- useEffect26(() => {
7729
+ const [goalsUnmounted, setGoalsUnmounted] = useState21(false);
7730
+ useEffect27(() => {
7518
7731
  if (!goalsHidden) {
7519
7732
  setGoalsUnmounted(false);
7520
7733
  return;
@@ -7599,7 +7812,7 @@ function MinimizedBubble({
7599
7812
 
7600
7813
  // src/components/PageActionHandler.tsx
7601
7814
  import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
7602
- import { useCallback as useCallback19, useEffect as useEffect27, useRef as useRef22 } from "react";
7815
+ import { useCallback as useCallback19, useEffect as useEffect28, useRef as useRef22 } from "react";
7603
7816
  var STEP_MAX_WAIT_MS = 5000;
7604
7817
  var POST_ACTION_SETTLE_SNAPSHOT_MS = 300;
7605
7818
  var TRAILING_ACTION_FLUSH_AFTER_STOP_MS = 1000;
@@ -7937,7 +8150,7 @@ function PageActionHandler() {
7937
8150
  queueRef.current.push(action);
7938
8151
  drain();
7939
8152
  }, [drain]);
7940
- useEffect27(() => {
8153
+ useEffect28(() => {
7941
8154
  mountedRef.current = true;
7942
8155
  drainingRef.current = false;
7943
8156
  return () => {
@@ -7949,7 +8162,7 @@ function PageActionHandler() {
7949
8162
  setActionsBusy(false);
7950
8163
  };
7951
8164
  }, []);
7952
- useEffect27(() => {
8165
+ useEffect28(() => {
7953
8166
  return onActionsStopped(() => {
7954
8167
  actionsStoppedRef.current = true;
7955
8168
  ignoreActionsArrivingBeforeRef.current = Date.now() + TRAILING_ACTION_FLUSH_AFTER_STOP_MS;
@@ -7967,17 +8180,17 @@ function PageActionHandler() {
7967
8180
  }
7968
8181
 
7969
8182
  // src/components/SessionControlBar.tsx
7970
- import { useCallback as useCallback22, useContext as useContext11, useEffect as useEffect31, useState as useState23 } from "react";
8183
+ import { useCallback as useCallback22, useContext as useContext11, useEffect as useEffect32, useState as useState24 } from "react";
7971
8184
 
7972
8185
  // src/hooks/useActionControl.ts
7973
8186
  import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
7974
- import { useCallback as useCallback20, useEffect as useEffect28, useState as useState21 } from "react";
8187
+ import { useCallback as useCallback20, useEffect as useEffect29, useState as useState22 } from "react";
7975
8188
  var textEncoder5 = new TextEncoder;
7976
8189
  function useActionControl() {
7977
8190
  const { localParticipant } = useLocalParticipant6();
7978
8191
  const plan = usePlanUpdates();
7979
- const [busy, setBusy] = useState21(isActionsBusy);
7980
- useEffect28(() => subscribeActionsBusy(setBusy), []);
8192
+ const [busy, setBusy] = useState22(isActionsBusy);
8193
+ useEffect29(() => subscribeActionsBusy(setBusy), []);
7981
8194
  const actionsActive = busy || plan?.state === "executing";
7982
8195
  const requestStop = useCallback20(async () => {
7983
8196
  stopActions();
@@ -7994,13 +8207,13 @@ function useActionControl() {
7994
8207
  }
7995
8208
 
7996
8209
  // src/hooks/useAudioLevelBars.ts
7997
- import { useEffect as useEffect29, useRef as useRef23, useState as useState22 } from "react";
8210
+ import { useEffect as useEffect30, useRef as useRef23, useState as useState23 } from "react";
7998
8211
  var TALKING_LEVEL_THRESHOLD = 0.2;
7999
8212
  var TALKING_HOLD_MS = 400;
8000
8213
  function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowthPx, noiseGate }) {
8001
8214
  const barRefs = useRef23([]);
8002
- const [isTalking, setIsTalking] = useState22(false);
8003
- useEffect29(() => {
8215
+ const [isTalking, setIsTalking] = useState23(false);
8216
+ useEffect30(() => {
8004
8217
  if (!mediaStreamTrack) {
8005
8218
  for (const bar of barRefs.current) {
8006
8219
  if (bar)
@@ -8051,7 +8264,7 @@ function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowth
8051
8264
  }
8052
8265
 
8053
8266
  // src/hooks/useIdleAutoPause.ts
8054
- import { useCallback as useCallback21, useEffect as useEffect30, useRef as useRef24 } from "react";
8267
+ import { useCallback as useCallback21, useEffect as useEffect31, useRef as useRef24 } from "react";
8055
8268
  function useIdleAutoPause({
8056
8269
  enabled,
8057
8270
  active,
@@ -8075,7 +8288,7 @@ function useIdleAutoPause({
8075
8288
  if (enabled && !isHeld)
8076
8289
  armTimer();
8077
8290
  }, [enabled, isHeld, armTimer]);
8078
- useEffect30(() => {
8291
+ useEffect31(() => {
8079
8292
  if (!enabled || isHeld || active) {
8080
8293
  clearTimer();
8081
8294
  return;
@@ -8443,7 +8656,7 @@ function SessionControlBar() {
8443
8656
  togglePause();
8444
8657
  }
8445
8658
  });
8446
- const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState23(false);
8659
+ const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState24(false);
8447
8660
  const startPushToTalk = useCallback22(() => {
8448
8661
  start();
8449
8662
  reportActivity();
@@ -8461,7 +8674,7 @@ function SessionControlBar() {
8461
8674
  onCommit: commitPushToTalk,
8462
8675
  onKeyUsed: dismissPushToTalkHint
8463
8676
  });
8464
- useEffect31(() => {
8677
+ useEffect32(() => {
8465
8678
  if (isHeld)
8466
8679
  minimizePanel();
8467
8680
  }, [isHeld, minimizePanel]);
@@ -8714,7 +8927,7 @@ function SessionControlBar() {
8714
8927
  }
8715
8928
 
8716
8929
  // src/components/ShadowHost.tsx
8717
- import { useLayoutEffect as useLayoutEffect2, useRef as useRef26, useState as useState24 } from "react";
8930
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef26, useState as useState25 } from "react";
8718
8931
  import { createPortal } from "react-dom";
8719
8932
  import { jsx as jsx27, Fragment as Fragment3 } from "react/jsx-runtime";
8720
8933
  var PROPERTIES_STYLE_ID = "skippr-tw-properties";
@@ -8736,9 +8949,9 @@ function ShadowHost({
8736
8949
  className
8737
8950
  }) {
8738
8951
  const hostRef = useRef26(null);
8739
- const [shadowRoot, setShadowRoot] = useState24(null);
8952
+ const [shadowRoot, setShadowRoot] = useState25(null);
8740
8953
  const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
8741
- @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-\\[120px\\]{width:120px}.skippr\\:w-\\[148px\\]{width:148px}.skippr\\:w-\\[150px\\]{width:150px}.skippr\\:w-\\[156px\\]{width:156px}.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}}`;
8954
+ @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}}`;
8742
8955
  const hostStyle = accentColor && isHexColor(accentColor) ? {
8743
8956
  "--skippr-brand": accentColor,
8744
8957
  "--skippr-brand-foreground": brandForeground(accentColor),
@@ -8770,7 +8983,7 @@ function ShadowHost({
8770
8983
  }
8771
8984
 
8772
8985
  // src/components/Sidebar.tsx
8773
- import { useCallback as useCallback28, useContext as useContext18, useEffect as useEffect37, useRef as useRef33 } from "react";
8986
+ import { useCallback as useCallback28, useContext as useContext18, useEffect as useEffect38, useRef as useRef33 } from "react";
8774
8987
 
8775
8988
  // src/hooks/useCombinedMessages.ts
8776
8989
  import { useContext as useContext12, useMemo as useMemo8 } from "react";
@@ -8903,7 +9116,7 @@ function useLinkCard() {
8903
9116
  }
8904
9117
 
8905
9118
  // src/hooks/usePhaseUpdates.ts
8906
- import { useCallback as useCallback24, useContext as useContext13, useEffect as useEffect32 } from "react";
9119
+ import { useCallback as useCallback24, useContext as useContext13, useEffect as useEffect33 } from "react";
8907
9120
  function parsePhases(json) {
8908
9121
  try {
8909
9122
  const data = JSON.parse(json);
@@ -8917,7 +9130,7 @@ function usePhaseUpdates() {
8917
9130
  const parse = useCallback24(parsePhases, []);
8918
9131
  const livePhases = useAgentState("phases", parse, []);
8919
9132
  const ctx = useContext13(LiveAgentContext);
8920
- useEffect32(() => {
9133
+ useEffect33(() => {
8921
9134
  if (livePhases.length > 0)
8922
9135
  ctx?.setPhasesSnapshot(livePhases);
8923
9136
  }, [livePhases, ctx?.setPhasesSnapshot]);
@@ -8926,7 +9139,7 @@ function usePhaseUpdates() {
8926
9139
  }
8927
9140
 
8928
9141
  // src/hooks/useSessionRemaining.ts
8929
- import { useEffect as useEffect33, useRef as useRef28, useState as useState25 } from "react";
9142
+ import { useEffect as useEffect34, useRef as useRef28, useState as useState26 } from "react";
8930
9143
 
8931
9144
  // src/lib/format.ts
8932
9145
  function formatTime(seconds) {
@@ -8943,8 +9156,8 @@ function parseNumber(s) {
8943
9156
  function useSessionRemaining() {
8944
9157
  const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
8945
9158
  const endTimeRef = useRef28(null);
8946
- const [remaining, setRemaining] = useState25(null);
8947
- useEffect33(() => {
9159
+ const [remaining, setRemaining] = useState26(null);
9160
+ useEffect34(() => {
8948
9161
  if (maxCallDuration === null || endTimeRef.current !== null)
8949
9162
  return;
8950
9163
  const endTime = Date.now() + maxCallDuration * 1000;
@@ -9215,26 +9428,26 @@ function LogoMark({ className, decorative }) {
9215
9428
  }
9216
9429
 
9217
9430
  // src/components/MessageList.tsx
9218
- import { useCallback as useCallback27, useLayoutEffect as useLayoutEffect3, useRef as useRef32, useState as useState29 } from "react";
9431
+ import { useCallback as useCallback27, useLayoutEffect as useLayoutEffect3, useRef as useRef32, useState as useState30 } from "react";
9219
9432
 
9220
9433
  // src/components/ChatInput.tsx
9221
- import { useContext as useContext16, useEffect as useEffect34, useRef as useRef30, useState as useState26 } from "react";
9434
+ import { useContext as useContext16, useEffect as useEffect35, useRef as useRef30, useState as useState27 } from "react";
9222
9435
  import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
9223
9436
  var MAX_INPUT_HEIGHT = 60;
9224
9437
  function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
9225
9438
  const ctx = useContext16(LiveAgentContext);
9226
9439
  const reportChatActivity = ctx?.reportChatActivity;
9227
9440
  const isPanelOpen = ctx?.isPanelOpen;
9228
- const [localDraft, setLocalDraft] = useState26("");
9441
+ const [localDraft, setLocalDraft] = useState27("");
9229
9442
  const inputText = ctx?.chatDraft ?? localDraft;
9230
9443
  const setInputText = ctx?.setChatDraft ?? setLocalDraft;
9231
9444
  const textareaRef = useRef30(null);
9232
9445
  const canSend = inputText.trim().length > 0 && !isSendingChat;
9233
- useEffect34(() => {
9446
+ useEffect35(() => {
9234
9447
  if (autoFocus && isPanelOpen !== false)
9235
9448
  textareaRef.current?.focus();
9236
9449
  }, [autoFocus, isPanelOpen]);
9237
- useEffect34(() => {
9450
+ useEffect35(() => {
9238
9451
  const el = textareaRef.current;
9239
9452
  if (!el)
9240
9453
  return;
@@ -9325,7 +9538,7 @@ function ChatMessage({ message }) {
9325
9538
  }
9326
9539
 
9327
9540
  // src/components/LinkCard.tsx
9328
- import { useCallback as useCallback26, useEffect as useEffect35, useRef as useRef31, useState as useState27 } from "react";
9541
+ import { useCallback as useCallback26, useEffect as useEffect36, useRef as useRef31, useState as useState28 } from "react";
9329
9542
 
9330
9543
  // src/lib/clipboard.ts
9331
9544
  async function copyToClipboard(text) {
@@ -9342,15 +9555,15 @@ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
9342
9555
  var COPIED_RESET_MS = 2000;
9343
9556
  var DISMISS_AFTER_COPY_MS = 3000;
9344
9557
  function LinkCard({ card, onDismiss }) {
9345
- const [copied, setCopied] = useState27(false);
9558
+ const [copied, setCopied] = useState28(false);
9346
9559
  const dismissTimerRef = useRef31(null);
9347
- useEffect35(() => {
9560
+ useEffect36(() => {
9348
9561
  if (!copied)
9349
9562
  return;
9350
9563
  const timer = setTimeout(() => setCopied(false), COPIED_RESET_MS);
9351
9564
  return () => clearTimeout(timer);
9352
9565
  }, [copied]);
9353
- useEffect35(() => {
9566
+ useEffect36(() => {
9354
9567
  return () => {
9355
9568
  if (dismissTimerRef.current)
9356
9569
  clearTimeout(dismissTimerRef.current);
@@ -9425,7 +9638,7 @@ function LinkCard({ card, onDismiss }) {
9425
9638
  }
9426
9639
 
9427
9640
  // src/components/PlanCard.tsx
9428
- import { useEffect as useEffect36, useState as useState28 } from "react";
9641
+ import { useEffect as useEffect37, useState as useState29 } from "react";
9429
9642
  import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
9430
9643
  var APPROVE_MESSAGE = "Yes, go ahead.";
9431
9644
  var CANCEL_MESSAGE = "No, cancel that.";
@@ -9453,8 +9666,8 @@ function StepIcon({ status }) {
9453
9666
  }
9454
9667
  function PlanCard({ plan, sendChatMessage, onDismiss }) {
9455
9668
  const awaitingApproval = plan.state === "proposed";
9456
- const [isApproving, setIsApproving] = useState28(false);
9457
- const [lastPlanId, setLastPlanId] = useState28(plan.planId);
9669
+ const [isApproving, setIsApproving] = useState29(false);
9670
+ const [lastPlanId, setLastPlanId] = useState29(plan.planId);
9458
9671
  if (plan.planId !== lastPlanId) {
9459
9672
  setLastPlanId(plan.planId);
9460
9673
  setIsApproving(false);
@@ -9466,13 +9679,13 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9466
9679
  setIsApproving(false);
9467
9680
  });
9468
9681
  };
9469
- useEffect36(() => {
9682
+ useEffect37(() => {
9470
9683
  if (!isApproving)
9471
9684
  return;
9472
9685
  const timer = setTimeout(() => setIsApproving(false), APPROVING_RESET_MS);
9473
9686
  return () => clearTimeout(timer);
9474
9687
  }, [isApproving]);
9475
- useEffect36(() => {
9688
+ useEffect37(() => {
9476
9689
  if (plan.state !== "completed")
9477
9690
  return;
9478
9691
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
@@ -9573,14 +9786,14 @@ function MessageList({
9573
9786
  const containerRef = useRef32(null);
9574
9787
  const isPinnedToBottom = useRef32(true);
9575
9788
  const lastSeenMessageId = useRef32(undefined);
9576
- const [showJumpToLatest, setShowJumpToLatest] = useState29(false);
9789
+ const [showJumpToLatest, setShowJumpToLatest] = useState30(false);
9577
9790
  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
9578
- const [dismissedPlanId, setDismissedPlanId] = useState29(null);
9791
+ const [dismissedPlanId, setDismissedPlanId] = useState30(null);
9579
9792
  const dismissPlan = useCallback27(() => {
9580
9793
  if (plan)
9581
9794
  setDismissedPlanId(plan.planId);
9582
9795
  }, [plan]);
9583
- const [dismissedLinkCardId, setDismissedLinkCardId] = useState29(null);
9796
+ const [dismissedLinkCardId, setDismissedLinkCardId] = useState30(null);
9584
9797
  const dismissLinkCard = useCallback27(() => {
9585
9798
  if (linkCard)
9586
9799
  setDismissedLinkCardId(linkCard.cardId);
@@ -9841,7 +10054,7 @@ function Sidebar({
9841
10054
  if (!voiceBarRef?.current || !setBarPos)
9842
10055
  return;
9843
10056
  const rect = voiceBarRef.current.getBoundingClientRect();
9844
- setBarPos(clampBarPos({ x: rect.left, y: rect.top }));
10057
+ setBarPos({ x: rect.left, y: rect.top }, rect.width);
9845
10058
  }, [setBarPos, voiceBarRef]);
9846
10059
  const followsPanel = isFloating && isPanelOpen;
9847
10060
  const dragFollowers = followsPanel && panelRef && controlBarRef && voiceBarRef ? [panelRef, controlBarRef, voiceBarRef] : null;
@@ -9852,7 +10065,7 @@ function Sidebar({
9852
10065
  ...anchor2.style,
9853
10066
  height: panelExpanded ? anchor2.availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${anchor2.availableHeight})`
9854
10067
  } : undefined;
9855
- useEffect37(() => {
10068
+ useEffect38(() => {
9856
10069
  if (!isSidebar)
9857
10070
  return;
9858
10071
  const prop = position === "right" ? "marginRight" : "marginLeft";
@@ -9878,7 +10091,9 @@ function Sidebar({
9878
10091
  draggable: followsPanel,
9879
10092
  headerRef
9880
10093
  }),
9881
- authFailed ? /* @__PURE__ */ jsx39(AuthError, {}) : isAuthenticated && hasResolvedModules ? /* @__PURE__ */ jsx39(AuthenticatedContent, {
10094
+ authFailed ? /* @__PURE__ */ jsx39(AuthError, {
10095
+ locale: internalCtx?.locale
10096
+ }) : isAuthenticated && hasResolvedModules ? /* @__PURE__ */ jsx39(AuthenticatedContent, {
9882
10097
  isConnected,
9883
10098
  isPaused,
9884
10099
  isPausing,
@@ -9989,7 +10204,8 @@ function AuthenticatedContent({
9989
10204
  ]
9990
10205
  });
9991
10206
  }
9992
- function AuthError() {
10207
+ function AuthError({ locale }) {
10208
+ const copy = resolveAuthFailedCopy(locale);
9993
10209
  return /* @__PURE__ */ jsxs31("div", {
9994
10210
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
9995
10211
  children: [
@@ -9998,11 +10214,11 @@ function AuthError() {
9998
10214
  }),
9999
10215
  /* @__PURE__ */ jsx39("p", {
10000
10216
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
10001
- children: "We couldn't verify your session"
10217
+ children: copy.title
10002
10218
  }),
10003
10219
  /* @__PURE__ */ jsx39("p", {
10004
10220
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
10005
- children: "Please contact administrator."
10221
+ children: copy.hint
10006
10222
  })
10007
10223
  ]
10008
10224
  });
@@ -10195,7 +10411,7 @@ import {
10195
10411
  } from "react";
10196
10412
 
10197
10413
  // src/hooks/useSplash.ts
10198
- import { useCallback as useCallback29, useContext as useContext21, useMemo as useMemo9, useState as useState30 } from "react";
10414
+ import { useCallback as useCallback29, useContext as useContext21, useMemo as useMemo9, useState as useState31 } from "react";
10199
10415
 
10200
10416
  // src/lib/splashPresentation.ts
10201
10417
  function resolveSplashSections(sections, iconUrls) {
@@ -10274,7 +10490,7 @@ function useSplash(surface, onDismiss) {
10274
10490
  const splash = appearance?.splash ?? null;
10275
10491
  const { micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen } = splashMedia;
10276
10492
  const toggleStartMuted = useCallback29(() => setStartMuted(!startMuted), [setStartMuted, startMuted]);
10277
- const [optOutChecked, setOptOutChecked] = useState30(false);
10493
+ const [optOutChecked, setOptOutChecked] = useState31(false);
10278
10494
  const toggleOptOut = useCallback29(() => setOptOutChecked((checked) => !checked), []);
10279
10495
  const commitOptOut = useCallback29(() => {
10280
10496
  if (optOutChecked)
@@ -11231,14 +11447,14 @@ function useBarNotifications() {
11231
11447
 
11232
11448
  // src/components/VoiceBarFrame.tsx
11233
11449
  import { useIsSpeaking, useLocalParticipant as useLocalParticipant12 } from "@livekit/components-react/hooks";
11234
- import { useCallback as useCallback34, useContext as useContext26, useEffect as useEffect46, useRef as useRef42, useState as useState37 } from "react";
11450
+ import { useCallback as useCallback34, useContext as useContext26, useEffect as useEffect47, useRef as useRef42, useState as useState38 } from "react";
11235
11451
 
11236
11452
  // src/hooks/useKeyboardStop.ts
11237
- import { useEffect as useEffect38, useRef as useRef36 } from "react";
11453
+ import { useEffect as useEffect39, useRef as useRef36 } from "react";
11238
11454
  function useKeyboardStop({ enabled, onStop }) {
11239
11455
  const handler = useRef36(onStop);
11240
11456
  handler.current = onStop;
11241
- useEffect38(() => {
11457
+ useEffect39(() => {
11242
11458
  if (!enabled)
11243
11459
  return;
11244
11460
  const onKeyDown = (event) => {
@@ -11255,18 +11471,18 @@ function useKeyboardStop({ enabled, onStop }) {
11255
11471
  }
11256
11472
 
11257
11473
  // src/hooks/useSessionTimer.ts
11258
- import { useEffect as useEffect40, useState as useState32 } from "react";
11474
+ import { useEffect as useEffect41, useState as useState33 } from "react";
11259
11475
 
11260
11476
  // src/hooks/useElapsedSeconds.ts
11261
- import { useEffect as useEffect39, useRef as useRef37, useState as useState31 } from "react";
11477
+ import { useEffect as useEffect40, useRef as useRef37, useState as useState32 } from "react";
11262
11478
  function useElapsedSeconds(isRunning, resetSignal) {
11263
- const [elapsed, setElapsed] = useState31(0);
11479
+ const [elapsed, setElapsed] = useState32(0);
11264
11480
  const accumulatedSecondsRef = useRef37(0);
11265
- useEffect39(() => {
11481
+ useEffect40(() => {
11266
11482
  accumulatedSecondsRef.current = 0;
11267
11483
  setElapsed(0);
11268
11484
  }, [resetSignal]);
11269
- useEffect39(() => {
11485
+ useEffect40(() => {
11270
11486
  if (!isRunning)
11271
11487
  return;
11272
11488
  const resumedAt = Date.now();
@@ -11291,8 +11507,8 @@ function useSessionTimer(isRunning, resetSignal) {
11291
11507
  const active = isRunning && remaining !== null;
11292
11508
  const warning = active && remaining !== null && remaining <= SESSION_TIMER_WARNING_S;
11293
11509
  const revealCycle = !active ? null : warning ? "warning" : "normal";
11294
- const [revealed, setRevealed] = useState32(false);
11295
- useEffect40(() => {
11510
+ const [revealed, setRevealed] = useState33(false);
11511
+ useEffect41(() => {
11296
11512
  if (!revealCycle) {
11297
11513
  setRevealed(false);
11298
11514
  return;
@@ -11320,7 +11536,7 @@ function useSessionTimer(isRunning, resetSignal) {
11320
11536
  }
11321
11537
 
11322
11538
  // src/hooks/useVoiceBarDrag.ts
11323
- import { useEffect as useEffect41, useRef as useRef38 } from "react";
11539
+ import { useEffect as useEffect42, useRef as useRef38 } from "react";
11324
11540
  import { flushSync as flushSync2 } from "react-dom";
11325
11541
  var DRAG_THRESHOLD_PX2 = 5;
11326
11542
  function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
@@ -11331,7 +11547,7 @@ function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11331
11547
  followTargetsRef.current = followRefs;
11332
11548
  const reportDraggingRef = useRef38(reportDragging);
11333
11549
  reportDraggingRef.current = reportDragging;
11334
- useEffect41(() => {
11550
+ useEffect42(() => {
11335
11551
  const el = containerRef.current;
11336
11552
  if (!el)
11337
11553
  return;
@@ -11406,7 +11622,7 @@ function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11406
11622
  clearDragOffset();
11407
11623
  for (const follower of followers)
11408
11624
  follower.style.transform = "";
11409
- flushSync2(() => onDropRef.current(clampBarPos({ x: rect.left, y: rect.top })));
11625
+ flushSync2(() => onDropRef.current({ x: rect.left, y: rect.top }));
11410
11626
  }
11411
11627
  endDrag();
11412
11628
  };
@@ -11481,7 +11697,7 @@ function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11481
11697
  }
11482
11698
 
11483
11699
  // src/components/VoiceBarChatLine.tsx
11484
- import { useCallback as useCallback32, useContext as useContext25, useEffect as useEffect42, useRef as useRef39, useState as useState33 } from "react";
11700
+ import { useCallback as useCallback32, useContext as useContext25, useEffect as useEffect43, useRef as useRef39, useState as useState34 } from "react";
11485
11701
  import { jsx as jsx48, jsxs as jsxs37 } from "react/jsx-runtime";
11486
11702
  var IDLE_HIDE_MS = 6000;
11487
11703
  function VoiceBarChatLine({
@@ -11493,7 +11709,7 @@ function VoiceBarChatLine({
11493
11709
  const { sendChatMessage, isSendingChat } = useChatMessages();
11494
11710
  const ctx = useContext25(LiveAgentContext);
11495
11711
  const reportChatActivity = ctx?.reportChatActivity;
11496
- const [localDraft, setLocalDraft] = useState33("");
11712
+ const [localDraft, setLocalDraft] = useState34("");
11497
11713
  const text = ctx?.chatDraft ?? localDraft;
11498
11714
  const setText = ctx?.setChatDraft ?? setLocalDraft;
11499
11715
  const inputRef = useRef39(null);
@@ -11505,7 +11721,7 @@ function VoiceBarChatLine({
11505
11721
  clearTimeout(idleTimerRef.current);
11506
11722
  idleTimerRef.current = setTimeout(() => onCloseRef.current(), IDLE_HIDE_MS);
11507
11723
  }, []);
11508
- useEffect42(() => {
11724
+ useEffect43(() => {
11509
11725
  inputRef.current?.focus();
11510
11726
  armIdle();
11511
11727
  return () => {
@@ -11574,20 +11790,20 @@ function VoiceBarChatLine({
11574
11790
  }
11575
11791
 
11576
11792
  // src/components/VoiceBarLinkCard.tsx
11577
- import { useCallback as useCallback33, useEffect as useEffect43, useRef as useRef40, useState as useState34 } from "react";
11793
+ import { useCallback as useCallback33, useEffect as useEffect44, useRef as useRef40, useState as useState35 } from "react";
11578
11794
  import { jsx as jsx49, jsxs as jsxs38 } from "react/jsx-runtime";
11579
11795
  var COPIED_RESET_MS2 = 2000;
11580
11796
  var DISMISS_AFTER_COPY_MS2 = 3000;
11581
11797
  function VoiceBarLinkCard({ card, onDismiss }) {
11582
- const [copied, setCopied] = useState34(false);
11798
+ const [copied, setCopied] = useState35(false);
11583
11799
  const dismissTimerRef = useRef40(null);
11584
- useEffect43(() => {
11800
+ useEffect44(() => {
11585
11801
  if (!copied)
11586
11802
  return;
11587
11803
  const timer = setTimeout(() => setCopied(false), COPIED_RESET_MS2);
11588
11804
  return () => clearTimeout(timer);
11589
11805
  }, [copied]);
11590
- useEffect43(() => {
11806
+ useEffect44(() => {
11591
11807
  return () => {
11592
11808
  if (dismissTimerRef.current)
11593
11809
  clearTimeout(dismissTimerRef.current);
@@ -11661,13 +11877,13 @@ function VoiceBarLinkCard({ card, onDismiss }) {
11661
11877
  }
11662
11878
 
11663
11879
  // src/components/VoiceBarNotification.tsx
11664
- import { useEffect as useEffect44, useRef as useRef41, useState as useState35 } from "react";
11880
+ import { useEffect as useEffect45, useRef as useRef41, useState as useState36 } from "react";
11665
11881
  import { jsx as jsx50, jsxs as jsxs39 } from "react/jsx-runtime";
11666
11882
  function VoiceBarNotification({ notifications, pos, onDismiss }) {
11667
- const [index2, setIndex] = useState35(0);
11668
- const [paused, setPaused] = useState35(false);
11883
+ const [index2, setIndex] = useState36(0);
11884
+ const [paused, setPaused] = useState36(false);
11669
11885
  const cardRef = useRef41(null);
11670
- useEffect44(() => {
11886
+ useEffect45(() => {
11671
11887
  const el = cardRef.current;
11672
11888
  if (!el)
11673
11889
  return;
@@ -11680,7 +11896,7 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
11680
11896
  el.removeEventListener("mouseleave", leave);
11681
11897
  };
11682
11898
  }, []);
11683
- useEffect44(() => {
11899
+ useEffect45(() => {
11684
11900
  if (paused)
11685
11901
  return;
11686
11902
  const rotate = setInterval(() => setIndex((current) => (current + 1) % notifications.length), TIP_ROTATE_MS);
@@ -11752,7 +11968,7 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
11752
11968
  }
11753
11969
 
11754
11970
  // src/components/VoiceBarPlanCard.tsx
11755
- import { useEffect as useEffect45, useState as useState36 } from "react";
11971
+ import { useEffect as useEffect46, useState as useState37 } from "react";
11756
11972
  import { jsx as jsx51, jsxs as jsxs40 } from "react/jsx-runtime";
11757
11973
  var APPROVING_RESET_MS2 = 8000;
11758
11974
  function StepIndicator({ step }) {
@@ -11787,8 +12003,8 @@ function VoiceBarPlanCard({
11787
12003
  embedded = false
11788
12004
  }) {
11789
12005
  const awaitingApproval = plan.state === "proposed";
11790
- const [isApproving, setIsApproving] = useState36(false);
11791
- const [lastPlanId, setLastPlanId] = useState36(plan.planId);
12006
+ const [isApproving, setIsApproving] = useState37(false);
12007
+ const [lastPlanId, setLastPlanId] = useState37(plan.planId);
11792
12008
  if (plan.planId !== lastPlanId) {
11793
12009
  setLastPlanId(plan.planId);
11794
12010
  setIsApproving(false);
@@ -11803,13 +12019,13 @@ function VoiceBarPlanCard({
11803
12019
  const cancel = () => {
11804
12020
  sendChatMessage(CANCEL_MESSAGE).catch((e) => console.warn("[Skippr] plan reply failed", e));
11805
12021
  };
11806
- useEffect45(() => {
12022
+ useEffect46(() => {
11807
12023
  if (!isApproving)
11808
12024
  return;
11809
12025
  const timer = setTimeout(() => setIsApproving(false), APPROVING_RESET_MS2);
11810
12026
  return () => clearTimeout(timer);
11811
12027
  }, [isApproving]);
11812
- useEffect45(() => {
12028
+ useEffect46(() => {
11813
12029
  if (plan.state !== "completed")
11814
12030
  return;
11815
12031
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
@@ -12022,8 +12238,8 @@ function ShortcutHint({
12022
12238
  children
12023
12239
  }) {
12024
12240
  const ref = useRef42(null);
12025
- const [visible, setVisible] = useState37(false);
12026
- useEffect46(() => {
12241
+ const [visible, setVisible] = useState38(false);
12242
+ useEffect47(() => {
12027
12243
  if (!enabled)
12028
12244
  return;
12029
12245
  const el = ref.current;
@@ -12138,15 +12354,22 @@ function VoiceBarFrame({
12138
12354
  textMode,
12139
12355
  captureMode,
12140
12356
  chatActivityAt,
12141
- setAutoStartAfterLogin
12357
+ setAutoStartAfterLogin,
12358
+ error,
12359
+ errorSeq,
12360
+ authFailed,
12361
+ modulesError,
12362
+ locale
12142
12363
  } = ctx;
12143
12364
  const needsLogin = !usesHostAuth && !isAuthenticated;
12144
- const [loginOpen, setLoginOpen] = useState37(false);
12145
- useEffect46(() => {
12365
+ const transientError = useTransientError(error, errorSeq);
12366
+ const authFailedCopy = authFailed ? resolveAuthFailedCopy(locale) : null;
12367
+ const [loginOpen, setLoginOpen] = useState38(false);
12368
+ useEffect47(() => {
12146
12369
  if (!needsLogin)
12147
12370
  setLoginOpen(false);
12148
12371
  }, [needsLogin]);
12149
- const [bannerOpen, setBannerOpen] = useState37(false);
12372
+ const [bannerOpen, setBannerOpen] = useState38(false);
12150
12373
  const hasNotifications = notifications.length > 0;
12151
12374
  const notifAccent = notifications[0]?.accentColor;
12152
12375
  const closeBanner = useCallback34(() => setBannerOpen(false), []);
@@ -12156,7 +12379,9 @@ function VoiceBarFrame({
12156
12379
  voiceBarRef.current = node;
12157
12380
  }, [voiceBarRef]);
12158
12381
  const dragFollowers = isPanelOpen ? [panelRef] : null;
12159
- const { wasDraggedRef } = useVoiceBarDrag(containerRef, onDrop, dragFollowers, setDragging);
12382
+ const barWidthRef = useRef42(VOICE_BAR_WIDTH_PX);
12383
+ const dropAtBarWidth = useCallback34((next) => onDrop(next, barWidthRef.current), [onDrop]);
12384
+ const { wasDraggedRef } = useVoiceBarDrag(containerRef, dropAtBarWidth, dragFollowers, setDragging);
12160
12385
  const { isMuted, toggleMute } = useMediaControls();
12161
12386
  const { localParticipant } = useLocalParticipant12();
12162
12387
  const isUserSpeaking = useIsSpeaking(localParticipant);
@@ -12167,9 +12392,9 @@ function VoiceBarFrame({
12167
12392
  const plan = usePlanUpdates();
12168
12393
  const linkCard = useLinkCard();
12169
12394
  const { sendChatMessage } = useChatMessages();
12170
- const [dismissedFloatingPlanId, setDismissedFloatingPlanId] = useState37(null);
12171
- const [dismissedBlockPlanId, setDismissedBlockPlanId] = useState37(null);
12172
- const [dismissedLinkCardId, setDismissedLinkCardId] = useState37(null);
12395
+ const [dismissedFloatingPlanId, setDismissedFloatingPlanId] = useState38(null);
12396
+ const [dismissedBlockPlanId, setDismissedBlockPlanId] = useState38(null);
12397
+ const [dismissedLinkCardId, setDismissedLinkCardId] = useState38(null);
12173
12398
  const micMode = agentControls?.micMode;
12174
12399
  const pushOrTap = isRequestResponseMicMode(micMode);
12175
12400
  const isPushToTalk = micMode === MIC_MODE.PushToTalk;
@@ -12178,9 +12403,9 @@ function VoiceBarFrame({
12178
12403
  const showActionControl = isConnected && captureMode === CAPTURE_MODE.Auto && actionsActive;
12179
12404
  const chatSurface = agentControls?.chat ?? DEFAULT_CHAT_SURFACE;
12180
12405
  const isRoomChat = chatSurface === CHAT_SURFACE.Room;
12181
- const [chatLineOpen, setChatLineOpen] = useState37(false);
12182
- const [chatLineMounted, setChatLineMounted] = useState37(false);
12183
- const [chatLineClosing, setChatLineClosing] = useState37(false);
12406
+ const [chatLineOpen, setChatLineOpen] = useState38(false);
12407
+ const [chatLineMounted, setChatLineMounted] = useState38(false);
12408
+ const [chatLineClosing, setChatLineClosing] = useState38(false);
12184
12409
  const chatOpen = isRoomChat ? isPanelOpen : chatLineOpen;
12185
12410
  const lineBlockOpen = !isRoomChat && chatLineMounted;
12186
12411
  const toggleChat = () => {
@@ -12190,7 +12415,7 @@ function VoiceBarFrame({
12190
12415
  setChatLineOpen((open) => !open);
12191
12416
  }
12192
12417
  };
12193
- useEffect46(() => {
12418
+ useEffect47(() => {
12194
12419
  if (chatLineOpen) {
12195
12420
  setChatLineMounted(true);
12196
12421
  setChatLineClosing(false);
@@ -12217,7 +12442,13 @@ function VoiceBarFrame({
12217
12442
  const canStart = isAuthenticated && (!!defaultAgentId || !!pendingStart);
12218
12443
  const showClose = canFold || sessionLive;
12219
12444
  const showLivePill = !isLoading && isConnected && !textMode && !pushOrTap;
12220
- const barWidthClass = !showLivePill ? "skippr:w-[255px]" : isHeld ? "skippr:w-[120px]" : "skippr:w-[156px]";
12445
+ const barWidthPx = !showLivePill ? VOICE_BAR_WIDTH_PX : isHeld ? 120 : 156;
12446
+ barWidthRef.current = barWidthPx;
12447
+ useEffect47(() => {
12448
+ const inBounds = clampBarPos(pos, barWidthPx);
12449
+ if (inBounds.x !== pos.x)
12450
+ onDrop(inBounds, barWidthPx);
12451
+ }, [pos, barWidthPx, onDrop]);
12221
12452
  const logoUrl = appearance?.logoUrl ?? null;
12222
12453
  const ifNotDragged = (action) => () => {
12223
12454
  if (wasDraggedRef.current)
@@ -12239,17 +12470,17 @@ function VoiceBarFrame({
12239
12470
  const requestLabel = agentStateLabel ?? (isCapturingSpeech ? "listening…" : idleRequestLabel);
12240
12471
  const livePillBg = agentActive && !isHeld ? "var(--skippr-brand-active)" : "var(--skippr-brand, #2bc0ae)";
12241
12472
  const glow = isConnected && !isHeld && agentActive;
12242
- const [autoOffClosing, setAutoOffClosing] = useState37(false);
12473
+ const [autoOffClosing, setAutoOffClosing] = useState38(false);
12243
12474
  const { reportActivity } = useIdleAutoOff({
12244
12475
  enabled: isConnected && !autoOffClosing,
12245
12476
  active: agentActive || isCapturingSpeech || isUserSpeaking,
12246
12477
  onExpire: () => setAutoOffClosing(true)
12247
12478
  });
12248
- useEffect46(() => {
12479
+ useEffect47(() => {
12249
12480
  if (chatActivityAt)
12250
12481
  reportActivity();
12251
12482
  }, [chatActivityAt, reportActivity]);
12252
- useEffect46(() => {
12483
+ useEffect47(() => {
12253
12484
  if (!autoOffClosing)
12254
12485
  return;
12255
12486
  if (!isConnected) {
@@ -12265,12 +12496,12 @@ function VoiceBarFrame({
12265
12496
  const floatingPlanActive = planEnabled && !isRoomChat && !lineBlockOpen && activePlan.planId !== dismissedFloatingPlanId;
12266
12497
  const planInLineBlock = planEnabled && lineBlockOpen && activePlan.planId !== dismissedBlockPlanId;
12267
12498
  const planCardActive = floatingPlanActive || planInLineBlock;
12268
- useEffect46(() => {
12499
+ useEffect47(() => {
12269
12500
  if (lineBlockOpen)
12270
12501
  setDismissedBlockPlanId(null);
12271
12502
  }, [lineBlockOpen]);
12272
- const [autoOpenedPlanId, setAutoOpenedPlanId] = useState37(null);
12273
- useEffect46(() => {
12503
+ const [autoOpenedPlanId, setAutoOpenedPlanId] = useState38(null);
12504
+ useEffect47(() => {
12274
12505
  if (!isRoomChat || !planEnabled || !activePlan)
12275
12506
  return;
12276
12507
  if (activePlan.planId === autoOpenedPlanId)
@@ -12282,7 +12513,8 @@ function VoiceBarFrame({
12282
12513
  const visibleLinkCard = linkCard && linkCard.cardId !== dismissedLinkCardId ? linkCard : null;
12283
12514
  const linkCardActive = !!visibleLinkCard && isConnected && !planCardActive && !(isRoomChat && chatOpen) && !isCapturingSpeech && !isHeld && !autoOffClosing;
12284
12515
  const bannerActive = hasNotifications && bannerOpen;
12285
- const slotClaimed = chatOpen || bannerActive || lineBlockOpen;
12516
+ const midSessionError = sessionLive && !isRoomChat && !!transientError && !planCardActive && !linkCardActive;
12517
+ const slotClaimed = chatOpen || bannerActive || lineBlockOpen || midSessionError;
12286
12518
  const autoBase = showLivePill && !autoOffClosing;
12287
12519
  const showLiveStrip = !slotClaimed && autoBase && !isHeld && !planCardActive && (state === "thinking" || showActionControl);
12288
12520
  const showTimerStrip = !slotClaimed && !autoOffClosing && !isCapturingSpeech && !planCardActive && !showLiveStrip && !isHeld && !!sessionTimer;
@@ -12312,8 +12544,8 @@ function VoiceBarFrame({
12312
12544
  const pillEvaporate = autoOffClosing ? "skippr:[animation:skippr-evaporate_3.2s_ease-in_forwards] skippr:motion-reduce:animate-none" : "";
12313
12545
  return /* @__PURE__ */ jsxs41("div", {
12314
12546
  ref: setContainerRefs,
12315
- style: barPosStyle(pos),
12316
- className: cn("skippr:fixed skippr:z-[9999] skippr:flex skippr:touch-none skippr:cursor-grab skippr:items-center", barWidthClass),
12547
+ style: { ...barPosStyle(pos), width: barWidthPx },
12548
+ className: "skippr:fixed skippr:z-[9999] skippr:flex skippr:touch-none skippr:cursor-grab skippr:items-center",
12317
12549
  children: [
12318
12550
  glow && /* @__PURE__ */ jsx52("span", {
12319
12551
  "aria-hidden": true,
@@ -12423,13 +12655,30 @@ function VoiceBarFrame({
12423
12655
  }
12424
12656
  })
12425
12657
  }),
12426
- !sessionLive && !needsLogin && !bannerActive && /* @__PURE__ */ jsx52("div", {
12658
+ (!sessionLive || midSessionError) && !needsLogin && !bannerActive && /* @__PURE__ */ jsx52("div", {
12427
12659
  style: planCardStyle,
12428
12660
  className: "skippr:z-[6]",
12429
12661
  "data-skippr-no-drag": "",
12430
12662
  children: /* @__PURE__ */ jsx52("div", {
12431
12663
  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)]",
12432
- children: /* @__PURE__ */ jsx52(ConsentNotice, {
12664
+ children: !isRoomChat && authFailedCopy ? /* @__PURE__ */ jsxs41("div", {
12665
+ role: "alert",
12666
+ className: "skippr:text-center",
12667
+ children: [
12668
+ /* @__PURE__ */ jsx52("p", {
12669
+ className: "skippr:text-[11px] skippr:font-medium skippr:leading-[1.2] skippr:text-destructive",
12670
+ children: authFailedCopy.title
12671
+ }),
12672
+ /* @__PURE__ */ jsx52("p", {
12673
+ className: "skippr:mt-0.5 skippr:text-[10px] skippr:leading-[1.2] skippr:text-muted-foreground",
12674
+ children: authFailedCopy.hint
12675
+ })
12676
+ ]
12677
+ }) : !isRoomChat && (modulesError || transientError) ? /* @__PURE__ */ jsx52("p", {
12678
+ role: "alert",
12679
+ className: "skippr:text-[11px] skippr:leading-[1.2] skippr:text-destructive skippr:text-center",
12680
+ children: modulesError || transientError
12681
+ }) : /* @__PURE__ */ jsx52(ConsentNotice, {
12433
12682
  template: CONSENT_NOTICE_SESSION_START
12434
12683
  })
12435
12684
  })
@@ -12634,10 +12883,10 @@ function VoiceBarFrame({
12634
12883
  }
12635
12884
 
12636
12885
  // src/components/VoiceBarLauncher.tsx
12637
- import { useCallback as useCallback35, useEffect as useEffect48, useRef as useRef44, useState as useState39 } from "react";
12886
+ import { useCallback as useCallback35, useEffect as useEffect49, useRef as useRef44, useState as useState40 } from "react";
12638
12887
 
12639
12888
  // src/components/LauncherNotification.tsx
12640
- import { useEffect as useEffect47, useRef as useRef43, useState as useState38 } from "react";
12889
+ import { useEffect as useEffect48, useRef as useRef43, useState as useState39 } from "react";
12641
12890
  import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
12642
12891
  function LauncherNotification({
12643
12892
  notifications,
@@ -12645,10 +12894,10 @@ function LauncherNotification({
12645
12894
  mode,
12646
12895
  onDismiss
12647
12896
  }) {
12648
- const [index2, setIndex] = useState38(0);
12649
- const [paused, setPaused] = useState38(false);
12897
+ const [index2, setIndex] = useState39(0);
12898
+ const [paused, setPaused] = useState39(false);
12650
12899
  const cardRef = useRef43(null);
12651
- useEffect47(() => {
12900
+ useEffect48(() => {
12652
12901
  const el = cardRef.current;
12653
12902
  if (!el)
12654
12903
  return;
@@ -12661,7 +12910,7 @@ function LauncherNotification({
12661
12910
  el.removeEventListener("mouseleave", leave);
12662
12911
  };
12663
12912
  }, []);
12664
- useEffect47(() => {
12913
+ useEffect48(() => {
12665
12914
  if (paused)
12666
12915
  return;
12667
12916
  const rotate = setInterval(() => setIndex((current) => (current + 1) % notifications.length), TIP_ROTATE_MS);
@@ -12886,16 +13135,16 @@ function VoiceBarLauncher({
12886
13135
  }, [onDrop]);
12887
13136
  const { wasDraggedRef } = useVoiceBarDrag(containerRef, onDropPos, null, setDragging);
12888
13137
  const horizontal = isHorizontalEdge(dock.edge);
12889
- const [cardOpen, setCardOpen] = useState39(false);
12890
- const [loginOpen, setLoginOpen] = useState39(false);
12891
- const [hovered, setHovered] = useState39(false);
12892
- useEffect48(() => {
13138
+ const [cardOpen, setCardOpen] = useState40(false);
13139
+ const [loginOpen, setLoginOpen] = useState40(false);
13140
+ const [hovered, setHovered] = useState40(false);
13141
+ useEffect49(() => {
12893
13142
  if (!needsLogin)
12894
13143
  setLoginOpen(false);
12895
13144
  }, [needsLogin]);
12896
13145
  const hasNotif = notifications.length > 0;
12897
13146
  const dotColor = notifications.find((item) => item.kind === NOTIFICATION_KIND.Module)?.accentColor ?? notifications[0]?.accentColor ?? NOTIF_ACCENT_COLOR;
12898
- useEffect48(() => {
13147
+ useEffect49(() => {
12899
13148
  const el = containerRef.current;
12900
13149
  if (!el)
12901
13150
  return;
@@ -13181,7 +13430,7 @@ function PlanPanelOpener() {
13181
13430
  const plan = usePlanUpdates();
13182
13431
  const { expandPanel } = useLiveAgent();
13183
13432
  const surfacedPlanIdRef = useRef45(null);
13184
- useEffect49(() => {
13433
+ useEffect50(() => {
13185
13434
  if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
13186
13435
  return;
13187
13436
  surfacedPlanIdRef.current = plan.planId;
@@ -13219,12 +13468,13 @@ function LiveAgent(props) {
13219
13468
  console.warn('[Skippr] agentControls requires captureMode: "auto"');
13220
13469
  }
13221
13470
  }
13222
- const auth = useAuth({ appKey });
13471
+ const locale = useDetectedLocale(hostLocale);
13472
+ const auth = useAuth({ appKey, locale });
13223
13473
  const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
13224
13474
  const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
13225
- const [activeModule, setActiveModule] = useState40(null);
13226
- const [sessionAgentMode, setSessionAgentMode] = useState40(null);
13227
- const [isExchanging, setIsExchanging] = useState40(false);
13475
+ const [activeModule, setActiveModule] = useState41(null);
13476
+ const [sessionAgentMode, setSessionAgentMode] = useState41(null);
13477
+ const [isExchanging, setIsExchanging] = useState41(false);
13228
13478
  const minimizeOnSessionStart = useCallback36(() => {
13229
13479
  if (minimizable) {
13230
13480
  setIsMinimized(true);
@@ -13254,6 +13504,7 @@ function LiveAgent(props) {
13254
13504
  isDisconnecting,
13255
13505
  isPausing,
13256
13506
  error,
13507
+ errorSeq,
13257
13508
  errorCode,
13258
13509
  startSession: startSessionRaw,
13259
13510
  pauseSession,
@@ -13268,6 +13519,7 @@ function LiveAgent(props) {
13268
13519
  authFailed
13269
13520
  } = useSession({
13270
13521
  captureMode,
13522
+ locale,
13271
13523
  authToken: effectiveAuthToken,
13272
13524
  appKey,
13273
13525
  getUserToken,
@@ -13292,29 +13544,28 @@ function LiveAgent(props) {
13292
13544
  return;
13293
13545
  disconnect();
13294
13546
  }, [disconnect]);
13295
- const [isPanelOpen, setIsPanelOpen] = useState40(defaultOpen);
13296
- const [panelEntry, setPanelEntry] = useState40(PANEL_ENTRY.Launcher);
13297
- const [isMinimized, setIsMinimized] = useState40(minimizable && !defaultOpen);
13298
- const [pendingStart, setPendingStart] = useState40(null);
13299
- const [sidebarTab, setSidebarTab] = useState40("agenda");
13300
- const [phasesSnapshot, setPhasesSnapshot] = useState40([]);
13301
- const [startMuted, setStartMuted] = useState40(false);
13302
- const [textMode, setTextMode] = useState40(false);
13303
- const [panelExpanded, setPanelExpanded] = useState40(false);
13547
+ const [isPanelOpen, setIsPanelOpen] = useState41(defaultOpen);
13548
+ const [panelEntry, setPanelEntry] = useState41(PANEL_ENTRY.Launcher);
13549
+ const [isMinimized, setIsMinimized] = useState41(minimizable && !defaultOpen);
13550
+ const [pendingStart, setPendingStart] = useState41(null);
13551
+ const [sidebarTab, setSidebarTab] = useState41("agenda");
13552
+ const [phasesSnapshot, setPhasesSnapshot] = useState41([]);
13553
+ const [startMuted, setStartMuted] = useState41(false);
13554
+ const [textMode, setTextMode] = useState41(false);
13555
+ const [panelExpanded, setPanelExpanded] = useState41(false);
13304
13556
  const togglePanelExpanded = useCallback36(() => setPanelExpanded((prev) => !prev), []);
13305
13557
  const panelRef = useRef45(null);
13306
13558
  const controlBarRef = useRef45(null);
13307
13559
  const voiceBarRef = useRef45(null);
13308
- const [isDragging, setIsDragging] = useState40(false);
13560
+ const [isDragging, setIsDragging] = useState41(false);
13309
13561
  const setTextModeState = useCallback36((enabled) => {
13310
13562
  setTextMode(enabled);
13311
13563
  }, []);
13312
13564
  const showControlBar = isConnected || isStarting || isPausing;
13313
- useEffect49(() => {
13565
+ useEffect50(() => {
13314
13566
  if (!isConnected)
13315
13567
  setTextModeState(false);
13316
13568
  }, [isConnected, setTextModeState]);
13317
- const locale = useDetectedLocale(hostLocale);
13318
13569
  const {
13319
13570
  modules: availableModules,
13320
13571
  defaultSelection,
@@ -13348,7 +13599,13 @@ function LiveAgent(props) {
13348
13599
  const buddyActive = isBuddyActive(appearance) && variant !== "sidebar" && !hostAgentId;
13349
13600
  const buddyShape = appearance?.buddy?.shape ?? DEFAULT_BUDDY_SHAPE;
13350
13601
  const effectiveHostAgentId = buddyActive ? undefined : hostAgentId;
13351
- const startSession = useCallback36((opts) => startSessionRaw(buddyActive ? { ...opts, agentControls: buddyEffectiveControls(opts.agentControls) } : opts), [startSessionRaw, buddyActive]);
13602
+ const startSession = useCallback36((opts) => {
13603
+ const named = {
13604
+ ...opts,
13605
+ agentName: availableModules.find((m) => m.id === opts.agentId)?.name
13606
+ };
13607
+ return startSessionRaw(buddyActive ? { ...named, agentControls: buddyEffectiveControls(named.agentControls) } : named);
13608
+ }, [startSessionRaw, buddyActive, availableModules]);
13352
13609
  const defaultAgentId = buddyActive ? defaultSelection.agentId : hostAgentId ?? defaultSelection.agentId;
13353
13610
  const defaultModule = availableModules.find((m) => m.id === defaultAgentId) ?? null;
13354
13611
  const operatingModule = buddyActive ? defaultModule : activeModule ?? (effectiveHostAgentId ? availableModules[0] ?? null : null);
@@ -13422,10 +13679,10 @@ function LiveAgent(props) {
13422
13679
  setPendingStart(pending);
13423
13680
  setIsMinimized(false);
13424
13681
  }, []);
13425
- const [welcomeDismissed, setWelcomeDismissed] = useState40(false);
13682
+ const [welcomeDismissed, setWelcomeDismissed] = useState41(false);
13426
13683
  const dismissWelcome = useCallback36(() => setWelcomeDismissed(true), []);
13427
- const [savedPosition] = useState40(readSavedPosition);
13428
- const [currentPosition, setCurrentPosition] = useState40(savedPosition ?? "right");
13684
+ const [savedPosition] = useState41(readSavedPosition);
13685
+ const [currentPosition, setCurrentPosition] = useState41(savedPosition ?? "right");
13429
13686
  const positionLockedRef = useRef45(savedPosition !== null);
13430
13687
  const setPositionWithPersist = useCallback36((pos) => {
13431
13688
  positionLockedRef.current = true;
@@ -13435,18 +13692,18 @@ function LiveAgent(props) {
13435
13692
  } catch {}
13436
13693
  }, []);
13437
13694
  const serverPosition = appearance?.position ?? null;
13438
- useEffect49(() => {
13695
+ useEffect50(() => {
13439
13696
  if (!serverPosition || positionLockedRef.current)
13440
13697
  return;
13441
13698
  setCurrentPosition(serverPosition);
13442
13699
  }, [serverPosition]);
13443
- const [savedLauncherBottom] = useState40(readSavedLauncherBottom);
13700
+ const [savedLauncherBottom] = useState41(readSavedLauncherBottom);
13444
13701
  const hasDraggedRef = useRef45(savedLauncherBottom !== null);
13445
13702
  const verticalAlignRef = useRef45(hostVerticalAlign ?? "bottom");
13446
- const [launcherBottomPx, setLauncherBottomPxState] = useState40(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlignRef.current));
13447
- const [popsDown, setPopsDown] = useState40(() => launcherPopsDown(launcherBottomPx));
13703
+ const [launcherBottomPx, setLauncherBottomPxState] = useState41(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlignRef.current));
13704
+ const [popsDown, setPopsDown] = useState41(() => launcherPopsDown(launcherBottomPx));
13448
13705
  const serverVerticalAlign = appearance?.verticalAlign ?? null;
13449
- useEffect49(() => {
13706
+ useEffect50(() => {
13450
13707
  if (!serverVerticalAlign || hostVerticalAlign !== undefined || hasDraggedRef.current)
13451
13708
  return;
13452
13709
  verticalAlignRef.current = serverVerticalAlign;
@@ -13464,40 +13721,26 @@ function LiveAgent(props) {
13464
13721
  }, []);
13465
13722
  const launcherBottomPxRef = useRef45(launcherBottomPx);
13466
13723
  launcherBottomPxRef.current = launcherBottomPx;
13467
- const [chatActivityAt, setChatActivityAt] = useState40(0);
13724
+ const [chatActivityAt, setChatActivityAt] = useState41(0);
13468
13725
  const reportChatActivity = useCallback36(() => {
13469
13726
  const now = Date.now();
13470
13727
  setChatActivityAt((last) => now - last < CHAT_ACTIVITY_THROTTLE_MS ? last : now);
13471
13728
  }, []);
13472
- const [chatDraft, setChatDraft] = useState40("");
13473
- const [autoStartAfterLogin, setAutoStartAfterLogin] = useState40(false);
13729
+ const [chatDraft, setChatDraft] = useState41("");
13730
+ const [autoStartAfterLogin, setAutoStartAfterLogin] = useState41(false);
13474
13731
  const commitLauncherDrop = useCallback36(({ side, bottomPx }) => {
13475
13732
  setPositionWithPersist(side);
13476
13733
  setLauncherBottomPx(bottomPx);
13477
13734
  }, [setPositionWithPersist, setLauncherBottomPx]);
13478
- const [barPos, setBarPosState] = useState40(() => readSavedBarPos());
13479
- const barPosRatioRef = useRef45(null);
13480
- if (barPos !== null) {
13481
- barPosRatioRef.current = {
13482
- xRatio: barPos.x / window.innerWidth,
13483
- yRatio: barPos.y / window.innerHeight
13484
- };
13485
- } else if (barPosRatioRef.current === null) {
13486
- const def = defaultBarPos();
13487
- barPosRatioRef.current = {
13488
- xRatio: def.x / window.innerWidth,
13489
- yRatio: def.y / window.innerHeight
13490
- };
13491
- }
13492
- const setBarPos = useCallback36((next) => {
13493
- setBarPosState(next);
13494
- persistBarPos(next);
13495
- barPosRatioRef.current = {
13496
- xRatio: next.x / window.innerWidth,
13497
- yRatio: next.y / window.innerHeight
13498
- };
13735
+ const [barPos, setBarPosState] = useState41(() => readSavedBarPos());
13736
+ const barPosRatioRef = useRef45(barPos === null ? null : barPosRatio(barPos));
13737
+ const setBarPos = useCallback36((next, widthPx) => {
13738
+ const placed = clampBarPos(next, widthPx);
13739
+ setBarPosState(placed);
13740
+ persistBarPos(placed);
13741
+ barPosRatioRef.current = barPosRatio(placed);
13499
13742
  }, []);
13500
- const [savedLauncherDock, setSavedLauncherDock] = useState40(() => readSavedDock("launcher"));
13743
+ const [savedLauncherDock, setSavedLauncherDock] = useState41(() => readSavedDock("launcher"));
13501
13744
  const setLauncherDock = useCallback36((next) => {
13502
13745
  setSavedLauncherDock(next);
13503
13746
  persistDock("launcher", next);
@@ -13507,7 +13750,7 @@ function LiveAgent(props) {
13507
13750
  edge: launcherEdge,
13508
13751
  offsetPx: defaultOffset(launcherEdge)
13509
13752
  };
13510
- useEffect49(() => {
13753
+ useEffect50(() => {
13511
13754
  const syncToViewport = () => {
13512
13755
  const next = hasDraggedRef.current ? clampLauncherBottom(launcherBottomPxRef.current) : verticalAlignToBottomPx(verticalAlignRef.current);
13513
13756
  setLauncherBottomPxState(next);
@@ -13517,15 +13760,14 @@ function LiveAgent(props) {
13517
13760
  window.addEventListener("resize", syncToViewport);
13518
13761
  return () => window.removeEventListener("resize", syncToViewport);
13519
13762
  }, []);
13520
- useEffect49(() => {
13763
+ useEffect50(() => {
13521
13764
  const syncBarToViewport = () => {
13522
13765
  const ratios = barPosRatioRef.current;
13523
- if (!ratios)
13524
- return;
13525
- setBarPosState(clampBarPos({
13766
+ const measured = voiceBarRef.current?.getBoundingClientRect().width;
13767
+ setBarPosState(ratios === null ? defaultBarPos() : clampBarPos({
13526
13768
  x: ratios.xRatio * window.innerWidth,
13527
13769
  y: ratios.yRatio * window.innerHeight
13528
- }));
13770
+ }, measured || VOICE_BAR_WIDTH_PX));
13529
13771
  };
13530
13772
  window.addEventListener("resize", syncBarToViewport);
13531
13773
  return () => window.removeEventListener("resize", syncBarToViewport);
@@ -13601,7 +13843,7 @@ function LiveAgent(props) {
13601
13843
  bearerToken,
13602
13844
  selectModule
13603
13845
  });
13604
- useEffect49(() => {
13846
+ useEffect50(() => {
13605
13847
  if (!autoStartAfterLogin)
13606
13848
  return;
13607
13849
  if (bearerToken === null || !hasResolvedModules || isSessionLive)
@@ -13634,7 +13876,7 @@ function LiveAgent(props) {
13634
13876
  phases: idleHistoryPhases,
13635
13877
  isLoading: isLoadingHistory
13636
13878
  }), [idleHistoryMessages, idleHistoryPhases, isLoadingHistory]);
13637
- const [pageSplashDismissed, setPageSplashDismissed] = useState40(false);
13879
+ const [pageSplashDismissed, setPageSplashDismissed] = useState41(false);
13638
13880
  const dismissSplash = useCallback36((surface) => {
13639
13881
  if (surface !== SPLASH_SURFACE.Panel) {
13640
13882
  setPageSplashDismissed(true);
@@ -13672,7 +13914,7 @@ function LiveAgent(props) {
13672
13914
  isSplashVisible: splashSurfaces.overlay || splashSurfaces.panel || splashSurfaces.applies && !pageSplashDismissed,
13673
13915
  isSessionLive
13674
13916
  });
13675
- useEffect49(() => {
13917
+ useEffect50(() => {
13676
13918
  const open = () => {
13677
13919
  reopenSplash();
13678
13920
  if (configuredSplashSurfaces.overlay)
@@ -13694,6 +13936,7 @@ function LiveAgent(props) {
13694
13936
  isDisconnecting,
13695
13937
  isPausing,
13696
13938
  error,
13939
+ errorSeq,
13697
13940
  errorCode,
13698
13941
  startSession,
13699
13942
  pauseSession: pauseSessionAndMinimize,
@@ -13741,6 +13984,7 @@ function LiveAgent(props) {
13741
13984
  isAuthenticated,
13742
13985
  usesHostAuth,
13743
13986
  authFailed,
13987
+ locale,
13744
13988
  isValidating: auth.isValidating,
13745
13989
  authError: auth.error,
13746
13990
  requestOtp: auth.requestOtp,
@@ -13797,6 +14041,7 @@ function LiveAgent(props) {
13797
14041
  isDisconnecting,
13798
14042
  isPausing,
13799
14043
  error,
14044
+ errorSeq,
13800
14045
  errorCode,
13801
14046
  startSession,
13802
14047
  pauseSessionAndMinimize,
@@ -13838,6 +14083,7 @@ function LiveAgent(props) {
13838
14083
  isAuthenticated,
13839
14084
  usesHostAuth,
13840
14085
  authFailed,
14086
+ locale,
13841
14087
  auth.isValidating,
13842
14088
  auth.error,
13843
14089
  auth.requestOtp,
@@ -13975,7 +14221,7 @@ function LiveAgent(props) {
13975
14221
  });
13976
14222
  }
13977
14223
  // src/components/SplashScreen.tsx
13978
- import { useContext as useContext28, useEffect as useEffect50, useRef as useRef46 } from "react";
14224
+ import { useContext as useContext28, useEffect as useEffect51, useRef as useRef46 } from "react";
13979
14225
  import { jsx as jsx57 } from "react/jsx-runtime";
13980
14226
  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.";
13981
14227
  function SplashScreen({ className, onDismiss }) {
@@ -13986,7 +14232,7 @@ function SplashScreen({ className, onDismiss }) {
13986
14232
  const disabledWarnedRef = useRef46(false);
13987
14233
  const hasResolvedModules = ctx.hasResolvedModules;
13988
14234
  const isSplashConfigured = ctx.isSplashConfigured;
13989
- useEffect50(() => {
14235
+ useEffect51(() => {
13990
14236
  if (!hasResolvedModules || isSplashConfigured || disabledWarnedRef.current)
13991
14237
  return;
13992
14238
  disabledWarnedRef.current = true;