@skippr/live-agent-sdk 0.115.0 → 0.116.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 useEffect50, useMemo as useMemo10, useRef as useRef45, useState as useState41 } from "react";
11
+ import { Fragment as Fragment8, useCallback as useCallback36, useEffect as useEffect51, useMemo as useMemo12, useRef as useRef46, useState as useState42 } 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 useEffect10, useRef as useRef10, useState as useState8 } from "react";
365
+ import { useCallback as useCallback8, useContext as useContext4, useEffect as useEffect10, useRef as useRef10, useState as useState8 } from "react";
366
366
 
367
367
  // src/capture/widgetAnchor.ts
368
368
  var anchor = null;
@@ -612,7 +612,6 @@ function toConsentParts(template) {
612
612
  }
613
613
  function ConsentNotice({ className, template }) {
614
614
  return /* @__PURE__ */ jsx("p", {
615
- lang: "en",
616
615
  className: cn("skippr:text-[11px] skippr:leading-[1.2] skippr:text-muted-foreground skippr:text-center", className),
617
616
  children: toConsentParts(template).map((part) => typeof part === "string" ? part : /* @__PURE__ */ jsx("a", {
618
617
  href: part.href,
@@ -645,12 +644,1008 @@ function ConsentBubble({
645
644
  }
646
645
 
647
646
  // src/components/VoiceBarLoginCard.tsx
648
- import { useContext as useContext2 } from "react";
647
+ import { useContext as useContext3 } from "react";
649
648
 
650
649
  // src/context/LiveAgentContext.tsx
651
650
  import { createContext as createContext2 } from "react";
652
651
  var LiveAgentContext = createContext2(null);
653
652
 
653
+ // src/hooks/useChromeCopy.ts
654
+ import { useContext as useContext2 } from "react";
655
+
656
+ // src/lib/localeCopy.ts
657
+ var TRANSLATED_LOCALES = new Set(["fr", "de", "it", "es", "pt-PT", "pt-BR"]);
658
+ function matchTranslatedLocale(tag) {
659
+ if (!tag)
660
+ return;
661
+ const [language, region] = tag.trim().split("-");
662
+ if (!language)
663
+ return;
664
+ const bare = language.toLowerCase();
665
+ const exact = region ? `${bare}-${region.toUpperCase()}` : bare;
666
+ if (TRANSLATED_LOCALES.has(exact))
667
+ return exact;
668
+ if (TRANSLATED_LOCALES.has(bare))
669
+ return bare;
670
+ return bare === "pt" ? "pt-PT" : undefined;
671
+ }
672
+ function createLocaleCopyResolver(defaults, translations) {
673
+ return (tag) => {
674
+ const locale = matchTranslatedLocale(tag);
675
+ return locale ? translations[locale] : defaults;
676
+ };
677
+ }
678
+ function fillPlaceholders(template, values) {
679
+ return Object.entries(values).reduce((filled, [name, value]) => filled.replaceAll(`{${name}}`, String(value)), template);
680
+ }
681
+ function splitOnPlaceholder(template, name) {
682
+ const [before, after] = template.split(`{${name}}`);
683
+ return [before ?? "", after ?? ""];
684
+ }
685
+
686
+ // src/lib/chromeCopy.ts
687
+ var CHROME_COPY_DEFAULTS = {
688
+ agendaTitle: "Agenda",
689
+ agendaLoading: "Waiting for agenda to load...",
690
+ agendaProgress: "step {step} of {total}",
691
+ agendaProgressLabel: "Agenda progress",
692
+ agendaNowBadge: "now",
693
+ micHoldToTalk: "Hold to talk",
694
+ micReleaseToSend: "Release to send",
695
+ micTapToTalk: "Tap to talk",
696
+ micTapToSend: "Tap to send",
697
+ micShortcutHint: "Hold the {key} tilde / backquote key to talk",
698
+ voiceBarThinking: "thinking…",
699
+ voiceBarTalking: "talking…",
700
+ voiceBarListening: "listening…",
701
+ voiceBarPushToTalk: "push to talk",
702
+ voiceBarTapToTalk: "tap to talk",
703
+ voiceBarWorking: "working…",
704
+ voiceBarNoActivity: "No activity — closing…",
705
+ voiceBarLoading: "Agent is loading",
706
+ voiceBarShortcutTalk: "talk",
707
+ voiceBarShortcutEnd: "end",
708
+ voiceBarTalkToAgent: "Talk to AI Agent",
709
+ openChatLabel: "Open chat",
710
+ closeChatLabel: "Close chat",
711
+ openAgentLabel: "Open Agent",
712
+ showNotificationsLabel: "Show notifications",
713
+ askLabel: "Ask Me Anything",
714
+ wakeLabel: "Wake buddy",
715
+ dismissLabel: "Dismiss",
716
+ loading: "Loading...",
717
+ endingSession: "Ending session...",
718
+ loadingConversation: "Loading conversation...",
719
+ statusStandingBy: "Standing by",
720
+ statusObserving: "Skippr is observing",
721
+ statusConnected: "Skippr is connected",
722
+ statusTalking: "Skippr is talking",
723
+ statusThinking: "Skippr is thinking",
724
+ statusPaused: "Session paused",
725
+ statusAriaStandingBy: "Skippr is standing by — click to open",
726
+ statusAriaPaused: "Session paused — click to open",
727
+ statusAriaClickToOpenChat: "{status} — click to open chat",
728
+ closeLabel: "Close",
729
+ muteLabel: "Mute",
730
+ unmuteLabel: "Unmute",
731
+ resumeLabel: "Resume",
732
+ stopLabel: "Stop",
733
+ pauseLabel: "Pause",
734
+ endSessionLabel: "End session",
735
+ shareScreenLabel: "Share screen",
736
+ stopSharingScreenLabel: "Stop sharing screen",
737
+ stopActionsLabel: "Stop actions",
738
+ chatMessagePlaceholder: "Type a message…",
739
+ chatMessageLabel: "Message",
740
+ chatSendMessageLabel: "Send message",
741
+ chatSendLabel: "Send",
742
+ chatEmptyConversation: "No messages in this conversation yet.",
743
+ chatWaitingToBegin: "Waiting for conversation to begin...",
744
+ chatJumpToLatest: "Jump to latest message",
745
+ chatSwitchToVoice: "Switch to voice",
746
+ chatSwitchToText: "Switch to text",
747
+ chatToggleVoice: "voice",
748
+ chatToggleText: "text",
749
+ chatPanelLabel: "Panel",
750
+ chatAnalyzingScreen: "Agent is analyzing your screen",
751
+ cardDismissLink: "Dismiss link",
752
+ cardCopyLink: "Copy link",
753
+ cardCopied: "Copied",
754
+ cardDismissPlan: "Dismiss plan",
755
+ cardDismissSignIn: "Dismiss sign in",
756
+ controlBarIdle: "Idle",
757
+ controlBarListening: "Listening",
758
+ controlBarThinking: "Thinking",
759
+ controlBarTalking: "Talking",
760
+ controlBarWorking: "Working",
761
+ controlBarStandingBy: "Standing by…",
762
+ controlBarAriaActing: "Agent is acting",
763
+ controlBarAriaIdle: "Agent is idle",
764
+ controlBarAriaListening: "Agent is listening",
765
+ controlBarAriaThinking: "Agent is thinking",
766
+ controlBarAriaTalking: "Agent is speaking",
767
+ controlBarAriaState: "Agent is {state}",
768
+ controlBarOpenAgenda: "Open agenda",
769
+ controlBarClosePanel: "Close panel",
770
+ pausedClosingIn: "Agent closes in",
771
+ pausedClosingInAria: "Agent closes in {seconds} seconds",
772
+ loginTitle: "Sign in to continue",
773
+ loginSubtitle: "Your email will be used to identify you across sessions",
774
+ loginEmailLabel: "Email",
775
+ loginEmailPlaceholder: "you@example.com",
776
+ loginContinue: "Continue",
777
+ loginOtpTitle: "Enter verification code",
778
+ loginOtpSubtitle: "We sent a 6-digit code to {email}",
779
+ loginOtpDigitLabel: "Verification code digit {index}",
780
+ loginVerify: "Verify",
781
+ loginChangeEmail: "Change email",
782
+ loginResendCode: "Resend code",
783
+ loginResendCooldown: "Resend in {seconds}s",
784
+ loginConsent: `By continuing, you agree to the ${CONSENT_TERMS_PLACEHOLDER} and ${CONSENT_PRIVACY_PLACEHOLDER}`,
785
+ actionClicking: "Clicking…",
786
+ actionTyping: "Typing…",
787
+ actionSelecting: "Selecting…",
788
+ actionScrolling: "Scrolling…",
789
+ actionHovering: "Hovering…",
790
+ highlightDefaultLabel: "Click here",
791
+ planTitle: "Plan",
792
+ planApprove: "Approve",
793
+ planApproving: "Approving…",
794
+ planCancel: "Cancel",
795
+ voiceBarPlanIntro: "Here's my plan",
796
+ voiceBarPlanStepsHint: "{count} steps · review and approve to run",
797
+ voiceBarPlanApprove: "approve plan",
798
+ voiceBarPlanApproving: "approving…",
799
+ voiceBarPlanCancel: "cancel",
800
+ voiceBarPlanApproved: "approved",
801
+ cardOpenLink: "Open",
802
+ voiceBarCardOpen: "open",
803
+ voiceBarCardCopy: "copy",
804
+ voiceBarCardCopied: "copied",
805
+ chatTabChat: "chat",
806
+ chatTabAgenda: "agenda",
807
+ chatPanelTitle: "Skippr AI",
808
+ voiceBarSignInTitle: "Sign in",
809
+ voiceBarTextMode: "Text mode",
810
+ sessionEndingSoon: "Session ending soon",
811
+ controlBarTranscriptListening: "Listening…",
812
+ tipStartLabel: "Start",
813
+ tipNextLabel: "Next",
814
+ voiceBarTipStart: "start",
815
+ buddyWakeGreeting: "oh hey!",
816
+ buddyHoldHint: "hold me down to talk",
817
+ buddyAutoOffNotice: "no activity — closing…",
818
+ attributionPrefix: "Powered by",
819
+ consentSessionStart: CONSENT_NOTICE_SESSION_START,
820
+ consentContinuing: CONSENT_NOTICE_CONTINUING,
821
+ consentAgentSessionStart: CONSENT_NOTICE_AGENT_SESSION_START
822
+ };
823
+ var CHROME_COPY_TRANSLATIONS = {
824
+ fr: {
825
+ agendaTitle: "Programme",
826
+ agendaLoading: "En attente du programme...",
827
+ agendaProgress: "étape {step} sur {total}",
828
+ agendaProgressLabel: "Progression du programme",
829
+ agendaNowBadge: "en cours",
830
+ micHoldToTalk: "Maintenir pour parler",
831
+ micReleaseToSend: "Relâcher pour envoyer",
832
+ micTapToTalk: "Appuyer pour parler",
833
+ micTapToSend: "Appuyer pour envoyer",
834
+ micShortcutHint: "Maintenez {key} tilde / accent grave pour parler",
835
+ voiceBarThinking: "réflexion…",
836
+ voiceBarTalking: "parle…",
837
+ voiceBarListening: "écoute…",
838
+ voiceBarPushToTalk: "maintenir pour parler",
839
+ voiceBarTapToTalk: "appuyer pour parler",
840
+ voiceBarWorking: "en cours…",
841
+ voiceBarNoActivity: "Aucune activité — fermeture…",
842
+ voiceBarLoading: "Chargement",
843
+ voiceBarShortcutTalk: "parler",
844
+ voiceBarShortcutEnd: "fin",
845
+ voiceBarTalkToAgent: "Parler à l'IA",
846
+ openChatLabel: "Ouvrir le chat",
847
+ closeChatLabel: "Fermer le chat",
848
+ openAgentLabel: "Ouvrir l'agent",
849
+ showNotificationsLabel: "Afficher les notifications",
850
+ askLabel: "Posez-moi vos questions",
851
+ wakeLabel: "Réveiller Buddy",
852
+ dismissLabel: "Ignorer",
853
+ loading: "Chargement...",
854
+ endingSession: "Fin de la session...",
855
+ loadingConversation: "Chargement de la conversation...",
856
+ statusStandingBy: "En attente",
857
+ statusObserving: "Skippr observe",
858
+ statusConnected: "Skippr est connecté",
859
+ statusTalking: "Skippr parle",
860
+ statusThinking: "Skippr réfléchit",
861
+ statusPaused: "Session en pause",
862
+ statusAriaStandingBy: "Skippr est en attente — cliquez pour ouvrir",
863
+ statusAriaPaused: "Session en pause — cliquez pour ouvrir",
864
+ statusAriaClickToOpenChat: "{status} — cliquez pour ouvrir le chat",
865
+ closeLabel: "Fermer",
866
+ muteLabel: "Couper le micro",
867
+ unmuteLabel: "Activer le micro",
868
+ resumeLabel: "Reprendre",
869
+ stopLabel: "Arrêter",
870
+ pauseLabel: "Pause",
871
+ endSessionLabel: "Terminer la session",
872
+ shareScreenLabel: "Partager l'écran",
873
+ stopSharingScreenLabel: "Arrêter le partage",
874
+ stopActionsLabel: "Arrêter les actions",
875
+ chatMessagePlaceholder: "Écrivez un message…",
876
+ chatMessageLabel: "Message",
877
+ chatSendMessageLabel: "Envoyer le message",
878
+ chatSendLabel: "Envoyer",
879
+ chatEmptyConversation: "Aucun message dans cette conversation.",
880
+ chatWaitingToBegin: "En attente du début de la conversation...",
881
+ chatJumpToLatest: "Aller au dernier message",
882
+ chatSwitchToVoice: "Passer en mode vocal",
883
+ chatSwitchToText: "Passer en mode texte",
884
+ chatToggleVoice: "voix",
885
+ chatToggleText: "texte",
886
+ chatPanelLabel: "Panneau",
887
+ chatAnalyzingScreen: "L'agent analyse votre écran",
888
+ cardDismissLink: "Ignorer le lien",
889
+ cardCopyLink: "Copier le lien",
890
+ cardCopied: "Copié",
891
+ cardDismissPlan: "Ignorer le plan",
892
+ cardDismissSignIn: "Ignorer la connexion",
893
+ controlBarIdle: "Inactif",
894
+ controlBarListening: "Écoute",
895
+ controlBarThinking: "Réflexion",
896
+ controlBarTalking: "Parle",
897
+ controlBarWorking: "En cours",
898
+ controlBarStandingBy: "En attente…",
899
+ controlBarAriaActing: "L'agent agit",
900
+ controlBarAriaIdle: "L'agent est inactif",
901
+ controlBarAriaListening: "L'agent écoute",
902
+ controlBarAriaThinking: "L'agent réfléchit",
903
+ controlBarAriaTalking: "L'agent parle",
904
+ controlBarAriaState: "L'agent est {state}",
905
+ controlBarOpenAgenda: "Ouvrir le programme",
906
+ controlBarClosePanel: "Fermer le panneau",
907
+ pausedClosingIn: "Fermeture dans",
908
+ pausedClosingInAria: "L'agent se ferme dans {seconds} secondes",
909
+ loginTitle: "Connectez-vous pour continuer",
910
+ loginSubtitle: "Votre e-mail servira à vous identifier d'une session à l'autre",
911
+ loginEmailLabel: "E-mail",
912
+ loginEmailPlaceholder: "nom@exemple.com",
913
+ loginContinue: "Continuer",
914
+ loginOtpTitle: "Saisissez le code de vérification",
915
+ loginOtpSubtitle: "Nous avons envoyé un code à 6 chiffres à {email}",
916
+ loginOtpDigitLabel: "Chiffre {index} du code de vérification",
917
+ loginVerify: "Vérifier",
918
+ loginChangeEmail: "Changer d'e-mail",
919
+ loginResendCode: "Renvoyer le code",
920
+ loginResendCooldown: "Renvoyer dans {seconds} s",
921
+ loginConsent: "En continuant, vous acceptez {terms} et {privacy}",
922
+ actionClicking: "Clic…",
923
+ actionTyping: "Saisie…",
924
+ actionSelecting: "Sélection…",
925
+ actionScrolling: "Défilement…",
926
+ actionHovering: "Survol…",
927
+ highlightDefaultLabel: "Cliquez ici",
928
+ planTitle: "Plan",
929
+ planApprove: "Valider",
930
+ planApproving: "En cours…",
931
+ planCancel: "Annuler",
932
+ voiceBarPlanIntro: "Voici mon plan",
933
+ voiceBarPlanStepsHint: "{count} étapes · vérifiez et approuvez",
934
+ voiceBarPlanApprove: "valider",
935
+ voiceBarPlanApproving: "en cours…",
936
+ voiceBarPlanCancel: "annuler",
937
+ voiceBarPlanApproved: "approuvé",
938
+ cardOpenLink: "Ouvrir",
939
+ voiceBarCardOpen: "ouvrir",
940
+ voiceBarCardCopy: "copier",
941
+ voiceBarCardCopied: "copié",
942
+ chatTabChat: "chat",
943
+ chatTabAgenda: "agenda",
944
+ chatPanelTitle: "Skippr IA",
945
+ voiceBarSignInTitle: "Connexion",
946
+ voiceBarTextMode: "Mode texte",
947
+ sessionEndingSoon: "Fin de session proche",
948
+ controlBarTranscriptListening: "Écoute…",
949
+ tipStartLabel: "Démarrer",
950
+ tipNextLabel: "Suivant",
951
+ voiceBarTipStart: "lancer",
952
+ buddyWakeGreeting: "salut !",
953
+ buddyHoldHint: "maintenez pour parler",
954
+ buddyAutoOffNotice: "inactif — fermeture…",
955
+ attributionPrefix: "Propulsé par",
956
+ consentSessionStart: "En démarrant, vous acceptez les {terms} & {privacy} de Skippr",
957
+ consentContinuing: "En continuant, vous acceptez {terms} & {privacy}",
958
+ consentAgentSessionStart: "En démarrant la session IA, vous acceptez les {terms} & {privacy} de Skippr"
959
+ },
960
+ de: {
961
+ agendaTitle: "Agenda",
962
+ agendaLoading: "Agenda wird geladen...",
963
+ agendaProgress: "Schritt {step} von {total}",
964
+ agendaProgressLabel: "Agenda-Fortschritt",
965
+ agendaNowBadge: "jetzt",
966
+ micHoldToTalk: "Halten zum Sprechen",
967
+ micReleaseToSend: "Loslassen zum Senden",
968
+ micTapToTalk: "Tippen zum Sprechen",
969
+ micTapToSend: "Tippen zum Senden",
970
+ micShortcutHint: "Halten Sie {key} Tilde/Backquote zum Sprechen",
971
+ voiceBarThinking: "denkt…",
972
+ voiceBarTalking: "spricht…",
973
+ voiceBarListening: "hört zu…",
974
+ voiceBarPushToTalk: "halten zum sprechen",
975
+ voiceBarTapToTalk: "tippen zum sprechen",
976
+ voiceBarWorking: "arbeitet…",
977
+ voiceBarNoActivity: "Keine Aktivität — schließt…",
978
+ voiceBarLoading: "Agent lädt",
979
+ voiceBarShortcutTalk: "sprechen",
980
+ voiceBarShortcutEnd: "Ende",
981
+ voiceBarTalkToAgent: "Mit KI sprechen",
982
+ openChatLabel: "Chat öffnen",
983
+ closeChatLabel: "Chat schließen",
984
+ openAgentLabel: "Agent öffnen",
985
+ showNotificationsLabel: "Benachrichtigungen anzeigen",
986
+ askLabel: "Fragen Sie mich",
987
+ wakeLabel: "Buddy wecken",
988
+ dismissLabel: "Schließen",
989
+ loading: "Laden...",
990
+ endingSession: "Sitzung wird beendet...",
991
+ loadingConversation: "Unterhaltung wird geladen...",
992
+ statusStandingBy: "Bereit",
993
+ statusObserving: "Skippr beobachtet",
994
+ statusConnected: "Skippr ist verbunden",
995
+ statusTalking: "Skippr spricht",
996
+ statusThinking: "Skippr denkt",
997
+ statusPaused: "Sitzung pausiert",
998
+ statusAriaStandingBy: "Skippr ist bereit — zum Öffnen klicken",
999
+ statusAriaPaused: "Sitzung pausiert — zum Öffnen klicken",
1000
+ statusAriaClickToOpenChat: "{status} — zum Öffnen des Chats klicken",
1001
+ closeLabel: "Schließen",
1002
+ muteLabel: "Stummschalten",
1003
+ unmuteLabel: "Stummschaltung aufheben",
1004
+ resumeLabel: "Fortsetzen",
1005
+ stopLabel: "Stoppen",
1006
+ pauseLabel: "Pause",
1007
+ endSessionLabel: "Sitzung beenden",
1008
+ shareScreenLabel: "Bildschirm teilen",
1009
+ stopSharingScreenLabel: "Teilen beenden",
1010
+ stopActionsLabel: "Aktionen stoppen",
1011
+ chatMessagePlaceholder: "Nachricht schreiben…",
1012
+ chatMessageLabel: "Nachricht",
1013
+ chatSendMessageLabel: "Nachricht senden",
1014
+ chatSendLabel: "Senden",
1015
+ chatEmptyConversation: "Noch keine Nachrichten in dieser Unterhaltung.",
1016
+ chatWaitingToBegin: "Warten auf den Beginn der Unterhaltung...",
1017
+ chatJumpToLatest: "Zur neuesten Nachricht springen",
1018
+ chatSwitchToVoice: "Zu Sprache wechseln",
1019
+ chatSwitchToText: "Zu Text wechseln",
1020
+ chatToggleVoice: "sprache",
1021
+ chatToggleText: "text",
1022
+ chatPanelLabel: "Panel",
1023
+ chatAnalyzingScreen: "Agent analysiert Ihren Bildschirm",
1024
+ cardDismissLink: "Link ausblenden",
1025
+ cardCopyLink: "Link kopieren",
1026
+ cardCopied: "Kopiert",
1027
+ cardDismissPlan: "Plan ausblenden",
1028
+ cardDismissSignIn: "Anmeldung ausblenden",
1029
+ controlBarIdle: "Inaktiv",
1030
+ controlBarListening: "Hört zu",
1031
+ controlBarThinking: "Denkt",
1032
+ controlBarTalking: "Spricht",
1033
+ controlBarWorking: "Arbeitet",
1034
+ controlBarStandingBy: "Bereit…",
1035
+ controlBarAriaActing: "Agent handelt",
1036
+ controlBarAriaIdle: "Agent ist inaktiv",
1037
+ controlBarAriaListening: "Agent hört zu",
1038
+ controlBarAriaThinking: "Agent denkt",
1039
+ controlBarAriaTalking: "Agent spricht",
1040
+ controlBarAriaState: "Agent ist {state}",
1041
+ controlBarOpenAgenda: "Agenda öffnen",
1042
+ controlBarClosePanel: "Panel schließen",
1043
+ pausedClosingIn: "Agent schließt in",
1044
+ pausedClosingInAria: "Agent schließt in {seconds} Sekunden",
1045
+ loginTitle: "Zum Fortfahren anmelden",
1046
+ loginSubtitle: "Ihre E-Mail-Adresse dient zur Identifikation über Sitzungen hinweg",
1047
+ loginEmailLabel: "E-Mail",
1048
+ loginEmailPlaceholder: "name@beispiel.de",
1049
+ loginContinue: "Weiter",
1050
+ loginOtpTitle: "Bestätigungscode eingeben",
1051
+ loginOtpSubtitle: "Wir haben einen 6-stelligen Code an {email} gesendet",
1052
+ loginOtpDigitLabel: "Bestätigungscode Ziffer {index}",
1053
+ loginVerify: "Bestätigen",
1054
+ loginChangeEmail: "E-Mail ändern",
1055
+ loginResendCode: "Erneut senden",
1056
+ loginResendCooldown: "Erneut in {seconds} s",
1057
+ loginConsent: "Wenn Sie fortfahren, akzeptieren Sie {terms} und {privacy}",
1058
+ actionClicking: "Klickt…",
1059
+ actionTyping: "Tippt…",
1060
+ actionSelecting: "Wählt…",
1061
+ actionScrolling: "Scrollt…",
1062
+ actionHovering: "Zeigt…",
1063
+ highlightDefaultLabel: "Hier klicken",
1064
+ planTitle: "Plan",
1065
+ planApprove: "Freigeben",
1066
+ planApproving: "Läuft…",
1067
+ planCancel: "Abbrechen",
1068
+ voiceBarPlanIntro: "Mein Plan",
1069
+ voiceBarPlanStepsHint: "{count} Schritte · prüfen und freigeben",
1070
+ voiceBarPlanApprove: "freigeben",
1071
+ voiceBarPlanApproving: "läuft…",
1072
+ voiceBarPlanCancel: "abbrechen",
1073
+ voiceBarPlanApproved: "genehmigt",
1074
+ cardOpenLink: "Öffnen",
1075
+ voiceBarCardOpen: "öffnen",
1076
+ voiceBarCardCopy: "kopieren",
1077
+ voiceBarCardCopied: "kopiert",
1078
+ chatTabChat: "chat",
1079
+ chatTabAgenda: "agenda",
1080
+ chatPanelTitle: "Skippr KI",
1081
+ voiceBarSignInTitle: "Anmelden",
1082
+ voiceBarTextMode: "Textmodus",
1083
+ sessionEndingSoon: "Sitzung endet bald",
1084
+ controlBarTranscriptListening: "Hört zu…",
1085
+ tipStartLabel: "Starten",
1086
+ tipNextLabel: "Weiter",
1087
+ voiceBarTipStart: "starten",
1088
+ buddyWakeGreeting: "oh hallo!",
1089
+ buddyHoldHint: "zum Sprechen halten",
1090
+ buddyAutoOffNotice: "inaktiv — schließt…",
1091
+ attributionPrefix: "Betrieben von",
1092
+ consentSessionStart: "Mit dem Start akzeptieren Sie Skipprs {terms} & {privacy}",
1093
+ consentContinuing: "Beim Fortfahren akzeptieren Sie {terms} & {privacy}",
1094
+ consentAgentSessionStart: "Mit dem Start der KI-Sitzung akzeptieren Sie Skipprs {terms} & {privacy}"
1095
+ },
1096
+ it: {
1097
+ agendaTitle: "Programma",
1098
+ agendaLoading: "In attesa del programma...",
1099
+ agendaProgress: "passo {step} di {total}",
1100
+ agendaProgressLabel: "Avanzamento del programma",
1101
+ agendaNowBadge: "ora",
1102
+ micHoldToTalk: "Tieni per parlare",
1103
+ micReleaseToSend: "Rilascia per inviare",
1104
+ micTapToTalk: "Tocca per parlare",
1105
+ micTapToSend: "Tocca per inviare",
1106
+ micShortcutHint: "Tieni {key} tilde / backquote per parlare",
1107
+ voiceBarThinking: "pensando…",
1108
+ voiceBarTalking: "parlando…",
1109
+ voiceBarListening: "in ascolto…",
1110
+ voiceBarPushToTalk: "tieni per parlare",
1111
+ voiceBarTapToTalk: "tocca per parlare",
1112
+ voiceBarWorking: "al lavoro…",
1113
+ voiceBarNoActivity: "Nessuna attività — chiusura…",
1114
+ voiceBarLoading: "Caricamento",
1115
+ voiceBarShortcutTalk: "parla",
1116
+ voiceBarShortcutEnd: "fine",
1117
+ voiceBarTalkToAgent: "Parla con l'IA",
1118
+ openChatLabel: "Apri la chat",
1119
+ closeChatLabel: "Chiudi la chat",
1120
+ openAgentLabel: "Apri l'agente",
1121
+ showNotificationsLabel: "Mostra le notifiche",
1122
+ askLabel: "Chiedimi qualsiasi cosa",
1123
+ wakeLabel: "Attiva Buddy",
1124
+ dismissLabel: "Ignora",
1125
+ loading: "Caricamento...",
1126
+ endingSession: "Chiusura della sessione...",
1127
+ loadingConversation: "Caricamento della conversazione...",
1128
+ statusStandingBy: "In attesa",
1129
+ statusObserving: "Skippr osserva",
1130
+ statusConnected: "Skippr è connesso",
1131
+ statusTalking: "Skippr parla",
1132
+ statusThinking: "Skippr pensa",
1133
+ statusPaused: "Sessione in pausa",
1134
+ statusAriaStandingBy: "Skippr è in attesa — clicca per aprire",
1135
+ statusAriaPaused: "Sessione in pausa — clicca per aprire",
1136
+ statusAriaClickToOpenChat: "{status} — clicca per aprire la chat",
1137
+ closeLabel: "Chiudi",
1138
+ muteLabel: "Disattiva il microfono",
1139
+ unmuteLabel: "Attiva il microfono",
1140
+ resumeLabel: "Riprendi",
1141
+ stopLabel: "Ferma",
1142
+ pauseLabel: "Pausa",
1143
+ endSessionLabel: "Termina la sessione",
1144
+ shareScreenLabel: "Condividi lo schermo",
1145
+ stopSharingScreenLabel: "Interrompi la condivisione",
1146
+ stopActionsLabel: "Ferma le azioni",
1147
+ chatMessagePlaceholder: "Scrivi un messaggio…",
1148
+ chatMessageLabel: "Messaggio",
1149
+ chatSendMessageLabel: "Invia il messaggio",
1150
+ chatSendLabel: "Invia",
1151
+ chatEmptyConversation: "Nessun messaggio in questa conversazione.",
1152
+ chatWaitingToBegin: "In attesa dell'inizio della conversazione...",
1153
+ chatJumpToLatest: "Vai al messaggio più recente",
1154
+ chatSwitchToVoice: "Passa alla voce",
1155
+ chatSwitchToText: "Passa al testo",
1156
+ chatToggleVoice: "voce",
1157
+ chatToggleText: "testo",
1158
+ chatPanelLabel: "Pannello",
1159
+ chatAnalyzingScreen: "L'agente analizza il tuo schermo",
1160
+ cardDismissLink: "Ignora il link",
1161
+ cardCopyLink: "Copia link",
1162
+ cardCopied: "Copiato",
1163
+ cardDismissPlan: "Ignora il piano",
1164
+ cardDismissSignIn: "Ignora l'accesso",
1165
+ controlBarIdle: "Inattivo",
1166
+ controlBarListening: "In ascolto",
1167
+ controlBarThinking: "Sta pensando",
1168
+ controlBarTalking: "Sta parlando",
1169
+ controlBarWorking: "Al lavoro",
1170
+ controlBarStandingBy: "In attesa…",
1171
+ controlBarAriaActing: "L'agente sta agendo",
1172
+ controlBarAriaIdle: "L'agente è inattivo",
1173
+ controlBarAriaListening: "L'agente è in ascolto",
1174
+ controlBarAriaThinking: "L'agente sta pensando",
1175
+ controlBarAriaTalking: "L'agente sta parlando",
1176
+ controlBarAriaState: "L'agente è {state}",
1177
+ controlBarOpenAgenda: "Apri il programma",
1178
+ controlBarClosePanel: "Chiudi il pannello",
1179
+ pausedClosingIn: "L'agente si chiude tra",
1180
+ pausedClosingInAria: "L'agente si chiude tra {seconds} secondi",
1181
+ loginTitle: "Accedi per continuare",
1182
+ loginSubtitle: "La tua e-mail servirà a identificarti nelle varie sessioni",
1183
+ loginEmailLabel: "E-mail",
1184
+ loginEmailPlaceholder: "nome@esempio.com",
1185
+ loginContinue: "Continua",
1186
+ loginOtpTitle: "Inserisci il codice di verifica",
1187
+ loginOtpSubtitle: "Abbiamo inviato un codice di 6 cifre a {email}",
1188
+ loginOtpDigitLabel: "Cifra {index} del codice di verifica",
1189
+ loginVerify: "Verifica",
1190
+ loginChangeEmail: "Cambia e-mail",
1191
+ loginResendCode: "Rinvia codice",
1192
+ loginResendCooldown: "Rinvia tra {seconds} s",
1193
+ loginConsent: "Continuando, accetti {terms} e {privacy}",
1194
+ actionClicking: "Clic…",
1195
+ actionTyping: "Digita…",
1196
+ actionSelecting: "Seleziona…",
1197
+ actionScrolling: "Scorre…",
1198
+ actionHovering: "Punta…",
1199
+ highlightDefaultLabel: "Clicca qui",
1200
+ planTitle: "Piano",
1201
+ planApprove: "Approva",
1202
+ planApproving: "Approvo…",
1203
+ planCancel: "Annulla",
1204
+ voiceBarPlanIntro: "Ecco il piano",
1205
+ voiceBarPlanStepsHint: "{count} passaggi · rivedi e approva",
1206
+ voiceBarPlanApprove: "approva",
1207
+ voiceBarPlanApproving: "approvo…",
1208
+ voiceBarPlanCancel: "annulla",
1209
+ voiceBarPlanApproved: "approvato",
1210
+ cardOpenLink: "Apri",
1211
+ voiceBarCardOpen: "apri",
1212
+ voiceBarCardCopy: "copia",
1213
+ voiceBarCardCopied: "copiato",
1214
+ chatTabChat: "chat",
1215
+ chatTabAgenda: "agenda",
1216
+ chatPanelTitle: "Skippr IA",
1217
+ voiceBarSignInTitle: "Accedi",
1218
+ voiceBarTextMode: "Modo testo",
1219
+ sessionEndingSoon: "Sessione quasi finita",
1220
+ controlBarTranscriptListening: "In ascolto…",
1221
+ tipStartLabel: "Avvia",
1222
+ tipNextLabel: "Avanti",
1223
+ voiceBarTipStart: "avvia",
1224
+ buddyWakeGreeting: "oh ciao!",
1225
+ buddyHoldHint: "tieni per parlare",
1226
+ buddyAutoOffNotice: "inattivo — chiudo…",
1227
+ attributionPrefix: "Offerto da",
1228
+ consentSessionStart: "Avviando una sessione, accetti {terms} & {privacy} di Skippr",
1229
+ consentContinuing: "Continuando, accetti {terms} & {privacy}",
1230
+ consentAgentSessionStart: "Avviando la sessione IA, accetti {terms} & {privacy} di Skippr"
1231
+ },
1232
+ es: {
1233
+ agendaTitle: "Agenda",
1234
+ agendaLoading: "Esperando la agenda...",
1235
+ agendaProgress: "paso {step} de {total}",
1236
+ agendaProgressLabel: "Progreso de la agenda",
1237
+ agendaNowBadge: "ahora",
1238
+ micHoldToTalk: "Mantén para hablar",
1239
+ micReleaseToSend: "Suelta para enviar",
1240
+ micTapToTalk: "Toca para hablar",
1241
+ micTapToSend: "Toca para enviar",
1242
+ micShortcutHint: "Mantén {key} tilde / acento grave para hablar",
1243
+ voiceBarThinking: "pensando…",
1244
+ voiceBarTalking: "hablando…",
1245
+ voiceBarListening: "escuchando…",
1246
+ voiceBarPushToTalk: "mantén para hablar",
1247
+ voiceBarTapToTalk: "toca para hablar",
1248
+ voiceBarWorking: "trabajando…",
1249
+ voiceBarNoActivity: "Sin actividad — cerrando…",
1250
+ voiceBarLoading: "Cargando",
1251
+ voiceBarShortcutTalk: "hablar",
1252
+ voiceBarShortcutEnd: "fin",
1253
+ voiceBarTalkToAgent: "Hablar con la IA",
1254
+ openChatLabel: "Abrir el chat",
1255
+ closeChatLabel: "Cerrar el chat",
1256
+ openAgentLabel: "Abrir el agente",
1257
+ showNotificationsLabel: "Mostrar las notificaciones",
1258
+ askLabel: "Pregúntame lo que sea",
1259
+ wakeLabel: "Despertar a Buddy",
1260
+ dismissLabel: "Descartar",
1261
+ loading: "Cargando...",
1262
+ endingSession: "Finalizando la sesión...",
1263
+ loadingConversation: "Cargando la conversación...",
1264
+ statusStandingBy: "En espera",
1265
+ statusObserving: "Skippr observa",
1266
+ statusConnected: "Skippr está conectado",
1267
+ statusTalking: "Skippr habla",
1268
+ statusThinking: "Skippr piensa",
1269
+ statusPaused: "Sesión en pausa",
1270
+ statusAriaStandingBy: "Skippr está en espera — haz clic para abrir",
1271
+ statusAriaPaused: "Sesión en pausa — haz clic para abrir",
1272
+ statusAriaClickToOpenChat: "{status} — haz clic para abrir el chat",
1273
+ closeLabel: "Cerrar",
1274
+ muteLabel: "Silenciar el micrófono",
1275
+ unmuteLabel: "Activar el micrófono",
1276
+ resumeLabel: "Reanudar",
1277
+ stopLabel: "Detener",
1278
+ pauseLabel: "Pausa",
1279
+ endSessionLabel: "Finalizar la sesión",
1280
+ shareScreenLabel: "Compartir la pantalla",
1281
+ stopSharingScreenLabel: "Dejar de compartir",
1282
+ stopActionsLabel: "Detener las acciones",
1283
+ chatMessagePlaceholder: "Escribe un mensaje…",
1284
+ chatMessageLabel: "Mensaje",
1285
+ chatSendMessageLabel: "Enviar el mensaje",
1286
+ chatSendLabel: "Enviar",
1287
+ chatEmptyConversation: "Todavía no hay mensajes en esta conversación.",
1288
+ chatWaitingToBegin: "Esperando el inicio de la conversación...",
1289
+ chatJumpToLatest: "Ir al último mensaje",
1290
+ chatSwitchToVoice: "Cambiar a voz",
1291
+ chatSwitchToText: "Cambiar a texto",
1292
+ chatToggleVoice: "voz",
1293
+ chatToggleText: "texto",
1294
+ chatPanelLabel: "Panel",
1295
+ chatAnalyzingScreen: "El agente analiza tu pantalla",
1296
+ cardDismissLink: "Descartar el enlace",
1297
+ cardCopyLink: "Copiar enlace",
1298
+ cardCopied: "Copiado",
1299
+ cardDismissPlan: "Descartar el plan",
1300
+ cardDismissSignIn: "Descartar el inicio de sesión",
1301
+ controlBarIdle: "Inactivo",
1302
+ controlBarListening: "Escuchando",
1303
+ controlBarThinking: "Pensando",
1304
+ controlBarTalking: "Hablando",
1305
+ controlBarWorking: "Trabajando",
1306
+ controlBarStandingBy: "En espera…",
1307
+ controlBarAriaActing: "El agente está actuando",
1308
+ controlBarAriaIdle: "El agente está inactivo",
1309
+ controlBarAriaListening: "El agente está escuchando",
1310
+ controlBarAriaThinking: "El agente está pensando",
1311
+ controlBarAriaTalking: "El agente está hablando",
1312
+ controlBarAriaState: "El agente está {state}",
1313
+ controlBarOpenAgenda: "Abrir la agenda",
1314
+ controlBarClosePanel: "Cerrar el panel",
1315
+ pausedClosingIn: "El agente se cierra en",
1316
+ pausedClosingInAria: "El agente se cierra en {seconds} segundos",
1317
+ loginTitle: "Inicia sesión para continuar",
1318
+ loginSubtitle: "Tu correo electrónico servirá para identificarte entre sesiones",
1319
+ loginEmailLabel: "Correo electrónico",
1320
+ loginEmailPlaceholder: "nombre@ejemplo.com",
1321
+ loginContinue: "Continuar",
1322
+ loginOtpTitle: "Introduce el código de verificación",
1323
+ loginOtpSubtitle: "Hemos enviado un código de 6 dígitos a {email}",
1324
+ loginOtpDigitLabel: "Dígito {index} del código de verificación",
1325
+ loginVerify: "Verificar",
1326
+ loginChangeEmail: "Cambiar correo",
1327
+ loginResendCode: "Reenviar código",
1328
+ loginResendCooldown: "Reenviar en {seconds} s",
1329
+ loginConsent: "Al continuar, aceptas {terms} y {privacy}",
1330
+ actionClicking: "Clic…",
1331
+ actionTyping: "Escribe…",
1332
+ actionSelecting: "Selecciona…",
1333
+ actionScrolling: "Desplaza…",
1334
+ actionHovering: "Apunta…",
1335
+ highlightDefaultLabel: "Clic aquí",
1336
+ planTitle: "Plan",
1337
+ planApprove: "Aprobar",
1338
+ planApproving: "En curso…",
1339
+ planCancel: "Cancelar",
1340
+ voiceBarPlanIntro: "Este es mi plan",
1341
+ voiceBarPlanStepsHint: "{count} pasos · revisa y aprueba",
1342
+ voiceBarPlanApprove: "aprobar",
1343
+ voiceBarPlanApproving: "en curso…",
1344
+ voiceBarPlanCancel: "cancelar",
1345
+ voiceBarPlanApproved: "aprobado",
1346
+ cardOpenLink: "Abrir",
1347
+ voiceBarCardOpen: "abrir",
1348
+ voiceBarCardCopy: "copiar",
1349
+ voiceBarCardCopied: "copiado",
1350
+ chatTabChat: "chat",
1351
+ chatTabAgenda: "agenda",
1352
+ chatPanelTitle: "Skippr IA",
1353
+ voiceBarSignInTitle: "Acceder",
1354
+ voiceBarTextMode: "Modo texto",
1355
+ sessionEndingSoon: "Sesión por terminar",
1356
+ controlBarTranscriptListening: "Escuchando…",
1357
+ tipStartLabel: "Iniciar",
1358
+ tipNextLabel: "Siguiente",
1359
+ voiceBarTipStart: "iniciar",
1360
+ buddyWakeGreeting: "¡hola!",
1361
+ buddyHoldHint: "mantén para hablar",
1362
+ buddyAutoOffNotice: "inactivo — cerrando…",
1363
+ attributionPrefix: "Con tecnología de",
1364
+ consentSessionStart: "Al iniciar una sesión, aceptas {terms} & {privacy} de Skippr",
1365
+ consentContinuing: "Al continuar, aceptas {terms} & {privacy}",
1366
+ consentAgentSessionStart: "Al iniciar la sesión de IA, aceptas {terms} & {privacy} de Skippr"
1367
+ },
1368
+ "pt-PT": {
1369
+ agendaTitle: "Agenda",
1370
+ agendaLoading: "À espera da agenda...",
1371
+ agendaProgress: "passo {step} de {total}",
1372
+ agendaProgressLabel: "Progresso da agenda",
1373
+ agendaNowBadge: "agora",
1374
+ micHoldToTalk: "Manter para falar",
1375
+ micReleaseToSend: "Largar para enviar",
1376
+ micTapToTalk: "Tocar para falar",
1377
+ micTapToSend: "Tocar para enviar",
1378
+ micShortcutHint: "Mantenha {key} tilde / acento grave para falar",
1379
+ voiceBarThinking: "a pensar…",
1380
+ voiceBarTalking: "a falar…",
1381
+ voiceBarListening: "a ouvir…",
1382
+ voiceBarPushToTalk: "manter para falar",
1383
+ voiceBarTapToTalk: "tocar para falar",
1384
+ voiceBarWorking: "a trabalhar…",
1385
+ voiceBarNoActivity: "Sem atividade — a fechar…",
1386
+ voiceBarLoading: "A carregar",
1387
+ voiceBarShortcutTalk: "falar",
1388
+ voiceBarShortcutEnd: "fim",
1389
+ voiceBarTalkToAgent: "Falar com a IA",
1390
+ openChatLabel: "Abrir o chat",
1391
+ closeChatLabel: "Fechar o chat",
1392
+ openAgentLabel: "Abrir o agente",
1393
+ showNotificationsLabel: "Mostrar as notificações",
1394
+ askLabel: "Pergunte-me o que quiser",
1395
+ wakeLabel: "Acordar o Buddy",
1396
+ dismissLabel: "Ignorar",
1397
+ loading: "A carregar...",
1398
+ endingSession: "A terminar a sessão...",
1399
+ loadingConversation: "A carregar a conversa...",
1400
+ statusStandingBy: "Em espera",
1401
+ statusObserving: "O Skippr observa",
1402
+ statusConnected: "O Skippr está ligado",
1403
+ statusTalking: "O Skippr fala",
1404
+ statusThinking: "O Skippr pensa",
1405
+ statusPaused: "Sessão em pausa",
1406
+ statusAriaStandingBy: "O Skippr está em espera — clique para abrir",
1407
+ statusAriaPaused: "Sessão em pausa — clique para abrir",
1408
+ statusAriaClickToOpenChat: "{status} — clique para abrir o chat",
1409
+ closeLabel: "Fechar",
1410
+ muteLabel: "Desativar o microfone",
1411
+ unmuteLabel: "Ativar o microfone",
1412
+ resumeLabel: "Retomar",
1413
+ stopLabel: "Parar",
1414
+ pauseLabel: "Pausa",
1415
+ endSessionLabel: "Terminar a sessão",
1416
+ shareScreenLabel: "Partilhar o ecrã",
1417
+ stopSharingScreenLabel: "Parar a partilha",
1418
+ stopActionsLabel: "Parar as ações",
1419
+ chatMessagePlaceholder: "Escreva uma mensagem…",
1420
+ chatMessageLabel: "Mensagem",
1421
+ chatSendMessageLabel: "Enviar a mensagem",
1422
+ chatSendLabel: "Enviar",
1423
+ chatEmptyConversation: "Ainda não há mensagens nesta conversa.",
1424
+ chatWaitingToBegin: "À espera do início da conversa...",
1425
+ chatJumpToLatest: "Ir para a mensagem mais recente",
1426
+ chatSwitchToVoice: "Mudar para voz",
1427
+ chatSwitchToText: "Mudar para texto",
1428
+ chatToggleVoice: "voz",
1429
+ chatToggleText: "texto",
1430
+ chatPanelLabel: "Painel",
1431
+ chatAnalyzingScreen: "O agente analisa o seu ecrã",
1432
+ cardDismissLink: "Ignorar a ligação",
1433
+ cardCopyLink: "Copiar ligação",
1434
+ cardCopied: "Copiado",
1435
+ cardDismissPlan: "Ignorar o plano",
1436
+ cardDismissSignIn: "Ignorar a autenticação",
1437
+ controlBarIdle: "Inativo",
1438
+ controlBarListening: "A ouvir",
1439
+ controlBarThinking: "A pensar",
1440
+ controlBarTalking: "A falar",
1441
+ controlBarWorking: "A trabalhar",
1442
+ controlBarStandingBy: "Em espera…",
1443
+ controlBarAriaActing: "O agente está a agir",
1444
+ controlBarAriaIdle: "O agente está inativo",
1445
+ controlBarAriaListening: "O agente está a ouvir",
1446
+ controlBarAriaThinking: "O agente está a pensar",
1447
+ controlBarAriaTalking: "O agente está a falar",
1448
+ controlBarAriaState: "O agente está {state}",
1449
+ controlBarOpenAgenda: "Abrir a agenda",
1450
+ controlBarClosePanel: "Fechar o painel",
1451
+ pausedClosingIn: "O agente fecha em",
1452
+ pausedClosingInAria: "O agente fecha em {seconds} segundos",
1453
+ loginTitle: "Inicie sessão para continuar",
1454
+ loginSubtitle: "O seu e-mail será usado para o identificar entre sessões",
1455
+ loginEmailLabel: "E-mail",
1456
+ loginEmailPlaceholder: "nome@exemplo.com",
1457
+ loginContinue: "Continuar",
1458
+ loginOtpTitle: "Introduza o código de verificação",
1459
+ loginOtpSubtitle: "Enviámos um código de 6 dígitos para {email}",
1460
+ loginOtpDigitLabel: "Dígito {index} do código de verificação",
1461
+ loginVerify: "Verificar",
1462
+ loginChangeEmail: "Alterar e-mail",
1463
+ loginResendCode: "Reenviar código",
1464
+ loginResendCooldown: "Reenviar em {seconds} s",
1465
+ loginConsent: "Ao continuar, aceita {terms} e {privacy}",
1466
+ actionClicking: "Clica…",
1467
+ actionTyping: "Escreve…",
1468
+ actionSelecting: "Seleciona…",
1469
+ actionScrolling: "Desloca…",
1470
+ actionHovering: "Aponta…",
1471
+ highlightDefaultLabel: "Clique aqui",
1472
+ planTitle: "Plano",
1473
+ planApprove: "Aprovar",
1474
+ planApproving: "Em curso…",
1475
+ planCancel: "Cancelar",
1476
+ voiceBarPlanIntro: "Este é o plano",
1477
+ voiceBarPlanStepsHint: "{count} passos · reveja e aprove",
1478
+ voiceBarPlanApprove: "aprovar",
1479
+ voiceBarPlanApproving: "em curso…",
1480
+ voiceBarPlanCancel: "cancelar",
1481
+ voiceBarPlanApproved: "aprovado",
1482
+ cardOpenLink: "Abrir",
1483
+ voiceBarCardOpen: "abrir",
1484
+ voiceBarCardCopy: "copiar",
1485
+ voiceBarCardCopied: "copiado",
1486
+ chatTabChat: "chat",
1487
+ chatTabAgenda: "agenda",
1488
+ chatPanelTitle: "Skippr IA",
1489
+ voiceBarSignInTitle: "Entrar",
1490
+ voiceBarTextMode: "Modo texto",
1491
+ sessionEndingSoon: "Sessão a terminar",
1492
+ controlBarTranscriptListening: "A ouvir…",
1493
+ tipStartLabel: "Iniciar",
1494
+ tipNextLabel: "Seguinte",
1495
+ voiceBarTipStart: "iniciar",
1496
+ buddyWakeGreeting: "oh, olá!",
1497
+ buddyHoldHint: "mantenha para falar",
1498
+ buddyAutoOffNotice: "inativo — a fechar…",
1499
+ attributionPrefix: "Fornecido por",
1500
+ consentSessionStart: "Ao iniciar uma sessão, aceita {terms} & {privacy} da Skippr",
1501
+ consentContinuing: "Ao continuar, aceita {terms} & {privacy}",
1502
+ consentAgentSessionStart: "Ao iniciar a sessão de IA, aceita {terms} & {privacy} da Skippr"
1503
+ },
1504
+ "pt-BR": {
1505
+ agendaTitle: "Agenda",
1506
+ agendaLoading: "Aguardando a agenda...",
1507
+ agendaProgress: "etapa {step} de {total}",
1508
+ agendaProgressLabel: "Progresso da agenda",
1509
+ agendaNowBadge: "agora",
1510
+ micHoldToTalk: "Segure para falar",
1511
+ micReleaseToSend: "Solte para enviar",
1512
+ micTapToTalk: "Toque para falar",
1513
+ micTapToSend: "Toque para enviar",
1514
+ micShortcutHint: "Mantenha {key} til / acento grave para falar",
1515
+ voiceBarThinking: "pensando…",
1516
+ voiceBarTalking: "falando…",
1517
+ voiceBarListening: "ouvindo…",
1518
+ voiceBarPushToTalk: "segure para falar",
1519
+ voiceBarTapToTalk: "toque para falar",
1520
+ voiceBarWorking: "trabalhando…",
1521
+ voiceBarNoActivity: "Sem atividade — encerrando…",
1522
+ voiceBarLoading: "Carregando",
1523
+ voiceBarShortcutTalk: "falar",
1524
+ voiceBarShortcutEnd: "fim",
1525
+ voiceBarTalkToAgent: "Falar com a IA",
1526
+ openChatLabel: "Abrir o chat",
1527
+ closeChatLabel: "Fechar o chat",
1528
+ openAgentLabel: "Abrir o agente",
1529
+ showNotificationsLabel: "Mostrar as notificações",
1530
+ askLabel: "Pergunte-me qualquer coisa",
1531
+ wakeLabel: "Acordar o Buddy",
1532
+ dismissLabel: "Dispensar",
1533
+ loading: "Carregando...",
1534
+ endingSession: "Encerrando a sessão...",
1535
+ loadingConversation: "Carregando a conversa...",
1536
+ statusStandingBy: "Em espera",
1537
+ statusObserving: "O Skippr observa",
1538
+ statusConnected: "O Skippr está conectado",
1539
+ statusTalking: "O Skippr fala",
1540
+ statusThinking: "O Skippr pensa",
1541
+ statusPaused: "Sessão pausada",
1542
+ statusAriaStandingBy: "O Skippr está em espera — clique para abrir",
1543
+ statusAriaPaused: "Sessão pausada — clique para abrir",
1544
+ statusAriaClickToOpenChat: "{status} — clique para abrir o chat",
1545
+ closeLabel: "Fechar",
1546
+ muteLabel: "Desativar o microfone",
1547
+ unmuteLabel: "Ativar o microfone",
1548
+ resumeLabel: "Retomar",
1549
+ stopLabel: "Parar",
1550
+ pauseLabel: "Pausar",
1551
+ endSessionLabel: "Encerrar a sessão",
1552
+ shareScreenLabel: "Compartilhar a tela",
1553
+ stopSharingScreenLabel: "Parar o compartilhamento",
1554
+ stopActionsLabel: "Parar as ações",
1555
+ chatMessagePlaceholder: "Escreva uma mensagem…",
1556
+ chatMessageLabel: "Mensagem",
1557
+ chatSendMessageLabel: "Enviar a mensagem",
1558
+ chatSendLabel: "Enviar",
1559
+ chatEmptyConversation: "Ainda não há mensagens nesta conversa.",
1560
+ chatWaitingToBegin: "Aguardando o início da conversa...",
1561
+ chatJumpToLatest: "Ir para a mensagem mais recente",
1562
+ chatSwitchToVoice: "Mudar para voz",
1563
+ chatSwitchToText: "Mudar para texto",
1564
+ chatToggleVoice: "voz",
1565
+ chatToggleText: "texto",
1566
+ chatPanelLabel: "Painel",
1567
+ chatAnalyzingScreen: "O agente analisa a sua tela",
1568
+ cardDismissLink: "Dispensar o link",
1569
+ cardCopyLink: "Copiar link",
1570
+ cardCopied: "Copiado",
1571
+ cardDismissPlan: "Dispensar o plano",
1572
+ cardDismissSignIn: "Dispensar o login",
1573
+ controlBarIdle: "Inativo",
1574
+ controlBarListening: "Ouvindo",
1575
+ controlBarThinking: "Pensando",
1576
+ controlBarTalking: "Falando",
1577
+ controlBarWorking: "Trabalhando",
1578
+ controlBarStandingBy: "Em espera…",
1579
+ controlBarAriaActing: "O agente está agindo",
1580
+ controlBarAriaIdle: "O agente está inativo",
1581
+ controlBarAriaListening: "O agente está ouvindo",
1582
+ controlBarAriaThinking: "O agente está pensando",
1583
+ controlBarAriaTalking: "O agente está falando",
1584
+ controlBarAriaState: "O agente está {state}",
1585
+ controlBarOpenAgenda: "Abrir a agenda",
1586
+ controlBarClosePanel: "Fechar o painel",
1587
+ pausedClosingIn: "O agente encerra em",
1588
+ pausedClosingInAria: "O agente encerra em {seconds} segundos",
1589
+ loginTitle: "Faça login para continuar",
1590
+ loginSubtitle: "Seu e-mail será usado para identificar você entre sessões",
1591
+ loginEmailLabel: "E-mail",
1592
+ loginEmailPlaceholder: "nome@exemplo.com",
1593
+ loginContinue: "Continuar",
1594
+ loginOtpTitle: "Digite o código de verificação",
1595
+ loginOtpSubtitle: "Enviamos um código de 6 dígitos para {email}",
1596
+ loginOtpDigitLabel: "Dígito {index} do código de verificação",
1597
+ loginVerify: "Verificar",
1598
+ loginChangeEmail: "Alterar e-mail",
1599
+ loginResendCode: "Reenviar código",
1600
+ loginResendCooldown: "Reenviar em {seconds} s",
1601
+ loginConsent: "Ao continuar, você aceita {terms} e {privacy}",
1602
+ actionClicking: "Clica…",
1603
+ actionTyping: "Digita…",
1604
+ actionSelecting: "Seleciona…",
1605
+ actionScrolling: "Rola…",
1606
+ actionHovering: "Aponta…",
1607
+ highlightDefaultLabel: "Clique aqui",
1608
+ planTitle: "Plano",
1609
+ planApprove: "Aprovar",
1610
+ planApproving: "Em curso…",
1611
+ planCancel: "Cancelar",
1612
+ voiceBarPlanIntro: "Este é o plano",
1613
+ voiceBarPlanStepsHint: "{count} etapas · revise e aprove",
1614
+ voiceBarPlanApprove: "aprovar",
1615
+ voiceBarPlanApproving: "em curso…",
1616
+ voiceBarPlanCancel: "cancelar",
1617
+ voiceBarPlanApproved: "aprovado",
1618
+ cardOpenLink: "Abrir",
1619
+ voiceBarCardOpen: "abrir",
1620
+ voiceBarCardCopy: "copiar",
1621
+ voiceBarCardCopied: "copiado",
1622
+ chatTabChat: "chat",
1623
+ chatTabAgenda: "agenda",
1624
+ chatPanelTitle: "Skippr IA",
1625
+ voiceBarSignInTitle: "Entrar",
1626
+ voiceBarTextMode: "Modo texto",
1627
+ sessionEndingSoon: "Sessão terminando",
1628
+ controlBarTranscriptListening: "Ouvindo…",
1629
+ tipStartLabel: "Iniciar",
1630
+ tipNextLabel: "Próximo",
1631
+ voiceBarTipStart: "iniciar",
1632
+ buddyWakeGreeting: "oh, olá!",
1633
+ buddyHoldHint: "segure para falar",
1634
+ buddyAutoOffNotice: "inativo — fechando…",
1635
+ attributionPrefix: "Com tecnologia de",
1636
+ consentSessionStart: "Ao iniciar uma sessão, você aceita {terms} & {privacy} da Skippr",
1637
+ consentContinuing: "Ao continuar, você aceita {terms} & {privacy}",
1638
+ consentAgentSessionStart: "Ao iniciar a sessão de IA, você aceita {terms} & {privacy} da Skippr"
1639
+ }
1640
+ };
1641
+ var resolveChromeCopy = createLocaleCopyResolver(CHROME_COPY_DEFAULTS, CHROME_COPY_TRANSLATIONS);
1642
+
1643
+ // src/hooks/useChromeCopy.ts
1644
+ function useChromeCopy() {
1645
+ const ctx = useContext2(LiveAgentContext);
1646
+ return resolveChromeCopy(ctx?.locale);
1647
+ }
1648
+
654
1649
  // src/components/LoginFlow.tsx
655
1650
  import { useCallback, useEffect, useRef, useState } from "react";
656
1651
 
@@ -723,6 +1718,9 @@ function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
723
1718
  });
724
1719
  }
725
1720
  function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
1721
+ const copy = useChromeCopy();
1722
+ const [consentBeforeTerms, consentAfterTerms] = splitOnPlaceholder(copy.loginConsent, "terms");
1723
+ const [consentBetweenLinks, consentAfterPrivacy] = splitOnPlaceholder(consentAfterTerms, "privacy");
726
1724
  function handleSubmit(e) {
727
1725
  e.preventDefault();
728
1726
  if (email.trim())
@@ -739,11 +1737,11 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
739
1737
  }),
740
1738
  /* @__PURE__ */ jsx4("p", {
741
1739
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
742
- children: "Sign in to continue"
1740
+ children: copy.loginTitle
743
1741
  }),
744
1742
  /* @__PURE__ */ jsx4("p", {
745
1743
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
746
- children: "Your email will be used to identify you across sessions"
1744
+ children: copy.loginSubtitle
747
1745
  })
748
1746
  ]
749
1747
  }),
@@ -753,8 +1751,8 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
753
1751
  children: [
754
1752
  /* @__PURE__ */ jsx4("input", {
755
1753
  type: "email",
756
- "aria-label": "Email",
757
- placeholder: "you@example.com",
1754
+ "aria-label": copy.loginEmailLabel,
1755
+ placeholder: copy.loginEmailPlaceholder,
758
1756
  value: email,
759
1757
  onChange: (e) => onEmailChange(e.target.value),
760
1758
  disabled: isSubmitting,
@@ -767,7 +1765,7 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
767
1765
  className: "skippr:w-full",
768
1766
  children: isSubmitting ? /* @__PURE__ */ jsx4(LoaderCircle, {
769
1767
  className: "skippr:size-4 skippr:animate-spin"
770
- }) : "Continue"
1768
+ }) : copy.loginContinue
771
1769
  }),
772
1770
  error && /* @__PURE__ */ jsx4("p", {
773
1771
  role: "alert",
@@ -777,8 +1775,7 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
777
1775
  /* @__PURE__ */ jsxs("p", {
778
1776
  className: "skippr:text-[11px] skippr:leading-relaxed skippr:text-muted-foreground skippr:text-center",
779
1777
  children: [
780
- "By continuing, you agree to the",
781
- " ",
1778
+ consentBeforeTerms,
782
1779
  /* @__PURE__ */ jsx4("a", {
783
1780
  href: "https://www.skippr.ai/terms",
784
1781
  target: "_blank",
@@ -786,16 +1783,15 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
786
1783
  className: "skippr:underline skippr:underline-offset-2 skippr:hover:text-foreground",
787
1784
  children: "Terms of Service"
788
1785
  }),
789
- " ",
790
- "and",
791
- " ",
1786
+ consentBetweenLinks,
792
1787
  /* @__PURE__ */ jsx4("a", {
793
1788
  href: "https://www.skippr.ai/privacy",
794
1789
  target: "_blank",
795
1790
  rel: "noopener noreferrer",
796
1791
  className: "skippr:underline skippr:underline-offset-2 skippr:hover:text-foreground",
797
1792
  children: "Privacy Policy"
798
- })
1793
+ }),
1794
+ consentAfterPrivacy
799
1795
  ]
800
1796
  })
801
1797
  ]
@@ -804,6 +1800,8 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
804
1800
  });
805
1801
  }
806
1802
  function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
1803
+ const copy = useChromeCopy();
1804
+ const [otpSubtitleBefore, otpSubtitleAfter] = splitOnPlaceholder(copy.loginOtpSubtitle, "email");
807
1805
  const [digits, setDigits] = useState(Array(OTP_LENGTH).fill(""));
808
1806
  const [resendCooldown, setResendCooldown] = useState(0);
809
1807
  const inputRefs = useRef([]);
@@ -882,17 +1880,17 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
882
1880
  children: [
883
1881
  /* @__PURE__ */ jsx4("p", {
884
1882
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
885
- children: "Enter verification code"
1883
+ children: copy.loginOtpTitle
886
1884
  }),
887
1885
  /* @__PURE__ */ jsxs("p", {
888
1886
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
889
1887
  children: [
890
- "We sent a 6-digit code to",
891
- " ",
1888
+ otpSubtitleBefore,
892
1889
  /* @__PURE__ */ jsx4("span", {
893
1890
  className: "skippr:font-medium skippr:text-foreground",
894
1891
  children: email
895
- })
1892
+ }),
1893
+ otpSubtitleAfter
896
1894
  ]
897
1895
  })
898
1896
  ]
@@ -908,7 +1906,7 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
908
1906
  inputRefs.current[index2] = el;
909
1907
  },
910
1908
  type: "text",
911
- "aria-label": `Verification code digit ${index2 + 1}`,
1909
+ "aria-label": fillPlaceholders(copy.loginOtpDigitLabel, { index: index2 + 1 }),
912
1910
  inputMode: "numeric",
913
1911
  maxLength: 1,
914
1912
  value: digit,
@@ -930,7 +1928,7 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
930
1928
  className: "skippr:w-full",
931
1929
  children: isSubmitting ? /* @__PURE__ */ jsx4(LoaderCircle, {
932
1930
  className: "skippr:size-4 skippr:animate-spin"
933
- }) : "Verify"
1931
+ }) : copy.loginVerify
934
1932
  }),
935
1933
  /* @__PURE__ */ jsxs("div", {
936
1934
  className: "skippr:flex skippr:items-center skippr:justify-between skippr:text-xs",
@@ -940,14 +1938,14 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
940
1938
  onClick: onBack,
941
1939
  disabled: isSubmitting,
942
1940
  className: "skippr:text-muted-foreground skippr:hover:text-foreground skippr:transition-colors skippr:disabled:opacity-50",
943
- children: "Change email"
1941
+ children: copy.loginChangeEmail
944
1942
  }),
945
1943
  /* @__PURE__ */ jsx4("button", {
946
1944
  type: "button",
947
1945
  onClick: handleResend,
948
1946
  disabled: isSubmitting || resendCooldown > 0,
949
1947
  className: "skippr:text-primary skippr:hover:opacity-80 skippr:transition-opacity skippr:disabled:opacity-50",
950
- children: resendCooldown > 0 ? `Resend in ${resendCooldown}s` : "Resend code"
1948
+ children: resendCooldown > 0 ? fillPlaceholders(copy.loginResendCooldown, { seconds: resendCooldown }) : copy.loginResendCode
951
1949
  })
952
1950
  ]
953
1951
  })
@@ -960,7 +1958,8 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
960
1958
  // src/components/VoiceBarLoginCard.tsx
961
1959
  import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
962
1960
  function VoiceBarLoginCard({ onDismiss }) {
963
- const ctx = useContext2(LiveAgentContext);
1961
+ const copy = useChromeCopy();
1962
+ const ctx = useContext3(LiveAgentContext);
964
1963
  if (!ctx) {
965
1964
  throw new Error("VoiceBarLoginCard must be used within a <LiveAgent> provider");
966
1965
  }
@@ -973,12 +1972,12 @@ function VoiceBarLoginCard({ onDismiss }) {
973
1972
  children: [
974
1973
  /* @__PURE__ */ jsx5("span", {
975
1974
  className: "skippr:text-[11px] skippr:font-semibold skippr:tracking-[-0.01em] skippr:text-[#2D2D3F]",
976
- children: "Sign in"
1975
+ children: copy.voiceBarSignInTitle
977
1976
  }),
978
1977
  /* @__PURE__ */ jsx5("button", {
979
1978
  type: "button",
980
1979
  onClick: onDismiss,
981
- "aria-label": "Dismiss sign in",
1980
+ "aria-label": copy.cardDismissSignIn,
982
1981
  className: "skippr:flex skippr:size-[20px] skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:text-[#b8b4ac] skippr:transition-colors skippr:hover:bg-[#f2f0eb] skippr:hover:text-[#2D2D3F]",
983
1982
  children: /* @__PURE__ */ jsx5(X, {
984
1983
  className: "skippr:size-[12px]",
@@ -1333,17 +2332,7 @@ var ERROR_COPY_TRANSLATIONS = {
1333
2332
  authFailedHint: "Entre em contato com o administrador."
1334
2333
  }
1335
2334
  };
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
- }
2335
+ var copyForLocale = createLocaleCopyResolver(ERROR_COPY_DEFAULTS, ERROR_COPY_TRANSLATIONS);
1347
2336
  function resolveAuthFailedCopy(locale) {
1348
2337
  const copy = copyForLocale(locale);
1349
2338
  return { title: copy.authFailedTitle, hint: copy.authFailedHint };
@@ -2963,13 +3952,13 @@ var FOCUS_RING = {
2963
3952
  outlineOffset: "3px",
2964
3953
  borderRadius: "9999px"
2965
3954
  };
2966
- function stateTip(state, isCapturingSpeech) {
3955
+ function stateTip(state, isCapturingSpeech, copy) {
2967
3956
  if (state === "speaking")
2968
- return "talking…";
3957
+ return copy.voiceBarTalking;
2969
3958
  if (state === "thinking")
2970
- return "thinking…";
3959
+ return copy.voiceBarThinking;
2971
3960
  if (isCapturingSpeech)
2972
- return "listening…";
3961
+ return copy.voiceBarListening;
2973
3962
  return null;
2974
3963
  }
2975
3964
  function edgeWrapperStyle(pos) {
@@ -3039,7 +4028,7 @@ function BuddyLoadingDots() {
3039
4028
  });
3040
4029
  }
3041
4030
  function BuddyVoiceBar({ revealed }) {
3042
- const ctx = useContext3(LiveAgentContext);
4031
+ const ctx = useContext4(LiveAgentContext);
3043
4032
  if (!ctx) {
3044
4033
  throw new Error("BuddyVoiceBar must be used within a <LiveAgent> provider");
3045
4034
  }
@@ -3062,6 +4051,7 @@ function BuddyVoiceBar({ revealed }) {
3062
4051
  locale
3063
4052
  } = ctx;
3064
4053
  const needsLogin = !usesHostAuth && !isAuthenticated;
4054
+ const copy = useChromeCopy();
3065
4055
  const transientError = useTransientError(error, errorSeq);
3066
4056
  const authFailedCopy = authFailed ? resolveAuthFailedCopy(locale) : null;
3067
4057
  const [loginOpen, setLoginOpen] = useState8(false);
@@ -3219,7 +4209,7 @@ function BuddyVoiceBar({ revealed }) {
3219
4209
  return null;
3220
4210
  const isStandingBy = isStarting && !isConnected;
3221
4211
  const isTalking = isSpeaking || showWakeBubble || isStarting;
3222
- const tip = stateTip(state, voiceTurn.isCapturingSpeech);
4212
+ const tip = stateTip(state, voiceTurn.isCapturingSpeech, copy);
3223
4213
  const activeWrapperStyle = {
3224
4214
  position: "fixed",
3225
4215
  left: pos.x,
@@ -3239,7 +4229,7 @@ function BuddyVoiceBar({ revealed }) {
3239
4229
  /* @__PURE__ */ jsx14("button", {
3240
4230
  type: "button",
3241
4231
  onPointerDown: holdToTalk,
3242
- "aria-label": "Hold to talk",
4232
+ "aria-label": copy.micHoldToTalk,
3243
4233
  "aria-pressed": voiceTurn.isCapturingSpeech,
3244
4234
  onFocus: (event) => setKeyboardFocus(event.target.matches(":focus-visible")),
3245
4235
  onBlur: () => setKeyboardFocus(false),
@@ -3270,8 +4260,8 @@ function BuddyVoiceBar({ revealed }) {
3270
4260
  onClick: () => void disconnect(),
3271
4261
  disabled: isDisconnecting,
3272
4262
  "aria-busy": isDisconnecting,
3273
- "aria-label": "Close buddy session",
3274
- title: "Close",
4263
+ "aria-label": copy.closeLabel,
4264
+ title: copy.closeLabel,
3275
4265
  className: `skippr:absolute skippr:-right-1 skippr:-top-1 skippr:flex skippr:h-6 skippr:w-6 skippr:items-center skippr:justify-center skippr:rounded-full skippr:text-[#5c5850] ${isDisconnecting ? "skippr:cursor-default" : "skippr:cursor-pointer skippr:bg-white/80 skippr:shadow-[0_2px_6px_rgba(45,45,63,0.14)] skippr:hover:text-[#2D2D3F]"}`,
3276
4266
  children: /* @__PURE__ */ jsxs10("span", {
3277
4267
  className: "skippr:relative skippr:flex skippr:size-5 skippr:items-center skippr:justify-center",
@@ -3316,14 +4306,14 @@ function BuddyVoiceBar({ revealed }) {
3316
4306
  role: "status",
3317
4307
  children: [
3318
4308
  /* @__PURE__ */ jsx14("span", {
3319
- children: "oh hey!"
4309
+ children: copy.buddyWakeGreeting
3320
4310
  }),
3321
4311
  isStandingBy && /* @__PURE__ */ jsx14(BuddyLoadingDots, {})
3322
4312
  ]
3323
4313
  }) : autoOffNotice ? /* @__PURE__ */ jsx14("div", {
3324
4314
  className: "skippr:absolute skippr:-top-6 skippr:left-1/2 skippr:-translate-x-1/2 skippr:whitespace-nowrap skippr:text-[10.5px] skippr:font-medium skippr:text-[#8b877f]",
3325
4315
  role: "status",
3326
- children: "no activity — closing…"
4316
+ children: copy.buddyAutoOffNotice
3327
4317
  }) : tip ? /* @__PURE__ */ jsx14("div", {
3328
4318
  className: "skippr:absolute skippr:-top-8 skippr:left-1/2 skippr:-translate-x-1/2 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)]",
3329
4319
  role: "status",
@@ -3331,7 +4321,7 @@ function BuddyVoiceBar({ revealed }) {
3331
4321
  }) : !holdHintSeen && !isTalking && /* @__PURE__ */ jsx14("div", {
3332
4322
  className: "skippr:absolute skippr:-top-8 skippr:left-1/2 skippr:-translate-x-1/2 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)]",
3333
4323
  role: "status",
3334
- children: "hold me down to talk"
4324
+ children: copy.buddyHoldHint
3335
4325
  })
3336
4326
  ]
3337
4327
  }) : /* @__PURE__ */ jsxs10("div", {
@@ -3347,7 +4337,7 @@ function BuddyVoiceBar({ revealed }) {
3347
4337
  containerRef.current = node;
3348
4338
  },
3349
4339
  type: "button",
3350
- "aria-label": "Wake buddy",
4340
+ "aria-label": copy.wakeLabel,
3351
4341
  onPointerMove: () => {
3352
4342
  if (mode === BUDDY_MODE.Sleep)
3353
4343
  reportHover();
@@ -3412,7 +4402,7 @@ function BuddyVoiceBar({ revealed }) {
3412
4402
  children: modulesError || transientError
3413
4403
  })
3414
4404
  }) : isIdleLauncherHovered && !loginOpen && /* @__PURE__ */ jsx14(ConsentBubble, {
3415
- template: CONSENT_NOTICE_AGENT_SESSION_START,
4405
+ template: copy.consentAgentSessionStart,
3416
4406
  className: "skippr:absolute skippr:bottom-[calc(100%+8px)] skippr:w-[150px]",
3417
4407
  style: bubbleAnchorStyle(edgeDrag.pos.edge)
3418
4408
  })
@@ -3469,12 +4459,12 @@ function useAgentCursor() {
3469
4459
  }
3470
4460
 
3471
4461
  // src/context/SessionHoldContext.tsx
3472
- import { createContext as createContext3, useContext as useContext5 } from "react";
4462
+ import { createContext as createContext3, useContext as useContext6 } from "react";
3473
4463
 
3474
4464
  // src/hooks/useLiveAgent.ts
3475
- import { useContext as useContext4 } from "react";
4465
+ import { useContext as useContext5 } from "react";
3476
4466
  function useLiveAgent() {
3477
- const ctx = useContext4(LiveAgentContext);
4467
+ const ctx = useContext5(LiveAgentContext);
3478
4468
  if (!ctx) {
3479
4469
  throw new Error("useLiveAgent must be used within a <LiveAgent> provider");
3480
4470
  }
@@ -3797,7 +4787,7 @@ var SessionHoldContext = createContext3({
3797
4787
  });
3798
4788
  function SessionHoldProvider({ children }) {
3799
4789
  const { pauseSession } = useLiveAgent();
3800
- const internalCtx = useContext5(LiveAgentContext);
4790
+ const internalCtx = useContext6(LiveAgentContext);
3801
4791
  if (!internalCtx) {
3802
4792
  throw new Error("SessionHoldProvider must be used within a <LiveAgent> provider");
3803
4793
  }
@@ -3812,12 +4802,12 @@ function SessionHoldProvider({ children }) {
3812
4802
  });
3813
4803
  }
3814
4804
  function useSessionHoldContext() {
3815
- return useContext5(SessionHoldContext);
4805
+ return useContext6(SessionHoldContext);
3816
4806
  }
3817
4807
 
3818
4808
  // src/context/TranscriptionsContext.tsx
3819
4809
  import { useTranscriptions } from "@livekit/components-react/hooks";
3820
- import { createContext as createContext4, useContext as useContext6 } from "react";
4810
+ import { createContext as createContext4, useContext as useContext7 } from "react";
3821
4811
  import { jsx as jsx16 } from "react/jsx-runtime";
3822
4812
  var TranscriptionsContext = createContext4([]);
3823
4813
  function TranscriptionsProvider({ children }) {
@@ -3828,11 +4818,11 @@ function TranscriptionsProvider({ children }) {
3828
4818
  });
3829
4819
  }
3830
4820
  function useSharedTranscriptions() {
3831
- return useContext6(TranscriptionsContext);
4821
+ return useContext7(TranscriptionsContext);
3832
4822
  }
3833
4823
 
3834
4824
  // src/context/VoiceTurnContext.tsx
3835
- import { createContext as createContext5, useContext as useContext7 } from "react";
4825
+ import { createContext as createContext5, useContext as useContext8 } from "react";
3836
4826
  import { jsx as jsx17 } from "react/jsx-runtime";
3837
4827
  var VoiceTurnContext = createContext5({
3838
4828
  isCapturingSpeech: false,
@@ -3848,7 +4838,7 @@ function VoiceTurnProvider({ children }) {
3848
4838
  });
3849
4839
  }
3850
4840
  function useVoiceTurnContext() {
3851
- return useContext7(VoiceTurnContext);
4841
+ return useContext8(VoiceTurnContext);
3852
4842
  }
3853
4843
 
3854
4844
  // src/hooks/useAdoptionGoals.ts
@@ -4365,17 +5355,60 @@ function useOnceTrue(value) {
4365
5355
  return latched;
4366
5356
  }
4367
5357
 
5358
+ // src/hooks/usePhaseLabels.ts
5359
+ import { useEffect as useEffect18, useMemo as useMemo4, useRef as useRef14, useState as useState15 } from "react";
5360
+ var NO_LABELS = { agentId: null, byPhaseName: {} };
5361
+ function localeIndependentSignature(read) {
5362
+ return JSON.stringify([
5363
+ read.agentId,
5364
+ read.agentName ?? null,
5365
+ read.nameTranslations ?? null,
5366
+ read.phases.map((phase) => [phase.name, phase.translations ?? null])
5367
+ ]);
5368
+ }
5369
+ function usableRead(read) {
5370
+ return read && read.phases.length > 0 ? read : null;
5371
+ }
5372
+ function usePhaseLabels(session, { agentId: idleAgentId, phases: idlePhases }, locale) {
5373
+ const [held, setHeld] = useState15(null);
5374
+ const heldSignature = useRef14("");
5375
+ useEffect18(() => {
5376
+ const read = usableRead(session) ?? usableRead({ agentId: idleAgentId, phases: idlePhases });
5377
+ if (!read)
5378
+ return;
5379
+ const signature = localeIndependentSignature(read);
5380
+ if (signature === heldSignature.current)
5381
+ return;
5382
+ heldSignature.current = signature;
5383
+ setHeld(read);
5384
+ }, [session, idleAgentId, idlePhases]);
5385
+ return useMemo4(() => {
5386
+ if (!held)
5387
+ return NO_LABELS;
5388
+ const matched = matchTranslatedLocale(locale);
5389
+ const byPhaseName = {};
5390
+ for (const phase of held.phases) {
5391
+ byPhaseName[phase.name] = (matched && phase.translations?.[matched]?.name) ?? phase.name;
5392
+ }
5393
+ return {
5394
+ agentId: held.agentId,
5395
+ agentName: held.agentName ? (matched && held.nameTranslations?.[matched]) ?? held.agentName : undefined,
5396
+ byPhaseName
5397
+ };
5398
+ }, [held, locale]);
5399
+ }
5400
+
4368
5401
  // src/hooks/usePlanUpdates.ts
4369
5402
  import { useRemoteParticipants as useRemoteParticipants2 } from "@livekit/components-react/hooks";
4370
5403
  import { useCallback as useCallback14 } from "react";
4371
5404
 
4372
5405
  // src/hooks/useAgentState.ts
4373
5406
  import { useRemoteParticipants } from "@livekit/components-react/hooks";
4374
- import { useEffect as useEffect18, useState as useState15 } from "react";
5407
+ import { useEffect as useEffect19, useState as useState16 } from "react";
4375
5408
  function useAgentState(attributeKey, parse, initial) {
4376
- const [value, setValue] = useState15(initial);
5409
+ const [value, setValue] = useState16(initial);
4377
5410
  const remoteParticipants = useRemoteParticipants();
4378
- useEffect18(() => {
5411
+ useEffect19(() => {
4379
5412
  const agentParticipant = remoteParticipants.find((p) => p.attributes?.[attributeKey]);
4380
5413
  if (agentParticipant) {
4381
5414
  const attr = agentParticipant.attributes?.[attributeKey];
@@ -4432,7 +5465,7 @@ function usePlanUpdates() {
4432
5465
  }
4433
5466
 
4434
5467
  // src/hooks/useSession.ts
4435
- import { useCallback as useCallback15, useEffect as useEffect19, useRef as useRef14, useState as useState16 } from "react";
5468
+ import { useCallback as useCallback15, useEffect as useEffect20, useRef as useRef15, useState as useState17 } from "react";
4436
5469
  var API_URL4 = "https://app.skippr.ai/api";
4437
5470
  async function fetchSessionMessages(sessionId, authedFetch) {
4438
5471
  try {
@@ -4486,31 +5519,32 @@ function useSession({
4486
5519
  onStartError,
4487
5520
  onDisconnect
4488
5521
  }) {
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);
5522
+ const [connection, setConnection] = useState17(null);
5523
+ const [shouldConnect, setShouldConnect] = useState17(false);
5524
+ const [isStarting, setIsStarting] = useState17(false);
5525
+ const [isDisconnecting, setIsDisconnecting] = useState17(false);
5526
+ const [error, setErrorMessage] = useState17("");
5527
+ const [errorSeq, setErrorSeq] = useState17(0);
5528
+ const [errorCode, setErrorCode] = useState17(null);
4496
5529
  const setError = useCallback15((message) => {
4497
5530
  setErrorMessage(message);
4498
5531
  if (message)
4499
5532
  setErrorSeq((reported) => reported + 1);
4500
5533
  }, []);
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);
4509
- const tokenRef = useRef14(authToken ? { token: authToken, expiresAt: null } : null);
4510
- const getUserTokenRef = useRef14(getUserToken);
5534
+ const [sessionId, setSessionId] = useState17(null);
5535
+ const [bearerToken, setBearerToken] = useState17(authToken ?? null);
5536
+ const [pendingScreenStream, setPendingScreenStream] = useState17(null);
5537
+ const [isPaused, setIsPaused] = useState17(false);
5538
+ const [isPausing, setIsPausing] = useState17(false);
5539
+ const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState17(null);
5540
+ const [historyMessages, setHistoryMessages] = useState17([]);
5541
+ const [sessionAgenda, setSessionAgenda] = useState17(null);
5542
+ const [authFailed, setAuthFailed] = useState17(false);
5543
+ const tokenRef = useRef15(authToken ? { token: authToken, expiresAt: null } : null);
5544
+ const getUserTokenRef = useRef15(getUserToken);
4511
5545
  getUserTokenRef.current = getUserToken ?? (userToken ? () => Promise.resolve(userToken) : undefined);
4512
- const failedBearerRef = useRef14(null);
4513
- const inFlightExchangeRef = useRef14(null);
5546
+ const failedBearerRef = useRef15(null);
5547
+ const inFlightExchangeRef = useRef15(null);
4514
5548
  const canExchange = useCallback15(() => !!appKey && !!getUserTokenRef.current, [appKey]);
4515
5549
  const reExchange = useCallback15(async () => {
4516
5550
  if (inFlightExchangeRef.current)
@@ -4586,7 +5620,7 @@ function useSession({
4586
5620
  setAuthFailed(false);
4587
5621
  return resp;
4588
5622
  }, [canExchange, getValidBearer, reExchange]);
4589
- useEffect19(() => {
5623
+ useEffect20(() => {
4590
5624
  let stale = false;
4591
5625
  if (authToken) {
4592
5626
  tokenRef.current = { token: authToken, expiresAt: null };
@@ -4611,14 +5645,14 @@ function useSession({
4611
5645
  stale = true;
4612
5646
  };
4613
5647
  }, [authToken, canExchange, reExchange, locale, setError]);
4614
- const isStartingRef = useRef14(false);
4615
- const armedScreenStreamRef = useRef14(null);
5648
+ const isStartingRef = useRef15(false);
5649
+ const armedScreenStreamRef = useRef15(null);
4616
5650
  const armScreenStream = useCallback15((stream) => {
4617
5651
  armedScreenStreamRef.current = stream;
4618
5652
  }, []);
4619
- const pauseOnUnloadRef = useRef14(null);
5653
+ const pauseOnUnloadRef = useRef15(null);
4620
5654
  pauseOnUnloadRef.current = connection !== null && !isPaused && sessionId && bearerToken ? { sessionId, bearerToken } : null;
4621
- useEffect19(() => {
5655
+ useEffect20(() => {
4622
5656
  const onPageHide = () => {
4623
5657
  const pending = pauseOnUnloadRef.current;
4624
5658
  if (!pending)
@@ -4705,7 +5739,8 @@ function useSession({
4705
5739
  agentControls: requestAgentControls,
4706
5740
  adoptionGoalId,
4707
5741
  autoStarted,
4708
- userContext: requestUserContext
5742
+ userContext: requestUserContext,
5743
+ locale
4709
5744
  })
4710
5745
  });
4711
5746
  if (!startResp.ok) {
@@ -4714,11 +5749,13 @@ function useSession({
4714
5749
  const {
4715
5750
  session,
4716
5751
  connection: conn,
4717
- pauseTimeoutSeconds: pauseTimeout
5752
+ pauseTimeoutSeconds: pauseTimeout,
5753
+ agenda
4718
5754
  } = await startResp.json();
4719
5755
  const history2 = existingSessionId ? await fetchSessionMessages(session.id, authedFetch) : [];
4720
5756
  setSessionId(session.id);
4721
5757
  setHistoryMessages(history2);
5758
+ setSessionAgenda(agenda ?? null);
4722
5759
  setConnection({
4723
5760
  livekitUrl: conn.livekitUrl,
4724
5761
  token: conn.token
@@ -4783,6 +5820,7 @@ function useSession({
4783
5820
  setSessionId(null);
4784
5821
  setPendingScreenStream(null);
4785
5822
  setHistoryMessages([]);
5823
+ setSessionAgenda(null);
4786
5824
  setIsPaused(false);
4787
5825
  onDisconnect?.();
4788
5826
  } finally {
@@ -4803,6 +5841,7 @@ function useSession({
4803
5841
  isPaused,
4804
5842
  isPausing,
4805
5843
  pauseTimeoutSeconds,
5844
+ sessionAgenda,
4806
5845
  historyMessages,
4807
5846
  pendingScreenStream,
4808
5847
  armScreenStream,
@@ -4813,19 +5852,20 @@ function useSession({
4813
5852
  }
4814
5853
 
4815
5854
  // src/hooks/useSessionHistory.ts
4816
- import { useEffect as useEffect20, useState as useState17 } from "react";
5855
+ import { useEffect as useEffect21, useState as useState18 } from "react";
4817
5856
  var API_URL5 = "https://app.skippr.ai/api";
4818
5857
  var EMPTY = { messages: [], phases: [] };
4819
5858
  function useSessionHistory({
4820
5859
  agentId,
4821
5860
  enabled,
4822
- authedFetch
5861
+ authedFetch,
5862
+ locale
4823
5863
  }) {
4824
- const [history2, setHistory] = useState17(EMPTY);
4825
- const [loadedAgentId, setLoadedAgentId] = useState17(null);
5864
+ const [history2, setHistory] = useState18(EMPTY);
5865
+ const [loadedAgentId, setLoadedAgentId] = useState18(null);
4826
5866
  const activeAgentId = enabled && agentId ? agentId : null;
4827
5867
  const isLoading = activeAgentId !== null && activeAgentId !== loadedAgentId;
4828
- useEffect20(() => {
5868
+ useEffect21(() => {
4829
5869
  if (!enabled || !agentId) {
4830
5870
  setHistory(EMPTY);
4831
5871
  setLoadedAgentId(null);
@@ -4834,7 +5874,8 @@ function useSessionHistory({
4834
5874
  let stale = false;
4835
5875
  (async () => {
4836
5876
  try {
4837
- const resp = await authedFetch(`${API_URL5}/v1/modules/${agentId}/history`);
5877
+ const query = locale ? `?locale=${encodeURIComponent(locale)}` : "";
5878
+ const resp = await authedFetch(`${API_URL5}/v1/modules/${agentId}/history${query}`);
4838
5879
  if (!resp.ok)
4839
5880
  throw new Error(`Failed to load agent history: ${resp.status}`);
4840
5881
  const data = await resp.json();
@@ -4857,22 +5898,22 @@ function useSessionHistory({
4857
5898
  return () => {
4858
5899
  stale = true;
4859
5900
  };
4860
- }, [enabled, agentId, authedFetch]);
5901
+ }, [enabled, agentId, authedFetch, locale]);
4861
5902
  return { ...history2, isLoading };
4862
5903
  }
4863
5904
 
4864
5905
  // src/hooks/useSplashMedia.ts
4865
- import { useCallback as useCallback16, useEffect as useEffect21, useMemo as useMemo4, useRef as useRef15, useState as useState18 } from "react";
5906
+ import { useCallback as useCallback16, useEffect as useEffect22, useMemo as useMemo5, useRef as useRef16, useState as useState19 } from "react";
4866
5907
  function useSplashMedia({
4867
5908
  armScreenStream,
4868
5909
  isSplashVisible,
4869
5910
  isSessionLive
4870
5911
  }) {
4871
- const [micEnabled, setMicEnabled] = useState18(false);
4872
- const [screenEnabled, setScreenEnabled] = useState18(false);
4873
- const heldScreenStreamRef = useRef15(null);
4874
- const screenRequestInFlightRef = useRef15(false);
4875
- const isStagingRef = useRef15(false);
5912
+ const [micEnabled, setMicEnabled] = useState19(false);
5913
+ const [screenEnabled, setScreenEnabled] = useState19(false);
5914
+ const heldScreenStreamRef = useRef16(null);
5915
+ const screenRequestInFlightRef = useRef16(false);
5916
+ const isStagingRef = useRef16(false);
4876
5917
  const enableMic = useCallback16(() => {
4877
5918
  (async () => {
4878
5919
  let stream;
@@ -4887,7 +5928,7 @@ function useSplashMedia({
4887
5928
  setMicEnabled(true);
4888
5929
  })();
4889
5930
  }, []);
4890
- useEffect21(() => {
5931
+ useEffect22(() => {
4891
5932
  let cancelled = false;
4892
5933
  (async () => {
4893
5934
  if (!navigator.permissions?.query)
@@ -4943,10 +5984,10 @@ function useSplashMedia({
4943
5984
  })();
4944
5985
  }, [armScreenStream, releaseScreen]);
4945
5986
  const isStaging = isSplashVisible && !isSessionLive;
4946
- useEffect21(() => {
5987
+ useEffect22(() => {
4947
5988
  isStagingRef.current = isStaging;
4948
5989
  }, [isStaging]);
4949
- useEffect21(() => {
5990
+ useEffect22(() => {
4950
5991
  if (isSessionLive) {
4951
5992
  heldScreenStreamRef.current = null;
4952
5993
  setScreenEnabled(false);
@@ -4955,14 +5996,14 @@ function useSplashMedia({
4955
5996
  if (!isSplashVisible)
4956
5997
  releaseScreen();
4957
5998
  }, [isSessionLive, isSplashVisible, releaseScreen]);
4958
- return useMemo4(() => ({ micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen }), [micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen]);
5999
+ return useMemo5(() => ({ micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen }), [micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen]);
4959
6000
  }
4960
6001
 
4961
6002
  // src/hooks/useSplashOverlayOptOut.ts
4962
- import { useCallback as useCallback17, useState as useState19 } from "react";
6003
+ import { useCallback as useCallback17, useState as useState20 } from "react";
4963
6004
  var API_URL6 = "https://app.skippr.ai/api";
4964
6005
  function useSplashOverlayOptOut(authedFetch, recordedForUser) {
4965
- const [recordedLocally, setRecordedLocally] = useState19(false);
6006
+ const [recordedLocally, setRecordedLocally] = useState20(false);
4966
6007
  const optOut = useCallback17(() => {
4967
6008
  setRecordedLocally(true);
4968
6009
  authedFetch(`${API_URL6}/v1/users/splash-opt-out`, { method: "POST" }).catch((e) => console.warn("[Skippr] splash overlay opt-out failed", e));
@@ -5177,7 +6218,7 @@ function dockStyleFlush(dock) {
5177
6218
  }
5178
6219
 
5179
6220
  // src/components/AgentCursor.tsx
5180
- import { useContext as useContext8, useEffect as useEffect22, useLayoutEffect, useRef as useRef16, useState as useState20 } from "react";
6221
+ import { useContext as useContext9, useEffect as useEffect23, useLayoutEffect, useRef as useRef17, useState as useState21 } from "react";
5181
6222
 
5182
6223
  // src/capture/elementRef.ts
5183
6224
  function safeGetIframeDocument(iframe) {
@@ -5390,21 +6431,21 @@ function AgentCursor({
5390
6431
  target,
5391
6432
  animated = false
5392
6433
  }) {
5393
- const ctx = useContext8(LiveAgentContext);
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);
5400
- const labelRef = useRef16(null);
5401
- const cursorElRef = useRef16(null);
5402
- const pathRef = useRef16(null);
5403
- const prevCursorRef = useRef16(null);
5404
- const traceRef = useRef16(null);
5405
- const timersRef = useRef16(new Set);
5406
- const trackFrameRef = useRef16(null);
5407
- const glideFrameRef = useRef16(null);
6434
+ const ctx = useContext9(LiveAgentContext);
6435
+ const [cursor, setCursor] = useState21(null);
6436
+ const [glideMs, setGlideMs] = useState21(0);
6437
+ const [phase, setPhase] = useState21("idle");
6438
+ const [ringBox, setRingBox] = useState21(null);
6439
+ const [clickPulse, setClickPulse] = useState21(0);
6440
+ const [measuredLabelWidth, setMeasuredLabelWidth] = useState21(0);
6441
+ const labelRef = useRef17(null);
6442
+ const cursorElRef = useRef17(null);
6443
+ const pathRef = useRef17(null);
6444
+ const prevCursorRef = useRef17(null);
6445
+ const traceRef = useRef17(null);
6446
+ const timersRef = useRef17(new Set);
6447
+ const trackFrameRef = useRef17(null);
6448
+ const glideFrameRef = useRef17(null);
5408
6449
  const clearTimers = () => {
5409
6450
  for (const t of timersRef.current)
5410
6451
  clearTimeout(t);
@@ -5520,7 +6561,7 @@ function AgentCursor({
5520
6561
  });
5521
6562
  return cancelAnimation;
5522
6563
  }, [target, animated]);
5523
- useEffect22(() => {
6564
+ useEffect23(() => {
5524
6565
  if (!target || target.kind === "gesture" || phase === "idle")
5525
6566
  return;
5526
6567
  const track = () => {
@@ -5560,7 +6601,7 @@ function AgentCursor({
5560
6601
  setMeasuredLabelWidth(renderedLabelWidth);
5561
6602
  }
5562
6603
  }, [phase, measuredLabelWidth, target?.label]);
5563
- useEffect22(() => {
6604
+ useEffect23(() => {
5564
6605
  return () => {
5565
6606
  traceRef.current?.cancel();
5566
6607
  for (const t of timersRef.current)
@@ -5660,7 +6701,7 @@ function AgentCursor({
5660
6701
  // src/components/AutoStartMedia.tsx
5661
6702
  import { useConnectionState, useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
5662
6703
  import { ConnectionState, Track as Track2 } from "livekit-client";
5663
- import { useEffect as useEffect23, useRef as useRef17 } from "react";
6704
+ import { useEffect as useEffect24, useRef as useRef18 } from "react";
5664
6705
  function AutoStartMedia({
5665
6706
  pendingScreenStream,
5666
6707
  pushOrTapMicMode = false,
@@ -5668,8 +6709,8 @@ function AutoStartMedia({
5668
6709
  }) {
5669
6710
  const { localParticipant } = useLocalParticipant4();
5670
6711
  const connectionState = useConnectionState();
5671
- const didStartRef = useRef17(false);
5672
- useEffect23(() => {
6712
+ const didStartRef = useRef18(false);
6713
+ useEffect24(() => {
5673
6714
  if (didStartRef.current)
5674
6715
  return;
5675
6716
  if (connectionState !== ConnectionState.Connected)
@@ -5696,7 +6737,7 @@ function AutoStartMedia({
5696
6737
  // src/components/DomCapture.tsx
5697
6738
  import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
5698
6739
  import { ConnectionState as ConnectionState2, ScreenSharePresets as ScreenSharePresets2, Track as Track3 } from "livekit-client";
5699
- import { useContext as useContext9, useEffect as useEffect24, useMemo as useMemo5, useRef as useRef18 } from "react";
6740
+ import { useContext as useContext10, useEffect as useEffect25, useMemo as useMemo6, useRef as useRef19 } from "react";
5700
6741
 
5701
6742
  // src/capture/a11yUtils.ts
5702
6743
  var ROLE_BY_TAG = {
@@ -6921,15 +7962,15 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
6921
7962
  const { localParticipant } = useLocalParticipant5();
6922
7963
  const connectionState = useConnectionState2();
6923
7964
  const { isHeld, clearPausedCaptureRef } = useSessionHoldContext();
6924
- const accentColor = useContext9(LiveAgentContext)?.appearance?.accentColor ?? null;
6925
- const brand = useMemo5(() => resolveBrandPalette(accentColor), [accentColor]);
6926
- const brandRef = useRef18(brand);
7965
+ const accentColor = useContext10(LiveAgentContext)?.appearance?.accentColor ?? null;
7966
+ const brand = useMemo6(() => resolveBrandPalette(accentColor), [accentColor]);
7967
+ const brandRef = useRef19(brand);
6927
7968
  brandRef.current = brand;
6928
- const didStartRef = useRef18(false);
6929
- const pausedRef = useRef18(false);
6930
- const freezeCaptureRef = useRef18(null);
6931
- const resumeCaptureRef = useRef18(null);
6932
- useEffect24(() => {
7969
+ const didStartRef = useRef19(false);
7970
+ const pausedRef = useRef19(false);
7971
+ const freezeCaptureRef = useRef19(null);
7972
+ const resumeCaptureRef = useRef19(null);
7973
+ useEffect25(() => {
6933
7974
  if (didStartRef.current)
6934
7975
  return;
6935
7976
  if (connectionState !== ConnectionState2.Connected)
@@ -7166,7 +8207,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
7166
8207
  track.stop();
7167
8208
  };
7168
8209
  }, [connectionState, localParticipant, pushOrTapMicMode, startMuted, clearPausedCaptureRef]);
7169
- useEffect24(() => {
8210
+ useEffect25(() => {
7170
8211
  if (isHeld) {
7171
8212
  freezeCaptureRef.current?.();
7172
8213
  } else {
@@ -7178,7 +8219,7 @@ function DomCapture({ pushOrTapMicMode = false, startMuted = false }) {
7178
8219
 
7179
8220
  // src/components/HighlightOverlay.tsx
7180
8221
  import { useDataChannel, useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
7181
- import { useCallback as useCallback18, useEffect as useEffect25, useRef as useRef19 } from "react";
8222
+ import { useCallback as useCallback18, useEffect as useEffect26, useRef as useRef20 } from "react";
7182
8223
  var HIGHLIGHT_AUTO_CLEAR_MS = 30000;
7183
8224
  var PAGE_CHECK_MS = 250;
7184
8225
  var ACTED_REASON = "acted";
@@ -7207,11 +8248,12 @@ function parseHighlightMessage(payload) {
7207
8248
  }
7208
8249
  }
7209
8250
  function HighlightOverlay() {
8251
+ const copy = useChromeCopy();
7210
8252
  const { localParticipant } = useLocalParticipant6();
7211
- const targetRef = useRef19(null);
7212
- const shownRef = useRef19(null);
7213
- const shownUrlRef = useRef19(null);
7214
- const autoClearRef = useRef19(null);
8253
+ const targetRef = useRef20(null);
8254
+ const shownRef = useRef20(null);
8255
+ const shownUrlRef = useRef20(null);
8256
+ const autoClearRef = useRef20(null);
7215
8257
  const clear = useCallback18(() => {
7216
8258
  if (autoClearRef.current)
7217
8259
  clearTimeout(autoClearRef.current);
@@ -7249,15 +8291,15 @@ function HighlightOverlay() {
7249
8291
  shownUrlRef.current = window.location.href;
7250
8292
  setCursorTarget("guide", {
7251
8293
  element,
7252
- label: parsed.message || "Click here",
8294
+ label: parsed.message || copy.highlightDefaultLabel,
7253
8295
  mode: "guide"
7254
8296
  });
7255
8297
  setHighlightActive(true);
7256
8298
  autoClearRef.current = setTimeout(() => clearAndReport(EXPIRED_REASON), HIGHLIGHT_AUTO_CLEAR_MS);
7257
- }, [clear, clearAndReport]);
8299
+ }, [clear, clearAndReport, copy]);
7258
8300
  useDataChannel(HIGHLIGHT_TOPIC, onHighlightMessage);
7259
- useEffect25(() => onHighlightCleared(clear), [clear]);
7260
- useEffect25(() => {
8301
+ useEffect26(() => onHighlightCleared(clear), [clear]);
8302
+ useEffect26(() => {
7261
8303
  const onClick = (event) => {
7262
8304
  const target = targetRef.current;
7263
8305
  if (!target)
@@ -7274,7 +8316,7 @@ function HighlightOverlay() {
7274
8316
  document.addEventListener("click", onClick, { capture: true });
7275
8317
  return () => document.removeEventListener("click", onClick, { capture: true });
7276
8318
  }, [clearAndReport]);
7277
- useEffect25(() => {
8319
+ useEffect26(() => {
7278
8320
  const interval = setInterval(() => {
7279
8321
  const shown = shownRef.current;
7280
8322
  const target = targetRef.current;
@@ -7294,32 +8336,32 @@ function HighlightOverlay() {
7294
8336
  targetRef.current = replacement;
7295
8337
  setCursorTarget("guide", {
7296
8338
  element: replacement,
7297
- label: shown.message || "Click here",
8339
+ label: shown.message || copy.highlightDefaultLabel,
7298
8340
  mode: "guide"
7299
8341
  });
7300
8342
  }, PAGE_CHECK_MS);
7301
8343
  return () => clearInterval(interval);
7302
- }, [clearAndReport]);
7303
- useEffect25(() => clear, [clear]);
8344
+ }, [clearAndReport, copy]);
8345
+ useEffect26(() => clear, [clear]);
7304
8346
  return null;
7305
8347
  }
7306
8348
 
7307
8349
  // src/components/MinimizedBubble.tsx
7308
- import { useContext as useContext10, useEffect as useEffect27, useRef as useRef21, useState as useState21 } from "react";
8350
+ import { useContext as useContext11, useEffect as useEffect28, useRef as useRef22, useState as useState22 } from "react";
7309
8351
 
7310
8352
  // src/hooks/useLauncherDrag.ts
7311
- import { useEffect as useEffect26, useRef as useRef20 } from "react";
8353
+ import { useEffect as useEffect27, useRef as useRef21 } from "react";
7312
8354
  import { flushSync } from "react-dom";
7313
8355
  var DRAG_THRESHOLD_PX = 5;
7314
8356
  function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging, enabled = true) {
7315
- const wasDraggedRef = useRef20(false);
7316
- const onDropRef = useRef20(onDrop);
8357
+ const wasDraggedRef = useRef21(false);
8358
+ const onDropRef = useRef21(onDrop);
7317
8359
  onDropRef.current = onDrop;
7318
- const followTargetsRef = useRef20(followRefs);
8360
+ const followTargetsRef = useRef21(followRefs);
7319
8361
  followTargetsRef.current = followRefs;
7320
- const reportDraggingRef = useRef20(reportDragging);
8362
+ const reportDraggingRef = useRef21(reportDragging);
7321
8363
  reportDraggingRef.current = reportDragging;
7322
- useEffect26(() => {
8364
+ useEffect27(() => {
7323
8365
  if (!enabled)
7324
8366
  return;
7325
8367
  const el = containerRef.current;
@@ -7587,10 +8629,11 @@ var GOAL_EXIT_STAGGER_MS = 250;
7587
8629
  var MAX_GOAL_BUBBLES = 3;
7588
8630
  var MAX_MODULE_PILLS = 3;
7589
8631
  function SkipprMark({ onStart, logoUrl }) {
8632
+ const copy = useChromeCopy();
7590
8633
  return /* @__PURE__ */ jsx21("button", {
7591
8634
  type: "button",
7592
8635
  onClick: onStart,
7593
- "aria-label": "Ask Me Anything",
8636
+ "aria-label": copy.askLabel,
7594
8637
  className: "skippr:flex skippr:h-[36px] skippr:w-[36px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:bg-transparent skippr:p-0",
7595
8638
  children: logoUrl ? /* @__PURE__ */ jsx21("img", {
7596
8639
  src: logoUrl,
@@ -7613,10 +8656,11 @@ function ChatButton({
7613
8656
  position,
7614
8657
  onClick
7615
8658
  }) {
8659
+ const copy = useChromeCopy();
7616
8660
  return /* @__PURE__ */ jsx21("button", {
7617
8661
  type: "button",
7618
8662
  onClick,
7619
- "aria-label": "Open chat",
8663
+ "aria-label": copy.openChatLabel,
7620
8664
  tabIndex: revealed ? 0 : -1,
7621
8665
  className: cn("skippr:h-[36px] skippr:shrink-0 skippr:overflow-hidden skippr:p-0", "skippr:transition-all skippr:duration-[400ms] skippr:ease-[cubic-bezier(0.22,1,0.36,1)]", position === "right" ? "skippr:order-last" : "skippr:order-first"),
7622
8666
  style: {
@@ -7674,7 +8718,8 @@ function WelcomeBubble({
7674
8718
  onDismiss,
7675
8719
  onClick
7676
8720
  }) {
7677
- useEffect27(() => {
8721
+ const copy = useChromeCopy();
8722
+ useEffect28(() => {
7678
8723
  const timer = setTimeout(onDismiss, 5000);
7679
8724
  return () => clearTimeout(timer);
7680
8725
  }, [onDismiss]);
@@ -7682,7 +8727,7 @@ function WelcomeBubble({
7682
8727
  type: "button",
7683
8728
  className: cn("skippr:absolute", popsDown ? "skippr:top-full skippr:mt-3" : "skippr:bottom-full skippr:mb-3", "skippr:max-w-64 skippr:rounded-xl skippr:bg-card skippr:shadow-lg", "skippr:border skippr:border-border skippr:px-4 skippr:py-3", "skippr:text-sm skippr:text-foreground skippr:leading-relaxed skippr:text-left", "skippr:animate-[skippr-fade-in_0.3s_ease-out]", "skippr:cursor-pointer", position === "right" ? "skippr:right-0" : "skippr:left-0"),
7684
8729
  onClick,
7685
- "aria-label": "Dismiss",
8730
+ "aria-label": copy.dismissLabel,
7686
8731
  children: [
7687
8732
  message,
7688
8733
  /* @__PURE__ */ jsx21("span", {
@@ -7696,7 +8741,8 @@ function MinimizedBubble({
7696
8741
  welcomeDismissed,
7697
8742
  onDismissWelcome
7698
8743
  }) {
7699
- const ctx = useContext10(LiveAgentContext);
8744
+ const copy = useChromeCopy();
8745
+ const ctx = useContext11(LiveAgentContext);
7700
8746
  if (!ctx) {
7701
8747
  throw new Error("MinimizedBubble must be used within a <LiveAgent> provider");
7702
8748
  }
@@ -7719,14 +8765,14 @@ function MinimizedBubble({
7719
8765
  commitLauncherDrop,
7720
8766
  appearance
7721
8767
  } = ctx;
7722
- const [goalsAutoHidden, setGoalsAutoHidden] = useState21(false);
7723
- const [isLauncherHovered, setIsLauncherHovered] = useState21(false);
7724
- const [visitHref, setVisitHref] = useState21(() => window.location.href);
7725
- const revealedHrefRef = useRef21(null);
7726
- const hoverContainerRef = useRef21(null);
7727
- const closeTimerRef = useRef21(null);
7728
- useEffect27(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
7729
- useEffect27(() => {
8768
+ const [goalsAutoHidden, setGoalsAutoHidden] = useState22(false);
8769
+ const [isLauncherHovered, setIsLauncherHovered] = useState22(false);
8770
+ const [visitHref, setVisitHref] = useState22(() => window.location.href);
8771
+ const revealedHrefRef = useRef22(null);
8772
+ const hoverContainerRef = useRef22(null);
8773
+ const closeTimerRef = useRef22(null);
8774
+ useEffect28(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
8775
+ useEffect28(() => {
7730
8776
  const el = hoverContainerRef.current;
7731
8777
  if (!el)
7732
8778
  return;
@@ -7765,7 +8811,7 @@ function MinimizedBubble({
7765
8811
  const onboardingModule = pillCandidates.find((module) => module.type === "onboarding");
7766
8812
  const modulePills = onboardingModule ? [onboardingModule] : pillCandidates.slice(0, MAX_MODULE_PILLS).reverse();
7767
8813
  const goalsEligible = adoptionGoals.length > 0 && !onboardingModule && hasResolvedModules;
7768
- useEffect27(() => {
8814
+ useEffect28(() => {
7769
8815
  if (!goalsEligible)
7770
8816
  return;
7771
8817
  if (revealedHrefRef.current === visitHref) {
@@ -7779,8 +8825,8 @@ function MinimizedBubble({
7779
8825
  }, [goalsEligible, visitHref]);
7780
8826
  const matchedGoals = goalsEligible ? adoptionGoals.slice(0, MAX_GOAL_BUBBLES) : [];
7781
8827
  const goalsHidden = goalsAutoHidden && !isLauncherHovered;
7782
- const [goalsUnmounted, setGoalsUnmounted] = useState21(false);
7783
- useEffect27(() => {
8828
+ const [goalsUnmounted, setGoalsUnmounted] = useState22(false);
8829
+ useEffect28(() => {
7784
8830
  if (!goalsHidden) {
7785
8831
  setGoalsUnmounted(false);
7786
8832
  return;
@@ -7847,7 +8893,7 @@ function MinimizedBubble({
7847
8893
  className: "skippr:relative",
7848
8894
  children: [
7849
8895
  isLauncherHovered && /* @__PURE__ */ jsx21(ConsentBubble, {
7850
- template: CONSENT_NOTICE_SESSION_START,
8896
+ template: copy.consentSessionStart,
7851
8897
  className: cn("skippr:absolute skippr:bottom-[calc(100%+8px)]", position === "right" ? "skippr:right-0" : "skippr:left-0")
7852
8898
  }),
7853
8899
  /* @__PURE__ */ jsx21(IdleLauncher, {
@@ -7865,7 +8911,7 @@ function MinimizedBubble({
7865
8911
 
7866
8912
  // src/components/PageActionHandler.tsx
7867
8913
  import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
7868
- import { useCallback as useCallback19, useEffect as useEffect28, useRef as useRef22 } from "react";
8914
+ import { useCallback as useCallback19, useEffect as useEffect29, useRef as useRef23 } from "react";
7869
8915
  var STEP_MAX_WAIT_MS = 5000;
7870
8916
  var POST_ACTION_SETTLE_SNAPSHOT_MS = 300;
7871
8917
  var TRAILING_ACTION_FLUSH_AFTER_STOP_MS = 1000;
@@ -8080,30 +9126,31 @@ function performAction(action, element) {
8080
9126
  return;
8081
9127
  }
8082
9128
  }
8083
- function labelFor(action) {
9129
+ function labelFor(action, copy) {
8084
9130
  switch (action.type) {
8085
9131
  case "click":
8086
- return "Clicking…";
9132
+ return copy.actionClicking;
8087
9133
  case "fill":
8088
- return "Typing…";
9134
+ return copy.actionTyping;
8089
9135
  case "select":
8090
- return "Selecting…";
9136
+ return copy.actionSelecting;
8091
9137
  case "scroll":
8092
9138
  case "scroll_page":
8093
9139
  case "scroll_in":
8094
- return "Scrolling…";
9140
+ return copy.actionScrolling;
8095
9141
  case "hover":
8096
- return "Hovering…";
9142
+ return copy.actionHovering;
8097
9143
  }
8098
9144
  }
8099
9145
  function PageActionHandler() {
8100
- const mountedRef = useRef22(true);
8101
- const queueRef = useRef22([]);
8102
- const drainingRef = useRef22(false);
8103
- const settleTimerRef = useRef22(null);
8104
- const endStepRef = useRef22(null);
8105
- const actionsStoppedRef = useRef22(false);
8106
- const ignoreActionsArrivingBeforeRef = useRef22(0);
9146
+ const copy = useChromeCopy();
9147
+ const mountedRef = useRef23(true);
9148
+ const queueRef = useRef23([]);
9149
+ const drainingRef = useRef23(false);
9150
+ const settleTimerRef = useRef23(null);
9151
+ const endStepRef = useRef23(null);
9152
+ const actionsStoppedRef = useRef23(false);
9153
+ const ignoreActionsArrivingBeforeRef = useRef23(0);
8107
9154
  const runStep = useCallback19((action) => {
8108
9155
  return new Promise((resolve) => {
8109
9156
  if (action.type === "scroll_page") {
@@ -8118,7 +9165,7 @@ function PageActionHandler() {
8118
9165
  setCursorTarget("act", {
8119
9166
  kind: "gesture",
8120
9167
  gesture: { direction: gestureFor(action.direction) },
8121
- label: labelFor(action),
9168
+ label: labelFor(action, copy),
8122
9169
  mode: "act",
8123
9170
  onAct: () => {
8124
9171
  clearTimeout(fallback2);
@@ -8152,7 +9199,7 @@ function PageActionHandler() {
8152
9199
  const fallback = setTimeout(finish, STEP_MAX_WAIT_MS);
8153
9200
  setCursorTarget("act", {
8154
9201
  element,
8155
- label: labelFor(action),
9202
+ label: labelFor(action, copy),
8156
9203
  mode: "act",
8157
9204
  onAct: () => {
8158
9205
  clearTimeout(fallback);
@@ -8172,7 +9219,7 @@ function PageActionHandler() {
8172
9219
  }
8173
9220
  });
8174
9221
  });
8175
- }, []);
9222
+ }, [copy]);
8176
9223
  const drain = useCallback19(async () => {
8177
9224
  if (drainingRef.current)
8178
9225
  return;
@@ -8203,7 +9250,7 @@ function PageActionHandler() {
8203
9250
  queueRef.current.push(action);
8204
9251
  drain();
8205
9252
  }, [drain]);
8206
- useEffect28(() => {
9253
+ useEffect29(() => {
8207
9254
  mountedRef.current = true;
8208
9255
  drainingRef.current = false;
8209
9256
  return () => {
@@ -8215,7 +9262,7 @@ function PageActionHandler() {
8215
9262
  setActionsBusy(false);
8216
9263
  };
8217
9264
  }, []);
8218
- useEffect28(() => {
9265
+ useEffect29(() => {
8219
9266
  return onActionsStopped(() => {
8220
9267
  actionsStoppedRef.current = true;
8221
9268
  ignoreActionsArrivingBeforeRef.current = Date.now() + TRAILING_ACTION_FLUSH_AFTER_STOP_MS;
@@ -8233,17 +9280,17 @@ function PageActionHandler() {
8233
9280
  }
8234
9281
 
8235
9282
  // src/components/SessionControlBar.tsx
8236
- import { useCallback as useCallback22, useContext as useContext11, useEffect as useEffect32, useState as useState24 } from "react";
9283
+ import { useCallback as useCallback22, useContext as useContext12, useEffect as useEffect33, useState as useState25 } from "react";
8237
9284
 
8238
9285
  // src/hooks/useActionControl.ts
8239
9286
  import { useLocalParticipant as useLocalParticipant7 } from "@livekit/components-react/hooks";
8240
- import { useCallback as useCallback20, useEffect as useEffect29, useState as useState22 } from "react";
9287
+ import { useCallback as useCallback20, useEffect as useEffect30, useState as useState23 } from "react";
8241
9288
  var textEncoder6 = new TextEncoder;
8242
9289
  function useActionControl() {
8243
9290
  const { localParticipant } = useLocalParticipant7();
8244
9291
  const plan = usePlanUpdates();
8245
- const [busy, setBusy] = useState22(isActionsBusy);
8246
- useEffect29(() => subscribeActionsBusy(setBusy), []);
9292
+ const [busy, setBusy] = useState23(isActionsBusy);
9293
+ useEffect30(() => subscribeActionsBusy(setBusy), []);
8247
9294
  const actionsActive = busy || plan?.state === "executing";
8248
9295
  const requestStop = useCallback20(async () => {
8249
9296
  stopActions();
@@ -8260,13 +9307,13 @@ function useActionControl() {
8260
9307
  }
8261
9308
 
8262
9309
  // src/hooks/useAudioLevelBars.ts
8263
- import { useEffect as useEffect30, useRef as useRef23, useState as useState23 } from "react";
9310
+ import { useEffect as useEffect31, useRef as useRef24, useState as useState24 } from "react";
8264
9311
  var TALKING_LEVEL_THRESHOLD = 0.2;
8265
9312
  var TALKING_HOLD_MS = 400;
8266
9313
  function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowthPx, noiseGate }) {
8267
- const barRefs = useRef23([]);
8268
- const [isTalking, setIsTalking] = useState23(false);
8269
- useEffect30(() => {
9314
+ const barRefs = useRef24([]);
9315
+ const [isTalking, setIsTalking] = useState24(false);
9316
+ useEffect31(() => {
8270
9317
  if (!mediaStreamTrack) {
8271
9318
  for (const bar of barRefs.current) {
8272
9319
  if (bar)
@@ -8317,15 +9364,15 @@ function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowth
8317
9364
  }
8318
9365
 
8319
9366
  // src/hooks/useIdleAutoPause.ts
8320
- import { useCallback as useCallback21, useEffect as useEffect31, useRef as useRef24 } from "react";
9367
+ import { useCallback as useCallback21, useEffect as useEffect32, useRef as useRef25 } from "react";
8321
9368
  function useIdleAutoPause({
8322
9369
  enabled,
8323
9370
  active,
8324
9371
  isHeld,
8325
9372
  pause
8326
9373
  }) {
8327
- const timerRef = useRef24(null);
8328
- const pauseRef = useRef24(pause);
9374
+ const timerRef = useRef25(null);
9375
+ const pauseRef = useRef25(pause);
8329
9376
  pauseRef.current = pause;
8330
9377
  const clearTimer = useCallback21(() => {
8331
9378
  if (timerRef.current) {
@@ -8341,7 +9388,7 @@ function useIdleAutoPause({
8341
9388
  if (enabled && !isHeld)
8342
9389
  armTimer();
8343
9390
  }, [enabled, isHeld, armTimer]);
8344
- useEffect31(() => {
9391
+ useEffect32(() => {
8345
9392
  if (!enabled || isHeld || active) {
8346
9393
  clearTimer();
8347
9394
  return;
@@ -8354,13 +9401,13 @@ function useIdleAutoPause({
8354
9401
 
8355
9402
  // src/hooks/useLiveUserTranscript.ts
8356
9403
  import { useLocalParticipant as useLocalParticipant8 } from "@livekit/components-react/hooks";
8357
- import { useRef as useRef25 } from "react";
9404
+ import { useRef as useRef26 } from "react";
8358
9405
  function useLiveUserTranscript(active) {
8359
9406
  const transcriptions = useSharedTranscriptions();
8360
9407
  const { localParticipant } = useLocalParticipant8();
8361
9408
  const localIdentity = localParticipant.identity;
8362
- const priorStreamIdsRef = useRef25(new Set);
8363
- const wasActiveRef = useRef25(false);
9409
+ const priorStreamIdsRef = useRef26(new Set);
9410
+ const wasActiveRef = useRef26(false);
8364
9411
  const userStreams = transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity);
8365
9412
  if (active && !wasActiveRef.current) {
8366
9413
  priorStreamIdsRef.current = new Set(userStreams.map((s) => s.streamInfo.id));
@@ -8391,14 +9438,15 @@ function useMicLevel(enabled) {
8391
9438
  // src/components/PausedCountdown.tsx
8392
9439
  import { jsxs as jsxs15 } from "react/jsx-runtime";
8393
9440
  function PausedCountdown({ secondsRemaining }) {
9441
+ const copy = useChromeCopy();
8394
9442
  const minutes = Math.floor(secondsRemaining / 60);
8395
9443
  const seconds = String(secondsRemaining % 60).padStart(2, "0");
8396
9444
  return /* @__PURE__ */ jsxs15("span", {
8397
9445
  role: "timer",
8398
- "aria-label": `Agent closes in ${secondsRemaining} seconds`,
9446
+ "aria-label": fillPlaceholders(copy.pausedClosingInAria, { seconds: secondsRemaining }),
8399
9447
  className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:whitespace-nowrap skippr:px-1 skippr:text-[13px] skippr:font-medium skippr:text-neutral-500 skippr:[animation:skippr-stage-fade_240ms_ease-out]",
8400
9448
  children: [
8401
- "Agent closes in",
9449
+ copy.pausedClosingIn,
8402
9450
  /* @__PURE__ */ jsxs15("span", {
8403
9451
  className: "skippr:ml-1 skippr:font-semibold skippr:tabular-nums skippr:text-bubble",
8404
9452
  children: [
@@ -8414,11 +9462,13 @@ function PausedCountdown({ secondsRemaining }) {
8414
9462
  // src/components/PushToTalkHint.tsx
8415
9463
  import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
8416
9464
  function PushToTalkHint() {
9465
+ const copy = useChromeCopy();
9466
+ const [beforeKey, afterKey] = splitOnPlaceholder(copy.micShortcutHint, "key");
8417
9467
  return /* @__PURE__ */ jsxs16("div", {
8418
9468
  className: cn("skippr:absolute skippr:top-full skippr:left-2 skippr:mt-2 skippr:flex skippr:w-fit skippr:items-center skippr:gap-1.5 skippr:whitespace-nowrap skippr:rounded-full skippr:bg-[#f4ecd8] skippr:px-2.5 skippr:py-1 skippr:text-[10px] skippr:font-medium skippr:text-black skippr:shadow-[0_4px_14px_rgba(0,0,0,0.12)] skippr:[animation:skippr-agent-in_200ms_ease-out]"),
8419
9469
  children: [
8420
9470
  /* @__PURE__ */ jsx22("span", {
8421
- children: "Hold the"
9471
+ children: beforeKey.trim()
8422
9472
  }),
8423
9473
  /* @__PURE__ */ jsxs16("kbd", {
8424
9474
  className: "skippr:flex skippr:items-center skippr:gap-0.5 skippr:rounded skippr:border skippr:border-black/25 skippr:bg-white/70 skippr:px-1.5 skippr:py-0.5 skippr:font-mono skippr:text-[11px] skippr:leading-none skippr:text-black",
@@ -8436,7 +9486,7 @@ function PushToTalkHint() {
8436
9486
  ]
8437
9487
  }),
8438
9488
  /* @__PURE__ */ jsx22("span", {
8439
- children: "tilde / backquote key to talk"
9489
+ children: afterKey.trim()
8440
9490
  })
8441
9491
  ]
8442
9492
  });
@@ -8452,13 +9502,14 @@ function PushToTalkMic({
8452
9502
  }) {
8453
9503
  const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
8454
9504
  const holdPushToTalk = usePointerHold(onStart, onCommit);
8455
- const label = isCapturingSpeech ? "Release to send" : "Hold to talk";
9505
+ const copy = useChromeCopy();
9506
+ const label = isCapturingSpeech ? copy.micReleaseToSend : copy.micHoldToTalk;
8456
9507
  const withLabel = isCapturingSpeech || showLabel;
8457
9508
  return /* @__PURE__ */ jsxs17("button", {
8458
9509
  type: "button",
8459
9510
  "data-skippr-no-drag": "",
8460
9511
  onPointerDown: holdPushToTalk,
8461
- "aria-label": "Hold to talk",
9512
+ "aria-label": copy.micHoldToTalk,
8462
9513
  "aria-pressed": isCapturingSpeech,
8463
9514
  title: label,
8464
9515
  "data-holding": isCapturingSpeech,
@@ -8520,12 +9571,13 @@ function StopActionsIcon({ className }) {
8520
9571
  import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
8521
9572
  function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
8522
9573
  const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
8523
- const label = isCapturingSpeech ? "Tap to send" : "Tap to talk";
9574
+ const copy = useChromeCopy();
9575
+ const label = isCapturingSpeech ? copy.micTapToSend : copy.micTapToTalk;
8524
9576
  const withLabel = isCapturingSpeech || showLabel;
8525
9577
  return /* @__PURE__ */ jsxs19("button", {
8526
9578
  type: "button",
8527
9579
  onClick: onToggle,
8528
- "aria-label": "Tap to talk",
9580
+ "aria-label": copy.micTapToTalk,
8529
9581
  "aria-pressed": isCapturingSpeech,
8530
9582
  title: label,
8531
9583
  className: cn("skippr:flex skippr:h-[38px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:gap-2 skippr:rounded-full skippr:bg-bubble skippr:text-white skippr:cursor-pointer", withLabel ? "skippr:px-3.5" : "skippr:w-[38px]", isCapturingSpeech ? "skippr:animate-skippr-rec-ring skippr:motion-reduce:animate-none" : "skippr:hover:bg-[#3a384b]"),
@@ -8573,11 +9625,17 @@ var AGENT_BARS = 4;
8573
9625
  var AGENT_BAR_IDLE_HEIGHT_PX = 4;
8574
9626
  var AGENT_BAR_MAX_GROWTH_PX = 12;
8575
9627
  var AGENT_NOISE_GATE = 0;
8576
- var AGENT_STATE_LABELS = {
8577
- idle: "Idle",
8578
- listening: "Listening",
8579
- thinking: "Thinking",
8580
- speaking: "Talking"
9628
+ var AGENT_STATE_COPY_KEY = {
9629
+ idle: "controlBarIdle",
9630
+ listening: "controlBarListening",
9631
+ thinking: "controlBarThinking",
9632
+ speaking: "controlBarTalking"
9633
+ };
9634
+ var AGENT_STATE_ARIA_COPY_KEY = {
9635
+ idle: "controlBarAriaIdle",
9636
+ listening: "controlBarAriaListening",
9637
+ thinking: "controlBarAriaThinking",
9638
+ speaking: "controlBarAriaTalking"
8581
9639
  };
8582
9640
  function AgentActivity({
8583
9641
  state,
@@ -8590,11 +9648,15 @@ function AgentActivity({
8590
9648
  maxGrowthPx: AGENT_BAR_MAX_GROWTH_PX,
8591
9649
  noiseGate: AGENT_NOISE_GATE
8592
9650
  });
8593
- const label = isActing ? "Working" : AGENT_STATE_LABELS[state] ?? "";
9651
+ const copy = useChromeCopy();
9652
+ const stateCopyKey = AGENT_STATE_COPY_KEY[state];
9653
+ const stateAriaCopyKey = AGENT_STATE_ARIA_COPY_KEY[state];
9654
+ const label = isActing ? copy.controlBarWorking : stateCopyKey ? copy[stateCopyKey] : "";
9655
+ const ariaLabel = isActing ? copy.controlBarAriaActing : stateAriaCopyKey ? copy[stateAriaCopyKey] : fillPlaceholders(copy.controlBarAriaState, { state });
8594
9656
  return /* @__PURE__ */ jsxs20("span", {
8595
9657
  role: "status",
8596
9658
  className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-bubble",
8597
- "aria-label": isActing ? "Agent is acting" : `Agent is ${state}`,
9659
+ "aria-label": ariaLabel,
8598
9660
  children: [
8599
9661
  /* @__PURE__ */ jsx26("span", {
8600
9662
  className: "skippr:flex skippr:size-5 skippr:shrink-0 skippr:items-center skippr:justify-center",
@@ -8674,7 +9736,7 @@ function SessionControlBar() {
8674
9736
  variant,
8675
9737
  agentControls
8676
9738
  } = useLiveAgent();
8677
- const internalCtx = useContext11(LiveAgentContext);
9739
+ const internalCtx = useContext12(LiveAgentContext);
8678
9740
  if (!internalCtx) {
8679
9741
  throw new Error("SessionControlBar must be used within a <LiveAgent> provider");
8680
9742
  }
@@ -8690,6 +9752,7 @@ function SessionControlBar() {
8690
9752
  const followsPanel = variant === "floating" && isPanelOpen;
8691
9753
  const panelFollowers = followsPanel ? [panelRef] : null;
8692
9754
  const { wasDraggedRef } = useLauncherDrag(controlBarRef, commitLauncherDrop, panelFollowers, setIsDragging);
9755
+ const copy = useChromeCopy();
8693
9756
  const { isMuted, toggleMute, isScreenSharing, toggleScreenShare } = useMediaControls();
8694
9757
  const { state, mediaStreamTrack: agentMediaStreamTrack } = useAgentVoiceState();
8695
9758
  const { actionsActive, stopActions: stopActions2 } = useActionControl();
@@ -8709,7 +9772,7 @@ function SessionControlBar() {
8709
9772
  togglePause();
8710
9773
  }
8711
9774
  });
8712
- const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState24(false);
9775
+ const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState25(false);
8713
9776
  const startPushToTalk = useCallback22(() => {
8714
9777
  start();
8715
9778
  reportActivity();
@@ -8727,7 +9790,7 @@ function SessionControlBar() {
8727
9790
  onCommit: commitPushToTalk,
8728
9791
  onKeyUsed: dismissPushToTalkHint
8729
9792
  });
8730
- useEffect32(() => {
9793
+ useEffect33(() => {
8731
9794
  if (isHeld)
8732
9795
  minimizePanel();
8733
9796
  }, [isHeld, minimizePanel]);
@@ -8766,7 +9829,7 @@ function SessionControlBar() {
8766
9829
  const panelToggleButton = /* @__PURE__ */ jsx26("button", {
8767
9830
  type: "button",
8768
9831
  onClick: ifNotDragged(togglePanel),
8769
- "aria-label": isPanelOpen ? "Close panel" : agendaModule && !textMode ? "Open agenda" : "Open chat",
9832
+ "aria-label": isPanelOpen ? copy.controlBarClosePanel : agendaModule && !textMode ? copy.controlBarOpenAgenda : copy.openChatLabel,
8770
9833
  className: cn(SQUARE_BUTTON, "skippr:text-neutral-700", textMode ? "skippr:hover:bg-neutral-100" : "skippr:bg-neutral-100 skippr:hover:bg-neutral-200"),
8771
9834
  children: /* @__PURE__ */ jsx26(MessageSquare, {
8772
9835
  className: "skippr:size-5"
@@ -8781,7 +9844,7 @@ function SessionControlBar() {
8781
9844
  className: cn("skippr:absolute skippr:bottom-full skippr:z-[10000] skippr:mb-2 skippr:max-w-[280px] skippr:rounded-[14px] skippr:bg-bubble skippr:px-3.5 skippr:py-2 skippr:text-[13px] skippr:text-white skippr:shadow-[0_10px_32px_rgba(0,0,0,0.18)] skippr:[animation:skippr-agent-in_200ms_ease-out]", position === "right" ? "skippr:right-0" : "skippr:left-0"),
8782
9845
  children: liveUserTranscript ? liveUserTranscript : /* @__PURE__ */ jsx26("span", {
8783
9846
  className: "skippr:text-white/60",
8784
- children: "Listening…"
9847
+ children: copy.controlBarTranscriptListening
8785
9848
  })
8786
9849
  }),
8787
9850
  /* @__PURE__ */ jsxs20("div", {
@@ -8806,7 +9869,7 @@ function SessionControlBar() {
8806
9869
  ]
8807
9870
  }),
8808
9871
  /* @__PURE__ */ jsx26("span", {
8809
- children: "Standing by…"
9872
+ children: copy.controlBarStandingBy
8810
9873
  })
8811
9874
  ]
8812
9875
  }),
@@ -8816,8 +9879,8 @@ function SessionControlBar() {
8816
9879
  /* @__PURE__ */ jsx26("button", {
8817
9880
  type: "button",
8818
9881
  onClick: ifNotDragged(togglePause),
8819
- "aria-label": isHeld ? "Resume" : "Pause",
8820
- title: isHeld ? "Resume" : "Pause",
9882
+ "aria-label": isHeld ? copy.resumeLabel : copy.pauseLabel,
9883
+ title: isHeld ? copy.resumeLabel : copy.pauseLabel,
8821
9884
  className: cn(SQUARE_BUTTON, isHeld ? "skippr:bg-bubble skippr:text-white skippr:hover:bg-[#3a384b]" : "skippr:bg-neutral-100 skippr:text-neutral-700 skippr:hover:bg-neutral-200"),
8822
9885
  children: isHeld ? /* @__PURE__ */ jsx26(Play, {
8823
9886
  className: "skippr:size-5",
@@ -8878,7 +9941,7 @@ function SessionControlBar() {
8878
9941
  /* @__PURE__ */ jsxs20("button", {
8879
9942
  type: "button",
8880
9943
  onClick: ifNotDragged(() => void toggleMute()),
8881
- "aria-label": isMuted ? "Unmute" : "Mute",
9944
+ "aria-label": isMuted ? copy.unmuteLabel : copy.muteLabel,
8882
9945
  className: cn("skippr:group skippr:absolute skippr:top-0 skippr:left-0 skippr:z-10 skippr:flex skippr:h-[38px] skippr:items-center skippr:gap-2.5 skippr:overflow-hidden skippr:rounded-[12px] skippr:bg-bubble skippr:text-white skippr:cursor-pointer skippr:transition-[width] skippr:duration-300 skippr:ease-out", isTalking ? "skippr:justify-start skippr:pl-3.5" : "skippr:justify-center"),
8883
9946
  style: { width: isTalking ? MIC_REGION_WIDTH : MIC_SQUARE_WIDTH },
8884
9947
  children: [
@@ -8907,7 +9970,7 @@ function SessionControlBar() {
8907
9970
  showScreenShareToggle && /* @__PURE__ */ jsx26("button", {
8908
9971
  type: "button",
8909
9972
  onClick: ifNotDragged(() => void toggleScreenShare()),
8910
- "aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
9973
+ "aria-label": isScreenSharing ? copy.stopSharingScreenLabel : copy.shareScreenLabel,
8911
9974
  className: cn(SQUARE_BUTTON, isScreenSharing ? "skippr:bg-bubble skippr:text-white skippr:hover:bg-[#3a384b]" : "skippr:bg-neutral-100 skippr:text-neutral-700 skippr:hover:bg-neutral-200"),
8912
9975
  children: isScreenSharing ? /* @__PURE__ */ jsx26(MonitorOff, {
8913
9976
  className: "skippr:size-5"
@@ -8919,8 +9982,8 @@ function SessionControlBar() {
8919
9982
  showActionControl && /* @__PURE__ */ jsx26("button", {
8920
9983
  type: "button",
8921
9984
  onClick: ifNotDragged(() => void stopActions2()),
8922
- "aria-label": "Stop actions",
8923
- title: "Stop actions",
9985
+ "aria-label": copy.stopActionsLabel,
9986
+ title: copy.stopActionsLabel,
8924
9987
  className: cn(SQUARE_BUTTON, "skippr:bg-red-100 skippr:text-red-600 skippr:hover:bg-red-200"),
8925
9988
  children: /* @__PURE__ */ jsx26(StopActionsIcon, {
8926
9989
  className: "skippr:size-5"
@@ -8937,7 +10000,7 @@ function SessionControlBar() {
8937
10000
  type: "button",
8938
10001
  onClick: ifNotDragged(() => void pauseSession()),
8939
10002
  disabled: isPausing,
8940
- "aria-label": "End session",
10003
+ "aria-label": copy.endSessionLabel,
8941
10004
  "aria-busy": isPausing,
8942
10005
  className: cn("skippr:absolute skippr:top-1/2 skippr:z-20 skippr:flex skippr:h-[54px] skippr:w-[50px] skippr:-mt-[27px] skippr:items-center", position === "right" ? "skippr:-right-8 skippr:justify-start skippr:pl-2.5" : "skippr:-left-8 skippr:justify-end skippr:pr-2.5", "skippr:rounded-[16px] skippr:bg-red-500 skippr:text-white", "skippr:shadow-[0_4px_14px_rgba(239,68,68,0.45)]", "skippr:transition-colors skippr:duration-150", "skippr:[animation:skippr-toolset-pop_280ms_cubic-bezier(0.22,1,0.36,1)]", isPausing ? "skippr:cursor-default" : "skippr:cursor-pointer skippr:hover:bg-red-600"),
8943
10006
  children: /* @__PURE__ */ jsxs20("span", {
@@ -8980,7 +10043,7 @@ function SessionControlBar() {
8980
10043
  }
8981
10044
 
8982
10045
  // src/components/ShadowHost.tsx
8983
- import { useLayoutEffect as useLayoutEffect2, useRef as useRef26, useState as useState25 } from "react";
10046
+ import { useLayoutEffect as useLayoutEffect2, useRef as useRef27, useState as useState26 } from "react";
8984
10047
  import { createPortal } from "react-dom";
8985
10048
  import { jsx as jsx27, Fragment as Fragment3 } from "react/jsx-runtime";
8986
10049
  var PROPERTIES_STYLE_ID = "skippr-tw-properties";
@@ -9001,10 +10064,10 @@ function ShadowHost({
9001
10064
  accentColor,
9002
10065
  className
9003
10066
  }) {
9004
- const hostRef = useRef26(null);
9005
- const [shadowRoot, setShadowRoot] = useState25(null);
10067
+ const hostRef = useRef27(null);
10068
+ const [shadowRoot, setShadowRoot] = useState26(null);
9006
10069
  const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
9007
- @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}}`;
10070
+ @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-\\[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}}`;
9008
10071
  const hostStyle = accentColor && isHexColor(accentColor) ? {
9009
10072
  "--skippr-brand": accentColor,
9010
10073
  "--skippr-brand-foreground": brandForeground(accentColor),
@@ -9036,14 +10099,14 @@ function ShadowHost({
9036
10099
  }
9037
10100
 
9038
10101
  // src/components/Sidebar.tsx
9039
- import { useCallback as useCallback28, useContext as useContext18, useEffect as useEffect38, useRef as useRef33 } from "react";
10102
+ import { useCallback as useCallback28, useContext as useContext19, useEffect as useEffect39, useRef as useRef34 } from "react";
9040
10103
 
9041
10104
  // src/hooks/useCombinedMessages.ts
9042
- import { useContext as useContext12, useMemo as useMemo8 } from "react";
10105
+ import { useContext as useContext13, useMemo as useMemo9 } from "react";
9043
10106
 
9044
10107
  // src/hooks/useChatMessages.ts
9045
10108
  import { useChat, useLocalParticipant as useLocalParticipant10 } from "@livekit/components-react/hooks";
9046
- import { useMemo as useMemo6 } from "react";
10109
+ import { useMemo as useMemo7 } from "react";
9047
10110
 
9048
10111
  // src/lib/filterSystemMessages.ts
9049
10112
  var SYSTEM_MESSAGE_PATTERN = /^\[\w+\]$/;
@@ -9056,7 +10119,7 @@ function useChatMessages() {
9056
10119
  const { chatMessages: rawMessages, send, isSending } = useChat();
9057
10120
  const { localParticipant } = useLocalParticipant10();
9058
10121
  const localIdentity = localParticipant.identity;
9059
- const chatMessages = useMemo6(() => {
10122
+ const chatMessages = useMemo7(() => {
9060
10123
  const sortedMessages = rawMessages.map((msg) => ({
9061
10124
  id: msg.id,
9062
10125
  role: msg.from?.identity === localIdentity ? "user" : "assistant",
@@ -9071,19 +10134,19 @@ function useChatMessages() {
9071
10134
 
9072
10135
  // src/hooks/useStreamingTranscript.ts
9073
10136
  import { useLocalParticipant as useLocalParticipant11 } from "@livekit/components-react/hooks";
9074
- import { useMemo as useMemo7, useRef as useRef27 } from "react";
10137
+ import { useMemo as useMemo8, useRef as useRef28 } from "react";
9075
10138
  function useStreamingTranscript() {
9076
10139
  const transcriptions = useSharedTranscriptions();
9077
10140
  const { localParticipant } = useLocalParticipant11();
9078
10141
  const { isCapturingSpeech } = useVoiceTurnContext();
9079
10142
  const localIdentity = localParticipant.identity;
9080
- const priorUserStreamIdsRef = useRef27(new Set);
9081
- const wasCapturingSpeechRef = useRef27(false);
10143
+ const priorUserStreamIdsRef = useRef28(new Set);
10144
+ const wasCapturingSpeechRef = useRef28(false);
9082
10145
  if (isCapturingSpeech && !wasCapturingSpeechRef.current) {
9083
10146
  priorUserStreamIdsRef.current = new Set(transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity).map((stream) => stream.streamInfo.id));
9084
10147
  }
9085
10148
  wasCapturingSpeechRef.current = isCapturingSpeech;
9086
- const transcriptMessages = useMemo7(() => filterSystemMessages(transcriptions.filter((stream) => stream.text.trim().length > 0).filter((stream) => {
10149
+ const transcriptMessages = useMemo8(() => filterSystemMessages(transcriptions.filter((stream) => stream.text.trim().length > 0).filter((stream) => {
9087
10150
  if (!isCapturingSpeech)
9088
10151
  return true;
9089
10152
  const isUser = stream.participantInfo.identity === localIdentity;
@@ -9121,15 +10184,15 @@ function useCombinedMessages() {
9121
10184
  const { transcriptMessages } = useStreamingTranscript();
9122
10185
  const { chatMessages, sendChatMessage, isSendingChat } = useChatMessages();
9123
10186
  const { state: agentState } = useAgentVoiceState();
9124
- const historyMessages = useContext12(LiveAgentContext)?.historyMessages ?? [];
9125
- const liveMessages = useMemo8(() => {
10187
+ const historyMessages = useContext13(LiveAgentContext)?.historyMessages ?? [];
10188
+ const liveMessages = useMemo9(() => {
9126
10189
  if (chatMessages.length === 0)
9127
10190
  return transcriptMessages;
9128
10191
  if (transcriptMessages.length === 0)
9129
10192
  return chatMessages;
9130
10193
  return mergeChatsIntoTranscripts(transcriptMessages, chatMessages);
9131
10194
  }, [transcriptMessages, chatMessages]);
9132
- const allMessages = useMemo8(() => {
10195
+ const allMessages = useMemo9(() => {
9133
10196
  if (historyMessages.length === 0)
9134
10197
  return liveMessages;
9135
10198
  const seenIds = new Set(liveMessages.map((message) => message.id));
@@ -9169,7 +10232,7 @@ function useLinkCard() {
9169
10232
  }
9170
10233
 
9171
10234
  // src/hooks/usePhaseUpdates.ts
9172
- import { useCallback as useCallback24, useContext as useContext13, useEffect as useEffect33 } from "react";
10235
+ import { useCallback as useCallback24, useContext as useContext14, useEffect as useEffect34, useMemo as useMemo10 } from "react";
9173
10236
  function parsePhases(json) {
9174
10237
  try {
9175
10238
  const data = JSON.parse(json);
@@ -9182,17 +10245,27 @@ function parsePhases(json) {
9182
10245
  function usePhaseUpdates() {
9183
10246
  const parse = useCallback24(parsePhases, []);
9184
10247
  const livePhases = useAgentState("phases", parse, []);
9185
- const ctx = useContext13(LiveAgentContext);
9186
- useEffect33(() => {
10248
+ const ctx = useContext14(LiveAgentContext);
10249
+ useEffect34(() => {
9187
10250
  if (livePhases.length > 0)
9188
10251
  ctx?.setPhasesSnapshot(livePhases);
9189
10252
  }, [livePhases, ctx?.setPhasesSnapshot]);
9190
- const phases = livePhases.length > 0 ? livePhases : ctx?.phasesSnapshot ?? [];
10253
+ const source = livePhases.length > 0 ? livePhases : ctx?.phasesSnapshot ?? [];
10254
+ const labels = ctx?.phaseLabels;
10255
+ const operatingAgentId = ctx?.agentId ?? null;
10256
+ const phases = useMemo10(() => {
10257
+ if (!labels?.agentId || labels.agentId !== operatingAgentId)
10258
+ return source;
10259
+ return source.map((phase) => {
10260
+ const displayName = labels.byPhaseName[phase.name];
10261
+ return displayName ? { ...phase, displayName } : phase;
10262
+ });
10263
+ }, [source, labels, operatingAgentId]);
9191
10264
  return { phases };
9192
10265
  }
9193
10266
 
9194
10267
  // src/hooks/useSessionRemaining.ts
9195
- import { useEffect as useEffect34, useRef as useRef28, useState as useState26 } from "react";
10268
+ import { useEffect as useEffect35, useRef as useRef29, useState as useState27 } from "react";
9196
10269
 
9197
10270
  // src/lib/format.ts
9198
10271
  function formatTime(seconds) {
@@ -9208,9 +10281,9 @@ function parseNumber(s) {
9208
10281
  // src/hooks/useSessionRemaining.ts
9209
10282
  function useSessionRemaining() {
9210
10283
  const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
9211
- const endTimeRef = useRef28(null);
9212
- const [remaining, setRemaining] = useState26(null);
9213
- useEffect34(() => {
10284
+ const endTimeRef = useRef29(null);
10285
+ const [remaining, setRemaining] = useState27(null);
10286
+ useEffect35(() => {
9214
10287
  if (maxCallDuration === null || endTimeRef.current !== null)
9215
10288
  return;
9216
10289
  const endTime = Date.now() + maxCallDuration * 1000;
@@ -9296,20 +10369,20 @@ function panelTransformOrigin(popsDown, isLeftAligned) {
9296
10369
  }
9297
10370
 
9298
10371
  // src/components/ChatHeader.tsx
9299
- import { useContext as useContext15 } from "react";
10372
+ import { useContext as useContext16 } from "react";
9300
10373
 
9301
10374
  // src/hooks/useTextMode.ts
9302
10375
  import { useLocalParticipant as useLocalParticipant12 } from "@livekit/components-react/hooks";
9303
- import { useCallback as useCallback25, useContext as useContext14, useRef as useRef29 } from "react";
10376
+ import { useCallback as useCallback25, useContext as useContext15, useRef as useRef30 } from "react";
9304
10377
  var textEncoder7 = new TextEncoder;
9305
10378
  function useTextMode() {
9306
- const ctx = useContext14(LiveAgentContext);
10379
+ const ctx = useContext15(LiveAgentContext);
9307
10380
  if (!ctx) {
9308
10381
  throw new Error("useTextMode must be used within a <LiveAgent> provider");
9309
10382
  }
9310
10383
  const { textMode, setTextModeState, sidebarTab, setSidebarTab } = ctx;
9311
10384
  const { localParticipant } = useLocalParticipant12();
9312
- const confirmedTextModeRef = useRef29(false);
10385
+ const confirmedTextModeRef = useRef30(false);
9313
10386
  const toggleTextMode = useCallback25(async () => {
9314
10387
  const next = !textMode;
9315
10388
  setTextModeState(next);
@@ -9336,7 +10409,7 @@ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
9336
10409
  var TABS_PILL_BASE = "skippr:cursor-pointer skippr:rounded-full skippr:border-none skippr:bg-transparent skippr:px-[9px] skippr:py-[3px] skippr:text-[11.5px] skippr:font-semibold skippr:text-[#8b877f] skippr:transition-colors";
9337
10410
  var TABS_PILL_ACTIVE = "skippr:bg-white skippr:text-[#2D2D3F] skippr:shadow-[0_1px_2px_rgba(45,45,63,0.08)]";
9338
10411
  function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9339
- const ctx = useContext15(LiveAgentContext);
10412
+ const ctx = useContext16(LiveAgentContext);
9340
10413
  if (!ctx) {
9341
10414
  throw new Error("ChatHeader must be used within a <LiveAgent> provider");
9342
10415
  }
@@ -9352,6 +10425,7 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9352
10425
  } = ctx;
9353
10426
  const { isHeld } = useSessionHoldContext();
9354
10427
  const { textMode, toggleTextMode } = useTextMode();
10428
+ const copy = useChromeCopy();
9355
10429
  const defaultModule = displayModules.find((m) => m.id === defaultAgentId) ?? null;
9356
10430
  const displayedMode = agentMode ?? defaultModule?.mode ?? null;
9357
10431
  const showAgenda = displayedMode !== AGENT_MODE.AlwaysOn;
@@ -9362,7 +10436,7 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9362
10436
  children: [
9363
10437
  showAgenda ? /* @__PURE__ */ jsxs21("div", {
9364
10438
  role: "tablist",
9365
- "aria-label": "Panel",
10439
+ "aria-label": copy.chatPanelLabel,
9366
10440
  "data-skippr-no-drag": "",
9367
10441
  className: "skippr:flex skippr:gap-[2px] skippr:rounded-full skippr:bg-[#f4f2ee] skippr:p-[2px]",
9368
10442
  children: [
@@ -9372,7 +10446,7 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9372
10446
  "aria-selected": sidebarTab === "chat",
9373
10447
  onClick: () => setSidebarTab("chat"),
9374
10448
  className: cn(TABS_PILL_BASE, sidebarTab === "chat" && TABS_PILL_ACTIVE),
9375
- children: "chat"
10449
+ children: copy.chatTabChat
9376
10450
  }),
9377
10451
  /* @__PURE__ */ jsx28("button", {
9378
10452
  type: "button",
@@ -9380,12 +10454,12 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9380
10454
  "aria-selected": sidebarTab === "agenda",
9381
10455
  onClick: () => setSidebarTab("agenda"),
9382
10456
  className: cn(TABS_PILL_BASE, sidebarTab === "agenda" && TABS_PILL_ACTIVE),
9383
- children: "agenda"
10457
+ children: copy.chatTabAgenda
9384
10458
  })
9385
10459
  ]
9386
10460
  }) : /* @__PURE__ */ jsx28("span", {
9387
10461
  className: "skippr:text-[12.5px] skippr:font-semibold skippr:tracking-[-0.01em] skippr:text-[#2D2D3F]",
9388
- children: "Skippr AI"
10462
+ children: copy.chatPanelTitle
9389
10463
  }),
9390
10464
  /* @__PURE__ */ jsx28("div", {
9391
10465
  className: "skippr:flex-1"
@@ -9394,8 +10468,8 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9394
10468
  type: "button",
9395
10469
  disabled: isHeld,
9396
10470
  onClick: () => void toggleTextMode(),
9397
- title: textMode ? "Switch to voice" : "Switch to text",
9398
- "aria-label": textMode ? "Switch to voice" : "Switch to text",
10471
+ title: textMode ? copy.chatSwitchToVoice : copy.chatSwitchToText,
10472
+ "aria-label": textMode ? copy.chatSwitchToVoice : copy.chatSwitchToText,
9399
10473
  "data-skippr-no-drag": "",
9400
10474
  className: "skippr:flex skippr:h-[26px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:gap-[5px] skippr:rounded-full skippr:border skippr:border-[rgba(45,45,63,0.12)] skippr:bg-white skippr:pl-[9px] skippr:pr-[10px] skippr:text-[11px] skippr:font-semibold skippr:text-[#5c5850] skippr:transition-colors skippr:hover:bg-[#f6f4f0] skippr:hover:text-[#2D2D3F] skippr:disabled:cursor-not-allowed skippr:disabled:opacity-50",
9401
10475
  children: [
@@ -9406,7 +10480,7 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9406
10480
  className: "skippr:size-[13px]",
9407
10481
  strokeWidth: 2
9408
10482
  }),
9409
- textMode ? "voice" : "text"
10483
+ textMode ? copy.chatToggleVoice : copy.chatToggleText
9410
10484
  ]
9411
10485
  }),
9412
10486
  minimizable && /* @__PURE__ */ jsx28("button", {
@@ -9415,8 +10489,8 @@ function ChatHeader({ wasDraggedRef, draggable, headerRef }) {
9415
10489
  if (!wasDraggedRef.current)
9416
10490
  minimizePanel();
9417
10491
  },
9418
- "aria-label": "Close",
9419
- title: "Close",
10492
+ "aria-label": copy.closeLabel,
10493
+ title: copy.closeLabel,
9420
10494
  "data-skippr-no-drag": "",
9421
10495
  className: "skippr:flex skippr:size-[26px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:bg-transparent skippr:text-[#a8a49c] skippr:transition-colors skippr:hover:bg-[#f4f2ee] skippr:hover:text-[#2D2D3F]",
9422
10496
  children: /* @__PURE__ */ jsx28(X, {
@@ -9481,26 +10555,27 @@ function LogoMark({ className, decorative }) {
9481
10555
  }
9482
10556
 
9483
10557
  // src/components/MessageList.tsx
9484
- import { useCallback as useCallback27, useLayoutEffect as useLayoutEffect3, useRef as useRef32, useState as useState30 } from "react";
10558
+ import { useCallback as useCallback27, useLayoutEffect as useLayoutEffect3, useRef as useRef33, useState as useState31 } from "react";
9485
10559
 
9486
10560
  // src/components/ChatInput.tsx
9487
- import { useContext as useContext16, useEffect as useEffect35, useRef as useRef30, useState as useState27 } from "react";
10561
+ import { useContext as useContext17, useEffect as useEffect36, useRef as useRef31, useState as useState28 } from "react";
9488
10562
  import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
9489
10563
  var MAX_INPUT_HEIGHT = 60;
9490
10564
  function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
9491
- const ctx = useContext16(LiveAgentContext);
10565
+ const ctx = useContext17(LiveAgentContext);
10566
+ const copy = useChromeCopy();
9492
10567
  const reportChatActivity = ctx?.reportChatActivity;
9493
10568
  const isPanelOpen = ctx?.isPanelOpen;
9494
- const [localDraft, setLocalDraft] = useState27("");
10569
+ const [localDraft, setLocalDraft] = useState28("");
9495
10570
  const inputText = ctx?.chatDraft ?? localDraft;
9496
10571
  const setInputText = ctx?.setChatDraft ?? setLocalDraft;
9497
- const textareaRef = useRef30(null);
10572
+ const textareaRef = useRef31(null);
9498
10573
  const canSend = inputText.trim().length > 0 && !isSendingChat;
9499
- useEffect35(() => {
10574
+ useEffect36(() => {
9500
10575
  if (autoFocus && isPanelOpen !== false)
9501
10576
  textareaRef.current?.focus();
9502
10577
  }, [autoFocus, isPanelOpen]);
9503
- useEffect35(() => {
10578
+ useEffect36(() => {
9504
10579
  const el = textareaRef.current;
9505
10580
  if (!el)
9506
10581
  return;
@@ -9538,15 +10613,15 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
9538
10613
  value: inputText,
9539
10614
  onChange: handleChange,
9540
10615
  onKeyDown: handleKeyDown,
9541
- placeholder: "Type a message…",
9542
- "aria-label": "Message",
10616
+ placeholder: copy.chatMessagePlaceholder,
10617
+ "aria-label": copy.chatMessageLabel,
9543
10618
  className: "skippr:min-w-0 skippr:flex-1 skippr:resize-none skippr:overflow-y-auto skippr:rounded-[10px] skippr:border skippr:border-[rgba(45,45,63,0.14)] skippr:bg-white skippr:px-[10px] skippr:py-[7px] skippr:text-[13px] skippr:font-medium skippr:leading-5 skippr:text-[#2D2D3F] skippr:shadow-[0_1px_2px_rgba(45,45,63,0.05)] skippr:outline-none skippr:focus-visible:border-[var(--skippr-brand-ring)] skippr:focus-visible:ring-2 skippr:focus-visible:ring-[var(--skippr-brand-ring)] skippr:placeholder:text-[#b0aca4]",
9544
10619
  style: { maxHeight: `${MAX_INPUT_HEIGHT}px` }
9545
10620
  }),
9546
10621
  /* @__PURE__ */ jsx31("button", {
9547
10622
  type: "submit",
9548
10623
  disabled: !canSend,
9549
- "aria-label": "Send message",
10624
+ "aria-label": copy.chatSendMessageLabel,
9550
10625
  style: {
9551
10626
  background: canSend ? "var(--skippr-brand, #2bc0ae)" : "#cdd8d5",
9552
10627
  color: "var(--skippr-brand-foreground, #2d2b3d)"
@@ -9591,7 +10666,7 @@ function ChatMessage({ message }) {
9591
10666
  }
9592
10667
 
9593
10668
  // src/components/LinkCard.tsx
9594
- import { useCallback as useCallback26, useEffect as useEffect36, useRef as useRef31, useState as useState28 } from "react";
10669
+ import { useCallback as useCallback26, useEffect as useEffect37, useRef as useRef32, useState as useState29 } from "react";
9595
10670
 
9596
10671
  // src/lib/clipboard.ts
9597
10672
  async function copyToClipboard(text) {
@@ -9608,15 +10683,16 @@ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
9608
10683
  var COPIED_RESET_MS = 2000;
9609
10684
  var DISMISS_AFTER_COPY_MS = 3000;
9610
10685
  function LinkCard({ card, onDismiss }) {
9611
- const [copied, setCopied] = useState28(false);
9612
- const dismissTimerRef = useRef31(null);
9613
- useEffect36(() => {
10686
+ const [copied, setCopied] = useState29(false);
10687
+ const copy = useChromeCopy();
10688
+ const dismissTimerRef = useRef32(null);
10689
+ useEffect37(() => {
9614
10690
  if (!copied)
9615
10691
  return;
9616
10692
  const timer = setTimeout(() => setCopied(false), COPIED_RESET_MS);
9617
10693
  return () => clearTimeout(timer);
9618
10694
  }, [copied]);
9619
- useEffect36(() => {
10695
+ useEffect37(() => {
9620
10696
  return () => {
9621
10697
  if (dismissTimerRef.current)
9622
10698
  clearTimeout(dismissTimerRef.current);
@@ -9642,7 +10718,7 @@ function LinkCard({ card, onDismiss }) {
9642
10718
  /* @__PURE__ */ jsx33("button", {
9643
10719
  type: "button",
9644
10720
  onClick: onDismiss,
9645
- "aria-label": "Dismiss link",
10721
+ "aria-label": copy.cardDismissLink,
9646
10722
  className: "skippr:-mr-1 skippr:-mt-1 skippr:flex skippr:size-6 skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:text-muted-foreground skippr:transition-colors skippr:hover:bg-muted skippr:hover:text-foreground",
9647
10723
  children: /* @__PURE__ */ jsx33(X, {
9648
10724
  className: "skippr:size-3.5",
@@ -9667,21 +10743,21 @@ function LinkCard({ card, onDismiss }) {
9667
10743
  /* @__PURE__ */ jsx33(ExternalLink, {
9668
10744
  className: "skippr:size-4"
9669
10745
  }),
9670
- "Open"
10746
+ copy.cardOpenLink
9671
10747
  ]
9672
10748
  }),
9673
10749
  /* @__PURE__ */ jsxs26(Button, {
9674
10750
  variant: "outline",
9675
10751
  className: "skippr:flex-1 skippr:py-2",
9676
10752
  onClick: handleCopy,
9677
- "aria-label": "Copy link",
10753
+ "aria-label": copy.cardCopyLink,
9678
10754
  children: [
9679
10755
  copied ? /* @__PURE__ */ jsx33(Check, {
9680
10756
  className: "skippr:size-4"
9681
10757
  }) : /* @__PURE__ */ jsx33(Copy, {
9682
10758
  className: "skippr:size-4"
9683
10759
  }),
9684
- copied ? "Copied" : "Copy link"
10760
+ copied ? copy.cardCopied : copy.cardCopyLink
9685
10761
  ]
9686
10762
  })
9687
10763
  ]
@@ -9691,7 +10767,7 @@ function LinkCard({ card, onDismiss }) {
9691
10767
  }
9692
10768
 
9693
10769
  // src/components/PlanCard.tsx
9694
- import { useEffect as useEffect37, useState as useState29 } from "react";
10770
+ import { useEffect as useEffect38, useState as useState30 } from "react";
9695
10771
  import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
9696
10772
  var APPROVE_MESSAGE = "Yes, go ahead.";
9697
10773
  var CANCEL_MESSAGE = "No, cancel that.";
@@ -9718,9 +10794,10 @@ function StepIcon({ status }) {
9718
10794
  });
9719
10795
  }
9720
10796
  function PlanCard({ plan, sendChatMessage, onDismiss }) {
10797
+ const copy = useChromeCopy();
9721
10798
  const awaitingApproval = plan.state === "proposed";
9722
- const [isApproving, setIsApproving] = useState29(false);
9723
- const [lastPlanId, setLastPlanId] = useState29(plan.planId);
10799
+ const [isApproving, setIsApproving] = useState30(false);
10800
+ const [lastPlanId, setLastPlanId] = useState30(plan.planId);
9724
10801
  if (plan.planId !== lastPlanId) {
9725
10802
  setLastPlanId(plan.planId);
9726
10803
  setIsApproving(false);
@@ -9732,13 +10809,13 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9732
10809
  setIsApproving(false);
9733
10810
  });
9734
10811
  };
9735
- useEffect37(() => {
10812
+ useEffect38(() => {
9736
10813
  if (!isApproving)
9737
10814
  return;
9738
10815
  const timer = setTimeout(() => setIsApproving(false), APPROVING_RESET_MS);
9739
10816
  return () => clearTimeout(timer);
9740
10817
  }, [isApproving]);
9741
- useEffect37(() => {
10818
+ useEffect38(() => {
9742
10819
  if (plan.state !== "completed")
9743
10820
  return;
9744
10821
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
@@ -9749,7 +10826,7 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9749
10826
  children: [
9750
10827
  /* @__PURE__ */ jsx34("p", {
9751
10828
  className: "skippr:mb-3 skippr:text-sm skippr:font-semibold skippr:leading-snug skippr:text-foreground",
9752
- children: "Plan"
10829
+ children: copy.planTitle
9753
10830
  }),
9754
10831
  /* @__PURE__ */ jsx34("div", {
9755
10832
  className: "skippr:space-y-2",
@@ -9777,7 +10854,7 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9777
10854
  isApproving && /* @__PURE__ */ jsx34("span", {
9778
10855
  className: "skippr:size-3 skippr:shrink-0 skippr:animate-spin skippr:rounded-full skippr:border-2 skippr:border-white/30 skippr:border-t-white"
9779
10856
  }),
9780
- isApproving ? "Approving…" : "Approve"
10857
+ isApproving ? copy.planApproving : copy.planApprove
9781
10858
  ]
9782
10859
  }),
9783
10860
  /* @__PURE__ */ jsx34(Button, {
@@ -9785,7 +10862,7 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9785
10862
  className: "skippr:flex-1 skippr:py-2",
9786
10863
  disabled: isApproving,
9787
10864
  onClick: () => sendChatMessage(CANCEL_MESSAGE),
9788
- children: "Cancel"
10865
+ children: copy.planCancel
9789
10866
  })
9790
10867
  ]
9791
10868
  })
@@ -9796,13 +10873,14 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
9796
10873
  // src/components/TypingIndicator.tsx
9797
10874
  import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
9798
10875
  function TypingIndicator() {
10876
+ const copy = useChromeCopy();
9799
10877
  return /* @__PURE__ */ jsx35("div", {
9800
10878
  className: "skippr:flex skippr:items-start skippr:gap-2 skippr:animate-skippr-tab-fade",
9801
10879
  children: /* @__PURE__ */ jsxs28("div", {
9802
10880
  className: "skippr:inline-flex skippr:items-center skippr:gap-1 skippr:rounded-2xl skippr:border skippr:border-primary/20 skippr:bg-primary/10 skippr:px-4 skippr:py-2 skippr:text-xs skippr:text-primary",
9803
10881
  children: [
9804
10882
  /* @__PURE__ */ jsx35("span", {
9805
- children: "Agent is analyzing your screen"
10883
+ children: copy.chatAnalyzingScreen
9806
10884
  }),
9807
10885
  /* @__PURE__ */ jsxs28("span", {
9808
10886
  className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
@@ -9836,17 +10914,18 @@ function MessageList({
9836
10914
  autoFocus = false,
9837
10915
  readOnly = false
9838
10916
  }) {
9839
- const containerRef = useRef32(null);
9840
- const isPinnedToBottom = useRef32(true);
9841
- const lastSeenMessageId = useRef32(undefined);
9842
- const [showJumpToLatest, setShowJumpToLatest] = useState30(false);
10917
+ const copy = useChromeCopy();
10918
+ const containerRef = useRef33(null);
10919
+ const isPinnedToBottom = useRef33(true);
10920
+ const lastSeenMessageId = useRef33(undefined);
10921
+ const [showJumpToLatest, setShowJumpToLatest] = useState31(false);
9843
10922
  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
9844
- const [dismissedPlanId, setDismissedPlanId] = useState30(null);
10923
+ const [dismissedPlanId, setDismissedPlanId] = useState31(null);
9845
10924
  const dismissPlan = useCallback27(() => {
9846
10925
  if (plan)
9847
10926
  setDismissedPlanId(plan.planId);
9848
10927
  }, [plan]);
9849
- const [dismissedLinkCardId, setDismissedLinkCardId] = useState30(null);
10928
+ const [dismissedLinkCardId, setDismissedLinkCardId] = useState31(null);
9850
10929
  const dismissLinkCard = useCallback27(() => {
9851
10930
  if (linkCard)
9852
10931
  setDismissedLinkCardId(linkCard.cardId);
@@ -9897,9 +10976,9 @@ function MessageList({
9897
10976
  children: [
9898
10977
  messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */ jsx36("p", {
9899
10978
  className: "skippr:px-2 skippr:py-6 skippr:text-center skippr:text-sm skippr:text-muted-foreground",
9900
- children: "No messages in this conversation yet."
10979
+ children: copy.chatEmptyConversation
9901
10980
  }) : /* @__PURE__ */ jsx36(LoadingDots, {
9902
- label: "Waiting for conversation to begin..."
10981
+ label: copy.chatWaitingToBegin
9903
10982
  })),
9904
10983
  messages.map((message) => /* @__PURE__ */ jsx36(ChatMessage, {
9905
10984
  message
@@ -9910,7 +10989,7 @@ function MessageList({
9910
10989
  showJumpToLatest && /* @__PURE__ */ jsx36("button", {
9911
10990
  type: "button",
9912
10991
  onClick: jumpToLatest,
9913
- "aria-label": "Jump to latest message",
10992
+ "aria-label": copy.chatJumpToLatest,
9914
10993
  className: "skippr:-translate-x-1/2 skippr:absolute skippr:bottom-3 skippr:left-1/2 skippr:flex skippr:min-h-11 skippr:min-w-11 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:border skippr:border-border skippr:bg-background skippr:p-1.5 skippr:text-foreground skippr:shadow-md skippr:transition-colors skippr:hover:bg-muted",
9915
10994
  children: /* @__PURE__ */ jsx36(ChevronDown, {
9916
10995
  className: "skippr:size-4"
@@ -9945,16 +11024,18 @@ function MessageList({
9945
11024
  }
9946
11025
 
9947
11026
  // src/components/SessionAgenda.tsx
9948
- import { useContext as useContext17 } from "react";
11027
+ import { useContext as useContext18 } from "react";
9949
11028
  import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
9950
11029
  function SessionAgenda({ phases, hasStarted }) {
9951
- const ctx = useContext17(LiveAgentContext);
9952
- const title = ctx?.activeModule?.name ?? "Agenda";
11030
+ const ctx = useContext18(LiveAgentContext);
11031
+ const copy = useChromeCopy();
11032
+ const sessionTitle = ctx?.phaseLabels.agentId && ctx.phaseLabels.agentId === ctx.agentId ? ctx.phaseLabels.agentName : undefined;
11033
+ const title = sessionTitle ?? ctx?.activeModule?.name ?? copy.agendaTitle;
9953
11034
  if (phases.length === 0 || !hasStarted) {
9954
11035
  return /* @__PURE__ */ jsx37("div", {
9955
11036
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
9956
11037
  children: /* @__PURE__ */ jsx37(LoadingDots, {
9957
- label: "Waiting for agenda to load..."
11038
+ label: copy.agendaLoading
9958
11039
  })
9959
11040
  });
9960
11041
  }
@@ -9967,26 +11048,21 @@ function SessionAgenda({ phases, hasStarted }) {
9967
11048
  className: "skippr:flex-1 skippr:overflow-y-auto skippr:p-[14px]",
9968
11049
  children: [
9969
11050
  /* @__PURE__ */ jsxs30("div", {
9970
- className: "skippr:mb-2 skippr:flex skippr:items-baseline skippr:justify-between",
11051
+ className: "skippr:mb-2 skippr:flex skippr:items-baseline skippr:justify-between skippr:gap-2",
9971
11052
  children: [
9972
11053
  /* @__PURE__ */ jsx37("span", {
9973
- className: "skippr:text-[12.5px] skippr:font-semibold skippr:text-[#2D2D3F]",
11054
+ className: "skippr:min-w-0 skippr:text-[12.5px] skippr:font-semibold skippr:text-[#2D2D3F]",
9974
11055
  children: title
9975
11056
  }),
9976
- /* @__PURE__ */ jsxs30("span", {
9977
- className: "skippr:text-[11px] skippr:font-semibold skippr:text-[var(--skippr-brand-deep)]",
9978
- children: [
9979
- "step ",
9980
- currentStep,
9981
- " of ",
9982
- total
9983
- ]
11057
+ /* @__PURE__ */ jsx37("span", {
11058
+ className: "skippr:shrink-0 skippr:whitespace-nowrap skippr:text-[11px] skippr:font-semibold skippr:text-[var(--skippr-brand-deep)]",
11059
+ children: fillPlaceholders(copy.agendaProgress, { step: currentStep, total })
9984
11060
  })
9985
11061
  ]
9986
11062
  }),
9987
11063
  /* @__PURE__ */ jsx37("div", {
9988
11064
  role: "progressbar",
9989
- "aria-label": "Agenda progress",
11065
+ "aria-label": copy.agendaProgressLabel,
9990
11066
  "aria-valuenow": Math.round(progressPct),
9991
11067
  "aria-valuemin": 0,
9992
11068
  "aria-valuemax": 100,
@@ -10018,12 +11094,12 @@ function SessionAgenda({ phases, hasStarted }) {
10018
11094
  className: "skippr:size-[19px] skippr:shrink-0 skippr:rounded-full skippr:border-2 skippr:border-[#d8d3ca] skippr:bg-white"
10019
11095
  }),
10020
11096
  /* @__PURE__ */ jsx37("span", {
10021
- className: cn("skippr:text-[12.5px]", isActive || isCompleted ? "skippr:font-semibold skippr:text-[#2D2D3F]" : "skippr:font-medium skippr:text-[#a8a49c]"),
10022
- children: phase.name
11097
+ className: cn("skippr:min-w-0 skippr:text-[12.5px]", isActive || isCompleted ? "skippr:font-semibold skippr:text-[#2D2D3F]" : "skippr:font-medium skippr:text-[#a8a49c]"),
11098
+ children: phase.displayName ?? phase.name
10023
11099
  }),
10024
11100
  isActive && /* @__PURE__ */ jsx37("span", {
10025
- className: "skippr:ml-auto skippr:text-[9.5px] skippr:font-bold skippr:uppercase skippr:tracking-[0.05em] skippr:text-[var(--skippr-brand-deep)]",
10026
- children: "now"
11101
+ className: "skippr:ml-auto skippr:shrink-0 skippr:whitespace-nowrap skippr:text-[9.5px] skippr:font-bold skippr:uppercase skippr:tracking-[0.05em] skippr:text-[var(--skippr-brand-deep)]",
11102
+ children: copy.agendaNowBadge
10027
11103
  })
10028
11104
  ]
10029
11105
  }, phase.name);
@@ -10036,19 +11112,19 @@ function SessionAgenda({ phases, hasStarted }) {
10036
11112
  import { jsx as jsx38 } from "react/jsx-runtime";
10037
11113
  var SESSION_WARNING_THRESHOLD_SECS = 60;
10038
11114
  function SessionWarningBanner({ remaining }) {
11115
+ const copy = useChromeCopy();
10039
11116
  if (remaining === null || remaining <= 0 || remaining > SESSION_WARNING_THRESHOLD_SECS)
10040
11117
  return null;
10041
11118
  return /* @__PURE__ */ jsx38("div", {
10042
11119
  "data-testid": "session-warning-banner",
10043
11120
  role: "alert",
10044
11121
  className: "skippr:bg-red-50 skippr:px-4 skippr:py-1.5 skippr:text-center skippr:text-xs skippr:font-medium skippr:text-red-700",
10045
- children: "Session ending soon"
11122
+ children: copy.sessionEndingSoon
10046
11123
  });
10047
11124
  }
10048
11125
 
10049
11126
  // src/components/Sidebar.tsx
10050
11127
  import { jsx as jsx39, jsxs as jsxs31, Fragment as Fragment4 } from "react/jsx-runtime";
10051
- var ATTRIBUTION_PREFIX = "Powered by";
10052
11128
  var ATTRIBUTION_BRAND = "Skippr";
10053
11129
  var ATTRIBUTION_URL = "https://www.skippr.ai/";
10054
11130
  var FOCUS_RING2 = "skippr:focus-visible:outline-2 skippr:focus-visible:outline-offset-2 skippr:focus-visible:outline-[var(--skippr-brand)]";
@@ -10078,7 +11154,8 @@ function Sidebar({
10078
11154
  agentMode,
10079
11155
  displayModules
10080
11156
  } = useLiveAgent();
10081
- const internalCtx = useContext18(LiveAgentContext);
11157
+ const copy = useChromeCopy();
11158
+ const internalCtx = useContext19(LiveAgentContext);
10082
11159
  const defaultAgentId = internalCtx?.defaultAgentId ?? null;
10083
11160
  const startDefaultSession = internalCtx?.startDefaultSession ?? (() => {});
10084
11161
  const talkDisabled = !(internalCtx?.hasResolvedModules ?? false);
@@ -10111,14 +11188,14 @@ function Sidebar({
10111
11188
  }, [setBarPos, voiceBarRef]);
10112
11189
  const followsPanel = isFloating && isPanelOpen;
10113
11190
  const dragFollowers = followsPanel && panelRef && controlBarRef && voiceBarRef ? [panelRef, controlBarRef, voiceBarRef] : null;
10114
- const headerRef = useRef33(null);
11191
+ const headerRef = useRef34(null);
10115
11192
  const { wasDraggedRef } = useLauncherDrag(headerRef, onPanelDrop, dragFollowers, setIsDragging, isFloating);
10116
11193
  const anchor2 = isFloating ? resolvePanelAnchor(barPos, SIDEBAR_WIDTH) : null;
10117
11194
  const floatingStyle = anchor2 ? {
10118
11195
  ...anchor2.style,
10119
11196
  height: panelExpanded ? anchor2.availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${anchor2.availableHeight})`
10120
11197
  } : undefined;
10121
- useEffect38(() => {
11198
+ useEffect39(() => {
10122
11199
  if (!isSidebar)
10123
11200
  return;
10124
11201
  const prop = position === "right" ? "marginRight" : "marginLeft";
@@ -10165,7 +11242,7 @@ function Sidebar({
10165
11242
  }) : usesHostAuth || isValidating || isAuthenticated ? /* @__PURE__ */ jsx39("div", {
10166
11243
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
10167
11244
  children: /* @__PURE__ */ jsx39(LoadingDots, {
10168
- label: "Loading..."
11245
+ label: copy.loading
10169
11246
  })
10170
11247
  }) : /* @__PURE__ */ jsx39("div", {
10171
11248
  "data-skippr-no-drag": "",
@@ -10196,6 +11273,7 @@ function AuthenticatedContent({
10196
11273
  talkDisabled,
10197
11274
  showTalk
10198
11275
  }) {
11276
+ const copy = useChromeCopy();
10199
11277
  const inSession = isConnected || isStarting || isPaused || isPausing;
10200
11278
  const effectiveTab = showAgenda ? activeTab : "chat";
10201
11279
  return /* @__PURE__ */ jsxs31(Fragment4, {
@@ -10206,7 +11284,7 @@ function AuthenticatedContent({
10206
11284
  children: isDisconnecting ? /* @__PURE__ */ jsx39("div", {
10207
11285
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
10208
11286
  children: /* @__PURE__ */ jsx39(LoadingDots, {
10209
- label: "Ending session..."
11287
+ label: copy.endingSession
10210
11288
  })
10211
11289
  }) : inSession ? /* @__PURE__ */ jsx39(ConnectedBody, {
10212
11290
  activeTab: effectiveTab,
@@ -10236,7 +11314,7 @@ function AuthenticatedContent({
10236
11314
  decorative: true,
10237
11315
  className: "skippr:size-3"
10238
11316
  }),
10239
- ATTRIBUTION_PREFIX,
11317
+ copy.attributionPrefix,
10240
11318
  " ",
10241
11319
  /* @__PURE__ */ jsx39("span", {
10242
11320
  className: "skippr:font-medium skippr:text-foreground skippr:underline skippr:underline-offset-2",
@@ -10250,7 +11328,7 @@ function AuthenticatedContent({
10250
11328
  "data-skippr-no-drag": "",
10251
11329
  className: `skippr:shrink-0 skippr:px-2${hideControls ? " skippr:pb-4 skippr:border-t skippr:border-border skippr:pt-1" : " skippr:pb-1"}`,
10252
11330
  children: /* @__PURE__ */ jsx39(ConsentNotice, {
10253
- template: CONSENT_NOTICE_CONTINUING,
11331
+ template: copy.consentContinuing,
10254
11332
  className: "skippr:whitespace-nowrap skippr:text-[10px]"
10255
11333
  })
10256
11334
  })
@@ -10291,11 +11369,12 @@ function IdleHistory({
10291
11369
  showTalk,
10292
11370
  error
10293
11371
  }) {
11372
+ const copy = useChromeCopy();
10294
11373
  if (history2.isLoading) {
10295
11374
  return /* @__PURE__ */ jsx39("div", {
10296
11375
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
10297
11376
  children: /* @__PURE__ */ jsx39(LoadingDots, {
10298
- label: "Loading conversation..."
11377
+ label: copy.loadingConversation
10299
11378
  })
10300
11379
  });
10301
11380
  }
@@ -10376,7 +11455,7 @@ function ConnectedBody({
10376
11455
  }
10377
11456
 
10378
11457
  // src/components/SidebarTrigger.tsx
10379
- import { useContext as useContext19 } from "react";
11458
+ import { useContext as useContext20 } from "react";
10380
11459
 
10381
11460
  // src/components/Logo.tsx
10382
11461
  import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
@@ -10429,7 +11508,8 @@ function SidebarTrigger() {
10429
11508
  isStarting,
10430
11509
  isPausing
10431
11510
  } = useLiveAgent();
10432
- const internalCtx = useContext19(LiveAgentContext);
11511
+ const copy = useChromeCopy();
11512
+ const internalCtx = useContext20(LiveAgentContext);
10433
11513
  const launcherBottomPx = internalCtx?.launcherBottomPx ?? DEFAULT_LAUNCHER_BOTTOM_PX;
10434
11514
  const popsDown = internalCtx?.popsDown ?? false;
10435
11515
  const logoUrl = internalCtx?.appearance?.logoUrl ?? null;
@@ -10439,8 +11519,8 @@ function SidebarTrigger() {
10439
11519
  return /* @__PURE__ */ jsx41("button", {
10440
11520
  type: "button",
10441
11521
  onClick: handleClick,
10442
- title: isPanelOpen ? "Close chat" : "Open chat",
10443
- "aria-label": isPanelOpen ? "Close chat" : "Open chat",
11522
+ title: isPanelOpen ? copy.closeChatLabel : copy.openChatLabel,
11523
+ "aria-label": isPanelOpen ? copy.closeChatLabel : copy.openChatLabel,
10444
11524
  style: { bottom: triggerBottomPx(launcherBottomPx, popsDown) },
10445
11525
  className: cn("skippr:fixed skippr:z-[9998]", "skippr:flex skippr:size-12 skippr:items-center skippr:justify-center", "skippr:shadow-[0_4px_16px_rgba(45,43,61,0.45),0_2px_4px_rgba(0,0,0,0.1)] skippr:transition-all", "skippr:cursor-pointer skippr:hover:brightness-110 skippr:hover:-translate-y-0.5 skippr:active:translate-y-0", isPanelOpen ? "skippr:rounded-[14px] skippr:bg-bubble skippr:text-white" : "skippr:rounded-[10px] skippr:overflow-hidden", position === "right" ? "skippr:right-6" : "skippr:left-6"),
10446
11526
  children: isPanelOpen ? /* @__PURE__ */ jsx41(ChevronDown, {
@@ -10458,13 +11538,13 @@ function SidebarTrigger() {
10458
11538
  // src/components/SplashOverlay.tsx
10459
11539
  import {
10460
11540
  useCallback as useCallback31,
10461
- useContext as useContext22,
11541
+ useContext as useContext23,
10462
11542
  useLayoutEffect as useLayoutEffect4,
10463
- useRef as useRef35
11543
+ useRef as useRef36
10464
11544
  } from "react";
10465
11545
 
10466
11546
  // src/hooks/useSplash.ts
10467
- import { useCallback as useCallback29, useContext as useContext21, useMemo as useMemo9, useState as useState31 } from "react";
11547
+ import { useCallback as useCallback29, useContext as useContext22, useMemo as useMemo11, useState as useState32 } from "react";
10468
11548
 
10469
11549
  // src/lib/splashPresentation.ts
10470
11550
  function resolveSplashSections(sections, iconUrls) {
@@ -10501,9 +11581,9 @@ function resolveSplashPresentation(splash) {
10501
11581
  }
10502
11582
 
10503
11583
  // src/hooks/useAdoptionTips.ts
10504
- import { useContext as useContext20 } from "react";
11584
+ import { useContext as useContext21 } from "react";
10505
11585
  function useAdoptionTips() {
10506
- const ctx = useContext20(LiveAgentContext);
11586
+ const ctx = useContext21(LiveAgentContext);
10507
11587
  if (!ctx) {
10508
11588
  throw new Error("useAdoptionTips must be used within a <LiveAgent> provider");
10509
11589
  }
@@ -10516,7 +11596,7 @@ function useAdoptionTips() {
10516
11596
 
10517
11597
  // src/hooks/useSplash.ts
10518
11598
  function useSplash(surface, onDismiss) {
10519
- const ctx = useContext21(LiveAgentContext);
11599
+ const ctx = useContext22(LiveAgentContext);
10520
11600
  if (!ctx) {
10521
11601
  throw new Error("useSplash must be used within a <LiveAgent> provider");
10522
11602
  }
@@ -10539,11 +11619,11 @@ function useSplash(surface, onDismiss) {
10539
11619
  optOutOfSplashOverlay
10540
11620
  } = ctx;
10541
11621
  const isSurfaceUp = surface === SPLASH_SURFACE.Host ? splashSurfaces.applies && !isSplashDismissed : splashSurfaces[surface];
10542
- const defaultModule = useMemo9(() => displayModules.find((module) => module.id === defaultAgentId) ?? null, [displayModules, defaultAgentId]);
11622
+ const defaultModule = useMemo11(() => displayModules.find((module) => module.id === defaultAgentId) ?? null, [displayModules, defaultAgentId]);
10543
11623
  const splash = appearance?.splash ?? null;
10544
11624
  const { micEnabled, screenEnabled, enableMic, enableScreen, releaseScreen } = splashMedia;
10545
11625
  const toggleStartMuted = useCallback29(() => setStartMuted(!startMuted), [setStartMuted, startMuted]);
10546
- const [optOutChecked, setOptOutChecked] = useState31(false);
11626
+ const [optOutChecked, setOptOutChecked] = useState32(false);
10547
11627
  const toggleOptOut = useCallback29(() => setOptOutChecked((checked) => !checked), []);
10548
11628
  const commitOptOut = useCallback29(() => {
10549
11629
  if (optOutChecked)
@@ -10564,12 +11644,12 @@ function useSplash(surface, onDismiss) {
10564
11644
  startAdoptionSession(goal);
10565
11645
  }, [commitOptOut, startAdoptionSession]);
10566
11646
  const tips = useAdoptionTips();
10567
- const presentation = useMemo9(() => resolveSplashPresentation(splash), [splash]);
11647
+ const presentation = useMemo11(() => resolveSplashPresentation(splash), [splash]);
10568
11648
  const iconUrls = appearance?.splashIconUrls ?? null;
10569
- const sections = useMemo9(() => resolveSplashSections(splash?.sections ?? null, iconUrls), [splash?.sections, iconUrls]);
11649
+ const sections = useMemo11(() => resolveSplashSections(splash?.sections ?? null, iconUrls), [splash?.sections, iconUrls]);
10570
11650
  const phases = idleHistory.phases;
10571
- const lastCompletedPhase = useMemo9(() => phases.findLast((phase) => phase.status === "completed") ?? null, [phases]);
10572
- const upcomingPhases = useMemo9(() => phases.filter((phase) => phase.status !== "completed"), [phases]);
11651
+ const lastCompletedPhase = useMemo11(() => phases.findLast((phase) => phase.status === "completed") ?? null, [phases]);
11652
+ const upcomingPhases = useMemo11(() => phases.filter((phase) => phase.status !== "completed"), [phases]);
10573
11653
  if (!isSurfaceUp || !defaultModule) {
10574
11654
  return null;
10575
11655
  }
@@ -10650,7 +11730,7 @@ var CARD_SHELL = "skippr:flex skippr:w-full skippr:flex-col skippr:overflow-hidd
10650
11730
  var CARD_FRAME = "skippr:rounded-[16px] skippr:bg-white skippr:shadow-[0_0_0_1px_rgba(45,45,63,0.10),0_1px_2px_rgba(45,45,63,0.04)]";
10651
11731
 
10652
11732
  // src/components/SplashMediaSection.tsx
10653
- import { useCallback as useCallback30, useRef as useRef34 } from "react";
11733
+ import { useCallback as useCallback30, useRef as useRef35 } from "react";
10654
11734
  import { jsx as jsx42, jsxs as jsxs33, Fragment as Fragment5 } from "react/jsx-runtime";
10655
11735
  var MEDIA_TRAILING_BOX = "skippr:shrink-0 skippr:rounded-full skippr:border skippr:px-[18px] skippr:py-[7px] skippr:text-[14px]";
10656
11736
  var MEDIA_PILL = `${MEDIA_TRAILING_BOX} skippr:cursor-pointer skippr:border-[rgba(45,45,63,0.12)] skippr:font-medium skippr:transition-colors`;
@@ -10754,7 +11834,7 @@ function SplashMediaSection({
10754
11834
  toggleStartMuted,
10755
11835
  enableScreen
10756
11836
  }) {
10757
- const micFocusPending = useRef34(false);
11837
+ const micFocusPending = useRef35(false);
10758
11838
  const focusMicToggle = useCallback30((toggle) => {
10759
11839
  if (!toggle || !micFocusPending.current)
10760
11840
  return;
@@ -11219,7 +12299,7 @@ function SplashPrimary({
11219
12299
  children: [
11220
12300
  /* @__PURE__ */ jsx45("span", {
11221
12301
  className: ROW_TITLE,
11222
- children: lastCompletedPhase.name
12302
+ children: lastCompletedPhase.displayName ?? lastCompletedPhase.name
11223
12303
  }),
11224
12304
  /* @__PURE__ */ jsx45("span", {
11225
12305
  className: ROW_SUBTEXT,
@@ -11252,7 +12332,7 @@ function SplashPrimary({
11252
12332
  children: [
11253
12333
  /* @__PURE__ */ jsx45("span", {
11254
12334
  className: `skippr:truncate ${ROW_TITLE}`,
11255
- children: phase.name
12335
+ children: phase.displayName ?? phase.name
11256
12336
  }),
11257
12337
  /* @__PURE__ */ jsx45("span", {
11258
12338
  className: ROW_SUBTEXT,
@@ -11344,7 +12424,7 @@ var CENTER_STYLE = {
11344
12424
  };
11345
12425
  var CARD_STYLE = { width: "100%" };
11346
12426
  function SplashOverlay() {
11347
- const ctx = useContext22(LiveAgentContext);
12427
+ const ctx = useContext23(LiveAgentContext);
11348
12428
  if (!ctx) {
11349
12429
  throw new Error("SplashOverlay must be used within a <LiveAgent> provider");
11350
12430
  }
@@ -11357,7 +12437,7 @@ function SplashOverlay() {
11357
12437
  function SplashOverlayCard({ accentColor }) {
11358
12438
  const state = useSplash(SPLASH_SURFACE.Overlay);
11359
12439
  const dismiss = state?.dismiss;
11360
- const dialogRef = useRef35(null);
12440
+ const dialogRef = useRef36(null);
11361
12441
  const isOpen = state !== null;
11362
12442
  useLayoutEffect4(() => {
11363
12443
  const dialog = isOpen ? dialogRef.current : null;
@@ -11414,10 +12494,10 @@ function SplashOverlayCard({ accentColor }) {
11414
12494
  }
11415
12495
 
11416
12496
  // src/components/SplashPanel.tsx
11417
- import { useContext as useContext23 } from "react";
12497
+ import { useContext as useContext24 } from "react";
11418
12498
  import { jsx as jsx47 } from "react/jsx-runtime";
11419
12499
  function SplashPanel() {
11420
- const ctx = useContext23(LiveAgentContext);
12500
+ const ctx = useContext24(LiveAgentContext);
11421
12501
  if (!ctx) {
11422
12502
  throw new Error("SplashPanel must be used within a <LiveAgent> provider");
11423
12503
  }
@@ -11451,12 +12531,12 @@ function SplashPanelCard({ dock, isPanelOpen }) {
11451
12531
  }
11452
12532
 
11453
12533
  // src/components/VoiceBar.tsx
11454
- import { useContext as useContext27 } from "react";
12534
+ import { useContext as useContext28 } from "react";
11455
12535
 
11456
12536
  // src/hooks/useBarNotifications.ts
11457
- import { useContext as useContext24 } from "react";
12537
+ import { useContext as useContext25 } from "react";
11458
12538
  function useBarNotifications() {
11459
- const ctx = useContext24(LiveAgentContext);
12539
+ const ctx = useContext25(LiveAgentContext);
11460
12540
  if (!ctx) {
11461
12541
  throw new Error("useBarNotifications must be used within a <LiveAgent> provider");
11462
12542
  }
@@ -11500,14 +12580,14 @@ function useBarNotifications() {
11500
12580
 
11501
12581
  // src/components/VoiceBarFrame.tsx
11502
12582
  import { useIsSpeaking, useLocalParticipant as useLocalParticipant13 } from "@livekit/components-react/hooks";
11503
- import { useCallback as useCallback34, useContext as useContext26, useEffect as useEffect47, useRef as useRef42, useState as useState38 } from "react";
12583
+ import { useCallback as useCallback34, useContext as useContext27, useEffect as useEffect48, useRef as useRef43, useState as useState39 } from "react";
11504
12584
 
11505
12585
  // src/hooks/useKeyboardStop.ts
11506
- import { useEffect as useEffect39, useRef as useRef36 } from "react";
12586
+ import { useEffect as useEffect40, useRef as useRef37 } from "react";
11507
12587
  function useKeyboardStop({ enabled, onStop }) {
11508
- const handler = useRef36(onStop);
12588
+ const handler = useRef37(onStop);
11509
12589
  handler.current = onStop;
11510
- useEffect39(() => {
12590
+ useEffect40(() => {
11511
12591
  if (!enabled)
11512
12592
  return;
11513
12593
  const onKeyDown = (event) => {
@@ -11524,18 +12604,18 @@ function useKeyboardStop({ enabled, onStop }) {
11524
12604
  }
11525
12605
 
11526
12606
  // src/hooks/useSessionTimer.ts
11527
- import { useEffect as useEffect41, useState as useState33 } from "react";
12607
+ import { useEffect as useEffect42, useState as useState34 } from "react";
11528
12608
 
11529
12609
  // src/hooks/useElapsedSeconds.ts
11530
- import { useEffect as useEffect40, useRef as useRef37, useState as useState32 } from "react";
12610
+ import { useEffect as useEffect41, useRef as useRef38, useState as useState33 } from "react";
11531
12611
  function useElapsedSeconds(isRunning, resetSignal) {
11532
- const [elapsed, setElapsed] = useState32(0);
11533
- const accumulatedSecondsRef = useRef37(0);
11534
- useEffect40(() => {
12612
+ const [elapsed, setElapsed] = useState33(0);
12613
+ const accumulatedSecondsRef = useRef38(0);
12614
+ useEffect41(() => {
11535
12615
  accumulatedSecondsRef.current = 0;
11536
12616
  setElapsed(0);
11537
12617
  }, [resetSignal]);
11538
- useEffect40(() => {
12618
+ useEffect41(() => {
11539
12619
  if (!isRunning)
11540
12620
  return;
11541
12621
  const resumedAt = Date.now();
@@ -11560,8 +12640,8 @@ function useSessionTimer(isRunning, resetSignal) {
11560
12640
  const active = isRunning && remaining !== null;
11561
12641
  const warning = active && remaining !== null && remaining <= SESSION_TIMER_WARNING_S;
11562
12642
  const revealCycle = !active ? null : warning ? "warning" : "normal";
11563
- const [revealed, setRevealed] = useState33(false);
11564
- useEffect41(() => {
12643
+ const [revealed, setRevealed] = useState34(false);
12644
+ useEffect42(() => {
11565
12645
  if (!revealCycle) {
11566
12646
  setRevealed(false);
11567
12647
  return;
@@ -11589,18 +12669,18 @@ function useSessionTimer(isRunning, resetSignal) {
11589
12669
  }
11590
12670
 
11591
12671
  // src/hooks/useVoiceBarDrag.ts
11592
- import { useEffect as useEffect42, useRef as useRef38 } from "react";
12672
+ import { useEffect as useEffect43, useRef as useRef39 } from "react";
11593
12673
  import { flushSync as flushSync2 } from "react-dom";
11594
12674
  var DRAG_THRESHOLD_PX2 = 5;
11595
12675
  function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11596
- const wasDraggedRef = useRef38(false);
11597
- const onDropRef = useRef38(onDrop);
12676
+ const wasDraggedRef = useRef39(false);
12677
+ const onDropRef = useRef39(onDrop);
11598
12678
  onDropRef.current = onDrop;
11599
- const followTargetsRef = useRef38(followRefs);
12679
+ const followTargetsRef = useRef39(followRefs);
11600
12680
  followTargetsRef.current = followRefs;
11601
- const reportDraggingRef = useRef38(reportDragging);
12681
+ const reportDraggingRef = useRef39(reportDragging);
11602
12682
  reportDraggingRef.current = reportDragging;
11603
- useEffect42(() => {
12683
+ useEffect43(() => {
11604
12684
  const el = containerRef.current;
11605
12685
  if (!el)
11606
12686
  return;
@@ -11750,7 +12830,7 @@ function useVoiceBarDrag(containerRef, onDrop, followRefs, reportDragging) {
11750
12830
  }
11751
12831
 
11752
12832
  // src/components/VoiceBarChatLine.tsx
11753
- import { useCallback as useCallback32, useContext as useContext25, useEffect as useEffect43, useRef as useRef39, useState as useState34 } from "react";
12833
+ import { useCallback as useCallback32, useContext as useContext26, useEffect as useEffect44, useRef as useRef40, useState as useState35 } from "react";
11754
12834
  import { jsx as jsx48, jsxs as jsxs37 } from "react/jsx-runtime";
11755
12835
  var IDLE_HIDE_MS = 6000;
11756
12836
  function VoiceBarChatLine({
@@ -11760,21 +12840,22 @@ function VoiceBarChatLine({
11760
12840
  embedded = false
11761
12841
  }) {
11762
12842
  const { sendChatMessage, isSendingChat } = useChatMessages();
11763
- const ctx = useContext25(LiveAgentContext);
12843
+ const ctx = useContext26(LiveAgentContext);
12844
+ const copy = useChromeCopy();
11764
12845
  const reportChatActivity = ctx?.reportChatActivity;
11765
- const [localDraft, setLocalDraft] = useState34("");
12846
+ const [localDraft, setLocalDraft] = useState35("");
11766
12847
  const text = ctx?.chatDraft ?? localDraft;
11767
12848
  const setText = ctx?.setChatDraft ?? setLocalDraft;
11768
- const inputRef = useRef39(null);
11769
- const idleTimerRef = useRef39(null);
11770
- const onCloseRef = useRef39(onClose);
12849
+ const inputRef = useRef40(null);
12850
+ const idleTimerRef = useRef40(null);
12851
+ const onCloseRef = useRef40(onClose);
11771
12852
  onCloseRef.current = onClose;
11772
12853
  const armIdle = useCallback32(() => {
11773
12854
  if (idleTimerRef.current)
11774
12855
  clearTimeout(idleTimerRef.current);
11775
12856
  idleTimerRef.current = setTimeout(() => onCloseRef.current(), IDLE_HIDE_MS);
11776
12857
  }, []);
11777
- useEffect43(() => {
12858
+ useEffect44(() => {
11778
12859
  inputRef.current?.focus();
11779
12860
  armIdle();
11780
12861
  return () => {
@@ -11819,8 +12900,8 @@ function VoiceBarChatLine({
11819
12900
  submit();
11820
12901
  }
11821
12902
  },
11822
- placeholder: "Type a message…",
11823
- "aria-label": "Message",
12903
+ placeholder: copy.chatMessagePlaceholder,
12904
+ "aria-label": copy.chatMessageLabel,
11824
12905
  className: "skippr:min-w-0 skippr:flex-1 skippr:border-none skippr:bg-transparent skippr:py-[7px] skippr:text-[13px] skippr:font-medium skippr:text-[#2D2D3F] skippr:outline-none skippr:placeholder:text-[#b0aca4]"
11825
12906
  }),
11826
12907
  /* @__PURE__ */ jsx48("button", {
@@ -11831,7 +12912,7 @@ function VoiceBarChatLine({
11831
12912
  background: hasText ? "var(--skippr-brand, #2bc0ae)" : "#cdd8d5",
11832
12913
  color: "var(--skippr-brand-foreground, #2d2b3d)"
11833
12914
  },
11834
- "aria-label": "Send",
12915
+ "aria-label": copy.chatSendLabel,
11835
12916
  className: "skippr:flex skippr:size-[32px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:transition-[filter] skippr:hover:brightness-[1.06] skippr:focus-visible:outline-2 skippr:focus-visible:outline-offset-2 skippr:focus-visible:outline-[var(--skippr-brand)] skippr:disabled:cursor-not-allowed",
11836
12917
  children: /* @__PURE__ */ jsx48(Send, {
11837
12918
  className: "skippr:size-[15px]",
@@ -11843,20 +12924,21 @@ function VoiceBarChatLine({
11843
12924
  }
11844
12925
 
11845
12926
  // src/components/VoiceBarLinkCard.tsx
11846
- import { useCallback as useCallback33, useEffect as useEffect44, useRef as useRef40, useState as useState35 } from "react";
12927
+ import { useCallback as useCallback33, useEffect as useEffect45, useRef as useRef41, useState as useState36 } from "react";
11847
12928
  import { jsx as jsx49, jsxs as jsxs38 } from "react/jsx-runtime";
11848
12929
  var COPIED_RESET_MS2 = 2000;
11849
12930
  var DISMISS_AFTER_COPY_MS2 = 3000;
11850
12931
  function VoiceBarLinkCard({ card, onDismiss }) {
11851
- const [copied, setCopied] = useState35(false);
11852
- const dismissTimerRef = useRef40(null);
11853
- useEffect44(() => {
12932
+ const [copied, setCopied] = useState36(false);
12933
+ const copy = useChromeCopy();
12934
+ const dismissTimerRef = useRef41(null);
12935
+ useEffect45(() => {
11854
12936
  if (!copied)
11855
12937
  return;
11856
12938
  const timer = setTimeout(() => setCopied(false), COPIED_RESET_MS2);
11857
12939
  return () => clearTimeout(timer);
11858
12940
  }, [copied]);
11859
- useEffect44(() => {
12941
+ useEffect45(() => {
11860
12942
  return () => {
11861
12943
  if (dismissTimerRef.current)
11862
12944
  clearTimeout(dismissTimerRef.current);
@@ -11875,7 +12957,7 @@ function VoiceBarLinkCard({ card, onDismiss }) {
11875
12957
  /* @__PURE__ */ jsx49("button", {
11876
12958
  type: "button",
11877
12959
  onClick: onDismiss,
11878
- "aria-label": "Dismiss link",
12960
+ "aria-label": copy.cardDismissLink,
11879
12961
  className: "skippr:absolute skippr:right-[8px] skippr:top-[8px] skippr:flex skippr:size-[20px] skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:text-[#b8b4ac] skippr:transition-colors skippr:hover:bg-[#f2f0eb] skippr:hover:text-[#2D2D3F]",
11880
12962
  children: /* @__PURE__ */ jsx49(X, {
11881
12963
  className: "skippr:size-[12px]",
@@ -11902,13 +12984,13 @@ function VoiceBarLinkCard({ card, onDismiss }) {
11902
12984
  className: "skippr:size-[11px]",
11903
12985
  strokeWidth: 2.5
11904
12986
  }),
11905
- "open"
12987
+ copy.voiceBarCardOpen
11906
12988
  ]
11907
12989
  }),
11908
12990
  /* @__PURE__ */ jsxs38("button", {
11909
12991
  type: "button",
11910
12992
  onClick: handleCopy,
11911
- "aria-label": "Copy link",
12993
+ "aria-label": copy.cardCopyLink,
11912
12994
  className: "skippr:flex skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:gap-[6px] skippr:rounded-full skippr:border skippr:border-[rgba(45,45,63,0.12)] skippr:bg-white skippr:px-[10px] skippr:py-[6px] skippr:text-[11px] skippr:font-semibold skippr:text-[#2D2D3F] skippr:transition-colors skippr:hover:bg-[#f2f0eb]",
11913
12995
  children: [
11914
12996
  copied ? /* @__PURE__ */ jsx49(Check, {
@@ -11918,7 +13000,7 @@ function VoiceBarLinkCard({ card, onDismiss }) {
11918
13000
  className: "skippr:size-[11px]",
11919
13001
  strokeWidth: 2.5
11920
13002
  }),
11921
- copied ? "copied" : "copy"
13003
+ copied ? copy.voiceBarCardCopied : copy.voiceBarCardCopy
11922
13004
  ]
11923
13005
  })
11924
13006
  ]
@@ -11930,13 +13012,14 @@ function VoiceBarLinkCard({ card, onDismiss }) {
11930
13012
  }
11931
13013
 
11932
13014
  // src/components/VoiceBarNotification.tsx
11933
- import { useEffect as useEffect45, useRef as useRef41, useState as useState36 } from "react";
13015
+ import { useEffect as useEffect46, useRef as useRef42, useState as useState37 } from "react";
11934
13016
  import { jsx as jsx50, jsxs as jsxs39 } from "react/jsx-runtime";
11935
13017
  function VoiceBarNotification({ notifications, pos, onDismiss }) {
11936
- const [index2, setIndex] = useState36(0);
11937
- const [paused, setPaused] = useState36(false);
11938
- const cardRef = useRef41(null);
11939
- useEffect45(() => {
13018
+ const copy = useChromeCopy();
13019
+ const [index2, setIndex] = useState37(0);
13020
+ const [paused, setPaused] = useState37(false);
13021
+ const cardRef = useRef42(null);
13022
+ useEffect46(() => {
11940
13023
  const el = cardRef.current;
11941
13024
  if (!el)
11942
13025
  return;
@@ -11949,7 +13032,7 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
11949
13032
  el.removeEventListener("mouseleave", leave);
11950
13033
  };
11951
13034
  }, []);
11952
- useEffect45(() => {
13035
+ useEffect46(() => {
11953
13036
  if (paused)
11954
13037
  return;
11955
13038
  const rotate = setInterval(() => setIndex((current) => (current + 1) % notifications.length), TIP_ROTATE_MS);
@@ -11997,13 +13080,13 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
11997
13080
  onDismiss();
11998
13081
  },
11999
13082
  className: "skippr:shrink-0 skippr:cursor-pointer skippr:rounded-full skippr:bg-[#2D2D3F] skippr:px-[9px] skippr:py-[3px] skippr:text-[9.5px] skippr:font-semibold skippr:text-white skippr:transition-colors skippr:hover:bg-[#3d3d52]",
12000
- children: "start"
13083
+ children: copy.voiceBarTipStart
12001
13084
  }),
12002
13085
  hasMultiple && /* @__PURE__ */ jsxs39("button", {
12003
13086
  type: "button",
12004
13087
  onClick: () => setIndex((current) => (current + 1) % notifications.length),
12005
- "aria-label": "Next",
12006
- title: "Next",
13088
+ "aria-label": copy.tipNextLabel,
13089
+ title: copy.tipNextLabel,
12007
13090
  className: "skippr:flex skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:gap-[1px] skippr:rounded-full skippr:px-[5px] skippr:py-[1px] skippr:font-mono skippr:text-[8.5px] skippr:font-bold skippr:tracking-[0.02em] skippr:text-[#8b877f] skippr:transition-colors skippr:hover:bg-[#f2f0eb] skippr:hover:text-[#5a5650]",
12008
13091
  children: [
12009
13092
  safeIndex + 1,
@@ -12021,7 +13104,7 @@ function VoiceBarNotification({ notifications, pos, onDismiss }) {
12021
13104
  }
12022
13105
 
12023
13106
  // src/components/VoiceBarPlanCard.tsx
12024
- import { useEffect as useEffect46, useState as useState37 } from "react";
13107
+ import { useEffect as useEffect47, useState as useState38 } from "react";
12025
13108
  import { jsx as jsx51, jsxs as jsxs40 } from "react/jsx-runtime";
12026
13109
  var APPROVING_RESET_MS2 = 8000;
12027
13110
  function StepIndicator({ step }) {
@@ -12055,9 +13138,10 @@ function VoiceBarPlanCard({
12055
13138
  onDismiss,
12056
13139
  embedded = false
12057
13140
  }) {
13141
+ const copy = useChromeCopy();
12058
13142
  const awaitingApproval = plan.state === "proposed";
12059
- const [isApproving, setIsApproving] = useState37(false);
12060
- const [lastPlanId, setLastPlanId] = useState37(plan.planId);
13143
+ const [isApproving, setIsApproving] = useState38(false);
13144
+ const [lastPlanId, setLastPlanId] = useState38(plan.planId);
12061
13145
  if (plan.planId !== lastPlanId) {
12062
13146
  setLastPlanId(plan.planId);
12063
13147
  setIsApproving(false);
@@ -12072,13 +13156,13 @@ function VoiceBarPlanCard({
12072
13156
  const cancel = () => {
12073
13157
  sendChatMessage(CANCEL_MESSAGE).catch((e) => console.warn("[Skippr] plan reply failed", e));
12074
13158
  };
12075
- useEffect46(() => {
13159
+ useEffect47(() => {
12076
13160
  if (!isApproving)
12077
13161
  return;
12078
13162
  const timer = setTimeout(() => setIsApproving(false), APPROVING_RESET_MS2);
12079
13163
  return () => clearTimeout(timer);
12080
13164
  }, [isApproving]);
12081
- useEffect46(() => {
13165
+ useEffect47(() => {
12082
13166
  if (plan.state !== "completed")
12083
13167
  return;
12084
13168
  const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
@@ -12092,12 +13176,12 @@ function VoiceBarPlanCard({
12092
13176
  children: [
12093
13177
  /* @__PURE__ */ jsx51("span", {
12094
13178
  className: "skippr:text-[11px] skippr:font-semibold skippr:tracking-[-0.01em] skippr:text-[#2D2D3F]",
12095
- children: "Plan"
13179
+ children: copy.planTitle
12096
13180
  }),
12097
13181
  /* @__PURE__ */ jsx51("button", {
12098
13182
  type: "button",
12099
13183
  onClick: onDismiss,
12100
- "aria-label": "Dismiss plan",
13184
+ "aria-label": copy.cardDismissPlan,
12101
13185
  className: "skippr:flex skippr:size-[20px] skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:text-[#b8b4ac] skippr:transition-colors skippr:hover:bg-[#f2f0eb] skippr:hover:text-[#2D2D3F]",
12102
13186
  children: /* @__PURE__ */ jsx51(X, {
12103
13187
  className: "skippr:size-[12px]",
@@ -12111,14 +13195,11 @@ function VoiceBarPlanCard({
12111
13195
  children: [
12112
13196
  /* @__PURE__ */ jsx51("p", {
12113
13197
  className: "skippr:text-[11.5px] skippr:font-semibold skippr:tracking-[-0.01em] skippr:text-[#2D2D3F]",
12114
- children: "Here's my plan"
13198
+ children: copy.voiceBarPlanIntro
12115
13199
  }),
12116
- awaitingApproval && /* @__PURE__ */ jsxs40("p", {
13200
+ awaitingApproval && /* @__PURE__ */ jsx51("p", {
12117
13201
  className: "skippr:mt-[1px] skippr:text-[10px] skippr:text-[#8b877f]",
12118
- children: [
12119
- plan.steps.length,
12120
- " steps · review and approve to run"
12121
- ]
13202
+ children: fillPlaceholders(copy.voiceBarPlanStepsHint, { count: plan.steps.length })
12122
13203
  }),
12123
13204
  /* @__PURE__ */ jsx51("div", {
12124
13205
  className: "skippr:mt-[8px] skippr:max-h-[132px] skippr:space-y-[6px] skippr:overflow-y-auto skippr:overscroll-contain",
@@ -12149,7 +13230,7 @@ function VoiceBarPlanCard({
12149
13230
  isApproving && /* @__PURE__ */ jsx51("span", {
12150
13231
  className: "skippr:size-[10px] skippr:shrink-0 skippr:animate-spin skippr:rounded-full skippr:border-2 skippr:border-white/30 skippr:border-t-white"
12151
13232
  }),
12152
- isApproving ? "approving…" : "approve plan"
13233
+ isApproving ? copy.voiceBarPlanApproving : copy.voiceBarPlanApprove
12153
13234
  ]
12154
13235
  }),
12155
13236
  /* @__PURE__ */ jsx51("button", {
@@ -12157,7 +13238,7 @@ function VoiceBarPlanCard({
12157
13238
  disabled: isApproving,
12158
13239
  onClick: cancel,
12159
13240
  className: "skippr:cursor-pointer skippr:rounded-full skippr:border skippr:border-[rgba(45,45,63,0.12)] skippr:bg-white skippr:px-[10px] skippr:py-[6px] skippr:text-[11px] skippr:font-semibold skippr:text-[#2D2D3F] skippr:transition-colors skippr:hover:bg-[#f2f0eb] skippr:disabled:cursor-default skippr:disabled:opacity-50 skippr:disabled:hover:bg-white",
12160
- children: "cancel"
13241
+ children: copy.voiceBarPlanCancel
12161
13242
  })
12162
13243
  ]
12163
13244
  }) : /* @__PURE__ */ jsxs40("span", {
@@ -12168,7 +13249,7 @@ function VoiceBarPlanCard({
12168
13249
  className: "skippr:size-[11px]",
12169
13250
  strokeWidth: 3
12170
13251
  }),
12171
- "approved"
13252
+ copy.voiceBarPlanApproved
12172
13253
  ]
12173
13254
  })
12174
13255
  })
@@ -12290,9 +13371,10 @@ function ShortcutHint({
12290
13371
  suppressed,
12291
13372
  children
12292
13373
  }) {
12293
- const ref = useRef42(null);
12294
- const [visible, setVisible] = useState38(false);
12295
- useEffect47(() => {
13374
+ const ref = useRef43(null);
13375
+ const [visible, setVisible] = useState39(false);
13376
+ const copy = useChromeCopy();
13377
+ useEffect48(() => {
12296
13378
  if (!enabled)
12297
13379
  return;
12298
13380
  const el = ref.current;
@@ -12339,7 +13421,7 @@ function ShortcutHint({
12339
13421
  }),
12340
13422
  /* @__PURE__ */ jsx52("span", {
12341
13423
  className: "skippr:text-[10.5px] skippr:font-medium skippr:text-[#8b877f]",
12342
- children: "talk"
13424
+ children: copy.voiceBarShortcutTalk
12343
13425
  }),
12344
13426
  /* @__PURE__ */ jsx52("span", {
12345
13427
  className: "skippr:text-[10px] skippr:text-[#cbc7bf]",
@@ -12362,7 +13444,7 @@ function ShortcutHint({
12362
13444
  }),
12363
13445
  /* @__PURE__ */ jsx52("span", {
12364
13446
  className: "skippr:text-[10.5px] skippr:font-medium skippr:text-[#8b877f]",
12365
- children: "end"
13447
+ children: copy.voiceBarShortcutEnd
12366
13448
  }),
12367
13449
  /* @__PURE__ */ jsx52("span", {
12368
13450
  className: "skippr:absolute skippr:left-1/2 skippr:top-full skippr:size-[9px] skippr:-translate-x-1/2 skippr:-translate-y-[4px] skippr:rotate-45 skippr:border-b skippr:border-r skippr:border-[rgba(45,45,63,0.08)] skippr:bg-white"
@@ -12380,7 +13462,7 @@ function VoiceBarFrame({
12380
13462
  onDrop,
12381
13463
  setDragging
12382
13464
  }) {
12383
- const ctx = useContext26(LiveAgentContext);
13465
+ const ctx = useContext27(LiveAgentContext);
12384
13466
  if (!ctx) {
12385
13467
  throw new Error("VoiceBarFrame must be used within a <LiveAgent> provider");
12386
13468
  }
@@ -12417,24 +13499,25 @@ function VoiceBarFrame({
12417
13499
  const needsLogin = !usesHostAuth && !isAuthenticated;
12418
13500
  const transientError = useTransientError(error, errorSeq);
12419
13501
  const authFailedCopy = authFailed ? resolveAuthFailedCopy(locale) : null;
12420
- const [loginOpen, setLoginOpen] = useState38(false);
12421
- useEffect47(() => {
13502
+ const [loginOpen, setLoginOpen] = useState39(false);
13503
+ useEffect48(() => {
12422
13504
  if (!needsLogin)
12423
13505
  setLoginOpen(false);
12424
13506
  }, [needsLogin]);
12425
- const [bannerOpen, setBannerOpen] = useState38(false);
13507
+ const [bannerOpen, setBannerOpen] = useState39(false);
12426
13508
  const hasNotifications = notifications.length > 0;
12427
13509
  const notifAccent = notifications[0]?.accentColor;
12428
13510
  const closeBanner = useCallback34(() => setBannerOpen(false), []);
12429
- const containerRef = useRef42(null);
13511
+ const containerRef = useRef43(null);
12430
13512
  const setContainerRefs = useCallback34((node) => {
12431
13513
  containerRef.current = node;
12432
13514
  voiceBarRef.current = node;
12433
13515
  }, [voiceBarRef]);
12434
13516
  const dragFollowers = isPanelOpen ? [panelRef] : null;
12435
- const barWidthRef = useRef42(VOICE_BAR_WIDTH_PX);
13517
+ const barWidthRef = useRef43(VOICE_BAR_WIDTH_PX);
12436
13518
  const dropAtBarWidth = useCallback34((next) => onDrop(next, barWidthRef.current), [onDrop]);
12437
13519
  const { wasDraggedRef } = useVoiceBarDrag(containerRef, dropAtBarWidth, dragFollowers, setDragging);
13520
+ const copy = useChromeCopy();
12438
13521
  const { isMuted, toggleMute } = useMediaControls();
12439
13522
  const { localParticipant } = useLocalParticipant13();
12440
13523
  const isUserSpeaking = useIsSpeaking(localParticipant);
@@ -12445,9 +13528,9 @@ function VoiceBarFrame({
12445
13528
  const plan = usePlanUpdates();
12446
13529
  const linkCard = useLinkCard();
12447
13530
  const { sendChatMessage } = useChatMessages();
12448
- const [dismissedFloatingPlanId, setDismissedFloatingPlanId] = useState38(null);
12449
- const [dismissedBlockPlanId, setDismissedBlockPlanId] = useState38(null);
12450
- const [dismissedLinkCardId, setDismissedLinkCardId] = useState38(null);
13531
+ const [dismissedFloatingPlanId, setDismissedFloatingPlanId] = useState39(null);
13532
+ const [dismissedBlockPlanId, setDismissedBlockPlanId] = useState39(null);
13533
+ const [dismissedLinkCardId, setDismissedLinkCardId] = useState39(null);
12451
13534
  const micMode = agentControls?.micMode;
12452
13535
  const pushOrTap = isRequestResponseMicMode(micMode);
12453
13536
  const isPushToTalk = micMode === MIC_MODE.PushToTalk;
@@ -12456,9 +13539,9 @@ function VoiceBarFrame({
12456
13539
  const showActionControl = isConnected && captureMode === CAPTURE_MODE.Auto && actionsActive;
12457
13540
  const chatSurface = agentControls?.chat ?? DEFAULT_CHAT_SURFACE;
12458
13541
  const isRoomChat = chatSurface === CHAT_SURFACE.Room;
12459
- const [chatLineOpen, setChatLineOpen] = useState38(false);
12460
- const [chatLineMounted, setChatLineMounted] = useState38(false);
12461
- const [chatLineClosing, setChatLineClosing] = useState38(false);
13542
+ const [chatLineOpen, setChatLineOpen] = useState39(false);
13543
+ const [chatLineMounted, setChatLineMounted] = useState39(false);
13544
+ const [chatLineClosing, setChatLineClosing] = useState39(false);
12462
13545
  const chatOpen = isRoomChat ? isPanelOpen : chatLineOpen;
12463
13546
  const lineBlockOpen = !isRoomChat && chatLineMounted;
12464
13547
  const toggleChat = () => {
@@ -12468,7 +13551,7 @@ function VoiceBarFrame({
12468
13551
  setChatLineOpen((open) => !open);
12469
13552
  }
12470
13553
  };
12471
- useEffect47(() => {
13554
+ useEffect48(() => {
12472
13555
  if (chatLineOpen) {
12473
13556
  setChatLineMounted(true);
12474
13557
  setChatLineClosing(false);
@@ -12497,7 +13580,7 @@ function VoiceBarFrame({
12497
13580
  const showLivePill = !isLoading && isConnected && !textMode && !pushOrTap;
12498
13581
  const barWidthPx = !showLivePill ? VOICE_BAR_WIDTH_PX : isHeld ? 120 : 156;
12499
13582
  barWidthRef.current = barWidthPx;
12500
- useEffect47(() => {
13583
+ useEffect48(() => {
12501
13584
  const inBounds = clampBarPos(pos, barWidthPx);
12502
13585
  if (inBounds.x !== pos.x)
12503
13586
  onDrop(inBounds, barWidthPx);
@@ -12516,24 +13599,24 @@ function VoiceBarFrame({
12516
13599
  }
12517
13600
  };
12518
13601
  useKeyboardStop({ enabled: sessionLive && !isPausing && !isLoading, onStop: closeBar });
12519
- const hintSeenRef = useRef42(false);
13602
+ const hintSeenRef = useRef43(false);
12520
13603
  const requestPillBg = isCapturingSpeech ? "var(--skippr-brand-active)" : "var(--skippr-brand, #2bc0ae)";
12521
- const agentStateLabel = state === "thinking" ? "thinking…" : state === "speaking" ? "talking…" : null;
12522
- const idleRequestLabel = isPushToTalk ? "push to talk" : "tap to talk";
12523
- const requestLabel = agentStateLabel ?? (isCapturingSpeech ? "listening…" : idleRequestLabel);
13604
+ const agentStateLabel = state === "thinking" ? copy.voiceBarThinking : state === "speaking" ? copy.voiceBarTalking : null;
13605
+ const idleRequestLabel = isPushToTalk ? copy.voiceBarPushToTalk : copy.voiceBarTapToTalk;
13606
+ const requestLabel = agentStateLabel ?? (isCapturingSpeech ? copy.voiceBarListening : idleRequestLabel);
12524
13607
  const livePillBg = agentActive && !isHeld ? "var(--skippr-brand-active)" : "var(--skippr-brand, #2bc0ae)";
12525
13608
  const glow = isConnected && !isHeld && agentActive;
12526
- const [autoOffClosing, setAutoOffClosing] = useState38(false);
13609
+ const [autoOffClosing, setAutoOffClosing] = useState39(false);
12527
13610
  const { reportActivity } = useIdleAutoOff({
12528
13611
  enabled: isConnected && !autoOffClosing,
12529
13612
  active: agentActive || isCapturingSpeech || isUserSpeaking,
12530
13613
  onExpire: () => setAutoOffClosing(true)
12531
13614
  });
12532
- useEffect47(() => {
13615
+ useEffect48(() => {
12533
13616
  if (chatActivityAt)
12534
13617
  reportActivity();
12535
13618
  }, [chatActivityAt, reportActivity]);
12536
- useEffect47(() => {
13619
+ useEffect48(() => {
12537
13620
  if (!autoOffClosing)
12538
13621
  return;
12539
13622
  if (!isConnected) {
@@ -12549,12 +13632,12 @@ function VoiceBarFrame({
12549
13632
  const floatingPlanActive = planEnabled && !isRoomChat && !lineBlockOpen && activePlan.planId !== dismissedFloatingPlanId;
12550
13633
  const planInLineBlock = planEnabled && lineBlockOpen && activePlan.planId !== dismissedBlockPlanId;
12551
13634
  const planCardActive = floatingPlanActive || planInLineBlock;
12552
- useEffect47(() => {
13635
+ useEffect48(() => {
12553
13636
  if (lineBlockOpen)
12554
13637
  setDismissedBlockPlanId(null);
12555
13638
  }, [lineBlockOpen]);
12556
- const [autoOpenedPlanId, setAutoOpenedPlanId] = useState38(null);
12557
- useEffect47(() => {
13639
+ const [autoOpenedPlanId, setAutoOpenedPlanId] = useState39(null);
13640
+ useEffect48(() => {
12558
13641
  if (!isRoomChat || !planEnabled || !activePlan)
12559
13642
  return;
12560
13643
  if (activePlan.planId === autoOpenedPlanId)
@@ -12573,7 +13656,7 @@ function VoiceBarFrame({
12573
13656
  const showTimerStrip = !slotClaimed && !autoOffClosing && !isCapturingSpeech && !planCardActive && !showLiveStrip && !isHeld && !!sessionTimer;
12574
13657
  const showAutoOffStrip = !slotClaimed && autoOffClosing;
12575
13658
  const hintSuppressed = slotClaimed || isCapturingSpeech || planCardActive || showLiveStrip || isHeld || showTimerStrip || showAutoOffStrip;
12576
- const liveStripLabel = showActionControl ? "working…" : "thinking…";
13659
+ const liveStripLabel = showActionControl ? copy.voiceBarWorking : copy.voiceBarThinking;
12577
13660
  const popsDown = barPopsDown(pos);
12578
13661
  const isLeftAligned = barLeftAligned(pos);
12579
13662
  const stripStyle = {
@@ -12672,7 +13755,7 @@ function VoiceBarFrame({
12672
13755
  }),
12673
13756
  /* @__PURE__ */ jsx52("span", {
12674
13757
  className: "skippr:whitespace-nowrap skippr:text-[12px] skippr:font-semibold skippr:tracking-[-0.01em] skippr:text-[#5a5650]",
12675
- children: "No activity — closing…"
13758
+ children: copy.voiceBarNoActivity
12676
13759
  })
12677
13760
  ]
12678
13761
  })
@@ -12732,14 +13815,14 @@ function VoiceBarFrame({
12732
13815
  className: "skippr:text-[11px] skippr:leading-[1.2] skippr:text-destructive skippr:text-center",
12733
13816
  children: modulesError || transientError
12734
13817
  }) : /* @__PURE__ */ jsx52(ConsentNotice, {
12735
- template: CONSENT_NOTICE_SESSION_START
13818
+ template: copy.consentSessionStart
12736
13819
  })
12737
13820
  })
12738
13821
  }),
12739
13822
  hasNotifications && !bannerOpen && !chatOpen && !isCapturingSpeech && !planCardActive && /* @__PURE__ */ jsx52("button", {
12740
13823
  type: "button",
12741
13824
  onClick: ifNotDragged(() => setBannerOpen(true)),
12742
- "aria-label": "Show notifications",
13825
+ "aria-label": copy.showNotificationsLabel,
12743
13826
  style: {
12744
13827
  background: notifAccent,
12745
13828
  "--skippr-pulse-color": notifAccent
@@ -12758,7 +13841,7 @@ function VoiceBarFrame({
12758
13841
  type: "button",
12759
13842
  onClick: ifNotDragged(closeBar),
12760
13843
  disabled: isPausing || isLoading,
12761
- "aria-label": sessionLive ? "End session" : "Close",
13844
+ "aria-label": sessionLive ? copy.endSessionLabel : copy.closeLabel,
12762
13845
  className: cn(EDGE_BUTTON, "skippr:relative skippr:size-[26px]", isLoading && "skippr:cursor-not-allowed skippr:opacity-40 skippr:hover:bg-transparent"),
12763
13846
  children: [
12764
13847
  isPausing && /* @__PURE__ */ jsx52(BusyRing, {
@@ -12778,7 +13861,7 @@ function VoiceBarFrame({
12778
13861
  }),
12779
13862
  /* @__PURE__ */ jsx52("span", {
12780
13863
  className: "skippr:whitespace-nowrap skippr:text-[12.5px] skippr:font-semibold skippr:text-[#5a5650]",
12781
- children: "Agent is loading"
13864
+ children: copy.voiceBarLoading
12782
13865
  }),
12783
13866
  /* @__PURE__ */ jsxs41("span", {
12784
13867
  className: "skippr:flex skippr:items-end skippr:gap-[3px]",
@@ -12834,7 +13917,7 @@ function VoiceBarFrame({
12834
13917
  !isHeld && /* @__PURE__ */ jsx52("button", {
12835
13918
  type: "button",
12836
13919
  onClick: ifNotDragged(() => void toggleMute()),
12837
- "aria-label": isMuted ? "Unmute" : "Mute",
13920
+ "aria-label": isMuted ? copy.unmuteLabel : copy.muteLabel,
12838
13921
  className: "skippr:flex skippr:size-[26px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-full skippr:bg-transparent skippr:opacity-85 skippr:cursor-pointer skippr:transition-[opacity,color] skippr:hover:opacity-100 skippr:hover:text-destructive",
12839
13922
  children: /* @__PURE__ */ jsx52(MicLevelGlyph, {
12840
13923
  muted: isMuted
@@ -12843,7 +13926,7 @@ function VoiceBarFrame({
12843
13926
  /* @__PURE__ */ jsx52("button", {
12844
13927
  type: "button",
12845
13928
  onClick: ifNotDragged(togglePause),
12846
- "aria-label": isHeld ? "Resume" : "Stop",
13929
+ "aria-label": isHeld ? copy.resumeLabel : copy.stopLabel,
12847
13930
  className: cn("skippr:flex skippr:size-[26px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-full skippr:bg-transparent skippr:cursor-pointer skippr:transition-colors", !isHeld && "skippr:hover:text-destructive"),
12848
13931
  children: isHeld ? /* @__PURE__ */ jsx52(Play, {
12849
13932
  className: "skippr:size-[13px]",
@@ -12864,7 +13947,7 @@ function VoiceBarFrame({
12864
13947
  className: "skippr:size-[15px] skippr:text-[#8b877f]",
12865
13948
  strokeWidth: 2
12866
13949
  }),
12867
- "Text mode"
13950
+ copy.voiceBarTextMode
12868
13951
  ]
12869
13952
  }),
12870
13953
  !sessionLive && /* @__PURE__ */ jsxs41("button", {
@@ -12878,7 +13961,7 @@ function VoiceBarFrame({
12878
13961
  }
12879
13962
  }),
12880
13963
  disabled: !canStart && !needsLogin,
12881
- "aria-label": "Talk to AI Agent",
13964
+ "aria-label": copy.voiceBarTalkToAgent,
12882
13965
  style: { color: "var(--skippr-brand-foreground, #2d2b3d)" },
12883
13966
  className: cn(PILL, "skippr:cursor-pointer skippr:bg-brand skippr:px-[12px] skippr:transition-[filter] skippr:hover:brightness-[1.04] skippr:active:scale-[0.98] skippr:disabled:cursor-not-allowed skippr:disabled:opacity-60"),
12884
13967
  children: [
@@ -12892,14 +13975,14 @@ function VoiceBarFrame({
12892
13975
  className: "skippr:block skippr:size-full skippr:bg-launcher"
12893
13976
  })
12894
13977
  }),
12895
- "Talk to AI Agent"
13978
+ copy.voiceBarTalkToAgent
12896
13979
  ]
12897
13980
  }),
12898
13981
  (sessionLive || isRoomChat) && /* @__PURE__ */ jsx52("button", {
12899
13982
  type: "button",
12900
13983
  onClick: ifNotDragged(toggleChat),
12901
13984
  disabled: isLoading,
12902
- "aria-label": "Open chat",
13985
+ "aria-label": copy.openChatLabel,
12903
13986
  className: cn(EDGE_BUTTON, "skippr:size-[30px]", isLoading && "skippr:cursor-not-allowed skippr:opacity-40 skippr:hover:bg-transparent"),
12904
13987
  children: /* @__PURE__ */ jsx52(MessageSquare, {
12905
13988
  className: "skippr:size-[18px]",
@@ -12936,10 +14019,10 @@ function VoiceBarFrame({
12936
14019
  }
12937
14020
 
12938
14021
  // src/components/VoiceBarLauncher.tsx
12939
- import { useCallback as useCallback35, useEffect as useEffect49, useRef as useRef44, useState as useState40 } from "react";
14022
+ import { useCallback as useCallback35, useEffect as useEffect50, useRef as useRef45, useState as useState41 } from "react";
12940
14023
 
12941
14024
  // src/components/LauncherNotification.tsx
12942
- import { useEffect as useEffect48, useRef as useRef43, useState as useState39 } from "react";
14025
+ import { useEffect as useEffect49, useRef as useRef44, useState as useState40 } from "react";
12943
14026
  import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
12944
14027
  function LauncherNotification({
12945
14028
  notifications,
@@ -12947,10 +14030,11 @@ function LauncherNotification({
12947
14030
  mode,
12948
14031
  onDismiss
12949
14032
  }) {
12950
- const [index2, setIndex] = useState39(0);
12951
- const [paused, setPaused] = useState39(false);
12952
- const cardRef = useRef43(null);
12953
- useEffect48(() => {
14033
+ const copy = useChromeCopy();
14034
+ const [index2, setIndex] = useState40(0);
14035
+ const [paused, setPaused] = useState40(false);
14036
+ const cardRef = useRef44(null);
14037
+ useEffect49(() => {
12954
14038
  const el = cardRef.current;
12955
14039
  if (!el)
12956
14040
  return;
@@ -12963,7 +14047,7 @@ function LauncherNotification({
12963
14047
  el.removeEventListener("mouseleave", leave);
12964
14048
  };
12965
14049
  }, []);
12966
- useEffect48(() => {
14050
+ useEffect49(() => {
12967
14051
  if (paused)
12968
14052
  return;
12969
14053
  const rotate = setInterval(() => setIndex((current) => (current + 1) % notifications.length), TIP_ROTATE_MS);
@@ -13012,8 +14096,8 @@ function LauncherNotification({
13012
14096
  notification.activate();
13013
14097
  onDismiss();
13014
14098
  },
13015
- "aria-label": "Start",
13016
- title: "Start",
14099
+ "aria-label": copy.tipStartLabel,
14100
+ title: copy.tipStartLabel,
13017
14101
  className: "skippr:flex skippr:size-[17px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:bg-[#2D2D3F] skippr:text-white skippr:transition-colors skippr:hover:bg-[#3d3d52]",
13018
14102
  children: /* @__PURE__ */ jsx53(Play, {
13019
14103
  className: "skippr:size-[8px] skippr:fill-current",
@@ -13023,8 +14107,8 @@ function LauncherNotification({
13023
14107
  hasMultiple && /* @__PURE__ */ jsx53("button", {
13024
14108
  type: "button",
13025
14109
  onClick: () => setIndex((current) => (current + 1) % notifications.length),
13026
- "aria-label": "Next",
13027
- title: "Next",
14110
+ "aria-label": copy.tipNextLabel,
14111
+ title: copy.tipNextLabel,
13028
14112
  className: "skippr:-ml-[2px] skippr:flex skippr:size-[16px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:text-[#8b877f] skippr:transition-colors skippr:hover:bg-[#f2f0eb] skippr:hover:text-[#5a5650]",
13029
14113
  children: /* @__PURE__ */ jsx53(ChevronRight, {
13030
14114
  className: "skippr:size-[12px]",
@@ -13123,6 +14207,7 @@ function LauncherChat({
13123
14207
  onClick
13124
14208
  }) {
13125
14209
  const vertical = isHorizontalEdge(edge);
14210
+ const copy = useChromeCopy();
13126
14211
  return /* @__PURE__ */ jsxs43("div", {
13127
14212
  className: cn("skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center skippr:gap-[5px] skippr:overflow-hidden skippr:transition-all skippr:duration-[400ms] skippr:ease-[cubic-bezier(0.22,1,0.36,1)]", AVATAR_FLEX[edge]),
13128
14213
  style: {
@@ -13134,7 +14219,7 @@ function LauncherChat({
13134
14219
  /* @__PURE__ */ jsx54("button", {
13135
14220
  type: "button",
13136
14221
  onClick,
13137
- "aria-label": "Open chat",
14222
+ "aria-label": copy.openChatLabel,
13138
14223
  tabIndex: revealed ? 0 : -1,
13139
14224
  className: "skippr:flex skippr:size-[46px] skippr:shrink-0 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:bg-transparent skippr:p-0 skippr:text-foreground skippr:transition-colors skippr:hover:bg-foreground/8",
13140
14225
  children: /* @__PURE__ */ jsx54(MessageSquare, {
@@ -13177,8 +14262,9 @@ function VoiceBarLauncher({
13177
14262
  onDrop,
13178
14263
  setDragging
13179
14264
  }) {
13180
- const containerRef = useRef44(null);
13181
- const closeTimerRef = useRef44(null);
14265
+ const copy = useChromeCopy();
14266
+ const containerRef = useRef45(null);
14267
+ const closeTimerRef = useRef45(null);
13182
14268
  const onDropPos = useCallback35((pos) => {
13183
14269
  const el = containerRef.current;
13184
14270
  if (!el)
@@ -13188,16 +14274,16 @@ function VoiceBarLauncher({
13188
14274
  }, [onDrop]);
13189
14275
  const { wasDraggedRef } = useVoiceBarDrag(containerRef, onDropPos, null, setDragging);
13190
14276
  const horizontal = isHorizontalEdge(dock.edge);
13191
- const [cardOpen, setCardOpen] = useState40(false);
13192
- const [loginOpen, setLoginOpen] = useState40(false);
13193
- const [hovered, setHovered] = useState40(false);
13194
- useEffect49(() => {
14277
+ const [cardOpen, setCardOpen] = useState41(false);
14278
+ const [loginOpen, setLoginOpen] = useState41(false);
14279
+ const [hovered, setHovered] = useState41(false);
14280
+ useEffect50(() => {
13195
14281
  if (!needsLogin)
13196
14282
  setLoginOpen(false);
13197
14283
  }, [needsLogin]);
13198
14284
  const hasNotif = notifications.length > 0;
13199
14285
  const dotColor = notifications.find((item) => item.kind === NOTIFICATION_KIND.Module)?.accentColor ?? notifications[0]?.accentColor ?? NOTIF_ACCENT_COLOR;
13200
- useEffect49(() => {
14286
+ useEffect50(() => {
13201
14287
  const el = containerRef.current;
13202
14288
  if (!el)
13203
14289
  return;
@@ -13279,7 +14365,7 @@ function VoiceBarLauncher({
13279
14365
  /* @__PURE__ */ jsx54("button", {
13280
14366
  type: "button",
13281
14367
  onClick: open,
13282
- "aria-label": "Open Agent",
14368
+ "aria-label": copy.openAgentLabel,
13283
14369
  className: STRIP_ICON_BUTTON,
13284
14370
  children: /* @__PURE__ */ jsx54(Play, {
13285
14371
  className: "skippr:size-[13px] skippr:fill-current",
@@ -13292,7 +14378,7 @@ function VoiceBarLauncher({
13292
14378
  /* @__PURE__ */ jsx54("button", {
13293
14379
  type: "button",
13294
14380
  onClick: openChat,
13295
- "aria-label": "Open chat",
14381
+ "aria-label": copy.openChatLabel,
13296
14382
  className: STRIP_ICON_BUTTON,
13297
14383
  children: /* @__PURE__ */ jsx54(MessageSquare, {
13298
14384
  className: "skippr:size-[14px]",
@@ -13303,14 +14389,14 @@ function VoiceBarLauncher({
13303
14389
  }) : /* @__PURE__ */ jsx54("button", {
13304
14390
  type: "button",
13305
14391
  onClick: open,
13306
- "aria-label": "Open Agent",
14392
+ "aria-label": copy.openAgentLabel,
13307
14393
  className: "skippr:absolute skippr:inset-0 skippr:cursor-grab skippr:bg-transparent skippr:p-0"
13308
14394
  })
13309
14395
  }),
13310
14396
  hasNotif && (expanded ? /* @__PURE__ */ jsx54("button", {
13311
14397
  type: "button",
13312
14398
  onClick: toggleCard,
13313
- "aria-label": "Show notifications",
14399
+ "aria-label": copy.showNotificationsLabel,
13314
14400
  style: {
13315
14401
  background: dotColor,
13316
14402
  "--skippr-pulse-color": dotColor
@@ -13319,7 +14405,7 @@ function VoiceBarLauncher({
13319
14405
  }) : /* @__PURE__ */ jsx54("button", {
13320
14406
  type: "button",
13321
14407
  onClick: toggleCard,
13322
- "aria-label": "Show notifications",
14408
+ "aria-label": copy.showNotificationsLabel,
13323
14409
  style: {
13324
14410
  background: dotColor,
13325
14411
  "--skippr-pulse-color": dotColor
@@ -13353,7 +14439,7 @@ function VoiceBarLauncher({
13353
14439
  /* @__PURE__ */ jsx54("button", {
13354
14440
  type: "button",
13355
14441
  onClick: open,
13356
- "aria-label": "Open Agent",
14442
+ "aria-label": copy.openAgentLabel,
13357
14443
  className: "skippr:block skippr:shrink-0 skippr:cursor-grab skippr:rounded-full skippr:bg-transparent skippr:p-0 skippr:transition-transform skippr:duration-200 skippr:hover:scale-105",
13358
14444
  children: logoUrl ? /* @__PURE__ */ jsx54("img", {
13359
14445
  src: logoUrl,
@@ -13369,7 +14455,7 @@ function VoiceBarLauncher({
13369
14455
  hasNotif && /* @__PURE__ */ jsx54("button", {
13370
14456
  type: "button",
13371
14457
  onClick: toggleCard,
13372
- "aria-label": "Show notifications",
14458
+ "aria-label": copy.showNotificationsLabel,
13373
14459
  style: {
13374
14460
  background: dotColor,
13375
14461
  "--skippr-pulse-color": dotColor,
@@ -13391,7 +14477,7 @@ function VoiceBarLauncher({
13391
14477
  // src/components/VoiceBar.tsx
13392
14478
  import { jsx as jsx55 } from "react/jsx-runtime";
13393
14479
  function VoiceBar({ revealed }) {
13394
- const ctx = useContext27(LiveAgentContext);
14480
+ const ctx = useContext28(LiveAgentContext);
13395
14481
  if (!ctx) {
13396
14482
  throw new Error("VoiceBar must be used within a <LiveAgent> provider");
13397
14483
  }
@@ -13482,8 +14568,8 @@ function AgentCursorMount({ animated }) {
13482
14568
  function PlanPanelOpener() {
13483
14569
  const plan = usePlanUpdates();
13484
14570
  const { expandPanel } = useLiveAgent();
13485
- const surfacedPlanIdRef = useRef45(null);
13486
- useEffect50(() => {
14571
+ const surfacedPlanIdRef = useRef46(null);
14572
+ useEffect51(() => {
13487
14573
  if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
13488
14574
  return;
13489
14575
  surfacedPlanIdRef.current = plan.planId;
@@ -13525,9 +14611,9 @@ function LiveAgent(props) {
13525
14611
  const auth = useAuth({ appKey, locale });
13526
14612
  const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
13527
14613
  const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
13528
- const [activeModule, setActiveModule] = useState41(null);
13529
- const [sessionAgentMode, setSessionAgentMode] = useState41(null);
13530
- const [isExchanging, setIsExchanging] = useState41(false);
14614
+ const [activeModule, setActiveModule] = useState42(null);
14615
+ const [sessionAgentMode, setSessionAgentMode] = useState42(null);
14616
+ const [isExchanging, setIsExchanging] = useState42(false);
13531
14617
  const minimizeOnSessionStart = useCallback36(() => {
13532
14618
  if (minimizable) {
13533
14619
  setIsMinimized(true);
@@ -13539,7 +14625,7 @@ function LiveAgent(props) {
13539
14625
  setIsMinimized(false);
13540
14626
  setIsPanelOpen(true);
13541
14627
  }, []);
13542
- const isExchangeDisconnectingRef = useRef45(false);
14628
+ const isExchangeDisconnectingRef = useRef46(false);
13543
14629
  const minimizeOnSessionDisconnect = useCallback36(() => {
13544
14630
  if (isExchangeDisconnectingRef.current)
13545
14631
  return;
@@ -13564,6 +14650,7 @@ function LiveAgent(props) {
13564
14650
  disconnect,
13565
14651
  isPaused,
13566
14652
  pauseTimeoutSeconds,
14653
+ sessionAgenda,
13567
14654
  historyMessages,
13568
14655
  pendingScreenStream,
13569
14656
  armScreenStream,
@@ -13590,32 +14677,32 @@ function LiveAgent(props) {
13590
14677
  isDisconnecting,
13591
14678
  isExchanging
13592
14679
  });
13593
- const isRoomReleasedRef = useRef45(false);
14680
+ const isRoomReleasedRef = useRef46(false);
13594
14681
  isRoomReleasedRef.current = !isConnected || isPausing || isDisconnecting;
13595
14682
  const handleRoomDisconnected = useCallback36(() => {
13596
14683
  if (isExchangeDisconnectingRef.current || isRoomReleasedRef.current)
13597
14684
  return;
13598
14685
  disconnect();
13599
14686
  }, [disconnect]);
13600
- const [isPanelOpen, setIsPanelOpen] = useState41(defaultOpen);
13601
- const [panelEntry, setPanelEntry] = useState41(PANEL_ENTRY.Launcher);
13602
- const [isMinimized, setIsMinimized] = useState41(minimizable && !defaultOpen);
13603
- const [pendingStart, setPendingStart] = useState41(null);
13604
- const [sidebarTab, setSidebarTab] = useState41("agenda");
13605
- const [phasesSnapshot, setPhasesSnapshot] = useState41([]);
13606
- const [startMuted, setStartMuted] = useState41(false);
13607
- const [textMode, setTextMode] = useState41(false);
13608
- const [panelExpanded, setPanelExpanded] = useState41(false);
14687
+ const [isPanelOpen, setIsPanelOpen] = useState42(defaultOpen);
14688
+ const [panelEntry, setPanelEntry] = useState42(PANEL_ENTRY.Launcher);
14689
+ const [isMinimized, setIsMinimized] = useState42(minimizable && !defaultOpen);
14690
+ const [pendingStart, setPendingStart] = useState42(null);
14691
+ const [sidebarTab, setSidebarTab] = useState42("agenda");
14692
+ const [phasesSnapshot, setPhasesSnapshot] = useState42([]);
14693
+ const [startMuted, setStartMuted] = useState42(false);
14694
+ const [textMode, setTextMode] = useState42(false);
14695
+ const [panelExpanded, setPanelExpanded] = useState42(false);
13609
14696
  const togglePanelExpanded = useCallback36(() => setPanelExpanded((prev) => !prev), []);
13610
- const panelRef = useRef45(null);
13611
- const controlBarRef = useRef45(null);
13612
- const voiceBarRef = useRef45(null);
13613
- const [isDragging, setIsDragging] = useState41(false);
14697
+ const panelRef = useRef46(null);
14698
+ const controlBarRef = useRef46(null);
14699
+ const voiceBarRef = useRef46(null);
14700
+ const [isDragging, setIsDragging] = useState42(false);
13614
14701
  const setTextModeState = useCallback36((enabled) => {
13615
14702
  setTextMode(enabled);
13616
14703
  }, []);
13617
14704
  const showControlBar = isConnected || isStarting || isPausing;
13618
- useEffect50(() => {
14705
+ useEffect51(() => {
13619
14706
  if (!isConnected)
13620
14707
  setTextModeState(false);
13621
14708
  }, [isConnected, setTextModeState]);
@@ -13668,7 +14755,7 @@ function LiveAgent(props) {
13668
14755
  const agentMode = sessionAgentMode ?? operatingModule?.mode ?? null;
13669
14756
  const shouldAnimateCursor = operatingModule?.uiPreferences?.animateCursor ?? animateAgentCursor;
13670
14757
  const buddyDefaultMissing = buddyActive && hasResolvedModules && !modulesError && !defaultModule && !isSessionLive;
13671
- const resumableSession = useMemo10(() => getResumableSession(operatingModule), [operatingModule]);
14758
+ const resumableSession = useMemo12(() => getResumableSession(operatingModule), [operatingModule]);
13672
14759
  const resumeSession = useCallback36(async () => {
13673
14760
  if (!resumableSession)
13674
14761
  return;
@@ -13732,11 +14819,11 @@ function LiveAgent(props) {
13732
14819
  setPendingStart(pending);
13733
14820
  setIsMinimized(false);
13734
14821
  }, []);
13735
- const [welcomeDismissed, setWelcomeDismissed] = useState41(false);
14822
+ const [welcomeDismissed, setWelcomeDismissed] = useState42(false);
13736
14823
  const dismissWelcome = useCallback36(() => setWelcomeDismissed(true), []);
13737
- const [savedPosition] = useState41(readSavedPosition);
13738
- const [currentPosition, setCurrentPosition] = useState41(savedPosition ?? "right");
13739
- const positionLockedRef = useRef45(savedPosition !== null);
14824
+ const [savedPosition] = useState42(readSavedPosition);
14825
+ const [currentPosition, setCurrentPosition] = useState42(savedPosition ?? "right");
14826
+ const positionLockedRef = useRef46(savedPosition !== null);
13740
14827
  const setPositionWithPersist = useCallback36((pos) => {
13741
14828
  positionLockedRef.current = true;
13742
14829
  setCurrentPosition(pos);
@@ -13745,18 +14832,18 @@ function LiveAgent(props) {
13745
14832
  } catch {}
13746
14833
  }, []);
13747
14834
  const serverPosition = appearance?.position ?? null;
13748
- useEffect50(() => {
14835
+ useEffect51(() => {
13749
14836
  if (!serverPosition || positionLockedRef.current)
13750
14837
  return;
13751
14838
  setCurrentPosition(serverPosition);
13752
14839
  }, [serverPosition]);
13753
- const [savedLauncherBottom] = useState41(readSavedLauncherBottom);
13754
- const hasDraggedRef = useRef45(savedLauncherBottom !== null);
13755
- const verticalAlignRef = useRef45(hostVerticalAlign ?? "bottom");
13756
- const [launcherBottomPx, setLauncherBottomPxState] = useState41(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlignRef.current));
13757
- const [popsDown, setPopsDown] = useState41(() => launcherPopsDown(launcherBottomPx));
14840
+ const [savedLauncherBottom] = useState42(readSavedLauncherBottom);
14841
+ const hasDraggedRef = useRef46(savedLauncherBottom !== null);
14842
+ const verticalAlignRef = useRef46(hostVerticalAlign ?? "bottom");
14843
+ const [launcherBottomPx, setLauncherBottomPxState] = useState42(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlignRef.current));
14844
+ const [popsDown, setPopsDown] = useState42(() => launcherPopsDown(launcherBottomPx));
13758
14845
  const serverVerticalAlign = appearance?.verticalAlign ?? null;
13759
- useEffect50(() => {
14846
+ useEffect51(() => {
13760
14847
  if (!serverVerticalAlign || hostVerticalAlign !== undefined || hasDraggedRef.current)
13761
14848
  return;
13762
14849
  verticalAlignRef.current = serverVerticalAlign;
@@ -13772,28 +14859,28 @@ function LiveAgent(props) {
13772
14859
  localStorage.setItem("skippr_widget_bottom", String(px));
13773
14860
  } catch {}
13774
14861
  }, []);
13775
- const launcherBottomPxRef = useRef45(launcherBottomPx);
14862
+ const launcherBottomPxRef = useRef46(launcherBottomPx);
13776
14863
  launcherBottomPxRef.current = launcherBottomPx;
13777
- const [chatActivityAt, setChatActivityAt] = useState41(0);
14864
+ const [chatActivityAt, setChatActivityAt] = useState42(0);
13778
14865
  const reportChatActivity = useCallback36(() => {
13779
14866
  const now = Date.now();
13780
14867
  setChatActivityAt((last) => now - last < CHAT_ACTIVITY_THROTTLE_MS ? last : now);
13781
14868
  }, []);
13782
- const [chatDraft, setChatDraft] = useState41("");
13783
- const [autoStartAfterLogin, setAutoStartAfterLogin] = useState41(false);
14869
+ const [chatDraft, setChatDraft] = useState42("");
14870
+ const [autoStartAfterLogin, setAutoStartAfterLogin] = useState42(false);
13784
14871
  const commitLauncherDrop = useCallback36(({ side, bottomPx }) => {
13785
14872
  setPositionWithPersist(side);
13786
14873
  setLauncherBottomPx(bottomPx);
13787
14874
  }, [setPositionWithPersist, setLauncherBottomPx]);
13788
- const [barPos, setBarPosState] = useState41(() => readSavedBarPos());
13789
- const barPosRatioRef = useRef45(barPos === null ? null : barPosRatio(barPos));
14875
+ const [barPos, setBarPosState] = useState42(() => readSavedBarPos());
14876
+ const barPosRatioRef = useRef46(barPos === null ? null : barPosRatio(barPos));
13790
14877
  const setBarPos = useCallback36((next, widthPx) => {
13791
14878
  const placed = clampBarPos(next, widthPx);
13792
14879
  setBarPosState(placed);
13793
14880
  persistBarPos(placed);
13794
14881
  barPosRatioRef.current = barPosRatio(placed);
13795
14882
  }, []);
13796
- const [savedLauncherDock, setSavedLauncherDock] = useState41(() => readSavedDock("launcher"));
14883
+ const [savedLauncherDock, setSavedLauncherDock] = useState42(() => readSavedDock("launcher"));
13797
14884
  const setLauncherDock = useCallback36((next) => {
13798
14885
  setSavedLauncherDock(next);
13799
14886
  persistDock("launcher", next);
@@ -13803,7 +14890,7 @@ function LiveAgent(props) {
13803
14890
  edge: launcherEdge,
13804
14891
  offsetPx: defaultOffset(launcherEdge)
13805
14892
  };
13806
- useEffect50(() => {
14893
+ useEffect51(() => {
13807
14894
  const syncToViewport = () => {
13808
14895
  const next = hasDraggedRef.current ? clampLauncherBottom(launcherBottomPxRef.current) : verticalAlignToBottomPx(verticalAlignRef.current);
13809
14896
  setLauncherBottomPxState(next);
@@ -13813,7 +14900,7 @@ function LiveAgent(props) {
13813
14900
  window.addEventListener("resize", syncToViewport);
13814
14901
  return () => window.removeEventListener("resize", syncToViewport);
13815
14902
  }, []);
13816
- useEffect50(() => {
14903
+ useEffect51(() => {
13817
14904
  const syncBarToViewport = () => {
13818
14905
  const ratios = barPosRatioRef.current;
13819
14906
  const measured = voiceBarRef.current?.getBoundingClientRect().width;
@@ -13896,7 +14983,7 @@ function LiveAgent(props) {
13896
14983
  bearerToken,
13897
14984
  selectModule
13898
14985
  });
13899
- useEffect50(() => {
14986
+ useEffect51(() => {
13900
14987
  if (!autoStartAfterLogin)
13901
14988
  return;
13902
14989
  if (bearerToken === null || !hasResolvedModules || isSessionLive)
@@ -13922,14 +15009,16 @@ function LiveAgent(props) {
13922
15009
  } = useSessionHistory({
13923
15010
  agentId: defaultAgentId ?? undefined,
13924
15011
  enabled: idleHistoryEnabled,
13925
- authedFetch
15012
+ authedFetch,
15013
+ locale
13926
15014
  });
13927
- const idleHistory = useMemo10(() => ({
15015
+ const idleHistory = useMemo12(() => ({
13928
15016
  messages: idleHistoryMessages,
13929
15017
  phases: idleHistoryPhases,
13930
15018
  isLoading: isLoadingHistory
13931
15019
  }), [idleHistoryMessages, idleHistoryPhases, isLoadingHistory]);
13932
- const [pageSplashDismissed, setPageSplashDismissed] = useState41(false);
15020
+ const phaseLabels = usePhaseLabels(sessionAgenda, { agentId: defaultAgentId, phases: idleHistoryPhases }, locale);
15021
+ const [pageSplashDismissed, setPageSplashDismissed] = useState42(false);
13933
15022
  const dismissSplash = useCallback36((surface) => {
13934
15023
  if (surface !== SPLASH_SURFACE.Panel) {
13935
15024
  setPageSplashDismissed(true);
@@ -13940,7 +15029,7 @@ function LiveAgent(props) {
13940
15029
  }, [closePanel, minimizePanel]);
13941
15030
  const reopenSplash = useCallback36(() => setPageSplashDismissed(false), []);
13942
15031
  const { optedOut: splashOverlayOptedOut, optOut: optOutOfSplashOverlay } = useSplashOverlayOptOut(authedFetch, splashOverlayOptedOutForUser);
13943
- const configuredSplashSurfaces = useMemo10(() => resolveSplashSurfaces({
15032
+ const configuredSplashSurfaces = useMemo12(() => resolveSplashSurfaces({
13944
15033
  splash: appearance?.splash ?? null,
13945
15034
  defaultAgentControls: defaultModule?.controls ?? null,
13946
15035
  isRoomChat: (agentControls?.chat ?? DEFAULT_CHAT_SURFACE) === CHAT_SURFACE.Room,
@@ -13957,7 +15046,7 @@ function LiveAgent(props) {
13957
15046
  isSessionLive,
13958
15047
  splashOverlayOptedOut
13959
15048
  ]);
13960
- const splashSurfaces = useMemo10(() => visibleSplashSurfaces(configuredSplashSurfaces, {
15049
+ const splashSurfaces = useMemo12(() => visibleSplashSurfaces(configuredSplashSurfaces, {
13961
15050
  pageDismissed: pageSplashDismissed,
13962
15051
  panelEntry
13963
15052
  }), [configuredSplashSurfaces, pageSplashDismissed, panelEntry]);
@@ -13967,7 +15056,7 @@ function LiveAgent(props) {
13967
15056
  isSplashVisible: splashSurfaces.overlay || splashSurfaces.panel || splashSurfaces.applies && !pageSplashDismissed,
13968
15057
  isSessionLive
13969
15058
  });
13970
- useEffect50(() => {
15059
+ useEffect51(() => {
13971
15060
  const open = () => {
13972
15061
  reopenSplash();
13973
15062
  if (configuredSplashSurfaces.overlay)
@@ -13980,7 +15069,7 @@ function LiveAgent(props) {
13980
15069
  window.addEventListener(SKIPPR_OPEN_EVENT, open);
13981
15070
  return () => window.removeEventListener(SKIPPR_OPEN_EVENT, open);
13982
15071
  }, [configuredSplashSurfaces, reopenSplash, expandPanel, revealBar]);
13983
- const ctx = useMemo10(() => ({
15072
+ const ctx = useMemo12(() => ({
13984
15073
  connection,
13985
15074
  shouldConnect,
13986
15075
  isConnected,
@@ -14002,6 +15091,7 @@ function LiveAgent(props) {
14002
15091
  idleHistory,
14003
15092
  phasesSnapshot,
14004
15093
  setPhasesSnapshot,
15094
+ phaseLabels,
14005
15095
  isPanelOpen,
14006
15096
  openPanel,
14007
15097
  closePanel,
@@ -14106,6 +15196,7 @@ function LiveAgent(props) {
14106
15196
  historyMessages,
14107
15197
  idleHistory,
14108
15198
  phasesSnapshot,
15199
+ phaseLabels,
14109
15200
  isPanelOpen,
14110
15201
  openPanel,
14111
15202
  closePanel,
@@ -14274,18 +15365,18 @@ function LiveAgent(props) {
14274
15365
  });
14275
15366
  }
14276
15367
  // src/components/SplashScreen.tsx
14277
- import { useContext as useContext28, useEffect as useEffect51, useRef as useRef46 } from "react";
15368
+ import { useContext as useContext29, useEffect as useEffect52, useRef as useRef47 } from "react";
14278
15369
  import { jsx as jsx57 } from "react/jsx-runtime";
14279
15370
  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.";
14280
15371
  function SplashScreen({ className, onDismiss }) {
14281
- const ctx = useContext28(LiveAgentContext);
15372
+ const ctx = useContext29(LiveAgentContext);
14282
15373
  if (!ctx) {
14283
15374
  throw new Error("SplashScreen must be used within a <LiveAgent> provider");
14284
15375
  }
14285
- const disabledWarnedRef = useRef46(false);
15376
+ const disabledWarnedRef = useRef47(false);
14286
15377
  const hasResolvedModules = ctx.hasResolvedModules;
14287
15378
  const isSplashConfigured = ctx.isSplashConfigured;
14288
- useEffect51(() => {
15379
+ useEffect52(() => {
14289
15380
  if (!hasResolvedModules || isSplashConfigured || disabledWarnedRef.current)
14290
15381
  return;
14291
15382
  disabledWarnedRef.current = true;