@skippr/live-agent-sdk 0.42.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
8
8
 
9
9
  // src/components/LiveAgent.tsx
10
10
  import { LiveKitRoom, RoomAudioRenderer } from "@livekit/components-react";
11
- import { useCallback as useCallback8, useMemo as useMemo5, useRef as useRef11, useState as useState12 } from "react";
11
+ import { useCallback as useCallback9, useMemo as useMemo5, useRef as useRef13, useState as useState14 } from "react";
12
12
 
13
13
  // src/context/LiveAgentContext.tsx
14
14
  import { createContext } from "react";
@@ -413,7 +413,12 @@ function useSession({
413
413
  if (captureMode === "screenshare") {
414
414
  screenStream = await requestScreenShare();
415
415
  }
416
- const requestAgentControls = agentControls?.highlight === true ? { highlight: true } : undefined;
416
+ const enabledControls = {};
417
+ if (agentControls?.highlight === true)
418
+ enabledControls.highlight = true;
419
+ if (agentControls?.actions === true)
420
+ enabledControls.actions = true;
421
+ const requestAgentControls = Object.keys(enabledControls).length > 0 ? enabledControls : undefined;
417
422
  try {
418
423
  let resolvedSessionId = existingSessionId;
419
424
  if (!resolvedSessionId) {
@@ -540,6 +545,7 @@ var PRIVATE_ATTR = "data-skippr-private";
540
545
  var DOM_SNAPSHOT_TOPIC = "skippr.dom-snapshot";
541
546
  var DOM_EVENTS_TOPIC = "skippr.dom-events";
542
547
  var HIGHLIGHT_TOPIC = "skippr.highlight";
548
+ var PAGE_ACTIONS_TOPIC = "skippr.page-actions";
543
549
  var NAME_MAX_CHARS = 80;
544
550
 
545
551
  // src/lib/agentMode.ts
@@ -868,6 +874,25 @@ function shouldMaskValue(input) {
868
874
  return true;
869
875
  return false;
870
876
  }
877
+ function isDisabled(element) {
878
+ if ("disabled" in element && element.disabled === true) {
879
+ return true;
880
+ }
881
+ return element.getAttribute("aria-disabled") === "true";
882
+ }
883
+ function isActionBlocked(element) {
884
+ if (isDisabled(element))
885
+ return true;
886
+ if (element.tagName === "IFRAME" && isSensitiveIframe(element))
887
+ return true;
888
+ const ownerFrame = element.ownerDocument?.defaultView?.frameElement;
889
+ if (ownerFrame && isSensitiveIframe(ownerFrame))
890
+ return true;
891
+ if ((element.tagName === "INPUT" || element.tagName === "TEXTAREA") && shouldMaskValue(element)) {
892
+ return true;
893
+ }
894
+ return false;
895
+ }
871
896
  function escapeAttributeValue(value) {
872
897
  return value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/[\r\n]+/g, " ");
873
898
  }
@@ -1084,6 +1109,20 @@ function buildAccessibilityTree() {
1084
1109
  };
1085
1110
  }
1086
1111
 
1112
+ // src/capture/agentActionSignal.ts
1113
+ var isDispatchingAgentAction = false;
1114
+ function runAgentAction(dispatch) {
1115
+ isDispatchingAgentAction = true;
1116
+ try {
1117
+ dispatch();
1118
+ } finally {
1119
+ isDispatchingAgentAction = false;
1120
+ }
1121
+ }
1122
+ function isAgentActionInProgress() {
1123
+ return isDispatchingAgentAction;
1124
+ }
1125
+
1087
1126
  // src/capture/domEvents.ts
1088
1127
  var MUTATION_DEBOUNCE_MS = 250;
1089
1128
  var textEncoder = new TextEncoder;
@@ -1128,6 +1167,8 @@ function installDomEventListeners(localParticipant, options = {}) {
1128
1167
  const onClick = (event) => {
1129
1168
  if (isInsideWidget(event.target))
1130
1169
  return;
1170
+ if (isAgentActionInProgress())
1171
+ return;
1131
1172
  if (!(event.target instanceof Element))
1132
1173
  return;
1133
1174
  const matchedRef = findNearestRef(event.target);
@@ -1144,6 +1185,8 @@ function installDomEventListeners(localParticipant, options = {}) {
1144
1185
  const onSubmit = (event) => {
1145
1186
  if (isInsideWidget(event.target))
1146
1187
  return;
1188
+ if (isAgentActionInProgress())
1189
+ return;
1147
1190
  if (!(event.target instanceof HTMLFormElement))
1148
1191
  return;
1149
1192
  const submittedForm = event.target;
@@ -1519,12 +1562,10 @@ var hasA11yProp = (props) => {
1519
1562
 
1520
1563
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/context.js
1521
1564
  import { createContext as createContext2, useContext, useMemo, createElement } from "react";
1522
- "use client";
1523
1565
  var LucideContext = createContext2({});
1524
1566
  var useLucideContext = () => useContext(LucideContext);
1525
1567
 
1526
1568
  // ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/Icon.js
1527
- "use client";
1528
1569
  var Icon = forwardRef(({ color, size, strokeWidth, absoluteStrokeWidth, className = "", children, iconNode, ...rest }, ref) => {
1529
1570
  const {
1530
1571
  size: contextSize = 24,
@@ -1805,29 +1846,8 @@ var __iconNode26 = [
1805
1846
  var UserPlus = createLucideIcon("user-plus", __iconNode26);
1806
1847
  // src/components/HighlightOverlay.tsx
1807
1848
  import { useCallback as useCallback4, useEffect as useEffect6, useRef as useRef4, useState as useState4 } from "react";
1808
- import { jsx, jsxs } from "react/jsx-runtime";
1809
- var Z_INDEX = 2147483646;
1810
- var HIGHLIGHT_PADDING = 6;
1811
- var textDecoder = new TextDecoder;
1812
- function parseHighlightMessage(payload) {
1813
- try {
1814
- const json = JSON.parse(textDecoder.decode(payload));
1815
- if (!json || typeof json !== "object")
1816
- return null;
1817
- if (json.type === "show" && typeof json.ref === "string") {
1818
- return {
1819
- type: "show",
1820
- ref: json.ref,
1821
- message: typeof json.message === "string" ? json.message : undefined
1822
- };
1823
- }
1824
- if (json.type === "clear")
1825
- return { type: "clear" };
1826
- return null;
1827
- } catch {
1828
- return null;
1829
- }
1830
- }
1849
+
1850
+ // src/capture/elementRef.ts
1831
1851
  function safeGetIframeDocument(iframe) {
1832
1852
  try {
1833
1853
  return iframe.contentDocument;
@@ -1896,6 +1916,31 @@ function getRectInTopViewport(el) {
1896
1916
  }
1897
1917
  return rect;
1898
1918
  }
1919
+
1920
+ // src/components/HighlightOverlay.tsx
1921
+ import { jsx, jsxs } from "react/jsx-runtime";
1922
+ var Z_INDEX = 2147483646;
1923
+ var HIGHLIGHT_PADDING = 6;
1924
+ var textDecoder = new TextDecoder;
1925
+ function parseHighlightMessage(payload) {
1926
+ try {
1927
+ const json = JSON.parse(textDecoder.decode(payload));
1928
+ if (!json || typeof json !== "object")
1929
+ return null;
1930
+ if (json.type === "show" && typeof json.ref === "string") {
1931
+ return {
1932
+ type: "show",
1933
+ ref: json.ref,
1934
+ message: typeof json.message === "string" ? json.message : undefined
1935
+ };
1936
+ }
1937
+ if (json.type === "clear")
1938
+ return { type: "clear" };
1939
+ return null;
1940
+ } catch {
1941
+ return null;
1942
+ }
1943
+ }
1899
1944
  function findScrollableAncestor(el) {
1900
1945
  const win = el.ownerDocument?.defaultView ?? window;
1901
1946
  let node = el.parentElement;
@@ -2463,10 +2508,340 @@ function MinimizedBubble({
2463
2508
  });
2464
2509
  }
2465
2510
 
2511
+ // src/components/PageActionHandler.tsx
2512
+ import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
2513
+ import { useCallback as useCallback6, useEffect as useEffect9, useRef as useRef6, useState as useState6 } from "react";
2514
+
2515
+ // src/components/AgentActivityIndicator.tsx
2516
+ import { useEffect as useEffect8, useRef as useRef5, useState as useState5 } from "react";
2517
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
2518
+ var Z_INDEX2 = 2147483646;
2519
+ function centerOf(element) {
2520
+ const rect = getRectInTopViewport(element);
2521
+ return { left: rect.left + rect.width / 2, top: rect.top + rect.height / 2 };
2522
+ }
2523
+ function AgentActivityIndicator({ target }) {
2524
+ const [position, setPosition] = useState5(null);
2525
+ const frameRef = useRef5(null);
2526
+ useEffect8(() => {
2527
+ if (!target || !target.element.isConnected) {
2528
+ setPosition(null);
2529
+ return;
2530
+ }
2531
+ const update = () => {
2532
+ frameRef.current = null;
2533
+ if (!target.element.isConnected)
2534
+ return;
2535
+ setPosition(centerOf(target.element));
2536
+ };
2537
+ update();
2538
+ const schedule = () => {
2539
+ if (frameRef.current !== null)
2540
+ return;
2541
+ frameRef.current = window.requestAnimationFrame(update);
2542
+ };
2543
+ window.addEventListener("scroll", schedule, { capture: true, passive: true });
2544
+ window.addEventListener("resize", schedule, { passive: true });
2545
+ return () => {
2546
+ window.removeEventListener("scroll", schedule, { capture: true });
2547
+ window.removeEventListener("resize", schedule);
2548
+ if (frameRef.current !== null) {
2549
+ window.cancelAnimationFrame(frameRef.current);
2550
+ frameRef.current = null;
2551
+ }
2552
+ };
2553
+ }, [target]);
2554
+ if (!target || !position)
2555
+ return null;
2556
+ const containerStyle = {
2557
+ position: "fixed",
2558
+ left: `${position.left}px`,
2559
+ top: `${position.top}px`,
2560
+ pointerEvents: "none",
2561
+ zIndex: Z_INDEX2,
2562
+ transition: "left 0.45s cubic-bezier(0.22, 1, 0.36, 1), top 0.45s cubic-bezier(0.22, 1, 0.36, 1)"
2563
+ };
2564
+ return /* @__PURE__ */ jsx5("div", {
2565
+ "data-skippr-private": "true",
2566
+ style: containerStyle,
2567
+ children: /* @__PURE__ */ jsxs5("div", {
2568
+ className: "skippr:relative",
2569
+ children: [
2570
+ /* @__PURE__ */ jsx5(MousePointer2, {
2571
+ "aria-hidden": "true",
2572
+ className: "skippr:h-5 skippr:w-5 skippr:text-cyan-500 skippr:drop-shadow-[0_1px_3px_rgba(0,0,0,0.35)] skippr:animate-skippr-press",
2573
+ fill: "currentColor"
2574
+ }),
2575
+ /* @__PURE__ */ jsx5("div", {
2576
+ role: "status",
2577
+ className: "skippr:absolute skippr:left-5 skippr:top-4 skippr:flex skippr:items-center skippr:gap-1.5 skippr:rounded-full skippr:bg-cyan-500 skippr:px-2.5 skippr:py-1 skippr:shadow-[0_4px_12px_rgba(0,0,0,0.18)]",
2578
+ children: /* @__PURE__ */ jsx5("span", {
2579
+ className: "skippr:text-[11px] skippr:font-medium skippr:text-white skippr:whitespace-nowrap",
2580
+ children: target.label
2581
+ })
2582
+ })
2583
+ ]
2584
+ })
2585
+ });
2586
+ }
2587
+
2588
+ // src/components/PageActionHandler.tsx
2589
+ import { jsx as jsx6 } from "react/jsx-runtime";
2590
+ var INDICATOR_LINGER_MS = 1400;
2591
+ var CURSOR_LEAD_BEFORE_ACTION_MS = 350;
2592
+ var SETTLE_MS = 250;
2593
+ var textDecoder2 = new TextDecoder;
2594
+ function parsePageAction(payload) {
2595
+ try {
2596
+ const json = JSON.parse(textDecoder2.decode(payload));
2597
+ if (!json || typeof json !== "object")
2598
+ return null;
2599
+ switch (json.type) {
2600
+ case "click":
2601
+ return typeof json.ref === "string" ? { type: "click", ref: json.ref } : null;
2602
+ case "fill":
2603
+ return typeof json.ref === "string" && typeof json.value === "string" ? { type: "fill", ref: json.ref, value: json.value } : null;
2604
+ case "select":
2605
+ return typeof json.ref === "string" && typeof json.value === "string" ? { type: "select", ref: json.ref, value: json.value } : null;
2606
+ case "scroll":
2607
+ return typeof json.ref === "string" ? { type: "scroll", ref: json.ref } : null;
2608
+ case "navigate":
2609
+ return typeof json.url === "string" ? { type: "navigate", url: json.url } : null;
2610
+ default:
2611
+ return null;
2612
+ }
2613
+ } catch {
2614
+ return null;
2615
+ }
2616
+ }
2617
+ function isSameOriginHttpUrl(url) {
2618
+ try {
2619
+ const parsed = new URL(url);
2620
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:")
2621
+ return false;
2622
+ return parsed.origin === window.location.origin;
2623
+ } catch {
2624
+ return false;
2625
+ }
2626
+ }
2627
+ function isVisible2(element) {
2628
+ const rect = element.getBoundingClientRect();
2629
+ if (rect.width === 0 && rect.height === 0)
2630
+ return false;
2631
+ const style = element.ownerDocument.defaultView?.getComputedStyle(element);
2632
+ if (!style)
2633
+ return true;
2634
+ return style.visibility !== "hidden" && style.display !== "none";
2635
+ }
2636
+ function setReactCompatibleValue(element, value) {
2637
+ const prototype = element instanceof HTMLTextAreaElement ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype;
2638
+ const setter = Object.getOwnPropertyDescriptor(prototype, "value")?.set;
2639
+ if (setter) {
2640
+ setter.call(element, value);
2641
+ } else {
2642
+ element.value = value;
2643
+ }
2644
+ element.dispatchEvent(new Event("input", { bubbles: true }));
2645
+ element.dispatchEvent(new Event("change", { bubbles: true }));
2646
+ }
2647
+ function performFill(element, value) {
2648
+ if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
2649
+ element.focus();
2650
+ setReactCompatibleValue(element, value);
2651
+ }
2652
+ }
2653
+ function performSelect(element, value) {
2654
+ if (element instanceof HTMLSelectElement) {
2655
+ const match = Array.from(element.options).find((option) => option.value === value || option.label === value || option.text === value);
2656
+ if (match) {
2657
+ element.value = match.value;
2658
+ element.dispatchEvent(new Event("change", { bubbles: true }));
2659
+ }
2660
+ return;
2661
+ }
2662
+ if (element instanceof HTMLInputElement && (element.type === "checkbox" || element.type === "radio")) {
2663
+ const shouldCheck = value !== "false" && value !== "";
2664
+ if (element.checked !== shouldCheck)
2665
+ element.click();
2666
+ }
2667
+ }
2668
+ var INTERACTIVE_SELECTOR = 'button, a[href], [role="button"], [role="link"], input, select, [onclick]';
2669
+ function resolveClickTarget(element) {
2670
+ if (element.matches(INTERACTIVE_SELECTOR))
2671
+ return element;
2672
+ const ancestor = element.closest(INTERACTIVE_SELECTOR);
2673
+ if (ancestor)
2674
+ return ancestor;
2675
+ const descendants = element.querySelectorAll(INTERACTIVE_SELECTOR);
2676
+ const onlyDescendant = descendants.length === 1 ? descendants[0] : null;
2677
+ return onlyDescendant ?? element;
2678
+ }
2679
+ function performClick(element) {
2680
+ const rect = element.getBoundingClientRect();
2681
+ const clientX = rect.left + rect.width / 2;
2682
+ const clientY = rect.top + rect.height / 2;
2683
+ const base = { bubbles: true, cancelable: true, composed: true, clientX, clientY, button: 0 };
2684
+ if (typeof element.focus === "function") {
2685
+ try {
2686
+ element.focus({ preventScroll: true });
2687
+ } catch {}
2688
+ }
2689
+ try {
2690
+ element.dispatchEvent(new PointerEvent("pointerdown", { ...base, pointerId: 1, isPrimary: true }));
2691
+ element.dispatchEvent(new MouseEvent("mousedown", base));
2692
+ element.dispatchEvent(new PointerEvent("pointerup", { ...base, pointerId: 1, isPrimary: true }));
2693
+ element.dispatchEvent(new MouseEvent("mouseup", base));
2694
+ } catch {}
2695
+ element.click();
2696
+ }
2697
+ function performAction(action, element) {
2698
+ switch (action.type) {
2699
+ case "click": {
2700
+ const target = resolveClickTarget(element);
2701
+ target.scrollIntoView({ behavior: "smooth", block: "center" });
2702
+ performClick(target);
2703
+ return;
2704
+ }
2705
+ case "fill":
2706
+ element.scrollIntoView({ behavior: "smooth", block: "center" });
2707
+ performFill(element, action.value);
2708
+ return;
2709
+ case "select":
2710
+ element.scrollIntoView({ behavior: "smooth", block: "center" });
2711
+ performSelect(element, action.value);
2712
+ return;
2713
+ case "scroll":
2714
+ element.scrollIntoView({ behavior: "smooth", block: "center" });
2715
+ return;
2716
+ }
2717
+ }
2718
+ function labelFor(action) {
2719
+ switch (action.type) {
2720
+ case "click":
2721
+ return "Clicking…";
2722
+ case "fill":
2723
+ return "Typing…";
2724
+ case "select":
2725
+ return "Selecting…";
2726
+ case "scroll":
2727
+ return "Scrolling…";
2728
+ case "navigate":
2729
+ return "Navigating…";
2730
+ }
2731
+ }
2732
+ function PageActionHandler() {
2733
+ const [activity, setActivity] = useState6(null);
2734
+ const mountedRef = useRef6(true);
2735
+ const queueRef = useRef6([]);
2736
+ const drainingRef = useRef6(false);
2737
+ const timersRef = useRef6(new Set);
2738
+ const wakesRef = useRef6(new Set);
2739
+ const indicatorTimerRef = useRef6(null);
2740
+ const sleep = useCallback6((ms) => {
2741
+ return new Promise((resolve) => {
2742
+ const wake = () => {
2743
+ wakesRef.current.delete(wake);
2744
+ resolve();
2745
+ };
2746
+ wakesRef.current.add(wake);
2747
+ const timer = setTimeout(() => {
2748
+ timersRef.current.delete(timer);
2749
+ wake();
2750
+ }, ms);
2751
+ timersRef.current.add(timer);
2752
+ });
2753
+ }, []);
2754
+ const showActivity = useCallback6((target) => {
2755
+ if (indicatorTimerRef.current) {
2756
+ clearTimeout(indicatorTimerRef.current);
2757
+ indicatorTimerRef.current = null;
2758
+ }
2759
+ setActivity(target);
2760
+ if (target) {
2761
+ const timer = setTimeout(() => {
2762
+ indicatorTimerRef.current = null;
2763
+ if (mountedRef.current)
2764
+ setActivity(null);
2765
+ }, INDICATOR_LINGER_MS);
2766
+ indicatorTimerRef.current = timer;
2767
+ }
2768
+ }, []);
2769
+ const processOne = useCallback6(async (action) => {
2770
+ if (action.type === "navigate") {
2771
+ queueRef.current.length = 0;
2772
+ if (!isSameOriginHttpUrl(action.url))
2773
+ return;
2774
+ showActivity({ element: document.body, label: labelFor(action) });
2775
+ await sleep(CURSOR_LEAD_BEFORE_ACTION_MS);
2776
+ if (!mountedRef.current)
2777
+ return;
2778
+ window.location.assign(action.url);
2779
+ return;
2780
+ }
2781
+ const element = findElementByRef(action.ref);
2782
+ if (!element || !element.isConnected || !isVisible2(element))
2783
+ return;
2784
+ if (isActionBlocked(element))
2785
+ return;
2786
+ if (action.type === "click" && isActionBlocked(resolveClickTarget(element)))
2787
+ return;
2788
+ showActivity({ element, label: labelFor(action) });
2789
+ await sleep(CURSOR_LEAD_BEFORE_ACTION_MS);
2790
+ if (!mountedRef.current || !element.isConnected)
2791
+ return;
2792
+ runAgentAction(() => performAction(action, element));
2793
+ await sleep(SETTLE_MS);
2794
+ }, [showActivity, sleep]);
2795
+ const drain = useCallback6(async () => {
2796
+ if (drainingRef.current)
2797
+ return;
2798
+ drainingRef.current = true;
2799
+ try {
2800
+ while (mountedRef.current && queueRef.current.length > 0) {
2801
+ const action = queueRef.current.shift();
2802
+ if (!action)
2803
+ break;
2804
+ await processOne(action);
2805
+ }
2806
+ } finally {
2807
+ drainingRef.current = false;
2808
+ }
2809
+ }, [processOne]);
2810
+ const onMessage = useCallback6((msg) => {
2811
+ const action = parsePageAction(msg.payload);
2812
+ if (!action)
2813
+ return;
2814
+ queueRef.current.push(action);
2815
+ drain();
2816
+ }, [drain]);
2817
+ useEffect9(() => {
2818
+ mountedRef.current = true;
2819
+ drainingRef.current = false;
2820
+ return () => {
2821
+ mountedRef.current = false;
2822
+ for (const timer of timersRef.current)
2823
+ clearTimeout(timer);
2824
+ timersRef.current.clear();
2825
+ if (indicatorTimerRef.current) {
2826
+ clearTimeout(indicatorTimerRef.current);
2827
+ indicatorTimerRef.current = null;
2828
+ }
2829
+ for (const wake of wakesRef.current)
2830
+ wake();
2831
+ wakesRef.current.clear();
2832
+ queueRef.current.length = 0;
2833
+ };
2834
+ }, []);
2835
+ useDataChannel2(PAGE_ACTIONS_TOPIC, onMessage);
2836
+ return /* @__PURE__ */ jsx6(AgentActivityIndicator, {
2837
+ target: activity
2838
+ });
2839
+ }
2840
+
2466
2841
  // src/components/ShadowHost.tsx
2467
- import { useLayoutEffect, useRef as useRef5, useState as useState5 } from "react";
2842
+ import { useLayoutEffect, useRef as useRef7, useState as useState7 } from "react";
2468
2843
  import { createPortal } from "react-dom";
2469
- import { jsx as jsx5, Fragment as Fragment3 } from "react/jsx-runtime";
2844
+ import { jsx as jsx7, Fragment as Fragment3 } from "react/jsx-runtime";
2470
2845
  var PROPERTIES_STYLE_ID = "skippr-tw-properties";
2471
2846
  var PROPERTY_RULE = /@property\s+[^{]+\{[^}]*\}/g;
2472
2847
  function hoistTailwindProperties(css) {
@@ -2481,10 +2856,10 @@ function hoistTailwindProperties(css) {
2481
2856
  return css.replace(PROPERTY_RULE, "");
2482
2857
  }
2483
2858
  function ShadowHost({ children }) {
2484
- const hostRef = useRef5(null);
2485
- const [shadowRoot, setShadowRoot] = useState5(null);
2859
+ const hostRef = useRef7(null);
2860
+ const [shadowRoot, setShadowRoot] = useState7(null);
2486
2861
  const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2487
- @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-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-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-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}}}@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-400:oklch(70.4% .191 22.216);--skippr-color-red-700:oklch(50.5% .213 27.518);--skippr-color-amber-400:oklch(82.8% .189 84.429);--skippr-color-emerald-400:oklch(76.5% .177 163.223);--skippr-color-cyan-400:oklch(78.9% .154 211.53);--skippr-color-cyan-900:oklch(39.8% .07 227.392);--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-tracking-wide:.025em;--skippr-tracking-wider:.05em;--skippr-leading-tight:1.25;--skippr-leading-snug:1.375;--skippr-leading-relaxed:1.625;--skippr-ease-in-out:cubic-bezier(.4,0,.2,1);--skippr-animate-spin:spin 1s linear infinite;--skippr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--skippr-animate-bounce:bounce 1s infinite;--skippr-blur-sm:8px;--skippr-default-transition-duration:.15s;--skippr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--skippr-default-font-family:var(--skippr-font-sans);--skippr-default-mono-font-family:var(--skippr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--skippr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--skippr-default-font-feature-settings,normal);font-variation-settings:var(--skippr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--skippr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--skippr-default-mono-font-feature-settings,normal);font-variation-settings:var(--skippr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.skippr\\:pointer-events-none{pointer-events:none}.skippr\\:absolute{position:absolute}.skippr\\:fixed{position:fixed}.skippr\\:relative{position:relative}.skippr\\:sticky{position:sticky}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-full{top:100%}.skippr\\:right-0{right:calc(var(--skippr-spacing)*0)}.skippr\\:right-3{right:calc(var(--skippr-spacing)*3)}.skippr\\:right-5{right:calc(var(--skippr-spacing)*5)}.skippr\\:right-6{right:calc(var(--skippr-spacing)*6)}.skippr\\:-bottom-2{bottom:calc(var(--skippr-spacing)*-2)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-0{bottom:calc(var(--skippr-spacing)*0)}.skippr\\:bottom-6{bottom:calc(var(--skippr-spacing)*6)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-\\[88px\\]{bottom:88px}.skippr\\:bottom-full{bottom:100%}.skippr\\:left-0{left:calc(var(--skippr-spacing)*0)}.skippr\\:left-1\\/2{left:50%}.skippr\\:left-3{left:calc(var(--skippr-spacing)*3)}.skippr\\:left-5{left:calc(var(--skippr-spacing)*5)}.skippr\\:left-6{left:calc(var(--skippr-spacing)*6)}.skippr\\:z-10{z-index:10}.skippr\\:z-\\[9998\\]{z-index:9998}.skippr\\:z-\\[9999\\]{z-index:9999}.skippr\\:col-span-2{grid-column:span 2/span 2}.skippr\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.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-3{margin-top:calc(var(--skippr-spacing)*3)}.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\\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skippr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skippr\\:flex{display:flex}.skippr\\:grid{display:grid}.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\\.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-11{width:calc(var(--skippr-spacing)*11);height:calc(var(--skippr-spacing)*11)}.skippr\\:size-12{width:calc(var(--skippr-spacing)*12);height:calc(var(--skippr-spacing)*12)}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.skippr\\:h-0\\.5{height:calc(var(--skippr-spacing)*.5)}.skippr\\:h-1{height:calc(var(--skippr-spacing)*1)}.skippr\\:h-1\\.5{height:calc(var(--skippr-spacing)*1.5)}.skippr\\:h-2{height:calc(var(--skippr-spacing)*2)}.skippr\\:h-3{height:calc(var(--skippr-spacing)*3)}.skippr\\:h-3\\.5{height:calc(var(--skippr-spacing)*3.5)}.skippr\\:h-4{height:calc(var(--skippr-spacing)*4)}.skippr\\:h-6{height:calc(var(--skippr-spacing)*6)}.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-12{height:calc(var(--skippr-spacing)*12)}.skippr\\:h-\\[min\\(460px\\,calc\\(100vh-200px\\)\\)\\]{height:min(460px,100vh - 200px)}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3{width:calc(var(--skippr-spacing)*3)}.skippr\\:w-4{width:calc(var(--skippr-spacing)*4)}.skippr\\:w-9{width:calc(var(--skippr-spacing)*9)}.skippr\\:w-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-full{width:100%}.skippr\\:max-w-64{max-width:calc(var(--skippr-spacing)*64)}.skippr\\:max-w-\\[80\\%\\]{max-width:80%}.skippr\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom-left{transform-origin:0 100%}.skippr\\:origin-bottom-right{transform-origin:100% 100%}.skippr\\:origin-center{transform-origin:50%}.skippr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-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\\:rotate-\\[225deg\\]{rotate:225deg}.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-tab-fade{animation:.2s ease-out skippr-tab-fade}.skippr\\:animate-skippr-thinking-dot{animation:1.2s ease-in-out infinite skippr-thinking-dot}.skippr\\:animate-spin{animation:var(--skippr-animate-spin)}.skippr\\:cursor-pointer{cursor:pointer}.skippr\\:resize-none{resize:none}.skippr\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.skippr\\:flex-col{flex-direction:column}.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\\:gap-0\\.5{gap:calc(var(--skippr-spacing)*.5)}.skippr\\:gap-1{gap:calc(var(--skippr-spacing)*1)}.skippr\\:gap-1\\.5{gap:calc(var(--skippr-spacing)*1.5)}.skippr\\:gap-2{gap:calc(var(--skippr-spacing)*2)}.skippr\\:gap-2\\.5{gap:calc(var(--skippr-spacing)*2.5)}.skippr\\:gap-3{gap:calc(var(--skippr-spacing)*3)}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}:where(.skippr\\:space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[10px\\]{border-radius:10px}.skippr\\:rounded-\\[14px\\]{border-radius:14px}.skippr\\:rounded-full{border-radius:3.40282e38px}.skippr\\:rounded-lg{border-radius:.625rem}.skippr\\:rounded-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:border{border-style:var(--tw-border-style);border-width:1px}.skippr\\:border-0{border-style:var(--tw-border-style);border-width:0}.skippr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.skippr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.skippr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.skippr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.skippr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.skippr\\:border-border{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-cyan-400{border-color:var(--skippr-color-cyan-400)}.skippr\\:border-destructive\\/20{border-color:oklab(61.4357% .15892 .0698893/.2)}.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary\\/20{border-color:oklab(29.9244% .0107414 -.0305411/.2)}.skippr\\:border-r-border{border-right-color:oklch(92.3% .003 48.717)}.skippr\\:border-l-border{border-left-color:oklch(92.3% .003 48.717)}.skippr\\:bg-amber-400{background-color:var(--skippr-color-amber-400)}.skippr\\:bg-background{background-color:oklch(100% 0 0)}.skippr\\:bg-bubble{background-color:#2d2b3d}.skippr\\:bg-bubble\\/15{background-color:oklab(29.9244% .0107414 -.0305411/.15)}.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-cyan-400{background-color:var(--skippr-color-cyan-400)}.skippr\\:bg-destructive{background-color:#d94f4f}.skippr\\:bg-destructive\\/10{background-color:oklab(61.4357% .15892 .0698893/.1)}.skippr\\:bg-destructive\\/15{background-color:oklab(61.4357% .15892 .0698893/.15)}.skippr\\:bg-emerald-400{background-color:var(--skippr-color-emerald-400)}.skippr\\:bg-foreground{background-color:oklch(14.7% .004 49.25)}.skippr\\:bg-muted{background-color:oklch(97% .001 106.424)}.skippr\\:bg-muted-foreground\\/20{background-color:oklab(55.3% .00687528 .0110332/.2)}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-muted\\/50{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:bg-primary{background-color:#2d2b3d}.skippr\\:bg-primary-foreground\\/15{background-color:oklab(100% 0 5.96046e-8/.15)}.skippr\\:bg-primary-foreground\\/20{background-color:oklab(100% 0 5.96046e-8/.2)}.skippr\\:bg-primary\\/10{background-color:oklab(29.9244% .0107414 -.0305411/.1)}.skippr\\:bg-red-50{background-color:var(--skippr-color-red-50)}.skippr\\:bg-red-400{background-color:var(--skippr-color-red-400)}.skippr\\:bg-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white{background-color:var(--skippr-color-white)}.skippr\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.skippr\\:from-background{--tw-gradient-from:oklch(100% 0 0);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.skippr\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.skippr\\:fill-primary\\/30{fill:oklab(29.9244% .0107414 -.0305411/.3)}.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-6{padding:calc(var(--skippr-spacing)*6)}.skippr\\:px-1{padding-inline:calc(var(--skippr-spacing)*1)}.skippr\\:px-1\\.5{padding-inline:calc(var(--skippr-spacing)*1.5)}.skippr\\:px-2{padding-inline:calc(var(--skippr-spacing)*2)}.skippr\\:px-2\\.5{padding-inline:calc(var(--skippr-spacing)*2.5)}.skippr\\:px-3{padding-inline:calc(var(--skippr-spacing)*3)}.skippr\\:px-4{padding-inline:calc(var(--skippr-spacing)*4)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:py-0\\.5{padding-block:calc(var(--skippr-spacing)*.5)}.skippr\\:py-1{padding-block:calc(var(--skippr-spacing)*1)}.skippr\\:py-1\\.5{padding-block:calc(var(--skippr-spacing)*1.5)}.skippr\\:py-2{padding-block:calc(var(--skippr-spacing)*2)}.skippr\\:py-2\\.5{padding-block:calc(var(--skippr-spacing)*2.5)}.skippr\\:py-3{padding-block:calc(var(--skippr-spacing)*3)}.skippr\\:py-4{padding-block:calc(var(--skippr-spacing)*4)}.skippr\\:pt-3{padding-top:calc(var(--skippr-spacing)*3)}.skippr\\:pb-5{padding-bottom:calc(var(--skippr-spacing)*5)}.skippr\\:text-center{text-align:center}.skippr\\:text-left{text-align:left}.skippr\\:font-mono{font-family:var(--skippr-font-mono)}.skippr\\:text-sm{font-size:var(--skippr-text-sm);line-height:var(--tw-leading,var(--skippr-text-sm--line-height))}.skippr\\:text-xs{font-size:var(--skippr-text-xs);line-height:var(--tw-leading,var(--skippr-text-xs--line-height))}.skippr\\:text-\\[9px\\]{font-size:9px}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-relaxed{--tw-leading:var(--skippr-leading-relaxed);line-height:var(--skippr-leading-relaxed)}.skippr\\:leading-snug{--tw-leading:var(--skippr-leading-snug);line-height:var(--skippr-leading-snug)}.skippr\\:leading-tight{--tw-leading:var(--skippr-leading-tight);line-height:var(--skippr-leading-tight)}.skippr\\:font-medium{--tw-font-weight:var(--skippr-font-weight-medium);font-weight:var(--skippr-font-weight-medium)}.skippr\\:font-semibold{--tw-font-weight:var(--skippr-font-weight-semibold);font-weight:var(--skippr-font-weight-semibold)}.skippr\\:tracking-wide{--tw-tracking:var(--skippr-tracking-wide);letter-spacing:var(--skippr-tracking-wide)}.skippr\\:tracking-wider{--tw-tracking:var(--skippr-tracking-wider);letter-spacing:var(--skippr-tracking-wider)}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-background{color:oklch(100% 0 0)}.skippr\\:text-bubble{color:#2d2b3d}.skippr\\:text-chart-3{color:oklch(66.6% .179 58.318)}.skippr\\:text-cyan-900{color:var(--skippr-color-cyan-900)}.skippr\\:text-destructive{color:#d94f4f}.skippr\\:text-destructive-foreground{color:oklch(100% 0 0)}.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\\/40{color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:text-muted-foreground\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-muted-foreground\\/70{color:oklab(55.3% .00687528 .0110332/.7)}.skippr\\:text-primary{color:#2d2b3d}.skippr\\:text-primary-foreground{color:#fff}.skippr\\:text-primary-foreground\\/70{color:oklab(100% 0 5.96046e-8/.7)}.skippr\\:text-red-700{color:var(--skippr-color-red-700)}.skippr\\:text-secondary-foreground{color:#613700}.skippr\\:text-white{color:var(--skippr-color-white)}.skippr\\:uppercase{text-transform:uppercase}.skippr\\:line-through{text-decoration-line:line-through}.skippr\\:placeholder-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}.skippr\\:opacity-0{opacity:0}.skippr\\:opacity-75{opacity:.75}.skippr\\:opacity-100{opacity:1}.skippr\\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[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_16px_rgba\\(0\\,0\\,0\\,0\\.15\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#00000026),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_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_4px_16px_rgba\\(217\\,79\\,79\\,0\\.45\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#d94f4f73),0 2px 4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(45\\,43\\,61\\,0\\.35\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#2d2b3d59);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_30px_rgba\\(0\\,0\\,0\\,0\\.16\\)\\,0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000029),0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-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-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-foreground\\/10{--tw-ring-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:ring-offset-background{--tw-ring-offset-color:oklch(100% 0 0)}.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-\\[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\\]{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\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.skippr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.skippr\\:ease-in-out{--tw-ease:var(--skippr-ease-in-out);transition-timing-function:var(--skippr-ease-in-out)}.skippr\\:outline-none{--tw-outline-style:none;outline-style:none}.skippr\\:\\[animation-delay\\:0ms\\]{animation-delay:0s}.skippr\\:\\[animation-delay\\:150ms\\]{animation-delay:.15s}.skippr\\:\\[animation-delay\\:200ms\\]{animation-delay:.2s}.skippr\\:\\[animation-delay\\:300ms\\]{animation-delay:.3s}.skippr\\:\\[animation-delay\\:400ms\\]{animation-delay:.4s}.skippr\\: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\\:opacity-100:is(:where(.skippr\\:group):hover *){opacity:1}}.skippr\\:placeholder\\:text-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}@media (hover:hover){.skippr\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--skippr-spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:hover\\:bg-accent:hover{background-color:#e7e5e4}.skippr\\:hover\\:bg-bubble:hover{background-color:#2d2b3d}.skippr\\:hover\\:bg-destructive\\/20:hover{background-color:oklab(61.4357% .15892 .0698893/.2)}.skippr\\:hover\\:bg-destructive\\/25:hover{background-color:oklab(61.4357% .15892 .0698893/.25)}.skippr\\:hover\\:bg-destructive\\/90:hover{background-color:oklab(61.4357% .15892 .0698893/.9)}.skippr\\:hover\\:bg-muted:hover{background-color:oklch(97% .001 106.424)}.skippr\\:hover\\:bg-muted\\/50:hover{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:hover\\:bg-muted\\/80:hover{background-color:oklab(97% -.000282743 .000959196/.8)}.skippr\\:hover\\:bg-primary-foreground\\/10:hover{background-color:oklab(100% 0 5.96046e-8/.1)}.skippr\\:hover\\:bg-primary\\/90:hover{background-color:oklab(29.9244% .0107414 -.0305411/.9)}.skippr\\:hover\\:bg-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:text-primary-foreground:hover{color:#fff}.skippr\\:hover\\:shadow-\\[0_6px_24px_rgba\\(45\\,43\\,61\\,0\\.55\\)\\,0_4px_8px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]:hover{--tw-shadow:0 6px 24px var(--tw-shadow-color,#2d2b3d8c),0 4px 8px 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\\:hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.skippr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus-visible\\:ring-ring:focus-visible{--tw-ring-color:oklch(70.9% .01 56.259)}.skippr\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.skippr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.skippr\\:active\\:translate-y-0:active{--tw-translate-y:calc(var(--skippr-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}.skippr\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.skippr\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.skippr\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}}@keyframes skippr-tab-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-speak{0%,to{opacity:.6;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-thinking-dot{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes skippr-pulse-ring{0%,to{box-shadow:0 0 #2d2b3d66}50%{box-shadow:0 0 0 10px #2d2b3d00}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 #22d3ee73}50%{box-shadow:0 0 0 10px #22d3ee00}}@keyframes skippr-speak-ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.8)}}@keyframes skippr-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes skippr-breathe{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes skippr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-wave{0%,to{opacity:.4;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-bubble-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-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)}}.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-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-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-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}@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}}`;
2862
+ @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-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--skippr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--skippr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--skippr-color-red-50:oklch(97.1% .013 17.38);--skippr-color-red-400:oklch(70.4% .191 22.216);--skippr-color-red-700:oklch(50.5% .213 27.518);--skippr-color-amber-400:oklch(82.8% .189 84.429);--skippr-color-emerald-400:oklch(76.5% .177 163.223);--skippr-color-cyan-400:oklch(78.9% .154 211.53);--skippr-color-cyan-500:oklch(71.5% .143 215.221);--skippr-color-cyan-900:oklch(39.8% .07 227.392);--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-tracking-wide:.025em;--skippr-tracking-wider:.05em;--skippr-leading-tight:1.25;--skippr-leading-snug:1.375;--skippr-leading-relaxed:1.625;--skippr-ease-in-out:cubic-bezier(.4,0,.2,1);--skippr-animate-spin:spin 1s linear infinite;--skippr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--skippr-animate-bounce:bounce 1s infinite;--skippr-blur-sm:8px;--skippr-default-transition-duration:.15s;--skippr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--skippr-default-font-family:var(--skippr-font-sans);--skippr-default-mono-font-family:var(--skippr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--skippr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--skippr-default-font-feature-settings,normal);font-variation-settings:var(--skippr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--skippr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--skippr-default-mono-font-feature-settings,normal);font-variation-settings:var(--skippr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.skippr\\:pointer-events-none{pointer-events:none}.skippr\\:absolute{position:absolute}.skippr\\:fixed{position:fixed}.skippr\\:relative{position:relative}.skippr\\:sticky{position:sticky}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-4{top:calc(var(--skippr-spacing)*4)}.skippr\\:top-full{top:100%}.skippr\\:right-0{right:calc(var(--skippr-spacing)*0)}.skippr\\:right-3{right:calc(var(--skippr-spacing)*3)}.skippr\\:right-5{right:calc(var(--skippr-spacing)*5)}.skippr\\:right-6{right:calc(var(--skippr-spacing)*6)}.skippr\\:-bottom-2{bottom:calc(var(--skippr-spacing)*-2)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-0{bottom:calc(var(--skippr-spacing)*0)}.skippr\\:bottom-6{bottom:calc(var(--skippr-spacing)*6)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-\\[88px\\]{bottom:88px}.skippr\\:bottom-full{bottom:100%}.skippr\\:left-0{left:calc(var(--skippr-spacing)*0)}.skippr\\:left-1\\/2{left:50%}.skippr\\:left-3{left:calc(var(--skippr-spacing)*3)}.skippr\\:left-5{left:calc(var(--skippr-spacing)*5)}.skippr\\:left-6{left:calc(var(--skippr-spacing)*6)}.skippr\\:z-10{z-index:10}.skippr\\:z-\\[9998\\]{z-index:9998}.skippr\\:z-\\[9999\\]{z-index:9999}.skippr\\:col-span-2{grid-column:span 2/span 2}.skippr\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.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-3{margin-top:calc(var(--skippr-spacing)*3)}.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\\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skippr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.skippr\\:flex{display:flex}.skippr\\:grid{display:grid}.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\\.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-11{width:calc(var(--skippr-spacing)*11);height:calc(var(--skippr-spacing)*11)}.skippr\\:size-12{width:calc(var(--skippr-spacing)*12);height:calc(var(--skippr-spacing)*12)}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.skippr\\:h-0\\.5{height:calc(var(--skippr-spacing)*.5)}.skippr\\:h-1{height:calc(var(--skippr-spacing)*1)}.skippr\\:h-1\\.5{height:calc(var(--skippr-spacing)*1.5)}.skippr\\:h-2{height:calc(var(--skippr-spacing)*2)}.skippr\\:h-3{height:calc(var(--skippr-spacing)*3)}.skippr\\:h-3\\.5{height:calc(var(--skippr-spacing)*3.5)}.skippr\\:h-4{height:calc(var(--skippr-spacing)*4)}.skippr\\:h-5{height:calc(var(--skippr-spacing)*5)}.skippr\\:h-6{height:calc(var(--skippr-spacing)*6)}.skippr\\:h-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-12{height:calc(var(--skippr-spacing)*12)}.skippr\\:h-\\[min\\(460px\\,calc\\(100vh-200px\\)\\)\\]{height:min(460px,100vh - 200px)}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3{width:calc(var(--skippr-spacing)*3)}.skippr\\:w-4{width:calc(var(--skippr-spacing)*4)}.skippr\\:w-5{width:calc(var(--skippr-spacing)*5)}.skippr\\:w-9{width:calc(var(--skippr-spacing)*9)}.skippr\\:w-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-full{width:100%}.skippr\\:max-w-64{max-width:calc(var(--skippr-spacing)*64)}.skippr\\:max-w-\\[80\\%\\]{max-width:80%}.skippr\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom-left{transform-origin:0 100%}.skippr\\:origin-bottom-right{transform-origin:100% 100%}.skippr\\:origin-center{transform-origin:50%}.skippr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-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\\:rotate-\\[225deg\\]{rotate:225deg}.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-press{animation:.5s ease-in-out skippr-press}.skippr\\:animate-skippr-tab-fade{animation:.2s ease-out skippr-tab-fade}.skippr\\:animate-skippr-thinking-dot{animation:1.2s ease-in-out infinite skippr-thinking-dot}.skippr\\:animate-spin{animation:var(--skippr-animate-spin)}.skippr\\:cursor-pointer{cursor:pointer}.skippr\\:resize-none{resize:none}.skippr\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.skippr\\:flex-col{flex-direction:column}.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\\:gap-0\\.5{gap:calc(var(--skippr-spacing)*.5)}.skippr\\:gap-1{gap:calc(var(--skippr-spacing)*1)}.skippr\\:gap-1\\.5{gap:calc(var(--skippr-spacing)*1.5)}.skippr\\:gap-2{gap:calc(var(--skippr-spacing)*2)}.skippr\\:gap-2\\.5{gap:calc(var(--skippr-spacing)*2.5)}.skippr\\:gap-3{gap:calc(var(--skippr-spacing)*3)}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}:where(.skippr\\:space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[10px\\]{border-radius:10px}.skippr\\:rounded-\\[14px\\]{border-radius:14px}.skippr\\:rounded-full{border-radius:3.40282e38px}.skippr\\:rounded-lg{border-radius:.625rem}.skippr\\:rounded-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:border{border-style:var(--tw-border-style);border-width:1px}.skippr\\:border-0{border-style:var(--tw-border-style);border-width:0}.skippr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.skippr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.skippr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.skippr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.skippr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.skippr\\:border-border{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-cyan-400{border-color:var(--skippr-color-cyan-400)}.skippr\\:border-destructive\\/20{border-color:oklab(61.4357% .15892 .0698893/.2)}.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary\\/20{border-color:oklab(29.9244% .0107414 -.0305411/.2)}.skippr\\:border-r-border{border-right-color:oklch(92.3% .003 48.717)}.skippr\\:border-l-border{border-left-color:oklch(92.3% .003 48.717)}.skippr\\:bg-amber-400{background-color:var(--skippr-color-amber-400)}.skippr\\:bg-background{background-color:oklch(100% 0 0)}.skippr\\:bg-bubble{background-color:#2d2b3d}.skippr\\:bg-bubble\\/15{background-color:oklab(29.9244% .0107414 -.0305411/.15)}.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-cyan-400{background-color:var(--skippr-color-cyan-400)}.skippr\\:bg-cyan-500{background-color:var(--skippr-color-cyan-500)}.skippr\\:bg-destructive{background-color:#d94f4f}.skippr\\:bg-destructive\\/10{background-color:oklab(61.4357% .15892 .0698893/.1)}.skippr\\:bg-destructive\\/15{background-color:oklab(61.4357% .15892 .0698893/.15)}.skippr\\:bg-emerald-400{background-color:var(--skippr-color-emerald-400)}.skippr\\:bg-foreground{background-color:oklch(14.7% .004 49.25)}.skippr\\:bg-muted{background-color:oklch(97% .001 106.424)}.skippr\\:bg-muted-foreground\\/20{background-color:oklab(55.3% .00687528 .0110332/.2)}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-muted\\/50{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:bg-primary{background-color:#2d2b3d}.skippr\\:bg-primary-foreground\\/15{background-color:oklab(100% 0 5.96046e-8/.15)}.skippr\\:bg-primary-foreground\\/20{background-color:oklab(100% 0 5.96046e-8/.2)}.skippr\\:bg-primary\\/10{background-color:oklab(29.9244% .0107414 -.0305411/.1)}.skippr\\:bg-red-50{background-color:var(--skippr-color-red-50)}.skippr\\:bg-red-400{background-color:var(--skippr-color-red-400)}.skippr\\:bg-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white{background-color:var(--skippr-color-white)}.skippr\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.skippr\\:from-background{--tw-gradient-from:oklch(100% 0 0);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.skippr\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.skippr\\:fill-primary\\/30{fill:oklab(29.9244% .0107414 -.0305411/.3)}.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-6{padding:calc(var(--skippr-spacing)*6)}.skippr\\:px-1{padding-inline:calc(var(--skippr-spacing)*1)}.skippr\\:px-1\\.5{padding-inline:calc(var(--skippr-spacing)*1.5)}.skippr\\:px-2{padding-inline:calc(var(--skippr-spacing)*2)}.skippr\\:px-2\\.5{padding-inline:calc(var(--skippr-spacing)*2.5)}.skippr\\:px-3{padding-inline:calc(var(--skippr-spacing)*3)}.skippr\\:px-4{padding-inline:calc(var(--skippr-spacing)*4)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:py-0\\.5{padding-block:calc(var(--skippr-spacing)*.5)}.skippr\\:py-1{padding-block:calc(var(--skippr-spacing)*1)}.skippr\\:py-1\\.5{padding-block:calc(var(--skippr-spacing)*1.5)}.skippr\\:py-2{padding-block:calc(var(--skippr-spacing)*2)}.skippr\\:py-2\\.5{padding-block:calc(var(--skippr-spacing)*2.5)}.skippr\\:py-3{padding-block:calc(var(--skippr-spacing)*3)}.skippr\\:py-4{padding-block:calc(var(--skippr-spacing)*4)}.skippr\\:pt-3{padding-top:calc(var(--skippr-spacing)*3)}.skippr\\:pb-5{padding-bottom:calc(var(--skippr-spacing)*5)}.skippr\\:text-center{text-align:center}.skippr\\:text-left{text-align:left}.skippr\\:font-mono{font-family:var(--skippr-font-mono)}.skippr\\:text-sm{font-size:var(--skippr-text-sm);line-height:var(--tw-leading,var(--skippr-text-sm--line-height))}.skippr\\:text-xs{font-size:var(--skippr-text-xs);line-height:var(--tw-leading,var(--skippr-text-xs--line-height))}.skippr\\:text-\\[9px\\]{font-size:9px}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-relaxed{--tw-leading:var(--skippr-leading-relaxed);line-height:var(--skippr-leading-relaxed)}.skippr\\:leading-snug{--tw-leading:var(--skippr-leading-snug);line-height:var(--skippr-leading-snug)}.skippr\\:leading-tight{--tw-leading:var(--skippr-leading-tight);line-height:var(--skippr-leading-tight)}.skippr\\:font-medium{--tw-font-weight:var(--skippr-font-weight-medium);font-weight:var(--skippr-font-weight-medium)}.skippr\\:font-semibold{--tw-font-weight:var(--skippr-font-weight-semibold);font-weight:var(--skippr-font-weight-semibold)}.skippr\\:tracking-wide{--tw-tracking:var(--skippr-tracking-wide);letter-spacing:var(--skippr-tracking-wide)}.skippr\\:tracking-wider{--tw-tracking:var(--skippr-tracking-wider);letter-spacing:var(--skippr-tracking-wider)}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-background{color:oklch(100% 0 0)}.skippr\\:text-bubble{color:#2d2b3d}.skippr\\:text-chart-3{color:oklch(66.6% .179 58.318)}.skippr\\:text-cyan-500{color:var(--skippr-color-cyan-500)}.skippr\\:text-cyan-900{color:var(--skippr-color-cyan-900)}.skippr\\:text-destructive{color:#d94f4f}.skippr\\:text-destructive-foreground{color:oklch(100% 0 0)}.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\\/40{color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:text-muted-foreground\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-muted-foreground\\/70{color:oklab(55.3% .00687528 .0110332/.7)}.skippr\\:text-primary{color:#2d2b3d}.skippr\\:text-primary-foreground{color:#fff}.skippr\\:text-primary-foreground\\/70{color:oklab(100% 0 5.96046e-8/.7)}.skippr\\:text-red-700{color:var(--skippr-color-red-700)}.skippr\\:text-secondary-foreground{color:#613700}.skippr\\:text-white{color:var(--skippr-color-white)}.skippr\\:uppercase{text-transform:uppercase}.skippr\\:line-through{text-decoration-line:line-through}.skippr\\:placeholder-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}.skippr\\:opacity-0{opacity:0}.skippr\\:opacity-75{opacity:.75}.skippr\\:opacity-100{opacity:1}.skippr\\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[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\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 4px 12px 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_4px_16px_rgba\\(0\\,0\\,0\\,0\\.15\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#00000026),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_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_4px_16px_rgba\\(217\\,79\\,79\\,0\\.45\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#d94f4f73),0 2px 4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(45\\,43\\,61\\,0\\.35\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#2d2b3d59);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_30px_rgba\\(0\\,0\\,0\\,0\\.16\\)\\,0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000029),0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-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-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-foreground\\/10{--tw-ring-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:ring-offset-background{--tw-ring-offset-color:oklch(100% 0 0)}.skippr\\:drop-shadow-\\[0_1px_3px_rgba\\(0\\,0\\,0\\,0\\.35\\)\\]{--tw-drop-shadow-size:drop-shadow(0 1px 3px var(--tw-drop-shadow-color,#00000059));--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-\\[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\\]{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\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.skippr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.skippr\\:ease-in-out{--tw-ease:var(--skippr-ease-in-out);transition-timing-function:var(--skippr-ease-in-out)}.skippr\\:outline-none{--tw-outline-style:none;outline-style:none}.skippr\\:\\[animation-delay\\:0ms\\]{animation-delay:0s}.skippr\\:\\[animation-delay\\:150ms\\]{animation-delay:.15s}.skippr\\:\\[animation-delay\\:200ms\\]{animation-delay:.2s}.skippr\\:\\[animation-delay\\:300ms\\]{animation-delay:.3s}.skippr\\:\\[animation-delay\\:400ms\\]{animation-delay:.4s}.skippr\\: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\\:opacity-100:is(:where(.skippr\\:group):hover *){opacity:1}}.skippr\\:placeholder\\:text-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}@media (hover:hover){.skippr\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--skippr-spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:hover\\:bg-accent:hover{background-color:#e7e5e4}.skippr\\:hover\\:bg-bubble:hover{background-color:#2d2b3d}.skippr\\:hover\\:bg-destructive\\/20:hover{background-color:oklab(61.4357% .15892 .0698893/.2)}.skippr\\:hover\\:bg-destructive\\/25:hover{background-color:oklab(61.4357% .15892 .0698893/.25)}.skippr\\:hover\\:bg-destructive\\/90:hover{background-color:oklab(61.4357% .15892 .0698893/.9)}.skippr\\:hover\\:bg-muted:hover{background-color:oklch(97% .001 106.424)}.skippr\\:hover\\:bg-muted\\/50:hover{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:hover\\:bg-muted\\/80:hover{background-color:oklab(97% -.000282743 .000959196/.8)}.skippr\\:hover\\:bg-primary-foreground\\/10:hover{background-color:oklab(100% 0 5.96046e-8/.1)}.skippr\\:hover\\:bg-primary\\/90:hover{background-color:oklab(29.9244% .0107414 -.0305411/.9)}.skippr\\:hover\\:bg-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:text-primary-foreground:hover{color:#fff}.skippr\\:hover\\:shadow-\\[0_6px_24px_rgba\\(45\\,43\\,61\\,0\\.55\\)\\,0_4px_8px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]:hover{--tw-shadow:0 6px 24px var(--tw-shadow-color,#2d2b3d8c),0 4px 8px 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\\:hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.skippr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus-visible\\:ring-ring:focus-visible{--tw-ring-color:oklch(70.9% .01 56.259)}.skippr\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.skippr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.skippr\\:active\\:translate-y-0:active{--tw-translate-y:calc(var(--skippr-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}.skippr\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.skippr\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.skippr\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}}@keyframes skippr-tap{0%{transform:scale(1)}45%{transform:scale(.7)}to{transform:scale(1)}}@keyframes skippr-press{0%{transform:scale(1)}55%{transform:scale(1)}85%{transform:scale(.68)}to{transform:scale(1)}}@keyframes skippr-tab-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-speak{0%,to{opacity:.6;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-thinking-dot{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes skippr-pulse-ring{0%,to{box-shadow:0 0 #2d2b3d66}50%{box-shadow:0 0 0 10px #2d2b3d00}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 #22d3ee73}50%{box-shadow:0 0 0 10px #22d3ee00}}@keyframes skippr-speak-ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.8)}}@keyframes skippr-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes skippr-breathe{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes skippr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-wave{0%,to{opacity:.4;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-bubble-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-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)}}.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-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}`;
2488
2863
  useLayoutEffect(() => {
2489
2864
  const host = hostRef.current;
2490
2865
  if (!host || !css)
@@ -2499,17 +2874,17 @@ function ShadowHost({ children }) {
2499
2874
  setShadowRoot(root);
2500
2875
  }, [css]);
2501
2876
  if (!css)
2502
- return /* @__PURE__ */ jsx5(Fragment3, {
2877
+ return /* @__PURE__ */ jsx7(Fragment3, {
2503
2878
  children
2504
2879
  });
2505
- return /* @__PURE__ */ jsx5("div", {
2880
+ return /* @__PURE__ */ jsx7("div", {
2506
2881
  ref: hostRef,
2507
2882
  children: shadowRoot && createPortal(children, shadowRoot)
2508
2883
  });
2509
2884
  }
2510
2885
 
2511
2886
  // src/components/Sidebar.tsx
2512
- import { useContext as useContext5, useEffect as useEffect16 } from "react";
2887
+ import { useContext as useContext5, useEffect as useEffect18 } from "react";
2513
2888
 
2514
2889
  // src/hooks/useCombinedMessages.ts
2515
2890
  import { useContext as useContext3, useMemo as useMemo4 } from "react";
@@ -2598,15 +2973,15 @@ function useCombinedMessages() {
2598
2973
  }
2599
2974
 
2600
2975
  // src/hooks/usePhaseUpdates.ts
2601
- import { useCallback as useCallback6, useContext as useContext4, useEffect as useEffect9 } from "react";
2976
+ import { useCallback as useCallback7, useContext as useContext4, useEffect as useEffect11 } from "react";
2602
2977
 
2603
2978
  // src/hooks/useAgentState.ts
2604
2979
  import { useRemoteParticipants } from "@livekit/components-react/hooks";
2605
- import { useEffect as useEffect8, useState as useState6 } from "react";
2980
+ import { useEffect as useEffect10, useState as useState8 } from "react";
2606
2981
  function useAgentState(attributeKey, parse, initial) {
2607
- const [value, setValue] = useState6(initial);
2982
+ const [value, setValue] = useState8(initial);
2608
2983
  const remoteParticipants = useRemoteParticipants();
2609
- useEffect8(() => {
2984
+ useEffect10(() => {
2610
2985
  const agentParticipant = remoteParticipants.find((p) => p.attributes?.[attributeKey]);
2611
2986
  if (agentParticipant) {
2612
2987
  const attr = agentParticipant.attributes?.[attributeKey];
@@ -2652,10 +3027,10 @@ function parsePhases(json) {
2652
3027
  return null;
2653
3028
  }
2654
3029
  function usePhaseUpdates() {
2655
- const parse = useCallback6(parsePhases, []);
3030
+ const parse = useCallback7(parsePhases, []);
2656
3031
  const livePhases = useAgentState("phases", parse, []);
2657
3032
  const ctx = useContext4(LiveAgentContext);
2658
- useEffect9(() => {
3033
+ useEffect11(() => {
2659
3034
  if (livePhases.length > 0)
2660
3035
  ctx?.setPhasesSnapshot(livePhases);
2661
3036
  }, [livePhases, ctx?.setPhasesSnapshot]);
@@ -2664,7 +3039,7 @@ function usePhaseUpdates() {
2664
3039
  }
2665
3040
 
2666
3041
  // src/hooks/useSessionRemaining.ts
2667
- import { useEffect as useEffect10, useRef as useRef6, useState as useState7 } from "react";
3042
+ import { useEffect as useEffect12, useRef as useRef8, useState as useState9 } from "react";
2668
3043
 
2669
3044
  // src/lib/format.ts
2670
3045
  function formatTime(seconds) {
@@ -2680,9 +3055,9 @@ function parseNumber(s) {
2680
3055
  // src/hooks/useSessionRemaining.ts
2681
3056
  function useSessionRemaining() {
2682
3057
  const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
2683
- const endTimeRef = useRef6(null);
2684
- const [remaining, setRemaining] = useState7(null);
2685
- useEffect10(() => {
3058
+ const endTimeRef = useRef8(null);
3059
+ const [remaining, setRemaining] = useState9(null);
3060
+ useEffect12(() => {
2686
3061
  if (maxCallDuration === null || endTimeRef.current !== null)
2687
3062
  return;
2688
3063
  const endTime = Date.now() + maxCallDuration * 1000;
@@ -2699,10 +3074,10 @@ function useSessionRemaining() {
2699
3074
  }
2700
3075
 
2701
3076
  // src/hooks/useElapsedSeconds.ts
2702
- import { useEffect as useEffect11, useState as useState8 } from "react";
3077
+ import { useEffect as useEffect13, useState as useState10 } from "react";
2703
3078
  function useElapsedSeconds(isRunning) {
2704
- const [elapsed, setElapsed] = useState8(0);
2705
- useEffect11(() => {
3079
+ const [elapsed, setElapsed] = useState10(0);
3080
+ useEffect13(() => {
2706
3081
  if (!isRunning) {
2707
3082
  setElapsed(0);
2708
3083
  return;
@@ -2718,50 +3093,50 @@ function useElapsedSeconds(isRunning) {
2718
3093
  }
2719
3094
 
2720
3095
  // src/components/ChatHeader.tsx
2721
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
3096
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
2722
3097
  function ChatHeader() {
2723
3098
  const { isConnected, minimizePanel, minimizable } = useLiveAgent();
2724
3099
  const elapsed = useElapsedSeconds(isConnected);
2725
- return /* @__PURE__ */ jsxs5("header", {
3100
+ return /* @__PURE__ */ jsxs6("header", {
2726
3101
  className: "skippr:sticky skippr:top-0 skippr:z-10 skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-between skippr:border-b skippr:border-border skippr:bg-primary skippr:px-4 skippr:py-3",
2727
3102
  children: [
2728
- /* @__PURE__ */ jsx6("p", {
3103
+ /* @__PURE__ */ jsx8("p", {
2729
3104
  className: "skippr:text-sm skippr:font-semibold skippr:text-primary-foreground",
2730
3105
  children: "Skippr"
2731
3106
  }),
2732
- /* @__PURE__ */ jsxs5("div", {
3107
+ /* @__PURE__ */ jsxs6("div", {
2733
3108
  className: "skippr:flex skippr:items-center skippr:gap-2",
2734
3109
  children: [
2735
- isConnected && /* @__PURE__ */ jsxs5("div", {
3110
+ isConnected && /* @__PURE__ */ jsxs6("div", {
2736
3111
  className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:rounded-full skippr:bg-primary-foreground/20 skippr:px-2.5 skippr:py-1",
2737
3112
  children: [
2738
- /* @__PURE__ */ jsxs5("span", {
3113
+ /* @__PURE__ */ jsxs6("span", {
2739
3114
  className: "skippr:relative skippr:flex skippr:size-1.5",
2740
3115
  children: [
2741
- /* @__PURE__ */ jsx6("span", {
3116
+ /* @__PURE__ */ jsx8("span", {
2742
3117
  className: "skippr:absolute skippr:inline-flex skippr:h-full skippr:w-full skippr:animate-ping skippr:rounded-full skippr:bg-red-400 skippr:opacity-75"
2743
3118
  }),
2744
- /* @__PURE__ */ jsx6("span", {
3119
+ /* @__PURE__ */ jsx8("span", {
2745
3120
  className: "skippr:relative skippr:inline-flex skippr:size-1.5 skippr:rounded-full skippr:bg-red-400"
2746
3121
  })
2747
3122
  ]
2748
3123
  }),
2749
- /* @__PURE__ */ jsx6("span", {
3124
+ /* @__PURE__ */ jsx8("span", {
2750
3125
  className: "skippr:text-[10px] skippr:font-medium skippr:text-primary-foreground",
2751
3126
  children: "REC"
2752
3127
  }),
2753
- /* @__PURE__ */ jsx6("span", {
3128
+ /* @__PURE__ */ jsx8("span", {
2754
3129
  className: "skippr:text-[10px] skippr:font-mono skippr:text-primary-foreground",
2755
3130
  children: formatTime(elapsed)
2756
3131
  })
2757
3132
  ]
2758
3133
  }),
2759
- minimizable && /* @__PURE__ */ jsx6("button", {
3134
+ minimizable && /* @__PURE__ */ jsx8("button", {
2760
3135
  type: "button",
2761
3136
  onClick: minimizePanel,
2762
3137
  "aria-label": "Minimize",
2763
3138
  className: "skippr:flex skippr:size-6 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-md skippr:text-primary-foreground/70 skippr:transition-colors skippr:hover:bg-primary-foreground/10 skippr:hover:text-primary-foreground",
2764
- children: /* @__PURE__ */ jsx6(Minimize2, {
3139
+ children: /* @__PURE__ */ jsx8(Minimize2, {
2765
3140
  className: "skippr:size-3.5"
2766
3141
  })
2767
3142
  })
@@ -2772,26 +3147,26 @@ function ChatHeader() {
2772
3147
  }
2773
3148
 
2774
3149
  // src/components/LoadingDots.tsx
2775
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
3150
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
2776
3151
  function LoadingDots({ label }) {
2777
- return /* @__PURE__ */ jsxs6("div", {
3152
+ return /* @__PURE__ */ jsxs7("div", {
2778
3153
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:py-4",
2779
3154
  children: [
2780
- /* @__PURE__ */ jsxs6("div", {
3155
+ /* @__PURE__ */ jsxs7("div", {
2781
3156
  className: "skippr:flex skippr:gap-1",
2782
3157
  children: [
2783
- /* @__PURE__ */ jsx7("span", {
3158
+ /* @__PURE__ */ jsx9("span", {
2784
3159
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:0ms]"
2785
3160
  }),
2786
- /* @__PURE__ */ jsx7("span", {
3161
+ /* @__PURE__ */ jsx9("span", {
2787
3162
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:150ms]"
2788
3163
  }),
2789
- /* @__PURE__ */ jsx7("span", {
3164
+ /* @__PURE__ */ jsx9("span", {
2790
3165
  className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:300ms]"
2791
3166
  })
2792
3167
  ]
2793
3168
  }),
2794
- /* @__PURE__ */ jsx7("p", {
3169
+ /* @__PURE__ */ jsx9("p", {
2795
3170
  className: "skippr:text-xs skippr:text-muted-foreground",
2796
3171
  children: label
2797
3172
  })
@@ -2800,11 +3175,11 @@ function LoadingDots({ label }) {
2800
3175
  }
2801
3176
 
2802
3177
  // src/components/LoginFlow.tsx
2803
- import { useCallback as useCallback7, useEffect as useEffect12, useRef as useRef7, useState as useState9 } from "react";
3178
+ import { useCallback as useCallback8, useEffect as useEffect14, useRef as useRef9, useState as useState11 } from "react";
2804
3179
 
2805
3180
  // src/components/ui/button.tsx
2806
3181
  import { forwardRef as forwardRef3 } from "react";
2807
- import { jsx as jsx8 } from "react/jsx-runtime";
3182
+ import { jsx as jsx10 } from "react/jsx-runtime";
2808
3183
  var variantClasses = {
2809
3184
  default: "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90",
2810
3185
  destructive: "skippr:bg-destructive skippr:text-white skippr:hover:bg-destructive/90",
@@ -2823,7 +3198,7 @@ var sizeClasses = {
2823
3198
  "icon-lg": "skippr:size-10"
2824
3199
  };
2825
3200
  var Button = forwardRef3(({ className, variant = "default", size = "default", ...props }, ref) => {
2826
- return /* @__PURE__ */ jsx8("button", {
3201
+ return /* @__PURE__ */ jsx10("button", {
2827
3202
  className: cn("skippr:inline-flex skippr:items-center skippr:justify-center skippr:gap-2 skippr:whitespace-nowrap skippr:rounded-md skippr:text-sm skippr:font-medium skippr:ring-offset-background skippr:transition-all skippr:cursor-pointer skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-ring skippr:focus-visible:ring-offset-2 skippr:disabled:pointer-events-none skippr:disabled:opacity-50 skippr:shrink-0 skippr:[&_svg]:pointer-events-none skippr:[&_svg:not([class*='size-'])]:size-4 skippr:[&_svg]:shrink-0", variantClasses[variant], sizeClasses[size], className),
2828
3203
  ref,
2829
3204
  ...props
@@ -2832,28 +3207,28 @@ var Button = forwardRef3(({ className, variant = "default", size = "default", ..
2832
3207
  Button.displayName = "Button";
2833
3208
 
2834
3209
  // src/components/LoginFlow.tsx
2835
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
3210
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
2836
3211
  var OTP_LENGTH = 6;
2837
3212
  var DIGIT_KEYS = ["d0", "d1", "d2", "d3", "d4", "d5"];
2838
3213
  function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
2839
- const [step, setStep] = useState9("email");
2840
- const [email, setEmail] = useState9("");
2841
- const handleRequestOtp = useCallback7(async (emailValue) => {
3214
+ const [step, setStep] = useState11("email");
3215
+ const [email, setEmail] = useState11("");
3216
+ const handleRequestOtp = useCallback8(async (emailValue) => {
2842
3217
  const success = await requestOtp(emailValue);
2843
3218
  if (success)
2844
3219
  setStep("otp");
2845
3220
  }, [requestOtp]);
2846
- const handleVerifyOtp = useCallback7(async (code) => {
3221
+ const handleVerifyOtp = useCallback8(async (code) => {
2847
3222
  await verifyOtp(email, code);
2848
3223
  }, [verifyOtp, email]);
2849
- const handleBack = useCallback7(() => {
3224
+ const handleBack = useCallback8(() => {
2850
3225
  setStep("email");
2851
3226
  }, []);
2852
- const handleResend = useCallback7(async () => {
3227
+ const handleResend = useCallback8(async () => {
2853
3228
  await requestOtp(email);
2854
3229
  }, [requestOtp, email]);
2855
3230
  if (step === "otp") {
2856
- return /* @__PURE__ */ jsx9(OtpStep, {
3231
+ return /* @__PURE__ */ jsx11(OtpStep, {
2857
3232
  email,
2858
3233
  onSubmit: handleVerifyOtp,
2859
3234
  onResend: handleResend,
@@ -2862,7 +3237,7 @@ function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
2862
3237
  isSubmitting
2863
3238
  });
2864
3239
  }
2865
- return /* @__PURE__ */ jsx9(EmailStep, {
3240
+ return /* @__PURE__ */ jsx11(EmailStep, {
2866
3241
  email,
2867
3242
  onEmailChange: setEmail,
2868
3243
  onSubmit: handleRequestOtp,
@@ -2876,30 +3251,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
2876
3251
  if (email.trim())
2877
3252
  onSubmit(email.trim());
2878
3253
  }
2879
- return /* @__PURE__ */ jsxs7("div", {
3254
+ return /* @__PURE__ */ jsxs8("div", {
2880
3255
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
2881
3256
  children: [
2882
- /* @__PURE__ */ jsxs7("div", {
3257
+ /* @__PURE__ */ jsxs8("div", {
2883
3258
  className: "skippr:mb-4 skippr:text-center",
2884
3259
  children: [
2885
- /* @__PURE__ */ jsx9(Mail, {
3260
+ /* @__PURE__ */ jsx11(Mail, {
2886
3261
  className: "skippr:mx-auto skippr:mb-2 skippr:size-6 skippr:text-primary"
2887
3262
  }),
2888
- /* @__PURE__ */ jsx9("p", {
3263
+ /* @__PURE__ */ jsx11("p", {
2889
3264
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
2890
3265
  children: "Sign in to continue"
2891
3266
  }),
2892
- /* @__PURE__ */ jsx9("p", {
3267
+ /* @__PURE__ */ jsx11("p", {
2893
3268
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
2894
3269
  children: "Your email will be used to identify you across sessions"
2895
3270
  })
2896
3271
  ]
2897
3272
  }),
2898
- /* @__PURE__ */ jsxs7("form", {
3273
+ /* @__PURE__ */ jsxs8("form", {
2899
3274
  onSubmit: handleSubmit,
2900
3275
  className: "skippr:flex skippr:flex-col skippr:gap-3",
2901
3276
  children: [
2902
- /* @__PURE__ */ jsx9("input", {
3277
+ /* @__PURE__ */ jsx11("input", {
2903
3278
  type: "email",
2904
3279
  placeholder: "you@example.com",
2905
3280
  value: email,
@@ -2908,15 +3283,15 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
2908
3283
  required: true,
2909
3284
  className: "skippr:w-full skippr:rounded-md skippr:border skippr:border-border skippr:bg-background skippr:px-3 skippr:py-2 skippr:text-sm skippr:text-foreground skippr:placeholder-muted-foreground skippr:outline-none focus:skippr:ring-2 focus:skippr:ring-primary/30 focus:skippr:border-primary disabled:skippr:opacity-50"
2910
3285
  }),
2911
- /* @__PURE__ */ jsx9(Button, {
3286
+ /* @__PURE__ */ jsx11(Button, {
2912
3287
  type: "submit",
2913
3288
  disabled: isSubmitting || !email.trim(),
2914
3289
  className: "skippr:w-full",
2915
- children: isSubmitting ? /* @__PURE__ */ jsx9(LoaderCircle, {
3290
+ children: isSubmitting ? /* @__PURE__ */ jsx11(LoaderCircle, {
2916
3291
  className: "skippr:size-4 skippr:animate-spin"
2917
3292
  }) : "Continue"
2918
3293
  }),
2919
- error && /* @__PURE__ */ jsx9("p", {
3294
+ error && /* @__PURE__ */ jsx11("p", {
2920
3295
  className: "skippr:text-xs skippr:text-center skippr:text-destructive",
2921
3296
  children: error
2922
3297
  })
@@ -2926,30 +3301,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
2926
3301
  });
2927
3302
  }
2928
3303
  function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
2929
- const [digits, setDigits] = useState9(Array(OTP_LENGTH).fill(""));
2930
- const [resendCooldown, setResendCooldown] = useState9(0);
2931
- const inputRefs = useRef7([]);
2932
- const submittedRef = useRef7(false);
2933
- useEffect12(() => {
3304
+ const [digits, setDigits] = useState11(Array(OTP_LENGTH).fill(""));
3305
+ const [resendCooldown, setResendCooldown] = useState11(0);
3306
+ const inputRefs = useRef9([]);
3307
+ const submittedRef = useRef9(false);
3308
+ useEffect14(() => {
2934
3309
  inputRefs.current[0]?.focus();
2935
3310
  }, []);
2936
- useEffect12(() => {
3311
+ useEffect14(() => {
2937
3312
  if (error)
2938
3313
  submittedRef.current = false;
2939
3314
  }, [error]);
2940
- useEffect12(() => {
3315
+ useEffect14(() => {
2941
3316
  if (resendCooldown <= 0)
2942
3317
  return;
2943
3318
  const timer = setTimeout(() => setResendCooldown((c) => c - 1), 1000);
2944
3319
  return () => clearTimeout(timer);
2945
3320
  }, [resendCooldown]);
2946
- const submitCode = useCallback7((code) => {
3321
+ const submitCode = useCallback8((code) => {
2947
3322
  if (submittedRef.current || isSubmitting)
2948
3323
  return;
2949
3324
  submittedRef.current = true;
2950
3325
  onSubmit(code);
2951
3326
  }, [onSubmit, isSubmitting]);
2952
- const handleDigitChange = useCallback7((index2, value) => {
3327
+ const handleDigitChange = useCallback8((index2, value) => {
2953
3328
  const digit = value.replace(/\D/g, "").slice(-1);
2954
3329
  const newDigits = [...digits];
2955
3330
  newDigits[index2] = digit;
@@ -2963,12 +3338,12 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
2963
3338
  submitCode(code);
2964
3339
  }
2965
3340
  }, [digits, submitCode]);
2966
- const handleKeyDown = useCallback7((index2, e) => {
3341
+ const handleKeyDown = useCallback8((index2, e) => {
2967
3342
  if (e.key === "Backspace" && !digits[index2] && index2 > 0) {
2968
3343
  inputRefs.current[index2 - 1]?.focus();
2969
3344
  }
2970
3345
  }, [digits]);
2971
- const handlePaste = useCallback7((e) => {
3346
+ const handlePaste = useCallback8((e) => {
2972
3347
  e.preventDefault();
2973
3348
  const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, OTP_LENGTH);
2974
3349
  if (pasted.length > 0) {
@@ -2996,22 +3371,22 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
2996
3371
  submittedRef.current = false;
2997
3372
  inputRefs.current[0]?.focus();
2998
3373
  }
2999
- return /* @__PURE__ */ jsxs7("div", {
3374
+ return /* @__PURE__ */ jsxs8("div", {
3000
3375
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
3001
3376
  children: [
3002
- /* @__PURE__ */ jsxs7("div", {
3377
+ /* @__PURE__ */ jsxs8("div", {
3003
3378
  className: "skippr:mb-4 skippr:text-center",
3004
3379
  children: [
3005
- /* @__PURE__ */ jsx9("p", {
3380
+ /* @__PURE__ */ jsx11("p", {
3006
3381
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
3007
3382
  children: "Enter verification code"
3008
3383
  }),
3009
- /* @__PURE__ */ jsxs7("p", {
3384
+ /* @__PURE__ */ jsxs8("p", {
3010
3385
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
3011
3386
  children: [
3012
3387
  "We sent a 6-digit code to",
3013
3388
  " ",
3014
- /* @__PURE__ */ jsx9("span", {
3389
+ /* @__PURE__ */ jsx11("span", {
3015
3390
  className: "skippr:font-medium skippr:text-foreground",
3016
3391
  children: email
3017
3392
  })
@@ -3019,13 +3394,13 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
3019
3394
  })
3020
3395
  ]
3021
3396
  }),
3022
- /* @__PURE__ */ jsxs7("form", {
3397
+ /* @__PURE__ */ jsxs8("form", {
3023
3398
  onSubmit: handleSubmit,
3024
3399
  className: "skippr:flex skippr:flex-col skippr:gap-3",
3025
3400
  children: [
3026
- /* @__PURE__ */ jsx9("div", {
3401
+ /* @__PURE__ */ jsx11("div", {
3027
3402
  className: "skippr:flex skippr:justify-center skippr:gap-1.5",
3028
- children: digits.map((digit, index2) => /* @__PURE__ */ jsx9("input", {
3403
+ children: digits.map((digit, index2) => /* @__PURE__ */ jsx11("input", {
3029
3404
  ref: (el) => {
3030
3405
  inputRefs.current[index2] = el;
3031
3406
  },
@@ -3040,29 +3415,29 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
3040
3415
  className: "skippr:h-10 skippr:w-10 skippr:rounded-md skippr:border skippr:border-border skippr:bg-background skippr:text-center skippr:text-sm skippr:font-semibold skippr:text-foreground skippr:outline-none focus:skippr:ring-2 focus:skippr:ring-primary/30 focus:skippr:border-primary disabled:skippr:opacity-50"
3041
3416
  }, DIGIT_KEYS[index2]))
3042
3417
  }),
3043
- error && /* @__PURE__ */ jsx9("p", {
3418
+ error && /* @__PURE__ */ jsx11("p", {
3044
3419
  className: "skippr:text-xs skippr:text-center skippr:text-destructive",
3045
3420
  children: error
3046
3421
  }),
3047
- /* @__PURE__ */ jsx9(Button, {
3422
+ /* @__PURE__ */ jsx11(Button, {
3048
3423
  type: "submit",
3049
3424
  disabled: isSubmitting || digits.join("").length !== OTP_LENGTH,
3050
3425
  className: "skippr:w-full",
3051
- children: isSubmitting ? /* @__PURE__ */ jsx9(LoaderCircle, {
3426
+ children: isSubmitting ? /* @__PURE__ */ jsx11(LoaderCircle, {
3052
3427
  className: "skippr:size-4 skippr:animate-spin"
3053
3428
  }) : "Verify"
3054
3429
  }),
3055
- /* @__PURE__ */ jsxs7("div", {
3430
+ /* @__PURE__ */ jsxs8("div", {
3056
3431
  className: "skippr:flex skippr:items-center skippr:justify-between skippr:text-xs",
3057
3432
  children: [
3058
- /* @__PURE__ */ jsx9("button", {
3433
+ /* @__PURE__ */ jsx11("button", {
3059
3434
  type: "button",
3060
3435
  onClick: onBack,
3061
3436
  disabled: isSubmitting,
3062
3437
  className: "skippr:text-muted-foreground hover:skippr:text-foreground skippr:transition-colors disabled:skippr:opacity-50",
3063
3438
  children: "Change email"
3064
3439
  }),
3065
- /* @__PURE__ */ jsx9("button", {
3440
+ /* @__PURE__ */ jsx11("button", {
3066
3441
  type: "button",
3067
3442
  onClick: handleResend,
3068
3443
  disabled: isSubmitting || resendCooldown > 0,
@@ -3078,7 +3453,7 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
3078
3453
  }
3079
3454
 
3080
3455
  // src/components/MeetingControls.tsx
3081
- import { jsx as jsx10, jsxs as jsxs8, Fragment as Fragment4 } from "react/jsx-runtime";
3456
+ import { jsx as jsx12, jsxs as jsxs9, Fragment as Fragment4 } from "react/jsx-runtime";
3082
3457
  var CONTROL_BUTTON2 = "skippr:flex skippr:size-11 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:transition-colors skippr:disabled:cursor-not-allowed skippr:disabled:opacity-60";
3083
3458
  var MUTED_BUTTON = "skippr:bg-muted skippr:text-foreground skippr:hover:bg-muted/80";
3084
3459
  function MeetingControls({
@@ -3091,68 +3466,68 @@ function MeetingControls({
3091
3466
  }) {
3092
3467
  const { isMuted, toggleMute, isScreenSharing, toggleScreenShare } = useMediaControls();
3093
3468
  const showPaused = isPaused || isPausing;
3094
- return /* @__PURE__ */ jsxs8("div", {
3469
+ return /* @__PURE__ */ jsxs9("div", {
3095
3470
  className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:bg-background skippr:px-4 skippr:py-4",
3096
3471
  children: [
3097
- /* @__PURE__ */ jsxs8("div", {
3472
+ /* @__PURE__ */ jsxs9("div", {
3098
3473
  className: "skippr:flex skippr:items-center skippr:justify-center skippr:gap-3",
3099
3474
  children: [
3100
- !showPaused && /* @__PURE__ */ jsxs8(Fragment4, {
3475
+ !showPaused && /* @__PURE__ */ jsxs9(Fragment4, {
3101
3476
  children: [
3102
- /* @__PURE__ */ jsx10("button", {
3477
+ /* @__PURE__ */ jsx12("button", {
3103
3478
  type: "button",
3104
3479
  onClick: toggleMute,
3105
3480
  "aria-label": isMuted ? "Unmute" : "Mute",
3106
3481
  className: cn(CONTROL_BUTTON2, isMuted ? "skippr:bg-destructive/15 skippr:text-destructive skippr:hover:bg-destructive/25" : MUTED_BUTTON),
3107
- children: isMuted ? /* @__PURE__ */ jsx10(MicOff, {
3482
+ children: isMuted ? /* @__PURE__ */ jsx12(MicOff, {
3108
3483
  className: "skippr:size-5"
3109
- }) : /* @__PURE__ */ jsx10(Mic, {
3484
+ }) : /* @__PURE__ */ jsx12(Mic, {
3110
3485
  className: "skippr:size-5"
3111
3486
  })
3112
3487
  }),
3113
- showScreenShareToggle && /* @__PURE__ */ jsx10("button", {
3488
+ showScreenShareToggle && /* @__PURE__ */ jsx12("button", {
3114
3489
  type: "button",
3115
3490
  onClick: toggleScreenShare,
3116
3491
  "aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
3117
3492
  className: cn(CONTROL_BUTTON2, isScreenSharing ? "skippr:bg-bubble skippr:text-white skippr:hover:brightness-110" : MUTED_BUTTON),
3118
- children: isScreenSharing ? /* @__PURE__ */ jsx10(MonitorOff, {
3493
+ children: isScreenSharing ? /* @__PURE__ */ jsx12(MonitorOff, {
3119
3494
  className: "skippr:size-5"
3120
- }) : /* @__PURE__ */ jsx10(Monitor, {
3495
+ }) : /* @__PURE__ */ jsx12(Monitor, {
3121
3496
  className: "skippr:size-5"
3122
3497
  })
3123
3498
  })
3124
3499
  ]
3125
3500
  }),
3126
- showPaused ? onResume && /* @__PURE__ */ jsx10("button", {
3501
+ showPaused ? onResume && /* @__PURE__ */ jsx12("button", {
3127
3502
  type: "button",
3128
3503
  onClick: onResume,
3129
3504
  disabled: isPausing,
3130
3505
  "aria-label": "Resume session",
3131
3506
  className: cn(CONTROL_BUTTON2, MUTED_BUTTON),
3132
- children: /* @__PURE__ */ jsx10(Play, {
3507
+ children: /* @__PURE__ */ jsx12(Play, {
3133
3508
  className: "skippr:size-5"
3134
3509
  })
3135
- }) : onPause && /* @__PURE__ */ jsx10("button", {
3510
+ }) : onPause && /* @__PURE__ */ jsx12("button", {
3136
3511
  type: "button",
3137
3512
  onClick: onPause,
3138
3513
  "aria-label": "Pause session",
3139
3514
  className: cn(CONTROL_BUTTON2, MUTED_BUTTON),
3140
- children: /* @__PURE__ */ jsx10(Pause, {
3515
+ children: /* @__PURE__ */ jsx12(Pause, {
3141
3516
  className: "skippr:size-5"
3142
3517
  })
3143
3518
  }),
3144
- /* @__PURE__ */ jsx10("button", {
3519
+ /* @__PURE__ */ jsx12("button", {
3145
3520
  type: "button",
3146
3521
  onClick: onHangUp,
3147
3522
  "aria-label": "End session",
3148
3523
  className: cn(CONTROL_BUTTON2, "skippr:bg-destructive skippr:text-destructive-foreground skippr:hover:bg-destructive/90"),
3149
- children: /* @__PURE__ */ jsx10(PhoneOff, {
3524
+ children: /* @__PURE__ */ jsx12(PhoneOff, {
3150
3525
  className: "skippr:size-5"
3151
3526
  })
3152
3527
  })
3153
3528
  ]
3154
3529
  }),
3155
- /* @__PURE__ */ jsx10("p", {
3530
+ /* @__PURE__ */ jsx12("p", {
3156
3531
  className: "skippr:mt-3 skippr:text-center skippr:text-[10px] skippr:text-muted-foreground",
3157
3532
  children: "Powered by Skippr"
3158
3533
  })
@@ -3161,17 +3536,17 @@ function MeetingControls({
3161
3536
  }
3162
3537
 
3163
3538
  // src/components/MessageList.tsx
3164
- import { useEffect as useEffect14, useRef as useRef9 } from "react";
3539
+ import { useEffect as useEffect16, useRef as useRef11 } from "react";
3165
3540
 
3166
3541
  // src/components/ChatInput.tsx
3167
- import { useEffect as useEffect13, useRef as useRef8, useState as useState10 } from "react";
3168
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
3542
+ import { useEffect as useEffect15, useRef as useRef10, useState as useState12 } from "react";
3543
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
3169
3544
  var MAX_INPUT_HEIGHT = 60;
3170
3545
  function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
3171
- const [inputText, setInputText] = useState10("");
3172
- const textareaRef = useRef8(null);
3546
+ const [inputText, setInputText] = useState12("");
3547
+ const textareaRef = useRef10(null);
3173
3548
  const canSend = inputText.trim().length > 0 && !isSendingChat;
3174
- useEffect13(() => {
3549
+ useEffect15(() => {
3175
3550
  if (autoFocus)
3176
3551
  textareaRef.current?.focus();
3177
3552
  }, [autoFocus]);
@@ -3202,13 +3577,13 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
3202
3577
  handleSubmit(e);
3203
3578
  }
3204
3579
  }
3205
- return /* @__PURE__ */ jsx11("form", {
3580
+ return /* @__PURE__ */ jsx13("form", {
3206
3581
  onSubmit: handleSubmit,
3207
3582
  className: "skippr:border-t skippr:border-border skippr:p-3",
3208
- children: /* @__PURE__ */ jsxs9("div", {
3583
+ children: /* @__PURE__ */ jsxs10("div", {
3209
3584
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:rounded-xl skippr:bg-background skippr:ring-1 skippr:ring-foreground/10 skippr:px-3 skippr:py-2",
3210
3585
  children: [
3211
- /* @__PURE__ */ jsx11("textarea", {
3586
+ /* @__PURE__ */ jsx13("textarea", {
3212
3587
  ref: textareaRef,
3213
3588
  rows: 1,
3214
3589
  value: inputText,
@@ -3218,12 +3593,12 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
3218
3593
  className: "skippr:flex-1 skippr:resize-none skippr:overflow-y-auto skippr:bg-transparent skippr:text-sm skippr:leading-5 skippr:text-foreground skippr:placeholder:text-muted-foreground skippr:outline-none",
3219
3594
  style: { maxHeight: `${MAX_INPUT_HEIGHT}px` }
3220
3595
  }),
3221
- /* @__PURE__ */ jsx11("button", {
3596
+ /* @__PURE__ */ jsx13("button", {
3222
3597
  type: "submit",
3223
3598
  disabled: !canSend,
3224
3599
  "aria-label": "Send message",
3225
3600
  className: cn("skippr:flex skippr:size-8 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-lg skippr:transition-colors", canSend ? "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90" : "skippr:bg-muted-foreground/20 skippr:text-muted-foreground/60"),
3226
- children: /* @__PURE__ */ jsx11(Send, {
3601
+ children: /* @__PURE__ */ jsx13(Send, {
3227
3602
  className: "skippr:size-3.5"
3228
3603
  })
3229
3604
  })
@@ -3233,7 +3608,7 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
3233
3608
  }
3234
3609
 
3235
3610
  // src/components/ChatMessage.tsx
3236
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
3611
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
3237
3612
  function formatTimestamp(ts) {
3238
3613
  return new Date(ts).toLocaleTimeString("en-US", {
3239
3614
  hour: "numeric",
@@ -3243,23 +3618,23 @@ function formatTimestamp(ts) {
3243
3618
  }
3244
3619
  function ChatMessage({ message }) {
3245
3620
  const isAgent = message.role === "assistant";
3246
- return /* @__PURE__ */ jsxs10("div", {
3621
+ return /* @__PURE__ */ jsxs11("div", {
3247
3622
  className: cn("skippr:flex skippr:gap-2", isAgent ? "skippr:items-start" : "skippr:justify-end"),
3248
3623
  children: [
3249
- isAgent && /* @__PURE__ */ jsx12("div", {
3624
+ isAgent && /* @__PURE__ */ jsx14("div", {
3250
3625
  className: "skippr:mt-0.5 skippr:flex skippr:size-7 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-md skippr:bg-primary",
3251
- children: /* @__PURE__ */ jsx12(Sparkles, {
3626
+ children: /* @__PURE__ */ jsx14(Sparkles, {
3252
3627
  className: "skippr:size-3.5 skippr:text-primary-foreground"
3253
3628
  })
3254
3629
  }),
3255
- /* @__PURE__ */ jsxs10("div", {
3630
+ /* @__PURE__ */ jsxs11("div", {
3256
3631
  className: cn("skippr:flex skippr:max-w-[80%] skippr:flex-col", isAgent ? "skippr:items-start" : "skippr:items-end"),
3257
3632
  children: [
3258
- /* @__PURE__ */ jsx12("div", {
3633
+ /* @__PURE__ */ jsx14("div", {
3259
3634
  className: cn("skippr:rounded-2xl skippr:px-4 skippr:py-2.5 skippr:text-sm skippr:leading-relaxed", isAgent ? "skippr:border skippr:border-border skippr:bg-card skippr:text-foreground" : "skippr:bg-primary skippr:text-primary-foreground"),
3260
3635
  children: message.content
3261
3636
  }),
3262
- message.timestamp && /* @__PURE__ */ jsx12("span", {
3637
+ message.timestamp && /* @__PURE__ */ jsx14("span", {
3263
3638
  className: "skippr:mt-1 skippr:px-1 skippr:text-[10px] skippr:text-muted-foreground/60",
3264
3639
  children: formatTimestamp(message.timestamp)
3265
3640
  })
@@ -3270,33 +3645,33 @@ function ChatMessage({ message }) {
3270
3645
  }
3271
3646
 
3272
3647
  // src/components/TypingIndicator.tsx
3273
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
3648
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
3274
3649
  function TypingIndicator() {
3275
- return /* @__PURE__ */ jsxs11("div", {
3650
+ return /* @__PURE__ */ jsxs12("div", {
3276
3651
  className: "skippr:flex skippr:items-start skippr:gap-2 skippr:animate-skippr-tab-fade",
3277
3652
  children: [
3278
- /* @__PURE__ */ jsx13("div", {
3653
+ /* @__PURE__ */ jsx15("div", {
3279
3654
  className: "skippr:mt-0.5 skippr:flex skippr:size-7 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-md skippr:bg-primary",
3280
- children: /* @__PURE__ */ jsx13(Sparkles, {
3655
+ children: /* @__PURE__ */ jsx15(Sparkles, {
3281
3656
  className: "skippr:size-3.5 skippr:text-primary-foreground"
3282
3657
  })
3283
3658
  }),
3284
- /* @__PURE__ */ jsxs11("div", {
3659
+ /* @__PURE__ */ jsxs12("div", {
3285
3660
  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",
3286
3661
  children: [
3287
- /* @__PURE__ */ jsx13("span", {
3662
+ /* @__PURE__ */ jsx15("span", {
3288
3663
  children: "Agent is analyzing your screen"
3289
3664
  }),
3290
- /* @__PURE__ */ jsxs11("span", {
3665
+ /* @__PURE__ */ jsxs12("span", {
3291
3666
  className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
3292
3667
  children: [
3293
- /* @__PURE__ */ jsx13("span", {
3668
+ /* @__PURE__ */ jsx15("span", {
3294
3669
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:0ms]"
3295
3670
  }),
3296
- /* @__PURE__ */ jsx13("span", {
3671
+ /* @__PURE__ */ jsx15("span", {
3297
3672
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:200ms]"
3298
3673
  }),
3299
- /* @__PURE__ */ jsx13("span", {
3674
+ /* @__PURE__ */ jsx15("span", {
3300
3675
  className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:400ms]"
3301
3676
  })
3302
3677
  ]
@@ -3308,7 +3683,7 @@ function TypingIndicator() {
3308
3683
  }
3309
3684
 
3310
3685
  // src/components/MessageList.tsx
3311
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
3686
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
3312
3687
  function MessageList({
3313
3688
  messages,
3314
3689
  isStreaming,
@@ -3316,31 +3691,31 @@ function MessageList({
3316
3691
  isSendingChat,
3317
3692
  autoFocus = false
3318
3693
  }) {
3319
- const scrollRef = useRef9(null);
3694
+ const scrollRef = useRef11(null);
3320
3695
  const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
3321
- useEffect14(() => {
3696
+ useEffect16(() => {
3322
3697
  scrollRef.current?.scrollIntoView({ behavior: "smooth" });
3323
3698
  }, [messages.length, lastMessage?.content]);
3324
3699
  const showTyping = isStreaming && lastMessage?.role === "assistant" && lastMessage.content === "";
3325
- return /* @__PURE__ */ jsxs12("div", {
3700
+ return /* @__PURE__ */ jsxs13("div", {
3326
3701
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
3327
3702
  children: [
3328
- /* @__PURE__ */ jsxs12("div", {
3703
+ /* @__PURE__ */ jsxs13("div", {
3329
3704
  className: "skippr:min-h-0 skippr:flex-1 skippr:space-y-4 skippr:overflow-y-auto skippr:p-4",
3330
3705
  children: [
3331
- messages.length === 0 && !showTyping && /* @__PURE__ */ jsx14(LoadingDots, {
3706
+ messages.length === 0 && !showTyping && /* @__PURE__ */ jsx16(LoadingDots, {
3332
3707
  label: "Waiting for conversation to begin..."
3333
3708
  }),
3334
- messages.map((message) => /* @__PURE__ */ jsx14(ChatMessage, {
3709
+ messages.map((message) => /* @__PURE__ */ jsx16(ChatMessage, {
3335
3710
  message
3336
3711
  }, message.id)),
3337
- showTyping && /* @__PURE__ */ jsx14(TypingIndicator, {}),
3338
- /* @__PURE__ */ jsx14("div", {
3712
+ showTyping && /* @__PURE__ */ jsx16(TypingIndicator, {}),
3713
+ /* @__PURE__ */ jsx16("div", {
3339
3714
  ref: scrollRef
3340
3715
  })
3341
3716
  ]
3342
3717
  }),
3343
- /* @__PURE__ */ jsx14(ChatInput, {
3718
+ /* @__PURE__ */ jsx16(ChatInput, {
3344
3719
  sendChatMessage,
3345
3720
  isSendingChat,
3346
3721
  autoFocus
@@ -3350,8 +3725,8 @@ function MessageList({
3350
3725
  }
3351
3726
 
3352
3727
  // src/components/ModuleSelector.tsx
3353
- import { useEffect as useEffect15, useRef as useRef10, useState as useState11 } from "react";
3354
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
3728
+ import { useEffect as useEffect17, useRef as useRef12, useState as useState13 } from "react";
3729
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
3355
3730
  var AGENT_TYPE_ICONS = {
3356
3731
  onboarding: UserPlus,
3357
3732
  demo: Rocket,
@@ -3373,10 +3748,10 @@ function ModuleSelector() {
3373
3748
  error
3374
3749
  } = useLiveAgent();
3375
3750
  const isBusy = isStarting || isDisconnecting;
3376
- const scrollRef = useRef10(null);
3377
- const [showScrollHint, setShowScrollHint] = useState11(false);
3378
- const [isScrolled, setIsScrolled] = useState11(false);
3379
- useEffect15(() => {
3751
+ const scrollRef = useRef12(null);
3752
+ const [showScrollHint, setShowScrollHint] = useState13(false);
3753
+ const [isScrolled, setIsScrolled] = useState13(false);
3754
+ useEffect17(() => {
3380
3755
  const el = scrollRef.current;
3381
3756
  if (!el)
3382
3757
  return;
@@ -3398,26 +3773,26 @@ function ModuleSelector() {
3398
3773
  };
3399
3774
  }, []);
3400
3775
  if (isLoadingModules && availableModules.length === 0) {
3401
- return /* @__PURE__ */ jsx15("div", {
3776
+ return /* @__PURE__ */ jsx17("div", {
3402
3777
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center skippr:p-6",
3403
- children: /* @__PURE__ */ jsx15(LoadingDots, {
3778
+ children: /* @__PURE__ */ jsx17(LoadingDots, {
3404
3779
  label: "Loading modules..."
3405
3780
  })
3406
3781
  });
3407
3782
  }
3408
3783
  if (modulesError) {
3409
- return /* @__PURE__ */ jsxs13("div", {
3784
+ return /* @__PURE__ */ jsxs14("div", {
3410
3785
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:gap-3 skippr:p-6 skippr:text-center",
3411
3786
  children: [
3412
- /* @__PURE__ */ jsx15("p", {
3787
+ /* @__PURE__ */ jsx17("p", {
3413
3788
  className: "skippr:text-sm skippr:text-foreground",
3414
3789
  children: "Couldn't load modules."
3415
3790
  }),
3416
- /* @__PURE__ */ jsx15("p", {
3791
+ /* @__PURE__ */ jsx17("p", {
3417
3792
  className: "skippr:text-xs skippr:text-muted-foreground",
3418
3793
  children: modulesError
3419
3794
  }),
3420
- /* @__PURE__ */ jsx15("button", {
3795
+ /* @__PURE__ */ jsx17("button", {
3421
3796
  type: "button",
3422
3797
  onClick: () => void refetchModules(),
3423
3798
  className: "skippr:cursor-pointer skippr:rounded-lg skippr:bg-foreground skippr:px-3 skippr:py-1.5 skippr:text-xs skippr:font-medium skippr:text-background",
@@ -3427,34 +3802,34 @@ function ModuleSelector() {
3427
3802
  });
3428
3803
  }
3429
3804
  if (availableModules.length === 0) {
3430
- return /* @__PURE__ */ jsx15("div", {
3805
+ return /* @__PURE__ */ jsx17("div", {
3431
3806
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center skippr:p-6 skippr:text-center",
3432
- children: /* @__PURE__ */ jsx15("p", {
3807
+ children: /* @__PURE__ */ jsx17("p", {
3433
3808
  className: "skippr:text-sm skippr:text-muted-foreground",
3434
3809
  children: "No experts available."
3435
3810
  })
3436
3811
  });
3437
3812
  }
3438
- return /* @__PURE__ */ jsxs13("div", {
3813
+ return /* @__PURE__ */ jsxs14("div", {
3439
3814
  className: "skippr:relative skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
3440
3815
  children: [
3441
- /* @__PURE__ */ jsxs13("div", {
3816
+ /* @__PURE__ */ jsxs14("div", {
3442
3817
  ref: scrollRef,
3443
3818
  className: "skippr-no-scrollbar skippr:flex-1 skippr:overflow-y-auto",
3444
3819
  children: [
3445
- /* @__PURE__ */ jsx15("h3", {
3820
+ /* @__PURE__ */ jsx17("h3", {
3446
3821
  className: `skippr:sticky skippr:top-0 skippr:z-10 skippr:bg-background skippr:px-4 skippr:py-3 skippr:text-xs skippr:font-medium skippr:uppercase skippr:tracking-wider skippr:text-muted-foreground skippr:transition-shadow ${isScrolled ? "skippr:border-b skippr:border-border" : ""}`,
3447
3822
  children: "Choose an agent"
3448
3823
  }),
3449
- /* @__PURE__ */ jsxs13("div", {
3824
+ /* @__PURE__ */ jsxs14("div", {
3450
3825
  className: "skippr:px-4 skippr:pt-3 skippr:pb-5",
3451
3826
  children: [
3452
- error && /* @__PURE__ */ jsx15("div", {
3827
+ error && /* @__PURE__ */ jsx17("div", {
3453
3828
  role: "alert",
3454
3829
  className: "skippr:mb-3 skippr:rounded-lg skippr:border skippr:border-destructive/20 skippr:bg-destructive/10 skippr:px-3 skippr:py-2 skippr:text-xs skippr:text-destructive",
3455
3830
  children: error
3456
3831
  }),
3457
- /* @__PURE__ */ jsx15("div", {
3832
+ /* @__PURE__ */ jsx17("div", {
3458
3833
  className: "skippr:grid skippr:grid-cols-2 skippr:gap-2.5",
3459
3834
  children: availableModules.map((module, index2) => {
3460
3835
  const isFeatured = index2 === 0;
@@ -3466,50 +3841,50 @@ function ModuleSelector() {
3466
3841
  const layout = isWide ? "skippr:items-center skippr:p-3.5 skippr:pb-5" : "skippr:flex-col skippr:items-start skippr:p-3.5";
3467
3842
  const variant = isFeatured ? "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90" : "skippr:bg-background skippr:ring-1 skippr:ring-foreground/10 skippr:hover:bg-muted/50";
3468
3843
  const span = isWide ? "skippr:col-span-2" : "";
3469
- return /* @__PURE__ */ jsxs13("button", {
3844
+ return /* @__PURE__ */ jsxs14("button", {
3470
3845
  type: "button",
3471
3846
  disabled: isBusy || isTerminal,
3472
3847
  onClick: () => selectModule(module.id),
3473
3848
  className: `${base} ${layout} ${variant} ${span}`,
3474
3849
  children: [
3475
- /* @__PURE__ */ jsx15("div", {
3850
+ /* @__PURE__ */ jsx17("div", {
3476
3851
  className: isFeatured ? "skippr:flex skippr:h-9 skippr:w-9 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-lg skippr:bg-primary-foreground/15" : "skippr:flex skippr:h-9 skippr:w-9 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-lg skippr:bg-muted",
3477
- children: /* @__PURE__ */ jsx15(Icon2, {
3852
+ children: /* @__PURE__ */ jsx17(Icon2, {
3478
3853
  className: isFeatured ? "skippr:h-4 skippr:w-4" : "skippr:h-4 skippr:w-4 skippr:text-muted-foreground"
3479
3854
  })
3480
3855
  }),
3481
- /* @__PURE__ */ jsxs13("div", {
3856
+ /* @__PURE__ */ jsxs14("div", {
3482
3857
  className: "skippr:min-w-0 skippr:w-full skippr:space-y-0.5",
3483
3858
  children: [
3484
- /* @__PURE__ */ jsxs13("div", {
3859
+ /* @__PURE__ */ jsxs14("div", {
3485
3860
  className: "skippr:flex skippr:items-center skippr:gap-1.5",
3486
3861
  children: [
3487
- /* @__PURE__ */ jsx15("p", {
3862
+ /* @__PURE__ */ jsx17("p", {
3488
3863
  className: "skippr:line-clamp-1 skippr:text-sm skippr:font-semibold",
3489
3864
  children: module.name
3490
3865
  }),
3491
- sessionState === "resume" && /* @__PURE__ */ jsxs13("span", {
3866
+ sessionState === "resume" && /* @__PURE__ */ jsxs14("span", {
3492
3867
  className: `skippr:inline-flex skippr:shrink-0 skippr:items-center skippr:gap-0.5 skippr:rounded-full skippr:px-1.5 skippr:py-0.5 skippr:text-[9px] skippr:font-medium skippr:uppercase skippr:tracking-wide ${isFeatured ? "skippr:bg-primary-foreground/20 skippr:text-primary-foreground" : "skippr:bg-bubble/15 skippr:text-bubble"}`,
3493
3868
  children: [
3494
- /* @__PURE__ */ jsx15(Play, {
3869
+ /* @__PURE__ */ jsx17(Play, {
3495
3870
  className: "skippr:size-2.5"
3496
3871
  }),
3497
3872
  "Resume"
3498
3873
  ]
3499
3874
  }),
3500
- sessionState === "completed" && /* @__PURE__ */ jsxs13("span", {
3875
+ sessionState === "completed" && /* @__PURE__ */ jsxs14("span", {
3501
3876
  className: "skippr:inline-flex skippr:shrink-0 skippr:items-center skippr:gap-0.5 skippr:rounded-full skippr:bg-muted skippr:px-1.5 skippr:py-0.5 skippr:text-[9px] skippr:font-medium skippr:uppercase skippr:tracking-wide skippr:text-muted-foreground",
3502
3877
  children: [
3503
- /* @__PURE__ */ jsx15(CircleCheck, {
3878
+ /* @__PURE__ */ jsx17(CircleCheck, {
3504
3879
  className: "skippr:size-2.5"
3505
3880
  }),
3506
3881
  "Completed"
3507
3882
  ]
3508
3883
  }),
3509
- sessionState === "expired" && /* @__PURE__ */ jsxs13("span", {
3884
+ sessionState === "expired" && /* @__PURE__ */ jsxs14("span", {
3510
3885
  className: "skippr:inline-flex skippr:shrink-0 skippr:items-center skippr:gap-0.5 skippr:rounded-full skippr:bg-muted skippr:px-1.5 skippr:py-0.5 skippr:text-[9px] skippr:font-medium skippr:uppercase skippr:tracking-wide skippr:text-muted-foreground",
3511
3886
  children: [
3512
- /* @__PURE__ */ jsx15(Clock, {
3887
+ /* @__PURE__ */ jsx17(Clock, {
3513
3888
  className: "skippr:size-2.5"
3514
3889
  }),
3515
3890
  "Expired"
@@ -3517,7 +3892,7 @@ function ModuleSelector() {
3517
3892
  })
3518
3893
  ]
3519
3894
  }),
3520
- module.description && /* @__PURE__ */ jsx15("p", {
3895
+ module.description && /* @__PURE__ */ jsx17("p", {
3521
3896
  className: isFeatured ? "skippr:line-clamp-2 skippr:text-[11px] skippr:leading-snug skippr:text-primary-foreground/70" : "skippr:line-clamp-2 skippr:text-[11px] skippr:leading-snug skippr:text-muted-foreground",
3522
3897
  children: module.description
3523
3898
  })
@@ -3531,7 +3906,7 @@ function ModuleSelector() {
3531
3906
  })
3532
3907
  ]
3533
3908
  }),
3534
- showScrollHint && /* @__PURE__ */ jsx15("div", {
3909
+ showScrollHint && /* @__PURE__ */ jsx17("div", {
3535
3910
  className: "skippr:pointer-events-none skippr:absolute skippr:bottom-0 skippr:left-0 skippr:right-0 skippr:h-12 skippr:bg-gradient-to-t skippr:from-background skippr:to-transparent"
3536
3911
  })
3537
3912
  ]
@@ -3539,49 +3914,49 @@ function ModuleSelector() {
3539
3914
  }
3540
3915
 
3541
3916
  // src/components/SessionAgenda.tsx
3542
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
3917
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
3543
3918
  function SessionAgenda({ phases, hasStarted }) {
3544
3919
  if (phases.length === 0 || !hasStarted) {
3545
- return /* @__PURE__ */ jsx16("div", {
3920
+ return /* @__PURE__ */ jsx18("div", {
3546
3921
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
3547
- children: /* @__PURE__ */ jsx16(LoadingDots, {
3922
+ children: /* @__PURE__ */ jsx18(LoadingDots, {
3548
3923
  label: "Waiting for agenda to load..."
3549
3924
  })
3550
3925
  });
3551
3926
  }
3552
- return /* @__PURE__ */ jsx16("div", {
3927
+ return /* @__PURE__ */ jsx18("div", {
3553
3928
  className: "skippr:flex-1 skippr:overflow-y-auto skippr:px-4 skippr:py-4",
3554
- children: /* @__PURE__ */ jsx16("div", {
3929
+ children: /* @__PURE__ */ jsx18("div", {
3555
3930
  className: "skippr:space-y-1",
3556
3931
  children: phases.map((phase) => {
3557
3932
  const isActive = phase.status === "active";
3558
3933
  const isCompleted = phase.status === "completed";
3559
- return /* @__PURE__ */ jsxs14("div", {
3934
+ return /* @__PURE__ */ jsxs15("div", {
3560
3935
  className: cn("skippr:flex skippr:items-start skippr:gap-2.5 skippr:rounded-lg skippr:p-2 skippr:transition-colors", isActive && "skippr:bg-primary/10"),
3561
3936
  children: [
3562
- /* @__PURE__ */ jsx16("div", {
3937
+ /* @__PURE__ */ jsx18("div", {
3563
3938
  className: "skippr:mt-0.5",
3564
- children: isCompleted ? /* @__PURE__ */ jsx16(CircleCheck, {
3939
+ children: isCompleted ? /* @__PURE__ */ jsx18(CircleCheck, {
3565
3940
  className: "skippr:size-4 skippr:text-chart-3"
3566
- }) : isActive ? /* @__PURE__ */ jsx16(Circle, {
3941
+ }) : isActive ? /* @__PURE__ */ jsx18(Circle, {
3567
3942
  className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
3568
- }) : /* @__PURE__ */ jsx16(Circle, {
3943
+ }) : /* @__PURE__ */ jsx18(Circle, {
3569
3944
  className: "skippr:size-4 skippr:text-muted-foreground/30"
3570
3945
  })
3571
3946
  }),
3572
- /* @__PURE__ */ jsxs14("div", {
3947
+ /* @__PURE__ */ jsxs15("div", {
3573
3948
  className: "skippr:min-w-0 skippr:flex-1",
3574
3949
  children: [
3575
- /* @__PURE__ */ jsx16("p", {
3950
+ /* @__PURE__ */ jsx18("p", {
3576
3951
  className: cn("skippr:text-sm", isCompleted && "skippr:text-muted-foreground skippr:line-through", isActive && "skippr:font-medium skippr:text-foreground", phase.status === "pending" && "skippr:text-muted-foreground"),
3577
3952
  children: phase.name
3578
3953
  }),
3579
- phase.highlights.length > 0 && /* @__PURE__ */ jsx16("ul", {
3954
+ phase.highlights.length > 0 && /* @__PURE__ */ jsx18("ul", {
3580
3955
  className: "skippr:mt-1 skippr:space-y-0.5",
3581
- children: phase.highlights.map((text) => /* @__PURE__ */ jsxs14("li", {
3956
+ children: phase.highlights.map((text) => /* @__PURE__ */ jsxs15("li", {
3582
3957
  className: cn("skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-[11px] skippr:leading-tight", isCompleted ? "skippr:text-muted-foreground/40 skippr:line-through" : "skippr:text-muted-foreground/70"),
3583
3958
  children: [
3584
- /* @__PURE__ */ jsx16("span", {
3959
+ /* @__PURE__ */ jsx18("span", {
3585
3960
  className: "skippr:size-1 skippr:shrink-0 skippr:rounded-full skippr:bg-current"
3586
3961
  }),
3587
3962
  text
@@ -3598,12 +3973,12 @@ function SessionAgenda({ phases, hasStarted }) {
3598
3973
  }
3599
3974
 
3600
3975
  // src/components/SessionWarningBanner.tsx
3601
- import { jsx as jsx17 } from "react/jsx-runtime";
3976
+ import { jsx as jsx19 } from "react/jsx-runtime";
3602
3977
  var SESSION_WARNING_THRESHOLD_SECS = 60;
3603
3978
  function SessionWarningBanner({ remaining }) {
3604
3979
  if (remaining === null || remaining <= 0 || remaining > SESSION_WARNING_THRESHOLD_SECS)
3605
3980
  return null;
3606
- return /* @__PURE__ */ jsx17("div", {
3981
+ return /* @__PURE__ */ jsx19("div", {
3607
3982
  "data-testid": "session-warning-banner",
3608
3983
  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",
3609
3984
  children: "Session ending soon"
@@ -3611,7 +3986,7 @@ function SessionWarningBanner({ remaining }) {
3611
3986
  }
3612
3987
 
3613
3988
  // src/components/StartSessionPrompt.tsx
3614
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
3989
+ import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
3615
3990
  var PROMPT_BUTTON = "skippr:cursor-pointer skippr:rounded-xl skippr:bg-primary skippr:px-8 skippr:py-3 skippr:text-sm skippr:font-medium skippr:text-primary-foreground skippr:transition-all skippr:hover:bg-primary/90 skippr:disabled:cursor-not-allowed skippr:disabled:opacity-60";
3616
3991
  function StartSessionPrompt({
3617
3992
  onStartSession,
@@ -3623,16 +3998,16 @@ function StartSessionPrompt({
3623
3998
  canResume = false,
3624
3999
  onResume
3625
4000
  }) {
3626
- return /* @__PURE__ */ jsxs15("div", {
4001
+ return /* @__PURE__ */ jsxs16("div", {
3627
4002
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:gap-3 skippr:px-4",
3628
4003
  children: [
3629
- canResume && onResume ? /* @__PURE__ */ jsx18("button", {
4004
+ canResume && onResume ? /* @__PURE__ */ jsx20("button", {
3630
4005
  type: "button",
3631
4006
  onClick: onResume,
3632
4007
  disabled: isStarting,
3633
4008
  className: PROMPT_BUTTON,
3634
4009
  children: isStarting ? "Resuming..." : "Resume session"
3635
- }) : /* @__PURE__ */ jsx18("button", {
4010
+ }) : /* @__PURE__ */ jsx20("button", {
3636
4011
  type: "button",
3637
4012
  onClick: () => {
3638
4013
  if (!agentId)
@@ -3643,7 +4018,7 @@ function StartSessionPrompt({
3643
4018
  className: PROMPT_BUTTON,
3644
4019
  children: isStarting ? "Starting..." : label
3645
4020
  }),
3646
- error && /* @__PURE__ */ jsx18("p", {
4021
+ error && /* @__PURE__ */ jsx20("p", {
3647
4022
  className: "skippr:text-xs skippr:text-destructive",
3648
4023
  children: error
3649
4024
  })
@@ -3652,7 +4027,7 @@ function StartSessionPrompt({
3652
4027
  }
3653
4028
 
3654
4029
  // src/components/Sidebar.tsx
3655
- import { jsx as jsx19, jsxs as jsxs16, Fragment as Fragment5 } from "react/jsx-runtime";
4030
+ import { jsx as jsx21, jsxs as jsxs17, Fragment as Fragment5 } from "react/jsx-runtime";
3656
4031
  function Sidebar({
3657
4032
  hideControls = false,
3658
4033
  hideHeader = false,
@@ -3694,7 +4069,7 @@ function Sidebar({
3694
4069
  const showAgenda = agentMode !== AGENT_MODE.AlwaysOn;
3695
4070
  const isFloating = variant === "floating";
3696
4071
  const isSidebar = variant === "sidebar";
3697
- useEffect16(() => {
4072
+ useEffect18(() => {
3698
4073
  if (!isSidebar)
3699
4074
  return;
3700
4075
  const prop = position === "right" ? "marginRight" : "marginLeft";
@@ -3708,12 +4083,12 @@ function Sidebar({
3708
4083
  document.body.style.transition = "";
3709
4084
  };
3710
4085
  }, [isSidebar, isPanelOpen, position]);
3711
- return /* @__PURE__ */ jsxs16("div", {
4086
+ return /* @__PURE__ */ jsxs17("div", {
3712
4087
  className: cn("skippr:fixed skippr:z-[9999]", "skippr:bg-card", "skippr:flex skippr:flex-col", "skippr:overflow-hidden", isFloating && "skippr:border skippr:border-border skippr:bottom-[88px] skippr:h-[min(460px,calc(100vh-200px))] skippr:rounded-2xl skippr:shadow-[0_8px_30px_rgba(0,0,0,0.16),0_4px_12px_rgba(0,0,0,0.08)]", isFloating && (position === "right" ? "skippr:right-6" : "skippr:left-6"), isFloating && "skippr:transition-[opacity,transform] skippr:duration-300 skippr:ease-in-out", isFloating && (position === "right" ? "skippr:origin-bottom-right" : "skippr:origin-bottom-left"), isFloating && !isPanelOpen && "skippr:scale-0 skippr:opacity-0 skippr:pointer-events-none", isFloating && isPanelOpen && "skippr:scale-100 skippr:opacity-100", isSidebar && "skippr:top-0 skippr:h-full", isSidebar && "skippr:transition-[width] skippr:duration-300 skippr:ease-in-out", isSidebar && position === "right" && "skippr:right-0 skippr:border-l skippr:border-l-border", isSidebar && position === "left" && "skippr:left-0 skippr:border-r skippr:border-r-border", isSidebar && !isPanelOpen && "skippr:w-0 skippr:border-0"),
3713
4088
  style: { width: isPanelOpen ? SIDEBAR_WIDTH : undefined },
3714
4089
  children: [
3715
- !hideHeader && /* @__PURE__ */ jsx19(ChatHeader, {}),
3716
- authFailed ? /* @__PURE__ */ jsx19(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx19(AuthenticatedContent, {
4090
+ !hideHeader && /* @__PURE__ */ jsx21(ChatHeader, {}),
4091
+ authFailed ? /* @__PURE__ */ jsx21(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx21(AuthenticatedContent, {
3717
4092
  isConnected,
3718
4093
  isPaused,
3719
4094
  isPausing,
@@ -3735,12 +4110,12 @@ function Sidebar({
3735
4110
  agentId,
3736
4111
  agentControls,
3737
4112
  showAgenda
3738
- }) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx19("div", {
4113
+ }) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx21("div", {
3739
4114
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
3740
- children: /* @__PURE__ */ jsx19(LoadingDots, {
4115
+ children: /* @__PURE__ */ jsx21(LoadingDots, {
3741
4116
  label: "Loading..."
3742
4117
  })
3743
- }) : /* @__PURE__ */ jsx19(LoginFlow, {
4118
+ }) : /* @__PURE__ */ jsx21(LoginFlow, {
3744
4119
  requestOtp,
3745
4120
  verifyOtp,
3746
4121
  error: authError,
@@ -3784,63 +4159,63 @@ function AuthenticatedContent({
3784
4159
  } else if (isPaused) {
3785
4160
  transitionLabel = "Paused";
3786
4161
  }
3787
- return /* @__PURE__ */ jsxs16(Fragment5, {
4162
+ return /* @__PURE__ */ jsxs17(Fragment5, {
3788
4163
  children: [
3789
- isConnected && /* @__PURE__ */ jsx19(ConnectedBanner, {}),
3790
- showTabBar && /* @__PURE__ */ jsxs16("div", {
4164
+ isConnected && /* @__PURE__ */ jsx21(ConnectedBanner, {}),
4165
+ showTabBar && /* @__PURE__ */ jsxs17("div", {
3791
4166
  className: "skippr:flex skippr:items-center skippr:gap-2 skippr:border-b skippr:border-border skippr:px-3 skippr:py-2",
3792
4167
  children: [
3793
- /* @__PURE__ */ jsxs16("button", {
4168
+ /* @__PURE__ */ jsxs17("button", {
3794
4169
  type: "button",
3795
4170
  className: cn("skippr:relative skippr:inline-flex skippr:cursor-pointer skippr:items-center skippr:gap-1.5 skippr:rounded-lg skippr:px-3 skippr:py-2 skippr:text-sm skippr:font-medium skippr:transition-all", activeTab === "chat" ? "skippr:text-foreground" : "skippr:text-muted-foreground skippr:hover:text-foreground"),
3796
4171
  onClick: () => onTabChange("chat"),
3797
4172
  children: [
3798
- /* @__PURE__ */ jsx19(MessageCircle, {
4173
+ /* @__PURE__ */ jsx21(MessageCircle, {
3799
4174
  className: "skippr:size-3.5"
3800
4175
  }),
3801
4176
  "Chat",
3802
- activeTab === "chat" && /* @__PURE__ */ jsx19("span", {
4177
+ activeTab === "chat" && /* @__PURE__ */ jsx21("span", {
3803
4178
  className: "skippr:absolute skippr:-bottom-2 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
3804
4179
  })
3805
4180
  ]
3806
4181
  }),
3807
- showAgenda && /* @__PURE__ */ jsxs16("button", {
4182
+ showAgenda && /* @__PURE__ */ jsxs17("button", {
3808
4183
  type: "button",
3809
4184
  className: cn("skippr:relative skippr:inline-flex skippr:cursor-pointer skippr:items-center skippr:gap-1.5 skippr:rounded-lg skippr:px-3 skippr:py-2 skippr:text-sm skippr:font-medium skippr:transition-all", activeTab === "agenda" ? "skippr:text-foreground" : "skippr:text-muted-foreground skippr:hover:text-foreground"),
3810
4185
  onClick: () => onTabChange("agenda"),
3811
4186
  children: [
3812
- /* @__PURE__ */ jsx19(Calendar, {
4187
+ /* @__PURE__ */ jsx21(Calendar, {
3813
4188
  className: "skippr:size-3.5"
3814
4189
  }),
3815
4190
  "Agenda",
3816
- activeTab === "agenda" && /* @__PURE__ */ jsx19("span", {
4191
+ activeTab === "agenda" && /* @__PURE__ */ jsx21("span", {
3817
4192
  className: "skippr:absolute skippr:-bottom-2 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
3818
4193
  })
3819
4194
  ]
3820
4195
  })
3821
4196
  ]
3822
4197
  }),
3823
- /* @__PURE__ */ jsx19("div", {
4198
+ /* @__PURE__ */ jsx21("div", {
3824
4199
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
3825
- children: isDisconnecting ? /* @__PURE__ */ jsx19("div", {
4200
+ children: isDisconnecting ? /* @__PURE__ */ jsx21("div", {
3826
4201
  className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
3827
- children: /* @__PURE__ */ jsx19(LoadingDots, {
4202
+ children: /* @__PURE__ */ jsx21(LoadingDots, {
3828
4203
  label: "Ending session..."
3829
4204
  })
3830
- }) : showSelectorAsPrompt ? /* @__PURE__ */ jsx19(ModuleSelector, {}) : inSession ? /* @__PURE__ */ jsxs16(Fragment5, {
4205
+ }) : showSelectorAsPrompt ? /* @__PURE__ */ jsx21(ModuleSelector, {}) : inSession ? /* @__PURE__ */ jsxs17(Fragment5, {
3831
4206
  children: [
3832
- transitionLabel && /* @__PURE__ */ jsx19("div", {
4207
+ transitionLabel && /* @__PURE__ */ jsx21("div", {
3833
4208
  className: "skippr:shrink-0 skippr:border-b skippr:border-border skippr:bg-muted/50 skippr:px-3 skippr:py-1.5 skippr:text-center skippr:text-xs skippr:text-muted-foreground",
3834
4209
  children: transitionLabel
3835
4210
  }),
3836
- /* @__PURE__ */ jsx19(ConnectedBody, {
4211
+ /* @__PURE__ */ jsx21(ConnectedBody, {
3837
4212
  activeTab: effectiveTab,
3838
4213
  autoFocusChat
3839
4214
  })
3840
4215
  ]
3841
- }) : /* @__PURE__ */ jsx19("div", {
4216
+ }) : /* @__PURE__ */ jsx21("div", {
3842
4217
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
3843
- children: /* @__PURE__ */ jsx19(StartSessionPrompt, {
4218
+ children: /* @__PURE__ */ jsx21(StartSessionPrompt, {
3844
4219
  onStartSession,
3845
4220
  agentId,
3846
4221
  agentControls,
@@ -3852,7 +4227,7 @@ function AuthenticatedContent({
3852
4227
  })
3853
4228
  }, `${activeTab}-empty`)
3854
4229
  }),
3855
- (isConnected || isPaused) && !isDisconnecting && !hideControls && /* @__PURE__ */ jsx19(MeetingControls, {
4230
+ (isConnected || isPaused) && !isDisconnecting && !hideControls && /* @__PURE__ */ jsx21(MeetingControls, {
3856
4231
  onHangUp: onDisconnect,
3857
4232
  onPause,
3858
4233
  onResume,
@@ -3864,17 +4239,17 @@ function AuthenticatedContent({
3864
4239
  });
3865
4240
  }
3866
4241
  function AuthError() {
3867
- return /* @__PURE__ */ jsxs16("div", {
4242
+ return /* @__PURE__ */ jsxs17("div", {
3868
4243
  className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
3869
4244
  children: [
3870
- /* @__PURE__ */ jsx19(CircleAlert, {
4245
+ /* @__PURE__ */ jsx21(CircleAlert, {
3871
4246
  className: "skippr:mb-3 skippr:size-7 skippr:text-destructive"
3872
4247
  }),
3873
- /* @__PURE__ */ jsx19("p", {
4248
+ /* @__PURE__ */ jsx21("p", {
3874
4249
  className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
3875
4250
  children: "We couldn't verify your session"
3876
4251
  }),
3877
- /* @__PURE__ */ jsx19("p", {
4252
+ /* @__PURE__ */ jsx21("p", {
3878
4253
  className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
3879
4254
  children: "Please contact administrator."
3880
4255
  })
@@ -3883,7 +4258,7 @@ function AuthError() {
3883
4258
  }
3884
4259
  function ConnectedBanner() {
3885
4260
  const remaining = useSessionRemaining();
3886
- return /* @__PURE__ */ jsx19(SessionWarningBanner, {
4261
+ return /* @__PURE__ */ jsx21(SessionWarningBanner, {
3887
4262
  remaining
3888
4263
  });
3889
4264
  }
@@ -3894,17 +4269,17 @@ function ConnectedBody({
3894
4269
  const { allMessages, agentState, sendChatMessage, isSendingChat } = useCombinedMessages();
3895
4270
  const { phases } = usePhaseUpdates();
3896
4271
  if (activeTab === "agenda") {
3897
- return /* @__PURE__ */ jsx19("div", {
4272
+ return /* @__PURE__ */ jsx21("div", {
3898
4273
  className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto skippr:animate-skippr-tab-fade",
3899
- children: /* @__PURE__ */ jsx19(SessionAgenda, {
4274
+ children: /* @__PURE__ */ jsx21(SessionAgenda, {
3900
4275
  phases,
3901
4276
  hasStarted: allMessages.length > 0 || agentState === "speaking"
3902
4277
  })
3903
4278
  }, "agenda");
3904
4279
  }
3905
- return /* @__PURE__ */ jsx19("div", {
4280
+ return /* @__PURE__ */ jsx21("div", {
3906
4281
  className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
3907
- children: /* @__PURE__ */ jsx19(MessageList, {
4282
+ children: /* @__PURE__ */ jsx21(MessageList, {
3908
4283
  messages: allMessages,
3909
4284
  isStreaming: agentState === "speaking",
3910
4285
  sendChatMessage,
@@ -3915,28 +4290,28 @@ function ConnectedBody({
3915
4290
  }
3916
4291
 
3917
4292
  // src/components/SidebarTrigger.tsx
3918
- import { jsx as jsx20 } from "react/jsx-runtime";
4293
+ import { jsx as jsx22 } from "react/jsx-runtime";
3919
4294
  function SidebarTrigger() {
3920
4295
  const { isPanelOpen, togglePanel, minimizePanel, minimizable, position, isMinimized } = useLiveAgent();
3921
4296
  if (isMinimized)
3922
4297
  return null;
3923
4298
  const handleClick = isPanelOpen && minimizable ? minimizePanel : togglePanel;
3924
- return /* @__PURE__ */ jsx20("button", {
4299
+ return /* @__PURE__ */ jsx22("button", {
3925
4300
  type: "button",
3926
4301
  onClick: handleClick,
3927
4302
  title: isPanelOpen ? "Close chat" : "Open chat",
3928
4303
  "aria-label": isPanelOpen ? "Close chat" : "Open chat",
3929
4304
  className: cn("skippr:fixed skippr:bottom-6 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"),
3930
- children: isPanelOpen ? /* @__PURE__ */ jsx20(ChevronDown, {
4305
+ children: isPanelOpen ? /* @__PURE__ */ jsx22(ChevronDown, {
3931
4306
  className: "skippr:size-5"
3932
- }) : /* @__PURE__ */ jsx20(Logo, {
4307
+ }) : /* @__PURE__ */ jsx22(Logo, {
3933
4308
  className: "skippr:size-12"
3934
4309
  })
3935
4310
  });
3936
4311
  }
3937
4312
 
3938
4313
  // src/components/LiveAgent.tsx
3939
- import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
4314
+ import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
3940
4315
  function LiveAgent(props) {
3941
4316
  const {
3942
4317
  agentId: hostAgentId,
@@ -3968,20 +4343,20 @@ function LiveAgent(props) {
3968
4343
  const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
3969
4344
  const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
3970
4345
  const hasModuleSelector = !hostAgentId;
3971
- const [activeModule, setActiveModule] = useState12(null);
4346
+ const [activeModule, setActiveModule] = useState14(null);
3972
4347
  const agentId = hasModuleSelector ? activeModule?.id ?? null : hostAgentId;
3973
4348
  const agentControls = hasModuleSelector ? activeModule?.controls : hostAgentControls;
3974
- const minimizeOnSessionStart = useCallback8(() => {
4349
+ const minimizeOnSessionStart = useCallback9(() => {
3975
4350
  if (minimizable) {
3976
4351
  setIsMinimized(true);
3977
4352
  setIsPanelOpen(false);
3978
4353
  }
3979
4354
  }, [minimizable]);
3980
- const expandOnSessionStartError = useCallback8(() => {
4355
+ const expandOnSessionStartError = useCallback9(() => {
3981
4356
  setIsMinimized(false);
3982
4357
  setIsPanelOpen(true);
3983
4358
  }, []);
3984
- const minimizeOnSessionDisconnect = useCallback8(() => {
4359
+ const minimizeOnSessionDisconnect = useCallback9(() => {
3985
4360
  if (hasModuleSelector) {
3986
4361
  setActiveModule(null);
3987
4362
  }
@@ -4017,17 +4392,17 @@ function LiveAgent(props) {
4017
4392
  onStartError: expandOnSessionStartError,
4018
4393
  onDisconnect: minimizeOnSessionDisconnect
4019
4394
  });
4020
- const teardownInFlightRef = useRef11(false);
4395
+ const teardownInFlightRef = useRef13(false);
4021
4396
  teardownInFlightRef.current = isPaused || isPausing || isDisconnecting;
4022
- const handleRoomDisconnected = useCallback8(() => {
4397
+ const handleRoomDisconnected = useCallback9(() => {
4023
4398
  if (teardownInFlightRef.current)
4024
4399
  return;
4025
4400
  disconnect();
4026
4401
  }, [disconnect]);
4027
- const [isPanelOpen, setIsPanelOpen] = useState12(defaultOpen);
4028
- const [isMinimized, setIsMinimized] = useState12(minimizable && !defaultOpen);
4029
- const [sidebarTab, setSidebarTab] = useState12("agenda");
4030
- const [phasesSnapshot, setPhasesSnapshot] = useState12([]);
4402
+ const [isPanelOpen, setIsPanelOpen] = useState14(defaultOpen);
4403
+ const [isMinimized, setIsMinimized] = useState14(minimizable && !defaultOpen);
4404
+ const [sidebarTab, setSidebarTab] = useState14("agenda");
4405
+ const [phasesSnapshot, setPhasesSnapshot] = useState14([]);
4031
4406
  const {
4032
4407
  modules: availableModules,
4033
4408
  isLoading: isLoadingModules,
@@ -4047,7 +4422,7 @@ function LiveAgent(props) {
4047
4422
  }, [activeModule, hostAgentId, availableModules]);
4048
4423
  const agentMode = activeModuleForAgent?.mode ?? null;
4049
4424
  const resumableSession = useMemo5(() => getResumableSession(activeModuleForAgent), [activeModuleForAgent]);
4050
- const resumeSession = useCallback8(async () => {
4425
+ const resumeSession = useCallback9(async () => {
4051
4426
  if (!resumableSession)
4052
4427
  return;
4053
4428
  await startSession({
@@ -4056,7 +4431,7 @@ function LiveAgent(props) {
4056
4431
  existingSessionId: resumableSession.id
4057
4432
  });
4058
4433
  }, [resumableSession, startSession, agentControls]);
4059
- const selectModule = useCallback8((moduleId) => {
4434
+ const selectModule = useCallback9((moduleId) => {
4060
4435
  const found = availableModules.find((m) => m.id === moduleId);
4061
4436
  if (!found)
4062
4437
  return;
@@ -4067,9 +4442,9 @@ function LiveAgent(props) {
4067
4442
  existingSessionId: getResumableSessionId(found.currentSession, found.mode)
4068
4443
  });
4069
4444
  }, [availableModules, startSession]);
4070
- const [welcomeDismissed, setWelcomeDismissed] = useState12(false);
4071
- const dismissWelcome = useCallback8(() => setWelcomeDismissed(true), []);
4072
- const [currentPosition, setCurrentPosition] = useState12(() => {
4445
+ const [welcomeDismissed, setWelcomeDismissed] = useState14(false);
4446
+ const dismissWelcome = useCallback9(() => setWelcomeDismissed(true), []);
4447
+ const [currentPosition, setCurrentPosition] = useState14(() => {
4073
4448
  try {
4074
4449
  const saved = localStorage.getItem("skippr_widget_position");
4075
4450
  if (saved === "left" || saved === "right")
@@ -4077,20 +4452,20 @@ function LiveAgent(props) {
4077
4452
  } catch {}
4078
4453
  return position;
4079
4454
  });
4080
- const setPositionWithPersist = useCallback8((pos) => {
4455
+ const setPositionWithPersist = useCallback9((pos) => {
4081
4456
  setCurrentPosition(pos);
4082
4457
  try {
4083
4458
  localStorage.setItem("skippr_widget_position", pos);
4084
4459
  } catch {}
4085
4460
  }, []);
4086
- const openPanel = useCallback8(() => setIsPanelOpen(true), []);
4087
- const closePanel = useCallback8(() => setIsPanelOpen(false), []);
4088
- const togglePanel = useCallback8(() => setIsPanelOpen((prev) => !prev), []);
4089
- const expandPanel = useCallback8(() => {
4461
+ const openPanel = useCallback9(() => setIsPanelOpen(true), []);
4462
+ const closePanel = useCallback9(() => setIsPanelOpen(false), []);
4463
+ const togglePanel = useCallback9(() => setIsPanelOpen((prev) => !prev), []);
4464
+ const expandPanel = useCallback9(() => {
4090
4465
  setIsMinimized(false);
4091
4466
  setIsPanelOpen(true);
4092
4467
  }, []);
4093
- const minimizePanel = useCallback8(() => {
4468
+ const minimizePanel = useCallback9(() => {
4094
4469
  if (!minimizable)
4095
4470
  return;
4096
4471
  setIsMinimized(true);
@@ -4201,33 +4576,34 @@ function LiveAgent(props) {
4201
4576
  refetchModules,
4202
4577
  selectModule
4203
4578
  ]);
4204
- return /* @__PURE__ */ jsx21(LiveAgentContext.Provider, {
4579
+ return /* @__PURE__ */ jsx23(LiveAgentContext.Provider, {
4205
4580
  value: ctx,
4206
- children: /* @__PURE__ */ jsxs17(LiveKitRoom, {
4581
+ children: /* @__PURE__ */ jsxs18(LiveKitRoom, {
4207
4582
  serverUrl: connection?.livekitUrl,
4208
4583
  token: connection?.token,
4209
4584
  connect: shouldConnect,
4210
4585
  audio: true,
4211
4586
  onDisconnected: handleRoomDisconnected,
4212
4587
  children: [
4213
- connection && /* @__PURE__ */ jsx21(RoomAudioRenderer, {}),
4214
- connection && captureMode === "screenshare" && /* @__PURE__ */ jsx21(AutoStartMedia, {
4588
+ connection && /* @__PURE__ */ jsx23(RoomAudioRenderer, {}),
4589
+ connection && captureMode === "screenshare" && /* @__PURE__ */ jsx23(AutoStartMedia, {
4215
4590
  pendingScreenStream
4216
4591
  }),
4217
- connection && captureMode === "auto" && /* @__PURE__ */ jsx21(DomCapture, {}),
4218
- /* @__PURE__ */ jsxs17(ShadowHost, {
4592
+ connection && captureMode === "auto" && /* @__PURE__ */ jsx23(DomCapture, {}),
4593
+ /* @__PURE__ */ jsxs18(ShadowHost, {
4219
4594
  children: [
4220
- connection && captureMode === "auto" && agentControls?.highlight && /* @__PURE__ */ jsx21(HighlightOverlay, {}),
4221
- /* @__PURE__ */ jsxs17("div", {
4595
+ connection && captureMode === "auto" && agentControls?.highlight && /* @__PURE__ */ jsx23(HighlightOverlay, {}),
4596
+ connection && captureMode === "auto" && agentControls?.actions && /* @__PURE__ */ jsx23(PageActionHandler, {}),
4597
+ /* @__PURE__ */ jsxs18("div", {
4222
4598
  id: WIDGET_ROOT_ID,
4223
4599
  children: [
4224
- isMinimized && /* @__PURE__ */ jsx21(MinimizedBubble, {
4600
+ isMinimized && /* @__PURE__ */ jsx23(MinimizedBubble, {
4225
4601
  welcomeMessage,
4226
4602
  welcomeDismissed,
4227
4603
  onDismissWelcome: dismissWelcome
4228
4604
  }),
4229
- /* @__PURE__ */ jsx21(SidebarTrigger, {}),
4230
- /* @__PURE__ */ jsx21(Sidebar, {
4605
+ /* @__PURE__ */ jsx23(SidebarTrigger, {}),
4606
+ /* @__PURE__ */ jsx23(Sidebar, {
4231
4607
  hideControls,
4232
4608
  hideHeader,
4233
4609
  startSessionLabel