@omniloy/sofia-sdk 1.0.10 → 1.0.11

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.
@@ -21978,7 +21978,7 @@
21978
21978
  create: create$1,
21979
21979
  } = axios;
21980
21980
 
21981
- const version$2 = "1.0.10";
21981
+ const version$2 = "1.0.11";
21982
21982
 
21983
21983
  const handleApiError$1 = async (error) => {
21984
21984
  return Promise.reject(error);
@@ -27854,6 +27854,150 @@
27854
27854
  };
27855
27855
  };
27856
27856
 
27857
+ const FAMILIES = [
27858
+ "recording",
27859
+ "activity",
27860
+ "report",
27861
+ "lifecycle"
27862
+ ];
27863
+ const familyOf = (name) => {
27864
+ const prefix = name.split(".")[0];
27865
+ return FAMILIES.includes(prefix) ? prefix : "lifecycle";
27866
+ };
27867
+
27868
+ const compileSubscription = (patterns) => {
27869
+ if (!patterns || patterns.length === 0)
27870
+ return () => false;
27871
+ if (patterns.includes("*"))
27872
+ return () => true;
27873
+ const exact = /* @__PURE__ */ new Set();
27874
+ const families = /* @__PURE__ */ new Set();
27875
+ for (const pattern of patterns) {
27876
+ if (pattern.endsWith(".*"))
27877
+ families.add(pattern.slice(0, -2));
27878
+ else
27879
+ exact.add(pattern);
27880
+ }
27881
+ if (families.size === 0)
27882
+ return (name) => exact.has(name);
27883
+ return (name) => {
27884
+ if (exact.has(name))
27885
+ return true;
27886
+ const dot = name.indexOf(".");
27887
+ return dot > 0 && families.has(name.slice(0, dot));
27888
+ };
27889
+ };
27890
+ const subscriptionKey = (patterns) => patterns ? patterns.join("|") : "";
27891
+
27892
+ const QUEUE_CAP = 200;
27893
+ let handler = null;
27894
+ let matches = () => false;
27895
+ let sessionId = null;
27896
+ let seq = 0;
27897
+ let queue$1 = [];
27898
+ let draining = false;
27899
+ let handlerFailed = false;
27900
+ let registrations = 0;
27901
+ const drain = () => {
27902
+ draining = false;
27903
+ const batch = queue$1;
27904
+ queue$1 = [];
27905
+ const current = handler;
27906
+ if (!current)
27907
+ return;
27908
+ for (const event of batch) {
27909
+ try {
27910
+ current(event);
27911
+ } catch {
27912
+ if (!handlerFailed) {
27913
+ handlerFailed = true;
27914
+ logger.warn("[SdkEvents] onEvent handler threw; further failures suppressed");
27915
+ }
27916
+ }
27917
+ }
27918
+ };
27919
+ const schedule = () => {
27920
+ if (draining)
27921
+ return;
27922
+ draining = true;
27923
+ queueMicrotask(drain);
27924
+ };
27925
+ const SdkEventBus = {
27926
+ /**
27927
+ * Installs the host handler. Returns an unsubscribe. Events that matched
27928
+ * the subscription but arrived before a handler existed are queued and
27929
+ * delivered on the next microtask. That window is real: React runs child
27930
+ * effects before parent ones, so a provider below `Omniscribe` can emit
27931
+ * after `setSubscription` and before this call.
27932
+ */
27933
+ setHandler(next) {
27934
+ registrations += 1;
27935
+ if (next && handler && registrations > 1) {
27936
+ logger.warn("[SdkEvents] a second onEvent handler was registered. The SDK supports one <Omniscribe> per page; the newest handler wins.");
27937
+ }
27938
+ handler = next;
27939
+ if (next && queue$1.length > 0)
27940
+ schedule();
27941
+ return () => {
27942
+ if (handler === next)
27943
+ handler = null;
27944
+ };
27945
+ },
27946
+ setSubscription(patterns) {
27947
+ matches = compileSubscription(patterns);
27948
+ },
27949
+ setSessionId(next) {
27950
+ sessionId = next;
27951
+ },
27952
+ /**
27953
+ * Cheap guard for callers on a hot path who would otherwise build a
27954
+ * payload for nobody.
27955
+ */
27956
+ wants(name) {
27957
+ return matches(name);
27958
+ },
27959
+ /**
27960
+ * Queues an event for delivery on the next microtask.
27961
+ *
27962
+ * Never throws. Deferring delivery does three things at once: host code
27963
+ * never runs inside React's render phase (where a `setState` would
27964
+ * throw), a slow handler cannot block `socket.onmessage` on the audio
27965
+ * path, and a handler that itself triggers an event cannot recurse —
27966
+ * the re-entrant call only appends to a queue the current drain has
27967
+ * already taken. One shared drain, not one microtask per event, so `seq`
27968
+ * ordering is preserved.
27969
+ */
27970
+ emit(name, payload, level = "info") {
27971
+ if (!matches(name))
27972
+ return;
27973
+ queue$1.push({
27974
+ name,
27975
+ family: familyOf(name),
27976
+ level,
27977
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
27978
+ seq: ++seq,
27979
+ sdkVersion: version$2,
27980
+ sessionId,
27981
+ payload
27982
+ });
27983
+ if (queue$1.length > QUEUE_CAP)
27984
+ queue$1.shift();
27985
+ if (handler)
27986
+ schedule();
27987
+ },
27988
+ /** Test-only: restores the module to its initial state. */
27989
+ __resetForTests() {
27990
+ handler = null;
27991
+ matches = () => false;
27992
+ sessionId = null;
27993
+ seq = 0;
27994
+ queue$1 = [];
27995
+ draining = false;
27996
+ handlerFailed = false;
27997
+ registrations = 0;
27998
+ }
27999
+ };
28000
+
27857
28001
  const SettingsContext = React.createContext(void 0);
27858
28002
  const useSettingsContext = () => {
27859
28003
  const context = React.useContext(SettingsContext);
@@ -27878,6 +28022,7 @@
27878
28022
  const [minorPolicy, setMinorPolicy] = React.useState(DEFAULT_MINOR_POLICY);
27879
28023
  const [minorAgeThreshold, setMinorAgeThreshold] = React.useState(DEFAULT_MINOR_AGE_THRESHOLD);
27880
28024
  const [isLoading, setIsLoading] = React.useState(true);
28025
+ const hasEmittedReadyRef = React.useRef(false);
27881
28026
  const isInitializedRef = React.useRef(false);
27882
28027
  const applySettings = React.useCallback((parsed) => {
27883
28028
  setDictionary(parsed.dictionary);
@@ -27928,6 +28073,10 @@
27928
28073
  SettingsCache.getInstance().clear();
27929
28074
  } finally {
27930
28075
  setIsLoading(false);
28076
+ if (!hasEmittedReadyRef.current) {
28077
+ hasEmittedReadyRef.current = true;
28078
+ SdkEventBus.emit("lifecycle.ready", {});
28079
+ }
27931
28080
  }
27932
28081
  }, [toolArgs, templateId, predefinedLanguage, applySettings]);
27933
28082
  const reloadSettings = React.useCallback(async () => {
@@ -33655,8 +33804,151 @@
33655
33804
 
33656
33805
  const postAppEvent = (event) => requester.post("/app-events", event).catch(() => void 0);
33657
33806
 
33807
+ const ACTIVITY_THROTTLE_MS = 5e3;
33808
+ const lastEmittedAt = /* @__PURE__ */ new Map();
33809
+ const shouldEmit = (key) => {
33810
+ const now = Date.now();
33811
+ const previous = lastEmittedAt.get(key);
33812
+ if (previous !== void 0 && now - previous < ACTIVITY_THROTTLE_MS) {
33813
+ return false;
33814
+ }
33815
+ lastEmittedAt.set(key, now);
33816
+ return true;
33817
+ };
33818
+ const emitInteraction = (kind) => {
33819
+ if (!SdkEventBus.wants("activity.interaction"))
33820
+ return;
33821
+ if (!shouldEmit(`interaction:${kind}`))
33822
+ return;
33823
+ SdkEventBus.emit("activity.interaction", { kind });
33824
+ };
33825
+ const emitTyping = (surface) => {
33826
+ if (!SdkEventBus.wants("activity.typing"))
33827
+ return;
33828
+ if (!shouldEmit(`typing:${surface}`))
33829
+ return;
33830
+ SdkEventBus.emit("activity.typing", { surface });
33831
+ };
33832
+
33833
+ let open$1 = false;
33834
+ const openReportBracket = () => {
33835
+ if (open$1)
33836
+ return;
33837
+ open$1 = true;
33838
+ SdkEventBus.emit("report.generation_started", {});
33839
+ };
33840
+ const closeReportBracket = (ok) => {
33841
+ if (!open$1)
33842
+ return;
33843
+ open$1 = false;
33844
+ SdkEventBus.emit("report.settled", { ok });
33845
+ };
33846
+
33847
+ const RECORDING_HEARTBEAT_MS = 3e4;
33848
+ let lastBeatAt = null;
33849
+ const emitRecordingHeartbeat = () => {
33850
+ if (!SdkEventBus.wants("recording.heartbeat"))
33851
+ return;
33852
+ const now = Date.now();
33853
+ if (lastBeatAt !== null && now - lastBeatAt < RECORDING_HEARTBEAT_MS)
33854
+ return;
33855
+ lastBeatAt = now;
33856
+ SdkEventBus.emit("recording.heartbeat", {});
33857
+ };
33858
+ const resetRecordingHeartbeat = () => {
33859
+ lastBeatAt = null;
33860
+ };
33861
+
33862
+ const INTERACTION_KIND = {
33863
+ recording_button: "recording",
33864
+ chat_mic_button: "chat",
33865
+ attach_file_button: "chat",
33866
+ remove_file_button: "chat",
33867
+ edit_message_button: "chat",
33868
+ cancel_edit_message_button: "chat",
33869
+ send_edit_message_button: "chat",
33870
+ copy_human_message_button: "chat",
33871
+ copy_ai_message_button: "chat",
33872
+ settings_button: "settings",
33873
+ settings_back_button: "settings",
33874
+ settings_section_button: "settings",
33875
+ select_audio_environment: "settings",
33876
+ compile_summary_button: "report",
33877
+ regenerate_summary_button: "report",
33878
+ generate_extras_button: "report",
33879
+ expand_transcription_button: "transcript",
33880
+ history_thread_item: "history",
33881
+ close_widget_button: "widget",
33882
+ main_menu_button: "widget",
33883
+ play_panel_button: "widget"
33884
+ };
33885
+ const CLICK_FALLBACK_KIND = "widget";
33886
+ const RECORDING_MODES = ["consultation", "dictation"];
33887
+ const AUDIO_LOSS_CAUSES = ["mic", "network", "server"];
33888
+ const readNumber = (payload, key) => {
33889
+ const value = payload?.[key];
33890
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
33891
+ };
33892
+ const readMode = (payload) => {
33893
+ const value = payload?.mode;
33894
+ return typeof value === "string" && RECORDING_MODES.includes(value) ? value : "consultation";
33895
+ };
33896
+ const readCause = (payload) => {
33897
+ const value = payload?.cause;
33898
+ return typeof value === "string" && AUDIO_LOSS_CAUSES.includes(value) ? value : "server";
33899
+ };
33900
+ const fanOutAppEvent = (input) => {
33901
+ try {
33902
+ const { event_type, event_name, payload } = input;
33903
+ if (event_type === "click") {
33904
+ emitInteraction(INTERACTION_KIND[event_name] ?? CLICK_FALLBACK_KIND);
33905
+ }
33906
+ switch (event_name) {
33907
+ case "recording_started":
33908
+ resetRecordingHeartbeat();
33909
+ SdkEventBus.emit("recording.started", { mode: readMode(payload) });
33910
+ break;
33911
+ case "recording_stopped":
33912
+ SdkEventBus.emit("recording.stopped", {
33913
+ mode: readMode(payload),
33914
+ durationSeconds: readNumber(payload, "duration_seconds")
33915
+ });
33916
+ break;
33917
+ // The mic/network emitter reports the length of the gap once audio
33918
+ // recovers. The server-close emitter has no gap to measure — capture
33919
+ // is torn down on the spot — and reports the recording position
33920
+ // instead, so fall back to that rather than hand the host a silent 0.
33921
+ case "audio_lost":
33922
+ SdkEventBus.emit("recording.audio_lost", {
33923
+ cause: readCause(payload),
33924
+ durationSeconds: readNumber(payload, "duration_seconds") || readNumber(payload, "recording_position_seconds")
33925
+ }, "warn");
33926
+ break;
33927
+ case "mic_disconnected":
33928
+ SdkEventBus.emit("recording.microphone_disconnected", {}, "warn");
33929
+ break;
33930
+ // A report request is in flight. The host must suppress its idle
33931
+ // timer until report.settled, or it will close the widget during
33932
+ // generation — which looks exactly like idleness and loses the note.
33933
+ // openReportBracket ignores a second click while one is in flight, so
33934
+ // the pair stays balanced.
33935
+ case "compile_summary_button":
33936
+ case "regenerate_summary_button":
33937
+ openReportBracket();
33938
+ break;
33939
+ case "close_widget_button":
33940
+ SdkEventBus.emit("lifecycle.closed", {});
33941
+ break;
33942
+ default:
33943
+ break;
33944
+ }
33945
+ } catch {
33946
+ }
33947
+ };
33948
+
33658
33949
  const EventTracker = {
33659
33950
  track(input) {
33951
+ fanOutAppEvent(input);
33660
33952
  const event = {
33661
33953
  event_type: input.event_type,
33662
33954
  event_name: input.event_name,
@@ -36929,6 +37221,7 @@
36929
37221
  const audioData16kHz = resampleTo16kHZ(input, audioContext.sampleRate);
36930
37222
  socket.send(audioData16kHz);
36931
37223
  lastSendAtRef.current = Date.now();
37224
+ emitRecordingHeartbeat();
36932
37225
  }
36933
37226
  };
36934
37227
  audioTracks.forEach((t) => {
@@ -38362,6 +38655,7 @@
38362
38655
  });
38363
38656
  }, []);
38364
38657
  const setScalarEdit = React.useCallback((entryKey, value) => {
38658
+ emitTyping("note");
38365
38659
  setEdits((prev) => {
38366
38660
  const next = new Map(prev);
38367
38661
  next.set(entryKey, value);
@@ -38369,6 +38663,7 @@
38369
38663
  });
38370
38664
  }, []);
38371
38665
  const setRowFieldEdit = React.useCallback((entryKey, rowIndex, fieldKey, value) => {
38666
+ emitTyping("note");
38372
38667
  setEdits((prev) => {
38373
38668
  const next = new Map(prev);
38374
38669
  next.set(rowFieldEditKey(entryKey, rowIndex, fieldKey), value);
@@ -38376,6 +38671,7 @@
38376
38671
  });
38377
38672
  }, []);
38378
38673
  const setScalarGapValue = React.useCallback((key, value) => {
38674
+ emitTyping("note");
38379
38675
  setFilledScalarGaps((prev) => {
38380
38676
  const next = new Map(prev);
38381
38677
  next.set(key, value);
@@ -39468,6 +39764,7 @@
39468
39764
  } finally {
39469
39765
  setState((prev) => ({ ...prev, generating: false }));
39470
39766
  regenerateInflightRef.current = false;
39767
+ closeReportBracket(false);
39471
39768
  }
39472
39769
  }, [
39473
39770
  abortIfBlocked,
@@ -39507,6 +39804,7 @@
39507
39804
  handleReport?.(result);
39508
39805
  }
39509
39806
  trackEvent("event", "summary_compiled");
39807
+ closeReportBracket(true);
39510
39808
  if (patientId && doctorId) {
39511
39809
  await saveDayData({
39512
39810
  patientId,
@@ -39648,6 +39946,7 @@
39648
39946
  }
39649
39947
  } finally {
39650
39948
  generateInflightRef.current = false;
39949
+ closeReportBracket(false);
39651
39950
  setUserPendingClick(false);
39652
39951
  const finalPid = appointmentData?.patientId;
39653
39952
  const finalDid = appointmentData?.doctorId;
@@ -163089,29 +163388,24 @@ Here are the output tags:
163089
163388
  isLoading: generateState.isUserReportLoading,
163090
163389
  onClick: () => generateState.tryStartGenerate(generateState.showRegenerateReport ? "regenerate" : "generate")
163091
163390
  }
163092
- ), generateState && showExtras && !generateState.isRecording && !generateState.enabled && !generateState.connectionLoading && jsxRuntimeExports.jsx(ExtrasButtons, { categories, disabled: reportLoading || isActivationBlocked })] }), jsxRuntimeExports.jsxs("form", { onSubmit, className: "omniscribe_chat-view-combined-footer-row", children: [jsxRuntimeExports.jsx("input", { ref: fileInputRef, type: "file", multiple: true, accept: "image/*,.pdf", onChange: onFileSelect, style: { display: "none" } }), jsxRuntimeExports.jsxs("div", { className: `omniscribe_chat-view-combined-input-container${uploadedFiles.length > 0 ? " omniscribe_chat-view-combined-input-container--with-files" : ""}`, children: [uploadedFiles.length > 0 && jsxRuntimeExports.jsx("div", { className: "omniscribe_chat-view-combined-files-row", children: jsxRuntimeExports.jsx(FilePreview, { files: uploadedFiles, onRemove: onFileRemove }) }), jsxRuntimeExports.jsxs("div", { className: "omniscribe_chat-view-combined-input-row", children: [jsxRuntimeExports.jsx(Tooltip, { message: formatMessage({ id: "Attach file" }), side: "top", children: jsxRuntimeExports.jsx("button", { type: "button", className: "omniscribe_chat-view-combined-clip-icon", onClick: () => {
163391
+ ), generateState && showExtras && !generateState.isRecording && !generateState.enabled && !generateState.connectionLoading && jsxRuntimeExports.jsx(ExtrasButtons, { categories, disabled: reportLoading || isActivationBlocked })] }), jsxRuntimeExports.jsxs("div", { className: "omniscribe_chat-view-combined-footer-row", children: [jsxRuntimeExports.jsx("input", { ref: fileInputRef, type: "file", multiple: true, accept: "image/*,.pdf", onChange: onFileSelect, style: { display: "none" } }), jsxRuntimeExports.jsxs("div", { className: `omniscribe_chat-view-combined-input-container${uploadedFiles.length > 0 ? " omniscribe_chat-view-combined-input-container--with-files" : ""}`, children: [uploadedFiles.length > 0 && jsxRuntimeExports.jsx("div", { className: "omniscribe_chat-view-combined-files-row", children: jsxRuntimeExports.jsx(FilePreview, { files: uploadedFiles, onRemove: onFileRemove }) }), jsxRuntimeExports.jsxs("div", { className: "omniscribe_chat-view-combined-input-row", children: [jsxRuntimeExports.jsx(Tooltip, { message: formatMessage({ id: "Attach file" }), side: "top", children: jsxRuntimeExports.jsx("button", { type: "button", className: "omniscribe_chat-view-combined-clip-icon", onClick: () => {
163093
163392
  trackEvent("click", "attach_file_button");
163094
163393
  onAttachClick();
163095
163394
  }, disabled: uploadedFiles.length >= MAX_FILES, "aria-label": formatMessage({ id: "Attach file" }), children: jsxRuntimeExports.jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" }) }) }) }), jsxRuntimeExports.jsx(Textarea, { ref: textareaRef, rows: 1, "data-testid": "sofia-chat-input", value: inputValue, variant: "secondary", onChange: onInputChange, onKeyDown: (e) => {
163096
163395
  if (e.key === "Enter" && !e.shiftKey && !e.metaKey) {
163097
163396
  e.preventDefault();
163098
- const el = e.target;
163099
- const form = el?.closest("form");
163100
- form?.requestSubmit();
163397
+ onSubmit(e);
163101
163398
  }
163102
163399
  }, maxLength: inputMaxLength, className: "omniscribe_chat-view-combined-textarea no-scrollbar text-p", placeholder: formatMessage({
163103
163400
  id: "What do you need to know?"
163104
163401
  }) }), isLoading ? jsxRuntimeExports.jsx("button", { type: "button", "data-testid": "sofia-chat-stop", onClick: onStop, className: "omniscribe_chat-view-combined-send-btn omniscribe_chat-view-combined-stop-btn", title: formatMessage({ id: "Stop" }), children: jsxRuntimeExports.jsx(SquareIcon, { width: 10, height: 10 }) }) : inputValue.length > 0 ? jsxRuntimeExports.jsx("button", {
163105
163402
  // Intentionally `type="button"` (not "submit"): some host
163106
- // platforms (e.g. IQVIA Clear/CMP) treat any submit-typed
163107
- // button as a sign-out trigger. We submit the form
163108
- // explicitly via requestSubmit() instead. SOF-524.
163403
+ // platforms treat any submit-typed
163404
+ // button as a sign-out trigger / page reload. The click
163405
+ // calls onSubmit directly — no form, no submit event. SOF-524.
163109
163406
  type: "button",
163110
163407
  "data-testid": "sofia-chat-send",
163111
- onClick: (e) => {
163112
- const form = e.currentTarget.closest("form");
163113
- form?.requestSubmit();
163114
- },
163408
+ onClick: onSubmit,
163115
163409
  className: "omniscribe_chat-view-combined-send-btn",
163116
163410
  disabled: isLoading || !inputIsValid,
163117
163411
  title: formatMessage({ id: "Send" }),
@@ -163669,6 +163963,7 @@ Here are the output tags:
163669
163963
  appointmentData?.doctorId
163670
163964
  ]);
163671
163965
  const handleInputChange = (e) => {
163966
+ emitTyping("chat");
163672
163967
  input.onChange(e);
163673
163968
  setInputIsValid(InputValidator.validate(e.target.value, CHAT_INPUT_VALIDATION).isValid);
163674
163969
  };
@@ -166464,6 +166759,9 @@ Here are the output tags:
166464
166759
  prevPatientIdRef.current = patientId;
166465
166760
  setSessionId(patientId ? generateUuid() : null);
166466
166761
  }, [patientId]);
166762
+ reactExports.useEffect(() => {
166763
+ SdkEventBus.setSessionId(sessionId);
166764
+ }, [sessionId]);
166467
166765
  return jsxRuntimeExports.jsx(SessionContext.Provider, { value: { sessionId }, children });
166468
166766
  };
166469
166767
 
@@ -166635,7 +166933,7 @@ Here are the output tags:
166635
166933
  useBrowserCapabilityCheck();
166636
166934
  return null;
166637
166935
  };
166638
- const Omniscribe = ({ baseurl, wssurl, apikey, userid, patientid, templateid = "", template, toolsargs, isopen, setIsOpen, patientdata, transcriptorselectvalues, handleReport, renderReportContent, handleFill, toast, sofiatitle, language, isscreenloading, disableactions, isonlychat, disablegenerate, debug, usermedicalspecialty, setGetLastReport, insertionPreviewClassNames, onReportApply, updateTemplate, templateExtras, handleExtras }) => {
166936
+ const Omniscribe = ({ baseurl, wssurl, apikey, userid, patientid, templateid = "", template, toolsargs, isopen, setIsOpen, patientdata, transcriptorselectvalues, handleReport, renderReportContent, handleFill, toast, sofiatitle, language, isscreenloading, disableactions, isonlychat, disablegenerate, debug, usermedicalspecialty, setGetLastReport, insertionPreviewClassNames, onReportApply, updateTemplate, templateExtras, handleExtras, onEvent, eventSubscriptions }) => {
166639
166937
  const templateFields = template ?? toolsargs;
166640
166938
  const effectiveBaseUrl = reactExports.useMemo(() => resolveBaseUrlFromApiKey(apikey, baseurl), [apikey, baseurl]);
166641
166939
  const safeLanguage = isSupportedLanguage(language) ? language : void 0;
@@ -166675,6 +166973,25 @@ Here are the output tags:
166675
166973
  reactExports.useEffect(() => {
166676
166974
  logger.setDebugMode(debug || false);
166677
166975
  }, [debug]);
166976
+ const onEventRef = reactExports.useRef(onEvent);
166977
+ onEventRef.current = onEvent;
166978
+ const hasEventHandler = onEvent !== void 0;
166979
+ const subscriptionsRef = reactExports.useRef(eventSubscriptions);
166980
+ subscriptionsRef.current = eventSubscriptions;
166981
+ const subscriptions = subscriptionKey(eventSubscriptions);
166982
+ reactExports.useEffect(() => {
166983
+ SdkEventBus.setSubscription(subscriptionsRef.current);
166984
+ }, [subscriptions]);
166985
+ reactExports.useEffect(() => {
166986
+ if (!hasEventHandler)
166987
+ return;
166988
+ return SdkEventBus.setHandler((event) => onEventRef.current?.(event));
166989
+ }, [hasEventHandler]);
166990
+ reactExports.useEffect(() => {
166991
+ if (hasEventHandler && !eventSubscriptions?.length) {
166992
+ logger.warn('[Sofia SDK] onEvent was provided without eventSubscriptions, so no events will be delivered. Pass e.g. ["recording.*", "activity.*"].');
166993
+ }
166994
+ }, [hasEventHandler, eventSubscriptions]);
166678
166995
  reactExports.useEffect(() => {
166679
166996
  if (apikey && apikey.trim() !== "") {
166680
166997
  setEncryptionSeed(apikey);
@@ -166858,6 +167175,10 @@ Here are the output tags:
166858
167175
  transcriptorselectvalues: "json",
166859
167176
  toast: "json",
166860
167177
  insertionPreviewClassNames: "json",
167178
+ // Which SDK events `onEvent` receives: exact names, family wildcards
167179
+ // ('recording.*'), or '*'. Not in SENSITIVE_ATTRS — a subscription list
167180
+ // carries no PHI, and leaving it in the DOM keeps the wiring inspectable.
167181
+ eventSubscriptions: "json",
166861
167182
  // Function props
166862
167183
  handleReport: "function",
166863
167184
  // NOTE: this kebab-case alias has been here historically. r2wc writes any
@@ -166874,9 +167195,11 @@ Here are the output tags:
166874
167195
  handleFill: "function",
166875
167196
  onReportApply: "function",
166876
167197
  updateTemplate: "function",
166877
- handleExtras: "function"
167198
+ handleExtras: "function",
167199
+ onEvent: "function"
166878
167200
  };
166879
- const JSON_ATTRS = new Set(Object.entries(r2wcProps).filter(([, type]) => type === "json").map(([prop]) => prop.toLowerCase()));
167201
+ const toAttributeName = (prop) => prop.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
167202
+ const JSON_ATTRS = new Set(Object.entries(r2wcProps).filter(([, type]) => type === "json").map(([prop]) => toAttributeName(prop)));
166880
167203
  const SofiaSDK = s$1(Omniscribe, {
166881
167204
  props: r2wcProps,
166882
167205
  shadow: "open"
@@ -166889,7 +167212,8 @@ Here are the output tags:
166889
167212
  "renderReportContent",
166890
167213
  "handleFill",
166891
167214
  "onReportApply",
166892
- "updateTemplate"
167215
+ "updateTemplate",
167216
+ "onEvent"
166893
167217
  ];
166894
167218
  const R2WC_PROPS = Symbol.for("r2wc.props");
166895
167219
  const R2WC_RENDER = Symbol.for("r2wc.render");
@@ -169192,7 +169516,7 @@ Here are the output tags:
169192
169516
  default: zig
169193
169517
  }, [zigExports]);
169194
169518
 
169195
- const injectedCss = "/* Source: index.css */\n@import url('https://fonts.googleapis.com/css2?family=Inter:wght@700&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap');\n\n/* ------------------------------------------------------------------ */\n/* Theming hooks (host-overridable). */\n/* */\n/* CSS custom properties defined on the `<sofia-sdk>` element inherit */\n/* across the shadow DOM boundary. Hosts override any of these on the */\n/* element to retheme the SDK without touching internals: */\n/* */\n/* <sofia-sdk style=\"--omniscribe-primary: #1f6f5f\"></sofia-sdk> */\n/* */\n/* Internal tokens that map to a host override use */\n/* `var(--omniscribe-*, <default>)`. */\n/* */\n/* Available hooks: */\n/* --omniscribe-font-family */\n/* --omniscribe-primary main brand / primary action */\n/* --omniscribe-primary-soft light tint of primary */\n/* --omniscribe-secondary secondary action */\n/* --omniscribe-secondary-hover secondary hover state */\n/* --omniscribe-accent highlight / report color */\n/* --omniscribe-warning gap / warning chrome */\n/* --omniscribe-text primary text */\n/* --omniscribe-text-muted secondary text */\n/* --omniscribe-surface card / panel background */\n/* --omniscribe-surface-alt header / footer / hover bg */\n/* --omniscribe-border primary border */\n/* --omniscribe-border-soft in-card separators */\n/* */\n/* The insertion-preview modal has its own (more granular) variables */\n/* documented in InsertionPreviewModal.css. */\n/* ------------------------------------------------------------------ */\n\n/* Color scheme of the shadow subtree. Defaults to light so native */\n/* form controls (<select>, <input>) and assistant-ui surfaces don't */\n/* follow the host OS dark mode. A host that themes the SDK dark */\n/* (e.g. the radiology reading room) sets --omniscribe-color-scheme: */\n/* dark so native controls render light-on-dark and stay legible. */\n:host {\n color-scheme: var(--omniscribe-color-scheme, light);\n}\n\n#Omniscribe {\n font-family: var(--omniscribe-font-family, 'Lato', sans-serif);\n color-scheme: var(--omniscribe-color-scheme, light);\n /* define colors */\n --active: #0a3785;\n --background-primary: var(--omniscribe-primary-soft, #e7effd);\n --warning: var(--omniscribe-warning, #ffc107);\n --grey-50: #f9fafb;\n --grey-100: #f6f7f9;\n --grey-200: #e5e7eb;\n --grey-700: #6f7d95;\n --grey-800: #4a5364;\n --grey-900: #252a32;\n --active-black: #252a32;\n --placeholder: #a4adbc;\n --line: var(--omniscribe-border, #e5e7ec);\n --custom-black: #13161a;\n --primary: var(--omniscribe-primary, #105bdb);\n --border: var(--omniscribe-border, #e5e7ec);\n --white: var(--omniscribe-surface, #fdfdfd);\n --omni: #daf2ff;\n --omni-secondary: rgba(219, 219, 219, 0.75);\n --primary-button: var(--omniscribe-primary, #105bdb);\n --primary-text: #36a3cf;\n --primary-900: var(--omniscribe-primary, #061044);\n --blue-100: var(--omniscribe-primary-soft, #dbeafe);\n --blue-200: var(--omniscribe-primary-soft, #bfdbfe);\n --blue-500: var(--omniscribe-primary, #105bdb);\n --blue-600: var(--omniscribe-primary, #2563eb);\n --blue-700: var(--omniscribe-primary, #1d4ed8);\n --report: var(--primary-button);\n --gray: #616161;\n --black: #1b2125;\n --sky-blue: var(--omniscribe-primary-soft, #dbecff);\n --blue: var(--omniscribe-primary, #5886ba);\n --blue-600: var(--omniscribe-primary, #0b1962);\n --background: var(--omniscribe-surface-alt, #f3f3f3bb);\n --foreground: var(--omniscribe-text, oklch(0.145 0 0));\n --primary: var(--omniscribe-primary, #061044);\n --primary-foreground: var(--omniscribe-on-accent, oklch(0.985 0 0));\n --secondary: var(--omniscribe-secondary, #132caa);\n --secondary-foreground: var(--omniscribe-on-accent, #fff);\n --secondary-hover: var(--omniscribe-secondary-hover, #2847e7);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: var(--omniscribe-surface-alt, oklch(0.97 0 0));\n --accent-foreground: var(--omniscribe-text, oklch(0.205 0 0));\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --light-border: oklch(0.922 0 0);\n --input: var(--omniscribe-border, oklch(0.922 0 0));\n --ring: oklch(0.87 0 0);\n --radius: 0.625rem;\n /* TEXT */\n --text-3xs: 8px;\n --text-3xs--line-height: calc(0.5 / 0.25);\n --text-2xs: 10px;\n --text-2xs--line-height: calc(0.75 / 0.5);\n --text-xs: 12px;\n --text-xs--line-height: 14.4px;\n --text-xs--letter-spacing: 0.05px;\n --text-sm: 14px;\n --text-sm--line-height: 16.8px;\n --text-xs--letter-spacing: 0.05px;\n --text-base: 16px;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 18px;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 20px;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 22px;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 24px;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 26px;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 28px;\n --text-5xl--line-height: 1;\n --text-6xl: 30px;\n --text-6xl--line-height: 1;\n --text-7xl: 32px;\n --text-7xl--line-height: 1;\n --text-8xl: 34px;\n --text-8xl--line-height: 1;\n --text-9xl: 46px;\n --text-9xl--line-height: 1;\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n /* custom colors */\n --color-white: var(--white);\n --color-light-border: var(--light-border);\n --color-omni: var(--omni);\n --color-report: var(--report);\n --color-omni-secondary: var(--omni-secondary);\n --color-primary-text: var(--primary-text);\n --color-primary-900: var(--primary-900);\n --color-blue-500: var(--blue-500);\n --color-gray: var(--gray);\n --color-black: var(--black);\n --color-sky-blue: var(--sky-blue);\n --color-cream: var(--cream);\n --color-pink: var(--pink);\n --color-blue: var(--blue);\n --color-blue-600: var(--blue-600);\n --color-sky-blue-100: var(--sky-blue-100);\n --color-white-2: var(--white-2);\n --color-primary-700: var(--primary-700);\n --color-primary-500: var(--primary-500);\n --color-neutral-800: var(--neutral-800);\n --color-blue-2: var(--blue-2);\n --color-light-blue: var(--light-blue);\n --color-primary-100: var(--primary-100);\n --color-primary-300: var(--primary-300);\n --color-black-2: var(--black-2);\n --color-primary-button: var(--primary-button);\n --color-background: var(--background);\n --color-foreground: var(--foreground);\n --color-card: var(--card);\n --color-card-foreground: var(--card-foreground);\n --color-popover: var(--popover);\n --color-popover-foreground: var(--popover-foreground);\n --color-primary: var(--primary);\n --color-primary-foreground: var(--primary-foreground);\n --color-secondary: var(--secondary);\n --color-secondary-foreground: var(--secondary-foreground);\n --color-muted: var(--muted);\n --color-muted-foreground: var(--muted-foreground);\n --color-accent: var(--accent);\n --color-accent-foreground: var(--accent-foreground);\n --color-destructive: var(--destructive);\n --color-destructive-foreground: var(--destructive-foreground);\n --color-border: var(--border);\n --color-input: var(--input);\n --color-ring: var(--ring);\n --color-chart-1: var(--chart-1);\n --color-chart-2: var(--chart-2);\n --color-chart-3: var(--chart-3);\n --color-chart-4: var(--chart-4);\n --color-chart-5: var(--chart-5);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: #f3f4f6;\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-sidebar: var(--sidebar);\n --color-sidebar-foreground: var(--sidebar-foreground);\n --color-sidebar-primary: var(--sidebar-primary);\n --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n --color-sidebar-accent: var(--sidebar-accent);\n --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n --color-sidebar-border: var(--sidebar-border);\n --color-sidebar-ring: var(--sidebar-ring);\n /* rounded */\n --radius-sm: calc(var(--radius) - 4px);\n --radius-md: calc(var(--radius) - 2px);\n --radius-lg: 12px;\n --radius-xl: calc(var(--radius) + 4px);\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n /* spacing */\n --spacing-layout-w: var(--layout-w);\n --spacing-layout-h: var(--layout-h);\n --spacing: 0.25rem;\n /* size */\n --container-md: 28rem;\n --container-xl: 36rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n\n --tracking-tight: -0.025em;\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n\n .no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n a,\n p,\n textarea,\n button,\n span,\n h1,\n h2,\n h3,\n h4,\n h5,\n div {\n font-family: 'Lato', sans-serif;\n }\n /* Hide scrollbar for IE, Edge and Firefox */\n .no-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .shadow-inner-right {\n box-shadow: inset -9px 0 6px -1px rgb(0 0 0 / 0.02);\n }\n .shadow-inner-left {\n box-shadow: inset 9px 0 6px -1px rgb(0 0 0 / 0.02);\n }\n .annotation {\n font-size: var(--text-3xs);\n font-weight: var(--font-weight-normal);\n }\n .annotation-semi {\n font-size: var(--text-3xs);\n font-weight: var(--font-weight-semibold);\n }\n .annotation-bold {\n font-size: var(--text-3xs);\n font-weight: var(--font-weight-semibold);\n }\n .info {\n font-size: var(--text-2xs);\n font-weight: var(--font-weight-normal);\n }\n .info-semi {\n font-size: var(--text-2s);\n font-weight: var(--font-weight-semibold);\n }\n .info-bold {\n font-size: var(--text-2s);\n font-weight: var(--font-weight-semibold);\n }\n .text-p-xs {\n font-size: var(--text-xs) !important;\n font-weight: var(--font-weight-normal);\n line-height: var(--text-xs--line-height);\n letter-spacing: var(--text-xs--letter-spacing);\n }\n .text-p {\n font-size: var(--text-sm);\n font-weight: var(--font-weight-normal);\n letter-spacing: var(--text-sm--letter-spacing);\n }\n .text-p-semi {\n font-size: var(--text-sm);\n font-weight: var(--font-weight-semibold);\n }\n .text-p-bold {\n font-size: var(--text-sm);\n font-weight: var(--font-weight-semibold);\n }\n .omniscribe_shadow-xl {\n box-shadow:\n 0 20px 25px -5px rgb(0 0 0 / 0.1),\n 0 8px 10px -6px rgb(0 0 0 / 0.1);\n }\n .scrollbar-pretty {\n &::-webkit-scrollbar {\n width: 6px;\n }\n &::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: var(--omni-secondary);\n }\n &::-webkit-scrollbar-track {\n background-color: transparent;\n }\n }\n\n .omniscribe_visible {\n visibility: visible;\n display: flex;\n flex: 1;\n }\n .omniscribe_hidden {\n display: none;\n height: 0;\n }\n\n .omniscribe_animate-spin {\n animation: spin 1s linear infinite;\n }\n}\n\n\n/* Source: modules/chat/components/AudioCutsWarningDialog.css */\n/* The shared Modal overlay uses position: absolute anchored to its\n nearest positioned ancestor — which in our case is the chat footer,\n not the widget root. That puts the modal at the bottom of the widget.\n Override to position: fixed so the overlay covers the full viewport\n and the modal truly centers regardless of where in the React tree it\n was rendered. */\n.omniscribe_modal-overlay:has(.omniscribe_audio-cuts-modal) {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n.omniscribe_audio-cuts-modal {\n width: 480px;\n max-width: 90vw;\n padding: 24px !important;\n}\n\n/* Override Modal's giant default h2 size for this dialog. */\n.omniscribe_audio-cuts-modal .omniscribe_modal-title-container {\n margin-bottom: 16px;\n align-items: flex-start;\n}\n\n.omniscribe_audio-cuts-modal .omniscribe_modal-title {\n font-size: 18px;\n line-height: 1.3;\n font-weight: 700;\n letter-spacing: -0.01em;\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_audio-cuts-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* Summary card: warning icon + paragraph in a soft container. */\n.omniscribe_audio-cuts-summary {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.omniscribe_audio-cuts-summary-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n border-radius: 9999px;\n background-color: #fef3c7;\n color: #b45309;\n}\n\n.omniscribe_audio-cuts-summary-text {\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--color-gray-800, #1f2937);\n flex: 1;\n}\n\n/* Cut list: rounded gray container, clock icon per row, no bullets. */\n.omniscribe_audio-cuts-list {\n margin: 0;\n padding: 12px 14px;\n border-radius: 12px;\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 1px solid var(--color-gray-200, #e5e7eb);\n list-style: none;\n max-height: 240px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_audio-cuts-item {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--omniscribe-text-muted, #374151);\n font-variant-numeric: tabular-nums;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.omniscribe_audio-cuts-item-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--omniscribe-text-muted, #6b7280);\n}\n\n/* Action row: right-aligned, secondary as text-link, primary as blue pill. */\n.omniscribe_audio-cuts-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 16px;\n margin-top: 4px;\n}\n\n.omniscribe_audio-cuts-secondary {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px 12px;\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #374151);\n border-radius: 9999px;\n transition: background-color 0.15s ease;\n}\n\n.omniscribe_audio-cuts-secondary:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_audio-cuts-primary {\n border-radius: 9999px !important;\n gap: 8px;\n padding-block: 10px !important;\n padding-inline: 18px !important;\n height: auto !important;\n font-weight: 600;\n}\n\n\n/* Source: modules/chat/components/ChatView.css */\n.omniscribe_chat-view-container {\n flex: 1;\n border-style: none;\n display: flex;\n overflow: hidden;\n background: transparent;\n bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n margin-block: calc(var(--spacing) * 0) /* 0rem = 0px */;\n right: 20px;\n border-bottom-left-radius: 12px;\n width: 100%;\n}\n\n.omniscribe_chat-view-container-history-cont {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 0;\n z-index: 30;\n height: 100%;\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n display: block;\n border-top-left-radius: 12px;\n border-bottom-left-radius: 12px;\n overflow: hidden;\n background-color: var(--omniscribe-surface, white);\n transition:\n width 300ms cubic-bezier(0.4, 0, 0.2, 1),\n min-width 300ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.omniscribe_chat-view-container-history-cont-open {\n width: 33%;\n}\n\n/* Overlay that covers the chat when history is open */\n.omniscribe_chat-view-overlay {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n z-index: 25;\n opacity: 0;\n pointer-events: none;\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n border-radius: 12px;\n}\n\n.omniscribe_chat-view-overlay-visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n.omniscribe_chat-view-content-container {\n display: flex;\n flex: 1;\n width: 100%;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n border-bottom-right-radius: 12px;\n}\n\n.omniscribe_chat-view-stick-to-bottom {\n font-size: 14px;\n}\n.omniscribe_chat-view-stick-to-bottom-content {\n position: absolute;\n inset: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n display: grid;\n grid-template-rows: 1fr auto;\n}\n\n/* Disable scroll when SummaryLoading is shown */\n.omniscribe_chat-view-stick-to-bottom-content--no-scroll {\n overflow-y: hidden;\n}\n\n.omniscribe_chat-view-stick-to-bottom-content-class {\n padding-bottom: calc(var(--spacing) * 13);\n display: flex;\n flex-direction: column;\n padding-left: calc(var(--spacing) * 4);\n padding-right: calc(var(--spacing) * 4);\n min-width: 0;\n padding-top: 12px;\n}\n\n.omniscribe_chat-view-footer-container {\n position: sticky;\n display: flex;\n background-color: var(--omniscribe-surface, white);\n flex-direction: column;\n align-items: center;\n bottom: 0;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px;\n}\n\n/*\n * The footer is sticky inside the scroll container, so mid-scroll the\n * conversation passes behind it and was cut off mid-line — text simply ended\n * where the buttons began. This is not a spacing problem: at rest the content\n * clears the footer. What was missing is a boundary, so the last visible line\n * dissolves into the footer's surface instead of being guillotined by it.\n */\n.omniscribe_chat-view-footer-container::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 100%;\n /*\n * Tall enough to dissolve two or three lines. A short band is worse than no\n * band at all: at one line-height it ghosts a single row of text and reads as\n * a rendering fault rather than a transition.\n */\n height: 64px;\n pointer-events: none;\n /* Fallback first: browsers without color-mix keep this. */\n background: linear-gradient(\n to bottom,\n transparent,\n var(--omniscribe-surface, #fff)\n );\n /*\n * Fading to `transparent` interpolates through transparent BLACK, which\n * greys the middle of the band. Fading from the surface colour at zero alpha\n * keeps it clean and still themable.\n */\n background: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--omniscribe-surface, #fff) 0%, transparent) 0%,\n var(--omniscribe-surface, #fff) 100%\n );\n}\n\n/*\n * Floats over the conversation, so it needs to be opaque. It inherited the\n * outline button's translucent fill, which let the text underneath read\n * straight through it — the label and the message competing in the same\n * pixels. A solid fill plus a shadow is what makes it read as a control\n * sitting above the content rather than printed onto it.\n */\n/*\n * Pinned to the footer's top edge, not to the viewport.\n *\n * It used to be `position: fixed; bottom: 17%`, i.e. anchored to the browser\n * window: its distance from the composer depended on the window height, and at\n * common sizes it landed ON the action buttons — measured 3px below the\n * footer's top edge. Anchoring to the footer instead means it tracks whatever\n * the footer currently is: with or without the action row, with the\n * transcription panel expanded, with files attached.\n */\n.omniscribe_chat-view-footer-scroll-to-bottom {\n position: absolute;\n bottom: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%);\n z-index: 2;\n}\n\n/*\n * Qualified with `.omniscribe_button` on purpose. The outline variant sets the\n * same properties at equal specificity and `button.css` is concatenated after\n * this file, so a single-class selector here loses on source order alone.\n */\n.omniscribe_button.omniscribe_chat-view-footer-scroll-to-bottom {\n background-color: var(--omniscribe-surface, #fff);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n box-shadow: 0 2px 10px rgba(16, 23, 37, 0.16);\n}\n\n.omniscribe_button.omniscribe_chat-view-footer-scroll-to-bottom:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n}\n\n.omniscribe_chat-view-down-btn {\n width: calc(0.25rem /* 4px */ * 4);\n height: calc(0.25rem /* 4px */ * 4);\n}\n\n/* Combined Footer - Frame 532 Design */\n.omniscribe_chat-view-combined-footer {\n width: 100%;\n padding-bottom: 12px;\n background-color: var(--omniscribe-surface, white);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n position: relative;\n}\n\n/* Action row — no background of its own; only the pills carry a border */\n.omniscribe_chat-footer-actions-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n padding-inline: calc(var(--spacing) * 4);\n padding-bottom: 8px;\n flex-shrink: 0;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n transition: padding-top 0.5s ease;\n}\n\n/* With the transcription expanded, keeps the buttons off the panel's bottom\n line (the expanded wrapper's border-bottom). */\n.omniscribe_transcription-panel-wrapper--expanded\n + .omniscribe_chat-footer-actions-row {\n padding-top: 10px;\n}\n\n.omniscribe_chat-view-combined-footer-row {\n display: flex;\n flex-direction: row;\n align-items: end;\n box-sizing: border-box;\n width: 100%;\n gap: 8px;\n flex-shrink: 0;\n background-color: var(--omniscribe-surface, white);\n overflow: hidden;\n padding-inline: calc(var(--spacing) * 4);\n padding-top: 7px;\n}\n\n/* Frame 34 - Input container */\n.omniscribe_chat-view-combined-input-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n padding: 8px;\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 20px;\n background-color: var(--omniscribe-surface, white);\n gap: 0;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n box-sizing: border-box;\n box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25);\n margin-bottom: 7px;\n margin-right: 1px;\n}\n\n/* When files are attached, change border-radius to rounded rectangle */\n/*\n * Attaching a file must not resize the composer. There is deliberately no\n * max-width here: the base rule is `flex: 1`, and capping it made the composer\n * jump from the full footer width down to a fixed size the moment a file was\n * added — a leftover from a narrower Figma frame, and the only place that\n * number appeared. Several files scroll horizontally inside\n * `.omniscribe_chat-view-combined-files-row`, which owns `overflow-x: auto`.\n */\n.omniscribe_chat-view-combined-input-container--with-files {\n gap: 12px;\n align-items: flex-start;\n min-width: 0;\n overflow: hidden;\n}\n\n/* Files row inside input container - horizontal scroll, no wrapping */\n.omniscribe_chat-view-combined-files-row {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n gap: 8px;\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n padding-bottom: 4px;\n scrollbar-width: thin;\n min-width: 0;\n}\n\n.omniscribe_chat-view-combined-files-row::-webkit-scrollbar {\n height: 4px;\n}\n\n.omniscribe_chat-view-combined-files-row::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.omniscribe_chat-view-combined-files-row::-webkit-scrollbar-thumb {\n background-color: var(--color-gray-300, #d1d5db);\n border-radius: 4px;\n}\n\n/* Input row with clip icon, textarea, and action button */\n.omniscribe_chat-view-combined-input-row {\n display: flex;\n align-items: center;\n width: 100%;\n gap: 4px;\n}\n\n/* Clip icon */\n.omniscribe_chat-view-combined-clip-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n height: 24px;\n border-radius: 9999px;\n background-color: var(--omniscribe-surface, white);\n cursor: pointer;\n transition: background-color 0.2s ease;\n border: solid 1px var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_chat-view-combined-clip-icon:hover {\n background-color: var(--omniscribe-surface-alt, #e5e7eb);\n color: var(--color-gray-600);\n}\n\n/* Action button inside input */\n.omniscribe_chat-view-combined-action-btn {\n flex-shrink: 0;\n}\n\n.omniscribe_chat-view-combined-textarea {\n flex: 1;\n resize: none;\n border: none !important;\n outline: none !important;\n box-shadow: none !important;\n min-height: 20px;\n max-height: 56px;\n font-weight: 500 !important;\n padding: 0 !important;\n background: transparent;\n color: var(--omniscribe-text-muted, #4a5364);\n height: 20px;\n}\n\n.omniscribe_chat-view-combined-textarea::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af);\n}\n\n.omniscribe_chat-view-combined-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.omniscribe_chat-view-combined-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n border-radius: 9999px;\n background-color: var(--secondary, #132caa);\n color: white;\n cursor: pointer;\n transition: background-color 0.2s ease;\n flex-shrink: 0;\n}\n\n.omniscribe_chat-view-combined-send-btn:hover:not(:disabled) {\n background-color: var(--secondary-hover, #2847e7);\n}\n\n.omniscribe_chat-view-combined-send-btn:disabled {\n background-color: var(--omniscribe-surface-alt, #dfe2e7);\n cursor: not-allowed;\n}\n\n/* Stop button - red variant of send button */\n.omniscribe_chat-view-combined-stop-btn {\n background-color: var(--secondary, #132caa);\n}\n\n.omniscribe_chat-view-combined-stop-btn:hover {\n background-color: var(--secondary, #132caa);\n}\n\n/* Drag-and-drop overlay */\n.omniscribe_chat-view-drag-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(37, 99, 235, 0.05);\n border: 2px dashed var(--blue-600, #2563eb);\n border-radius: var(--radius);\n z-index: 10;\n pointer-events: none;\n}\n\n.omniscribe_chat-view-drag-overlay-text {\n color: var(--blue-600, #2563eb);\n font-size: var(--text-sm);\n font-weight: var(--font-weight-medium);\n}\n\n\n/* Source: modules/chat/components/FileLimitBanner.css */\n/* File Limit Banner */\n.omniscribe_file-limit-banner {\n position: fixed;\n top: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n background-color: #dc2626;\n color: white;\n border-radius: 12px;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n animation:\n slideInFromTop 0.3s ease-out,\n slideOutToTop 0.3s ease-in 4.7s;\n animation-fill-mode: forwards;\n width: auto;\n max-width: 90vw;\n padding: 0;\n margin: 0 auto;\n}\n\n.omniscribe_file-limit-banner-content {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n gap: 12px;\n white-space: nowrap;\n}\n\n.omniscribe_file-limit-banner-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: white;\n}\n\n.omniscribe_file-limit-banner-message {\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n text-align: center;\n}\n\n.omniscribe_file-limit-banner-close {\n background: none;\n border: none;\n color: white;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.omniscribe_file-limit-banner-close:hover {\n background-color: rgba(255, 255, 255, 0.2);\n}\n\n.omniscribe_file-limit-banner-close svg {\n width: 16px;\n height: 16px;\n}\n\n/* Animations */\n@keyframes slideInFromTop {\n 0% {\n opacity: 0;\n transform: translateX(-50%) translateY(-20px);\n }\n 100% {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n@keyframes slideOutToTop {\n 0% {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateX(-50%) translateY(-20px);\n }\n}\n\n\n/* Source: modules/chat/components/PredefinedQuestions.css */\n.omniscribe_predefined-questions-container {\n margin-top: calc(var(--spacing) * 2) /* 1rem = 16px */;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n display: flex;\n flex-direction: column;\n}\n.omniscribe_predefined-questions-span {\n color: var(--omniscribe-text, #13161a);\n line-height: 21.6px;\n font-size: 18px !important;\n font-weight: 500 !important;\n}\n\n.omniscribe_predefined-title {\n margin-bottom: 8px;\n word-break: break-word;\n}\n\n.omniscribe_predefined-questions-msg-container {\n display: flex;\n flex-direction: column;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n word-break: break-word;\n}\n\n.omniscribe_predefined-questions-content {\n background-color: var(--background-primary, #e7effd) !important;\n color: var(--primary, #105bdb) !important;\n border-radius: 999px !important;\n text-align: left;\n padding-top: 4px;\n padding-right: 16px;\n padding-bottom: 4px;\n padding-left: 16px;\n width: fit-content;\n height: fit-content;\n}\n\n\n/* Source: modules/chat/components/SummaryLoading.css */\n/* Auto-summary loading styles */\n.omniscribe_auto-summary-container {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding-top: calc(var(--spacing) * 13);\n pointer-events: none;\n width: 100%;\n height: 100%;\n}\n\n.omniscribe_auto-summary-text {\n font-size: 18px;\n text-align: center;\n margin-bottom: 20px;\n font-weight: 500;\n color: var(--omniscribe-text, #2b303a);\n}\n\n.omniscribe_auto-summary-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Loading dots animation */\n.omniscribe_loading-dots {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_loading-dots::after {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-dot-flashing 1.4s infinite linear;\n}\n\n.omniscribe_loading-dots::before {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-dot-flashing 1.4s infinite linear;\n animation-delay: -0.16s;\n margin-right: 4px;\n}\n\n.omniscribe_loading-dots span {\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-dot-flashing 1.4s infinite linear;\n animation-delay: -0.32s;\n margin-right: 4px;\n}\n\n@keyframes omniscribe-dot-flashing {\n 0%,\n 80%,\n 100% {\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n}\n\n\n/* Source: modules/chat/components/history/ChatHistory.css */\n.omniscribe_thread-list-container {\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n padding-inline: calc(var(--spacing) * 1);\n margin: 8px;\n}\n\n.omniscribe_thread-list-content {\n padding-bottom: calc(var(--spacing) * 16);\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.omniscribe_thread-list-item {\n width: 100%;\n padding-inline: 0;\n}\n\n.omniscribe_thread-list-btn {\n text-align: left;\n align-items: center !important;\n justify-content: flex-start !important;\n width: calc(100% - var(--spacing) * 4);\n border-radius: 4px !important;\n margin-bottom: 4px;\n font-weight: var(--font-weight-normal);\n padding-inline: calc(var(--spacing) * 1) !important;\n}\n\n.omniscribe_thread-list-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--omniscribe-text, #252a32);\n font-size: var(--Font-Size-font-size-100, 12px);\n font-style: normal;\n font-weight: var(--Font-Weight-Regular, 400);\n line-height: var(--Font-Line-Height-line-height-100, 14.4px);\n /* 120% */\n letter-spacing: var(--Font-Letter-Spacing-letter-spacing-100, 0.05px);\n}\n\n.omniscribe_thread-history-loading {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: calc(var(--spacing) * 2);\n align-items: flex-start;\n justify-content: flex-start;\n overflow-y: scroll;\n overflow-x: hidden;\n padding-inline: calc(var(--spacing) * 1);\n}\n\n.omniscribe_thread-history-loading-skeleton {\n width: 100%;\n height: calc(var(--spacing) * 10);\n}\n\n.omniscribe_thread-history-container {\n display: flex;\n flex-direction: column;\n border-right: 1px solid var(--omniscribe-border, #e5e7ec);\n align-items: flex-start;\n justify-content: flex-start;\n /* gap: calc(var(--spacing) * 6); */\n height: 100%;\n flex-shrink: 0;\n}\n\n.omniscribe_thread-history-header {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 16px;\n background: var(--omniscribe-surface, white);\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_thread-history-header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n border: none;\n background: none;\n cursor: pointer;\n padding: 0;\n}\n\n.omniscribe_thread-history-header-title {\n margin: 0;\n color: var(--omniscribe-text, #252a32);\n font-size: 14px;\n font-weight: 500;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n}\n\n.omniscribe_thread-history-new-chat-btn {\n margin: 12px 0 0 12px;\n border-radius: 8px;\n gap: 4px;\n padding-block: 4px;\n}\n\n.omniscribe_thread-history-new-chat-btn:hover:not(:disabled) {\n background-color: #0f2080;\n}\n\n.omniscribe_thread-history-new-chat-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_thread-history-chat-started-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-inline: calc(var(--spacing) * 2);\n padding-block: calc(var(--spacing) * 1);\n background-color: color-mix(in oklab, var(--blue) 40%, transparent);\n width: stretch;\n width: -moz-available;\n width: -webkit-fill-available;\n width: fill-available;\n box-shadow:\n inset 0 2px 4px rgb(0 0 0 / 0.05),\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n\n.omniscribe_thread-history-no-chat-started-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-inline: calc(var(--spacing) * 2);\n width: 100%;\n}\n\n.omniscribe_thread-history-chat-started-btn {\n border: none;\n background: transparent;\n padding: 0px;\n display: flex;\n flex-direction: row;\n gap: calc(var(--spacing) * 2);\n align-items: center;\n cursor: pointer;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n}\n\n.omniscribe_thread-history-chat-started-btn-text {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-tight);\n}\n\n.omniscribe_thread-tooltip {\n padding: calc(0.25rem /* 4px */ * 4);\n}\n\n/* Processing thread indicator */\n.omniscribe_thread-list-btn.omniscribe_thread-processing {\n position: relative;\n}\n\n.omniscribe_thread-list-btn.omniscribe_thread-processing::before {\n content: '';\n position: absolute;\n left: 4px;\n top: 50%;\n transform: translateY(-50%);\n width: 6px;\n height: 6px;\n background: var(--secondary, #132caa);\n border-radius: 50%;\n animation: omniscribe_pulse 1.5s infinite;\n}\n\n.omniscribe_thread-list-btn.omniscribe_thread-processing\n .omniscribe_thread-list-text {\n padding-left: 12px;\n}\n\n@keyframes omniscribe_pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n}\n\n\n/* Source: modules/chat/components/input/AudioBars.css */\n/* Granola-style animated audio bars: 3 rounded bars (short / tall / medium).\n Accent-colored and \"dancing\" while recording, muted and static otherwise. */\n.omniscribe_audio-bars {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n}\n\n.omniscribe_audio-bar {\n width: 3.5px;\n background-color: var(--omniscribe-primary, #1a73e8);\n border-radius: 9999px;\n transition:\n height 0.15s ease,\n background-color 0.2s ease;\n}\n\n/* Muted gray when not recording */\n.omniscribe_audio-bar--inactive {\n background-color: var(--grey-700, #9ca3af);\n}\n\n/* Live mode — heights are driven per-frame from the mic level, so use a\n short linear transition that dampens the movement without lagging it */\n.omniscribe_audio-bar--live {\n transition:\n height 0.08s linear,\n background-color 0.2s ease;\n}\n\n/* Static heights: short / tall / medium (Granola pattern) */\n.omniscribe_audio-bar--1 {\n height: 50%;\n}\n\n.omniscribe_audio-bar--2 {\n height: 100%;\n}\n\n.omniscribe_audio-bar--3 {\n height: 65%;\n}\n\n/* Dancing equalizer animation while recording */\n.omniscribe_audio-bar--animating.omniscribe_audio-bar--1 {\n animation: omniscribe-audio-dance-1 0.9s ease-in-out infinite;\n}\n\n.omniscribe_audio-bar--animating.omniscribe_audio-bar--2 {\n animation: omniscribe-audio-dance-2 1.1s ease-in-out infinite;\n}\n\n.omniscribe_audio-bar--animating.omniscribe_audio-bar--3 {\n animation: omniscribe-audio-dance-3 1s ease-in-out infinite;\n}\n\n/* The dance is decorative — it runs while connecting, when there is no stream\n to visualise yet. The --live bars are deliberately left out: those track\n real microphone input, so they are information, not decoration. */\n@media (prefers-reduced-motion: reduce) {\n .omniscribe_audio-bar--animating.omniscribe_audio-bar--1,\n .omniscribe_audio-bar--animating.omniscribe_audio-bar--2,\n .omniscribe_audio-bar--animating.omniscribe_audio-bar--3 {\n animation: none;\n }\n}\n\n@keyframes omniscribe-audio-dance-1 {\n 0%,\n 100% {\n height: 50%;\n }\n 25% {\n height: 85%;\n }\n 50% {\n height: 35%;\n }\n 75% {\n height: 70%;\n }\n}\n\n@keyframes omniscribe-audio-dance-2 {\n 0%,\n 100% {\n height: 100%;\n }\n 30% {\n height: 55%;\n }\n 60% {\n height: 90%;\n }\n 80% {\n height: 65%;\n }\n}\n\n@keyframes omniscribe-audio-dance-3 {\n 0%,\n 100% {\n height: 65%;\n }\n 20% {\n height: 95%;\n }\n 55% {\n height: 45%;\n }\n 85% {\n height: 80%;\n }\n}\n\n\n/* Source: modules/chat/components/input/ExtrasButtons.css */\n/*\n * Category names come from the host's templateExtras schema, so their length is\n * not ours to control. Left unbounded, one long name grew its pill until it\n * pushed the overflow trigger — and with it every remaining category — off the\n * right edge of the widget, with no way to reach them.\n *\n * The row cannot simply clip: the overflow menu is absolutely positioned and\n * opens upwards, so `overflow: hidden` on the row would cut the menu instead.\n * The pills give up the space themselves: they are the only shrinkable items in\n * the row, capped, and their label truncates.\n */\n/* Qualified: `.omniscribe_action-btn` is shared with the generate button and\n lives in another file, so an unqualified rule here would depend on which\n stylesheet the bundler concatenates last. */\n.omniscribe_action-btn.omniscribe_extras-btn {\n min-width: 0;\n max-width: 180px;\n flex-shrink: 1;\n}\n\n.omniscribe_extras-btn-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Overflow container for extras categories beyond the first two. */\n.omniscribe_extras-overflow {\n position: relative;\n display: inline-flex;\n /* Never squeezed out: it is the only route to the remaining categories. */\n flex-shrink: 0;\n}\n\n/* Three-dots trigger — mirrors the neutral pill styling of the action row. */\n.omniscribe_extras-overflow-trigger {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n padding: 0;\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 9999px;\n background-color: var(--omniscribe-surface, #ffffff);\n color: var(--grey-700, #6f7d95);\n cursor: pointer;\n transition:\n background-color 0.2s ease,\n color 0.2s ease,\n border-color 0.2s ease;\n}\n\n.omniscribe_extras-overflow-trigger:hover,\n.omniscribe_extras-overflow-trigger--open {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--omniscribe-text, #13161a);\n}\n\n/* Dropdown floats UP above the trigger (footer sits at the bottom), with a\n gap so it doesn't sit flush against the action buttons row. */\n.omniscribe_extras-overflow-menu {\n position: absolute;\n bottom: calc(100% + 12px);\n right: 0;\n z-index: 20;\n min-width: 160px;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n background-color: var(--omniscribe-surface, #ffffff);\n border: 1px solid var(--border, #e5e7eb);\n border-radius: var(--radius-lg, 12px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\n}\n\n.omniscribe_extras-overflow-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 10px;\n border: none;\n border-radius: 8px;\n background-color: transparent;\n color: var(--omniscribe-text, #13161a);\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.omniscribe_extras-overflow-item:hover:not(:disabled) {\n background-color: var(--omniscribe-primary-soft, #e8f0fe);\n color: var(--omniscribe-primary, #1a73e8);\n}\n\n.omniscribe_extras-overflow-item:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n\n/* Source: modules/chat/components/input/FilePreview.css */\n/* File Preview Container - Figma Frame 532 */\n.omniscribe_file-preview-container {\n display: contents;\n}\n\n.omniscribe_file-preview-container-history-open {\n width: 372px;\n}\n\n/* Custom scrollbar */\n.omniscribe_file-preview-container::-webkit-scrollbar {\n height: 6px;\n}\n\n.omniscribe_file-preview-container::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.omniscribe_file-preview-container::-webkit-scrollbar-thumb {\n background-color: #d1d5db;\n border-radius: 3px;\n}\n\n.omniscribe_file-preview-container::-webkit-scrollbar-thumb:hover {\n background-color: #9ca3af;\n}\n\n/* Individual image thumbnail */\n.omniscribe_file-preview-image {\n position: relative;\n width: 80px;\n height: 80px;\n border-radius: 12px;\n background-color: var(--omniscribe-surface-alt, #e8edf5);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.omniscribe_file-preview-image-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 12px;\n}\n\n.omniscribe_file-preview-image-placeholder {\n width: 100%;\n height: 100%;\n background-color: var(--omniscribe-surface-alt, #e8edf5);\n border-radius: 12px;\n}\n\n/* Document card */\n/* Document card - matches Figma design */\n.omniscribe_file-preview-document {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background-color: var(--omniscribe-surface, white);\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 16px;\n position: relative;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n flex-shrink: 0;\n max-height: 38px;\n}\n\n.omniscribe_file-preview-document-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n background-color: #dc3545;\n border-radius: var(--radius-lg, 12px);\n flex-shrink: 0;\n}\n\n.omniscribe_file-preview-document-icon svg {\n color: white;\n}\n\n.omniscribe_file-preview-document-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n padding-right: 16px;\n}\n\n.omniscribe_file-preview-document-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--grey-900);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n\n.omniscribe_file-preview-document-type {\n font-size: 12px;\n color: var(--grey-700);\n font-weight: 500;\n}\n\n/* Individual image thumbnail - larger size matching Figma */\n.omniscribe_file-preview-image {\n position: relative;\n width: 64px;\n height: 64px;\n border-radius: 16px;\n background-color: #1a1a2e;\n flex-shrink: 0;\n /* overflow: visible to allow X button to show outside bounds */\n}\n\n.omniscribe_file-preview-image-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 16px;\n /* Apply overflow hidden to the image itself */\n overflow: hidden;\n}\n\n.omniscribe_file-preview-image-placeholder {\n width: 100%;\n height: 100%;\n background-color: var(--omniscribe-surface-alt, #e8edf5);\n border-radius: 16px;\n}\n\n/* Remove button - blue circle with X - positioned inside bounds */\n.omniscribe_file-preview-remove-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n border-radius: 50%;\n background-color: var(--blue-600, #2563eb);\n color: white;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s ease;\n z-index: 2;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.omniscribe_file-preview-remove-btn:hover {\n background-color: var(--blue-700, #1d4ed8);\n}\n\n.omniscribe_file-preview-remove-btn--image {\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n}\n\n\n/* Source: modules/chat/components/input/MicrophoneButton.css */\n/* Microphone Button Styles */\n.microphone-button {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 24px !important;\n height: 24px !important;\n min-width: 24px !important;\n min-height: 24px !important;\n padding: 0 !important;\n border-radius: 9999px !important;\n border: none !important;\n background-color: var(--omniscribe-surface-alt, #f3f4f6) !important;\n box-shadow: none !important;\n transition: background-color 0.2s ease !important;\n flex-shrink: 0;\n}\n\n.microphone-button:hover:not(:disabled) {\n background-color: var(--omniscribe-surface-alt, #e5e7eb) !important;\n}\n\n.microphone-button--recording {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n background-color: #fee2e2 !important;\n}\n\n/* Pulse animation for recording state */\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n\n/* Source: modules/chat/components/input/TranscribeDropdown.css */\n/* Ensure tooltip trigger properly wraps the button in flex context */\n.omniscribe_thread-combined-footer-row > .tooltip-trigger {\n display: flex;\n flex-shrink: 0;\n}\n\n/* Granola-style transcribe pill: [bars chevron] ··· [stop square | text]\n A single flat capsule — no nested containers, no shadow, and its chrome\n stays constant across idle/recording/paused (only the bars change). */\n.omniscribe_transcribe-dropdown {\n display: flex;\n align-items: center;\n gap: 18px;\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 9999px;\n background-color: var(--omniscribe-surface, white);\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n font-size: var(--font-size-100, 13px);\n font-weight: 500;\n color: var(--omniscribe-text, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n flex-shrink: 0;\n padding: 10px 18px;\n}\n\n.omniscribe_transcribe-dropdown:hover:not(\n .omniscribe_transcribe-dropdown--disabled\n ) {\n background-color: var(--omniscribe-surface-alt, #fafafa);\n border-color: var(--color-gray-300, #d1d5db);\n}\n\n/* Left group: bars + chevron sit flat inside the capsule (no inner pill) */\n.omniscribe_transcribe-controls-group {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Bars & chevron buttons — chromeless icon buttons */\n.omniscribe_transcribe-bars-button,\n.omniscribe_transcribe-chevron-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n.omniscribe_transcribe-bars-button:disabled,\n.omniscribe_transcribe-chevron-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Right: plain accent text control (Granola's \"Resume\") — no chrome */\n.omniscribe_transcribe-text-button {\n display: flex;\n align-items: center;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n font-size: inherit;\n font-weight: 500;\n color: var(--omniscribe-primary, #1a73e8);\n}\n\n.omniscribe_transcribe-text-button:hover:not(:disabled) {\n color: var(--blue-700, #1558d6);\n}\n\n.omniscribe_transcribe-text-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Right: play triangle shown when idle/paused — no chrome, accent color */\n.omniscribe_transcribe-play-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--omniscribe-primary, #1a73e8);\n transition: color 0.15s ease;\n}\n\n.omniscribe_transcribe-play-button:hover:not(:disabled) {\n color: var(--blue-700, #1558d6);\n}\n\n.omniscribe_transcribe-play-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Right: filled rounded stop square shown while recording — no chrome */\n.omniscribe_transcribe-stop-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--omniscribe-text-muted, #5f6368);\n transition: color 0.15s ease;\n}\n\n.omniscribe_transcribe-stop-button:hover:not(:disabled) {\n color: var(--omniscribe-text, #1f2937);\n}\n\n.omniscribe_transcribe-stop-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.omniscribe_transcribe-dropdown--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_transcribe-dropdown-label {\n text-align: left;\n white-space: nowrap;\n}\n\n/* Chevron points up (panel closed) and rotates to down when expanded */\n.omniscribe_transcribe-dropdown-chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #6b7280);\n transition:\n transform 0.2s ease,\n color 0.2s ease;\n}\n\n.omniscribe_transcribe-dropdown-chevron--expanded {\n transform: rotate(180deg);\n}\n\n.omniscribe_transcribe-dropdown:hover .omniscribe_transcribe-dropdown-chevron {\n color: var(--omniscribe-text, #374151);\n}\n\n/* Connection status pill - inline banner replacing toasts.\n Three states: reconnecting (neutral), disconnected (red), restored (dark). */\n.omniscribe_connection-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 9999px;\n white-space: nowrap;\n flex-shrink: 0;\n font-weight: 500;\n margin-inline: 8px;\n}\n\n.omniscribe_connection-pill-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.omniscribe_connection-pill-icon--spin {\n animation: omniscribe-connection-spin 1s linear infinite;\n}\n\n@keyframes omniscribe-connection-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.omniscribe_connection-pill--reconnecting {\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 1px solid var(--color-gray-200, #e5e7eb);\n color: var(--omniscribe-text-muted, #374151);\n}\n\n.omniscribe_connection-pill--disconnected {\n background-color: #fdecec;\n border: 1px solid #f8c7c7;\n color: #b42318;\n padding-right: 4px;\n}\n\n.omniscribe_connection-pill--restored {\n background-color: #1f2937;\n border: 1px solid #1f2937;\n color: #ffffff;\n}\n\n.omniscribe_connection-pill-retry {\n border-radius: 9999px !important;\n gap: 4px;\n padding-block: 3px !important;\n padding-inline: 8px !important;\n height: auto !important;\n background-color: #d92d20 !important;\n color: #ffffff !important;\n border: none !important;\n margin-left: 2px;\n}\n\n.omniscribe_connection-pill-retry:hover:not(:disabled) {\n background-color: #b42318 !important;\n}\n\n/* Action buttons - unified style for Generate, Petitions, Extras */\n.omniscribe_action-btn {\n /* Fixed-label actions keep their size; only the extras pills, whose labels\n are host-defined and can be arbitrarily long, give up space. */\n flex-shrink: 0;\n border-radius: 9999px !important;\n gap: 6px;\n padding-block: 6px !important;\n padding-inline: 12px !important;\n /* Match height of controls-group (border + padding + content) */\n min-height: 32px !important;\n font-size: var(--font-size-100, 13px) !important;\n font-weight: 500 !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08) !important;\n transition: all 0.15s ease !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n\n.omniscribe_action-btn:hover:not(:disabled) {\n background-color: var(--blue-700, #1558d6) !important;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12) !important;\n}\n\n.omniscribe_action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Collapsed state - vertical pill with light theme */\n.omniscribe_transcribe-collapsed {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 8px;\n background-color: var(--omniscribe-surface, white);\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 9999px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n/* Passive activity indicator — live bars while recording */\n.omniscribe_transcribe-collapsed-bars {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n}\n\n.omniscribe_transcribe-collapsed-play {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 50%;\n background-color: transparent;\n color: var(--omniscribe-primary, #1a73e8);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.omniscribe_transcribe-collapsed-play:hover:not(:disabled) {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n transform: scale(1.05);\n}\n\n.omniscribe_transcribe-collapsed-play:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_transcribe-collapsed-play--recording {\n box-shadow: 0 0 8px rgba(26, 115, 232, 0.2);\n}\n\n.omniscribe_transcribe-collapsed-expand {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 50%;\n background-color: transparent;\n color: var(--omniscribe-text-muted, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.omniscribe_transcribe-collapsed-expand:hover:not(:disabled) {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--omniscribe-text, #374151);\n}\n\n\n/* Source: modules/chat/components/input/TranscriptionPanel.css */\n/* Expand/collapse wrapper — absolutely positioned upwards so it does NOT\n push the actions row or the form. Being out of the flow, animating the\n height causes no footer reflow: the panel unfolds upwards (same\n animation as the previous version). */\n.omniscribe_transcription-panel-wrapper {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n height: 0;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition:\n height 0.5s ease,\n opacity 0.5s ease;\n}\n\n.omniscribe_transcription-panel-wrapper--expanded {\n height: calc(var(--content-height) * 0.55);\n opacity: 1;\n pointer-events: auto;\n border-bottom: 1px solid var(--border, #e5e7eb);\n}\n\n/* TranscriptionPanel - Frame 655 from Figma */\n.omniscribe_transcription-panel {\n width: 100%;\n height: 100%;\n background-color: var(--omniscribe-surface, #ffffff);\n border: 1px solid var(--border, #e5e7eb);\n border-top-left-radius: var(--radius-lg, 12px);\n border-top-right-radius: var(--radius-lg, 12px);\n overflow: hidden;\n margin-bottom: 8px;\n display: flex;\n flex-direction: column;\n}\n\n/* Header with action buttons */\n.omniscribe_transcription-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n border-bottom: 1px solid var(--border);\n}\n\n.omniscribe_transcription-panel-header-section {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_transcription-panel-actions {\n display: flex;\n align-items: center;\n gap: 1px;\n margin-right: 2px;\n}\n\n.omniscribe_transcription-panel-action-btn {\n width: 100%;\n height: auto;\n transition:\n background-color 0.2s ease,\n color 0.2s ease;\n}\n\n.omniscribe_transcription-panel-close {\n border-radius: 9999px;\n border: none;\n padding-inline: 5px !important;\n padding-block: 2.5px !important;\n margin-block: 5.5px;\n transition:\n background-color 0.2s ease,\n color 0.2s ease;\n}\n\n.omniscribe_transcription-panel-close:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--color-gray-600, #4b5563);\n}\n\n/* Body container */\n.omniscribe_transcription-panel-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 150px;\n overflow: hidden;\n}\n\n/* Idle state - white background with blue text */\n.omniscribe_transcription-panel-idle {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n gap: 16px;\n padding: 24px;\n}\n\n.omniscribe_transcription-panel-idle-text {\n font-size: 16px;\n font-weight: 500;\n color: var(--color-primary, #2563eb);\n text-align: center;\n margin: 0;\n}\n\n.omniscribe_transcription-panel-play-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border: none;\n border-radius: 9999px;\n background-color: var(--omniscribe-primary-soft, #e7effd);\n cursor: pointer;\n transition:\n transform 0.2s ease,\n box-shadow 0.2s ease;\n}\n\n.omniscribe_transcription-panel-play-btn:hover {\n transform: scale(1.05);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.omniscribe_transcription-panel-play-btn svg {\n color: var(--omniscribe-primary, #2563eb);\n}\n\n/* Content state - transcription display */\n.omniscribe_transcription-panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n max-height: 220px;\n}\n\n.omniscribe_transcription-panel-message {\n margin-bottom: 8px;\n text-align: left;\n width: fit-content;\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n padding: 4px;\n border-radius: 8px;\n color: var(--omniscribe-text, #13161a);\n line-height: 1.7 !important;\n}\n\n/* Audio-loss divider rendered between segments where a recording cut\n occurred. Visually separates captured speech from the gap so the doctor\n can spot lost portions while reviewing the transcription. */\n.omniscribe_transcription-panel-cut {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-block: 10px;\n padding-inline: 4px;\n}\n\n.omniscribe_transcription-panel-cut-line {\n flex: 1;\n height: 1px;\n background-color: #fed7aa;\n}\n\n.omniscribe_transcription-panel-cut-label {\n flex-shrink: 0;\n padding: 2px 10px;\n border-radius: 9999px;\n background-color: #fff7ed;\n border: 1px solid #fed7aa;\n color: #c2410c;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n}\n\n/* Scrollbar styles */\n.omniscribe_transcription-panel-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.omniscribe_transcription-panel-content::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: var(--color-gray-300, #d1d5db);\n}\n\n.omniscribe_transcription-panel-content::-webkit-scrollbar-track {\n background-color: transparent;\n}\n\n/* Firefox */\n.omniscribe_transcription-panel-content {\n scrollbar-width: thin;\n scrollbar-color: var(--color-gray-300, #d1d5db) transparent;\n}\n\n/* Processing skeleton indicator */\n.omniscribe_transcription-panel-processing {\n padding-top: 5px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Processing skeleton indicator */\n.omniscribe_transcription-processing {\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-processing-lines {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-skeleton-line {\n height: 14px;\n width: 70%;\n}\n\n.omniscribe_transcription-skeleton-line--short {\n width: 40%;\n}\n\n.omniscribe_transcription-processing-text {\n font-size: var(--text-xs);\n color: var(--omni-secondary, #6b7280);\n}\n\n\n/* Source: modules/chat/components/markdown/LinkGroupMenu.css */\n.omniscribe_link-menu-container {\n width: 18rem;\n border-radius: 0.5rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n border: 1px solid var(--grey-200);\n background-color: var(--omniscribe-surface, #ffffff);\n}\n\n.omniscribe_link-menu-navigation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n border-bottom: 1px solid var(--color-gray-100);\n background-color: var(--grey-50);\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n\n.omniscribe_nav-button {\n height: 1.5rem;\n width: 1.5rem;\n padding: 0.125rem;\n background-color: transparent;\n border: none;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n color: var(--omniscribe-text-muted, #6b7280);\n transition-property:\n color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.omniscribe_nav-button:hover {\n background-color: var(--color-gray-100);\n color: var(--omniscribe-text, #374151);\n}\n\n.omniscribe_nav-button:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n box-shadow: 0 0 0 2px #3b82f6;\n}\n\n.omniscribe_nav-button:active {\n background-color: var(--grey-200);\n}\n\n.omniscribe_nav-icon {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n.omniscribe_page-indicator {\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #4b5563);\n}\n\n.omniscribe_link-menu-content {\n padding: 0.375rem;\n}\n\n\n/* Source: modules/chat/components/markdown/LinkGroupMenuCard.css */\n.omniscribe_card-link {\n display: block;\n border-radius: 0.5rem;\n overflow: hidden;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n background-color: var(--omniscribe-surface, #ffffff);\n border: 1px solid var(--grey-200);\n text-decoration: none;\n}\n\n.omniscribe_card {\n border: 0;\n box-shadow: none;\n border-radius: 0.5rem;\n margin: 0;\n padding: 0;\n}\n\n.omniscribe_card:hover {\n background-color: var(--grey-50);\n}\n\n.omniscribe_card-header {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 0.5rem;\n border-bottom: 1px solid var(--color-gray-100);\n background-color: rgba(249, 250, 251, 0.5);\n}\n\n.omniscribe_favicon {\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.omniscribe_fallback-icon {\n width: 1rem;\n height: 1rem;\n border-radius: 0.125rem;\n background-color: #d1d5db;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.omniscribe_fallback-text {\n font-size: 8px;\n font-weight: 700;\n color: var(--grey-600);\n text-transform: uppercase;\n}\n\n.omniscribe_card-title {\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n color: var(--grey-800);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-grow: 1;\n min-width: 0;\n margin: 0;\n}\n\n.omniscribe_card-content {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.omniscribe_card-content > * + * {\n margin-top: 0.25rem;\n}\n\n.omniscribe_link-text {\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n color: var(--color-activeblack, #000000);\n line-height: 1.375;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.omniscribe_snippet-text {\n font-size: 0.75rem;\n line-height: 1rem;\n color: var(--omniscribe-text-muted, #4b5563);\n line-height: 1.625;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n/* Source: modules/chat/components/markdown/LinkGroupPill.css */\n.omniscribe_pill-container {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n margin-left: 0.125rem;\n margin-right: 0.125rem;\n}\n\n.omniscribe_pill-button {\n display: inline-flex;\n align-items: center;\n border-radius: 9999px;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n background-color: var(--blue-100);\n color: var(--blue-700);\n border: 1px solid var(--blue-200);\n transition-property:\n color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.omniscribe_pill-button:hover {\n background-color: var(--blue-200);\n}\n\n.omniscribe_pill-button:focus {\n background-color: var(--blue-200);\n outline: 2px solid transparent;\n outline-offset: 2px;\n box-shadow:\n 0 0 0 2px #3b82f6,\n 0 0 0 4px rgba(59, 130, 246, 0.1);\n}\n\n.omniscribe_pill-button--active {\n background-color: var(--blue-200);\n}\n\n.omniscribe_pill-domain {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n@media (min-width: 640px) {\n .omniscribe_pill-domain {\n max-width: 200px;\n }\n}\n\n.omniscribe_pill-counter {\n margin-left: 0.375rem;\n background-color: var(--blue-200);\n color: #1e40af;\n border-radius: 9999px;\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n font-size: 10px;\n line-height: 1;\n font-weight: 600;\n}\n\n.omniscribe_menu-portal {\n position: absolute;\n z-index: 100;\n}\n\n\n/* Source: modules/chat/components/markdown/MarkdownText.css */\n.omniscribe_markdown-code-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: calc(var(--spacing) * 4) /* 1rem = 16px */;\n border-top-left-radius: var(--radius) /* 0.25rem = 4px */;\n border-top-right-radius: var(--radius) /* 0.25rem = 4px */;\n background-color: var(--color-zinc-900)\n /* oklch(21% 0.006 285.885) = #18181b */;\n padding-inline: calc(var(--spacing) * 4) /* 1rem = 16px */;\n padding-block: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n color: var(--white);\n}\n\n.omniscribe_markdown-code-span {\n text-transform: lowercase;\n & > span {\n font-size: var(--text-xs) /* 0.75rem = 12px */;\n line-height: var(--text-xs--line-height) /* calc(1 / 0.75) ≈ 1.3333 */;\n }\n}\n\n.omniscribe_markdown-h1 {\n margin-bottom: calc(var(--spacing) * 8) /* 2rem = 32px */;\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-4xl) /* 2.25rem = 36px */;\n line-height: var(--text-4xl--line-height) /* calc(2.5 / 2.25) ≈ 1.1111 */;\n font-weight: var(--font-weight-extrabold) /* 800 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-h2 {\n margin-bottom: calc(var(--spacing) * 4);\n margin-top: calc(var(--spacing) * 8) /* 2rem = 32px */;\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-3xl) /* 1.875rem = 30px */;\n line-height: var(--text-3xl--line-height) /* calc(2.25 / 1.875) ≈ 1.2 */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n.omniscribe_markdown-h3 {\n margin-bottom: calc(var(--spacing) * 4);\n margin-top: calc(var(--spacing) * 6);\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-2xl);\n line-height: var(--text-2xl--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-h4 {\n margin-bottom: calc(var(--spacing) * 4);\n margin-top: calc(var(--spacing) * 6);\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-xl);\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n.omniscribe_markdown-h5 {\n margin-block: calc(var(--spacing) * 4) /* 1rem = 16px */;\n font-size: var(--text-lg);\n line-height: var(--text-lg--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-h6 {\n margin-block: calc(var(--spacing) * 4) /* 1rem = 16px */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-p {\n margin-block: calc(var(--spacing) * 2.5);\n line-height: calc(var(--spacing) * 5);\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-a {\n color: var(--primary);\n font-weight: var(--font-weight-medium) /* 500 */;\n text-decoration-line: underline;\n text-underline-offset: 4px;\n overflow-wrap: break-word;\n}\n\n.omniscribe_markdown-blockquote {\n border-left-width: 2px;\n padding-left: calc(var(--spacing) * 6) /* 1.5rem = 24px */;\n font-style: italic;\n}\n\n.omniscribe_markdown-ul {\n list-style-type: disc;\n padding-inline-start: 20px;\n word-break: break-word;\n & > li {\n margin-top: calc(var(--spacing) * 1) /* 0.5rem = 8px */;\n }\n}\n\n.omniscribe_markdown-ol {\n margin-block: calc(var(--spacing) * 5) /* 1.25rem = 20px */;\n margin-left: calc(var(--spacing) * 6) /* 1.5rem = 24px */;\n list-style-type: decimal;\n & > li {\n margin-top: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n }\n}\n\n.omniscribe_markdown-hr {\n margin-block: calc(var(--spacing) * 5) /* 1.25rem = 20px */;\n border-bottom-width: 1px;\n}\n.omniscribe_markdown-table {\n margin-block: calc(var(--spacing) * 5) /* 1.25rem = 20px */;\n width: 100%;\n border-collapse: separate;\n border-spacing: calc(var(--spacing) * 0) /* 0rem = 0px */;\n overflow-y: auto;\n}\n.omniscribe_markdown-th {\n background-color: var(--muted);\n padding-inline: calc(var(--spacing) * 4) /* 1rem = 16px */;\n padding-block: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n text-align: left;\n font-weight: var(--font-weight-bold) /* 700 */;\n &:first-child {\n border-top-left-radius: var(--radius) /* 0.25rem = 4px */;\n }\n &:last-child {\n border-top-right-radius: var(--radius) /* 0.25rem = 4px */;\n }\n &[align='center'] {\n text-align: center;\n }\n &[align='right'] {\n text-align: right;\n }\n}\n\n.omniscribe_markdown-td {\n border-bottom-width: 1px;\n border-left-width: 1px;\n padding-inline: calc(var(--spacing) * 4) /* 1rem = 16px */;\n padding-block: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n text-align: left;\n &:last-child {\n border-right-width: 1px;\n }\n &[align='center'] {\n text-align: center;\n }\n &[align='right'] {\n text-align: right;\n }\n}\n\n.omniscribe_markdown-tr {\n margin: calc(var(--spacing) * 0) /* 0rem = 0px */;\n &:first-child {\n border-top-width: 1px;\n }\n &:last-child > td:first-child {\n border-bottom-left-radius: var(--radius) /* 0.25rem = 4px */;\n }\n &:last-child > td:last-child {\n border-bottom-right-radius: var(--radius) /* 0.25rem = 4px */;\n }\n}\n\n.omniscribe_markdown-sup {\n font-size: var(--text-xs) /* 0.75rem = 12px */;\n line-height: var(--text-xs--line-height) /* calc(1 / 0.75) ≈ 1.3333 */;\n & > a {\n text-decoration-line: none;\n }\n}\n\n.omniscribe_markdown-pre {\n overflow-x: auto;\n border-bottom-right-radius: var(--radius) /* 0.25rem = 4px */;\n border-bottom-left-radius: var(--radius) /* 0.25rem = 4px */;\n background-color: var(--black);\n padding: calc(var(--spacing) * 4) /* 1rem = 16px */;\n color: var(--white);\n max-width: var(--container-4xl) /* 56rem = 896px */;\n}\n\n.omniscribe_markdown-code {\n border-radius: 0.25rem /* 4px */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n}\n\n.omniscribe_markdown-link {\n color: var(--color-primary); /* text-primary */\n font-weight: 500; /* font-medium */\n text-decoration: underline; /* underline */\n text-underline-offset: 4px; /* underline-offset-4 */\n word-wrap: break-word; /* break-words */\n}\n\n.omniscribe_markdown-link:hover {\n color: var(--color-primary-dark); /* hover:text-primary-dark */\n}\n\n.omniscribe_assistant-markdown-container strong,\n.omniscribe_assistant-markdown-container b {\n font-weight: bold !important;\n}\n\n\n/* Source: modules/chat/components/markdown/tooltip-icon-button.css */\n/* Tooltip icon button styles */\n.omniscribe_tooltip-icon-button-btn {\n padding: 4px;\n min-width: auto;\n min-height: auto;\n}\n\n.omniscribe_tooltip-icon-button-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n\n/* Source: modules/chat/components/messages/AssistantMessage.css */\n.omniscribe_assistant-message-container {\n display: flex;\n align-items: flex-start;\n margin-right: auto;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n width: 100%;\n}\n\n.omniscribe_assistant-message-calls-container {\n display: flex;\n flex-direction: column;\n max-width: 100%;\n}\n\n.omniscribe_assistant-markdown-container {\n padding-block: calc(var(--spacing) * 0.5) /* 0.25rem = 4px */;\n}\n\n.omniscribe_assistant-commands-container {\n display: flex;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n align-items: center;\n margin-right: auto;\n}\n.omniscribe_assistant-message-container:hover,\n.omniscribe_assistant-message-container:focus {\n .omniscribe_assistant-commands-container {\n opacity: 100%;\n }\n}\n\n\n/* Source: modules/chat/components/messages/AssistantMessageLoading.css */\n/* Assistant message loading animation */\n.omniscribe_assistant-message-loading-container {\n display: flex;\n align-items: center;\n padding: 8px 0;\n}\n\n.omniscribe_assistant-message-loading {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_assistant-message-loading-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-assistant-dot-flashing 1.4s infinite linear;\n}\n\n.omniscribe_assistant-message-loading-dot:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.omniscribe_assistant-message-loading-dot:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n.omniscribe_assistant-message-loading-dot:nth-child(3) {\n animation-delay: 0s;\n}\n\n@keyframes omniscribe-assistant-dot-flashing {\n 0%,\n 80%,\n 100% {\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n}\n\n\n/* Source: modules/chat/components/messages/BranchSwitcher.css */\n.omniscribe_brand-switcher-container {\n display: flex;\n align-items: center;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n}\n\n.omniscribe_brand-switcher-text {\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(\n --tw-leading,\n var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */\n );\n}\n\n.omniscribe_brand-switcher-btn {\n width: calc(0.25rem /* 4px */ * 6) /* 1.5rem = 24px */;\n height: calc(0.25rem /* 4px */ * 6) /* 1.5rem = 24px */;\n padding: calc(0.25rem /* 4px */ * 1) /* 0.25rem = 4px */;\n}\n\n\n/* Source: modules/chat/components/messages/CommandBar.css */\n.omniscribe_command-bar-container {\n display: flex;\n align-items: center;\n padding-right: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n transition: opacity 0.2s ease-in-out;\n}\n\n.omniscribe_command-bar-container.omniscribe_command-bar-hidden {\n opacity: 0;\n pointer-events: none;\n}\n\n.thumbs.active {\n color: var(--blue-500);\n}\n\n.omniscribe_feedback-button-container {\n position: relative;\n display: inline-block;\n}\n\n.omniscribe_command-bar-container-icon-color,\n.thumbs {\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_command-bar-container svg {\n width: 12px !important;\n height: 12px !important;\n}\n\n.omniscribe_command-bar-container .omniscribe_tooltip-icon-button-btn {\n padding: calc(var(--spacing) * 0.5) !important;\n}\n\n.omniscribe_command-bar-container .tooltip-base {\n padding: 0.25rem 0.5rem;\n}\n\n.omniscribe_command-bar-container .tooltip-trigger {\n padding: 1px;\n margin: 1px;\n}\n\n.omniscribe_command-bar-container .omniscribe_button-size-icon {\n height: calc(var(--spacing) * 3);\n width: calc(var(--spacing) * 3);\n}\n\n\n/* Source: modules/chat/components/messages/HumanMessage.css */\n.omniscribe_human-message-container {\n display: flex;\n align-items: center;\n margin-left: auto;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n}\n.omniscribe_human-message-container-editing {\n width: 100%;\n max-width: var(--container-xl) /* 36rem = 576px */;\n}\n.omniscribe_human-message-container-no-editing {\n max-width: 100%;\n}\n\n.omniscribe_human-message-command-container {\n display: flex;\n gap: calc(var(--spacing) * 1) /* 0.5rem = 8px */;\n align-items: center;\n margin-left: auto;\n}\n.omniscribe_human-message-command-container-editing {\n opacity: 100%;\n}\n\n.omniscribe_human-message-container:focus,\n.omniscribe_human-message-container:hover {\n .omniscribe_human-message-command-container {\n opacity: 100%;\n }\n}\n\n.omniscribe_human-message-subcontainer {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n.omniscribe_human-message-subcontainer-editing {\n width: 100%;\n}\n\n.omniscribe_human-message-content {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n}\n\n.omniscribe_human-message-content-text {\n text-align: right;\n padding-top: 4px;\n padding-bottom: 4px;\n padding-inline: calc(var(--spacing) * 2);\n border-radius: var(--radius-3xl);\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n font-weight: 500;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n margin: 0;\n}\n.omniscribe_human-message-textarea {\n min-height: 2.5rem !important; /* 40px */\n max-height: 12rem !important; /* 192px - Allow more vertical space */\n min-width: 200px !important; /* Minimum width for usability */\n resize: both; /* Allow controlled resizing in both directions */\n width: 100%;\n overflow: auto; /* Enable scroll when content exceeds max dimensions */\n\n &:focus-visible {\n box-shadow: var(--tw-ring-inset,) 0 0 0\n calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);\n }\n}\n\n.omniscribe_human-message-textarea-chat-history-close {\n max-width: 100% !important;\n}\n\n.omniscribe_human-message-textarea-chat-history-open {\n max-width: 385px !important;\n}\n\n\n/* Source: modules/chat/components/messages/MessageImages.css */\n/* Message Files Container (for both images and documents) */\n.omniscribe_message-files {\n margin-top: 8px;\n margin-bottom: 4px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Message Images Container */\n.omniscribe_message-images {\n display: flex;\n flex-direction: column;\n}\n\n.omniscribe_message-images-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n max-width: 100%;\n}\n\n/* Individual Image Container */\n.omniscribe_message-image-container {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n background-color: var(--omniscribe-surface-alt, #f5f5f5);\n border: 1px solid var(--omniscribe-border, #e0e0e0);\n cursor: pointer;\n transition:\n transform 0.2s ease,\n box-shadow 0.2s ease;\n}\n\n.omniscribe_message-image-container:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n.omniscribe_message-image-container-single {\n max-width: 200px;\n max-height: 200px;\n}\n\n.omniscribe_message-image-container-multiple {\n width: 80px;\n height: 80px;\n flex-shrink: 0;\n}\n\n/* Image Element */\n.omniscribe_message-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.omniscribe_message-image-container-single .omniscribe_message-image {\n max-width: 200px;\n max-height: 200px;\n width: auto;\n height: auto;\n}\n\n/* Loading State */\n.omniscribe_message-image-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 60px;\n background-color: var(--omniscribe-surface-alt, #f8f9fa);\n color: var(--omniscribe-text-muted, #6c757d);\n font-size: 12px;\n border-radius: 8px;\n}\n\n/* Error State */\n.omniscribe_message-image-error {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 60px;\n background-color: var(--omniscribe-surface-alt, #f8f9fa);\n color: var(--omniscribe-text-muted, #6c757d);\n font-size: 12px;\n border-radius: 8px;\n text-align: center;\n cursor: default;\n}\n\n.omniscribe_message-image-error span {\n font-size: 20px;\n margin-bottom: 4px;\n}\n\n.omniscribe_message-image-error small {\n font-size: 10px;\n}\n\n/* Image Counter for Multiple Images */\n.omniscribe_message-image-counter {\n position: absolute;\n top: 4px;\n right: 4px;\n background-color: rgba(0, 0, 0, 0.7);\n color: white;\n font-size: 10px;\n font-weight: bold;\n padding: 2px 6px;\n border-radius: 12px;\n min-width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Images Count */\n.omniscribe_message-images-count {\n margin-top: 4px;\n font-size: 11px;\n color: var(--omniscribe-text-muted, #6c757d);\n font-style: italic;\n}\n\n/* Modal for Full-Size Images */\n.omniscribe_message-image-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.omniscribe_message-image-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n}\n\n.omniscribe_message-image-modal-content {\n position: relative;\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.omniscribe_message-image-modal-img {\n max-width: 100%;\n max-height: 100%;\n border-radius: 8px;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n}\n\n.omniscribe_message-image-modal-close {\n position: absolute;\n top: -10px;\n right: -10px;\n background-color: var(--omniscribe-surface, #fff);\n border: none;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 18px;\n font-weight: bold;\n color: var(--omniscribe-text, #333);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n transition: background-color 0.2s ease;\n}\n\n.omniscribe_message-image-modal-close:hover {\n background-color: var(--omniscribe-surface-alt, #f5f5f5);\n}\n\n/* Message Documents Container */\n.omniscribe_message-documents {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_message-document {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border-radius: 8px;\n background-color: var(--omniscribe-surface-alt, #f8f9fa);\n border: 1px solid var(--omniscribe-border, #e0e0e0);\n transition: background-color 0.2s ease;\n max-width: 280px;\n}\n\n.omniscribe_message-document:hover {\n background-color: var(--omniscribe-surface-alt, #f0f0f0);\n}\n\n.omniscribe_message-document-icon {\n font-size: 24px;\n flex-shrink: 0;\n}\n\n.omniscribe_message-document-info {\n flex: 1;\n min-width: 0;\n}\n\n.omniscribe_message-document-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--omniscribe-text, #333);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.omniscribe_message-document-size {\n font-size: 11px;\n color: var(--omniscribe-text-muted, #6c757d);\n}\n\n.omniscribe_message-documents-count {\n margin-top: 4px;\n font-size: 11px;\n color: var(--omniscribe-text-muted, #6c757d);\n font-style: italic;\n}\n\n\n/* Source: modules/chat/components/messages/ToolCalls.css */\n.omniscribe_tool-calls-container {\n margin-block-start: calc(calc(var(--spacing) * 4) * var(0));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(0)));\n width: 100%;\n max-width: var(--container-4xl) /* 56rem = 896px */;\n}\n\n.omniscribe_tool-calls-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n max-width: 100%;\n flex-wrap: wrap;\n gap: calc(var(--spacing) * 1) /* 0.25rem = 4px */;\n}\n.omniscribe_tool-calls-h3 {\n font-weight: var(--font-weight-bold);\n color: var(--color-gray-900) /* oklch(21% 0.034 264.665) = #101828 */;\n word-break: break-all;\n font-size: 14px;\n margin: 0;\n}\n\n.omniscribe_tool-calls-item-args {\n align-items: flex-start;\n flex-wrap: wrap;\n}\n.omniscribe_tool-calls-item-args-text {\n word-break: break-all;\n margin-right: calc(var(--spacing) * 1) /* 0.25rem = 4px */;\n padding-block: calc(var(--spacing) * 1) /* 0.25rem = 4px */;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(\n --tw-leading,\n var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */\n );\n}\n\n.omniscribe_tool-calls-item-args-code {\n background-color: var(--color-gray-50);\n border-radius: 0.25rem /* 4px */;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(\n --tw-leading,\n var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */\n );\n word-break: break-all;\n}\n\n.omniscribe_tool-calls-pre {\n font-size: 12px;\n}\n\n\n/* Source: modules/chat/components/messages/ToolResults.css */\n/* ToolResult Component Styles */\n\n.omniscribe_tool-result {\n margin-top: 2px;\n border: 1px solid var(--grey-200);\n border-radius: 0.5rem !important; /* !rounded-lg */\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); /* shadow-sm */\n overflow: hidden; /* overflow-hidden */\n width: 100%;\n}\n\n.omniscribe_tool-result-header {\n background-color: var(--grey-50); /* bg-gray-50 */\n padding-left: 1rem; /* px-4 */\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n display: flex; /* flex */\n align-items: center; /* items-center */\n justify-content: space-between; /* justify-between */\n}\n\n.omniscribe_tool-result-header--expanded {\n border-bottom: 1px solid var(--grey-200);\n}\n\n.omniscribe_tool-result-header-content {\n display: flex; /* flex */\n align-items: center; /* items-center */\n gap: 0.5rem; /* gap-2 */\n min-width: 0; /* min-w-0 */\n}\n\n.omniscribe_tool-result-title {\n font-weight: 500; /* font-medium */\n color: var(--grey-900);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; /* truncate */\n margin: 0;\n font-size: 14px;\n}\n\n.omniscribe_expand-button {\n padding: 0.25rem; /* p-1 */\n flex-shrink: 0; /* flex-shrink-0 */\n}\n\n.omniscribe_expand-icon {\n width: 1.25rem; /* w-5 */\n height: 1.25rem; /* h-5 */\n}\n\n.omniscribe_tool-result-content {\n padding: 1rem; /* p-4 */\n background-color: var(--omniscribe-surface, #ffffff); /* bg-white */\n max-height: 24rem; /* max-h-96 */\n overflow-y: auto; /* overflow-y-auto */\n}\n\n.omniscribe_tool-result-content > * + * {\n margin-top: 0.5rem; /* space-y-2 */\n}\n\n/* Scrollbar styles for webkit browsers */\n.omniscribe_tool-result-content::-webkit-scrollbar {\n width: 8px;\n}\n\n.omniscribe_tool-result-content::-webkit-scrollbar-track {\n background: #f1f5f9;\n border-radius: 4px;\n}\n\n.omniscribe_tool-result-content::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 4px;\n}\n\n.omniscribe_tool-result-content::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n}\n\n.omniscribe_result-card {\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); /* shadow-sm */\n border: 1px solid var(--color-gray-100);\n padding-top: 0.5rem !important; /* !py-2 */\n padding-bottom: 0.5rem !important;\n gap: 0 !important; /* !gap-0 */\n}\n\n.omniscribe_result-card-header {\n padding-top: 0.5rem !important; /* !pt-2 */\n padding-left: 0.5rem !important; /* !px-2 */\n padding-right: 0.5rem !important;\n padding-bottom: 0 !important; /* !pb-0 */\n}\n\n.omniscribe_result-card-title {\n font-size: 0.875rem; /* text-sm */\n line-height: 1.25rem;\n font-weight: 600; /* font-semibold */\n}\n\n.omniscribe_result-link {\n color: var(--blue-600);\n text-decoration: none;\n transition-property: color, text-decoration;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.omniscribe_result-link:hover {\n text-decoration: underline; /* hover:underline */\n color: #1e40af; /* hover:text-blue-800 */\n}\n\n.omniscribe_result-card-content {\n padding: 0.5rem !important; /* !p-2 */\n padding-top: 0 !important; /* !pt-0 */\n}\n\n.omniscribe_result-description {\n font-size: 0.75rem; /* text-xs */\n line-height: 1rem;\n color: var(--omniscribe-text, #374151); /* text-gray-700 */\n line-height: 1.625; /* leading-relaxed */\n word-break: break-all; /* break-all */\n display: -webkit-box;\n -webkit-line-clamp: 2; /* line-clamp-2 */\n -webkit-box-orient: vertical;\n overflow: hidden;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms; /* transition-all duration-150 ease-in-out */\n transition-timing-function: cubic-bezier(0.4, 0, 0.6, 1); /* ease-in-out */\n}\n\n.omniscribe_result-description:hover {\n -webkit-line-clamp: unset; /* hover:line-clamp-none */\n display: block;\n}\n\n.omniscribe_result-source {\n font-size: 0.75rem; /* text-xs */\n line-height: 1rem;\n color: var(--omniscribe-text-muted, #6b7280); /* text-gray-500 */\n margin-top: 0.25rem; /* mt-1 */\n padding-top: 0.25rem; /* pt-1 */\n border-top: 1px solid var(--color-gray-100);\n}\n\n.omniscribe_string-result {\n font-size: 0.875rem; /* text-sm */\n line-height: 1.25rem;\n white-space: pre-wrap; /* whitespace-pre-wrap */\n background-color: var(--grey-50);\n padding: 0.75rem; /* p-3 */\n border-radius: 0.375rem; /* rounded-md */\n border: 1px solid var(--grey-200);\n font-family:\n ui-monospace, SFMono-Regular, 'SF Mono', Consolas, 'Liberation Mono', Menlo,\n monospace; /* pre tag font */\n}\n\n\n/* Source: modules/header/components/ConfigHeader.css */\n/* Config Header Styles */\n.omniscribe_config-view {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n max-height: 17px;\n padding: 16px;\n}\n\n.omniscribe_config-back-group {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n background: none;\n border: none;\n padding: 0;\n}\n\n.omniscribe_config-back-label {\n margin: 0;\n color: var(--omniscribe-text, #000000);\n font-size: 14px;\n font-weight: 700;\n line-height: 17px;\n}\n\n.omniscribe_config-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background-color: var(--omniscribe-surface-alt, #edeff2);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: var(--Radius-radius-round, 99999px);\n cursor: pointer;\n color: var(--omniscribe-text, #000000);\n font-size: 14px;\n line-height: 1;\n padding: 0;\n}\n\n\n/* Source: modules/header/components/ConnectedButtons.css */\n/* Connected Buttons Styles */\n.omniscribe_connected-buttons {\n display: flex;\n border-radius: var(--Radius-radius-medium, 8px);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n overflow: hidden;\n}\n\n.omniscribe_connected-btn-left {\n border: none !important;\n border-radius: 0 !important;\n border-right: 1px solid var(--omniscribe-border, #e5e7ec) !important;\n}\n\n.omniscribe_connected-btn-right {\n border: none !important;\n border-radius: 0 !important;\n}\n\n/* Ensure connected buttons have consistent styling */\n.omniscribe_connected-buttons .omniscribe_utility-btns {\n min-height: 40px;\n}\n\n\n/* Source: modules/header/components/ConsentIndicator.css */\n.omniscribe_consent-indicator {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 10px;\n font-weight: var(--Font-Weight-Regular, 400);\n line-height: var(--text-xs--line-height, 14.4px);\n letter-spacing: var(--text-xs--letter-spacing, 0.05px);\n white-space: nowrap;\n margin-right: 8px;\n gap: 4px;\n border: 1px solid var(--border, #e5e7ec);\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_consent-indicator-tooltip {\n border-radius: var(--radius-lg, 12px) !important;\n border: 1px solid var(--border, #e5e7ec) !important;\n box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25) !important;\n display: flex !important;\n padding: 10px 8px !important;\n font-size: 10px !important;\n font-weight: 400 !important;\n line-height: var(--text-xs--line-height, 14.4px) !important;\n letter-spacing: var(--text-xs--letter-spacing, 0.05px) !important;\n}\n\n/* SOF-844: express refusal of AI use. Distinct from \"not signed yet\" — the\n whole point of the third state is that they must not look alike. */\n.omniscribe_consent-indicator--refused {\n background-color: var(--omniscribe-danger-soft, #fee2e2);\n color: var(--omniscribe-danger, #b91c1c);\n border-color: var(--omniscribe-danger, #b91c1c);\n}\n\n/* SOF-845: the consent may be signed and the assistant still blocked by another\n rule. The badge stays truthful about the consent, but must not read as \"all\n clear\" at a glance while recording is disabled. */\n.omniscribe_consent-indicator--blocked {\n background-color: var(--omniscribe-warning-soft, #fef3c7);\n color: var(--omniscribe-warning, #92400e);\n border-color: var(--omniscribe-warning, #92400e);\n}\n\n\n/* Source: modules/header/components/MainHeader.css */\n/* Main Header Styles */\n.omniscribe_main-header {\n display: flex;\n align-items: center;\n width: 100%;\n}\n\n.omniscribe_main-header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n.omniscribe_main-header-title {\n margin: 0;\n color: var(--omniscribe-text, #252a32);\n font-size: 14px;\n font-weight: 500;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n}\n\n.omniscribe_main-header-separator {\n width: 1px;\n align-self: stretch;\n margin: -16px 0;\n background-color: var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_main-header-spacer {\n flex: 1;\n}\n\n.omniscribe_main-header-settings {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n.omniscribe_main-header-close {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n\n/* Source: modules/header/components/UtilityButton.css */\n/* Utility Button Styles */\n.omniscribe_utility-btn-audio {\n min-height: 40px; /* Match connected buttons height */\n}\n\n.omniscribe_utility-btn-right {\n /* Settings button specific styles can be added here */\n}\n\n/* Base utility button styles are inherited from parent UtilityButtons.css */\n\n\n/* Source: modules/header/components/WarningBanner.css */\n/* Warning Banner Styles */\n.omniscribe_warning-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px;\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_warning-banner-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background-color: var(--omniscribe-border, #e5e7ec);\n border-radius: 50%;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.omniscribe_warning-banner-close:hover {\n background-color: #d1d5db;\n}\n\n.omniscribe_warning-banner-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.25;\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n\n/* Source: modules/header/section/UtilityButtons.css */\n.omniscribe_header-wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: var(--omniscribe-surface, #ffffff);\n border-top-right-radius: 12px;\n border-top-left-radius: 12px;\n}\n\n.omniscribe_utility-btns-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n background-color: var(--omniscribe-surface, #ffffff);\n overflow: hidden;\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n align-self: stretch;\n border-top-right-radius: inherit;\n border-top-left-radius: inherit;\n}\n\n.omniscribe_utility-btns-left,\n.omniscribe_utility-btns-right {\n display: flex;\n flex-direction: row;\n gap: 4px;\n align-items: center;\n}\n\n.omniscribe_utility-btn-right {\n border-radius: var(--Radius-radius-round, 99999px) !important;\n background-color: var(--omniscribe-surface-alt, #f6f7f9) !important;\n border: none !important;\n}\n\n.omniscribe_utility-btns {\n cursor: pointer;\n transition-duration: 300ms;\n background-color: color-mix(in oklab, var(--white) 30%, transparent);\n border-radius: var(--Radius-radius-medium, 8px);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n position: relative;\n padding: 8px;\n display: flex;\n align-items: center;\n\n &:hover {\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n }\n}\n\n.omniscribe_utility-btns-pointer {\n pointer-events: auto;\n}\n\n.omniscribe_utility-btns-no-pointer {\n pointer-events: none;\n background-color: var(--white);\n}\n\n.omniscribe_utility-btns-no-pointer-opacity {\n pointer-events: none;\n opacity: 50%;\n}\n\n.omniscribe_utility-btns-opacity {\n background-color: var(--white);\n opacity: 100%;\n}\n\n.omniscribe_utility-btns-active {\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n border: 1px solid var(--omniscribe-primary, #105bdb);\n}\n\n.omniscribe_btn-label {\n margin-left: 6px;\n font-size: 14px;\n color: var(--omniscribe-text, #212529);\n font-weight: 500;\n}\n\n.omniscribe_btn-label-active {\n color: var(--omniscribe-primary, #105bdb);\n}\n\n.omniscribe_btn-label-inactive {\n color: var(--omniscribe-text, #212529);\n}\n\n.omniscribe_icon {\n color: var(--active-black);\n}\n\n.omniscribe_icon-active {\n color: var(--omniscribe-primary, #105bdb);\n}\n\n\n/* Source: modules/insertionPreview/InsertionPreviewModal.css */\n/* Insertion Preview Modal — ported from the demo's .sugg-* styles\n (dev-tools/demo/src/style.css:715-891). Uses BEM-style naming under\n omniscribe_insertion-preview to stay scoped inside the SDK shadow DOM.\n\n Theming hooks (set on the `<sofia-sdk>` element, they cross the shadow\n boundary; classes don't):\n\n --omniscribe-insertion-preview-reserve px reserved for chat widget on the right\n --omniscribe-insertion-preview-primary brand color (selection / apply button)\n --omniscribe-insertion-preview-primary-soft soft pill background using primary\n --omniscribe-insertion-preview-primary-text text color sitting on primary-soft\n --omniscribe-insertion-preview-accent attention color (gaps)\n --omniscribe-insertion-preview-accent-soft soft pill background using accent\n --omniscribe-insertion-preview-accent-bg gap-section background\n --omniscribe-insertion-preview-text primary text\n --omniscribe-insertion-preview-text-muted secondary text / chrome\n --omniscribe-insertion-preview-border panel + group border\n --omniscribe-insertion-preview-border-soft in-panel separators\n --omniscribe-insertion-preview-input-border form-control border\n --omniscribe-insertion-preview-checkbox-border unchecked checkbox stroke\n --omniscribe-insertion-preview-surface panel background\n --omniscribe-insertion-preview-surface-alt header / footer / hover background\n\n Defaults cascade THROUGH the main SDK tokens (`--omniscribe-*`) before\n falling back to a hard-coded literal. So:\n\n 1. If the host sets `--omniscribe-insertion-preview-primary` →\n only the modal picks it up (per-surface theming).\n 2. Else if the host sets `--omniscribe-primary` (the chat-widget\n token) → BOTH chat and modal share it (unified theme — the\n out-of-the-box experience).\n 3. Else → falls back to the hard-coded SDK default (Sofia blue),\n matching the chat widget's stock look.\n\n Tokens without a chat-widget counterpart (accent / text-muted /\n border-soft / surface-alt etc.) keep their own defaults. */\n\n.omniscribe_insertion-preview__backdrop,\n.omniscribe_insertion-preview__panel {\n --_primary: var(\n --omniscribe-insertion-preview-primary,\n var(--omniscribe-primary, #105bdb)\n );\n --_primary-soft: var(\n --omniscribe-insertion-preview-primary-soft,\n var(--omniscribe-primary-soft, #e7effd)\n );\n --_primary-text: var(\n --omniscribe-insertion-preview-primary-text,\n var(--omniscribe-primary, #105bdb)\n );\n --_accent: var(--omniscribe-insertion-preview-accent, #c77700);\n --_accent-soft: var(--omniscribe-insertion-preview-accent-soft, #fdebc6);\n --_accent-bg: var(--omniscribe-insertion-preview-accent-bg, #fffbf1);\n --_text: var(\n --omniscribe-insertion-preview-text,\n var(--omniscribe-text, #1f2733)\n );\n --_text-muted: var(\n --omniscribe-insertion-preview-text-muted,\n var(--omniscribe-text-muted, #6a7385)\n );\n --_border: var(\n --omniscribe-insertion-preview-border,\n var(--omniscribe-border, #e5e7ec)\n );\n --_border-soft: var(\n --omniscribe-insertion-preview-border-soft,\n var(--omniscribe-border, #eef1f6)\n );\n --_input-border: var(\n --omniscribe-insertion-preview-input-border,\n var(--omniscribe-border, #d6dbe5)\n );\n --_checkbox-border: var(\n --omniscribe-insertion-preview-checkbox-border,\n #b7bfcc\n );\n --_surface: var(\n --omniscribe-insertion-preview-surface,\n var(--omniscribe-surface, #fff)\n );\n --_surface-alt: var(\n --omniscribe-insertion-preview-surface-alt,\n var(--omniscribe-surface-alt, #f6f8fb)\n );\n}\n\n/* The modal must sit above every other surface in the SDK shadow DOM\n (chat panel, toasts, tooltips). 2147483640+ ensures that even with a\n max-int z-index race, the modal wins. */\n.omniscribe_insertion-preview__backdrop {\n position: fixed;\n inset: 0;\n background: rgba(15, 27, 45, 0.42);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n z-index: 2147483640;\n animation: omniscribe_insertion-preview__fade 0.18s ease-out;\n}\n@keyframes omniscribe_insertion-preview__fade {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* `--omniscribe-insertion-preview-reserve` lets the host budget space\n for a floating chat widget so the panel centers in the area NOT\n covered by it. Default: 0px → centered in the full viewport. */\n.omniscribe_insertion-preview__panel {\n position: fixed;\n top: 50%;\n left: calc((100vw - var(--omniscribe-insertion-preview-reserve, 0px)) / 2);\n transform: translate(-50%, -50%);\n z-index: 2147483641;\n width: 680px;\n max-width: calc(\n 100vw - var(--omniscribe-insertion-preview-reserve, 0px) - 32px\n );\n max-height: 84vh;\n background: var(--_surface);\n border: 1px solid var(--_border);\n border-radius: 14px;\n box-shadow: 0 24px 64px rgba(15, 27, 45, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: omniscribe_insertion-preview__in 0.22s ease-out;\n font-family: 'Lato', sans-serif;\n color: var(--_text);\n}\n\n/* Below 1100px there isn't room to sit beside the widget; centered\n fallback (will overlap the widget — same trade-off as the demo). */\n@media (max-width: 1100px) {\n .omniscribe_insertion-preview__panel {\n left: 50%;\n width: 92vw;\n max-width: 720px;\n }\n}\n@keyframes omniscribe_insertion-preview__in {\n from {\n opacity: 0;\n transform: translate(-50%, calc(-50% + 8px)) scale(0.985);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n\n.omniscribe_insertion-preview__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n border-bottom: 1px solid var(--_border);\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n}\n.omniscribe_insertion-preview__close {\n background: transparent;\n border: 0;\n color: var(--_text-muted);\n font-size: 18px;\n line-height: 1;\n padding: 2px 6px;\n border-radius: 4px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__close:hover {\n background: var(--_border-soft);\n color: var(--_text);\n}\n\n.omniscribe_insertion-preview__sub {\n margin: 0;\n padding: 8px 14px;\n font-size: 11.5px;\n color: var(--_text-muted);\n border-bottom: 1px solid var(--_border-soft);\n}\n\n.omniscribe_insertion-preview__body {\n flex: 1;\n overflow-y: auto;\n padding: 4px 0;\n}\n\n.omniscribe_insertion-preview__group {\n border-bottom: 1px solid var(--_border-soft);\n}\n.omniscribe_insertion-preview__group:last-child {\n border-bottom: 0;\n}\n.omniscribe_insertion-preview__group-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px 4px;\n}\n/* The parent label of an array-of-objects group lives inside .group-head\n which already supplies 14px left padding. Without zeroing the inner\n .row padding here, the parent ends up doubly indented (28px) while\n children directly under the section have a single 14px — making the\n parent appear LEFT-shifted relative to its own children. */\n.omniscribe_insertion-preview__group-head .omniscribe_insertion-preview__row {\n padding: 0;\n}\n.omniscribe_insertion-preview__group-name {\n font-size: 10.5px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--_text-muted);\n}\n.omniscribe_insertion-preview__group-count {\n background: var(--_primary-soft);\n color: var(--_primary-text);\n font-size: 10.5px;\n font-weight: 600;\n border-radius: 999px;\n padding: 1px 7px;\n}\n\n.omniscribe_insertion-preview__row {\n display: grid;\n grid-template-columns: 16px 1fr;\n gap: 10px;\n padding: 8px 14px;\n align-items: flex-start;\n cursor: pointer;\n border-radius: 6px;\n}\n.omniscribe_insertion-preview__row:hover {\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__row-checkbox {\n appearance: none;\n width: 14px;\n height: 14px;\n border: 1px solid var(--_checkbox-border);\n border-radius: 3px;\n background: var(--_surface);\n margin-top: 2px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__row-checkbox:checked {\n background: var(--_primary);\n border-color: var(--_primary);\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>\");\n background-repeat: no-repeat;\n background-position: center;\n}\n.omniscribe_insertion-preview__row-body {\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.omniscribe_insertion-preview__row-label {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--_text);\n margin-bottom: 8px;\n}\n.omniscribe_insertion-preview__row-preview {\n font-size: 11.5px;\n color: var(--_text-muted);\n word-break: break-word;\n}\n.omniscribe_insertion-preview__row-line {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 2px 0;\n}\n.omniscribe_insertion-preview__row-line-text {\n flex: 1;\n}\n\n.omniscribe_insertion-preview__row-edit {\n margin-top: 4px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.omniscribe_insertion-preview__row-edit-grid {\n display: grid;\n grid-template-columns: 140px 1fr;\n gap: 6px 12px;\n align-items: center;\n}\n.omniscribe_insertion-preview__row-edit-label {\n font-size: 11px;\n color: var(--_text-muted);\n}\n\n.omniscribe_insertion-preview__edit {\n font: inherit;\n font-size: 12px;\n color: var(--_text);\n border: 1px solid var(--_input-border);\n border-radius: 4px;\n padding: 4px 8px;\n background: var(--_surface);\n width: 100%;\n box-sizing: border-box;\n}\n.omniscribe_insertion-preview__edit--prose {\n min-height: 60px;\n resize: vertical;\n}\n.omniscribe_insertion-preview__edit--toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: 0;\n padding: 0;\n background: transparent;\n}\n.omniscribe_insertion-preview__edit--multi-enum {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n border: 0;\n padding: 0;\n background: transparent;\n}\n.omniscribe_insertion-preview__edit__chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n border: 1px solid var(--_input-border);\n border-radius: 999px;\n padding: 2px 8px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__edit__chip--on {\n background: var(--_primary);\n color: #fff;\n border-color: var(--_primary);\n}\n.omniscribe_insertion-preview__edit__chip input {\n display: none;\n}\n\n/* Searchable enum select */\n.omniscribe_insertion-preview__searchable-select {\n position: relative;\n width: 100%;\n}\n.omniscribe_insertion-preview__searchable-select__trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n font: inherit;\n font-size: 12px;\n border: 1px solid var(--_input-border);\n border-radius: 4px;\n padding: 4px 8px;\n background: var(--_surface);\n cursor: pointer;\n text-align: left;\n}\n.omniscribe_insertion-preview__searchable-select__chevron {\n color: var(--_text-muted);\n}\n.omniscribe_insertion-preview__searchable-select__dropdown {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 5;\n background: var(--_surface);\n border: 1px solid var(--_input-border);\n border-radius: 4px;\n box-shadow: 0 8px 24px rgba(15, 27, 45, 0.12);\n max-height: 200px;\n display: flex;\n flex-direction: column;\n}\n.omniscribe_insertion-preview__searchable-select__search {\n font: inherit;\n font-size: 12px;\n border: 0;\n border-bottom: 1px solid var(--_border-soft);\n padding: 6px 8px;\n outline: none;\n}\n.omniscribe_insertion-preview__searchable-select__list {\n list-style: none;\n margin: 0;\n padding: 4px 0;\n overflow-y: auto;\n}\n.omniscribe_insertion-preview__searchable-select__option {\n padding: 4px 10px;\n font-size: 12px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__searchable-select__option:hover,\n.omniscribe_insertion-preview__searchable-select__option--selected {\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__searchable-select__option--custom {\n color: var(--_text-muted);\n font-style: italic;\n}\n\n.omniscribe_insertion-preview__row--will-replace {\n background: rgba(199, 119, 0, 0.06);\n}\n.omniscribe_insertion-preview__row-tag {\n font-size: 10px;\n font-weight: 600;\n background: var(--_accent-soft);\n color: var(--_accent);\n padding: 2px 6px;\n border-radius: 999px;\n align-self: flex-start;\n margin-top: 1px;\n}\n\n/* Gaps group */\n.omniscribe_insertion-preview__group--gaps {\n background: var(--_accent-bg);\n border-top: 1px solid var(--_border);\n}\n.omniscribe_insertion-preview__group-name--gap {\n color: var(--_accent);\n}\n.omniscribe_insertion-preview__group-count--gap {\n background: var(--_accent-soft);\n color: var(--_accent);\n}\n.omniscribe_insertion-preview__row--gap {\n grid-template-columns: 18px 1fr;\n cursor: default;\n}\n.omniscribe_insertion-preview__row--gap:hover {\n background: rgba(199, 119, 0, 0.06);\n}\n.omniscribe_insertion-preview__gap-icon {\n color: var(--_accent);\n margin-top: 1px;\n}\n.omniscribe_insertion-preview__row-preview--gap {\n color: var(--_accent);\n}\n\n.omniscribe_insertion-preview__footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 10px 14px;\n border-top: 1px solid var(--_border);\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__btn {\n font: inherit;\n font-size: 12px;\n font-weight: 600;\n border: 1px solid var(--_input-border);\n background: var(--_surface);\n border-radius: 6px;\n padding: 6px 14px;\n cursor: pointer;\n color: var(--_text);\n}\n.omniscribe_insertion-preview__btn--primary {\n background: var(--_primary);\n color: #fff;\n border-color: var(--_primary);\n}\n.omniscribe_insertion-preview__btn--primary:disabled {\n background: #a3b1ad;\n border-color: #a3b1ad;\n cursor: not-allowed;\n}\n\n/* \"Edit with voice\" — secondary action style. Picks up the host's\n --omniscribe-secondary token (falls back to a neutral teal). */\n.omniscribe_insertion-preview__btn--voice {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: var(--_surface);\n color: var(--_primary);\n border-color: var(--_primary);\n}\n.omniscribe_insertion-preview__btn--voice:hover {\n background: var(--_primary-soft);\n}\n.omniscribe_insertion-preview__btn-icon {\n display: inline-block;\n vertical-align: middle;\n flex-shrink: 0;\n}\n.omniscribe_insertion-preview__btn-icon--stop {\n width: 10px;\n height: 10px;\n background: currentColor;\n border-radius: 1px;\n}\n\n/* While recording the voice button morphs into a destructive-styled\n \"Stop\" button so the action reads as final. */\n.omniscribe_insertion-preview__btn--voice-stop {\n background: #dc3545;\n color: #fff;\n border-color: #dc3545;\n}\n.omniscribe_insertion-preview__btn--voice-stop:hover {\n background: #c82333;\n border-color: #c82333;\n}\n\n/* Voice status banner — rendered just under the modal header while the\n chat surface is recording / starting / generating. */\n.omniscribe_insertion-preview__voice-banner {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 14px;\n font-size: 12px;\n border-bottom: 1px solid var(--_border-soft);\n background: var(--_surface-alt);\n color: var(--_text);\n}\n.omniscribe_insertion-preview__voice-banner--recording {\n background: rgba(220, 53, 69, 0.08);\n color: #b21f2c;\n}\n.omniscribe_insertion-preview__voice-banner--generating {\n background: var(--_primary-soft);\n color: var(--_primary-text);\n}\n.omniscribe_insertion-preview__voice-pulse {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n background: #dc3545;\n animation: omniscribe_insertion-preview__pulse 1s ease-in-out infinite;\n flex-shrink: 0;\n}\n@keyframes omniscribe_insertion-preview__pulse {\n 0%,\n 100% {\n opacity: 0.4;\n transform: scale(0.85);\n }\n 50% {\n opacity: 1;\n transform: scale(1.15);\n }\n}\n.omniscribe_insertion-preview__voice-spinner {\n width: 12px;\n height: 12px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: 999px;\n animation: omniscribe_insertion-preview__spin 0.8s linear infinite;\n flex-shrink: 0;\n display: inline-block;\n}\n@keyframes omniscribe_insertion-preview__spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Tiny visual cue on the panel itself while recording. */\n.omniscribe_insertion-preview__panel--voice {\n border-color: rgba(220, 53, 69, 0.4);\n}\n.omniscribe_insertion-preview__close:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n.omniscribe_insertion-preview__footer-spacer {\n flex: 1;\n}\n\n/* Mandatory styling — distinct from the soft amber gap treatment so the\n doctor immediately sees what's blocking. Red border + red pill. */\n.omniscribe_insertion-preview__row--mandatory {\n background: rgba(220, 53, 69, 0.06);\n border-left: 3px solid #dc3545;\n}\n.omniscribe_insertion-preview__row--mandatory\n .omniscribe_insertion-preview__row-preview--gap,\n.omniscribe_insertion-preview__row--mandatory\n .omniscribe_insertion-preview__row-label {\n color: var(--omniscribe-text, #1f2733);\n}\n.omniscribe_insertion-preview__gap-icon--mandatory {\n color: #dc3545;\n}\n.omniscribe_insertion-preview__row-edit-grid--mandatory {\n background: rgba(220, 53, 69, 0.04);\n border-radius: 4px;\n padding: 4px 6px;\n}\n.omniscribe_insertion-preview__mandatory-pill {\n display: inline-block;\n margin-left: 8px;\n padding: 1px 6px;\n font-size: 9.5px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n background: #dc3545;\n color: #fff;\n border-radius: 999px;\n}\n.omniscribe_insertion-preview__sub--blocking {\n color: #dc3545;\n font-weight: 600;\n}\n\n/* AI-suggested field: the agent inferred this from context rather\n than from an explicit doctor statement. We tint the editor\n background so the doctor visually distinguishes it from\n confirmed-from-dictation fields, and a small ✨ pill on the\n label tells them what it means. Less alarming than the\n mandatory-red treatment because the field IS filled — we just\n want the doctor to double-check it. */\n.omniscribe_insertion-preview__row-edit-grid--suggested {\n background: rgba(176, 122, 255, 0.06);\n border-left: 2px solid #b07aff;\n border-radius: 4px;\n padding: 4px 6px;\n}\n.omniscribe_insertion-preview__suggested-pill {\n display: inline-block;\n margin-left: 8px;\n padding: 1px 7px;\n font-size: 9.5px;\n font-weight: 600;\n letter-spacing: 0.03em;\n background: rgba(176, 122, 255, 0.12);\n color: #6f48b8;\n border: 1px solid rgba(176, 122, 255, 0.5);\n border-radius: 999px;\n}\n\n/* SOF-659 — read-only \"Attachments\" section (file previews by type). */\n.omniscribe_insertion-preview__attachments {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.omniscribe_insertion-preview__attachments__list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.omniscribe_insertion-preview__attachment {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 8px;\n overflow: hidden;\n background: rgba(0, 0, 0, 0.02);\n}\n\n.omniscribe_insertion-preview__attachment--image {\n display: block;\n max-width: 100%;\n max-height: 240px;\n object-fit: contain;\n}\n\n.omniscribe_insertion-preview__attachment--audio {\n width: 100%;\n padding: 8px;\n}\n\n.omniscribe_insertion-preview__attachment--pdf {\n width: 100%;\n height: 360px;\n border: none;\n}\n\n.omniscribe_insertion-preview__attachment--text {\n margin: 0;\n padding: 10px 12px;\n max-height: 200px;\n overflow: auto;\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.omniscribe_insertion-preview__attachment--file {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n}\n\n.omniscribe_insertion-preview__attachment__name {\n font-size: 13px;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n/* Source: modules/layout/components/OmniscribeContainer/OmniscribeContainer.css */\n.omniscribe_container {\n isolation: isolate;\n position: fixed;\n bottom: calc(var(--spacing) * 5);\n right: 0;\n border-top-left-radius: 30px;\n border-bottom-left-radius: 30px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n z-index: 80;\n}\n\n[dir='ltr'] .omniscribe_container {\n right: 0;\n border-top-left-radius: 30px;\n border-bottom-left-radius: 30px;\n}\n\n[dir='rtl'] .omniscribe_container {\n left: 0;\n right: auto;\n border-top-right-radius: 30px;\n border-bottom-right-radius: 30px;\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n\n\n/* Source: modules/layout/components/OmniscribeLayout/DraggableCollapsed.css */\n/* Draggable Collapsed Container */\n.omniscribe_draggable-collapsed {\n position: fixed;\n bottom: 20px;\n right: 20px;\n cursor: grab;\n z-index: 9999;\n transition: transform 0.1s ease-out;\n user-select: none;\n touch-action: none;\n}\n\n.omniscribe_draggable-collapsed--dragging {\n cursor: grabbing;\n transition: none;\n}\n\n/* Horizontal mode - rotated 90 degrees */\n.omniscribe_draggable-collapsed--horizontal {\n bottom: 20px;\n}\n\n.omniscribe_draggable-collapsed--horizontal .omniscribe_transcribe-collapsed {\n flex-direction: row;\n transform: none;\n}\n\n/* RTL support */\n[dir='rtl'] .omniscribe_draggable-collapsed {\n right: auto;\n left: 20px;\n}\n\n\n/* Source: modules/layout/components/OmniscribeLayout/OmniscribeLayout.css */\n.omniscribe_layout {\n position: fixed;\n width: var(--layout-w);\n background: var(--white);\n bottom: calc(var(--spacing) * 5);\n border-bottom-left-radius: 12px;\n border: solid 1px var(--omniscribe-border, var(--light-border));\n box-shadow: 0px 4px 4px 0px #00000040;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 500ms;\n transition-property: transform, translate, scale, rotate;\n display: flex;\n flex-direction: column;\n height: var(--layout-h);\n min-width: 500px;\n min-height: 500px;\n right: 0;\n border-radius: 12px;\n}\n\n[dir='rtl'] .omniscribe_layout {\n left: 0;\n right: auto;\n border-bottom-right-radius: 12px;\n}\n\n[dir='ltr'] .omniscribe_layout {\n right: 0;\n border-bottom-left-radius: 12px;\n}\n\n.omniscribe_layout-open {\n background: var(--white);\n translate: 0;\n}\n\n.omniscribe_layout-close {\n translate: var(--layout-w);\n}\n\n[dir='rtl'] .omniscribe_layout-close {\n translate: calc(var(--layout-w) * -1);\n}\n\n[dir='ltr'] .omniscribe_layout-close {\n translate: var(--layout-w);\n}\n\n\n/* Source: modules/settings/components/chat/Chat.css */\n.omniscribe_chat-config {\n display: flex;\n flex-direction: column;\n gap: 24px;\n min-height: 0; /* Permite que los hijos controlen su altura */\n flex: 1; /* Toma el espacio disponible */\n}\n\n/* Espaciado específico para el separador en el contexto de chat */\n.omniscribe_chat-config .omniscribe_separator {\n margin: 8px 0; /* Margen vertical consistente */\n}\n\n.omniscribe_chat-prompt-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-right: 16px;\n}\n\n.omniscribe_chat-prompt-textarea {\n width: 100%;\n height: 74px;\n padding: 8px;\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n line-height: 1.5;\n color: var(--omniscribe-text, #374151);\n background-color: var(--omniscribe-surface, white);\n resize: none;\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.omniscribe_chat-prompt-textarea::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af);\n font-style: italic;\n}\n\n.omniscribe_chat-character-count {\n font-size: 12px;\n color: var(--omniscribe-text-muted, #6b7280);\n align-self: flex-start;\n}\n\n\n/* Source: modules/settings/components/chat/PromptCustomization.css */\n.omniscribe_chat-prompt-title {\n font-size: 14px;\n font-weight: 400;\n color: var(--omniscribe-text, #252a32);\n line-height: 14.4px;\n margin: 0 0 12px 0;\n}\n\n.omniscribe_chat-prompt-container {\n position: relative;\n}\n\n.omniscribe_chat-prompt-textarea {\n width: 100%;\n min-height: 80px;\n padding: 12px;\n border: 1px solid var(--border-color, #ddd);\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.4;\n resize: none;\n transition: border-color 0.2s ease;\n}\n\n.omniscribe_chat-prompt-textarea:focus {\n outline: none;\n border-color: var(--omniscribe-primary, #007bff);\n box-shadow: 0 0 0 2px var(--primary-color-alpha, rgba(0, 123, 255, 0.1));\n}\n\n.omniscribe_chat-character-count {\n font-size: 12px;\n color: var(--text-secondary, #666);\n margin-top: 6px;\n text-align: right;\n}\n\n\n/* Source: modules/settings/components/chat/SourceItem.css */\n.omniscribe_source-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n}\n\n.omniscribe_source-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n /* Let the label shrink inside the row so a long name can wrap instead of\n pushing the row wider. */\n flex: 1;\n min-width: 0;\n}\n\n.omniscribe_source-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--primary, #105bdb);\n cursor: pointer;\n}\n\n.omniscribe_source-name {\n flex: 1;\n min-width: 0;\n /* A source name with no spaces (e.g. a bare domain) has no wrap points, so\n without this it overflows the row. `anywhere` breaks it only when needed. */\n overflow-wrap: anywhere;\n font-size: 12px;\n color: var(--omniscribe-text, #374151);\n}\n/* Removed link styles for source name - now handled by icon button only */\n.omniscribe_source-external-icon {\n width: 12px;\n height: 12px;\n stroke: var(--primary, #105bdb);\n cursor: pointer;\n transition: stroke 0.2s;\n flex-shrink: 0;\n}\n\n.omniscribe_source-external-icon:hover {\n stroke: #0d47a1;\n}\n\n.omniscribe_source-checkbox:checked + .omniscribe_source-name {\n font-weight: 500;\n color: var(--omniscribe-text, #1f2937);\n}\n\n\n/* Source: modules/settings/components/chat/SourceSelector.css */\n.omniscribe_source-selector {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 24px;\n min-height: 0;\n flex: 1;\n max-width: 100%;\n box-sizing: border-box;\n}\n\n.omniscribe_source-selector-title {\n font-size: 16px;\n font-weight: 500;\n color: var(--omniscribe-text, #252a32);\n margin: 0;\n}\n\n.omniscribe_source-selector-description {\n font-size: 14px;\n color: var(--omniscribe-text-muted, #6b7280);\n line-height: 1.5;\n margin: 0;\n}\n\n.omniscribe_source-list {\n width: 100%;\n max-width: 100%;\n min-height: 105px;\n max-height: 285px;\n border-radius: 12px;\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n background: var(--omniscribe-surface, #ffffff);\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n overflow-y: auto;\n flex: 1;\n box-sizing: border-box;\n}\n\n.omniscribe_source-list--compact {\n max-height: 105px;\n}\n\n\n/* Source: modules/settings/section/Configuration.css */\n.omniscribe_config-content {\n width: 650px;\n max-height: 590px;\n opacity: 1;\n background-color: var(--omniscribe-surface, #ffffff);\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\n.omniscribe_config-list {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n.omniscribe_config-item {\n width: 100%;\n height: 75px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n opacity: 1;\n padding: 10px 22px 10px 16px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n box-sizing: border-box;\n flex-shrink: 0;\n}\n\n.omniscribe_config-item:hover {\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n}\n\n.omniscribe_config-item:focus {\n outline: none;\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n}\n\n.omniscribe_config-item:last-child {\n border-bottom: none;\n}\n\n.omniscribe_config-item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n}\n\n.omniscribe_config-icon {\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_config-item-content {\n flex: 1;\n margin-left: 16px;\n margin-right: 16px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 4px;\n}\n\n.omniscribe_config-item-title {\n margin: 0;\n font-weight: 700;\n font-size: 14px;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n color: var(--omniscribe-text, #252a32);\n}\n\n.omniscribe_config-item-description {\n margin: 0;\n font-weight: 500;\n font-size: 14px;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_config-item-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #9ca3af);\n flex-shrink: 0;\n}\n\n/* Sub-screen styles */\n.omniscribe_config-subscreen-header {\n display: flex;\n align-items: center;\n padding: 16px 16px 8px 16px;\n}\n\n.omniscribe_config-back-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n}\n\n.omniscribe_config-subscreen-title {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: var(--omniscribe-text, #252a32);\n line-height: 21.6px;\n}\n\n.omniscribe_config-subscreen-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 16px;\n min-height: 0; /* Permite que los hijos se compriman */\n box-sizing: border-box; /* Incluye padding en el cálculo */\n}\n\n.omniscribe_config-subscreen-content.no-border {\n /* no-border variant */\n}\n\n.omniscribe_config-subscreen-content-template {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 50px;\n}\n\n.omniscribe_config-section-label {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--omniscribe-text, #374151);\n line-height: 1.4;\n}\n\n.omniscribe_config-language-section {\n display: flex;\n flex-direction: column;\n}\n\n/* Audio-environment (VAD) section: titled control with helper text below. */\n.omniscribe_config-audio-env {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 16px;\n}\n\n.omniscribe_config-language-section-title {\n font-size: 16px;\n font-weight: 600;\n color: var(--omniscribe-text, #374151);\n margin-bottom: 8px;\n}\n\n.omniscribe_config-subscreen-description,\n.omniscribe_config-subscreen-subdescription {\n margin: 0 0 0 0;\n font-size: 14px;\n line-height: 18px;\n color: var(--omniscribe-text, #13161a);\n font-weight: 400;\n}\n\n.omniscribe_config-subscreen-subdescription {\n font-style: italic;\n}\n/* Dictionary Options View Styles */\n.omniscribe_config-dictionary-section {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.omniscribe_config-dictionary-add-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.omniscribe_config-dictionary-input-row {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n.omniscribe_config-dictionary-input {\n height: 32px;\n border: 1px solid var(--omniscribe-border, #e5e8eb) !important;\n border-radius: 8px !important;\n padding: 0 12px !important;\n font-size: 14px !important;\n line-height: 1.4 !important;\n background-color: var(--omniscribe-surface, #ffffff) !important;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease !important;\n}\n\n.omniscribe_config-dictionary-input:focus {\n outline: none !important;\n border-color: #4f46e5 !important;\n box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1) !important;\n}\n\n.omniscribe_config-dictionary-input::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af) !important;\n font-size: 14px !important;\n}\n\n.omniscribe_config-dictionary-input.error {\n border-color: #dc3545 !important;\n background-color: #fff5f5 !important;\n}\n\n.omniscribe_config-dictionary-input.error:focus {\n border-color: #dc3545 !important;\n box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.1) !important;\n}\n\n.omniscribe_config-dictionary-add-btn {\n width: 32px;\n height: 32px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--primary);\n border: 1px solid var(--primary);\n border-radius: 8px;\n color: var(--primary-foreground);\n cursor: pointer;\n transition: all 0.2s ease;\n margin-top: 0;\n font-size: 0;\n}\n\n.omniscribe_config-dictionary-add-btn:hover:not(:disabled) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n border-color: color-mix(in oklab, var(--primary) 90%, transparent);\n}\n\n.omniscribe_config-dictionary-add-btn:disabled {\n background-color: #e5e8eb;\n border-color: var(--omniscribe-border, #e5e8eb);\n color: var(--omniscribe-text-muted, #9ca3af);\n cursor: not-allowed;\n transform: none;\n box-shadow: none;\n}\n\n.omniscribe_config-dictionary-list {\n display: flex;\n padding-top: 16px;\n flex-direction: column;\n gap: 8px;\n max-height: 410px;\n overflow-y: auto;\n margin-top: 4px;\n}\n\n.omniscribe_config-dictionary-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 1px solid var(--omniscribe-border, #e5e8eb);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.omniscribe_config-dictionary-row:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n border-color: var(--omniscribe-border, #d1d5db);\n}\n\n.omniscribe_config-dictionary-cell {\n flex: 1;\n font-size: 14px;\n line-height: 20px;\n color: var(--omniscribe-text, #374151);\n word-break: break-word;\n font-weight: 500;\n}\n\n.omniscribe_config-dictionary-arrow {\n color: var(--omniscribe-text-muted, #9ca3af);\n font-size: 16px;\n font-weight: 600;\n flex-shrink: 0;\n margin: 0 4px;\n}\n\n.omniscribe_config-dictionary-delete-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 6px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #6b7280);\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.omniscribe_config-dictionary-delete-btn:hover {\n background-color: #fee2e2;\n color: #dc2626;\n transform: scale(1.05);\n}\n\n.omniscribe_config-dictionary-empty {\n padding: 40px 16px;\n margin-top: 16px;\n text-align: center;\n color: var(--omniscribe-text-muted, #6b7280);\n font-size: 14px;\n line-height: 20px;\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 2px dashed var(--omniscribe-border, #e5e8eb);\n border-radius: 12px;\n font-style: italic;\n}\n\n/* Template specific styles */\n\n/* General prompt section */\n.omniscribe_template-general-prompt-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-bottom: 8px;\n}\n\n.omniscribe_template-section-title {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--omniscribe-text, #374151);\n line-height: 1.4;\n}\n\n.omniscribe_template-section-subtitle {\n margin: 0;\n font-size: 13px;\n font-weight: 400;\n color: var(--omniscribe-text-muted, #6b7280);\n line-height: 1.4;\n}\n\n.omniscribe_template-general-prompt-textarea {\n width: 100%;\n min-height: 80px;\n max-height: 200px;\n padding: 12px;\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n line-height: 1.5;\n color: var(--omniscribe-text, #374151);\n background-color: var(--omniscribe-surface, white);\n resize: vertical;\n box-sizing: border-box;\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.omniscribe_template-general-prompt-textarea::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af);\n font-style: italic;\n}\n\n.omniscribe_template-general-prompt-textarea:focus {\n border-color: #3b5edb;\n box-shadow: 0 0 0 3px rgba(59, 94, 219, 0.1);\n}\n\n/* Fields section */\n.omniscribe_template-fields-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-top: 8px;\n}\n\n.omniscribe_template-field {\n background: var(--omniscribe-surface, white);\n border-bottom: 1px solid var(--omniscribe-border, #e1e8ed);\n margin-bottom: 0;\n}\n\n.omniscribe_template-field:last-child {\n border-bottom: none;\n}\n\n.omniscribe_template-field-header {\n display: flex;\n align-items: center;\n padding: 12px 0;\n background: var(--omniscribe-surface, #ffffff);\n}\n\n.omniscribe_template-field-checkbox {\n background: none;\n border: none;\n padding: 0;\n margin-right: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.omniscribe_template-field-label {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text, #2c3e50);\n}\n\n.omniscribe_template-field-prompt-btn {\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: background-color 0.2s ease;\n flex-shrink: 0;\n}\n\n.omniscribe_template-field-prompt-btn:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n}\n\n.omniscribe_template-field-content {\n padding: 0 0 12px 34px;\n background: var(--omniscribe-surface, white);\n}\n\n.omniscribe_template-textarea {\n width: 100%;\n min-height: 80px;\n max-height: 300px;\n padding: 12px;\n border: 1px solid var(--omniscribe-border, #e1e8ed);\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n resize: vertical;\n background: var(--omniscribe-surface, white);\n box-sizing: border-box;\n overflow-y: auto;\n}\n\n.omniscribe_template-textarea:focus {\n outline: none;\n border-color: #3b5edb;\n box-shadow: 0 0 0 3px rgba(59, 94, 219, 0.1);\n}\n\n.omniscribe_template-character-count {\n margin-top: 8px;\n font-size: 12px;\n color: var(--omniscribe-text-muted, #95a5a6);\n display: flex;\n}\n\n/* Template fields container */\n.omniscribe_template-fields {\n display: flex;\n flex-direction: column;\n background: var(--omniscribe-surface, white);\n}\n\n/* Improved scrollbar for template fields */\n.omniscribe_template-fields::-webkit-scrollbar {\n width: 6px;\n}\n\n.omniscribe_template-fields::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n}\n\n.omniscribe_template-fields::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n}\n\n.omniscribe_template-fields::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n.omniscribe_config-version-section {\n background: var(--omniscribe-surface-alt, #f6f7f9);\n color: var(--omniscribe-text-muted, #4a5364);\n padding: 8px 24px;\n font-weight: 700;\n line-height: 16.8px;\n font-size: 14px;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px;\n}\n\n\n/* Source: modules/transcription/components/audio-visualizer/AudioVisualizer.css */\n.omniscribe_audio-visualizer-container {\n display: flex;\n border-radius: var(--radius-md);\n width: calc(var(--spacing) * 60);\n align-items: center;\n justify-content: center;\n height: 60px;\n background: transparent;\n overflow: hidden;\n}\n\n.omniscribe_audio-visualizer-subcontainer {\n display: flex;\n align-items: center;\n justify-content: space-evenly;\n width: 100%;\n height: 100%;\n}\n\n.omniscribe_audio-visualizer-item-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding-inline: 1px;\n margin-top: 0.25rem;\n}\n\n.omniscribe_audio-visualizer-item {\n width: 2px;\n height: 2px;\n background-color: rgba(48, 54, 68, 0.85);\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 50ms;\n}\n\n.lk-audio-bar-visualizer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n background: var(--lk-bg);\n gap: var(--lk-va-bar-gap, 24px);\n}\n.lk-audio-bar-visualizer > .lk-audio-bar {\n transform-origin: 'center';\n height: 100%;\n width: var(--lk-va-bar-width, 12px);\n border-radius: var(--lk-va-bar-border-radius, 32px);\n background-color: var(--lk-va-bar-bg, rgba(136, 136, 136, 0.2));\n transition: background-color 0.25s ease-out;\n}\n.lk-audio-bar-visualizer[data-lk-va-state='speaking'] > .lk-audio-bar,\n.lk-audio-bar-visualizer > .lk-audio-bar.lk-highlighted,\n.lk-audio-bar-visualizer > [data-lk-highlighted='true'] {\n background-color: var(--lk-fg, rgb(136, 136, 136));\n transition: none;\n}\n.lk-audio-bar-visualizer[data-lk-va-state='thinking'] {\n transition: background-color 0.15s ease-out;\n}\n\n\n/* Source: modules/transcription/components/content-container/content-containter.css */\n.omniscribe_audio-content-container {\n background-color: var(--white);\n width: -webkit-fill-available;\n flex: 1 1 0 !important;\n min-height: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n overflow: hidden !important;\n}\n\n.omniscribe_audio-content-messages {\n color: var(--black);\n}\n\n.omniscribe_transcription-footer-container {\n position: sticky;\n display: flex;\n flex-direction: column;\n align-items: center;\n bottom: 0;\n padding-bottom: calc(var(--spacing) * 3);\n}\n\n.omniscribe_audio-content-render {\n color: var(--black);\n font-weight: var(--font-weight-medium);\n padding-block: 0.5rem;\n padding-inline: 0.75rem;\n margin-bottom: 0.25rem;\n}\n\n.omniscribe_patient {\n color: #db10c1;\n padding-right: 0.5rem;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n}\n\n.omniscribe_doctor {\n color: var(--blue-500);\n padding-right: 0.5rem;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n}\n\n.omniscribe_speaker {\n color: #28a745;\n padding-right: 0.5rem;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n}\n\n.omniscribe_transcription {\n color: var(--black);\n}\n\n.omniscribe_transcription-down-btn-container {\n background-color: var(--omniscribe-surface, white);\n}\n\n.omniscribe_transcription-down-btn {\n width: calc(0.25rem /* 4px */ * 4);\n height: calc(0.25rem /* 4px */ * 4);\n}\n\n/* Chrome, Safari, Edge (Webkit) */\n.omniscribe_audio-content-container > div::-webkit-scrollbar {\n width: 6px !important;\n}\n\n.omniscribe_audio-content-container > div::-webkit-scrollbar-thumb {\n border-radius: 10px !important;\n background-color: var(--omni-secondary) !important;\n}\n\n.omniscribe_audio-content-container > div::-webkit-scrollbar-track {\n background-color: transparent !important;\n}\n\n/* Firefox */\n.omniscribe_audio-content-container > div {\n scrollbar-width: thin !important;\n scrollbar-color: var(--omni-secondary) transparent !important;\n}\n\n/* Processing skeleton indicator */\n.omniscribe_transcription-processing {\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-processing-lines {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-skeleton-line {\n height: 14px;\n width: 70%;\n}\n\n.omniscribe_transcription-skeleton-line--short {\n width: 40%;\n}\n\n.omniscribe_transcription-processing-text {\n font-size: var(--text-xs);\n color: var(--omni-secondary, #6b7280);\n}\n\n\n/* Source: modules/transcription/components/recorder-counter/RecorderCounter.css */\n.omniscribe_audio-recorder-timer {\n color: var(--blue-500);\n font-weight: 600; /* SemiBold */\n font-style: normal; /* SemiBold is a weight, not a style */\n font-size: var(--font-size-400); /* design token */\n line-height: var(--line-height-400); /* design token */\n letter-spacing: 0;\n text-align: center;\n}\n\n\n/* Source: modules/transcription/components/toggle-record/ToggleRecord.css */\n.omniscribe_record-button-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.omniscribe_record-button-classname {\n background-color: transparent;\n border: none;\n padding: 4px;\n}\n\n.omniscribe_record-button {\n background-color: var(--primary-button);\n border-radius: 50%;\n cursor: pointer;\n width: 56px;\n height: 56px;\n align-items: center;\n justify-content: center;\n display: flex;\n transition-duration: 300ms;\n box-shadow:\n inset 0 2px 4px rgb(0 0 0 / 0.05),\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n\n.omniscribe_record-button-enabled {\n opacity: 100%;\n pointer-events: auto;\n scale: 110%;\n &:hover {\n scale: 150%;\n }\n}\n.omniscribe_record-button-not-enabled {\n opacity: 50%;\n &:hover {\n scale: 150%;\n }\n}\n.omniscribe_record-button-disabled {\n opacity: 50%;\n background-color: dimgray;\n pointer-events: none;\n}\n\n.omniscribe_record-enabled {\n width: 50px;\n height: 50px;\n background-color: var(--primary-button);\n animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n position: absolute;\n z-index: -1;\n border-radius: calc(infinity * 1px);\n opacity: 100%;\n}\n\n@keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n\n/* Source: modules/transcription/section/AudioRecorder.css */\n.omniscribe_audio-recorder {\n align-items: center;\n padding-block: calc(var(--spacing) * 5);\n border-bottom-left-radius: 12px;\n background-color: var(--white);\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n\n[dir='ltr'] .omniscribe_audio-recorder {\n border-bottom-left-radius: 12px;\n}\n\n[dir='rtl'] .omniscribe_audio-recorder {\n border-bottom-right-radius: 12px;\n border-bottom-left-radius: 0px;\n}\n\n.omniscribe_audio-recorder-container {\n display: flex;\n align-items: center;\n border: solid 1px var(--light-border);\n background-color: var(--white);\n max-height: 42px;\n border-radius: 9999px;\n border-width: 1px;\n justify-content: space-between;\n margin-bottom: 5px;\n flex: 1;\n align-self: stretch;\n margin-inline: calc(var(--spacing) * 4);\n padding-inline: calc(var(--spacing) * 2);\n}\n\n.omniscribe_audio-recorder-audio-container {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: center;\n}\n\n.omniscribe_audio-recorder-refresh-btn {\n cursor: pointer;\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n border-radius: 100px;\n transition:\n transform 0.3s ease,\n opacity 0.3s ease,\n background-color 0.3s ease;\n transform: scale(1);\n}\n.omniscribe_audio-recorder-refresh-btn-enabled {\n pointer-events: auto;\n opacity: 1;\n\n &:hover {\n transform: scale(1.15);\n }\n}\n.omniscribe_audio-recorder-refresh-btn-disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n.omniscribe_audio-recorder-audio-content-container {\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n border-radius: 8px;\n margin-top: 18px;\n padding-top: 8px;\n padding-inline: calc(var(--spacing) * 4);\n padding-bottom: 8px;\n align-self: stretch;\n margin-inline: calc(var(--spacing) * 4);\n}\n.omniscribe_audio-recorder-footer {\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n padding-top: 16px;\n margin-top: 12px;\n display: flex;\n width: 100%;\n}\n.omniscribe_audio-recorder-footer-content {\n padding-inline: calc(var(--spacing) * 4);\n width: 100%;\n justify-content: space-between;\n align-items: center;\n display: flex;\n}\n.omniscribe_audio-recorder-audio-info {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n color: var(--omniscribe-text-muted, #6f7d95);\n padding-block: 8px;\n}\n\n.omniscribe_audio-recorder-audio-star-icons {\n display: flex;\n justify-content: center;\n gap: 4px;\n}\n\n.omniscribe_audio-recorder-audio-feedback {\n color: var(--omniscribe-text-muted, #a4adbc);\n}\n\n.omniscribe_audio-recorder-refresh-icon {\n color: var(--omniscribe-text, #252a32);\n}\n\n.omniscribe_audio-recorder-star-icon {\n cursor: pointer;\n display: inline-block;\n}\n\n\n/* Source: shared/components/ActivationGuardDialog.css */\n/* The shared Modal overlay is absolutely positioned against its nearest\n positioned ancestor, which for this dialog is wherever the provider happens\n to sit in the tree. Force fixed so it centers over the viewport. */\n.omniscribe_modal-overlay:has(.omniscribe_activation-guard-modal) {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n.omniscribe_activation-guard-modal {\n width: 480px;\n max-width: 90vw;\n padding: 24px !important;\n}\n\n/* Override Modal's default h2 size for this dialog. */\n.omniscribe_activation-guard-modal .omniscribe_modal-title-container {\n margin-bottom: 16px;\n align-items: flex-start;\n}\n\n.omniscribe_activation-guard-modal .omniscribe_modal-title {\n font-size: 18px;\n line-height: 1.3;\n font-weight: 700;\n letter-spacing: -0.01em;\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_activation-guard-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.omniscribe_activation-guard-summary {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.omniscribe_activation-guard-summary-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n border-radius: 9999px;\n background-color: #fef3c7;\n color: #b45309;\n}\n\n.omniscribe_activation-guard-summary-text {\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--color-gray-800, #1f2937);\n flex: 1;\n}\n\n.omniscribe_activation-guard-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 16px;\n margin-top: 4px;\n}\n\n.omniscribe_activation-guard-secondary {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px 12px;\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #374151);\n border-radius: 9999px;\n transition: background-color 0.15s ease;\n}\n\n.omniscribe_activation-guard-secondary:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_activation-guard-primary {\n border-radius: 9999px !important;\n gap: 8px;\n padding-block: 10px !important;\n padding-inline: 18px !important;\n height: auto !important;\n font-weight: 600;\n}\n\n\n/* Source: shared/components/Card.css */\n.omniscribe_card {\n background-color: var(--color-card, #ffffff);\n color: var(--color-card-foreground, #000000);\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n border-radius: 0.75rem;\n border: 1px solid var(--color-border, var(--grey-200));\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n}\n\n.omniscribe_card-header {\n container-type: inline-size;\n container-name: card-header;\n display: grid;\n grid-auto-rows: min-content;\n grid-template-rows: auto auto;\n align-items: start;\n gap: 0.375rem;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n/* When card-header has card-action, adjust grid layout */\n.omniscribe_card-header:has([data-slot='card-action']) {\n grid-template-columns: 1fr auto;\n}\n\n/* When card-header has border-b class, add padding bottom */\n.omniscribe_card-header.border-b {\n padding-bottom: 1.5rem;\n}\n\n.omniscribe_card-title {\n line-height: 1;\n font-weight: 600;\n}\n\n.omniscribe_card-description {\n color: var(--color-muted-foreground, #6b7280);\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n.omniscribe_card-action {\n grid-column-start: 2;\n grid-row: span 2 / span 2;\n grid-row-start: 1;\n align-self: start;\n justify-self: end;\n}\n\n.omniscribe_card-content {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n.omniscribe_card-footer {\n display: flex;\n align-items: center;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n.omniscribe_card-footer.border-t {\n padding-top: 1.5rem;\n}\n\n\n/* Source: shared/components/app-skeleton.css */\n.omniscribe_app-skeleton {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--white);\n border-radius: 12px;\n}\n\n/* Header */\n.omniscribe_app-skeleton-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_app-skeleton-header-left,\n.omniscribe_app-skeleton-header-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.omniscribe_app-skeleton-icon {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n}\n\n.omniscribe_app-skeleton-title {\n width: 48px;\n height: 20px;\n border-radius: 4px;\n}\n\n.omniscribe_app-skeleton-badge {\n width: 150px;\n height: 32px;\n border-radius: 99999px;\n}\n\n/* Disclaimer banner */\n.omniscribe_app-skeleton-banner {\n padding: 6px 16px;\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_app-skeleton-banner-text {\n width: 100%;\n height: 16px;\n border-radius: 4px;\n}\n\n/* Content */\n.omniscribe_app-skeleton-content {\n flex: 1;\n padding: 20px;\n}\n\n.omniscribe_app-skeleton-welcome {\n width: 240px;\n height: 28px;\n border-radius: 4px;\n margin-bottom: 10px;\n}\n\n.omniscribe_app-skeleton-suggestions {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.omniscribe_app-skeleton-suggestion {\n height: 25px;\n border-radius: 99999px;\n}\n\n.omniscribe_app-skeleton-suggestion--long {\n width: 320px;\n}\n\n.omniscribe_app-skeleton-suggestion--longer {\n width: 380px;\n}\n\n.omniscribe_app-skeleton-suggestion--medium {\n width: 280px;\n}\n\n/* Bottom bar */\n.omniscribe_app-skeleton-bottom {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_app-skeleton-transcribe-btn {\n width: 140px;\n height: 40px;\n border-radius: 99999px;\n flex-shrink: 0;\n}\n\n.omniscribe_app-skeleton-input {\n flex: 1;\n height: 40px;\n border-radius: 99999px;\n}\n\n\n/* Source: shared/components/button.css */\n.omniscribe_button {\n border: none;\n background: transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: calc(var(--spacing) * 2);\n transition-property: color, box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n outline-style: none;\n /* Enabled buttons must show the pointer affordance; the base rule never set\n it, so variants without their own cursor (e.g. outline, used by the chat\n mic button) rendered the default arrow. `:disabled` below overrides it. */\n cursor: pointer;\n &:disabled {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 50%;\n }\n & svg {\n pointer-events: none;\n flex-shrink: 0;\n }\n & svg:not([class*='size-svg']) {\n width: calc(var(--spacing) * 4) /* 1rem = 16px */;\n height: calc(var(--spacing) * 4) /* 1rem = 16px */;\n }\n &:focus-visible {\n border-color: var(--ring);\n box-shadow: 0 0 0 calc(3px + var(--tw-ring-offset-width))\n color-mix(in oklab, var(--ring) 50%, transparent);\n }\n &[aria-invalid='true'] {\n border-color: var(--destructive);\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n}\n\n.omniscribe_button-variant-default {\n background-color: var(--primary);\n color: var(--primary-foreground);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n}\n.omniscribe_button-variant-destructive {\n background-color: var(--destructive);\n color: var(--white);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n &:focus-visible {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n}\n.omniscribe_button-variant-outline {\n border: solid 1px var(--input);\n background-color: var(--background);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: var(--accent);\n color: var(--accent-foreground);\n }\n}\n.omniscribe_button-variant-icon {\n align-items: center;\n border-radius: 100%;\n padding: 10px;\n & svg {\n pointer-events: auto;\n flex-shrink: 0;\n }\n & svg:not([class*='size-svg']) {\n width: auto;\n height: auto;\n }\n}\n.omniscribe_button-variant-secondadry {\n background-color: var(--secondary);\n pointer-events: cursor;\n cursor: pointer;\n color: var(--secondary-foreground);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: var(--secondary-hover) !important;\n }\n &:disabled {\n background-color: var(--omniscribe-surface-alt, #edeff2);\n cursor: not-allowed;\n color: var(--omniscribe-text-muted, #d5d9e0);\n }\n}\n.omniscribe_button-variant-ghost:hover {\n background-color: var(--accent);\n color: var(--accent-foreground);\n}\n.omniscribe_button-variant-empty {\n cursor: pointer;\n}\n.omniscribe_button-variant-primary {\n cursor: pointer;\n background-color: var(--primary-button);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n font-size: 16px !important;\n color: var(--white);\n &:hover {\n background-color: color-mix(\n in oklab,\n var(--primary-button) 60%,\n transparent\n );\n }\n}\n.omniscribe_button-size-default {\n height: calc(var(--spacing) * 9);\n padding-inline: calc(var(--spacing) * 4);\n padding-block: calc(var(--spacing) * 2);\n &:has(> svg) {\n padding-inline: calc(var(--spacing) * 3) /* 0.75rem = 12px */;\n }\n}\n.omniscribe_button-size-sm {\n height: calc(var(--spacing) * 8);\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n gap: calc(var(--spacing) * 1.5) /* 0.375rem = 6px */;\n padding-inline: calc(var(--spacing) * 3);\n &:has(> svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n}\n\n.omniscribe_button-size-lg {\n height: calc(var(--spacing) * 10);\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n padding-inline: calc(var(--spacing) * 6);\n &:has(> svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n}\n\n.omniscribe_button-size-icon {\n height: calc(var(--spacing) * 5);\n width: calc(var(--spacing) * 5);\n}\n.omniscribe_button-size-padding {\n padding: calc(var(--spacing) * 2);\n min-width: calc(var(--spacing) * 40);\n}\n\n.omniscribe_button-text {\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height);\n}\n.omniscribe_button-whitespace {\n white-space: nowrap;\n}\n.omniscribe_button-rounded {\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n}\n.omniscribe_button-disabled {\n pointer-events: none;\n}\n.omniscribe_button-loading {\n opacity: 50%;\n}\n.omniscribe_button-animate-spin {\n animation: spin 1s linear infinite;\n}\n.omniscribe_button-variant-report {\n cursor: pointer;\n background-color: var(--report);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n font-size: 16px;\n color: var(--white);\n &:hover {\n background-color: color-mix(in oklab, var(--report) 60%, transparent);\n }\n}\n\n\n/* Source: shared/components/feedback-modal.css */\n.omniscribe_feedback-modal {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n background: var(--omniscribe-surface, white);\n border: 1px solid var(--omniscribe-border, #e2e8f0);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n margin-top: 8px;\n min-width: 200px;\n width: 200px;\n transform-origin: top left;\n}\n\n.omniscribe_feedback-input-container {\n position: relative;\n display: flex;\n align-items: flex-end;\n border: 1px solid var(--omniscribe-border, #d1d5db);\n border-radius: 8px;\n}\n\n.omniscribe_feedback-textarea {\n flex: 1;\n border: transparent;\n border-radius: 8px;\n padding: 12px 12px 12px 12px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.2s;\n resize: none;\n min-height: 20px;\n max-height: 200px;\n overflow-y: auto;\n font-family: inherit;\n line-height: 1.4;\n width: 100%;\n box-sizing: border-box;\n}\n.omniscribe_feedback-textarea-padding {\n margin-bottom: 34px;\n padding-bottom: 0px !important;\n}\n\n.omniscribe_feedback-icons {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_feedback-icons:has(.omniscribe_feedback-send) {\n bottom: 8px;\n top: auto;\n transform: none;\n}\n\n.omniscribe_feedback-close {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #6b7280);\n transition:\n background-color 0.2s,\n color 0.2s;\n}\n\n.omniscribe_feedback-close:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--omniscribe-text, #374151);\n}\n\n.omniscribe_feedback-close svg {\n width: 12px;\n height: 12px;\n}\n\n.omniscribe_feedback-send {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--blue-500);\n transition:\n background-color 0.2s,\n color 0.2s;\n}\n\n.omniscribe_feedback-send:hover {\n background-color: #f0f7ff;\n color: #0d47a1;\n}\n\n.omniscribe_feedback-send svg {\n width: 12px;\n height: 12px;\n}\n\n.omniscribe_feedback-confirmation {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n background: var(--omniscribe-surface, white);\n color: var(--omniscribe-text, black);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 8px 0px;\n margin-top: 8px;\n min-width: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 500;\n animation: fadeInOut 3s ease-in-out;\n}\n\n.omniscribe_feedback-confirmation-icon {\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n}\n\n/* Right-positioned modal styles */\n.omniscribe_feedback-modal-right {\n position: absolute;\n top: 7px;\n left: 17%;\n z-index: 10000;\n background: var(--omniscribe-surface, white);\n border: 1px solid var(--omniscribe-border, #e2e8f0);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n margin-left: 8px;\n width: 200px;\n transform-origin: bottom left;\n}\n\n.omniscribe_feedback-sending-center {\n top: 100%;\n left: 0;\n}\n\n.omniscribe_feedback-sending-right {\n top: 20px;\n left: 17%;\n}\n\n.omniscribe_feedback-sending {\n position: absolute;\n z-index: 10000;\n background: var(--omniscribe-surface, white);\n color: var(--omniscribe-text, black);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 8px 0px;\n margin-left: 8px;\n min-width: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 500;\n}\n.omniscribe_feedback-confirmation-right {\n position: absolute;\n top: 20px;\n left: 17%;\n z-index: 10000;\n background: var(--omniscribe-surface, white);\n color: var(--omniscribe-text, black);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 8px 0px;\n margin-left: 8px;\n min-width: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 500;\n animation: fadeInOut 3s ease-in-out;\n}\n\n@keyframes fadeInOut {\n 0% {\n opacity: 0;\n transform: translateY(-10px);\n }\n 10% {\n opacity: 1;\n transform: translateY(0);\n }\n 90% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(-10px);\n }\n}\n\n\n/* Source: shared/components/input.css */\n.omniscribe_input {\n height: calc(var(--spacing) * 9);\n width: 100%;\n display: flex;\n border-radius: calc(var(--radius));\n border: solid 1px var(--input);\n background-color: transparent;\n padding-inline: calc(var(--spacing) * 3);\n padding-block: calc(var(--spacing) * 1);\n font-size: var(--text-base) /* 1rem = 16px */;\n line-height: var(--text-base--line-height);\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n transition-property: color, box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n outline-style: none;\n &::file-selector-button {\n color: var(--foreground);\n display: inline-flex;\n height: calc(var(--spacing) * 7);\n border: none;\n background-color: transparent;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height);\n font-weight: var(--font-weight-medium);\n }\n &::placeholder {\n color: var(--muted-foreground);\n }\n &::selection {\n background-color: var(--primary);\n color: var(--primary-foreground);\n }\n &:disabled {\n pointer-events: none;\n cursor: not-allowed;\n opacity: 50%;\n }\n &[aria-invalid='true'] {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n border-color: var(--destructive);\n }\n @media (width >= 48rem /* 768px */) {\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */;\n }\n}\n\n.omniscribe_input-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n\n.omniscribe_input.invalid {\n border-color: #dc3545;\n background-color: #fff5f5;\n box-shadow: 0 0 0 0.125rem rgba(220, 53, 69, 0.25);\n}\n\n.omniscribe_input-error {\n color: #dc3545;\n font-size: 10px;\n margin-block: 0.25rem;\n display: block;\n line-height: 1;\n}\n\n\n/* Source: shared/components/loading-modal.css */\n.omniscribe_loading-modal-container {\n position: absolute;\n background-color: color-mix(in oklab, var(--black) 50%, transparent);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 50;\n height: 100vh;\n width: 100vw;\n right: 0;\n bottom: calc(var(--spacing) * -5.2);\n}\n.omniscribe_loading-modal-subcontainer {\n background-color: var(--white);\n padding: calc(var(--spacing) * 8);\n border-radius: var(--radius);\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n text-align: center;\n max-width: var(--container-md);\n}\n.omniscribe_loading-modal-msg {\n font-size: var(--text-xl) /* 1.25rem = 20px */;\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-bold);\n margin-bottom: calc(var(--spacing) * 4);\n}\n.omniscribe_loading-modal-spin {\n display: inline-block;\n width: calc(var(--spacing) * 12);\n height: calc(var(--spacing) * 12);\n border: solid 4px var(--color-gray-200);\n border-top-color: var(--blue-500);\n border-radius: calc(infinity * 1px);\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.omniscribe_app-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n flex: 1;\n}\n\n\n/* Source: shared/components/modal.css */\n.omniscribe_modal-overlay {\n position: absolute;\n background-color: color-mix(in oklab, var(--black) 50%, transparent);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 50;\n height: 100vh;\n width: 100vw;\n right: 0;\n bottom: calc(var(--spacing) * -5.2);\n}\n\n.omniscribe_modal-container {\n position: relative;\n background-color: var(--white);\n z-index: 100;\n border-radius: 12px;\n border: solid 1px var(--light-border);\n box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n padding: calc(var(--spacing) * 5);\n transition-duration: 300ms;\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n max-width: 90vw;\n max-height: 90vh;\n}\n.omniscribe_modal-container-scroll {\n overflow: auto;\n}\n\n.omniscribe_modal-container-show {\n opacity: 100%;\n}\n\n.omniscribe_modal-container-hide {\n opacity: 0%;\n}\n\n.omniscribe_modal-subcontainer {\n display: flex;\n flex-direction: column;\n}\n\n.omniscribe_modal-title-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-bottom: calc(var(--spacing) * 2);\n}\n\n.omniscribe_modal-title {\n font-size: var(--text-3xl); /* 1.875rem = 30px */\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-bold);\n margin: 0;\n}\n\n.omniscribe_modal-button {\n border: none;\n background: transparent;\n line-height: var(--text-2xl--line-height);\n cursor: pointer;\n color: var(--black);\n}\n\n@media (min-width: 768px) {\n .omniscribe_modal-container {\n max-width: 60vw;\n }\n}\n\n/* Large screens: desktop */\n@media (min-width: 1024px) {\n .omniscribe_modal-container {\n max-width: 50vw;\n }\n}\n\n/* Very large screens: large desktop and ultra-wide */\n@media (min-width: 1440px) {\n .omniscribe_modal-container {\n max-width: 40vw;\n }\n}\n\n/* Intermediate breakpoint: large tablets */\n@media (min-width: 640px) and (max-width: 767px) {\n .omniscribe_modal-container {\n max-width: 70vw;\n }\n}\n\n\n/* Source: shared/components/select.css */\n.omniscribe_select-container {\n position: relative;\n width: 100%;\n padding-block: calc(var(--spacing) * 3);\n}\n.omniscribe_select-button {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: calc(var(--spacing) * 3);\n background-color: var(--white);\n border-radius: var(--Radius-radius-medium, 8px);\n border: solid 1px var(--omniscribe-border, var(--light-border));\n cursor: pointer;\n}\n.omniscribe_select-button:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.omniscribe_select-text {\n display: flex;\n align-items: center;\n gap: calc(var(--spacing) * 2);\n}\n.omniscribe_select-content-container {\n position: absolute;\n width: 100%;\n margin-top: calc(var(--spacing) * 2);\n border: solid 1px var(--omniscribe-border, var(--light-border));\n background-color: var(--white);\n border-radius: var(--radius);\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n bottom: calc(var(--spacing) * 15);\n padding-inline: calc(var(--spacing) * 1);\n padding-block: calc(var(--spacing) * 0.5);\n z-index: 9999;\n}\n.omniscribe_select-content-ul {\n overflow-y: scroll;\n max-height: calc(var(--spacing) * 44);\n padding-inline: 5px;\n}\n.omniscribe_select-content-li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: calc(var(--spacing) * 3);\n cursor: pointer;\n &:hover {\n @media (hover: hover) {\n background-color: var(--omniscribe-surface-alt, var(--color-gray-100));\n }\n }\n}\n.omniscribe_select-check-icon {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n color: var(--color-slate-500) /* oklch(55.4% 0.046 257.417) = #62748e */;\n}\n.omniscribe_select-content-li-span {\n display: flex;\n align-items: center;\n gap: calc(0.25rem /* 4px */ * 2);\n}\n\n\n/* Source: shared/components/separator.css */\n/* Separator Component Styles */\n.omniscribe_separator {\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n flex-shrink: 0;\n}\n\n.omniscribe_separator--horizontal {\n height: 0;\n width: 100%;\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n border-right: none;\n border-bottom: none;\n border-left: none;\n}\n\n.omniscribe_separator--vertical {\n width: 0;\n height: 100%;\n border-left: 1px solid var(--omniscribe-border, #e5e7ec);\n border-top: none;\n border-right: none;\n border-bottom: none;\n}\n\n\n/* Source: shared/components/skeleton.css */\n.omniscribe_skeleton {\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n}\n\n\n/* Source: shared/components/textarea.css */\n.omniscribe_textarea-default {\n display: flex;\n min-height: calc(var(--spacing) * 16);\n width: -webkit-fill-available;\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n border: solid 1px var(--input);\n background-color: transparent;\n padding-inline: calc(var(--spacing) * 3);\n padding-block: calc(var(--spacing) * 2);\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n transition-property: color, box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n &::placeholder {\n color: var(--muted-foreground);\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height);\n }\n &:focus-visible {\n border-color: var(--ring);\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n box-shadow: var(--tw-ring-inset,) 0 0 0\n calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);\n }\n &[aria-invalid='true'] {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n border-color: var(--destructive);\n }\n &:disabled {\n cursor: not-allowed;\n opacity: 50%;\n }\n}\n\n.omniscribe_textarea-secondary {\n padding: calc(var(--spacing) * 3.5);\n padding-bottom: calc(var(--spacing) * 0);\n border-style: none;\n background-color: transparent;\n resize: none;\n &:focus {\n outline-style: none;\n }\n}\n.omniscribe_textarea-general {\n font-family: 'Lato', sans-serif;\n font-size: var(--font-size-100);\n outline: none;\n}\n\n\n/* Source: shared/components/toast.css */\n.omniscribe_toast-stack {\n position: fixed;\n top: calc(var(--spacing) * 4);\n right: calc(var(--spacing) * 4);\n display: flex;\n flex-direction: column;\n gap: calc(var(--spacing) * 2);\n z-index: 9999;\n pointer-events: none;\n}\n\n.omniscribe_toast-item {\n border-radius: var(--radius);\n padding: calc(var(--spacing) * 4);\n width: calc(var(--spacing) * 120);\n display: flex;\n align-items: flex-start;\n transition:\n transform 300ms cubic-bezier(0.4, 0, 0.2, 1),\n opacity 300ms cubic-bezier(0.4, 0, 0.2, 1);\n pointer-events: auto;\n}\n\n.omniscribe_toast-item-danger {\n background-color: var(--color-red-500);\n}\n.omniscribe_toast-item-black {\n background-color: var(--black);\n}\n.omniscribe_toast-item-show {\n transform: translateX(0);\n opacity: 1;\n}\n.omniscribe_toast-item-hide {\n transform: translateX(120%);\n opacity: 0;\n}\n.omniscribe_toast-subcontainer {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 100ms;\n display: flex;\n flex-direction: column;\n color: var(--white);\n flex: 1;\n}\n.omniscribe_toast-title {\n font-size: 18px;\n font-weight: var(--font-weight-bold);\n}\n.omniscribe_toast-msg {\n font-size: 16px;\n}\n.omniscribe_toast-close {\n background: none;\n border: none;\n color: var(--white);\n font-size: 18px;\n cursor: pointer;\n padding: calc(var(--spacing) * 1) calc(var(--spacing) * 2);\n align-self: flex-start;\n opacity: 0.8;\n}\n.omniscribe_toast-close:hover {\n opacity: 1;\n}\n\n\n/* Source: shared/components/toggle.css */\n.omniscribe_toggle-container {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 8px;\n flex-direction: column;\n}\n\n.omniscribe_toggle-label {\n font-size: 14px;\n font-weight: 400;\n color: var(--omniscribe-text, #374151);\n flex: 1;\n}\n\n.omniscribe_toggle-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.omniscribe_toggle-switch {\n position: relative;\n width: 29px;\n height: 16px;\n background-color: #d1d5db;\n border-radius: 8px;\n border: none;\n cursor: pointer;\n transition: background-color 0.2s ease;\n outline: none;\n}\n\n.omniscribe_toggle-switch:focus-visible {\n box-shadow: 0 0 0 2px var(--secondary, #132caa);\n}\n\n.omniscribe_toggle-switch-checked {\n background-color: var(--secondary, #132caa);\n}\n\n.omniscribe_toggle-switch-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n /* High-contrast fill that sits on top of the track — must contrast the */\n /* track color, not inherit the panel surface (which would vanish in a */\n /* dark theme). Hosts theming dark set --omniscribe-on-accent to a dark */\n /* ink; light hosts fall back to white (unchanged). */\n background-color: var(--omniscribe-on-accent, white);\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.omniscribe_toggle-switch-checked .omniscribe_toggle-thumb {\n transform: translateX(13px);\n}\n\n.omniscribe_toggle-status {\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #6b7280);\n min-width: 70px;\n}\n\n.omniscribe_toggle-switch-checked + .omniscribe_toggle-status {\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n\n/* Source: shared/components/tooltip.css */\n.tooltip-base {\n position: fixed;\n z-index: 9999;\n border-radius: 0.375rem; /* rounded-md */\n background-color: #111827;\n padding: 0.5rem 0.75rem; /* px-3 py-2 */\n font-size: 0.875rem; /* text-sm */\n font-family: 'Lato', sans-serif;\n color: #ffffff; /* text-white */\n box-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.1),\n 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* shadow-lg */\n transition: opacity 0.2s ease-in-out; /* transition-opacity duration-200 */\n pointer-events: none;\n user-select: none;\n word-wrap: break-word;\n line-height: 1.4;\n}\n\n/* Tooltip Arrow Styles */\n.tooltip-arrow {\n position: absolute;\n width: 0.5rem; /* w-2 */\n height: 0.5rem; /* h-2 */\n background-color: #111827;\n transform: rotate(45deg);\n}\n\n/* Arrow positioning for each side */\n.tooltip-arrow-top {\n bottom: -0.25rem; /* bottom-[-4px] */\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n\n.tooltip-arrow-bottom {\n top: -0.25rem; /* top-[-4px] */\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n\n.tooltip-arrow-left {\n right: -0.25rem; /* right-[-4px] */\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n}\n\n.tooltip-arrow-right {\n left: -0.25rem; /* left-[-4px] */\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n}\n\n/* Width classes based on message length */\n.tooltip-width-auto {\n width: auto;\n white-space: nowrap;\n}\n\n.tooltip-width-200 {\n width: auto;\n max-width: 200px;\n}\n\n.tooltip-width-xs {\n width: auto;\n max-width: 20rem; /* max-w-xs */\n}\n\n.tooltip-width-sm {\n width: auto;\n max-width: 24rem; /* max-w-sm */\n}\n\n.tooltip-width-400 {\n width: auto;\n max-width: 400px;\n}\n\n/* Trigger container styles */\n.tooltip-trigger {\n display: inline-flex;\n}\n\n/* Animation classes */\n.tooltip-enter {\n opacity: 0;\n transform: scale(0.95);\n}\n\n.tooltip-enter-active {\n opacity: 1;\n transform: scale(1);\n transition:\n opacity 0.2s ease-in-out,\n transform 0.2s ease-in-out;\n}\n\n.tooltip-exit {\n opacity: 1;\n transform: scale(1);\n}\n\n.tooltip-exit-active {\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity 0.15s ease-in-out,\n transform 0.15s ease-in-out;\n}\n\n/* Dark theme variant */\n.tooltip-dark {\n background-color: #1f2937; /* bg-gray-800 */\n color: var(--grey-50);\n}\n\n.tooltip-dark .tooltip-arrow {\n background-color: #1f2937;\n}\n\n/* Light theme variant */\n.tooltip-light {\n background-color: var(--omniscribe-surface, #ffffff);\n color: var(--omniscribe-text, #374151); /* text-gray-700 */\n box-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.1),\n 0 4px 6px -2px rgba(0, 0, 0, 0.05),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n}\n\n.tooltip-light .tooltip-arrow {\n background-color: var(--omniscribe-surface, #ffffff);\n}\n\n/* Responsive breakpoints */\n@media (max-width: 640px) {\n .tooltip-base {\n max-width: calc(100vw - 2rem);\n font-size: 0.8125rem; /* Slightly smaller on mobile */\n }\n\n .tooltip-width-400,\n .tooltip-width-sm,\n .tooltip-width-xs {\n max-width: calc(100vw - 2rem);\n }\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n .tooltip-base {\n border: 2px solid #ffffff;\n }\n\n .tooltip-light {\n border: 2px solid #000000;\n }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n .tooltip-base,\n .tooltip-enter-active,\n .tooltip-exit-active {\n transition: none;\n }\n}\n\n\n/* Source: test/mocks/empty.css */\n/* Empty CSS file for mocking styles */\n";
169519
+ const injectedCss = "/* Source: index.css */\n@import url('https://fonts.googleapis.com/css2?family=Inter:wght@700&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap');\n\n/* ------------------------------------------------------------------ */\n/* Theming hooks (host-overridable). */\n/* */\n/* CSS custom properties defined on the `<sofia-sdk>` element inherit */\n/* across the shadow DOM boundary. Hosts override any of these on the */\n/* element to retheme the SDK without touching internals: */\n/* */\n/* <sofia-sdk style=\"--omniscribe-primary: #1f6f5f\"></sofia-sdk> */\n/* */\n/* Internal tokens that map to a host override use */\n/* `var(--omniscribe-*, <default>)`. */\n/* */\n/* Available hooks: */\n/* --omniscribe-font-family */\n/* --omniscribe-primary main brand / primary action */\n/* --omniscribe-primary-soft light tint of primary */\n/* --omniscribe-secondary secondary action */\n/* --omniscribe-secondary-hover secondary hover state */\n/* --omniscribe-accent highlight / report color */\n/* --omniscribe-warning gap / warning chrome */\n/* --omniscribe-text primary text */\n/* --omniscribe-text-muted secondary text */\n/* --omniscribe-surface card / panel background */\n/* --omniscribe-surface-alt header / footer / hover bg */\n/* --omniscribe-border primary border */\n/* --omniscribe-border-soft in-card separators */\n/* */\n/* The insertion-preview modal has its own (more granular) variables */\n/* documented in InsertionPreviewModal.css. */\n/* ------------------------------------------------------------------ */\n\n/* Color scheme of the shadow subtree. Defaults to light so native */\n/* form controls (<select>, <input>) and assistant-ui surfaces don't */\n/* follow the host OS dark mode. A host that themes the SDK dark */\n/* (e.g. the radiology reading room) sets --omniscribe-color-scheme: */\n/* dark so native controls render light-on-dark and stay legible. */\n:host {\n color-scheme: var(--omniscribe-color-scheme, light);\n}\n\n#Omniscribe {\n font-family: var(--omniscribe-font-family, 'Lato', sans-serif);\n color-scheme: var(--omniscribe-color-scheme, light);\n /* define colors */\n --active: #0a3785;\n --background-primary: var(--omniscribe-primary-soft, #e7effd);\n --warning: var(--omniscribe-warning, #ffc107);\n --grey-50: #f9fafb;\n --grey-100: #f6f7f9;\n --grey-200: #e5e7eb;\n --grey-700: #6f7d95;\n --grey-800: #4a5364;\n --grey-900: #252a32;\n --active-black: #252a32;\n --placeholder: #a4adbc;\n --line: var(--omniscribe-border, #e5e7ec);\n --custom-black: #13161a;\n --primary: var(--omniscribe-primary, #105bdb);\n --border: var(--omniscribe-border, #e5e7ec);\n --white: var(--omniscribe-surface, #fdfdfd);\n --omni: #daf2ff;\n --omni-secondary: rgba(219, 219, 219, 0.75);\n --primary-button: var(--omniscribe-primary, #105bdb);\n --primary-text: #36a3cf;\n --primary-900: var(--omniscribe-primary, #061044);\n --blue-100: var(--omniscribe-primary-soft, #dbeafe);\n --blue-200: var(--omniscribe-primary-soft, #bfdbfe);\n --blue-500: var(--omniscribe-primary, #105bdb);\n --blue-600: var(--omniscribe-primary, #2563eb);\n --blue-700: var(--omniscribe-primary, #1d4ed8);\n --report: var(--primary-button);\n --gray: #616161;\n --black: #1b2125;\n --sky-blue: var(--omniscribe-primary-soft, #dbecff);\n --blue: var(--omniscribe-primary, #5886ba);\n --blue-600: var(--omniscribe-primary, #0b1962);\n --background: var(--omniscribe-surface-alt, #f3f3f3bb);\n --foreground: var(--omniscribe-text, oklch(0.145 0 0));\n --primary: var(--omniscribe-primary, #061044);\n --primary-foreground: var(--omniscribe-on-accent, oklch(0.985 0 0));\n --secondary: var(--omniscribe-secondary, #132caa);\n --secondary-foreground: var(--omniscribe-on-accent, #fff);\n --secondary-hover: var(--omniscribe-secondary-hover, #2847e7);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: var(--omniscribe-surface-alt, oklch(0.97 0 0));\n --accent-foreground: var(--omniscribe-text, oklch(0.205 0 0));\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --light-border: oklch(0.922 0 0);\n --input: var(--omniscribe-border, oklch(0.922 0 0));\n --ring: oklch(0.87 0 0);\n --radius: 0.625rem;\n /* TEXT */\n --text-3xs: 8px;\n --text-3xs--line-height: calc(0.5 / 0.25);\n --text-2xs: 10px;\n --text-2xs--line-height: calc(0.75 / 0.5);\n --text-xs: 12px;\n --text-xs--line-height: 14.4px;\n --text-xs--letter-spacing: 0.05px;\n --text-sm: 14px;\n --text-sm--line-height: 16.8px;\n --text-xs--letter-spacing: 0.05px;\n --text-base: 16px;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 18px;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 20px;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 22px;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 24px;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 26px;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 28px;\n --text-5xl--line-height: 1;\n --text-6xl: 30px;\n --text-6xl--line-height: 1;\n --text-7xl: 32px;\n --text-7xl--line-height: 1;\n --text-8xl: 34px;\n --text-8xl--line-height: 1;\n --text-9xl: 46px;\n --text-9xl--line-height: 1;\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n /* custom colors */\n --color-white: var(--white);\n --color-light-border: var(--light-border);\n --color-omni: var(--omni);\n --color-report: var(--report);\n --color-omni-secondary: var(--omni-secondary);\n --color-primary-text: var(--primary-text);\n --color-primary-900: var(--primary-900);\n --color-blue-500: var(--blue-500);\n --color-gray: var(--gray);\n --color-black: var(--black);\n --color-sky-blue: var(--sky-blue);\n --color-cream: var(--cream);\n --color-pink: var(--pink);\n --color-blue: var(--blue);\n --color-blue-600: var(--blue-600);\n --color-sky-blue-100: var(--sky-blue-100);\n --color-white-2: var(--white-2);\n --color-primary-700: var(--primary-700);\n --color-primary-500: var(--primary-500);\n --color-neutral-800: var(--neutral-800);\n --color-blue-2: var(--blue-2);\n --color-light-blue: var(--light-blue);\n --color-primary-100: var(--primary-100);\n --color-primary-300: var(--primary-300);\n --color-black-2: var(--black-2);\n --color-primary-button: var(--primary-button);\n --color-background: var(--background);\n --color-foreground: var(--foreground);\n --color-card: var(--card);\n --color-card-foreground: var(--card-foreground);\n --color-popover: var(--popover);\n --color-popover-foreground: var(--popover-foreground);\n --color-primary: var(--primary);\n --color-primary-foreground: var(--primary-foreground);\n --color-secondary: var(--secondary);\n --color-secondary-foreground: var(--secondary-foreground);\n --color-muted: var(--muted);\n --color-muted-foreground: var(--muted-foreground);\n --color-accent: var(--accent);\n --color-accent-foreground: var(--accent-foreground);\n --color-destructive: var(--destructive);\n --color-destructive-foreground: var(--destructive-foreground);\n --color-border: var(--border);\n --color-input: var(--input);\n --color-ring: var(--ring);\n --color-chart-1: var(--chart-1);\n --color-chart-2: var(--chart-2);\n --color-chart-3: var(--chart-3);\n --color-chart-4: var(--chart-4);\n --color-chart-5: var(--chart-5);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: #f3f4f6;\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-sidebar: var(--sidebar);\n --color-sidebar-foreground: var(--sidebar-foreground);\n --color-sidebar-primary: var(--sidebar-primary);\n --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n --color-sidebar-accent: var(--sidebar-accent);\n --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n --color-sidebar-border: var(--sidebar-border);\n --color-sidebar-ring: var(--sidebar-ring);\n /* rounded */\n --radius-sm: calc(var(--radius) - 4px);\n --radius-md: calc(var(--radius) - 2px);\n --radius-lg: 12px;\n --radius-xl: calc(var(--radius) + 4px);\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n /* spacing */\n --spacing-layout-w: var(--layout-w);\n --spacing-layout-h: var(--layout-h);\n --spacing: 0.25rem;\n /* size */\n --container-md: 28rem;\n --container-xl: 36rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n\n --tracking-tight: -0.025em;\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n\n .no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n a,\n p,\n textarea,\n button,\n span,\n h1,\n h2,\n h3,\n h4,\n h5,\n div {\n font-family: 'Lato', sans-serif;\n }\n /* Hide scrollbar for IE, Edge and Firefox */\n .no-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n .shadow-inner-right {\n box-shadow: inset -9px 0 6px -1px rgb(0 0 0 / 0.02);\n }\n .shadow-inner-left {\n box-shadow: inset 9px 0 6px -1px rgb(0 0 0 / 0.02);\n }\n .annotation {\n font-size: var(--text-3xs);\n font-weight: var(--font-weight-normal);\n }\n .annotation-semi {\n font-size: var(--text-3xs);\n font-weight: var(--font-weight-semibold);\n }\n .annotation-bold {\n font-size: var(--text-3xs);\n font-weight: var(--font-weight-semibold);\n }\n .info {\n font-size: var(--text-2xs);\n font-weight: var(--font-weight-normal);\n }\n .info-semi {\n font-size: var(--text-2s);\n font-weight: var(--font-weight-semibold);\n }\n .info-bold {\n font-size: var(--text-2s);\n font-weight: var(--font-weight-semibold);\n }\n .text-p-xs {\n font-size: var(--text-xs) !important;\n font-weight: var(--font-weight-normal);\n line-height: var(--text-xs--line-height);\n letter-spacing: var(--text-xs--letter-spacing);\n }\n .text-p {\n font-size: var(--text-sm);\n font-weight: var(--font-weight-normal);\n letter-spacing: var(--text-sm--letter-spacing);\n }\n .text-p-semi {\n font-size: var(--text-sm);\n font-weight: var(--font-weight-semibold);\n }\n .text-p-bold {\n font-size: var(--text-sm);\n font-weight: var(--font-weight-semibold);\n }\n .omniscribe_shadow-xl {\n box-shadow:\n 0 20px 25px -5px rgb(0 0 0 / 0.1),\n 0 8px 10px -6px rgb(0 0 0 / 0.1);\n }\n .scrollbar-pretty {\n &::-webkit-scrollbar {\n width: 6px;\n }\n &::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: var(--omni-secondary);\n }\n &::-webkit-scrollbar-track {\n background-color: transparent;\n }\n }\n\n .omniscribe_visible {\n visibility: visible;\n display: flex;\n flex: 1;\n }\n .omniscribe_hidden {\n display: none;\n height: 0;\n }\n\n .omniscribe_animate-spin {\n animation: spin 1s linear infinite;\n }\n}\n\n\n/* Source: modules/chat/components/AudioCutsWarningDialog.css */\n/* The shared Modal overlay uses position: absolute anchored to its\n nearest positioned ancestor — which in our case is the chat footer,\n not the widget root. That puts the modal at the bottom of the widget.\n Override to position: fixed so the overlay covers the full viewport\n and the modal truly centers regardless of where in the React tree it\n was rendered. */\n.omniscribe_modal-overlay:has(.omniscribe_audio-cuts-modal) {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n.omniscribe_audio-cuts-modal {\n width: 480px;\n max-width: 90vw;\n padding: 24px !important;\n}\n\n/* Override Modal's giant default h2 size for this dialog. */\n.omniscribe_audio-cuts-modal .omniscribe_modal-title-container {\n margin-bottom: 16px;\n align-items: flex-start;\n}\n\n.omniscribe_audio-cuts-modal .omniscribe_modal-title {\n font-size: 18px;\n line-height: 1.3;\n font-weight: 700;\n letter-spacing: -0.01em;\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_audio-cuts-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n/* Summary card: warning icon + paragraph in a soft container. */\n.omniscribe_audio-cuts-summary {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.omniscribe_audio-cuts-summary-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n border-radius: 9999px;\n background-color: #fef3c7;\n color: #b45309;\n}\n\n.omniscribe_audio-cuts-summary-text {\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--color-gray-800, #1f2937);\n flex: 1;\n}\n\n/* Cut list: rounded gray container, clock icon per row, no bullets. */\n.omniscribe_audio-cuts-list {\n margin: 0;\n padding: 12px 14px;\n border-radius: 12px;\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 1px solid var(--color-gray-200, #e5e7eb);\n list-style: none;\n max-height: 240px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_audio-cuts-item {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--omniscribe-text-muted, #374151);\n font-variant-numeric: tabular-nums;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.omniscribe_audio-cuts-item-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--omniscribe-text-muted, #6b7280);\n}\n\n/* Action row: right-aligned, secondary as text-link, primary as blue pill. */\n.omniscribe_audio-cuts-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 16px;\n margin-top: 4px;\n}\n\n.omniscribe_audio-cuts-secondary {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px 12px;\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #374151);\n border-radius: 9999px;\n transition: background-color 0.15s ease;\n}\n\n.omniscribe_audio-cuts-secondary:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_audio-cuts-primary {\n border-radius: 9999px !important;\n gap: 8px;\n padding-block: 10px !important;\n padding-inline: 18px !important;\n height: auto !important;\n font-weight: 600;\n}\n\n\n/* Source: modules/chat/components/ChatView.css */\n.omniscribe_chat-view-container {\n flex: 1;\n border-style: none;\n display: flex;\n overflow: hidden;\n background: transparent;\n bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n margin-block: calc(var(--spacing) * 0) /* 0rem = 0px */;\n right: 20px;\n border-bottom-left-radius: 12px;\n width: 100%;\n}\n\n.omniscribe_chat-view-container-history-cont {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 0;\n z-index: 30;\n height: 100%;\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n display: block;\n border-top-left-radius: 12px;\n border-bottom-left-radius: 12px;\n overflow: hidden;\n background-color: var(--omniscribe-surface, white);\n transition:\n width 300ms cubic-bezier(0.4, 0, 0.2, 1),\n min-width 300ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.omniscribe_chat-view-container-history-cont-open {\n width: 33%;\n}\n\n/* Overlay that covers the chat when history is open */\n.omniscribe_chat-view-overlay {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n z-index: 25;\n opacity: 0;\n pointer-events: none;\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n border-radius: 12px;\n}\n\n.omniscribe_chat-view-overlay-visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n.omniscribe_chat-view-content-container {\n display: flex;\n flex: 1;\n width: 100%;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n border-bottom-right-radius: 12px;\n}\n\n.omniscribe_chat-view-stick-to-bottom {\n font-size: 14px;\n}\n.omniscribe_chat-view-stick-to-bottom-content {\n position: absolute;\n inset: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n display: grid;\n grid-template-rows: 1fr auto;\n}\n\n/* Disable scroll when SummaryLoading is shown */\n.omniscribe_chat-view-stick-to-bottom-content--no-scroll {\n overflow-y: hidden;\n}\n\n.omniscribe_chat-view-stick-to-bottom-content-class {\n padding-bottom: calc(var(--spacing) * 13);\n display: flex;\n flex-direction: column;\n padding-left: calc(var(--spacing) * 4);\n padding-right: calc(var(--spacing) * 4);\n min-width: 0;\n padding-top: 12px;\n}\n\n.omniscribe_chat-view-footer-container {\n position: sticky;\n display: flex;\n background-color: var(--omniscribe-surface, white);\n flex-direction: column;\n align-items: center;\n bottom: 0;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px;\n}\n\n/*\n * The footer is sticky inside the scroll container, so mid-scroll the\n * conversation passes behind it and was cut off mid-line — text simply ended\n * where the buttons began. This is not a spacing problem: at rest the content\n * clears the footer. What was missing is a boundary, so the last visible line\n * dissolves into the footer's surface instead of being guillotined by it.\n */\n.omniscribe_chat-view-footer-container::before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 100%;\n /*\n * Tall enough to dissolve two or three lines. A short band is worse than no\n * band at all: at one line-height it ghosts a single row of text and reads as\n * a rendering fault rather than a transition.\n */\n height: 64px;\n pointer-events: none;\n /* Fallback first: browsers without color-mix keep this. */\n background: linear-gradient(\n to bottom,\n transparent,\n var(--omniscribe-surface, #fff)\n );\n /*\n * Fading to `transparent` interpolates through transparent BLACK, which\n * greys the middle of the band. Fading from the surface colour at zero alpha\n * keeps it clean and still themable.\n */\n background: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--omniscribe-surface, #fff) 0%, transparent) 0%,\n var(--omniscribe-surface, #fff) 100%\n );\n}\n\n/*\n * Floats over the conversation, so it needs to be opaque. It inherited the\n * outline button's translucent fill, which let the text underneath read\n * straight through it — the label and the message competing in the same\n * pixels. A solid fill plus a shadow is what makes it read as a control\n * sitting above the content rather than printed onto it.\n */\n/*\n * Pinned to the footer's top edge, not to the viewport.\n *\n * It used to be `position: fixed; bottom: 17%`, i.e. anchored to the browser\n * window: its distance from the composer depended on the window height, and at\n * common sizes it landed ON the action buttons — measured 3px below the\n * footer's top edge. Anchoring to the footer instead means it tracks whatever\n * the footer currently is: with or without the action row, with the\n * transcription panel expanded, with files attached.\n */\n.omniscribe_chat-view-footer-scroll-to-bottom {\n position: absolute;\n bottom: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%);\n z-index: 2;\n}\n\n/*\n * Qualified with `.omniscribe_button` on purpose. The outline variant sets the\n * same properties at equal specificity and `button.css` is concatenated after\n * this file, so a single-class selector here loses on source order alone.\n */\n.omniscribe_button.omniscribe_chat-view-footer-scroll-to-bottom {\n background-color: var(--omniscribe-surface, #fff);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n box-shadow: 0 2px 10px rgba(16, 23, 37, 0.16);\n}\n\n.omniscribe_button.omniscribe_chat-view-footer-scroll-to-bottom:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n}\n\n.omniscribe_chat-view-down-btn {\n width: calc(0.25rem /* 4px */ * 4);\n height: calc(0.25rem /* 4px */ * 4);\n}\n\n/* Combined Footer - Frame 532 Design */\n.omniscribe_chat-view-combined-footer {\n width: 100%;\n padding-bottom: 12px;\n background-color: var(--omniscribe-surface, white);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n position: relative;\n}\n\n/* Action row — no background of its own; only the pills carry a border */\n.omniscribe_chat-footer-actions-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n padding-inline: calc(var(--spacing) * 4);\n padding-bottom: 8px;\n flex-shrink: 0;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n transition: padding-top 0.5s ease;\n}\n\n/* With the transcription expanded, keeps the buttons off the panel's bottom\n line (the expanded wrapper's border-bottom). */\n.omniscribe_transcription-panel-wrapper--expanded\n + .omniscribe_chat-footer-actions-row {\n padding-top: 10px;\n}\n\n.omniscribe_chat-view-combined-footer-row {\n display: flex;\n flex-direction: row;\n align-items: end;\n box-sizing: border-box;\n width: 100%;\n gap: 8px;\n flex-shrink: 0;\n background-color: var(--omniscribe-surface, white);\n overflow: hidden;\n padding-inline: calc(var(--spacing) * 4);\n padding-top: 7px;\n}\n\n/* Frame 34 - Input container */\n.omniscribe_chat-view-combined-input-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n padding: 8px;\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 20px;\n background-color: var(--omniscribe-surface, white);\n gap: 0;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n box-sizing: border-box;\n box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25);\n margin-bottom: 7px;\n margin-right: 1px;\n}\n\n/* When files are attached, change border-radius to rounded rectangle */\n/*\n * Attaching a file must not resize the composer. There is deliberately no\n * max-width here: the base rule is `flex: 1`, and capping it made the composer\n * jump from the full footer width down to a fixed size the moment a file was\n * added — a leftover from a narrower Figma frame, and the only place that\n * number appeared. Several files scroll horizontally inside\n * `.omniscribe_chat-view-combined-files-row`, which owns `overflow-x: auto`.\n */\n.omniscribe_chat-view-combined-input-container--with-files {\n gap: 12px;\n align-items: flex-start;\n min-width: 0;\n overflow: hidden;\n}\n\n/* Files row inside input container - horizontal scroll, no wrapping */\n.omniscribe_chat-view-combined-files-row {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n gap: 8px;\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n padding-bottom: 4px;\n scrollbar-width: thin;\n min-width: 0;\n}\n\n.omniscribe_chat-view-combined-files-row::-webkit-scrollbar {\n height: 4px;\n}\n\n.omniscribe_chat-view-combined-files-row::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.omniscribe_chat-view-combined-files-row::-webkit-scrollbar-thumb {\n background-color: var(--color-gray-300, #d1d5db);\n border-radius: 4px;\n}\n\n/* Input row with clip icon, textarea, and action button */\n.omniscribe_chat-view-combined-input-row {\n display: flex;\n align-items: center;\n width: 100%;\n gap: 4px;\n}\n\n/* Clip icon */\n.omniscribe_chat-view-combined-clip-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n height: 24px;\n border-radius: 9999px;\n background-color: var(--omniscribe-surface, white);\n cursor: pointer;\n transition: background-color 0.2s ease;\n border: solid 1px var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_chat-view-combined-clip-icon:hover {\n background-color: var(--omniscribe-surface-alt, #e5e7eb);\n color: var(--color-gray-600);\n}\n\n/* Action button inside input */\n.omniscribe_chat-view-combined-action-btn {\n flex-shrink: 0;\n}\n\n.omniscribe_chat-view-combined-textarea {\n flex: 1;\n resize: none;\n border: none !important;\n outline: none !important;\n box-shadow: none !important;\n min-height: 20px;\n max-height: 56px;\n font-weight: 500 !important;\n padding: 0 !important;\n background: transparent;\n color: var(--omniscribe-text-muted, #4a5364);\n height: 20px;\n}\n\n.omniscribe_chat-view-combined-textarea::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af);\n}\n\n.omniscribe_chat-view-combined-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.omniscribe_chat-view-combined-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n border-radius: 9999px;\n background-color: var(--secondary, #132caa);\n color: white;\n cursor: pointer;\n transition: background-color 0.2s ease;\n flex-shrink: 0;\n}\n\n.omniscribe_chat-view-combined-send-btn:hover:not(:disabled) {\n background-color: var(--secondary-hover, #2847e7);\n}\n\n.omniscribe_chat-view-combined-send-btn:disabled {\n background-color: var(--omniscribe-surface-alt, #dfe2e7);\n cursor: not-allowed;\n}\n\n/* Stop button - red variant of send button */\n.omniscribe_chat-view-combined-stop-btn {\n background-color: var(--secondary, #132caa);\n}\n\n.omniscribe_chat-view-combined-stop-btn:hover {\n background-color: var(--secondary, #132caa);\n}\n\n/* Drag-and-drop overlay */\n.omniscribe_chat-view-drag-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(37, 99, 235, 0.05);\n border: 2px dashed var(--blue-600, #2563eb);\n border-radius: var(--radius);\n z-index: 10;\n pointer-events: none;\n}\n\n.omniscribe_chat-view-drag-overlay-text {\n color: var(--blue-600, #2563eb);\n font-size: var(--text-sm);\n font-weight: var(--font-weight-medium);\n}\n\n\n/* Source: modules/chat/components/FileLimitBanner.css */\n/* File Limit Banner */\n.omniscribe_file-limit-banner {\n position: fixed;\n top: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n background-color: #dc2626;\n color: white;\n border-radius: 12px;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n animation:\n slideInFromTop 0.3s ease-out,\n slideOutToTop 0.3s ease-in 4.7s;\n animation-fill-mode: forwards;\n width: auto;\n max-width: 90vw;\n padding: 0;\n margin: 0 auto;\n}\n\n.omniscribe_file-limit-banner-content {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n gap: 12px;\n white-space: nowrap;\n}\n\n.omniscribe_file-limit-banner-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: white;\n}\n\n.omniscribe_file-limit-banner-message {\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n text-align: center;\n}\n\n.omniscribe_file-limit-banner-close {\n background: none;\n border: none;\n color: white;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.omniscribe_file-limit-banner-close:hover {\n background-color: rgba(255, 255, 255, 0.2);\n}\n\n.omniscribe_file-limit-banner-close svg {\n width: 16px;\n height: 16px;\n}\n\n/* Animations */\n@keyframes slideInFromTop {\n 0% {\n opacity: 0;\n transform: translateX(-50%) translateY(-20px);\n }\n 100% {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n@keyframes slideOutToTop {\n 0% {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateX(-50%) translateY(-20px);\n }\n}\n\n\n/* Source: modules/chat/components/PredefinedQuestions.css */\n.omniscribe_predefined-questions-container {\n margin-top: calc(var(--spacing) * 2) /* 1rem = 16px */;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n display: flex;\n flex-direction: column;\n}\n.omniscribe_predefined-questions-span {\n color: var(--omniscribe-text, #13161a);\n line-height: 21.6px;\n font-size: 18px !important;\n font-weight: 500 !important;\n}\n\n.omniscribe_predefined-title {\n margin-bottom: 8px;\n word-break: break-word;\n}\n\n.omniscribe_predefined-questions-msg-container {\n display: flex;\n flex-direction: column;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n word-break: break-word;\n}\n\n.omniscribe_predefined-questions-content {\n background-color: var(--background-primary, #e7effd) !important;\n color: var(--primary, #105bdb) !important;\n border-radius: 999px !important;\n text-align: left;\n padding-top: 4px;\n padding-right: 16px;\n padding-bottom: 4px;\n padding-left: 16px;\n width: fit-content;\n height: fit-content;\n}\n\n\n/* Source: modules/chat/components/SummaryLoading.css */\n/* Auto-summary loading styles */\n.omniscribe_auto-summary-container {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding-top: calc(var(--spacing) * 13);\n pointer-events: none;\n width: 100%;\n height: 100%;\n}\n\n.omniscribe_auto-summary-text {\n font-size: 18px;\n text-align: center;\n margin-bottom: 20px;\n font-weight: 500;\n color: var(--omniscribe-text, #2b303a);\n}\n\n.omniscribe_auto-summary-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Loading dots animation */\n.omniscribe_loading-dots {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_loading-dots::after {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-dot-flashing 1.4s infinite linear;\n}\n\n.omniscribe_loading-dots::before {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-dot-flashing 1.4s infinite linear;\n animation-delay: -0.16s;\n margin-right: 4px;\n}\n\n.omniscribe_loading-dots span {\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-dot-flashing 1.4s infinite linear;\n animation-delay: -0.32s;\n margin-right: 4px;\n}\n\n@keyframes omniscribe-dot-flashing {\n 0%,\n 80%,\n 100% {\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n}\n\n\n/* Source: modules/chat/components/history/ChatHistory.css */\n.omniscribe_thread-list-container {\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n padding-inline: calc(var(--spacing) * 1);\n margin: 8px;\n}\n\n.omniscribe_thread-list-content {\n padding-bottom: calc(var(--spacing) * 16);\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.omniscribe_thread-list-item {\n width: 100%;\n padding-inline: 0;\n}\n\n.omniscribe_thread-list-btn {\n text-align: left;\n align-items: center !important;\n justify-content: flex-start !important;\n width: calc(100% - var(--spacing) * 4);\n border-radius: 4px !important;\n margin-bottom: 4px;\n font-weight: var(--font-weight-normal);\n padding-inline: calc(var(--spacing) * 1) !important;\n}\n\n.omniscribe_thread-list-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--omniscribe-text, #252a32);\n font-size: var(--Font-Size-font-size-100, 12px);\n font-style: normal;\n font-weight: var(--Font-Weight-Regular, 400);\n line-height: var(--Font-Line-Height-line-height-100, 14.4px);\n /* 120% */\n letter-spacing: var(--Font-Letter-Spacing-letter-spacing-100, 0.05px);\n}\n\n.omniscribe_thread-history-loading {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: calc(var(--spacing) * 2);\n align-items: flex-start;\n justify-content: flex-start;\n overflow-y: scroll;\n overflow-x: hidden;\n padding-inline: calc(var(--spacing) * 1);\n}\n\n.omniscribe_thread-history-loading-skeleton {\n width: 100%;\n height: calc(var(--spacing) * 10);\n}\n\n.omniscribe_thread-history-container {\n display: flex;\n flex-direction: column;\n border-right: 1px solid var(--omniscribe-border, #e5e7ec);\n align-items: flex-start;\n justify-content: flex-start;\n /* gap: calc(var(--spacing) * 6); */\n height: 100%;\n flex-shrink: 0;\n}\n\n.omniscribe_thread-history-header {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 16px;\n background: var(--omniscribe-surface, white);\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_thread-history-header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n border: none;\n background: none;\n cursor: pointer;\n padding: 0;\n}\n\n.omniscribe_thread-history-header-title {\n margin: 0;\n color: var(--omniscribe-text, #252a32);\n font-size: 14px;\n font-weight: 500;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n}\n\n.omniscribe_thread-history-new-chat-btn {\n margin: 12px 0 0 12px;\n border-radius: 8px;\n gap: 4px;\n padding-block: 4px;\n}\n\n.omniscribe_thread-history-new-chat-btn:hover:not(:disabled) {\n background-color: #0f2080;\n}\n\n.omniscribe_thread-history-new-chat-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_thread-history-chat-started-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-inline: calc(var(--spacing) * 2);\n padding-block: calc(var(--spacing) * 1);\n background-color: color-mix(in oklab, var(--blue) 40%, transparent);\n width: stretch;\n width: -moz-available;\n width: -webkit-fill-available;\n width: fill-available;\n box-shadow:\n inset 0 2px 4px rgb(0 0 0 / 0.05),\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n\n.omniscribe_thread-history-no-chat-started-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-inline: calc(var(--spacing) * 2);\n width: 100%;\n}\n\n.omniscribe_thread-history-chat-started-btn {\n border: none;\n background: transparent;\n padding: 0px;\n display: flex;\n flex-direction: row;\n gap: calc(var(--spacing) * 2);\n align-items: center;\n cursor: pointer;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 300ms;\n}\n\n.omniscribe_thread-history-chat-started-btn-text {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n font-weight: var(--font-weight-semibold);\n letter-spacing: var(--tracking-tight);\n}\n\n.omniscribe_thread-tooltip {\n padding: calc(0.25rem /* 4px */ * 4);\n}\n\n/* Processing thread indicator */\n.omniscribe_thread-list-btn.omniscribe_thread-processing {\n position: relative;\n}\n\n.omniscribe_thread-list-btn.omniscribe_thread-processing::before {\n content: '';\n position: absolute;\n left: 4px;\n top: 50%;\n transform: translateY(-50%);\n width: 6px;\n height: 6px;\n background: var(--secondary, #132caa);\n border-radius: 50%;\n animation: omniscribe_pulse 1.5s infinite;\n}\n\n.omniscribe_thread-list-btn.omniscribe_thread-processing\n .omniscribe_thread-list-text {\n padding-left: 12px;\n}\n\n@keyframes omniscribe_pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n}\n\n\n/* Source: modules/chat/components/input/AudioBars.css */\n/* Granola-style animated audio bars: 3 rounded bars (short / tall / medium).\n Accent-colored and \"dancing\" while recording, muted and static otherwise. */\n.omniscribe_audio-bars {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n}\n\n.omniscribe_audio-bar {\n width: 3.5px;\n background-color: var(--omniscribe-primary, #1a73e8);\n border-radius: 9999px;\n transition:\n height 0.15s ease,\n background-color 0.2s ease;\n}\n\n/* Muted gray when not recording */\n.omniscribe_audio-bar--inactive {\n background-color: var(--grey-700, #9ca3af);\n}\n\n/* Live mode — heights are driven per-frame from the mic level, so use a\n short linear transition that dampens the movement without lagging it */\n.omniscribe_audio-bar--live {\n transition:\n height 0.08s linear,\n background-color 0.2s ease;\n}\n\n/* Static heights: short / tall / medium (Granola pattern) */\n.omniscribe_audio-bar--1 {\n height: 50%;\n}\n\n.omniscribe_audio-bar--2 {\n height: 100%;\n}\n\n.omniscribe_audio-bar--3 {\n height: 65%;\n}\n\n/* Dancing equalizer animation while recording */\n.omniscribe_audio-bar--animating.omniscribe_audio-bar--1 {\n animation: omniscribe-audio-dance-1 0.9s ease-in-out infinite;\n}\n\n.omniscribe_audio-bar--animating.omniscribe_audio-bar--2 {\n animation: omniscribe-audio-dance-2 1.1s ease-in-out infinite;\n}\n\n.omniscribe_audio-bar--animating.omniscribe_audio-bar--3 {\n animation: omniscribe-audio-dance-3 1s ease-in-out infinite;\n}\n\n/* The dance is decorative — it runs while connecting, when there is no stream\n to visualise yet. The --live bars are deliberately left out: those track\n real microphone input, so they are information, not decoration. */\n@media (prefers-reduced-motion: reduce) {\n .omniscribe_audio-bar--animating.omniscribe_audio-bar--1,\n .omniscribe_audio-bar--animating.omniscribe_audio-bar--2,\n .omniscribe_audio-bar--animating.omniscribe_audio-bar--3 {\n animation: none;\n }\n}\n\n@keyframes omniscribe-audio-dance-1 {\n 0%,\n 100% {\n height: 50%;\n }\n 25% {\n height: 85%;\n }\n 50% {\n height: 35%;\n }\n 75% {\n height: 70%;\n }\n}\n\n@keyframes omniscribe-audio-dance-2 {\n 0%,\n 100% {\n height: 100%;\n }\n 30% {\n height: 55%;\n }\n 60% {\n height: 90%;\n }\n 80% {\n height: 65%;\n }\n}\n\n@keyframes omniscribe-audio-dance-3 {\n 0%,\n 100% {\n height: 65%;\n }\n 20% {\n height: 95%;\n }\n 55% {\n height: 45%;\n }\n 85% {\n height: 80%;\n }\n}\n\n\n/* Source: modules/chat/components/input/ExtrasButtons.css */\n/*\n * Category names come from the host's templateExtras schema, so their length is\n * not ours to control. Left unbounded, one long name grew its pill until it\n * pushed the overflow trigger — and with it every remaining category — off the\n * right edge of the widget, with no way to reach them.\n *\n * The row cannot simply clip: the overflow menu is absolutely positioned and\n * opens upwards, so `overflow: hidden` on the row would cut the menu instead.\n * The pills give up the space themselves: they are the only shrinkable items in\n * the row, capped, and their label truncates.\n */\n/* Qualified: `.omniscribe_action-btn` is shared with the generate button and\n lives in another file, so an unqualified rule here would depend on which\n stylesheet the bundler concatenates last. */\n.omniscribe_action-btn.omniscribe_extras-btn {\n min-width: 0;\n max-width: 180px;\n flex-shrink: 1;\n}\n\n.omniscribe_extras-btn-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Overflow container for extras categories beyond the first two. */\n.omniscribe_extras-overflow {\n position: relative;\n display: inline-flex;\n /* Never squeezed out: it is the only route to the remaining categories. */\n flex-shrink: 0;\n}\n\n/* Three-dots trigger — mirrors the neutral pill styling of the action row. */\n.omniscribe_extras-overflow-trigger {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n padding: 0;\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 9999px;\n background-color: var(--omniscribe-surface, #ffffff);\n color: var(--grey-700, #6f7d95);\n cursor: pointer;\n transition:\n background-color 0.2s ease,\n color 0.2s ease,\n border-color 0.2s ease;\n}\n\n.omniscribe_extras-overflow-trigger:hover,\n.omniscribe_extras-overflow-trigger--open {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--omniscribe-text, #13161a);\n}\n\n/* Dropdown floats UP above the trigger (footer sits at the bottom), with a\n gap so it doesn't sit flush against the action buttons row. */\n.omniscribe_extras-overflow-menu {\n position: absolute;\n bottom: calc(100% + 12px);\n right: 0;\n z-index: 20;\n min-width: 160px;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n background-color: var(--omniscribe-surface, #ffffff);\n border: 1px solid var(--border, #e5e7eb);\n border-radius: var(--radius-lg, 12px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\n}\n\n.omniscribe_extras-overflow-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 10px;\n border: none;\n border-radius: 8px;\n background-color: transparent;\n color: var(--omniscribe-text, #13161a);\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.omniscribe_extras-overflow-item:hover:not(:disabled) {\n background-color: var(--omniscribe-primary-soft, #e8f0fe);\n color: var(--omniscribe-primary, #1a73e8);\n}\n\n.omniscribe_extras-overflow-item:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n\n/* Source: modules/chat/components/input/FilePreview.css */\n/* File Preview Container - Figma Frame 532 */\n.omniscribe_file-preview-container {\n display: contents;\n}\n\n.omniscribe_file-preview-container-history-open {\n width: 372px;\n}\n\n/* Custom scrollbar */\n.omniscribe_file-preview-container::-webkit-scrollbar {\n height: 6px;\n}\n\n.omniscribe_file-preview-container::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.omniscribe_file-preview-container::-webkit-scrollbar-thumb {\n background-color: #d1d5db;\n border-radius: 3px;\n}\n\n.omniscribe_file-preview-container::-webkit-scrollbar-thumb:hover {\n background-color: #9ca3af;\n}\n\n/* Individual image thumbnail */\n.omniscribe_file-preview-image {\n position: relative;\n width: 80px;\n height: 80px;\n border-radius: 12px;\n background-color: var(--omniscribe-surface-alt, #e8edf5);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.omniscribe_file-preview-image-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 12px;\n}\n\n.omniscribe_file-preview-image-placeholder {\n width: 100%;\n height: 100%;\n background-color: var(--omniscribe-surface-alt, #e8edf5);\n border-radius: 12px;\n}\n\n/* Document card */\n/* Document card - matches Figma design */\n.omniscribe_file-preview-document {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background-color: var(--omniscribe-surface, white);\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 16px;\n position: relative;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n flex-shrink: 0;\n max-height: 38px;\n}\n\n.omniscribe_file-preview-document-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n background-color: #dc3545;\n border-radius: var(--radius-lg, 12px);\n flex-shrink: 0;\n}\n\n.omniscribe_file-preview-document-icon svg {\n color: white;\n}\n\n.omniscribe_file-preview-document-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n padding-right: 16px;\n}\n\n.omniscribe_file-preview-document-title {\n font-size: 14px;\n font-weight: 500;\n color: var(--grey-900);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n\n.omniscribe_file-preview-document-type {\n font-size: 12px;\n color: var(--grey-700);\n font-weight: 500;\n}\n\n/* Individual image thumbnail - larger size matching Figma */\n.omniscribe_file-preview-image {\n position: relative;\n width: 64px;\n height: 64px;\n border-radius: 16px;\n background-color: #1a1a2e;\n flex-shrink: 0;\n /* overflow: visible to allow X button to show outside bounds */\n}\n\n.omniscribe_file-preview-image-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 16px;\n /* Apply overflow hidden to the image itself */\n overflow: hidden;\n}\n\n.omniscribe_file-preview-image-placeholder {\n width: 100%;\n height: 100%;\n background-color: var(--omniscribe-surface-alt, #e8edf5);\n border-radius: 16px;\n}\n\n/* Remove button - blue circle with X - positioned inside bounds */\n.omniscribe_file-preview-remove-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n border-radius: 50%;\n background-color: var(--blue-600, #2563eb);\n color: white;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s ease;\n z-index: 2;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.omniscribe_file-preview-remove-btn:hover {\n background-color: var(--blue-700, #1d4ed8);\n}\n\n.omniscribe_file-preview-remove-btn--image {\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n}\n\n\n/* Source: modules/chat/components/input/MicrophoneButton.css */\n/* Microphone Button Styles */\n.microphone-button {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 24px !important;\n height: 24px !important;\n min-width: 24px !important;\n min-height: 24px !important;\n padding: 0 !important;\n border-radius: 9999px !important;\n border: none !important;\n background-color: var(--omniscribe-surface-alt, #f3f4f6) !important;\n box-shadow: none !important;\n transition: background-color 0.2s ease !important;\n flex-shrink: 0;\n}\n\n.microphone-button:hover:not(:disabled) {\n background-color: var(--omniscribe-surface-alt, #e5e7eb) !important;\n}\n\n.microphone-button--recording {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n background-color: #fee2e2 !important;\n}\n\n/* Pulse animation for recording state */\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n\n/* Source: modules/chat/components/input/TranscribeDropdown.css */\n/* Ensure tooltip trigger properly wraps the button in flex context */\n.omniscribe_thread-combined-footer-row > .tooltip-trigger {\n display: flex;\n flex-shrink: 0;\n}\n\n/* Granola-style transcribe pill: [bars chevron] ··· [stop square | text]\n A single flat capsule — no nested containers, no shadow, and its chrome\n stays constant across idle/recording/paused (only the bars change). */\n.omniscribe_transcribe-dropdown {\n display: flex;\n align-items: center;\n gap: 18px;\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 9999px;\n background-color: var(--omniscribe-surface, white);\n transition:\n background-color 0.15s ease,\n border-color 0.15s ease;\n font-size: var(--font-size-100, 13px);\n font-weight: 500;\n color: var(--omniscribe-text, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n flex-shrink: 0;\n padding: 10px 18px;\n}\n\n.omniscribe_transcribe-dropdown:hover:not(\n .omniscribe_transcribe-dropdown--disabled\n ) {\n background-color: var(--omniscribe-surface-alt, #fafafa);\n border-color: var(--color-gray-300, #d1d5db);\n}\n\n/* Left group: bars + chevron sit flat inside the capsule (no inner pill) */\n.omniscribe_transcribe-controls-group {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Bars & chevron buttons — chromeless icon buttons */\n.omniscribe_transcribe-bars-button,\n.omniscribe_transcribe-chevron-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n.omniscribe_transcribe-bars-button:disabled,\n.omniscribe_transcribe-chevron-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Right: plain accent text control (Granola's \"Resume\") — no chrome */\n.omniscribe_transcribe-text-button {\n display: flex;\n align-items: center;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n font-size: inherit;\n font-weight: 500;\n color: var(--omniscribe-primary, #1a73e8);\n}\n\n.omniscribe_transcribe-text-button:hover:not(:disabled) {\n color: var(--blue-700, #1558d6);\n}\n\n.omniscribe_transcribe-text-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Right: play triangle shown when idle/paused — no chrome, accent color */\n.omniscribe_transcribe-play-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--omniscribe-primary, #1a73e8);\n transition: color 0.15s ease;\n}\n\n.omniscribe_transcribe-play-button:hover:not(:disabled) {\n color: var(--blue-700, #1558d6);\n}\n\n.omniscribe_transcribe-play-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Right: filled rounded stop square shown while recording — no chrome */\n.omniscribe_transcribe-stop-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--omniscribe-text-muted, #5f6368);\n transition: color 0.15s ease;\n}\n\n.omniscribe_transcribe-stop-button:hover:not(:disabled) {\n color: var(--omniscribe-text, #1f2937);\n}\n\n.omniscribe_transcribe-stop-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.omniscribe_transcribe-dropdown--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_transcribe-dropdown-label {\n text-align: left;\n white-space: nowrap;\n}\n\n/* Chevron points up (panel closed) and rotates to down when expanded */\n.omniscribe_transcribe-dropdown-chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #6b7280);\n transition:\n transform 0.2s ease,\n color 0.2s ease;\n}\n\n.omniscribe_transcribe-dropdown-chevron--expanded {\n transform: rotate(180deg);\n}\n\n.omniscribe_transcribe-dropdown:hover .omniscribe_transcribe-dropdown-chevron {\n color: var(--omniscribe-text, #374151);\n}\n\n/* Connection status pill - inline banner replacing toasts.\n Three states: reconnecting (neutral), disconnected (red), restored (dark). */\n.omniscribe_connection-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 9999px;\n white-space: nowrap;\n flex-shrink: 0;\n font-weight: 500;\n margin-inline: 8px;\n}\n\n.omniscribe_connection-pill-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.omniscribe_connection-pill-icon--spin {\n animation: omniscribe-connection-spin 1s linear infinite;\n}\n\n@keyframes omniscribe-connection-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.omniscribe_connection-pill--reconnecting {\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 1px solid var(--color-gray-200, #e5e7eb);\n color: var(--omniscribe-text-muted, #374151);\n}\n\n.omniscribe_connection-pill--disconnected {\n background-color: #fdecec;\n border: 1px solid #f8c7c7;\n color: #b42318;\n padding-right: 4px;\n}\n\n.omniscribe_connection-pill--restored {\n background-color: #1f2937;\n border: 1px solid #1f2937;\n color: #ffffff;\n}\n\n.omniscribe_connection-pill-retry {\n border-radius: 9999px !important;\n gap: 4px;\n padding-block: 3px !important;\n padding-inline: 8px !important;\n height: auto !important;\n background-color: #d92d20 !important;\n color: #ffffff !important;\n border: none !important;\n margin-left: 2px;\n}\n\n.omniscribe_connection-pill-retry:hover:not(:disabled) {\n background-color: #b42318 !important;\n}\n\n/* Action buttons - unified style for Generate, Petitions, Extras */\n.omniscribe_action-btn {\n /* Fixed-label actions keep their size; only the extras pills, whose labels\n are host-defined and can be arbitrarily long, give up space. */\n flex-shrink: 0;\n border-radius: 9999px !important;\n gap: 6px;\n padding-block: 6px !important;\n padding-inline: 12px !important;\n /* Match height of controls-group (border + padding + content) */\n min-height: 32px !important;\n font-size: var(--font-size-100, 13px) !important;\n font-weight: 500 !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08) !important;\n transition: all 0.15s ease !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n\n.omniscribe_action-btn:hover:not(:disabled) {\n background-color: var(--blue-700, #1558d6) !important;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12) !important;\n}\n\n.omniscribe_action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Collapsed state - vertical pill with light theme */\n.omniscribe_transcribe-collapsed {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 8px;\n background-color: var(--omniscribe-surface, white);\n border: 1px solid var(--border, #e5e7eb);\n border-radius: 9999px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n/* Passive activity indicator — live bars while recording */\n.omniscribe_transcribe-collapsed-bars {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n}\n\n.omniscribe_transcribe-collapsed-play {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 50%;\n background-color: transparent;\n color: var(--omniscribe-primary, #1a73e8);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.omniscribe_transcribe-collapsed-play:hover:not(:disabled) {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n transform: scale(1.05);\n}\n\n.omniscribe_transcribe-collapsed-play:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_transcribe-collapsed-play--recording {\n box-shadow: 0 0 8px rgba(26, 115, 232, 0.2);\n}\n\n.omniscribe_transcribe-collapsed-expand {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 50%;\n background-color: transparent;\n color: var(--omniscribe-text-muted, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.omniscribe_transcribe-collapsed-expand:hover:not(:disabled) {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--omniscribe-text, #374151);\n}\n\n\n/* Source: modules/chat/components/input/TranscriptionPanel.css */\n/* Expand/collapse wrapper — absolutely positioned upwards so it does NOT\n push the actions row or the form. Being out of the flow, animating the\n height causes no footer reflow: the panel unfolds upwards (same\n animation as the previous version). */\n.omniscribe_transcription-panel-wrapper {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n height: 0;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n transition:\n height 0.5s ease,\n opacity 0.5s ease;\n}\n\n.omniscribe_transcription-panel-wrapper--expanded {\n height: calc(var(--content-height) * 0.55);\n opacity: 1;\n pointer-events: auto;\n border-bottom: 1px solid var(--border, #e5e7eb);\n}\n\n/* TranscriptionPanel - Frame 655 from Figma */\n.omniscribe_transcription-panel {\n width: 100%;\n height: 100%;\n background-color: var(--omniscribe-surface, #ffffff);\n border: 1px solid var(--border, #e5e7eb);\n border-top-left-radius: var(--radius-lg, 12px);\n border-top-right-radius: var(--radius-lg, 12px);\n overflow: hidden;\n margin-bottom: 8px;\n display: flex;\n flex-direction: column;\n}\n\n/* Header with action buttons */\n.omniscribe_transcription-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n border-bottom: 1px solid var(--border);\n}\n\n.omniscribe_transcription-panel-header-section {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_transcription-panel-actions {\n display: flex;\n align-items: center;\n gap: 1px;\n margin-right: 2px;\n}\n\n.omniscribe_transcription-panel-action-btn {\n width: 100%;\n height: auto;\n transition:\n background-color 0.2s ease,\n color 0.2s ease;\n}\n\n.omniscribe_transcription-panel-close {\n border-radius: 9999px;\n border: none;\n padding-inline: 5px !important;\n padding-block: 2.5px !important;\n margin-block: 5.5px;\n transition:\n background-color 0.2s ease,\n color 0.2s ease;\n}\n\n.omniscribe_transcription-panel-close:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--color-gray-600, #4b5563);\n}\n\n/* Body container */\n.omniscribe_transcription-panel-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 150px;\n overflow: hidden;\n}\n\n/* Idle state - white background with blue text */\n.omniscribe_transcription-panel-idle {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n gap: 16px;\n padding: 24px;\n}\n\n.omniscribe_transcription-panel-idle-text {\n font-size: 16px;\n font-weight: 500;\n color: var(--color-primary, #2563eb);\n text-align: center;\n margin: 0;\n}\n\n.omniscribe_transcription-panel-play-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border: none;\n border-radius: 9999px;\n background-color: var(--omniscribe-primary-soft, #e7effd);\n cursor: pointer;\n transition:\n transform 0.2s ease,\n box-shadow 0.2s ease;\n}\n\n.omniscribe_transcription-panel-play-btn:hover {\n transform: scale(1.05);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.omniscribe_transcription-panel-play-btn svg {\n color: var(--omniscribe-primary, #2563eb);\n}\n\n/* Content state - transcription display */\n.omniscribe_transcription-panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n max-height: 220px;\n}\n\n.omniscribe_transcription-panel-message {\n margin-bottom: 8px;\n text-align: left;\n width: fit-content;\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n padding: 4px;\n border-radius: 8px;\n color: var(--omniscribe-text, #13161a);\n line-height: 1.7 !important;\n}\n\n/* Audio-loss divider rendered between segments where a recording cut\n occurred. Visually separates captured speech from the gap so the doctor\n can spot lost portions while reviewing the transcription. */\n.omniscribe_transcription-panel-cut {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-block: 10px;\n padding-inline: 4px;\n}\n\n.omniscribe_transcription-panel-cut-line {\n flex: 1;\n height: 1px;\n background-color: #fed7aa;\n}\n\n.omniscribe_transcription-panel-cut-label {\n flex-shrink: 0;\n padding: 2px 10px;\n border-radius: 9999px;\n background-color: #fff7ed;\n border: 1px solid #fed7aa;\n color: #c2410c;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n}\n\n/* Scrollbar styles */\n.omniscribe_transcription-panel-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.omniscribe_transcription-panel-content::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: var(--color-gray-300, #d1d5db);\n}\n\n.omniscribe_transcription-panel-content::-webkit-scrollbar-track {\n background-color: transparent;\n}\n\n/* Firefox */\n.omniscribe_transcription-panel-content {\n scrollbar-width: thin;\n scrollbar-color: var(--color-gray-300, #d1d5db) transparent;\n}\n\n/* Processing skeleton indicator */\n.omniscribe_transcription-panel-processing {\n padding-top: 5px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Processing skeleton indicator */\n.omniscribe_transcription-processing {\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-processing-lines {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-skeleton-line {\n height: 14px;\n width: 70%;\n}\n\n.omniscribe_transcription-skeleton-line--short {\n width: 40%;\n}\n\n.omniscribe_transcription-processing-text {\n font-size: var(--text-xs);\n color: var(--omni-secondary, #6b7280);\n}\n\n\n/* Source: modules/chat/components/markdown/LinkGroupMenu.css */\n.omniscribe_link-menu-container {\n width: 18rem;\n border-radius: 0.5rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n border: 1px solid var(--grey-200);\n background-color: var(--omniscribe-surface, #ffffff);\n}\n\n.omniscribe_link-menu-navigation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n border-bottom: 1px solid var(--color-gray-100);\n background-color: var(--grey-50);\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n\n.omniscribe_nav-button {\n height: 1.5rem;\n width: 1.5rem;\n padding: 0.125rem;\n background-color: transparent;\n border: none;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n color: var(--omniscribe-text-muted, #6b7280);\n transition-property:\n color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.omniscribe_nav-button:hover {\n background-color: var(--color-gray-100);\n color: var(--omniscribe-text, #374151);\n}\n\n.omniscribe_nav-button:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n box-shadow: 0 0 0 2px #3b82f6;\n}\n\n.omniscribe_nav-button:active {\n background-color: var(--grey-200);\n}\n\n.omniscribe_nav-icon {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n.omniscribe_page-indicator {\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #4b5563);\n}\n\n.omniscribe_link-menu-content {\n padding: 0.375rem;\n}\n\n\n/* Source: modules/chat/components/markdown/LinkGroupMenuCard.css */\n.omniscribe_card-link {\n display: block;\n border-radius: 0.5rem;\n overflow: hidden;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 200ms;\n background-color: var(--omniscribe-surface, #ffffff);\n border: 1px solid var(--grey-200);\n text-decoration: none;\n}\n\n.omniscribe_card {\n border: 0;\n box-shadow: none;\n border-radius: 0.5rem;\n margin: 0;\n padding: 0;\n}\n\n.omniscribe_card:hover {\n background-color: var(--grey-50);\n}\n\n.omniscribe_card-header {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 0.5rem;\n border-bottom: 1px solid var(--color-gray-100);\n background-color: rgba(249, 250, 251, 0.5);\n}\n\n.omniscribe_favicon {\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.omniscribe_fallback-icon {\n width: 1rem;\n height: 1rem;\n border-radius: 0.125rem;\n background-color: #d1d5db;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.omniscribe_fallback-text {\n font-size: 8px;\n font-weight: 700;\n color: var(--grey-600);\n text-transform: uppercase;\n}\n\n.omniscribe_card-title {\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n color: var(--grey-800);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-grow: 1;\n min-width: 0;\n margin: 0;\n}\n\n.omniscribe_card-content {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.omniscribe_card-content > * + * {\n margin-top: 0.25rem;\n}\n\n.omniscribe_link-text {\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n color: var(--color-activeblack, #000000);\n line-height: 1.375;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.omniscribe_snippet-text {\n font-size: 0.75rem;\n line-height: 1rem;\n color: var(--omniscribe-text-muted, #4b5563);\n line-height: 1.625;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n/* Source: modules/chat/components/markdown/LinkGroupPill.css */\n.omniscribe_pill-container {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n margin-left: 0.125rem;\n margin-right: 0.125rem;\n}\n\n.omniscribe_pill-button {\n display: inline-flex;\n align-items: center;\n border-radius: 9999px;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n background-color: var(--blue-100);\n color: var(--blue-700);\n border: 1px solid var(--blue-200);\n transition-property:\n color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.omniscribe_pill-button:hover {\n background-color: var(--blue-200);\n}\n\n.omniscribe_pill-button:focus {\n background-color: var(--blue-200);\n outline: 2px solid transparent;\n outline-offset: 2px;\n box-shadow:\n 0 0 0 2px #3b82f6,\n 0 0 0 4px rgba(59, 130, 246, 0.1);\n}\n\n.omniscribe_pill-button--active {\n background-color: var(--blue-200);\n}\n\n.omniscribe_pill-domain {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n@media (min-width: 640px) {\n .omniscribe_pill-domain {\n max-width: 200px;\n }\n}\n\n.omniscribe_pill-counter {\n margin-left: 0.375rem;\n background-color: var(--blue-200);\n color: #1e40af;\n border-radius: 9999px;\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n font-size: 10px;\n line-height: 1;\n font-weight: 600;\n}\n\n.omniscribe_menu-portal {\n position: absolute;\n z-index: 100;\n}\n\n\n/* Source: modules/chat/components/markdown/MarkdownText.css */\n.omniscribe_markdown-code-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: calc(var(--spacing) * 4) /* 1rem = 16px */;\n border-top-left-radius: var(--radius) /* 0.25rem = 4px */;\n border-top-right-radius: var(--radius) /* 0.25rem = 4px */;\n background-color: var(--color-zinc-900)\n /* oklch(21% 0.006 285.885) = #18181b */;\n padding-inline: calc(var(--spacing) * 4) /* 1rem = 16px */;\n padding-block: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n color: var(--white);\n}\n\n.omniscribe_markdown-code-span {\n text-transform: lowercase;\n & > span {\n font-size: var(--text-xs) /* 0.75rem = 12px */;\n line-height: var(--text-xs--line-height) /* calc(1 / 0.75) ≈ 1.3333 */;\n }\n}\n\n.omniscribe_markdown-h1 {\n margin-bottom: calc(var(--spacing) * 8) /* 2rem = 32px */;\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-4xl) /* 2.25rem = 36px */;\n line-height: var(--text-4xl--line-height) /* calc(2.5 / 2.25) ≈ 1.1111 */;\n font-weight: var(--font-weight-extrabold) /* 800 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-h2 {\n margin-bottom: calc(var(--spacing) * 4);\n margin-top: calc(var(--spacing) * 8) /* 2rem = 32px */;\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-3xl) /* 1.875rem = 30px */;\n line-height: var(--text-3xl--line-height) /* calc(2.25 / 1.875) ≈ 1.2 */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n.omniscribe_markdown-h3 {\n margin-bottom: calc(var(--spacing) * 4);\n margin-top: calc(var(--spacing) * 6);\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-2xl);\n line-height: var(--text-2xl--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-h4 {\n margin-bottom: calc(var(--spacing) * 4);\n margin-top: calc(var(--spacing) * 6);\n scroll-margin: calc(var(--spacing) * 20) /* 5rem = 80px */;\n font-size: var(--text-xl);\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n.omniscribe_markdown-h5 {\n margin-block: calc(var(--spacing) * 4) /* 1rem = 16px */;\n font-size: var(--text-lg);\n line-height: var(--text-lg--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-h6 {\n margin-block: calc(var(--spacing) * 4) /* 1rem = 16px */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-p {\n margin-block: calc(var(--spacing) * 2.5);\n line-height: calc(var(--spacing) * 5);\n &:first-child {\n margin-top: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0) /* 0rem = 0px */;\n }\n}\n\n.omniscribe_markdown-a {\n color: var(--primary);\n font-weight: var(--font-weight-medium) /* 500 */;\n text-decoration-line: underline;\n text-underline-offset: 4px;\n overflow-wrap: break-word;\n}\n\n.omniscribe_markdown-blockquote {\n border-left-width: 2px;\n padding-left: calc(var(--spacing) * 6) /* 1.5rem = 24px */;\n font-style: italic;\n}\n\n.omniscribe_markdown-ul {\n list-style-type: disc;\n padding-inline-start: 20px;\n word-break: break-word;\n & > li {\n margin-top: calc(var(--spacing) * 1) /* 0.5rem = 8px */;\n }\n}\n\n.omniscribe_markdown-ol {\n margin-block: calc(var(--spacing) * 5) /* 1.25rem = 20px */;\n margin-left: calc(var(--spacing) * 6) /* 1.5rem = 24px */;\n list-style-type: decimal;\n & > li {\n margin-top: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n }\n}\n\n.omniscribe_markdown-hr {\n margin-block: calc(var(--spacing) * 5) /* 1.25rem = 20px */;\n border-bottom-width: 1px;\n}\n.omniscribe_markdown-table {\n margin-block: calc(var(--spacing) * 5) /* 1.25rem = 20px */;\n width: 100%;\n border-collapse: separate;\n border-spacing: calc(var(--spacing) * 0) /* 0rem = 0px */;\n overflow-y: auto;\n}\n.omniscribe_markdown-th {\n background-color: var(--muted);\n padding-inline: calc(var(--spacing) * 4) /* 1rem = 16px */;\n padding-block: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n text-align: left;\n font-weight: var(--font-weight-bold) /* 700 */;\n &:first-child {\n border-top-left-radius: var(--radius) /* 0.25rem = 4px */;\n }\n &:last-child {\n border-top-right-radius: var(--radius) /* 0.25rem = 4px */;\n }\n &[align='center'] {\n text-align: center;\n }\n &[align='right'] {\n text-align: right;\n }\n}\n\n.omniscribe_markdown-td {\n border-bottom-width: 1px;\n border-left-width: 1px;\n padding-inline: calc(var(--spacing) * 4) /* 1rem = 16px */;\n padding-block: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n text-align: left;\n &:last-child {\n border-right-width: 1px;\n }\n &[align='center'] {\n text-align: center;\n }\n &[align='right'] {\n text-align: right;\n }\n}\n\n.omniscribe_markdown-tr {\n margin: calc(var(--spacing) * 0) /* 0rem = 0px */;\n &:first-child {\n border-top-width: 1px;\n }\n &:last-child > td:first-child {\n border-bottom-left-radius: var(--radius) /* 0.25rem = 4px */;\n }\n &:last-child > td:last-child {\n border-bottom-right-radius: var(--radius) /* 0.25rem = 4px */;\n }\n}\n\n.omniscribe_markdown-sup {\n font-size: var(--text-xs) /* 0.75rem = 12px */;\n line-height: var(--text-xs--line-height) /* calc(1 / 0.75) ≈ 1.3333 */;\n & > a {\n text-decoration-line: none;\n }\n}\n\n.omniscribe_markdown-pre {\n overflow-x: auto;\n border-bottom-right-radius: var(--radius) /* 0.25rem = 4px */;\n border-bottom-left-radius: var(--radius) /* 0.25rem = 4px */;\n background-color: var(--black);\n padding: calc(var(--spacing) * 4) /* 1rem = 16px */;\n color: var(--white);\n max-width: var(--container-4xl) /* 56rem = 896px */;\n}\n\n.omniscribe_markdown-code {\n border-radius: 0.25rem /* 4px */;\n font-weight: var(--font-weight-semibold) /* 600 */;\n}\n\n.omniscribe_markdown-link {\n color: var(--color-primary); /* text-primary */\n font-weight: 500; /* font-medium */\n text-decoration: underline; /* underline */\n text-underline-offset: 4px; /* underline-offset-4 */\n word-wrap: break-word; /* break-words */\n}\n\n.omniscribe_markdown-link:hover {\n color: var(--color-primary-dark); /* hover:text-primary-dark */\n}\n\n.omniscribe_assistant-markdown-container strong,\n.omniscribe_assistant-markdown-container b {\n font-weight: bold !important;\n}\n\n\n/* Source: modules/chat/components/markdown/tooltip-icon-button.css */\n/* Tooltip icon button styles */\n.omniscribe_tooltip-icon-button-btn {\n padding: 4px;\n min-width: auto;\n min-height: auto;\n}\n\n.omniscribe_tooltip-icon-button-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n\n/* Source: modules/chat/components/messages/AssistantMessage.css */\n.omniscribe_assistant-message-container {\n display: flex;\n align-items: flex-start;\n margin-right: auto;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n width: 100%;\n}\n\n.omniscribe_assistant-message-calls-container {\n display: flex;\n flex-direction: column;\n max-width: 100%;\n}\n\n.omniscribe_assistant-markdown-container {\n padding-block: calc(var(--spacing) * 0.5) /* 0.25rem = 4px */;\n}\n\n.omniscribe_assistant-commands-container {\n display: flex;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n align-items: center;\n margin-right: auto;\n}\n.omniscribe_assistant-message-container:hover,\n.omniscribe_assistant-message-container:focus {\n .omniscribe_assistant-commands-container {\n opacity: 100%;\n }\n}\n\n\n/* Source: modules/chat/components/messages/AssistantMessageLoading.css */\n/* Assistant message loading animation */\n.omniscribe_assistant-message-loading-container {\n display: flex;\n align-items: center;\n padding: 8px 0;\n}\n\n.omniscribe_assistant-message-loading {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_assistant-message-loading-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #666;\n animation: omniscribe-assistant-dot-flashing 1.4s infinite linear;\n}\n\n.omniscribe_assistant-message-loading-dot:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.omniscribe_assistant-message-loading-dot:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n.omniscribe_assistant-message-loading-dot:nth-child(3) {\n animation-delay: 0s;\n}\n\n@keyframes omniscribe-assistant-dot-flashing {\n 0%,\n 80%,\n 100% {\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n}\n\n\n/* Source: modules/chat/components/messages/BranchSwitcher.css */\n.omniscribe_brand-switcher-container {\n display: flex;\n align-items: center;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n}\n\n.omniscribe_brand-switcher-text {\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(\n --tw-leading,\n var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */\n );\n}\n\n.omniscribe_brand-switcher-btn {\n width: calc(0.25rem /* 4px */ * 6) /* 1.5rem = 24px */;\n height: calc(0.25rem /* 4px */ * 6) /* 1.5rem = 24px */;\n padding: calc(0.25rem /* 4px */ * 1) /* 0.25rem = 4px */;\n}\n\n\n/* Source: modules/chat/components/messages/CommandBar.css */\n.omniscribe_command-bar-container {\n display: flex;\n align-items: center;\n padding-right: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n transition: opacity 0.2s ease-in-out;\n}\n\n.omniscribe_command-bar-container.omniscribe_command-bar-hidden {\n opacity: 0;\n pointer-events: none;\n}\n\n.thumbs.active {\n color: var(--blue-500);\n}\n\n.omniscribe_feedback-button-container {\n position: relative;\n display: inline-block;\n}\n\n.omniscribe_command-bar-container-icon-color,\n.thumbs {\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_command-bar-container svg {\n width: 12px !important;\n height: 12px !important;\n}\n\n.omniscribe_command-bar-container .omniscribe_tooltip-icon-button-btn {\n padding: calc(var(--spacing) * 0.5) !important;\n}\n\n.omniscribe_command-bar-container .tooltip-base {\n padding: 0.25rem 0.5rem;\n}\n\n.omniscribe_command-bar-container .tooltip-trigger {\n padding: 1px;\n margin: 1px;\n}\n\n.omniscribe_command-bar-container .omniscribe_button-size-icon {\n height: calc(var(--spacing) * 3);\n width: calc(var(--spacing) * 3);\n}\n\n\n/* Source: modules/chat/components/messages/HumanMessage.css */\n.omniscribe_human-message-container {\n display: flex;\n align-items: center;\n margin-left: auto;\n gap: calc(var(--spacing) * 2) /* 0.5rem = 8px */;\n}\n.omniscribe_human-message-container-editing {\n width: 100%;\n max-width: var(--container-xl) /* 36rem = 576px */;\n}\n.omniscribe_human-message-container-no-editing {\n max-width: 100%;\n}\n\n.omniscribe_human-message-command-container {\n display: flex;\n gap: calc(var(--spacing) * 1) /* 0.5rem = 8px */;\n align-items: center;\n margin-left: auto;\n}\n.omniscribe_human-message-command-container-editing {\n opacity: 100%;\n}\n\n.omniscribe_human-message-container:focus,\n.omniscribe_human-message-container:hover {\n .omniscribe_human-message-command-container {\n opacity: 100%;\n }\n}\n\n.omniscribe_human-message-subcontainer {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n.omniscribe_human-message-subcontainer-editing {\n width: 100%;\n}\n\n.omniscribe_human-message-content {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n}\n\n.omniscribe_human-message-content-text {\n text-align: right;\n padding-top: 4px;\n padding-bottom: 4px;\n padding-inline: calc(var(--spacing) * 2);\n border-radius: var(--radius-3xl);\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n font-weight: 500;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n margin: 0;\n}\n.omniscribe_human-message-textarea {\n min-height: 2.5rem !important; /* 40px */\n max-height: 12rem !important; /* 192px - Allow more vertical space */\n min-width: 200px !important; /* Minimum width for usability */\n resize: both; /* Allow controlled resizing in both directions */\n width: 100%;\n overflow: auto; /* Enable scroll when content exceeds max dimensions */\n\n &:focus-visible {\n box-shadow: var(--tw-ring-inset,) 0 0 0\n calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);\n }\n}\n\n.omniscribe_human-message-textarea-chat-history-close {\n max-width: 100% !important;\n}\n\n.omniscribe_human-message-textarea-chat-history-open {\n max-width: 385px !important;\n}\n\n\n/* Source: modules/chat/components/messages/MessageImages.css */\n/* Message Files Container (for both images and documents) */\n.omniscribe_message-files {\n margin-top: 8px;\n margin-bottom: 4px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Message Images Container */\n.omniscribe_message-images {\n display: flex;\n flex-direction: column;\n}\n\n.omniscribe_message-images-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n max-width: 100%;\n}\n\n/* Individual Image Container */\n.omniscribe_message-image-container {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n background-color: var(--omniscribe-surface-alt, #f5f5f5);\n border: 1px solid var(--omniscribe-border, #e0e0e0);\n cursor: pointer;\n transition:\n transform 0.2s ease,\n box-shadow 0.2s ease;\n}\n\n.omniscribe_message-image-container:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n.omniscribe_message-image-container-single {\n max-width: 200px;\n max-height: 200px;\n}\n\n.omniscribe_message-image-container-multiple {\n width: 80px;\n height: 80px;\n flex-shrink: 0;\n}\n\n/* Image Element */\n.omniscribe_message-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.omniscribe_message-image-container-single .omniscribe_message-image {\n max-width: 200px;\n max-height: 200px;\n width: auto;\n height: auto;\n}\n\n/* Loading State */\n.omniscribe_message-image-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 60px;\n background-color: var(--omniscribe-surface-alt, #f8f9fa);\n color: var(--omniscribe-text-muted, #6c757d);\n font-size: 12px;\n border-radius: 8px;\n}\n\n/* Error State */\n.omniscribe_message-image-error {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 60px;\n background-color: var(--omniscribe-surface-alt, #f8f9fa);\n color: var(--omniscribe-text-muted, #6c757d);\n font-size: 12px;\n border-radius: 8px;\n text-align: center;\n cursor: default;\n}\n\n.omniscribe_message-image-error span {\n font-size: 20px;\n margin-bottom: 4px;\n}\n\n.omniscribe_message-image-error small {\n font-size: 10px;\n}\n\n/* Image Counter for Multiple Images */\n.omniscribe_message-image-counter {\n position: absolute;\n top: 4px;\n right: 4px;\n background-color: rgba(0, 0, 0, 0.7);\n color: white;\n font-size: 10px;\n font-weight: bold;\n padding: 2px 6px;\n border-radius: 12px;\n min-width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Images Count */\n.omniscribe_message-images-count {\n margin-top: 4px;\n font-size: 11px;\n color: var(--omniscribe-text-muted, #6c757d);\n font-style: italic;\n}\n\n/* Modal for Full-Size Images */\n.omniscribe_message-image-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.omniscribe_message-image-modal-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n}\n\n.omniscribe_message-image-modal-content {\n position: relative;\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.omniscribe_message-image-modal-img {\n max-width: 100%;\n max-height: 100%;\n border-radius: 8px;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n}\n\n.omniscribe_message-image-modal-close {\n position: absolute;\n top: -10px;\n right: -10px;\n background-color: var(--omniscribe-surface, #fff);\n border: none;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 18px;\n font-weight: bold;\n color: var(--omniscribe-text, #333);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n transition: background-color 0.2s ease;\n}\n\n.omniscribe_message-image-modal-close:hover {\n background-color: var(--omniscribe-surface-alt, #f5f5f5);\n}\n\n/* Message Documents Container */\n.omniscribe_message-documents {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_message-document {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border-radius: 8px;\n background-color: var(--omniscribe-surface-alt, #f8f9fa);\n border: 1px solid var(--omniscribe-border, #e0e0e0);\n transition: background-color 0.2s ease;\n max-width: 280px;\n}\n\n.omniscribe_message-document:hover {\n background-color: var(--omniscribe-surface-alt, #f0f0f0);\n}\n\n.omniscribe_message-document-icon {\n font-size: 24px;\n flex-shrink: 0;\n}\n\n.omniscribe_message-document-info {\n flex: 1;\n min-width: 0;\n}\n\n.omniscribe_message-document-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--omniscribe-text, #333);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.omniscribe_message-document-size {\n font-size: 11px;\n color: var(--omniscribe-text-muted, #6c757d);\n}\n\n.omniscribe_message-documents-count {\n margin-top: 4px;\n font-size: 11px;\n color: var(--omniscribe-text-muted, #6c757d);\n font-style: italic;\n}\n\n\n/* Source: modules/chat/components/messages/ToolCalls.css */\n.omniscribe_tool-calls-container {\n margin-block-start: calc(calc(var(--spacing) * 4) * var(0));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(0)));\n width: 100%;\n max-width: var(--container-4xl) /* 56rem = 896px */;\n}\n\n.omniscribe_tool-calls-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n max-width: 100%;\n flex-wrap: wrap;\n gap: calc(var(--spacing) * 1) /* 0.25rem = 4px */;\n}\n.omniscribe_tool-calls-h3 {\n font-weight: var(--font-weight-bold);\n color: var(--color-gray-900) /* oklch(21% 0.034 264.665) = #101828 */;\n word-break: break-all;\n font-size: 14px;\n margin: 0;\n}\n\n.omniscribe_tool-calls-item-args {\n align-items: flex-start;\n flex-wrap: wrap;\n}\n.omniscribe_tool-calls-item-args-text {\n word-break: break-all;\n margin-right: calc(var(--spacing) * 1) /* 0.25rem = 4px */;\n padding-block: calc(var(--spacing) * 1) /* 0.25rem = 4px */;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(\n --tw-leading,\n var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */\n );\n}\n\n.omniscribe_tool-calls-item-args-code {\n background-color: var(--color-gray-50);\n border-radius: 0.25rem /* 4px */;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(\n --tw-leading,\n var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */\n );\n word-break: break-all;\n}\n\n.omniscribe_tool-calls-pre {\n font-size: 12px;\n}\n\n\n/* Source: modules/chat/components/messages/ToolResults.css */\n/* ToolResult Component Styles */\n\n.omniscribe_tool-result {\n margin-top: 2px;\n border: 1px solid var(--grey-200);\n border-radius: 0.5rem !important; /* !rounded-lg */\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); /* shadow-sm */\n overflow: hidden; /* overflow-hidden */\n width: 100%;\n}\n\n.omniscribe_tool-result-header {\n background-color: var(--grey-50); /* bg-gray-50 */\n padding-left: 1rem; /* px-4 */\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n display: flex; /* flex */\n align-items: center; /* items-center */\n justify-content: space-between; /* justify-between */\n}\n\n.omniscribe_tool-result-header--expanded {\n border-bottom: 1px solid var(--grey-200);\n}\n\n.omniscribe_tool-result-header-content {\n display: flex; /* flex */\n align-items: center; /* items-center */\n gap: 0.5rem; /* gap-2 */\n min-width: 0; /* min-w-0 */\n}\n\n.omniscribe_tool-result-title {\n font-weight: 500; /* font-medium */\n color: var(--grey-900);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; /* truncate */\n margin: 0;\n font-size: 14px;\n}\n\n.omniscribe_expand-button {\n padding: 0.25rem; /* p-1 */\n flex-shrink: 0; /* flex-shrink-0 */\n}\n\n.omniscribe_expand-icon {\n width: 1.25rem; /* w-5 */\n height: 1.25rem; /* h-5 */\n}\n\n.omniscribe_tool-result-content {\n padding: 1rem; /* p-4 */\n background-color: var(--omniscribe-surface, #ffffff); /* bg-white */\n max-height: 24rem; /* max-h-96 */\n overflow-y: auto; /* overflow-y-auto */\n}\n\n.omniscribe_tool-result-content > * + * {\n margin-top: 0.5rem; /* space-y-2 */\n}\n\n/* Scrollbar styles for webkit browsers */\n.omniscribe_tool-result-content::-webkit-scrollbar {\n width: 8px;\n}\n\n.omniscribe_tool-result-content::-webkit-scrollbar-track {\n background: #f1f5f9;\n border-radius: 4px;\n}\n\n.omniscribe_tool-result-content::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 4px;\n}\n\n.omniscribe_tool-result-content::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n}\n\n.omniscribe_result-card {\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); /* shadow-sm */\n border: 1px solid var(--color-gray-100);\n padding-top: 0.5rem !important; /* !py-2 */\n padding-bottom: 0.5rem !important;\n gap: 0 !important; /* !gap-0 */\n}\n\n.omniscribe_result-card-header {\n padding-top: 0.5rem !important; /* !pt-2 */\n padding-left: 0.5rem !important; /* !px-2 */\n padding-right: 0.5rem !important;\n padding-bottom: 0 !important; /* !pb-0 */\n}\n\n.omniscribe_result-card-title {\n font-size: 0.875rem; /* text-sm */\n line-height: 1.25rem;\n font-weight: 600; /* font-semibold */\n}\n\n.omniscribe_result-link {\n color: var(--blue-600);\n text-decoration: none;\n transition-property: color, text-decoration;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.omniscribe_result-link:hover {\n text-decoration: underline; /* hover:underline */\n color: #1e40af; /* hover:text-blue-800 */\n}\n\n.omniscribe_result-card-content {\n padding: 0.5rem !important; /* !p-2 */\n padding-top: 0 !important; /* !pt-0 */\n}\n\n.omniscribe_result-description {\n font-size: 0.75rem; /* text-xs */\n line-height: 1rem;\n color: var(--omniscribe-text, #374151); /* text-gray-700 */\n line-height: 1.625; /* leading-relaxed */\n word-break: break-all; /* break-all */\n display: -webkit-box;\n -webkit-line-clamp: 2; /* line-clamp-2 */\n -webkit-box-orient: vertical;\n overflow: hidden;\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms; /* transition-all duration-150 ease-in-out */\n transition-timing-function: cubic-bezier(0.4, 0, 0.6, 1); /* ease-in-out */\n}\n\n.omniscribe_result-description:hover {\n -webkit-line-clamp: unset; /* hover:line-clamp-none */\n display: block;\n}\n\n.omniscribe_result-source {\n font-size: 0.75rem; /* text-xs */\n line-height: 1rem;\n color: var(--omniscribe-text-muted, #6b7280); /* text-gray-500 */\n margin-top: 0.25rem; /* mt-1 */\n padding-top: 0.25rem; /* pt-1 */\n border-top: 1px solid var(--color-gray-100);\n}\n\n.omniscribe_string-result {\n font-size: 0.875rem; /* text-sm */\n line-height: 1.25rem;\n white-space: pre-wrap; /* whitespace-pre-wrap */\n background-color: var(--grey-50);\n padding: 0.75rem; /* p-3 */\n border-radius: 0.375rem; /* rounded-md */\n border: 1px solid var(--grey-200);\n font-family:\n ui-monospace, SFMono-Regular, 'SF Mono', Consolas, 'Liberation Mono', Menlo,\n monospace; /* pre tag font */\n}\n\n\n/* Source: modules/header/components/ConfigHeader.css */\n/* Config Header Styles */\n.omniscribe_config-view {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n max-height: 17px;\n padding: 16px;\n}\n\n.omniscribe_config-back-group {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n background: none;\n border: none;\n padding: 0;\n}\n\n.omniscribe_config-back-label {\n margin: 0;\n color: var(--omniscribe-text, #000000);\n font-size: 14px;\n font-weight: 700;\n line-height: 17px;\n}\n\n.omniscribe_config-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background-color: var(--omniscribe-surface-alt, #edeff2);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: var(--Radius-radius-round, 99999px);\n cursor: pointer;\n color: var(--omniscribe-text, #000000);\n font-size: 14px;\n line-height: 1;\n padding: 0;\n}\n\n\n/* Source: modules/header/components/ConnectedButtons.css */\n/* Connected Buttons Styles */\n.omniscribe_connected-buttons {\n display: flex;\n border-radius: var(--Radius-radius-medium, 8px);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n overflow: hidden;\n}\n\n.omniscribe_connected-btn-left {\n border: none !important;\n border-radius: 0 !important;\n border-right: 1px solid var(--omniscribe-border, #e5e7ec) !important;\n}\n\n.omniscribe_connected-btn-right {\n border: none !important;\n border-radius: 0 !important;\n}\n\n/* Ensure connected buttons have consistent styling */\n.omniscribe_connected-buttons .omniscribe_utility-btns {\n min-height: 40px;\n}\n\n\n/* Source: modules/header/components/ConsentIndicator.css */\n.omniscribe_consent-indicator {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 10px;\n font-weight: var(--Font-Weight-Regular, 400);\n line-height: var(--text-xs--line-height, 14.4px);\n letter-spacing: var(--text-xs--letter-spacing, 0.05px);\n white-space: nowrap;\n margin-right: 8px;\n gap: 4px;\n border: 1px solid var(--border, #e5e7ec);\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_consent-indicator-tooltip {\n border-radius: var(--radius-lg, 12px) !important;\n border: 1px solid var(--border, #e5e7ec) !important;\n box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25) !important;\n display: flex !important;\n padding: 10px 8px !important;\n font-size: 10px !important;\n font-weight: 400 !important;\n line-height: var(--text-xs--line-height, 14.4px) !important;\n letter-spacing: var(--text-xs--letter-spacing, 0.05px) !important;\n}\n\n/* SOF-844: express refusal of AI use. Distinct from \"not signed yet\" — the\n whole point of the third state is that they must not look alike. */\n.omniscribe_consent-indicator--refused {\n background-color: var(--omniscribe-danger-soft, #fee2e2);\n color: var(--omniscribe-danger, #b91c1c);\n border-color: var(--omniscribe-danger, #b91c1c);\n}\n\n/* SOF-845: the consent may be signed and the assistant still blocked by another\n rule. The badge stays truthful about the consent, but must not read as \"all\n clear\" at a glance while recording is disabled. */\n.omniscribe_consent-indicator--blocked {\n background-color: var(--omniscribe-warning-soft, #fef3c7);\n color: var(--omniscribe-warning, #92400e);\n border-color: var(--omniscribe-warning, #92400e);\n}\n\n\n/* Source: modules/header/components/MainHeader.css */\n/* Main Header Styles */\n.omniscribe_main-header {\n display: flex;\n align-items: center;\n width: 100%;\n}\n\n.omniscribe_main-header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n.omniscribe_main-header-title {\n margin: 0;\n color: var(--omniscribe-text, #252a32);\n font-size: 14px;\n font-weight: 500;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n}\n\n.omniscribe_main-header-separator {\n width: 1px;\n align-self: stretch;\n margin: -16px 0;\n background-color: var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_main-header-spacer {\n flex: 1;\n}\n\n.omniscribe_main-header-settings {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n.omniscribe_main-header-close {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n border: none;\n background: none;\n cursor: pointer;\n}\n\n\n/* Source: modules/header/components/UtilityButton.css */\n/* Utility Button Styles */\n.omniscribe_utility-btn-audio {\n min-height: 40px; /* Match connected buttons height */\n}\n\n.omniscribe_utility-btn-right {\n /* Settings button specific styles can be added here */\n}\n\n/* Base utility button styles are inherited from parent UtilityButtons.css */\n\n\n/* Source: modules/header/components/WarningBanner.css */\n/* Warning Banner Styles */\n.omniscribe_warning-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px;\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_warning-banner-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background-color: var(--omniscribe-border, #e5e7ec);\n border-radius: 50%;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.omniscribe_warning-banner-close:hover {\n background-color: #d1d5db;\n}\n\n.omniscribe_warning-banner-text {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.25;\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n\n/* Source: modules/header/section/UtilityButtons.css */\n.omniscribe_header-wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: var(--omniscribe-surface, #ffffff);\n border-top-right-radius: 12px;\n border-top-left-radius: 12px;\n}\n\n.omniscribe_utility-btns-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n background-color: var(--omniscribe-surface, #ffffff);\n overflow: hidden;\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n align-self: stretch;\n border-top-right-radius: inherit;\n border-top-left-radius: inherit;\n}\n\n.omniscribe_utility-btns-left,\n.omniscribe_utility-btns-right {\n display: flex;\n flex-direction: row;\n gap: 4px;\n align-items: center;\n}\n\n.omniscribe_utility-btn-right {\n border-radius: var(--Radius-radius-round, 99999px) !important;\n background-color: var(--omniscribe-surface-alt, #f6f7f9) !important;\n border: none !important;\n}\n\n.omniscribe_utility-btns {\n cursor: pointer;\n transition-duration: 300ms;\n background-color: color-mix(in oklab, var(--white) 30%, transparent);\n border-radius: var(--Radius-radius-medium, 8px);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n position: relative;\n padding: 8px;\n display: flex;\n align-items: center;\n\n &:hover {\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n }\n}\n\n.omniscribe_utility-btns-pointer {\n pointer-events: auto;\n}\n\n.omniscribe_utility-btns-no-pointer {\n pointer-events: none;\n background-color: var(--white);\n}\n\n.omniscribe_utility-btns-no-pointer-opacity {\n pointer-events: none;\n opacity: 50%;\n}\n\n.omniscribe_utility-btns-opacity {\n background-color: var(--white);\n opacity: 100%;\n}\n\n.omniscribe_utility-btns-active {\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n border: 1px solid var(--omniscribe-primary, #105bdb);\n}\n\n.omniscribe_btn-label {\n margin-left: 6px;\n font-size: 14px;\n color: var(--omniscribe-text, #212529);\n font-weight: 500;\n}\n\n.omniscribe_btn-label-active {\n color: var(--omniscribe-primary, #105bdb);\n}\n\n.omniscribe_btn-label-inactive {\n color: var(--omniscribe-text, #212529);\n}\n\n.omniscribe_icon {\n color: var(--active-black);\n}\n\n.omniscribe_icon-active {\n color: var(--omniscribe-primary, #105bdb);\n}\n\n\n/* Source: modules/insertionPreview/InsertionPreviewModal.css */\n/* Insertion Preview Modal — ported from the demo's .sugg-* styles\n (dev-tools/demo/src/style.css:715-891). Uses BEM-style naming under\n omniscribe_insertion-preview to stay scoped inside the SDK shadow DOM.\n\n Theming hooks (set on the `<sofia-sdk>` element, they cross the shadow\n boundary; classes don't):\n\n --omniscribe-insertion-preview-reserve px reserved for chat widget on the right\n --omniscribe-insertion-preview-primary brand color (selection / apply button)\n --omniscribe-insertion-preview-primary-soft soft pill background using primary\n --omniscribe-insertion-preview-primary-text text color sitting on primary-soft\n --omniscribe-insertion-preview-accent attention color (gaps)\n --omniscribe-insertion-preview-accent-soft soft pill background using accent\n --omniscribe-insertion-preview-accent-bg gap-section background\n --omniscribe-insertion-preview-text primary text\n --omniscribe-insertion-preview-text-muted secondary text / chrome\n --omniscribe-insertion-preview-border panel + group border\n --omniscribe-insertion-preview-border-soft in-panel separators\n --omniscribe-insertion-preview-input-border form-control border\n --omniscribe-insertion-preview-checkbox-border unchecked checkbox stroke\n --omniscribe-insertion-preview-surface panel background\n --omniscribe-insertion-preview-surface-alt header / footer / hover background\n\n Defaults cascade THROUGH the main SDK tokens (`--omniscribe-*`) before\n falling back to a hard-coded literal. So:\n\n 1. If the host sets `--omniscribe-insertion-preview-primary` →\n only the modal picks it up (per-surface theming).\n 2. Else if the host sets `--omniscribe-primary` (the chat-widget\n token) → BOTH chat and modal share it (unified theme — the\n out-of-the-box experience).\n 3. Else → falls back to the hard-coded SDK default (Sofia blue),\n matching the chat widget's stock look.\n\n Tokens without a chat-widget counterpart (accent / text-muted /\n border-soft / surface-alt etc.) keep their own defaults. */\n\n.omniscribe_insertion-preview__backdrop,\n.omniscribe_insertion-preview__panel {\n --_primary: var(\n --omniscribe-insertion-preview-primary,\n var(--omniscribe-primary, #105bdb)\n );\n --_primary-soft: var(\n --omniscribe-insertion-preview-primary-soft,\n var(--omniscribe-primary-soft, #e7effd)\n );\n --_primary-text: var(\n --omniscribe-insertion-preview-primary-text,\n var(--omniscribe-primary, #105bdb)\n );\n --_accent: var(--omniscribe-insertion-preview-accent, #c77700);\n --_accent-soft: var(--omniscribe-insertion-preview-accent-soft, #fdebc6);\n --_accent-bg: var(--omniscribe-insertion-preview-accent-bg, #fffbf1);\n --_text: var(\n --omniscribe-insertion-preview-text,\n var(--omniscribe-text, #1f2733)\n );\n --_text-muted: var(\n --omniscribe-insertion-preview-text-muted,\n var(--omniscribe-text-muted, #6a7385)\n );\n --_border: var(\n --omniscribe-insertion-preview-border,\n var(--omniscribe-border, #e5e7ec)\n );\n --_border-soft: var(\n --omniscribe-insertion-preview-border-soft,\n var(--omniscribe-border, #eef1f6)\n );\n --_input-border: var(\n --omniscribe-insertion-preview-input-border,\n var(--omniscribe-border, #d6dbe5)\n );\n --_checkbox-border: var(\n --omniscribe-insertion-preview-checkbox-border,\n #b7bfcc\n );\n --_surface: var(\n --omniscribe-insertion-preview-surface,\n var(--omniscribe-surface, #fff)\n );\n --_surface-alt: var(\n --omniscribe-insertion-preview-surface-alt,\n var(--omniscribe-surface-alt, #f6f8fb)\n );\n}\n\n/* The modal must sit above every other surface in the SDK shadow DOM\n (chat panel, toasts, tooltips). 2147483640+ ensures that even with a\n max-int z-index race, the modal wins. */\n.omniscribe_insertion-preview__backdrop {\n position: fixed;\n inset: 0;\n background: rgba(15, 27, 45, 0.42);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n z-index: 2147483640;\n animation: omniscribe_insertion-preview__fade 0.18s ease-out;\n}\n@keyframes omniscribe_insertion-preview__fade {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* `--omniscribe-insertion-preview-reserve` lets the host budget space\n for a floating chat widget so the panel centers in the area NOT\n covered by it. Default: 0px → centered in the full viewport. */\n.omniscribe_insertion-preview__panel {\n position: fixed;\n top: 50%;\n left: calc((100vw - var(--omniscribe-insertion-preview-reserve, 0px)) / 2);\n transform: translate(-50%, -50%);\n z-index: 2147483641;\n width: 680px;\n max-width: calc(\n 100vw - var(--omniscribe-insertion-preview-reserve, 0px) - 32px\n );\n max-height: 84vh;\n background: var(--_surface);\n border: 1px solid var(--_border);\n border-radius: 14px;\n box-shadow: 0 24px 64px rgba(15, 27, 45, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: omniscribe_insertion-preview__in 0.22s ease-out;\n font-family: 'Lato', sans-serif;\n color: var(--_text);\n}\n\n/* Below 1100px there isn't room to sit beside the widget; centered\n fallback (will overlap the widget — same trade-off as the demo). */\n@media (max-width: 1100px) {\n .omniscribe_insertion-preview__panel {\n left: 50%;\n width: 92vw;\n max-width: 720px;\n }\n}\n@keyframes omniscribe_insertion-preview__in {\n from {\n opacity: 0;\n transform: translate(-50%, calc(-50% + 8px)) scale(0.985);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n\n.omniscribe_insertion-preview__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n border-bottom: 1px solid var(--_border);\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n}\n.omniscribe_insertion-preview__close {\n background: transparent;\n border: 0;\n color: var(--_text-muted);\n font-size: 18px;\n line-height: 1;\n padding: 2px 6px;\n border-radius: 4px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__close:hover {\n background: var(--_border-soft);\n color: var(--_text);\n}\n\n.omniscribe_insertion-preview__sub {\n margin: 0;\n padding: 8px 14px;\n font-size: 11.5px;\n color: var(--_text-muted);\n border-bottom: 1px solid var(--_border-soft);\n}\n\n.omniscribe_insertion-preview__body {\n flex: 1;\n overflow-y: auto;\n padding: 4px 0;\n}\n\n.omniscribe_insertion-preview__group {\n border-bottom: 1px solid var(--_border-soft);\n}\n.omniscribe_insertion-preview__group:last-child {\n border-bottom: 0;\n}\n.omniscribe_insertion-preview__group-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px 4px;\n}\n/* The parent label of an array-of-objects group lives inside .group-head\n which already supplies 14px left padding. Without zeroing the inner\n .row padding here, the parent ends up doubly indented (28px) while\n children directly under the section have a single 14px — making the\n parent appear LEFT-shifted relative to its own children. */\n.omniscribe_insertion-preview__group-head .omniscribe_insertion-preview__row {\n padding: 0;\n}\n.omniscribe_insertion-preview__group-name {\n font-size: 10.5px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--_text-muted);\n}\n.omniscribe_insertion-preview__group-count {\n background: var(--_primary-soft);\n color: var(--_primary-text);\n font-size: 10.5px;\n font-weight: 600;\n border-radius: 999px;\n padding: 1px 7px;\n}\n\n.omniscribe_insertion-preview__row {\n display: grid;\n grid-template-columns: 16px 1fr;\n gap: 10px;\n padding: 8px 14px;\n align-items: flex-start;\n cursor: pointer;\n border-radius: 6px;\n}\n.omniscribe_insertion-preview__row:hover {\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__row-checkbox {\n appearance: none;\n width: 14px;\n height: 14px;\n border: 1px solid var(--_checkbox-border);\n border-radius: 3px;\n background: var(--_surface);\n margin-top: 2px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__row-checkbox:checked {\n background: var(--_primary);\n border-color: var(--_primary);\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>\");\n background-repeat: no-repeat;\n background-position: center;\n}\n.omniscribe_insertion-preview__row-body {\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.omniscribe_insertion-preview__row-label {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--_text);\n margin-bottom: 8px;\n}\n.omniscribe_insertion-preview__row-preview {\n font-size: 11.5px;\n color: var(--_text-muted);\n word-break: break-word;\n}\n.omniscribe_insertion-preview__row-line {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 2px 0;\n}\n.omniscribe_insertion-preview__row-line-text {\n flex: 1;\n}\n\n.omniscribe_insertion-preview__row-edit {\n margin-top: 4px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.omniscribe_insertion-preview__row-edit-grid {\n display: grid;\n grid-template-columns: 140px 1fr;\n gap: 6px 12px;\n align-items: center;\n}\n.omniscribe_insertion-preview__row-edit-label {\n font-size: 11px;\n color: var(--_text-muted);\n}\n\n.omniscribe_insertion-preview__edit {\n font: inherit;\n font-size: 12px;\n color: var(--_text);\n border: 1px solid var(--_input-border);\n border-radius: 4px;\n padding: 4px 8px;\n background: var(--_surface);\n width: 100%;\n box-sizing: border-box;\n}\n.omniscribe_insertion-preview__edit--prose {\n min-height: 60px;\n resize: vertical;\n}\n.omniscribe_insertion-preview__edit--toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: 0;\n padding: 0;\n background: transparent;\n}\n.omniscribe_insertion-preview__edit--multi-enum {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n border: 0;\n padding: 0;\n background: transparent;\n}\n.omniscribe_insertion-preview__edit__chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n border: 1px solid var(--_input-border);\n border-radius: 999px;\n padding: 2px 8px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__edit__chip--on {\n background: var(--_primary);\n color: #fff;\n border-color: var(--_primary);\n}\n.omniscribe_insertion-preview__edit__chip input {\n display: none;\n}\n\n/* Searchable enum select */\n.omniscribe_insertion-preview__searchable-select {\n position: relative;\n width: 100%;\n}\n.omniscribe_insertion-preview__searchable-select__trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n font: inherit;\n font-size: 12px;\n border: 1px solid var(--_input-border);\n border-radius: 4px;\n padding: 4px 8px;\n background: var(--_surface);\n cursor: pointer;\n text-align: left;\n}\n.omniscribe_insertion-preview__searchable-select__chevron {\n color: var(--_text-muted);\n}\n.omniscribe_insertion-preview__searchable-select__dropdown {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 5;\n background: var(--_surface);\n border: 1px solid var(--_input-border);\n border-radius: 4px;\n box-shadow: 0 8px 24px rgba(15, 27, 45, 0.12);\n max-height: 200px;\n display: flex;\n flex-direction: column;\n}\n.omniscribe_insertion-preview__searchable-select__search {\n font: inherit;\n font-size: 12px;\n border: 0;\n border-bottom: 1px solid var(--_border-soft);\n padding: 6px 8px;\n outline: none;\n}\n.omniscribe_insertion-preview__searchable-select__list {\n list-style: none;\n margin: 0;\n padding: 4px 0;\n overflow-y: auto;\n}\n.omniscribe_insertion-preview__searchable-select__option {\n padding: 4px 10px;\n font-size: 12px;\n cursor: pointer;\n}\n.omniscribe_insertion-preview__searchable-select__option:hover,\n.omniscribe_insertion-preview__searchable-select__option--selected {\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__searchable-select__option--custom {\n color: var(--_text-muted);\n font-style: italic;\n}\n\n.omniscribe_insertion-preview__row--will-replace {\n background: rgba(199, 119, 0, 0.06);\n}\n.omniscribe_insertion-preview__row-tag {\n font-size: 10px;\n font-weight: 600;\n background: var(--_accent-soft);\n color: var(--_accent);\n padding: 2px 6px;\n border-radius: 999px;\n align-self: flex-start;\n margin-top: 1px;\n}\n\n/* Gaps group */\n.omniscribe_insertion-preview__group--gaps {\n background: var(--_accent-bg);\n border-top: 1px solid var(--_border);\n}\n.omniscribe_insertion-preview__group-name--gap {\n color: var(--_accent);\n}\n.omniscribe_insertion-preview__group-count--gap {\n background: var(--_accent-soft);\n color: var(--_accent);\n}\n.omniscribe_insertion-preview__row--gap {\n grid-template-columns: 18px 1fr;\n cursor: default;\n}\n.omniscribe_insertion-preview__row--gap:hover {\n background: rgba(199, 119, 0, 0.06);\n}\n.omniscribe_insertion-preview__gap-icon {\n color: var(--_accent);\n margin-top: 1px;\n}\n.omniscribe_insertion-preview__row-preview--gap {\n color: var(--_accent);\n}\n\n.omniscribe_insertion-preview__footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 10px 14px;\n border-top: 1px solid var(--_border);\n background: var(--_surface-alt);\n}\n.omniscribe_insertion-preview__btn {\n font: inherit;\n font-size: 12px;\n font-weight: 600;\n border: 1px solid var(--_input-border);\n background: var(--_surface);\n border-radius: 6px;\n padding: 6px 14px;\n cursor: pointer;\n color: var(--_text);\n}\n.omniscribe_insertion-preview__btn--primary {\n background: var(--_primary);\n color: #fff;\n border-color: var(--_primary);\n}\n.omniscribe_insertion-preview__btn--primary:disabled {\n background: #a3b1ad;\n border-color: #a3b1ad;\n cursor: not-allowed;\n}\n\n/* \"Edit with voice\" — secondary action style. Picks up the host's\n --omniscribe-secondary token (falls back to a neutral teal). */\n.omniscribe_insertion-preview__btn--voice {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: var(--_surface);\n color: var(--_primary);\n border-color: var(--_primary);\n}\n.omniscribe_insertion-preview__btn--voice:hover {\n background: var(--_primary-soft);\n}\n.omniscribe_insertion-preview__btn-icon {\n display: inline-block;\n vertical-align: middle;\n flex-shrink: 0;\n}\n.omniscribe_insertion-preview__btn-icon--stop {\n width: 10px;\n height: 10px;\n background: currentColor;\n border-radius: 1px;\n}\n\n/* While recording the voice button morphs into a destructive-styled\n \"Stop\" button so the action reads as final. */\n.omniscribe_insertion-preview__btn--voice-stop {\n background: #dc3545;\n color: #fff;\n border-color: #dc3545;\n}\n.omniscribe_insertion-preview__btn--voice-stop:hover {\n background: #c82333;\n border-color: #c82333;\n}\n\n/* Voice status banner — rendered just under the modal header while the\n chat surface is recording / starting / generating. */\n.omniscribe_insertion-preview__voice-banner {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 14px;\n font-size: 12px;\n border-bottom: 1px solid var(--_border-soft);\n background: var(--_surface-alt);\n color: var(--_text);\n}\n.omniscribe_insertion-preview__voice-banner--recording {\n background: rgba(220, 53, 69, 0.08);\n color: #b21f2c;\n}\n.omniscribe_insertion-preview__voice-banner--generating {\n background: var(--_primary-soft);\n color: var(--_primary-text);\n}\n.omniscribe_insertion-preview__voice-pulse {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n background: #dc3545;\n animation: omniscribe_insertion-preview__pulse 1s ease-in-out infinite;\n flex-shrink: 0;\n}\n@keyframes omniscribe_insertion-preview__pulse {\n 0%,\n 100% {\n opacity: 0.4;\n transform: scale(0.85);\n }\n 50% {\n opacity: 1;\n transform: scale(1.15);\n }\n}\n.omniscribe_insertion-preview__voice-spinner {\n width: 12px;\n height: 12px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: 999px;\n animation: omniscribe_insertion-preview__spin 0.8s linear infinite;\n flex-shrink: 0;\n display: inline-block;\n}\n@keyframes omniscribe_insertion-preview__spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Tiny visual cue on the panel itself while recording. */\n.omniscribe_insertion-preview__panel--voice {\n border-color: rgba(220, 53, 69, 0.4);\n}\n.omniscribe_insertion-preview__close:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n.omniscribe_insertion-preview__footer-spacer {\n flex: 1;\n}\n\n/* Mandatory styling — distinct from the soft amber gap treatment so the\n doctor immediately sees what's blocking. Red border + red pill. */\n.omniscribe_insertion-preview__row--mandatory {\n background: rgba(220, 53, 69, 0.06);\n border-left: 3px solid #dc3545;\n}\n.omniscribe_insertion-preview__row--mandatory\n .omniscribe_insertion-preview__row-preview--gap,\n.omniscribe_insertion-preview__row--mandatory\n .omniscribe_insertion-preview__row-label {\n color: var(--omniscribe-text, #1f2733);\n}\n.omniscribe_insertion-preview__gap-icon--mandatory {\n color: #dc3545;\n}\n.omniscribe_insertion-preview__row-edit-grid--mandatory {\n background: rgba(220, 53, 69, 0.04);\n border-radius: 4px;\n padding: 4px 6px;\n}\n.omniscribe_insertion-preview__mandatory-pill {\n display: inline-block;\n margin-left: 8px;\n padding: 1px 6px;\n font-size: 9.5px;\n font-weight: 700;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n background: #dc3545;\n color: #fff;\n border-radius: 999px;\n}\n.omniscribe_insertion-preview__sub--blocking {\n color: #dc3545;\n font-weight: 600;\n}\n\n/* AI-suggested field: the agent inferred this from context rather\n than from an explicit doctor statement. We tint the editor\n background so the doctor visually distinguishes it from\n confirmed-from-dictation fields, and a small ✨ pill on the\n label tells them what it means. Less alarming than the\n mandatory-red treatment because the field IS filled — we just\n want the doctor to double-check it. */\n.omniscribe_insertion-preview__row-edit-grid--suggested {\n background: rgba(176, 122, 255, 0.06);\n border-left: 2px solid #b07aff;\n border-radius: 4px;\n padding: 4px 6px;\n}\n.omniscribe_insertion-preview__suggested-pill {\n display: inline-block;\n margin-left: 8px;\n padding: 1px 7px;\n font-size: 9.5px;\n font-weight: 600;\n letter-spacing: 0.03em;\n background: rgba(176, 122, 255, 0.12);\n color: #6f48b8;\n border: 1px solid rgba(176, 122, 255, 0.5);\n border-radius: 999px;\n}\n\n/* SOF-659 — read-only \"Attachments\" section (file previews by type). */\n.omniscribe_insertion-preview__attachments {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.omniscribe_insertion-preview__attachments__list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.omniscribe_insertion-preview__attachment {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 8px;\n overflow: hidden;\n background: rgba(0, 0, 0, 0.02);\n}\n\n.omniscribe_insertion-preview__attachment--image {\n display: block;\n max-width: 100%;\n max-height: 240px;\n object-fit: contain;\n}\n\n.omniscribe_insertion-preview__attachment--audio {\n width: 100%;\n padding: 8px;\n}\n\n.omniscribe_insertion-preview__attachment--pdf {\n width: 100%;\n height: 360px;\n border: none;\n}\n\n.omniscribe_insertion-preview__attachment--text {\n margin: 0;\n padding: 10px 12px;\n max-height: 200px;\n overflow: auto;\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.omniscribe_insertion-preview__attachment--file {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n}\n\n.omniscribe_insertion-preview__attachment__name {\n font-size: 13px;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n/* Source: modules/layout/components/OmniscribeContainer/OmniscribeContainer.css */\n.omniscribe_container {\n isolation: isolate;\n position: fixed;\n bottom: calc(var(--spacing) * 5);\n right: 0;\n border-top-left-radius: 30px;\n border-bottom-left-radius: 30px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n z-index: 80;\n}\n\n[dir='ltr'] .omniscribe_container {\n right: 0;\n border-top-left-radius: 30px;\n border-bottom-left-radius: 30px;\n}\n\n[dir='rtl'] .omniscribe_container {\n left: 0;\n right: auto;\n border-top-right-radius: 30px;\n border-bottom-right-radius: 30px;\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n\n\n/* Source: modules/layout/components/OmniscribeLayout/DraggableCollapsed.css */\n/* Draggable Collapsed Container */\n.omniscribe_draggable-collapsed {\n position: fixed;\n bottom: 20px;\n right: 20px;\n cursor: grab;\n z-index: 9999;\n transition: transform 0.1s ease-out;\n user-select: none;\n touch-action: none;\n}\n\n.omniscribe_draggable-collapsed--dragging {\n cursor: grabbing;\n transition: none;\n}\n\n/* Horizontal mode - rotated 90 degrees */\n.omniscribe_draggable-collapsed--horizontal {\n bottom: 20px;\n}\n\n.omniscribe_draggable-collapsed--horizontal .omniscribe_transcribe-collapsed {\n flex-direction: row;\n transform: none;\n}\n\n/* RTL support */\n[dir='rtl'] .omniscribe_draggable-collapsed {\n right: auto;\n left: 20px;\n}\n\n\n/* Source: modules/layout/components/OmniscribeLayout/OmniscribeLayout.css */\n.omniscribe_layout {\n position: fixed;\n width: var(--layout-w);\n background: var(--white);\n bottom: calc(var(--spacing) * 5);\n border-bottom-left-radius: 12px;\n border: solid 1px var(--omniscribe-border, var(--light-border));\n box-shadow: 0px 4px 4px 0px #00000040;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 500ms;\n transition-property: transform, translate, scale, rotate;\n display: flex;\n flex-direction: column;\n height: var(--layout-h);\n min-width: 500px;\n min-height: 500px;\n right: 0;\n border-radius: 12px;\n}\n\n[dir='rtl'] .omniscribe_layout {\n left: 0;\n right: auto;\n border-bottom-right-radius: 12px;\n}\n\n[dir='ltr'] .omniscribe_layout {\n right: 0;\n border-bottom-left-radius: 12px;\n}\n\n.omniscribe_layout-open {\n background: var(--white);\n translate: 0;\n}\n\n.omniscribe_layout-close {\n translate: var(--layout-w);\n}\n\n[dir='rtl'] .omniscribe_layout-close {\n translate: calc(var(--layout-w) * -1);\n}\n\n[dir='ltr'] .omniscribe_layout-close {\n translate: var(--layout-w);\n}\n\n\n/* Source: modules/settings/components/chat/Chat.css */\n.omniscribe_chat-config {\n display: flex;\n flex-direction: column;\n gap: 24px;\n min-height: 0; /* Permite que los hijos controlen su altura */\n flex: 1; /* Toma el espacio disponible */\n}\n\n/* Espaciado específico para el separador en el contexto de chat */\n.omniscribe_chat-config .omniscribe_separator {\n margin: 8px 0; /* Margen vertical consistente */\n}\n\n.omniscribe_chat-prompt-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-right: 16px;\n}\n\n.omniscribe_chat-prompt-textarea {\n width: 100%;\n height: 74px;\n padding: 8px;\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n line-height: 1.5;\n color: var(--omniscribe-text, #374151);\n background-color: var(--omniscribe-surface, white);\n resize: none;\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.omniscribe_chat-prompt-textarea::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af);\n font-style: italic;\n}\n\n.omniscribe_chat-character-count {\n font-size: 12px;\n color: var(--omniscribe-text-muted, #6b7280);\n align-self: flex-start;\n}\n\n\n/* Source: modules/settings/components/chat/PromptCustomization.css */\n.omniscribe_chat-prompt-title {\n font-size: 14px;\n font-weight: 400;\n color: var(--omniscribe-text, #252a32);\n line-height: 14.4px;\n margin: 0 0 12px 0;\n}\n\n.omniscribe_chat-prompt-container {\n position: relative;\n}\n\n.omniscribe_chat-prompt-textarea {\n width: 100%;\n min-height: 80px;\n padding: 12px;\n border: 1px solid var(--border-color, #ddd);\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.4;\n resize: none;\n transition: border-color 0.2s ease;\n}\n\n.omniscribe_chat-prompt-textarea:focus {\n outline: none;\n border-color: var(--omniscribe-primary, #007bff);\n box-shadow: 0 0 0 2px var(--primary-color-alpha, rgba(0, 123, 255, 0.1));\n}\n\n.omniscribe_chat-character-count {\n font-size: 12px;\n color: var(--text-secondary, #666);\n margin-top: 6px;\n text-align: right;\n}\n\n\n/* Source: modules/settings/components/chat/SourceItem.css */\n.omniscribe_source-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n}\n\n.omniscribe_source-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n /* Let the label shrink inside the row so a long name can wrap instead of\n pushing the row wider. */\n flex: 1;\n min-width: 0;\n}\n\n.omniscribe_source-checkbox {\n width: 16px;\n height: 16px;\n accent-color: var(--primary, #105bdb);\n cursor: pointer;\n}\n\n.omniscribe_source-name {\n flex: 1;\n min-width: 0;\n /* A source name with no spaces (e.g. a bare domain) has no wrap points, so\n without this it overflows the row. `anywhere` breaks it only when needed. */\n overflow-wrap: anywhere;\n font-size: 12px;\n color: var(--omniscribe-text, #374151);\n}\n/* Removed link styles for source name - now handled by icon button only */\n.omniscribe_source-external-icon {\n width: 12px;\n height: 12px;\n stroke: var(--primary, #105bdb);\n cursor: pointer;\n transition: stroke 0.2s;\n flex-shrink: 0;\n}\n\n.omniscribe_source-external-icon:hover {\n stroke: #0d47a1;\n}\n\n.omniscribe_source-checkbox:checked + .omniscribe_source-name {\n font-weight: 500;\n color: var(--omniscribe-text, #1f2937);\n}\n\n\n/* Source: modules/settings/components/chat/SourceSelector.css */\n.omniscribe_source-selector {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 24px;\n min-height: 0;\n flex: 1;\n max-width: 100%;\n box-sizing: border-box;\n}\n\n.omniscribe_source-selector-title {\n font-size: 16px;\n font-weight: 500;\n color: var(--omniscribe-text, #252a32);\n margin: 0;\n}\n\n.omniscribe_source-selector-description {\n font-size: 14px;\n color: var(--omniscribe-text-muted, #6b7280);\n line-height: 1.5;\n margin: 0;\n}\n\n.omniscribe_source-list {\n width: 100%;\n max-width: 100%;\n min-height: 105px;\n max-height: 285px;\n border-radius: 12px;\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n background: var(--omniscribe-surface, #ffffff);\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n overflow-y: auto;\n flex: 1;\n box-sizing: border-box;\n}\n\n.omniscribe_source-list--compact {\n max-height: 105px;\n}\n\n\n/* Source: modules/settings/section/Configuration.css */\n.omniscribe_config-content {\n width: 650px;\n max-height: 590px;\n opacity: 1;\n background-color: var(--omniscribe-surface, #ffffff);\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\n.omniscribe_config-list {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n.omniscribe_config-item {\n width: 100%;\n height: 75px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n opacity: 1;\n padding: 10px 22px 10px 16px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n box-sizing: border-box;\n flex-shrink: 0;\n}\n\n.omniscribe_config-item:hover {\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n}\n\n.omniscribe_config-item:focus {\n outline: none;\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n}\n\n.omniscribe_config-item:last-child {\n border-bottom: none;\n}\n\n.omniscribe_config-item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n}\n\n.omniscribe_config-icon {\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_config-item-content {\n flex: 1;\n margin-left: 16px;\n margin-right: 16px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 4px;\n}\n\n.omniscribe_config-item-title {\n margin: 0;\n font-weight: 700;\n font-size: 14px;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n color: var(--omniscribe-text, #252a32);\n}\n\n.omniscribe_config-item-description {\n margin: 0;\n font-weight: 500;\n font-size: 14px;\n line-height: 16.8px;\n letter-spacing: 0.05px;\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n.omniscribe_config-item-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #9ca3af);\n flex-shrink: 0;\n}\n\n/* Sub-screen styles */\n.omniscribe_config-subscreen-header {\n display: flex;\n align-items: center;\n padding: 16px 16px 8px 16px;\n}\n\n.omniscribe_config-back-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n}\n\n.omniscribe_config-subscreen-title {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: var(--omniscribe-text, #252a32);\n line-height: 21.6px;\n}\n\n.omniscribe_config-subscreen-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 16px;\n min-height: 0; /* Permite que los hijos se compriman */\n box-sizing: border-box; /* Incluye padding en el cálculo */\n}\n\n.omniscribe_config-subscreen-content.no-border {\n /* no-border variant */\n}\n\n.omniscribe_config-subscreen-content-template {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 50px;\n}\n\n.omniscribe_config-section-label {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--omniscribe-text, #374151);\n line-height: 1.4;\n}\n\n.omniscribe_config-language-section {\n display: flex;\n flex-direction: column;\n}\n\n/* Audio-environment (VAD) section: titled control with helper text below. */\n.omniscribe_config-audio-env {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 16px;\n}\n\n.omniscribe_config-language-section-title {\n font-size: 16px;\n font-weight: 600;\n color: var(--omniscribe-text, #374151);\n margin-bottom: 8px;\n}\n\n.omniscribe_config-subscreen-description,\n.omniscribe_config-subscreen-subdescription {\n margin: 0 0 0 0;\n font-size: 14px;\n line-height: 18px;\n color: var(--omniscribe-text, #13161a);\n font-weight: 400;\n}\n\n.omniscribe_config-subscreen-subdescription {\n font-style: italic;\n}\n/* Dictionary Options View Styles */\n.omniscribe_config-dictionary-section {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.omniscribe_config-dictionary-add-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.omniscribe_config-dictionary-input-row {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n.omniscribe_config-dictionary-input {\n height: 32px;\n border: 1px solid var(--omniscribe-border, #e5e8eb) !important;\n border-radius: 8px !important;\n padding: 0 12px !important;\n font-size: 14px !important;\n line-height: 1.4 !important;\n background-color: var(--omniscribe-surface, #ffffff) !important;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease !important;\n}\n\n.omniscribe_config-dictionary-input:focus {\n outline: none !important;\n border-color: #4f46e5 !important;\n box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1) !important;\n}\n\n.omniscribe_config-dictionary-input::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af) !important;\n font-size: 14px !important;\n}\n\n.omniscribe_config-dictionary-input.error {\n border-color: #dc3545 !important;\n background-color: #fff5f5 !important;\n}\n\n.omniscribe_config-dictionary-input.error:focus {\n border-color: #dc3545 !important;\n box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.1) !important;\n}\n\n.omniscribe_config-dictionary-add-btn {\n width: 32px;\n height: 32px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--primary);\n border: 1px solid var(--primary);\n border-radius: 8px;\n color: var(--primary-foreground);\n cursor: pointer;\n transition: all 0.2s ease;\n margin-top: 0;\n font-size: 0;\n}\n\n.omniscribe_config-dictionary-add-btn:hover:not(:disabled) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n border-color: color-mix(in oklab, var(--primary) 90%, transparent);\n}\n\n.omniscribe_config-dictionary-add-btn:disabled {\n background-color: #e5e8eb;\n border-color: var(--omniscribe-border, #e5e8eb);\n color: var(--omniscribe-text-muted, #9ca3af);\n cursor: not-allowed;\n transform: none;\n box-shadow: none;\n}\n\n.omniscribe_config-dictionary-list {\n display: flex;\n padding-top: 16px;\n flex-direction: column;\n gap: 8px;\n max-height: 410px;\n overflow-y: auto;\n margin-top: 4px;\n}\n\n.omniscribe_config-dictionary-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 1px solid var(--omniscribe-border, #e5e8eb);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.omniscribe_config-dictionary-row:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n border-color: var(--omniscribe-border, #d1d5db);\n}\n\n.omniscribe_config-dictionary-cell {\n flex: 1;\n font-size: 14px;\n line-height: 20px;\n color: var(--omniscribe-text, #374151);\n word-break: break-word;\n font-weight: 500;\n}\n\n.omniscribe_config-dictionary-arrow {\n color: var(--omniscribe-text-muted, #9ca3af);\n font-size: 16px;\n font-weight: 600;\n flex-shrink: 0;\n margin: 0 4px;\n}\n\n.omniscribe_config-dictionary-delete-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 6px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #6b7280);\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.omniscribe_config-dictionary-delete-btn:hover {\n background-color: #fee2e2;\n color: #dc2626;\n transform: scale(1.05);\n}\n\n.omniscribe_config-dictionary-empty {\n padding: 40px 16px;\n margin-top: 16px;\n text-align: center;\n color: var(--omniscribe-text-muted, #6b7280);\n font-size: 14px;\n line-height: 20px;\n background-color: var(--omniscribe-surface-alt, #f9fafb);\n border: 2px dashed var(--omniscribe-border, #e5e8eb);\n border-radius: 12px;\n font-style: italic;\n}\n\n/* Template specific styles */\n\n/* General prompt section */\n.omniscribe_template-general-prompt-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-bottom: 8px;\n}\n\n.omniscribe_template-section-title {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--omniscribe-text, #374151);\n line-height: 1.4;\n}\n\n.omniscribe_template-section-subtitle {\n margin: 0;\n font-size: 13px;\n font-weight: 400;\n color: var(--omniscribe-text-muted, #6b7280);\n line-height: 1.4;\n}\n\n.omniscribe_template-general-prompt-textarea {\n width: 100%;\n min-height: 80px;\n max-height: 200px;\n padding: 12px;\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n line-height: 1.5;\n color: var(--omniscribe-text, #374151);\n background-color: var(--omniscribe-surface, white);\n resize: vertical;\n box-sizing: border-box;\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.omniscribe_template-general-prompt-textarea::placeholder {\n color: var(--omniscribe-text-muted, #9ca3af);\n font-style: italic;\n}\n\n.omniscribe_template-general-prompt-textarea:focus {\n border-color: #3b5edb;\n box-shadow: 0 0 0 3px rgba(59, 94, 219, 0.1);\n}\n\n/* Fields section */\n.omniscribe_template-fields-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-top: 8px;\n}\n\n.omniscribe_template-field {\n background: var(--omniscribe-surface, white);\n border-bottom: 1px solid var(--omniscribe-border, #e1e8ed);\n margin-bottom: 0;\n}\n\n.omniscribe_template-field:last-child {\n border-bottom: none;\n}\n\n.omniscribe_template-field-header {\n display: flex;\n align-items: center;\n padding: 12px 0;\n background: var(--omniscribe-surface, #ffffff);\n}\n\n.omniscribe_template-field-checkbox {\n background: none;\n border: none;\n padding: 0;\n margin-right: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.omniscribe_template-field-label {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text, #2c3e50);\n}\n\n.omniscribe_template-field-prompt-btn {\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: background-color 0.2s ease;\n flex-shrink: 0;\n}\n\n.omniscribe_template-field-prompt-btn:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n}\n\n.omniscribe_template-field-content {\n padding: 0 0 12px 34px;\n background: var(--omniscribe-surface, white);\n}\n\n.omniscribe_template-textarea {\n width: 100%;\n min-height: 80px;\n max-height: 300px;\n padding: 12px;\n border: 1px solid var(--omniscribe-border, #e1e8ed);\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n resize: vertical;\n background: var(--omniscribe-surface, white);\n box-sizing: border-box;\n overflow-y: auto;\n}\n\n.omniscribe_template-textarea:focus {\n outline: none;\n border-color: #3b5edb;\n box-shadow: 0 0 0 3px rgba(59, 94, 219, 0.1);\n}\n\n.omniscribe_template-character-count {\n margin-top: 8px;\n font-size: 12px;\n color: var(--omniscribe-text-muted, #95a5a6);\n display: flex;\n}\n\n/* Template fields container */\n.omniscribe_template-fields {\n display: flex;\n flex-direction: column;\n background: var(--omniscribe-surface, white);\n}\n\n/* Improved scrollbar for template fields */\n.omniscribe_template-fields::-webkit-scrollbar {\n width: 6px;\n}\n\n.omniscribe_template-fields::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n}\n\n.omniscribe_template-fields::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n}\n\n.omniscribe_template-fields::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n.omniscribe_config-version-section {\n background: var(--omniscribe-surface-alt, #f6f7f9);\n color: var(--omniscribe-text-muted, #4a5364);\n padding: 8px 24px;\n font-weight: 700;\n line-height: 16.8px;\n font-size: 14px;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px;\n}\n\n\n/* Source: modules/transcription/components/content-container/content-containter.css */\n.omniscribe_audio-content-container {\n background-color: var(--white);\n width: -webkit-fill-available;\n flex: 1 1 0 !important;\n min-height: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n overflow: hidden !important;\n}\n\n.omniscribe_audio-content-messages {\n color: var(--black);\n}\n\n.omniscribe_transcription-footer-container {\n position: sticky;\n display: flex;\n flex-direction: column;\n align-items: center;\n bottom: 0;\n padding-bottom: calc(var(--spacing) * 3);\n}\n\n.omniscribe_audio-content-render {\n color: var(--black);\n font-weight: var(--font-weight-medium);\n padding-block: 0.5rem;\n padding-inline: 0.75rem;\n margin-bottom: 0.25rem;\n}\n\n.omniscribe_patient {\n color: #db10c1;\n padding-right: 0.5rem;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n}\n\n.omniscribe_doctor {\n color: var(--blue-500);\n padding-right: 0.5rem;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n}\n\n.omniscribe_speaker {\n color: #28a745;\n padding-right: 0.5rem;\n font-size: var(--text-sm);\n line-height: 1.25rem;\n letter-spacing: 0;\n}\n\n.omniscribe_transcription {\n color: var(--black);\n}\n\n.omniscribe_transcription-down-btn-container {\n background-color: var(--omniscribe-surface, white);\n}\n\n.omniscribe_transcription-down-btn {\n width: calc(0.25rem /* 4px */ * 4);\n height: calc(0.25rem /* 4px */ * 4);\n}\n\n/* Chrome, Safari, Edge (Webkit) */\n.omniscribe_audio-content-container > div::-webkit-scrollbar {\n width: 6px !important;\n}\n\n.omniscribe_audio-content-container > div::-webkit-scrollbar-thumb {\n border-radius: 10px !important;\n background-color: var(--omni-secondary) !important;\n}\n\n.omniscribe_audio-content-container > div::-webkit-scrollbar-track {\n background-color: transparent !important;\n}\n\n/* Firefox */\n.omniscribe_audio-content-container > div {\n scrollbar-width: thin !important;\n scrollbar-color: var(--omni-secondary) transparent !important;\n}\n\n/* Processing skeleton indicator */\n.omniscribe_transcription-processing {\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-processing-lines {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.omniscribe_transcription-skeleton-line {\n height: 14px;\n width: 70%;\n}\n\n.omniscribe_transcription-skeleton-line--short {\n width: 40%;\n}\n\n.omniscribe_transcription-processing-text {\n font-size: var(--text-xs);\n color: var(--omni-secondary, #6b7280);\n}\n\n\n/* Source: modules/transcription/components/recorder-counter/RecorderCounter.css */\n.omniscribe_audio-recorder-timer {\n color: var(--blue-500);\n font-weight: 600; /* SemiBold */\n font-style: normal; /* SemiBold is a weight, not a style */\n font-size: var(--font-size-400); /* design token */\n line-height: var(--line-height-400); /* design token */\n letter-spacing: 0;\n text-align: center;\n}\n\n\n/* Source: modules/transcription/components/toggle-record/ToggleRecord.css */\n.omniscribe_record-button-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.omniscribe_record-button-classname {\n background-color: transparent;\n border: none;\n padding: 4px;\n}\n\n.omniscribe_record-button {\n background-color: var(--primary-button);\n border-radius: 50%;\n cursor: pointer;\n width: 56px;\n height: 56px;\n align-items: center;\n justify-content: center;\n display: flex;\n transition-duration: 300ms;\n box-shadow:\n inset 0 2px 4px rgb(0 0 0 / 0.05),\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n\n.omniscribe_record-button-enabled {\n opacity: 100%;\n pointer-events: auto;\n scale: 110%;\n &:hover {\n scale: 150%;\n }\n}\n.omniscribe_record-button-not-enabled {\n opacity: 50%;\n &:hover {\n scale: 150%;\n }\n}\n.omniscribe_record-button-disabled {\n opacity: 50%;\n background-color: dimgray;\n pointer-events: none;\n}\n\n.omniscribe_record-enabled {\n width: 50px;\n height: 50px;\n background-color: var(--primary-button);\n animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n position: absolute;\n z-index: -1;\n border-radius: calc(infinity * 1px);\n opacity: 100%;\n}\n\n@keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n\n/* Source: modules/transcription/section/AudioRecorder.css */\n.omniscribe_audio-recorder {\n align-items: center;\n padding-block: calc(var(--spacing) * 5);\n border-bottom-left-radius: 12px;\n background-color: var(--white);\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n\n[dir='ltr'] .omniscribe_audio-recorder {\n border-bottom-left-radius: 12px;\n}\n\n[dir='rtl'] .omniscribe_audio-recorder {\n border-bottom-right-radius: 12px;\n border-bottom-left-radius: 0px;\n}\n\n.omniscribe_audio-recorder-container {\n display: flex;\n align-items: center;\n border: solid 1px var(--light-border);\n background-color: var(--white);\n max-height: 42px;\n border-radius: 9999px;\n border-width: 1px;\n justify-content: space-between;\n margin-bottom: 5px;\n flex: 1;\n align-self: stretch;\n margin-inline: calc(var(--spacing) * 4);\n padding-inline: calc(var(--spacing) * 2);\n}\n\n.omniscribe_audio-recorder-audio-container {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: center;\n}\n\n.omniscribe_audio-recorder-refresh-btn {\n cursor: pointer;\n background-color: var(--omniscribe-surface-alt, #f6f7f9);\n border-radius: 100px;\n transition:\n transform 0.3s ease,\n opacity 0.3s ease,\n background-color 0.3s ease;\n transform: scale(1);\n}\n.omniscribe_audio-recorder-refresh-btn-enabled {\n pointer-events: auto;\n opacity: 1;\n\n &:hover {\n transform: scale(1.15);\n }\n}\n.omniscribe_audio-recorder-refresh-btn-disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n.omniscribe_audio-recorder-audio-content-container {\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n border-radius: 8px;\n margin-top: 18px;\n padding-top: 8px;\n padding-inline: calc(var(--spacing) * 4);\n padding-bottom: 8px;\n align-self: stretch;\n margin-inline: calc(var(--spacing) * 4);\n}\n.omniscribe_audio-recorder-footer {\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n padding-top: 16px;\n margin-top: 12px;\n display: flex;\n width: 100%;\n}\n.omniscribe_audio-recorder-footer-content {\n padding-inline: calc(var(--spacing) * 4);\n width: 100%;\n justify-content: space-between;\n align-items: center;\n display: flex;\n}\n.omniscribe_audio-recorder-audio-info {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n color: var(--omniscribe-text-muted, #6f7d95);\n padding-block: 8px;\n}\n\n.omniscribe_audio-recorder-audio-star-icons {\n display: flex;\n justify-content: center;\n gap: 4px;\n}\n\n.omniscribe_audio-recorder-audio-feedback {\n color: var(--omniscribe-text-muted, #a4adbc);\n}\n\n.omniscribe_audio-recorder-refresh-icon {\n color: var(--omniscribe-text, #252a32);\n}\n\n.omniscribe_audio-recorder-star-icon {\n cursor: pointer;\n display: inline-block;\n}\n\n\n/* Source: shared/components/ActivationGuardDialog.css */\n/* The shared Modal overlay is absolutely positioned against its nearest\n positioned ancestor, which for this dialog is wherever the provider happens\n to sit in the tree. Force fixed so it centers over the viewport. */\n.omniscribe_modal-overlay:has(.omniscribe_activation-guard-modal) {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n.omniscribe_activation-guard-modal {\n width: 480px;\n max-width: 90vw;\n padding: 24px !important;\n}\n\n/* Override Modal's default h2 size for this dialog. */\n.omniscribe_activation-guard-modal .omniscribe_modal-title-container {\n margin-bottom: 16px;\n align-items: flex-start;\n}\n\n.omniscribe_activation-guard-modal .omniscribe_modal-title {\n font-size: 18px;\n line-height: 1.3;\n font-weight: 700;\n letter-spacing: -0.01em;\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_activation-guard-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.omniscribe_activation-guard-summary {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.omniscribe_activation-guard-summary-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n border-radius: 9999px;\n background-color: #fef3c7;\n color: #b45309;\n}\n\n.omniscribe_activation-guard-summary-text {\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--color-gray-800, #1f2937);\n flex: 1;\n}\n\n.omniscribe_activation-guard-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 16px;\n margin-top: 4px;\n}\n\n.omniscribe_activation-guard-secondary {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px 12px;\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #374151);\n border-radius: 9999px;\n transition: background-color 0.15s ease;\n}\n\n.omniscribe_activation-guard-secondary:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--color-gray-900, #0f172a);\n}\n\n.omniscribe_activation-guard-primary {\n border-radius: 9999px !important;\n gap: 8px;\n padding-block: 10px !important;\n padding-inline: 18px !important;\n height: auto !important;\n font-weight: 600;\n}\n\n\n/* Source: shared/components/Card.css */\n.omniscribe_card {\n background-color: var(--color-card, #ffffff);\n color: var(--color-card-foreground, #000000);\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n border-radius: 0.75rem;\n border: 1px solid var(--color-border, var(--grey-200));\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n}\n\n.omniscribe_card-header {\n container-type: inline-size;\n container-name: card-header;\n display: grid;\n grid-auto-rows: min-content;\n grid-template-rows: auto auto;\n align-items: start;\n gap: 0.375rem;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n/* When card-header has card-action, adjust grid layout */\n.omniscribe_card-header:has([data-slot='card-action']) {\n grid-template-columns: 1fr auto;\n}\n\n/* When card-header has border-b class, add padding bottom */\n.omniscribe_card-header.border-b {\n padding-bottom: 1.5rem;\n}\n\n.omniscribe_card-title {\n line-height: 1;\n font-weight: 600;\n}\n\n.omniscribe_card-description {\n color: var(--color-muted-foreground, #6b7280);\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n.omniscribe_card-action {\n grid-column-start: 2;\n grid-row: span 2 / span 2;\n grid-row-start: 1;\n align-self: start;\n justify-self: end;\n}\n\n.omniscribe_card-content {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n.omniscribe_card-footer {\n display: flex;\n align-items: center;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n.omniscribe_card-footer.border-t {\n padding-top: 1.5rem;\n}\n\n\n/* Source: shared/components/app-skeleton.css */\n.omniscribe_app-skeleton {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--white);\n border-radius: 12px;\n}\n\n/* Header */\n.omniscribe_app-skeleton-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_app-skeleton-header-left,\n.omniscribe_app-skeleton-header-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.omniscribe_app-skeleton-icon {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n}\n\n.omniscribe_app-skeleton-title {\n width: 48px;\n height: 20px;\n border-radius: 4px;\n}\n\n.omniscribe_app-skeleton-badge {\n width: 150px;\n height: 32px;\n border-radius: 99999px;\n}\n\n/* Disclaimer banner */\n.omniscribe_app-skeleton-banner {\n padding: 6px 16px;\n border-bottom: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_app-skeleton-banner-text {\n width: 100%;\n height: 16px;\n border-radius: 4px;\n}\n\n/* Content */\n.omniscribe_app-skeleton-content {\n flex: 1;\n padding: 20px;\n}\n\n.omniscribe_app-skeleton-welcome {\n width: 240px;\n height: 28px;\n border-radius: 4px;\n margin-bottom: 10px;\n}\n\n.omniscribe_app-skeleton-suggestions {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.omniscribe_app-skeleton-suggestion {\n height: 25px;\n border-radius: 99999px;\n}\n\n.omniscribe_app-skeleton-suggestion--long {\n width: 320px;\n}\n\n.omniscribe_app-skeleton-suggestion--longer {\n width: 380px;\n}\n\n.omniscribe_app-skeleton-suggestion--medium {\n width: 280px;\n}\n\n/* Bottom bar */\n.omniscribe_app-skeleton-bottom {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n}\n\n.omniscribe_app-skeleton-transcribe-btn {\n width: 140px;\n height: 40px;\n border-radius: 99999px;\n flex-shrink: 0;\n}\n\n.omniscribe_app-skeleton-input {\n flex: 1;\n height: 40px;\n border-radius: 99999px;\n}\n\n\n/* Source: shared/components/button.css */\n.omniscribe_button {\n border: none;\n background: transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: calc(var(--spacing) * 2);\n transition-property: color, box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n outline-style: none;\n /* Enabled buttons must show the pointer affordance; the base rule never set\n it, so variants without their own cursor (e.g. outline, used by the chat\n mic button) rendered the default arrow. `:disabled` below overrides it. */\n cursor: pointer;\n &:disabled {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 50%;\n }\n & svg {\n pointer-events: none;\n flex-shrink: 0;\n }\n & svg:not([class*='size-svg']) {\n width: calc(var(--spacing) * 4) /* 1rem = 16px */;\n height: calc(var(--spacing) * 4) /* 1rem = 16px */;\n }\n &:focus-visible {\n border-color: var(--ring);\n box-shadow: 0 0 0 calc(3px + var(--tw-ring-offset-width))\n color-mix(in oklab, var(--ring) 50%, transparent);\n }\n &[aria-invalid='true'] {\n border-color: var(--destructive);\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n}\n\n.omniscribe_button-variant-default {\n background-color: var(--primary);\n color: var(--primary-foreground);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n}\n.omniscribe_button-variant-destructive {\n background-color: var(--destructive);\n color: var(--white);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n &:focus-visible {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n}\n.omniscribe_button-variant-outline {\n border: solid 1px var(--input);\n background-color: var(--background);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: var(--accent);\n color: var(--accent-foreground);\n }\n}\n.omniscribe_button-variant-icon {\n align-items: center;\n border-radius: 100%;\n padding: 10px;\n & svg {\n pointer-events: auto;\n flex-shrink: 0;\n }\n & svg:not([class*='size-svg']) {\n width: auto;\n height: auto;\n }\n}\n.omniscribe_button-variant-secondadry {\n background-color: var(--secondary);\n pointer-events: cursor;\n cursor: pointer;\n color: var(--secondary-foreground);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n &:hover {\n background-color: var(--secondary-hover) !important;\n }\n &:disabled {\n background-color: var(--omniscribe-surface-alt, #edeff2);\n cursor: not-allowed;\n color: var(--omniscribe-text-muted, #d5d9e0);\n }\n}\n.omniscribe_button-variant-ghost:hover {\n background-color: var(--accent);\n color: var(--accent-foreground);\n}\n.omniscribe_button-variant-empty {\n cursor: pointer;\n}\n.omniscribe_button-variant-primary {\n cursor: pointer;\n background-color: var(--primary-button);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n font-size: 16px !important;\n color: var(--white);\n &:hover {\n background-color: color-mix(\n in oklab,\n var(--primary-button) 60%,\n transparent\n );\n }\n}\n.omniscribe_button-size-default {\n height: calc(var(--spacing) * 9);\n padding-inline: calc(var(--spacing) * 4);\n padding-block: calc(var(--spacing) * 2);\n &:has(> svg) {\n padding-inline: calc(var(--spacing) * 3) /* 0.75rem = 12px */;\n }\n}\n.omniscribe_button-size-sm {\n height: calc(var(--spacing) * 8);\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n gap: calc(var(--spacing) * 1.5) /* 0.375rem = 6px */;\n padding-inline: calc(var(--spacing) * 3);\n &:has(> svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n}\n\n.omniscribe_button-size-lg {\n height: calc(var(--spacing) * 10);\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n padding-inline: calc(var(--spacing) * 6);\n &:has(> svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n}\n\n.omniscribe_button-size-icon {\n height: calc(var(--spacing) * 5);\n width: calc(var(--spacing) * 5);\n}\n.omniscribe_button-size-padding {\n padding: calc(var(--spacing) * 2);\n min-width: calc(var(--spacing) * 40);\n}\n\n.omniscribe_button-text {\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height);\n}\n.omniscribe_button-whitespace {\n white-space: nowrap;\n}\n.omniscribe_button-rounded {\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n}\n.omniscribe_button-disabled {\n pointer-events: none;\n}\n.omniscribe_button-loading {\n opacity: 50%;\n}\n.omniscribe_button-animate-spin {\n animation: spin 1s linear infinite;\n}\n.omniscribe_button-variant-report {\n cursor: pointer;\n background-color: var(--report);\n box-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n font-size: 16px;\n color: var(--white);\n &:hover {\n background-color: color-mix(in oklab, var(--report) 60%, transparent);\n }\n}\n\n\n/* Source: shared/components/feedback-modal.css */\n.omniscribe_feedback-modal {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n background: var(--omniscribe-surface, white);\n border: 1px solid var(--omniscribe-border, #e2e8f0);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n margin-top: 8px;\n min-width: 200px;\n width: 200px;\n transform-origin: top left;\n}\n\n.omniscribe_feedback-input-container {\n position: relative;\n display: flex;\n align-items: flex-end;\n border: 1px solid var(--omniscribe-border, #d1d5db);\n border-radius: 8px;\n}\n\n.omniscribe_feedback-textarea {\n flex: 1;\n border: transparent;\n border-radius: 8px;\n padding: 12px 12px 12px 12px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.2s;\n resize: none;\n min-height: 20px;\n max-height: 200px;\n overflow-y: auto;\n font-family: inherit;\n line-height: 1.4;\n width: 100%;\n box-sizing: border-box;\n}\n.omniscribe_feedback-textarea-padding {\n margin-bottom: 34px;\n padding-bottom: 0px !important;\n}\n\n.omniscribe_feedback-icons {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.omniscribe_feedback-icons:has(.omniscribe_feedback-send) {\n bottom: 8px;\n top: auto;\n transform: none;\n}\n\n.omniscribe_feedback-close {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--omniscribe-text-muted, #6b7280);\n transition:\n background-color 0.2s,\n color 0.2s;\n}\n\n.omniscribe_feedback-close:hover {\n background-color: var(--omniscribe-surface-alt, #f3f4f6);\n color: var(--omniscribe-text, #374151);\n}\n\n.omniscribe_feedback-close svg {\n width: 12px;\n height: 12px;\n}\n\n.omniscribe_feedback-send {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--blue-500);\n transition:\n background-color 0.2s,\n color 0.2s;\n}\n\n.omniscribe_feedback-send:hover {\n background-color: #f0f7ff;\n color: #0d47a1;\n}\n\n.omniscribe_feedback-send svg {\n width: 12px;\n height: 12px;\n}\n\n.omniscribe_feedback-confirmation {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n background: var(--omniscribe-surface, white);\n color: var(--omniscribe-text, black);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 8px 0px;\n margin-top: 8px;\n min-width: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 500;\n animation: fadeInOut 3s ease-in-out;\n}\n\n.omniscribe_feedback-confirmation-icon {\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n}\n\n/* Right-positioned modal styles */\n.omniscribe_feedback-modal-right {\n position: absolute;\n top: 7px;\n left: 17%;\n z-index: 10000;\n background: var(--omniscribe-surface, white);\n border: 1px solid var(--omniscribe-border, #e2e8f0);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n margin-left: 8px;\n width: 200px;\n transform-origin: bottom left;\n}\n\n.omniscribe_feedback-sending-center {\n top: 100%;\n left: 0;\n}\n\n.omniscribe_feedback-sending-right {\n top: 20px;\n left: 17%;\n}\n\n.omniscribe_feedback-sending {\n position: absolute;\n z-index: 10000;\n background: var(--omniscribe-surface, white);\n color: var(--omniscribe-text, black);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 8px 0px;\n margin-left: 8px;\n min-width: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 500;\n}\n.omniscribe_feedback-confirmation-right {\n position: absolute;\n top: 20px;\n left: 17%;\n z-index: 10000;\n background: var(--omniscribe-surface, white);\n color: var(--omniscribe-text, black);\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 8px 0px;\n margin-left: 8px;\n min-width: 160px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n font-weight: 500;\n animation: fadeInOut 3s ease-in-out;\n}\n\n@keyframes fadeInOut {\n 0% {\n opacity: 0;\n transform: translateY(-10px);\n }\n 10% {\n opacity: 1;\n transform: translateY(0);\n }\n 90% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(-10px);\n }\n}\n\n\n/* Source: shared/components/input.css */\n.omniscribe_input {\n height: calc(var(--spacing) * 9);\n width: 100%;\n display: flex;\n border-radius: calc(var(--radius));\n border: solid 1px var(--input);\n background-color: transparent;\n padding-inline: calc(var(--spacing) * 3);\n padding-block: calc(var(--spacing) * 1);\n font-size: var(--text-base) /* 1rem = 16px */;\n line-height: var(--text-base--line-height);\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n transition-property: color, box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n outline-style: none;\n &::file-selector-button {\n color: var(--foreground);\n display: inline-flex;\n height: calc(var(--spacing) * 7);\n border: none;\n background-color: transparent;\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height);\n font-weight: var(--font-weight-medium);\n }\n &::placeholder {\n color: var(--muted-foreground);\n }\n &::selection {\n background-color: var(--primary);\n color: var(--primary-foreground);\n }\n &:disabled {\n pointer-events: none;\n cursor: not-allowed;\n opacity: 50%;\n }\n &[aria-invalid='true'] {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n border-color: var(--destructive);\n }\n @media (width >= 48rem /* 768px */) {\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height) /* calc(1.25 / 0.875) ≈ 1.4286 */;\n }\n}\n\n.omniscribe_input-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n\n.omniscribe_input.invalid {\n border-color: #dc3545;\n background-color: #fff5f5;\n box-shadow: 0 0 0 0.125rem rgba(220, 53, 69, 0.25);\n}\n\n.omniscribe_input-error {\n color: #dc3545;\n font-size: 10px;\n margin-block: 0.25rem;\n display: block;\n line-height: 1;\n}\n\n\n/* Source: shared/components/loading-modal.css */\n.omniscribe_loading-modal-container {\n position: absolute;\n background-color: color-mix(in oklab, var(--black) 50%, transparent);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 50;\n height: 100vh;\n width: 100vw;\n right: 0;\n bottom: calc(var(--spacing) * -5.2);\n}\n.omniscribe_loading-modal-subcontainer {\n background-color: var(--white);\n padding: calc(var(--spacing) * 8);\n border-radius: var(--radius);\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n text-align: center;\n max-width: var(--container-md);\n}\n.omniscribe_loading-modal-msg {\n font-size: var(--text-xl) /* 1.25rem = 20px */;\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-bold);\n margin-bottom: calc(var(--spacing) * 4);\n}\n.omniscribe_loading-modal-spin {\n display: inline-block;\n width: calc(var(--spacing) * 12);\n height: calc(var(--spacing) * 12);\n border: solid 4px var(--color-gray-200);\n border-top-color: var(--blue-500);\n border-radius: calc(infinity * 1px);\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.omniscribe_app-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n flex: 1;\n}\n\n\n/* Source: shared/components/modal.css */\n.omniscribe_modal-overlay {\n position: absolute;\n background-color: color-mix(in oklab, var(--black) 50%, transparent);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 50;\n height: 100vh;\n width: 100vw;\n right: 0;\n bottom: calc(var(--spacing) * -5.2);\n}\n\n.omniscribe_modal-container {\n position: relative;\n background-color: var(--white);\n z-index: 100;\n border-radius: 12px;\n border: solid 1px var(--light-border);\n box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n padding: calc(var(--spacing) * 5);\n transition-duration: 300ms;\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n max-width: 90vw;\n max-height: 90vh;\n}\n.omniscribe_modal-container-scroll {\n overflow: auto;\n}\n\n.omniscribe_modal-container-show {\n opacity: 100%;\n}\n\n.omniscribe_modal-container-hide {\n opacity: 0%;\n}\n\n.omniscribe_modal-subcontainer {\n display: flex;\n flex-direction: column;\n}\n\n.omniscribe_modal-title-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-bottom: calc(var(--spacing) * 2);\n}\n\n.omniscribe_modal-title {\n font-size: var(--text-3xl); /* 1.875rem = 30px */\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-bold);\n margin: 0;\n}\n\n.omniscribe_modal-button {\n border: none;\n background: transparent;\n line-height: var(--text-2xl--line-height);\n cursor: pointer;\n color: var(--black);\n}\n\n@media (min-width: 768px) {\n .omniscribe_modal-container {\n max-width: 60vw;\n }\n}\n\n/* Large screens: desktop */\n@media (min-width: 1024px) {\n .omniscribe_modal-container {\n max-width: 50vw;\n }\n}\n\n/* Very large screens: large desktop and ultra-wide */\n@media (min-width: 1440px) {\n .omniscribe_modal-container {\n max-width: 40vw;\n }\n}\n\n/* Intermediate breakpoint: large tablets */\n@media (min-width: 640px) and (max-width: 767px) {\n .omniscribe_modal-container {\n max-width: 70vw;\n }\n}\n\n\n/* Source: shared/components/select.css */\n.omniscribe_select-container {\n position: relative;\n width: 100%;\n padding-block: calc(var(--spacing) * 3);\n}\n.omniscribe_select-button {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: calc(var(--spacing) * 3);\n background-color: var(--white);\n border-radius: var(--Radius-radius-medium, 8px);\n border: solid 1px var(--omniscribe-border, var(--light-border));\n cursor: pointer;\n}\n.omniscribe_select-button:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.omniscribe_select-text {\n display: flex;\n align-items: center;\n gap: calc(var(--spacing) * 2);\n}\n.omniscribe_select-content-container {\n position: absolute;\n width: 100%;\n margin-top: calc(var(--spacing) * 2);\n border: solid 1px var(--omniscribe-border, var(--light-border));\n background-color: var(--white);\n border-radius: var(--radius);\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n bottom: calc(var(--spacing) * 15);\n padding-inline: calc(var(--spacing) * 1);\n padding-block: calc(var(--spacing) * 0.5);\n z-index: 9999;\n}\n.omniscribe_select-content-ul {\n overflow-y: scroll;\n max-height: calc(var(--spacing) * 44);\n padding-inline: 5px;\n}\n.omniscribe_select-content-li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: calc(var(--spacing) * 3);\n cursor: pointer;\n &:hover {\n @media (hover: hover) {\n background-color: var(--omniscribe-surface-alt, var(--color-gray-100));\n }\n }\n}\n.omniscribe_select-check-icon {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n color: var(--color-slate-500) /* oklch(55.4% 0.046 257.417) = #62748e */;\n}\n.omniscribe_select-content-li-span {\n display: flex;\n align-items: center;\n gap: calc(0.25rem /* 4px */ * 2);\n}\n\n\n/* Source: shared/components/separator.css */\n/* Separator Component Styles */\n.omniscribe_separator {\n border: 1px solid var(--omniscribe-border, #e5e7ec);\n flex-shrink: 0;\n}\n\n.omniscribe_separator--horizontal {\n height: 0;\n width: 100%;\n border-top: 1px solid var(--omniscribe-border, #e5e7ec);\n border-right: none;\n border-bottom: none;\n border-left: none;\n}\n\n.omniscribe_separator--vertical {\n width: 0;\n height: 100%;\n border-left: 1px solid var(--omniscribe-border, #e5e7ec);\n border-top: none;\n border-right: none;\n border-bottom: none;\n}\n\n\n/* Source: shared/components/skeleton.css */\n.omniscribe_skeleton {\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n}\n\n\n/* Source: shared/components/textarea.css */\n.omniscribe_textarea-default {\n display: flex;\n min-height: calc(var(--spacing) * 16);\n width: -webkit-fill-available;\n border-radius: calc(var(--radius) /* 0.25rem = 4px */ - 2px);\n border: solid 1px var(--input);\n background-color: transparent;\n padding-inline: calc(var(--spacing) * 3);\n padding-block: calc(var(--spacing) * 2);\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n transition-property: color, box-shadow;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n &::placeholder {\n color: var(--muted-foreground);\n font-size: var(--text-sm) /* 0.875rem = 14px */;\n line-height: var(--text-sm--line-height);\n }\n &:focus-visible {\n border-color: var(--ring);\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n box-shadow: var(--tw-ring-inset,) 0 0 0\n calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);\n }\n &[aria-invalid='true'] {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n border-color: var(--destructive);\n }\n &:disabled {\n cursor: not-allowed;\n opacity: 50%;\n }\n}\n\n.omniscribe_textarea-secondary {\n padding: calc(var(--spacing) * 3.5);\n padding-bottom: calc(var(--spacing) * 0);\n border-style: none;\n background-color: transparent;\n resize: none;\n &:focus {\n outline-style: none;\n }\n}\n.omniscribe_textarea-general {\n font-family: 'Lato', sans-serif;\n font-size: var(--font-size-100);\n outline: none;\n}\n\n\n/* Source: shared/components/toast.css */\n.omniscribe_toast-stack {\n position: fixed;\n top: calc(var(--spacing) * 4);\n right: calc(var(--spacing) * 4);\n display: flex;\n flex-direction: column;\n gap: calc(var(--spacing) * 2);\n z-index: 9999;\n pointer-events: none;\n}\n\n.omniscribe_toast-item {\n border-radius: var(--radius);\n padding: calc(var(--spacing) * 4);\n width: calc(var(--spacing) * 120);\n display: flex;\n align-items: flex-start;\n transition:\n transform 300ms cubic-bezier(0.4, 0, 0.2, 1),\n opacity 300ms cubic-bezier(0.4, 0, 0.2, 1);\n pointer-events: auto;\n}\n\n.omniscribe_toast-item-danger {\n background-color: var(--color-red-500);\n}\n.omniscribe_toast-item-black {\n background-color: var(--black);\n}\n.omniscribe_toast-item-show {\n transform: translateX(0);\n opacity: 1;\n}\n.omniscribe_toast-item-hide {\n transform: translateX(120%);\n opacity: 0;\n}\n.omniscribe_toast-subcontainer {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 100ms;\n display: flex;\n flex-direction: column;\n color: var(--white);\n flex: 1;\n}\n.omniscribe_toast-title {\n font-size: 18px;\n font-weight: var(--font-weight-bold);\n}\n.omniscribe_toast-msg {\n font-size: 16px;\n}\n.omniscribe_toast-close {\n background: none;\n border: none;\n color: var(--white);\n font-size: 18px;\n cursor: pointer;\n padding: calc(var(--spacing) * 1) calc(var(--spacing) * 2);\n align-self: flex-start;\n opacity: 0.8;\n}\n.omniscribe_toast-close:hover {\n opacity: 1;\n}\n\n\n/* Source: shared/components/toggle.css */\n.omniscribe_toggle-container {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 8px;\n flex-direction: column;\n}\n\n.omniscribe_toggle-label {\n font-size: 14px;\n font-weight: 400;\n color: var(--omniscribe-text, #374151);\n flex: 1;\n}\n\n.omniscribe_toggle-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.omniscribe_toggle-switch {\n position: relative;\n width: 29px;\n height: 16px;\n background-color: #d1d5db;\n border-radius: 8px;\n border: none;\n cursor: pointer;\n transition: background-color 0.2s ease;\n outline: none;\n}\n\n.omniscribe_toggle-switch:focus-visible {\n box-shadow: 0 0 0 2px var(--secondary, #132caa);\n}\n\n.omniscribe_toggle-switch-checked {\n background-color: var(--secondary, #132caa);\n}\n\n.omniscribe_toggle-switch-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omniscribe_toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n /* High-contrast fill that sits on top of the track — must contrast the */\n /* track color, not inherit the panel surface (which would vanish in a */\n /* dark theme). Hosts theming dark set --omniscribe-on-accent to a dark */\n /* ink; light hosts fall back to white (unchanged). */\n background-color: var(--omniscribe-on-accent, white);\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.omniscribe_toggle-switch-checked .omniscribe_toggle-thumb {\n transform: translateX(13px);\n}\n\n.omniscribe_toggle-status {\n font-size: 14px;\n font-weight: 500;\n color: var(--omniscribe-text-muted, #6b7280);\n min-width: 70px;\n}\n\n.omniscribe_toggle-switch-checked + .omniscribe_toggle-status {\n color: var(--omniscribe-text-muted, #4a5364);\n}\n\n\n/* Source: shared/components/tooltip.css */\n.tooltip-base {\n position: fixed;\n z-index: 9999;\n border-radius: 0.375rem; /* rounded-md */\n background-color: #111827;\n padding: 0.5rem 0.75rem; /* px-3 py-2 */\n font-size: 0.875rem; /* text-sm */\n font-family: 'Lato', sans-serif;\n color: #ffffff; /* text-white */\n box-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.1),\n 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* shadow-lg */\n transition: opacity 0.2s ease-in-out; /* transition-opacity duration-200 */\n pointer-events: none;\n user-select: none;\n word-wrap: break-word;\n line-height: 1.4;\n}\n\n/* Tooltip Arrow Styles */\n.tooltip-arrow {\n position: absolute;\n width: 0.5rem; /* w-2 */\n height: 0.5rem; /* h-2 */\n background-color: #111827;\n transform: rotate(45deg);\n}\n\n/* Arrow positioning for each side */\n.tooltip-arrow-top {\n bottom: -0.25rem; /* bottom-[-4px] */\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n\n.tooltip-arrow-bottom {\n top: -0.25rem; /* top-[-4px] */\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n\n.tooltip-arrow-left {\n right: -0.25rem; /* right-[-4px] */\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n}\n\n.tooltip-arrow-right {\n left: -0.25rem; /* left-[-4px] */\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n}\n\n/* Width classes based on message length */\n.tooltip-width-auto {\n width: auto;\n white-space: nowrap;\n}\n\n.tooltip-width-200 {\n width: auto;\n max-width: 200px;\n}\n\n.tooltip-width-xs {\n width: auto;\n max-width: 20rem; /* max-w-xs */\n}\n\n.tooltip-width-sm {\n width: auto;\n max-width: 24rem; /* max-w-sm */\n}\n\n.tooltip-width-400 {\n width: auto;\n max-width: 400px;\n}\n\n/* Trigger container styles */\n.tooltip-trigger {\n display: inline-flex;\n}\n\n/* Animation classes */\n.tooltip-enter {\n opacity: 0;\n transform: scale(0.95);\n}\n\n.tooltip-enter-active {\n opacity: 1;\n transform: scale(1);\n transition:\n opacity 0.2s ease-in-out,\n transform 0.2s ease-in-out;\n}\n\n.tooltip-exit {\n opacity: 1;\n transform: scale(1);\n}\n\n.tooltip-exit-active {\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity 0.15s ease-in-out,\n transform 0.15s ease-in-out;\n}\n\n/* Dark theme variant */\n.tooltip-dark {\n background-color: #1f2937; /* bg-gray-800 */\n color: var(--grey-50);\n}\n\n.tooltip-dark .tooltip-arrow {\n background-color: #1f2937;\n}\n\n/* Light theme variant */\n.tooltip-light {\n background-color: var(--omniscribe-surface, #ffffff);\n color: var(--omniscribe-text, #374151); /* text-gray-700 */\n box-shadow:\n 0 10px 15px -3px rgba(0, 0, 0, 0.1),\n 0 4px 6px -2px rgba(0, 0, 0, 0.05),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n}\n\n.tooltip-light .tooltip-arrow {\n background-color: var(--omniscribe-surface, #ffffff);\n}\n\n/* Responsive breakpoints */\n@media (max-width: 640px) {\n .tooltip-base {\n max-width: calc(100vw - 2rem);\n font-size: 0.8125rem; /* Slightly smaller on mobile */\n }\n\n .tooltip-width-400,\n .tooltip-width-sm,\n .tooltip-width-xs {\n max-width: calc(100vw - 2rem);\n }\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n .tooltip-base {\n border: 2px solid #ffffff;\n }\n\n .tooltip-light {\n border: 2px solid #000000;\n }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n .tooltip-base,\n .tooltip-enter-active,\n .tooltip-exit-active {\n transition: none;\n }\n}\n\n\n/* Source: test/mocks/empty.css */\n/* Empty CSS file for mocking styles */\n";
169196
169520
 
169197
169521
  const injectedCss$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
169198
169522
  __proto__: null,