@omniloy/sofia-sdk 1.0.11 → 1.0.12
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.
- package/dist/legacy/webcomponents.es.js +320 -50
- package/dist/legacy/webcomponents.umd.js +320 -50
- package/dist/react/index.css +59 -39
- package/dist/react/index.es.js +356 -33
- package/dist/webcomponents.es.js +303 -32
- package/dist/webcomponents.umd.js +303 -32
- package/package.json +1 -1
package/dist/webcomponents.es.js
CHANGED
|
@@ -21972,7 +21972,7 @@ const {
|
|
|
21972
21972
|
create: create$1,
|
|
21973
21973
|
} = axios;
|
|
21974
21974
|
|
|
21975
|
-
const version$2 = "1.0.
|
|
21975
|
+
const version$2 = "1.0.12";
|
|
21976
21976
|
|
|
21977
21977
|
const handleApiError$1 = async (error) => {
|
|
21978
21978
|
return Promise.reject(error);
|
|
@@ -22710,6 +22710,11 @@ const ar = {
|
|
|
22710
22710
|
"Generation failed": "فشل الإنشاء",
|
|
22711
22711
|
"Could not generate {category}. Please try again.": "تعذّر إنشاء {category}. يرجى المحاولة مرة أخرى.",
|
|
22712
22712
|
"The new note is waiting for this review — apply or cancel to continue.": "الملاحظة الجديدة في انتظار هذه المراجعة — طبّق أو ألغِ للمتابعة.",
|
|
22713
|
+
" +{count} more": " +{count} أخرى",
|
|
22714
|
+
"{count} mandatory fields missing in this group": "{count, plural, zero {# حقل إلزامي ناقص} one {# حقل إلزامي ناقص} two {حقلان إلزاميان ناقصان} few {# حقول إلزامية ناقصة} many {# حقلاً إلزامياً ناقصاً} other {# حقل إلزامي ناقص}} في هذه المجموعة",
|
|
22715
|
+
"{group} · row {row}": "{group} · الصف {row}",
|
|
22716
|
+
"{group} · row {row} · {field}": "{group} · الصف {row} · {field}",
|
|
22717
|
+
"{count} rows need a type selected in this group": "{count, plural, zero {# صف يحتاج} one {# صف يحتاج} two {صفّان يحتاجان} few {# صفوف تحتاج} many {# صفاً يحتاج} other {# صف يحتاج}} إلى تحديد النوع في هذه المجموعة",
|
|
22713
22718
|
};
|
|
22714
22719
|
|
|
22715
22720
|
const Add$b = "Afegir";
|
|
@@ -23080,6 +23085,11 @@ const ca = {
|
|
|
23080
23085
|
"Generation failed": "La generació ha fallat",
|
|
23081
23086
|
"Could not generate {category}. Please try again.": "No s'ha pogut generar {category}. Torna-ho a provar.",
|
|
23082
23087
|
"The new note is waiting for this review — apply or cancel to continue.": "La nova nota està esperant aquesta revisió: aplica o cancel·la per continuar.",
|
|
23088
|
+
" +{count} more": " +{count} més",
|
|
23089
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Falta # camp obligatori} other {Falten # camps obligatoris}} en aquest grup",
|
|
23090
|
+
"{group} · row {row}": "{group} · fila {row}",
|
|
23091
|
+
"{group} · row {row} · {field}": "{group} · fila {row} · {field}",
|
|
23092
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# fila necessita} other {# files necessiten}} que se seleccioni un tipus en aquest grup",
|
|
23083
23093
|
};
|
|
23084
23094
|
|
|
23085
23095
|
const Add$a = "Afegir";
|
|
@@ -23450,6 +23460,11 @@ const ca_valencia = {
|
|
|
23450
23460
|
"Generation failed": "La generació ha fallat",
|
|
23451
23461
|
"Could not generate {category}. Please try again.": "No s'ha pogut generar {category}. Torna-ho a provar.",
|
|
23452
23462
|
"The new note is waiting for this review — apply or cancel to continue.": "La nova nota està esperant aquesta revisió: aplica o cancel·la per continuar.",
|
|
23463
|
+
" +{count} more": " +{count} més",
|
|
23464
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Falta # camp obligatori} other {Falten # camps obligatoris}} en este grup",
|
|
23465
|
+
"{group} · row {row}": "{group} · fila {row}",
|
|
23466
|
+
"{group} · row {row} · {field}": "{group} · fila {row} · {field}",
|
|
23467
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# fila necessita} other {# files necessiten}} que se seleccione un tipus en este grup",
|
|
23453
23468
|
};
|
|
23454
23469
|
|
|
23455
23470
|
const Add$9 = "Přidat";
|
|
@@ -23820,6 +23835,11 @@ const cs = {
|
|
|
23820
23835
|
"Generation failed": "Generování se nezdařilo",
|
|
23821
23836
|
"Could not generate {category}. Please try again.": "Nepodařilo se vygenerovat {category}. Zkuste to znovu.",
|
|
23822
23837
|
"The new note is waiting for this review — apply or cancel to continue.": "Nová poznámka čeká na tuto kontrolu — potvrďte ji, nebo ji zrušte, aby mohla pokračovat.",
|
|
23838
|
+
" +{count} more": " +{count} dalších",
|
|
23839
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Chybí # povinné pole} few {Chybí # povinná pole} other {Chybí # povinných polí}} v této skupině",
|
|
23840
|
+
"{group} · row {row}": "{group} · řádek {row}",
|
|
23841
|
+
"{group} · row {row} · {field}": "{group} · řádek {row} · {field}",
|
|
23842
|
+
"{count} rows need a type selected in this group": "{count, plural, one {U # řádku} few {U # řádků} other {U # řádků}} v této skupině je třeba vybrat typ",
|
|
23823
23843
|
};
|
|
23824
23844
|
|
|
23825
23845
|
const Add$8 = "Add";
|
|
@@ -24190,6 +24210,11 @@ const en_GB = {
|
|
|
24190
24210
|
"Generation failed": "Generation failed",
|
|
24191
24211
|
"Could not generate {category}. Please try again.": "Could not generate {category}. Please try again.",
|
|
24192
24212
|
"The new note is waiting for this review — apply or cancel to continue.": "The new note is waiting for this review — apply or cancel to continue.",
|
|
24213
|
+
" +{count} more": " +{count} more",
|
|
24214
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# mandatory field missing} other {# mandatory fields missing}} in this group",
|
|
24215
|
+
"{group} · row {row}": "{group} · row {row}",
|
|
24216
|
+
"{group} · row {row} · {field}": "{group} · row {row} · {field}",
|
|
24217
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# row needs} other {# rows need}} a type selected in this group",
|
|
24193
24218
|
};
|
|
24194
24219
|
|
|
24195
24220
|
const Add$7 = "Add";
|
|
@@ -24561,6 +24586,11 @@ const en_US = {
|
|
|
24561
24586
|
"Generation failed": "Generation failed",
|
|
24562
24587
|
"Could not generate {category}. Please try again.": "Could not generate {category}. Please try again.",
|
|
24563
24588
|
"The new note is waiting for this review — apply or cancel to continue.": "The new note is waiting for this review — apply or cancel to continue.",
|
|
24589
|
+
" +{count} more": " +{count} more",
|
|
24590
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# mandatory field missing} other {# mandatory fields missing}} in this group",
|
|
24591
|
+
"{group} · row {row}": "{group} · row {row}",
|
|
24592
|
+
"{group} · row {row} · {field}": "{group} · row {row} · {field}",
|
|
24593
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# row needs} other {# rows need}} a type selected in this group",
|
|
24564
24594
|
};
|
|
24565
24595
|
|
|
24566
24596
|
const Add$6 = "Añadir";
|
|
@@ -24944,6 +24974,11 @@ const es = {
|
|
|
24944
24974
|
"{name} has expressly refused the use of AI, so recording and report generation are unavailable in this consultation.": "{name} ha rechazado expresamente el uso de IA, así que no se puede grabar ni generar informes en esta consulta.",
|
|
24945
24975
|
"{name} expressly refused the use of AI on {date}, so recording and report generation are unavailable in this consultation.": "{name} rechazó expresamente el uso de IA el {date}, así que no se puede grabar ni generar informes en esta consulta.",
|
|
24946
24976
|
"this patient": "este paciente",
|
|
24977
|
+
" +{count} more": " +{count} más",
|
|
24978
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Falta # campo obligatorio} other {Faltan # campos obligatorios}} en este grupo",
|
|
24979
|
+
"{group} · row {row}": "{group} · fila {row}",
|
|
24980
|
+
"{group} · row {row} · {field}": "{group} · fila {row} · {field}",
|
|
24981
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# fila necesita} other {# filas necesitan}} que se seleccione un tipo en este grupo",
|
|
24947
24982
|
};
|
|
24948
24983
|
|
|
24949
24984
|
const Add$5 = "Ajouter";
|
|
@@ -25314,6 +25349,11 @@ const fr = {
|
|
|
25314
25349
|
"Generation failed": "Échec de la génération",
|
|
25315
25350
|
"Could not generate {category}. Please try again.": "Impossible de générer {category}. Veuillez réessayer.",
|
|
25316
25351
|
"The new note is waiting for this review — apply or cancel to continue.": "La nouvelle note attend cette révision : appliquez ou annulez pour continuer.",
|
|
25352
|
+
" +{count} more": " +{count} de plus",
|
|
25353
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# champ obligatoire manquant} other {# champs obligatoires manquants}} dans ce groupe",
|
|
25354
|
+
"{group} · row {row}": "{group} · ligne {row}",
|
|
25355
|
+
"{group} · row {row} · {field}": "{group} · ligne {row} · {field}",
|
|
25356
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# ligne nécessite} other {# lignes nécessitent}} la sélection d'un type dans ce groupe",
|
|
25317
25357
|
};
|
|
25318
25358
|
|
|
25319
25359
|
const Add$4 = "जोड़ें";
|
|
@@ -25663,6 +25703,11 @@ const hi = {
|
|
|
25663
25703
|
"Generation failed": "जनरेशन विफल रहा",
|
|
25664
25704
|
"Could not generate {category}. Please try again.": "{category} जनरेट नहीं किया जा सका। कृपया पुनः प्रयास करें।",
|
|
25665
25705
|
"The new note is waiting for this review — apply or cancel to continue.": "नई नोट इस समीक्षा की प्रतीक्षा कर रही है — जारी रखने के लिए लागू करें या रद्द करें।",
|
|
25706
|
+
" +{count} more": " +{count} और",
|
|
25707
|
+
"{count} mandatory fields missing in this group": "इस समूह में {count, plural, one {# अनिवार्य फ़ील्ड खाली है} other {# अनिवार्य फ़ील्ड खाली हैं}}",
|
|
25708
|
+
"{group} · row {row}": "{group} · पंक्ति {row}",
|
|
25709
|
+
"{group} · row {row} · {field}": "{group} · पंक्ति {row} · {field}",
|
|
25710
|
+
"{count} rows need a type selected in this group": "इस समूह में {count, plural, one {# पंक्ति के लिए} other {# पंक्तियों के लिए}} प्रकार चुनना आवश्यक है",
|
|
25666
25711
|
};
|
|
25667
25712
|
|
|
25668
25713
|
const Add$3 = "Tambahkan";
|
|
@@ -26011,6 +26056,11 @@ const id = {
|
|
|
26011
26056
|
"Generation failed": "Pembuatan gagal",
|
|
26012
26057
|
"Could not generate {category}. Please try again.": "Tidak dapat membuat {category}. Silakan coba lagi.",
|
|
26013
26058
|
"The new note is waiting for this review — apply or cancel to continue.": "Catatan baru menunggu tinjauan ini — terapkan atau batalkan untuk melanjutkan.",
|
|
26059
|
+
" +{count} more": " +{count} lainnya",
|
|
26060
|
+
"{count} mandatory fields missing in this group": "{count, plural, other {# bidang wajib belum diisi}} di grup ini",
|
|
26061
|
+
"{group} · row {row}": "{group} · baris {row}",
|
|
26062
|
+
"{group} · row {row} · {field}": "{group} · baris {row} · {field}",
|
|
26063
|
+
"{count} rows need a type selected in this group": "{count, plural, other {# baris perlu dipilih jenisnya}} di grup ini",
|
|
26014
26064
|
};
|
|
26015
26065
|
|
|
26016
26066
|
const Add$2 = "ਸ਼ਾਮਲ ਕਰੋ";
|
|
@@ -26381,6 +26431,11 @@ const pa = {
|
|
|
26381
26431
|
"Generation failed": "ਜਨਰੇਸ਼ਨ ਅਸਫਲ ਰਹੀ",
|
|
26382
26432
|
"Could not generate {category}. Please try again.": "{category} ਜਨਰੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
|
|
26383
26433
|
"The new note is waiting for this review — apply or cancel to continue.": "ਨਵਾਂ ਨੋਟ ਇਸ ਸਮੀਖਿਆ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ — ਜਾਰੀ ਰੱਖਣ ਲਈ ਲਾਗੂ ਕਰੋ ਜਾਂ ਰੱਦ ਕਰੋ।",
|
|
26434
|
+
" +{count} more": " +{count} ਹੋਰ",
|
|
26435
|
+
"{count} mandatory fields missing in this group": "ਇਸ ਸਮੂਹ ਵਿੱਚ {count, plural, one {# ਲਾਜ਼ਮੀ ਖੇਤਰ ਖਾਲੀ ਹੈ} other {# ਲਾਜ਼ਮੀ ਖੇਤਰ ਖਾਲੀ ਹਨ}}",
|
|
26436
|
+
"{group} · row {row}": "{group} · ਕਤਾਰ {row}",
|
|
26437
|
+
"{group} · row {row} · {field}": "{group} · ਕਤਾਰ {row} · {field}",
|
|
26438
|
+
"{count} rows need a type selected in this group": "ਇਸ ਸਮੂਹ ਵਿੱਚ {count, plural, one {# ਕਤਾਰ ਲਈ} other {# ਕਤਾਰਾਂ ਲਈ}} ਕਿਸਮ ਚੁਣਨੀ ਲਾਜ਼ਮੀ ਹੈ",
|
|
26384
26439
|
};
|
|
26385
26440
|
|
|
26386
26441
|
const Add$1 = "Lägg till";
|
|
@@ -26751,6 +26806,11 @@ const sv = {
|
|
|
26751
26806
|
"Generation failed": "Genereringen misslyckades",
|
|
26752
26807
|
"Could not generate {category}. Please try again.": "Det gick inte att generera {category}. Försök igen.",
|
|
26753
26808
|
"The new note is waiting for this review — apply or cancel to continue.": "Den nya anteckningen väntar på den här granskningen — tillämpa eller avbryt för att fortsätta.",
|
|
26809
|
+
" +{count} more": " +{count} till",
|
|
26810
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# obligatoriskt fält saknas} other {# obligatoriska fält saknas}} i den här gruppen",
|
|
26811
|
+
"{group} · row {row}": "{group} · rad {row}",
|
|
26812
|
+
"{group} · row {row} · {field}": "{group} · rad {row} · {field}",
|
|
26813
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# rad behöver} other {# rader behöver}} en vald typ i den här gruppen",
|
|
26754
26814
|
};
|
|
26755
26815
|
|
|
26756
26816
|
const Add = "شامل کریں";
|
|
@@ -27122,6 +27182,11 @@ const ur = {
|
|
|
27122
27182
|
"Generation failed": "تخلیق ناکام ہو گئی",
|
|
27123
27183
|
"Could not generate {category}. Please try again.": "{category} تیار نہیں کیا جا سکا۔ براہ کرم دوبارہ کوشش کریں۔",
|
|
27124
27184
|
"The new note is waiting for this review — apply or cancel to continue.": "نیا نوٹ اس جائزے کا منتظر ہے — جاری رکھنے کے لیے لاگو کریں یا منسوخ کریں۔",
|
|
27185
|
+
" +{count} more": " +{count} مزید",
|
|
27186
|
+
"{count} mandatory fields missing in this group": "اس گروپ میں {count, plural, one {# لازمی خانہ خالی ہے} other {# لازمی خانے خالی ہیں}}",
|
|
27187
|
+
"{group} · row {row}": "{group} · قطار {row}",
|
|
27188
|
+
"{group} · row {row} · {field}": "{group} · قطار {row} · {field}",
|
|
27189
|
+
"{count} rows need a type selected in this group": "اس گروپ میں {count, plural, one {# قطار کے لیے} other {# قطاروں کے لیے}} قسم منتخب کرنا ضروری ہے",
|
|
27125
27190
|
};
|
|
27126
27191
|
|
|
27127
27192
|
var LanguageCode;
|
|
@@ -27848,19 +27913,152 @@ const useVadCoverage = () => {
|
|
|
27848
27913
|
};
|
|
27849
27914
|
};
|
|
27850
27915
|
|
|
27851
|
-
const
|
|
27916
|
+
const KNOWN_SDK_EVENT_NAMES = [
|
|
27917
|
+
"recording.started",
|
|
27918
|
+
"recording.stopped",
|
|
27919
|
+
"recording.audio_lost",
|
|
27920
|
+
"recording.microphone_disconnected",
|
|
27921
|
+
"recording.heartbeat",
|
|
27922
|
+
"activity.interaction",
|
|
27923
|
+
"activity.typing",
|
|
27924
|
+
"report.generation_started",
|
|
27925
|
+
"report.settled",
|
|
27926
|
+
"lifecycle.ready",
|
|
27927
|
+
"lifecycle.closed"
|
|
27928
|
+
];
|
|
27929
|
+
const SDK_EVENT_FAMILIES = [
|
|
27852
27930
|
"recording",
|
|
27853
27931
|
"activity",
|
|
27854
27932
|
"report",
|
|
27855
27933
|
"lifecycle"
|
|
27856
27934
|
];
|
|
27935
|
+
const FAMILIES = SDK_EVENT_FAMILIES;
|
|
27857
27936
|
const familyOf = (name) => {
|
|
27858
27937
|
const prefix = name.split(".")[0];
|
|
27859
27938
|
return FAMILIES.includes(prefix) ? prefix : "lifecycle";
|
|
27860
27939
|
};
|
|
27861
27940
|
|
|
27862
|
-
const
|
|
27863
|
-
|
|
27941
|
+
const KNOWN_NAMES = new Set(KNOWN_SDK_EVENT_NAMES);
|
|
27942
|
+
const KNOWN_FAMILIES = new Set(SDK_EVENT_FAMILIES);
|
|
27943
|
+
const distance = (a, b) => {
|
|
27944
|
+
const prev = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
27945
|
+
for (let i = 1; i <= a.length; i++) {
|
|
27946
|
+
let corner = prev[0];
|
|
27947
|
+
prev[0] = i;
|
|
27948
|
+
for (let j = 1; j <= b.length; j++) {
|
|
27949
|
+
const next = Math.min(prev[j] + 1, prev[j - 1] + 1, corner + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
27950
|
+
corner = prev[j];
|
|
27951
|
+
prev[j] = next;
|
|
27952
|
+
}
|
|
27953
|
+
}
|
|
27954
|
+
return prev[b.length];
|
|
27955
|
+
};
|
|
27956
|
+
const describeEntry = (entry) => {
|
|
27957
|
+
try {
|
|
27958
|
+
return JSON.stringify(entry) ?? `<${typeof entry}>`;
|
|
27959
|
+
} catch {
|
|
27960
|
+
return `<unserializable ${typeof entry}>`;
|
|
27961
|
+
}
|
|
27962
|
+
};
|
|
27963
|
+
const suggest = (value, candidates) => {
|
|
27964
|
+
let best = null;
|
|
27965
|
+
let bestScore = Infinity;
|
|
27966
|
+
for (const candidate of candidates) {
|
|
27967
|
+
const score = distance(value, candidate);
|
|
27968
|
+
if (score < bestScore) {
|
|
27969
|
+
bestScore = score;
|
|
27970
|
+
best = candidate;
|
|
27971
|
+
}
|
|
27972
|
+
}
|
|
27973
|
+
return best !== null && bestScore <= Math.max(3, best.length / 3) ? ` Did you mean "${best}"?` : "";
|
|
27974
|
+
};
|
|
27975
|
+
const REJECTED_KEY_CHARS = 40;
|
|
27976
|
+
const scanSubscriptions = (input) => {
|
|
27977
|
+
if (input === void 0 || input === null) {
|
|
27978
|
+
return { patterns: [], rejected: [], unusable: false, key: "" };
|
|
27979
|
+
}
|
|
27980
|
+
const raw = typeof input === "string" ? [input] : input;
|
|
27981
|
+
if (!Array.isArray(raw)) {
|
|
27982
|
+
return {
|
|
27983
|
+
patterns: [],
|
|
27984
|
+
rejected: [],
|
|
27985
|
+
unusable: true,
|
|
27986
|
+
key: `!${typeof input}`
|
|
27987
|
+
};
|
|
27988
|
+
}
|
|
27989
|
+
const patterns = [];
|
|
27990
|
+
const rejected = [];
|
|
27991
|
+
for (const entry of raw) {
|
|
27992
|
+
if (typeof entry !== "string") {
|
|
27993
|
+
rejected.push(entry);
|
|
27994
|
+
continue;
|
|
27995
|
+
}
|
|
27996
|
+
const pattern = entry.trim();
|
|
27997
|
+
if (pattern === "" || patterns.includes(pattern))
|
|
27998
|
+
continue;
|
|
27999
|
+
patterns.push(pattern);
|
|
28000
|
+
}
|
|
28001
|
+
const key = JSON.stringify(patterns) + (rejected.length > 0 ? `!${rejected.map((entry) => describeEntry(entry).slice(0, REJECTED_KEY_CHARS)).join(",")}` : "");
|
|
28002
|
+
return { patterns, rejected, unusable: false, key };
|
|
28003
|
+
};
|
|
28004
|
+
const normalizeSubscriptions = (input) => {
|
|
28005
|
+
const { patterns, rejected, unusable, key } = scanSubscriptions(input);
|
|
28006
|
+
const problems = [];
|
|
28007
|
+
const warnings = [];
|
|
28008
|
+
if (unusable) {
|
|
28009
|
+
problems.push(`eventSubscriptions must be an array of strings, received ${typeof input}. No events will be delivered.`);
|
|
28010
|
+
return { patterns, key, problems, warnings };
|
|
28011
|
+
}
|
|
28012
|
+
for (const entry of rejected) {
|
|
28013
|
+
problems.push(`eventSubscriptions entry ${describeEntry(entry)} is not a string and was ignored.`);
|
|
28014
|
+
}
|
|
28015
|
+
for (const pattern of patterns) {
|
|
28016
|
+
if (pattern === "*" || KNOWN_NAMES.has(pattern))
|
|
28017
|
+
continue;
|
|
28018
|
+
if (pattern.endsWith(".*")) {
|
|
28019
|
+
const family = pattern.slice(0, -2);
|
|
28020
|
+
if (!KNOWN_FAMILIES.has(family)) {
|
|
28021
|
+
const hint2 = suggest(family, KNOWN_FAMILIES);
|
|
28022
|
+
(hint2 ? problems : warnings).push(`"${pattern}" is not a known event family.${hint2}`);
|
|
28023
|
+
}
|
|
28024
|
+
continue;
|
|
28025
|
+
}
|
|
28026
|
+
const hint = suggest(pattern, KNOWN_NAMES);
|
|
28027
|
+
(hint ? problems : warnings).push(`"${pattern}" is not an event this SDK version emits.${hint}`);
|
|
28028
|
+
}
|
|
28029
|
+
const present = input !== void 0 && input !== null;
|
|
28030
|
+
if (present && patterns.length === 0 && problems.length === 0) {
|
|
28031
|
+
problems.push('eventSubscriptions is empty, so onEvent will never fire. Pass e.g. ["recording.*", "activity.*"] or ["*"].');
|
|
28032
|
+
}
|
|
28033
|
+
return { patterns, key, problems, warnings };
|
|
28034
|
+
};
|
|
28035
|
+
const reported = /* @__PURE__ */ new Set();
|
|
28036
|
+
const VALID_VALUES = `Valid values are "*", a family wildcard (${SDK_EVENT_FAMILIES.map((f) => `"${f}.*"`).join(", ")}), or an exact name (${KNOWN_SDK_EVENT_NAMES.join(", ")}).`;
|
|
28037
|
+
const reportOnce = (level, signature, message) => {
|
|
28038
|
+
if (reported.has(signature))
|
|
28039
|
+
return;
|
|
28040
|
+
reported.add(signature);
|
|
28041
|
+
if (level === "error")
|
|
28042
|
+
logger.configError(message);
|
|
28043
|
+
else
|
|
28044
|
+
logger.warn(message);
|
|
28045
|
+
};
|
|
28046
|
+
const reportSubscriptionProblems = ({ key, problems, warnings }) => {
|
|
28047
|
+
if (problems.length > 0) {
|
|
28048
|
+
reportOnce("error", `error:${key}:${problems.join("|")}`, `[Sofia SDK] eventSubscriptions: ${problems.join(" ")} ${VALID_VALUES}`);
|
|
28049
|
+
}
|
|
28050
|
+
if (warnings.length > 0) {
|
|
28051
|
+
reportOnce("warn", `warn:${key}:${warnings.join("|")}`, `[Sofia SDK] eventSubscriptions: ${warnings.join(" ")} ${VALID_VALUES}`);
|
|
28052
|
+
}
|
|
28053
|
+
};
|
|
28054
|
+
const reportHandlerWithoutSubscriptions = () => {
|
|
28055
|
+
reportOnce("error", "onEvent:no-subscriptions", "[Sofia SDK] onEvent: onEvent was provided without eventSubscriptions, so no events will be delivered. " + VALID_VALUES);
|
|
28056
|
+
};
|
|
28057
|
+
const compileSubscription = (input) => {
|
|
28058
|
+
const normalized = normalizeSubscriptions(input);
|
|
28059
|
+
reportSubscriptionProblems(normalized);
|
|
28060
|
+
const { patterns } = normalized;
|
|
28061
|
+
if (patterns.length === 0)
|
|
27864
28062
|
return () => false;
|
|
27865
28063
|
if (patterns.includes("*"))
|
|
27866
28064
|
return () => true;
|
|
@@ -27881,7 +28079,7 @@ const compileSubscription = (patterns) => {
|
|
|
27881
28079
|
return dot > 0 && families.has(name.slice(0, dot));
|
|
27882
28080
|
};
|
|
27883
28081
|
};
|
|
27884
|
-
const subscriptionKey = (
|
|
28082
|
+
const subscriptionKey = (input) => scanSubscriptions(input).key;
|
|
27885
28083
|
|
|
27886
28084
|
const QUEUE_CAP = 200;
|
|
27887
28085
|
let handler = null;
|
|
@@ -38686,22 +38884,24 @@ const useReportPreviewState = ({ descriptors, report }) => {
|
|
|
38686
38884
|
selectedRows,
|
|
38687
38885
|
filledScalarGaps
|
|
38688
38886
|
}), [entries, selectedKeys, selectedRows, filledScalarGaps]);
|
|
38689
|
-
const
|
|
38690
|
-
|
|
38887
|
+
const blockingGaps = React.useMemo(() => {
|
|
38888
|
+
const out = [];
|
|
38691
38889
|
for (const g of scalarGaps) {
|
|
38692
38890
|
if (!g.mandatory)
|
|
38693
38891
|
continue;
|
|
38694
38892
|
const filled = filledScalarGaps.get(g.key);
|
|
38695
|
-
if (isEmptyValue(filled))
|
|
38696
|
-
|
|
38893
|
+
if (isEmptyValue(filled)) {
|
|
38894
|
+
out.push({ scope: "field", key: g.key, label: g.descriptor.label });
|
|
38895
|
+
}
|
|
38697
38896
|
}
|
|
38698
38897
|
for (const e of entries) {
|
|
38699
38898
|
if (!selectedKeys.has(e.key))
|
|
38700
38899
|
continue;
|
|
38701
38900
|
if (e.descriptor.kind !== "array-of-objects" && e.descriptor.mandatory) {
|
|
38702
38901
|
const v = edits.has(e.key) ? edits.get(e.key) : e.value;
|
|
38703
|
-
if (isEmptyValue(v))
|
|
38704
|
-
|
|
38902
|
+
if (isEmptyValue(v)) {
|
|
38903
|
+
out.push({ scope: "field", key: e.key, label: e.descriptor.label });
|
|
38904
|
+
}
|
|
38705
38905
|
}
|
|
38706
38906
|
if (e.descriptor.kind !== "array-of-objects")
|
|
38707
38907
|
continue;
|
|
@@ -38711,17 +38911,33 @@ const useReportPreviewState = ({ descriptors, report }) => {
|
|
|
38711
38911
|
return;
|
|
38712
38912
|
const row = mergeRowEdits(e.key, idx, rawRow, edits);
|
|
38713
38913
|
if (e.descriptor.discriminator && !pickBranch(e.descriptor, row)) {
|
|
38714
|
-
|
|
38914
|
+
out.push({
|
|
38915
|
+
scope: "row",
|
|
38916
|
+
key: e.key,
|
|
38917
|
+
groupLabel: e.descriptor.label,
|
|
38918
|
+
rowIndex: idx,
|
|
38919
|
+
label: null,
|
|
38920
|
+
fieldKey: e.descriptor.discriminator.propertyName
|
|
38921
|
+
});
|
|
38715
38922
|
return;
|
|
38716
38923
|
}
|
|
38717
|
-
const
|
|
38718
|
-
|
|
38719
|
-
|
|
38720
|
-
|
|
38924
|
+
for (const f of effectiveItemFields(e.descriptor, row)) {
|
|
38925
|
+
if (!f.mandatory)
|
|
38926
|
+
continue;
|
|
38927
|
+
if (isEmptyValue(row[f.key])) {
|
|
38928
|
+
out.push({
|
|
38929
|
+
scope: "row",
|
|
38930
|
+
key: e.key,
|
|
38931
|
+
groupLabel: e.descriptor.label,
|
|
38932
|
+
rowIndex: idx,
|
|
38933
|
+
label: f.label,
|
|
38934
|
+
fieldKey: f.key
|
|
38935
|
+
});
|
|
38936
|
+
}
|
|
38721
38937
|
}
|
|
38722
38938
|
});
|
|
38723
38939
|
}
|
|
38724
|
-
return
|
|
38940
|
+
return out;
|
|
38725
38941
|
}, [
|
|
38726
38942
|
entries,
|
|
38727
38943
|
scalarGaps,
|
|
@@ -38730,9 +38946,11 @@ const useReportPreviewState = ({ descriptors, report }) => {
|
|
|
38730
38946
|
edits,
|
|
38731
38947
|
filledScalarGaps
|
|
38732
38948
|
]);
|
|
38949
|
+
const blockingMandatoryCount = blockingGaps.length;
|
|
38733
38950
|
return {
|
|
38734
38951
|
entries,
|
|
38735
38952
|
scalarGaps,
|
|
38953
|
+
blockingGaps,
|
|
38736
38954
|
rowGaps,
|
|
38737
38955
|
selectedKeys,
|
|
38738
38956
|
selectedRows,
|
|
@@ -39120,10 +39338,22 @@ const InsertionPreviewModal = ({ template, report, classNames = {}, onApply, onC
|
|
|
39120
39338
|
}) : formatMessage({
|
|
39121
39339
|
id: "Re-extracting the report… the new fields will replace this preview when ready.",
|
|
39122
39340
|
defaultMessage: "Re-extracting the report… the new fields will replace this preview when ready."
|
|
39123
|
-
}) })] })] }), (state.scalarGaps.length > 0 || state.blockingMandatoryCount > 0) && jsxRuntimeExports.jsx("p", { className: "omniscribe_insertion-preview__sub", children: state.blockingMandatoryCount > 0 ? jsxRuntimeExports.
|
|
39341
|
+
}) })] })] }), (state.scalarGaps.length > 0 || state.blockingMandatoryCount > 0) && jsxRuntimeExports.jsx("p", { className: "omniscribe_insertion-preview__sub", children: state.blockingMandatoryCount > 0 ? jsxRuntimeExports.jsxs("strong", { className: "omniscribe_insertion-preview__sub--blocking", children: [formatMessage({
|
|
39124
39342
|
id: "{count} mandatory fields must be filled before applying",
|
|
39125
39343
|
defaultMessage: "{count, plural, one {# mandatory field} other {# mandatory fields}} must be filled before applying"
|
|
39126
|
-
}, { count: state.blockingMandatoryCount })
|
|
39344
|
+
}, { count: state.blockingMandatoryCount }), ": ", state.blockingGaps.slice(0, BLOCKING_GAPS_SHOWN).map((g) => g.scope === "field" ? g.label : g.label === null ? formatMessage({
|
|
39345
|
+
id: "{group} · row {row}",
|
|
39346
|
+
defaultMessage: "{group} · row {row}"
|
|
39347
|
+
}, { group: g.groupLabel, row: g.rowIndex + 1 }) : formatMessage({
|
|
39348
|
+
id: "{group} · row {row} · {field}",
|
|
39349
|
+
defaultMessage: "{group} · row {row} · {field}"
|
|
39350
|
+
}, {
|
|
39351
|
+
group: g.groupLabel,
|
|
39352
|
+
row: g.rowIndex + 1,
|
|
39353
|
+
field: g.label
|
|
39354
|
+
})).join(", "), state.blockingGaps.length > BLOCKING_GAPS_SHOWN && formatMessage({ id: " +{count} more", defaultMessage: " +{count} more" }, {
|
|
39355
|
+
count: state.blockingGaps.length - BLOCKING_GAPS_SHOWN
|
|
39356
|
+
})] }) : formatMessage({
|
|
39127
39357
|
id: "{count} fields need your attention",
|
|
39128
39358
|
defaultMessage: "{count, plural, one {# field needs} other {# fields need}} your attention"
|
|
39129
39359
|
}, { count: state.scalarGaps.length }) }), jsxRuntimeExports.jsxs("div", { className: cx("omniscribe_insertion-preview__body", classNames.body), children: [jsxRuntimeExports.jsx(AttachmentsSection, { attachments }), state.entries.map((entry) => jsxRuntimeExports.jsx(EntrySection, { entry, state, classNames }, entry.key)), state.scalarGaps.length > 0 && jsxRuntimeExports.jsxs("section", { className: cx("omniscribe_insertion-preview__group omniscribe_insertion-preview__group--gaps", classNames.group), children: [jsxRuntimeExports.jsxs("header", { className: "omniscribe_insertion-preview__group-head", children: [jsxRuntimeExports.jsx("span", { className: "omniscribe_insertion-preview__group-name omniscribe_insertion-preview__group-name--gap", children: formatMessage({
|
|
@@ -39166,18 +39396,38 @@ const InsertionPreviewModal = ({ template, report, classNames = {}, onApply, onC
|
|
|
39166
39396
|
};
|
|
39167
39397
|
const EntrySection = ({ entry, state, classNames }) => {
|
|
39168
39398
|
const { formatMessage } = useIntl();
|
|
39169
|
-
const
|
|
39170
|
-
|
|
39171
|
-
|
|
39172
|
-
|
|
39399
|
+
const blockingRows = reactExports.useMemo(() => state.blockingGaps.filter((g) => g.scope === "row" && g.key === entry.key), [state.blockingGaps, entry.key]);
|
|
39400
|
+
const hasMandatoryRowGap = blockingRows.length > 0;
|
|
39401
|
+
const missingFieldCount = blockingRows.filter((g) => g.scope === "row" && g.label !== null).length;
|
|
39402
|
+
const untypedRowCount = blockingRows.length - missingFieldCount;
|
|
39403
|
+
const groupGapSummary = [
|
|
39404
|
+
missingFieldCount > 0 && formatMessage({
|
|
39405
|
+
id: "{count} mandatory fields missing in this group",
|
|
39406
|
+
defaultMessage: "{count, plural, one {# mandatory field missing} other {# mandatory fields missing}} in this group"
|
|
39407
|
+
}, { count: missingFieldCount }),
|
|
39408
|
+
untypedRowCount > 0 && formatMessage({
|
|
39409
|
+
id: "{count} rows need a type selected in this group",
|
|
39410
|
+
defaultMessage: "{count, plural, one {# row needs} other {# rows need}} a type selected in this group"
|
|
39411
|
+
}, { count: untypedRowCount })
|
|
39412
|
+
].filter(Boolean).join(" · ");
|
|
39173
39413
|
const [expanded, setExpanded] = reactExports.useState(hasMandatoryRowGap);
|
|
39174
39414
|
reactExports.useEffect(() => {
|
|
39175
39415
|
if (hasMandatoryRowGap)
|
|
39176
39416
|
setExpanded(true);
|
|
39177
39417
|
}, [hasMandatoryRowGap]);
|
|
39418
|
+
const missingKeysOfRow = (idx) => {
|
|
39419
|
+
const keys = new Set(state.rowGaps.get(entry.key)?.find((g) => g.index === idx)?.missingKeys);
|
|
39420
|
+
for (const g of blockingRows) {
|
|
39421
|
+
if (g.scope === "row" && g.rowIndex === idx)
|
|
39422
|
+
keys.add(g.fieldKey);
|
|
39423
|
+
}
|
|
39424
|
+
return [...keys];
|
|
39425
|
+
};
|
|
39178
39426
|
if (entry.descriptor.kind === "array-of-objects") {
|
|
39179
39427
|
const rows = entry.value;
|
|
39180
|
-
return jsxRuntimeExports.jsxs("section", { className: cx("omniscribe_insertion-preview__group", classNames.group), children: [jsxRuntimeExports.jsxs("header", { className: "omniscribe_insertion-preview__group-head", children: [jsxRuntimeExports.jsxs("label", { className: "omniscribe_insertion-preview__row", children: [jsxRuntimeExports.jsx("input", { type: "checkbox", className: "omniscribe_insertion-preview__row-checkbox", checked: state.selectedKeys.has(entry.key), onChange: () => state.toggleEntry(entry.key), "aria-label": formatMessage({ id: "Toggle {label}", defaultMessage: "Toggle {label}" }, { label: entry.descriptor.label }) }), jsxRuntimeExports.jsx("div", { className: "omniscribe_insertion-preview__row-body", children: jsxRuntimeExports.jsxs("div", { className: "omniscribe_insertion-preview__row-label", children: [entry.descriptor.label, " · ", rows.length
|
|
39428
|
+
return jsxRuntimeExports.jsxs("section", { className: cx("omniscribe_insertion-preview__group", classNames.group), children: [jsxRuntimeExports.jsxs("header", { className: "omniscribe_insertion-preview__group-head", children: [jsxRuntimeExports.jsxs("label", { className: "omniscribe_insertion-preview__row", children: [jsxRuntimeExports.jsx("input", { type: "checkbox", className: "omniscribe_insertion-preview__row-checkbox", checked: state.selectedKeys.has(entry.key), onChange: () => state.toggleEntry(entry.key), "aria-label": formatMessage({ id: "Toggle {label}", defaultMessage: "Toggle {label}" }, { label: entry.descriptor.label }) }), jsxRuntimeExports.jsx("div", { className: "omniscribe_insertion-preview__row-body", children: jsxRuntimeExports.jsxs("div", { className: "omniscribe_insertion-preview__row-label", children: [entry.descriptor.label, " · ", rows.length, hasMandatoryRowGap && // `role="img"` + `aria-label`: a `title` alone is not exposed
|
|
39429
|
+
// reliably, so a screen reader announced only "star 1".
|
|
39430
|
+
jsxRuntimeExports.jsxs("span", { className: "omniscribe_insertion-preview__group-count--gap", role: "img", title: groupGapSummary, "aria-label": groupGapSummary, children: [" ", "★ ", blockingRows.length] })] }) })] }), jsxRuntimeExports.jsx("button", { type: "button", className: "omniscribe_insertion-preview__btn", onClick: () => setExpanded((v) => !v), children: expanded ? formatMessage({ id: "Collapse", defaultMessage: "Collapse" }) : formatMessage({ id: "Edit", defaultMessage: "Edit" }) })] }), expanded && rows.map((row, idx) => jsxRuntimeExports.jsx(RowItem, { entryKey: entry.key, rowIndex: idx, row, descriptor: entry.descriptor, state, missingKeys: missingKeysOfRow(idx), classNames }, idx))] });
|
|
39181
39431
|
}
|
|
39182
39432
|
return jsxRuntimeExports.jsx("section", { className: cx("omniscribe_insertion-preview__group", classNames.group), children: jsxRuntimeExports.jsxs("label", { className: cx("omniscribe_insertion-preview__row", classNames.row), children: [jsxRuntimeExports.jsx("input", { type: "checkbox", className: "omniscribe_insertion-preview__row-checkbox", checked: state.selectedKeys.has(entry.key), onChange: () => state.toggleEntry(entry.key), "aria-label": `Toggle ${entry.descriptor.label}` }), jsxRuntimeExports.jsxs("div", { className: "omniscribe_insertion-preview__row-body", children: [jsxRuntimeExports.jsx("div", { className: "omniscribe_insertion-preview__row-label", children: entry.descriptor.label }), jsxRuntimeExports.jsx(FieldEditControl, { descriptor: entry.descriptor, value: state.edits.has(entry.key) ? state.edits.get(entry.key) : entry.value, onChange: (v) => state.setScalarEdit(entry.key, v) })] })] }) });
|
|
39183
39433
|
};
|
|
@@ -39218,6 +39468,7 @@ const RowItem = ({ entryKey, rowIndex, row, descriptor, state, missingKeys, clas
|
|
|
39218
39468
|
})] })] }), jsxRuntimeExports.jsx(FieldEditControl, { descriptor: fd, value, onChange: (v) => state.setRowFieldEdit(entryKey, rowIndex, fd.key, v) })] }, fd.key);
|
|
39219
39469
|
}) })] })] });
|
|
39220
39470
|
};
|
|
39471
|
+
const BLOCKING_GAPS_SHOWN = 3;
|
|
39221
39472
|
const ScalarGapRow = ({ descriptor, value, onChange, classNames, mandatory }) => {
|
|
39222
39473
|
const { formatMessage } = useIntl();
|
|
39223
39474
|
return jsxRuntimeExports.jsxs("div", { className: cx(`omniscribe_insertion-preview__row omniscribe_insertion-preview__row--gap${mandatory ? " omniscribe_insertion-preview__row--mandatory" : ""}`, classNames.gapRow), children: [jsxRuntimeExports.jsx("span", { className: `omniscribe_insertion-preview__gap-icon${mandatory ? " omniscribe_insertion-preview__gap-icon--mandatory" : ""}`, "aria-hidden": true, children: mandatory ? "★" : "⚠" }), jsxRuntimeExports.jsxs("div", { className: "omniscribe_insertion-preview__row-body", children: [jsxRuntimeExports.jsxs("div", { className: "omniscribe_insertion-preview__row-label", children: [descriptor.label, mandatory && jsxRuntimeExports.jsx("span", { className: "omniscribe_insertion-preview__mandatory-pill", "aria-label": formatMessage({
|
|
@@ -166923,6 +167174,7 @@ const useBrowserCapabilityCheck = () => {
|
|
|
166923
167174
|
}, []);
|
|
166924
167175
|
};
|
|
166925
167176
|
|
|
167177
|
+
const MISSING_SUBSCRIPTIONS_GRACE_MS = 1e3;
|
|
166926
167178
|
const BrowserCapabilityProbe = () => {
|
|
166927
167179
|
useBrowserCapabilityCheck();
|
|
166928
167180
|
return null;
|
|
@@ -166981,11 +167233,13 @@ const Omniscribe = ({ baseurl, wssurl, apikey, userid, patientid, templateid = "
|
|
|
166981
167233
|
return;
|
|
166982
167234
|
return SdkEventBus.setHandler((event) => onEventRef.current?.(event));
|
|
166983
167235
|
}, [hasEventHandler]);
|
|
167236
|
+
const hasSubscriptionsProp = eventSubscriptions !== void 0 && eventSubscriptions !== null;
|
|
166984
167237
|
reactExports.useEffect(() => {
|
|
166985
|
-
if (hasEventHandler
|
|
166986
|
-
|
|
166987
|
-
|
|
166988
|
-
|
|
167238
|
+
if (!hasEventHandler || hasSubscriptionsProp)
|
|
167239
|
+
return;
|
|
167240
|
+
const timer = setTimeout(reportHandlerWithoutSubscriptions, MISSING_SUBSCRIPTIONS_GRACE_MS);
|
|
167241
|
+
return () => clearTimeout(timer);
|
|
167242
|
+
}, [hasEventHandler, hasSubscriptionsProp]);
|
|
166989
167243
|
reactExports.useEffect(() => {
|
|
166990
167244
|
if (apikey && apikey.trim() !== "") {
|
|
166991
167245
|
setEncryptionSeed(apikey);
|
|
@@ -167194,6 +167448,8 @@ const r2wcProps = {
|
|
|
167194
167448
|
};
|
|
167195
167449
|
const toAttributeName = (prop) => prop.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
167196
167450
|
const JSON_ATTRS = new Set(Object.entries(r2wcProps).filter(([, type]) => type === "json").map(([prop]) => toAttributeName(prop)));
|
|
167451
|
+
const EVENT_SUBSCRIPTIONS_ATTR = toAttributeName("eventSubscriptions");
|
|
167452
|
+
const looksLikeJson = (value) => /^\s*[[{"]/.test(value);
|
|
167197
167453
|
const SofiaSDK = s$1(Omniscribe, {
|
|
167198
167454
|
props: r2wcProps,
|
|
167199
167455
|
shadow: "open"
|
|
@@ -167224,7 +167480,18 @@ for (const prop of FUNCTION_PROPS) {
|
|
|
167224
167480
|
}
|
|
167225
167481
|
});
|
|
167226
167482
|
}
|
|
167227
|
-
const SENSITIVE_ATTRS = [
|
|
167483
|
+
const SENSITIVE_ATTRS = [
|
|
167484
|
+
"apikey",
|
|
167485
|
+
"userid",
|
|
167486
|
+
"patientid",
|
|
167487
|
+
"patientdata",
|
|
167488
|
+
"baseurl",
|
|
167489
|
+
"wssurl",
|
|
167490
|
+
"toolsargs",
|
|
167491
|
+
"templateid",
|
|
167492
|
+
"template",
|
|
167493
|
+
"template-extras"
|
|
167494
|
+
];
|
|
167228
167495
|
let _sanitizing = false;
|
|
167229
167496
|
async function injectStyles(shadowRoot) {
|
|
167230
167497
|
if (!shadowRoot)
|
|
@@ -167247,8 +167514,12 @@ SofiaSDK.prototype.attributeChangedCallback = function(name, oldValue, newValue)
|
|
|
167247
167514
|
try {
|
|
167248
167515
|
JSON.parse(newValue);
|
|
167249
167516
|
} catch {
|
|
167250
|
-
|
|
167251
|
-
|
|
167517
|
+
if (name === EVENT_SUBSCRIPTIONS_ATTR && !looksLikeJson(newValue)) {
|
|
167518
|
+
newValue = JSON.stringify(newValue);
|
|
167519
|
+
} else {
|
|
167520
|
+
logger.configError(`Ignoring malformed JSON in the "${name}" property.`);
|
|
167521
|
+
return;
|
|
167522
|
+
}
|
|
167252
167523
|
}
|
|
167253
167524
|
}
|
|
167254
167525
|
if (originalAttributeChangedCallback) {
|
|
@@ -169510,7 +169781,7 @@ const zig$1 = /*#__PURE__*/_mergeNamespaces({
|
|
|
169510
169781
|
default: zig
|
|
169511
169782
|
}, [zigExports]);
|
|
169512
169783
|
|
|
169513
|
-
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";
|
|
169784
|
+
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-500: oklch(55.2% 0.016 285.938);\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/* Escala de encabezados calibrada al ancho del panel del chat (~380px) con\n cuerpo de 14px. La escala anterior (26/24/22/20/18px) venía de la tipografía\n por defecto de un documento a ancho completo: en el panel el encabezado\n dominaba el mensaje y los seis niveles quedaban a 2px unos de otros, sin\n jerarquía legible. Aquí h1-h3 bajan de tamaño y h4-h6 se diferencian por\n peso, no por tamaño. Los márgenes usan --spacing (rem): un host que altere\n el font-size de :root los escala, aunque los tamaños en px no se muevan. */\n\n.omniscribe_markdown-h1 {\n margin-top: calc(var(--spacing) * 5) /* 20px */;\n margin-bottom: calc(var(--spacing) * 2) /* 8px */;\n scroll-margin: calc(var(--spacing) * 20) /* 80px */;\n font-size: var(--text-xl) /* 20px */;\n line-height: var(--text-xl--line-height);\n font-weight: var(--font-weight-bold) /* 700 */;\n letter-spacing: var(--tracking-tight) /* -0.025em */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n}\n\n.omniscribe_markdown-h2 {\n margin-top: calc(var(--spacing) * 4) /* 16px */;\n margin-bottom: calc(var(--spacing) * 2) /* 8px */;\n scroll-margin: calc(var(--spacing) * 20);\n font-size: var(--text-lg) /* 18px */;\n line-height: var(--text-lg--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n letter-spacing: var(--tracking-tight);\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n}\n\n.omniscribe_markdown-h3 {\n margin-top: calc(var(--spacing) * 4) /* 16px */;\n margin-bottom: calc(var(--spacing) * 2) /* 8px */;\n scroll-margin: calc(var(--spacing) * 20);\n font-size: var(--text-base) /* 16px */;\n line-height: var(--text-base--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n}\n\n/* h4-h6 comparten el tamaño del cuerpo (14px) y se distinguen por peso.\n Bajar de 14px haría el encabezado menos legible que el texto que titula. */\n.omniscribe_markdown-h4 {\n margin-top: calc(var(--spacing) * 3) /* 12px */;\n margin-bottom: calc(var(--spacing) * 1) /* 4px */;\n scroll-margin: calc(var(--spacing) * 20);\n font-size: var(--text-sm) /* 14px */;\n line-height: var(--text-sm--line-height);\n font-weight: var(--font-weight-bold) /* 700 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n}\n\n.omniscribe_markdown-h5 {\n margin-top: calc(var(--spacing) * 3) /* 12px */;\n margin-bottom: calc(var(--spacing) * 1) /* 4px */;\n font-size: var(--text-sm) /* 14px */;\n line-height: var(--text-sm--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n}\n\n.omniscribe_markdown-h6 {\n margin-top: calc(var(--spacing) * 3) /* 12px */;\n margin-bottom: calc(var(--spacing) * 1) /* 4px */;\n font-size: var(--text-sm) /* 14px */;\n line-height: var(--text-sm--line-height);\n font-weight: var(--font-weight-semibold) /* 600 */;\n color: var(--color-zinc-500);\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n &:last-child {\n margin-bottom: calc(var(--spacing) * 0);\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";
|
|
169514
169785
|
|
|
169515
169786
|
const injectedCss$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
169516
169787
|
__proto__: null,
|