@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
|
@@ -15533,7 +15533,7 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
15533
15533
|
mergeConfig: mergeConfig$1,
|
|
15534
15534
|
create: create$1
|
|
15535
15535
|
} = axios;
|
|
15536
|
-
const version$2 = "1.0.
|
|
15536
|
+
const version$2 = "1.0.12";
|
|
15537
15537
|
const handleApiError$1 = async (error) => {
|
|
15538
15538
|
return Promise.reject(error);
|
|
15539
15539
|
};
|
|
@@ -16265,7 +16265,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
16265
16265
|
"The note update failed. Please try again from the chat.": "فشل تحديث الملاحظة. يرجى المحاولة مرة أخرى من المحادثة.",
|
|
16266
16266
|
"Generation failed": "فشل الإنشاء",
|
|
16267
16267
|
"Could not generate {category}. Please try again.": "تعذّر إنشاء {category}. يرجى المحاولة مرة أخرى.",
|
|
16268
|
-
"The new note is waiting for this review — apply or cancel to continue.": "الملاحظة الجديدة في انتظار هذه المراجعة — طبّق أو ألغِ للمتابعة."
|
|
16268
|
+
"The new note is waiting for this review — apply or cancel to continue.": "الملاحظة الجديدة في انتظار هذه المراجعة — طبّق أو ألغِ للمتابعة.",
|
|
16269
|
+
" +{count} more": " +{count} أخرى",
|
|
16270
|
+
"{count} mandatory fields missing in this group": "{count, plural, zero {# حقل إلزامي ناقص} one {# حقل إلزامي ناقص} two {حقلان إلزاميان ناقصان} few {# حقول إلزامية ناقصة} many {# حقلاً إلزامياً ناقصاً} other {# حقل إلزامي ناقص}} في هذه المجموعة",
|
|
16271
|
+
"{group} · row {row}": "{group} · الصف {row}",
|
|
16272
|
+
"{group} · row {row} · {field}": "{group} · الصف {row} · {field}",
|
|
16273
|
+
"{count} rows need a type selected in this group": "{count, plural, zero {# صف يحتاج} one {# صف يحتاج} two {صفّان يحتاجان} few {# صفوف تحتاج} many {# صفاً يحتاج} other {# صف يحتاج}} إلى تحديد النوع في هذه المجموعة"
|
|
16269
16274
|
};
|
|
16270
16275
|
const Add$b = "Afegir";
|
|
16271
16276
|
const Apply$b = "Aplica";
|
|
@@ -16634,7 +16639,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
16634
16639
|
"Minimize transcription": "Minimitzar transcripció",
|
|
16635
16640
|
"Generation failed": "La generació ha fallat",
|
|
16636
16641
|
"Could not generate {category}. Please try again.": "No s'ha pogut generar {category}. Torna-ho a provar.",
|
|
16637
|
-
"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."
|
|
16642
|
+
"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.",
|
|
16643
|
+
" +{count} more": " +{count} més",
|
|
16644
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Falta # camp obligatori} other {Falten # camps obligatoris}} en aquest grup",
|
|
16645
|
+
"{group} · row {row}": "{group} · fila {row}",
|
|
16646
|
+
"{group} · row {row} · {field}": "{group} · fila {row} · {field}",
|
|
16647
|
+
"{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"
|
|
16638
16648
|
};
|
|
16639
16649
|
const Add$a = "Afegir";
|
|
16640
16650
|
const Apply$a = "Aplica";
|
|
@@ -17003,7 +17013,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
17003
17013
|
"Minimize transcription": "Minimitzar transcripció",
|
|
17004
17014
|
"Generation failed": "La generació ha fallat",
|
|
17005
17015
|
"Could not generate {category}. Please try again.": "No s'ha pogut generar {category}. Torna-ho a provar.",
|
|
17006
|
-
"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."
|
|
17016
|
+
"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.",
|
|
17017
|
+
" +{count} more": " +{count} més",
|
|
17018
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Falta # camp obligatori} other {Falten # camps obligatoris}} en este grup",
|
|
17019
|
+
"{group} · row {row}": "{group} · fila {row}",
|
|
17020
|
+
"{group} · row {row} · {field}": "{group} · fila {row} · {field}",
|
|
17021
|
+
"{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"
|
|
17007
17022
|
};
|
|
17008
17023
|
const Add$9 = "Přidat";
|
|
17009
17024
|
const Apply$9 = "Použít";
|
|
@@ -17372,7 +17387,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
17372
17387
|
"Minimize transcription": "Sbalit přepis",
|
|
17373
17388
|
"Generation failed": "Generování se nezdařilo",
|
|
17374
17389
|
"Could not generate {category}. Please try again.": "Nepodařilo se vygenerovat {category}. Zkuste to znovu.",
|
|
17375
|
-
"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."
|
|
17390
|
+
"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.",
|
|
17391
|
+
" +{count} more": " +{count} dalších",
|
|
17392
|
+
"{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ě",
|
|
17393
|
+
"{group} · row {row}": "{group} · řádek {row}",
|
|
17394
|
+
"{group} · row {row} · {field}": "{group} · řádek {row} · {field}",
|
|
17395
|
+
"{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"
|
|
17376
17396
|
};
|
|
17377
17397
|
const Add$8 = "Add";
|
|
17378
17398
|
const Apply$8 = "Apply";
|
|
@@ -17741,7 +17761,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
17741
17761
|
"Minimize transcription": "Minimise transcription",
|
|
17742
17762
|
"Generation failed": "Generation failed",
|
|
17743
17763
|
"Could not generate {category}. Please try again.": "Could not generate {category}. Please try again.",
|
|
17744
|
-
"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."
|
|
17764
|
+
"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.",
|
|
17765
|
+
" +{count} more": " +{count} more",
|
|
17766
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# mandatory field missing} other {# mandatory fields missing}} in this group",
|
|
17767
|
+
"{group} · row {row}": "{group} · row {row}",
|
|
17768
|
+
"{group} · row {row} · {field}": "{group} · row {row} · {field}",
|
|
17769
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# row needs} other {# rows need}} a type selected in this group"
|
|
17745
17770
|
};
|
|
17746
17771
|
const Add$7 = "Add";
|
|
17747
17772
|
const Apply$7 = "Apply";
|
|
@@ -18111,7 +18136,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
18111
18136
|
"Minimize transcription": "Minimize transcription",
|
|
18112
18137
|
"Generation failed": "Generation failed",
|
|
18113
18138
|
"Could not generate {category}. Please try again.": "Could not generate {category}. Please try again.",
|
|
18114
|
-
"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."
|
|
18139
|
+
"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.",
|
|
18140
|
+
" +{count} more": " +{count} more",
|
|
18141
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# mandatory field missing} other {# mandatory fields missing}} in this group",
|
|
18142
|
+
"{group} · row {row}": "{group} · row {row}",
|
|
18143
|
+
"{group} · row {row} · {field}": "{group} · row {row} · {field}",
|
|
18144
|
+
"{count} rows need a type selected in this group": "{count, plural, one {# row needs} other {# rows need}} a type selected in this group"
|
|
18115
18145
|
};
|
|
18116
18146
|
const Add$6 = "Añadir";
|
|
18117
18147
|
const Apply$6 = "Aplicar";
|
|
@@ -18493,7 +18523,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
18493
18523
|
"AI use refused": "Uso de IA rechazado",
|
|
18494
18524
|
"{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.",
|
|
18495
18525
|
"{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.",
|
|
18496
|
-
"this patient": "este paciente"
|
|
18526
|
+
"this patient": "este paciente",
|
|
18527
|
+
" +{count} more": " +{count} más",
|
|
18528
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {Falta # campo obligatorio} other {Faltan # campos obligatorios}} en este grupo",
|
|
18529
|
+
"{group} · row {row}": "{group} · fila {row}",
|
|
18530
|
+
"{group} · row {row} · {field}": "{group} · fila {row} · {field}",
|
|
18531
|
+
"{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"
|
|
18497
18532
|
};
|
|
18498
18533
|
const Add$5 = "Ajouter";
|
|
18499
18534
|
const Apply$5 = "Appliquer";
|
|
@@ -18862,7 +18897,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
18862
18897
|
"Minimize transcription": "Réduire la transcription",
|
|
18863
18898
|
"Generation failed": "Échec de la génération",
|
|
18864
18899
|
"Could not generate {category}. Please try again.": "Impossible de générer {category}. Veuillez réessayer.",
|
|
18865
|
-
"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."
|
|
18900
|
+
"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.",
|
|
18901
|
+
" +{count} more": " +{count} de plus",
|
|
18902
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# champ obligatoire manquant} other {# champs obligatoires manquants}} dans ce groupe",
|
|
18903
|
+
"{group} · row {row}": "{group} · ligne {row}",
|
|
18904
|
+
"{group} · row {row} · {field}": "{group} · ligne {row} · {field}",
|
|
18905
|
+
"{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"
|
|
18866
18906
|
};
|
|
18867
18907
|
const Add$4 = "जोड़ें";
|
|
18868
18908
|
const Apply$4 = "लागू करें";
|
|
@@ -19210,7 +19250,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
19210
19250
|
"The note update failed. Please try again from the chat.": "नोट अपडेट विफल रहा। कृपया चैट से पुनः प्रयास करें।",
|
|
19211
19251
|
"Generation failed": "जनरेशन विफल रहा",
|
|
19212
19252
|
"Could not generate {category}. Please try again.": "{category} जनरेट नहीं किया जा सका। कृपया पुनः प्रयास करें।",
|
|
19213
|
-
"The new note is waiting for this review — apply or cancel to continue.": "नई नोट इस समीक्षा की प्रतीक्षा कर रही है — जारी रखने के लिए लागू करें या रद्द करें।"
|
|
19253
|
+
"The new note is waiting for this review — apply or cancel to continue.": "नई नोट इस समीक्षा की प्रतीक्षा कर रही है — जारी रखने के लिए लागू करें या रद्द करें।",
|
|
19254
|
+
" +{count} more": " +{count} और",
|
|
19255
|
+
"{count} mandatory fields missing in this group": "इस समूह में {count, plural, one {# अनिवार्य फ़ील्ड खाली है} other {# अनिवार्य फ़ील्ड खाली हैं}}",
|
|
19256
|
+
"{group} · row {row}": "{group} · पंक्ति {row}",
|
|
19257
|
+
"{group} · row {row} · {field}": "{group} · पंक्ति {row} · {field}",
|
|
19258
|
+
"{count} rows need a type selected in this group": "इस समूह में {count, plural, one {# पंक्ति के लिए} other {# पंक्तियों के लिए}} प्रकार चुनना आवश्यक है"
|
|
19214
19259
|
};
|
|
19215
19260
|
const Add$3 = "Tambahkan";
|
|
19216
19261
|
const Apply$3 = "Terapkan";
|
|
@@ -19557,7 +19602,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
19557
19602
|
"The note update failed. Please try again from the chat.": "Pembaruan catatan gagal. Silakan coba lagi dari obrolan.",
|
|
19558
19603
|
"Generation failed": "Pembuatan gagal",
|
|
19559
19604
|
"Could not generate {category}. Please try again.": "Tidak dapat membuat {category}. Silakan coba lagi.",
|
|
19560
|
-
"The new note is waiting for this review — apply or cancel to continue.": "Catatan baru menunggu tinjauan ini — terapkan atau batalkan untuk melanjutkan."
|
|
19605
|
+
"The new note is waiting for this review — apply or cancel to continue.": "Catatan baru menunggu tinjauan ini — terapkan atau batalkan untuk melanjutkan.",
|
|
19606
|
+
" +{count} more": " +{count} lainnya",
|
|
19607
|
+
"{count} mandatory fields missing in this group": "{count, plural, other {# bidang wajib belum diisi}} di grup ini",
|
|
19608
|
+
"{group} · row {row}": "{group} · baris {row}",
|
|
19609
|
+
"{group} · row {row} · {field}": "{group} · baris {row} · {field}",
|
|
19610
|
+
"{count} rows need a type selected in this group": "{count, plural, other {# baris perlu dipilih jenisnya}} di grup ini"
|
|
19561
19611
|
};
|
|
19562
19612
|
const Add$2 = "ਸ਼ਾਮਲ ਕਰੋ";
|
|
19563
19613
|
const Apply$2 = "ਲਾਗੂ ਕਰੋ";
|
|
@@ -19926,7 +19976,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
19926
19976
|
"Minimize transcription": "ਟ੍ਰਾਂਸਕ੍ਰਿਪਸ਼ਨ ਸਮੇਟੋ",
|
|
19927
19977
|
"Generation failed": "ਜਨਰੇਸ਼ਨ ਅਸਫਲ ਰਹੀ",
|
|
19928
19978
|
"Could not generate {category}. Please try again.": "{category} ਜਨਰੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
|
|
19929
|
-
"The new note is waiting for this review — apply or cancel to continue.": "ਨਵਾਂ ਨੋਟ ਇਸ ਸਮੀਖਿਆ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ — ਜਾਰੀ ਰੱਖਣ ਲਈ ਲਾਗੂ ਕਰੋ ਜਾਂ ਰੱਦ ਕਰੋ।"
|
|
19979
|
+
"The new note is waiting for this review — apply or cancel to continue.": "ਨਵਾਂ ਨੋਟ ਇਸ ਸਮੀਖਿਆ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ — ਜਾਰੀ ਰੱਖਣ ਲਈ ਲਾਗੂ ਕਰੋ ਜਾਂ ਰੱਦ ਕਰੋ।",
|
|
19980
|
+
" +{count} more": " +{count} ਹੋਰ",
|
|
19981
|
+
"{count} mandatory fields missing in this group": "ਇਸ ਸਮੂਹ ਵਿੱਚ {count, plural, one {# ਲਾਜ਼ਮੀ ਖੇਤਰ ਖਾਲੀ ਹੈ} other {# ਲਾਜ਼ਮੀ ਖੇਤਰ ਖਾਲੀ ਹਨ}}",
|
|
19982
|
+
"{group} · row {row}": "{group} · ਕਤਾਰ {row}",
|
|
19983
|
+
"{group} · row {row} · {field}": "{group} · ਕਤਾਰ {row} · {field}",
|
|
19984
|
+
"{count} rows need a type selected in this group": "ਇਸ ਸਮੂਹ ਵਿੱਚ {count, plural, one {# ਕਤਾਰ ਲਈ} other {# ਕਤਾਰਾਂ ਲਈ}} ਕਿਸਮ ਚੁਣਨੀ ਲਾਜ਼ਮੀ ਹੈ"
|
|
19930
19985
|
};
|
|
19931
19986
|
const Add$1 = "Lägg till";
|
|
19932
19987
|
const Apply$1 = "Tillämpa";
|
|
@@ -20295,7 +20350,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
20295
20350
|
"Minimize transcription": "Minimera transkription",
|
|
20296
20351
|
"Generation failed": "Genereringen misslyckades",
|
|
20297
20352
|
"Could not generate {category}. Please try again.": "Det gick inte att generera {category}. Försök igen.",
|
|
20298
|
-
"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."
|
|
20353
|
+
"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.",
|
|
20354
|
+
" +{count} more": " +{count} till",
|
|
20355
|
+
"{count} mandatory fields missing in this group": "{count, plural, one {# obligatoriskt fält saknas} other {# obligatoriska fält saknas}} i den här gruppen",
|
|
20356
|
+
"{group} · row {row}": "{group} · rad {row}",
|
|
20357
|
+
"{group} · row {row} · {field}": "{group} · rad {row} · {field}",
|
|
20358
|
+
"{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"
|
|
20299
20359
|
};
|
|
20300
20360
|
const Add = "شامل کریں";
|
|
20301
20361
|
const Apply = "لاگو کریں";
|
|
@@ -20665,7 +20725,12 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
20665
20725
|
"Minimize transcription": "نقل سمیٹیں",
|
|
20666
20726
|
"Generation failed": "تخلیق ناکام ہو گئی",
|
|
20667
20727
|
"Could not generate {category}. Please try again.": "{category} تیار نہیں کیا جا سکا۔ براہ کرم دوبارہ کوشش کریں۔",
|
|
20668
|
-
"The new note is waiting for this review — apply or cancel to continue.": "نیا نوٹ اس جائزے کا منتظر ہے — جاری رکھنے کے لیے لاگو کریں یا منسوخ کریں۔"
|
|
20728
|
+
"The new note is waiting for this review — apply or cancel to continue.": "نیا نوٹ اس جائزے کا منتظر ہے — جاری رکھنے کے لیے لاگو کریں یا منسوخ کریں۔",
|
|
20729
|
+
" +{count} more": " +{count} مزید",
|
|
20730
|
+
"{count} mandatory fields missing in this group": "اس گروپ میں {count, plural, one {# لازمی خانہ خالی ہے} other {# لازمی خانے خالی ہیں}}",
|
|
20731
|
+
"{group} · row {row}": "{group} · قطار {row}",
|
|
20732
|
+
"{group} · row {row} · {field}": "{group} · قطار {row} · {field}",
|
|
20733
|
+
"{count} rows need a type selected in this group": "اس گروپ میں {count, plural, one {# قطار کے لیے} other {# قطاروں کے لیے}} قسم منتخب کرنا ضروری ہے"
|
|
20669
20734
|
};
|
|
20670
20735
|
var LanguageCode;
|
|
20671
20736
|
(function(LanguageCode2) {
|
|
@@ -21382,18 +21447,152 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
21382
21447
|
loadVadCoverage
|
|
21383
21448
|
};
|
|
21384
21449
|
};
|
|
21385
|
-
const
|
|
21450
|
+
const KNOWN_SDK_EVENT_NAMES = [
|
|
21451
|
+
"recording.started",
|
|
21452
|
+
"recording.stopped",
|
|
21453
|
+
"recording.audio_lost",
|
|
21454
|
+
"recording.microphone_disconnected",
|
|
21455
|
+
"recording.heartbeat",
|
|
21456
|
+
"activity.interaction",
|
|
21457
|
+
"activity.typing",
|
|
21458
|
+
"report.generation_started",
|
|
21459
|
+
"report.settled",
|
|
21460
|
+
"lifecycle.ready",
|
|
21461
|
+
"lifecycle.closed"
|
|
21462
|
+
];
|
|
21463
|
+
const SDK_EVENT_FAMILIES = [
|
|
21386
21464
|
"recording",
|
|
21387
21465
|
"activity",
|
|
21388
21466
|
"report",
|
|
21389
21467
|
"lifecycle"
|
|
21390
21468
|
];
|
|
21469
|
+
const FAMILIES = SDK_EVENT_FAMILIES;
|
|
21391
21470
|
const familyOf = (name2) => {
|
|
21392
21471
|
const prefix = name2.split(".")[0];
|
|
21393
21472
|
return FAMILIES.includes(prefix) ? prefix : "lifecycle";
|
|
21394
21473
|
};
|
|
21395
|
-
const
|
|
21396
|
-
|
|
21474
|
+
const KNOWN_NAMES = new Set(KNOWN_SDK_EVENT_NAMES);
|
|
21475
|
+
const KNOWN_FAMILIES = new Set(SDK_EVENT_FAMILIES);
|
|
21476
|
+
const distance = (a2, b) => {
|
|
21477
|
+
const prev = Array.from({ length: b.length + 1 }, (_2, i2) => i2);
|
|
21478
|
+
for (let i2 = 1; i2 <= a2.length; i2++) {
|
|
21479
|
+
let corner = prev[0];
|
|
21480
|
+
prev[0] = i2;
|
|
21481
|
+
for (let j2 = 1; j2 <= b.length; j2++) {
|
|
21482
|
+
const next = Math.min(prev[j2] + 1, prev[j2 - 1] + 1, corner + (a2[i2 - 1] === b[j2 - 1] ? 0 : 1));
|
|
21483
|
+
corner = prev[j2];
|
|
21484
|
+
prev[j2] = next;
|
|
21485
|
+
}
|
|
21486
|
+
}
|
|
21487
|
+
return prev[b.length];
|
|
21488
|
+
};
|
|
21489
|
+
const describeEntry = (entry) => {
|
|
21490
|
+
var _a2;
|
|
21491
|
+
try {
|
|
21492
|
+
return (_a2 = JSON.stringify(entry)) != null ? _a2 : `<${typeof entry}>`;
|
|
21493
|
+
} catch (e) {
|
|
21494
|
+
return `<unserializable ${typeof entry}>`;
|
|
21495
|
+
}
|
|
21496
|
+
};
|
|
21497
|
+
const suggest = (value, candidates) => {
|
|
21498
|
+
let best = null;
|
|
21499
|
+
let bestScore = Infinity;
|
|
21500
|
+
for (const candidate of candidates) {
|
|
21501
|
+
const score = distance(value, candidate);
|
|
21502
|
+
if (score < bestScore) {
|
|
21503
|
+
bestScore = score;
|
|
21504
|
+
best = candidate;
|
|
21505
|
+
}
|
|
21506
|
+
}
|
|
21507
|
+
return best !== null && bestScore <= Math.max(3, best.length / 3) ? ` Did you mean "${best}"?` : "";
|
|
21508
|
+
};
|
|
21509
|
+
const REJECTED_KEY_CHARS = 40;
|
|
21510
|
+
const scanSubscriptions = (input) => {
|
|
21511
|
+
if (input === void 0 || input === null) {
|
|
21512
|
+
return { patterns: [], rejected: [], unusable: false, key: "" };
|
|
21513
|
+
}
|
|
21514
|
+
const raw = typeof input === "string" ? [input] : input;
|
|
21515
|
+
if (!Array.isArray(raw)) {
|
|
21516
|
+
return {
|
|
21517
|
+
patterns: [],
|
|
21518
|
+
rejected: [],
|
|
21519
|
+
unusable: true,
|
|
21520
|
+
key: `!${typeof input}`
|
|
21521
|
+
};
|
|
21522
|
+
}
|
|
21523
|
+
const patterns = [];
|
|
21524
|
+
const rejected = [];
|
|
21525
|
+
for (const entry of raw) {
|
|
21526
|
+
if (typeof entry !== "string") {
|
|
21527
|
+
rejected.push(entry);
|
|
21528
|
+
continue;
|
|
21529
|
+
}
|
|
21530
|
+
const pattern = entry.trim();
|
|
21531
|
+
if (pattern === "" || patterns.includes(pattern))
|
|
21532
|
+
continue;
|
|
21533
|
+
patterns.push(pattern);
|
|
21534
|
+
}
|
|
21535
|
+
const key = JSON.stringify(patterns) + (rejected.length > 0 ? `!${rejected.map((entry) => describeEntry(entry).slice(0, REJECTED_KEY_CHARS)).join(",")}` : "");
|
|
21536
|
+
return { patterns, rejected, unusable: false, key };
|
|
21537
|
+
};
|
|
21538
|
+
const normalizeSubscriptions = (input) => {
|
|
21539
|
+
const { patterns, rejected, unusable, key } = scanSubscriptions(input);
|
|
21540
|
+
const problems = [];
|
|
21541
|
+
const warnings = [];
|
|
21542
|
+
if (unusable) {
|
|
21543
|
+
problems.push(`eventSubscriptions must be an array of strings, received ${typeof input}. No events will be delivered.`);
|
|
21544
|
+
return { patterns, key, problems, warnings };
|
|
21545
|
+
}
|
|
21546
|
+
for (const entry of rejected) {
|
|
21547
|
+
problems.push(`eventSubscriptions entry ${describeEntry(entry)} is not a string and was ignored.`);
|
|
21548
|
+
}
|
|
21549
|
+
for (const pattern of patterns) {
|
|
21550
|
+
if (pattern === "*" || KNOWN_NAMES.has(pattern))
|
|
21551
|
+
continue;
|
|
21552
|
+
if (pattern.endsWith(".*")) {
|
|
21553
|
+
const family = pattern.slice(0, -2);
|
|
21554
|
+
if (!KNOWN_FAMILIES.has(family)) {
|
|
21555
|
+
const hint2 = suggest(family, KNOWN_FAMILIES);
|
|
21556
|
+
(hint2 ? problems : warnings).push(`"${pattern}" is not a known event family.${hint2}`);
|
|
21557
|
+
}
|
|
21558
|
+
continue;
|
|
21559
|
+
}
|
|
21560
|
+
const hint = suggest(pattern, KNOWN_NAMES);
|
|
21561
|
+
(hint ? problems : warnings).push(`"${pattern}" is not an event this SDK version emits.${hint}`);
|
|
21562
|
+
}
|
|
21563
|
+
const present = input !== void 0 && input !== null;
|
|
21564
|
+
if (present && patterns.length === 0 && problems.length === 0) {
|
|
21565
|
+
problems.push('eventSubscriptions is empty, so onEvent will never fire. Pass e.g. ["recording.*", "activity.*"] or ["*"].');
|
|
21566
|
+
}
|
|
21567
|
+
return { patterns, key, problems, warnings };
|
|
21568
|
+
};
|
|
21569
|
+
const reported = /* @__PURE__ */ new Set();
|
|
21570
|
+
const VALID_VALUES = `Valid values are "*", a family wildcard (${SDK_EVENT_FAMILIES.map((f2) => `"${f2}.*"`).join(", ")}), or an exact name (${KNOWN_SDK_EVENT_NAMES.join(", ")}).`;
|
|
21571
|
+
const reportOnce = (level, signature, message) => {
|
|
21572
|
+
if (reported.has(signature))
|
|
21573
|
+
return;
|
|
21574
|
+
reported.add(signature);
|
|
21575
|
+
if (level === "error")
|
|
21576
|
+
logger.configError(message);
|
|
21577
|
+
else
|
|
21578
|
+
logger.warn(message);
|
|
21579
|
+
};
|
|
21580
|
+
const reportSubscriptionProblems = ({ key, problems, warnings }) => {
|
|
21581
|
+
if (problems.length > 0) {
|
|
21582
|
+
reportOnce("error", `error:${key}:${problems.join("|")}`, `[Sofia SDK] eventSubscriptions: ${problems.join(" ")} ${VALID_VALUES}`);
|
|
21583
|
+
}
|
|
21584
|
+
if (warnings.length > 0) {
|
|
21585
|
+
reportOnce("warn", `warn:${key}:${warnings.join("|")}`, `[Sofia SDK] eventSubscriptions: ${warnings.join(" ")} ${VALID_VALUES}`);
|
|
21586
|
+
}
|
|
21587
|
+
};
|
|
21588
|
+
const reportHandlerWithoutSubscriptions = () => {
|
|
21589
|
+
reportOnce("error", "onEvent:no-subscriptions", "[Sofia SDK] onEvent: onEvent was provided without eventSubscriptions, so no events will be delivered. " + VALID_VALUES);
|
|
21590
|
+
};
|
|
21591
|
+
const compileSubscription = (input) => {
|
|
21592
|
+
const normalized = normalizeSubscriptions(input);
|
|
21593
|
+
reportSubscriptionProblems(normalized);
|
|
21594
|
+
const { patterns } = normalized;
|
|
21595
|
+
if (patterns.length === 0)
|
|
21397
21596
|
return () => false;
|
|
21398
21597
|
if (patterns.includes("*"))
|
|
21399
21598
|
return () => true;
|
|
@@ -21414,7 +21613,7 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
21414
21613
|
return dot2 > 0 && families.has(name2.slice(0, dot2));
|
|
21415
21614
|
};
|
|
21416
21615
|
};
|
|
21417
|
-
const subscriptionKey = (
|
|
21616
|
+
const subscriptionKey = (input) => scanSubscriptions(input).key;
|
|
21418
21617
|
const QUEUE_CAP = 200;
|
|
21419
21618
|
let handler = null;
|
|
21420
21619
|
let matches = () => false;
|
|
@@ -31409,23 +31608,25 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
31409
31608
|
selectedRows,
|
|
31410
31609
|
filledScalarGaps
|
|
31411
31610
|
}), [entries, selectedKeys, selectedRows, filledScalarGaps]);
|
|
31412
|
-
const
|
|
31611
|
+
const blockingGaps = React.useMemo(() => {
|
|
31413
31612
|
var _a2;
|
|
31414
|
-
|
|
31613
|
+
const out = [];
|
|
31415
31614
|
for (const g2 of scalarGaps) {
|
|
31416
31615
|
if (!g2.mandatory)
|
|
31417
31616
|
continue;
|
|
31418
31617
|
const filled = filledScalarGaps.get(g2.key);
|
|
31419
|
-
if (isEmptyValue(filled))
|
|
31420
|
-
|
|
31618
|
+
if (isEmptyValue(filled)) {
|
|
31619
|
+
out.push({ scope: "field", key: g2.key, label: g2.descriptor.label });
|
|
31620
|
+
}
|
|
31421
31621
|
}
|
|
31422
31622
|
for (const e of entries) {
|
|
31423
31623
|
if (!selectedKeys.has(e.key))
|
|
31424
31624
|
continue;
|
|
31425
31625
|
if (e.descriptor.kind !== "array-of-objects" && e.descriptor.mandatory) {
|
|
31426
31626
|
const v2 = edits.has(e.key) ? edits.get(e.key) : e.value;
|
|
31427
|
-
if (isEmptyValue(v2))
|
|
31428
|
-
|
|
31627
|
+
if (isEmptyValue(v2)) {
|
|
31628
|
+
out.push({ scope: "field", key: e.key, label: e.descriptor.label });
|
|
31629
|
+
}
|
|
31429
31630
|
}
|
|
31430
31631
|
if (e.descriptor.kind !== "array-of-objects")
|
|
31431
31632
|
continue;
|
|
@@ -31435,17 +31636,33 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
31435
31636
|
return;
|
|
31436
31637
|
const row2 = mergeRowEdits(e.key, idx, rawRow, edits);
|
|
31437
31638
|
if (e.descriptor.discriminator && !pickBranch(e.descriptor, row2)) {
|
|
31438
|
-
|
|
31639
|
+
out.push({
|
|
31640
|
+
scope: "row",
|
|
31641
|
+
key: e.key,
|
|
31642
|
+
groupLabel: e.descriptor.label,
|
|
31643
|
+
rowIndex: idx,
|
|
31644
|
+
label: null,
|
|
31645
|
+
fieldKey: e.descriptor.discriminator.propertyName
|
|
31646
|
+
});
|
|
31439
31647
|
return;
|
|
31440
31648
|
}
|
|
31441
|
-
const
|
|
31442
|
-
|
|
31443
|
-
|
|
31444
|
-
|
|
31649
|
+
for (const f2 of effectiveItemFields(e.descriptor, row2)) {
|
|
31650
|
+
if (!f2.mandatory)
|
|
31651
|
+
continue;
|
|
31652
|
+
if (isEmptyValue(row2[f2.key])) {
|
|
31653
|
+
out.push({
|
|
31654
|
+
scope: "row",
|
|
31655
|
+
key: e.key,
|
|
31656
|
+
groupLabel: e.descriptor.label,
|
|
31657
|
+
rowIndex: idx,
|
|
31658
|
+
label: f2.label,
|
|
31659
|
+
fieldKey: f2.key
|
|
31660
|
+
});
|
|
31661
|
+
}
|
|
31445
31662
|
}
|
|
31446
31663
|
});
|
|
31447
31664
|
}
|
|
31448
|
-
return
|
|
31665
|
+
return out;
|
|
31449
31666
|
}, [
|
|
31450
31667
|
entries,
|
|
31451
31668
|
scalarGaps,
|
|
@@ -31454,9 +31671,11 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
31454
31671
|
edits,
|
|
31455
31672
|
filledScalarGaps
|
|
31456
31673
|
]);
|
|
31674
|
+
const blockingMandatoryCount = blockingGaps.length;
|
|
31457
31675
|
return {
|
|
31458
31676
|
entries,
|
|
31459
31677
|
scalarGaps,
|
|
31678
|
+
blockingGaps,
|
|
31460
31679
|
rowGaps,
|
|
31461
31680
|
selectedKeys,
|
|
31462
31681
|
selectedRows,
|
|
@@ -31841,10 +32060,22 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
31841
32060
|
}) : formatMessage2({
|
|
31842
32061
|
id: "Re-extracting the report… the new fields will replace this preview when ready.",
|
|
31843
32062
|
defaultMessage: "Re-extracting the report… the new fields will replace this preview when ready."
|
|
31844
|
-
}) })] })] }), (state.scalarGaps.length > 0 || state.blockingMandatoryCount > 0) && jsxRuntimeExports.jsx("p", { className: "omniscribe_insertion-preview__sub", children: state.blockingMandatoryCount > 0 ? jsxRuntimeExports.
|
|
32063
|
+
}) })] })] }), (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: [formatMessage2({
|
|
31845
32064
|
id: "{count} mandatory fields must be filled before applying",
|
|
31846
32065
|
defaultMessage: "{count, plural, one {# mandatory field} other {# mandatory fields}} must be filled before applying"
|
|
31847
|
-
}, { count: state.blockingMandatoryCount })
|
|
32066
|
+
}, { count: state.blockingMandatoryCount }), ": ", state.blockingGaps.slice(0, BLOCKING_GAPS_SHOWN).map((g2) => g2.scope === "field" ? g2.label : g2.label === null ? formatMessage2({
|
|
32067
|
+
id: "{group} · row {row}",
|
|
32068
|
+
defaultMessage: "{group} · row {row}"
|
|
32069
|
+
}, { group: g2.groupLabel, row: g2.rowIndex + 1 }) : formatMessage2({
|
|
32070
|
+
id: "{group} · row {row} · {field}",
|
|
32071
|
+
defaultMessage: "{group} · row {row} · {field}"
|
|
32072
|
+
}, {
|
|
32073
|
+
group: g2.groupLabel,
|
|
32074
|
+
row: g2.rowIndex + 1,
|
|
32075
|
+
field: g2.label
|
|
32076
|
+
})).join(", "), state.blockingGaps.length > BLOCKING_GAPS_SHOWN && formatMessage2({ id: " +{count} more", defaultMessage: " +{count} more" }, {
|
|
32077
|
+
count: state.blockingGaps.length - BLOCKING_GAPS_SHOWN
|
|
32078
|
+
})] }) : formatMessage2({
|
|
31848
32079
|
id: "{count} fields need your attention",
|
|
31849
32080
|
defaultMessage: "{count, plural, one {# field needs} other {# fields need}} your attention"
|
|
31850
32081
|
}, { 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: formatMessage2({
|
|
@@ -31887,21 +32118,39 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
31887
32118
|
};
|
|
31888
32119
|
const EntrySection = ({ entry, state, classNames }) => {
|
|
31889
32120
|
const { formatMessage: formatMessage2 } = useIntl();
|
|
31890
|
-
const
|
|
31891
|
-
|
|
31892
|
-
|
|
31893
|
-
|
|
32121
|
+
const blockingRows = reactExports.useMemo(() => state.blockingGaps.filter((g2) => g2.scope === "row" && g2.key === entry.key), [state.blockingGaps, entry.key]);
|
|
32122
|
+
const hasMandatoryRowGap = blockingRows.length > 0;
|
|
32123
|
+
const missingFieldCount = blockingRows.filter((g2) => g2.scope === "row" && g2.label !== null).length;
|
|
32124
|
+
const untypedRowCount = blockingRows.length - missingFieldCount;
|
|
32125
|
+
const groupGapSummary = [
|
|
32126
|
+
missingFieldCount > 0 && formatMessage2({
|
|
32127
|
+
id: "{count} mandatory fields missing in this group",
|
|
32128
|
+
defaultMessage: "{count, plural, one {# mandatory field missing} other {# mandatory fields missing}} in this group"
|
|
32129
|
+
}, { count: missingFieldCount }),
|
|
32130
|
+
untypedRowCount > 0 && formatMessage2({
|
|
32131
|
+
id: "{count} rows need a type selected in this group",
|
|
32132
|
+
defaultMessage: "{count, plural, one {# row needs} other {# rows need}} a type selected in this group"
|
|
32133
|
+
}, { count: untypedRowCount })
|
|
32134
|
+
].filter(Boolean).join(" · ");
|
|
31894
32135
|
const [expanded, setExpanded] = reactExports.useState(hasMandatoryRowGap);
|
|
31895
32136
|
reactExports.useEffect(() => {
|
|
31896
32137
|
if (hasMandatoryRowGap)
|
|
31897
32138
|
setExpanded(true);
|
|
31898
32139
|
}, [hasMandatoryRowGap]);
|
|
32140
|
+
const missingKeysOfRow = (idx) => {
|
|
32141
|
+
var _a2, _b;
|
|
32142
|
+
const keys2 = new Set((_b = (_a2 = state.rowGaps.get(entry.key)) == null ? void 0 : _a2.find((g2) => g2.index === idx)) == null ? void 0 : _b.missingKeys);
|
|
32143
|
+
for (const g2 of blockingRows) {
|
|
32144
|
+
if (g2.scope === "row" && g2.rowIndex === idx)
|
|
32145
|
+
keys2.add(g2.fieldKey);
|
|
32146
|
+
}
|
|
32147
|
+
return [...keys2];
|
|
32148
|
+
};
|
|
31899
32149
|
if (entry.descriptor.kind === "array-of-objects") {
|
|
31900
32150
|
const rows = entry.value;
|
|
31901
|
-
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": formatMessage2({ 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
|
|
31902
|
-
|
|
31903
|
-
|
|
31904
|
-
})] });
|
|
32151
|
+
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": formatMessage2({ 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
|
|
32152
|
+
// reliably, so a screen reader announced only "star 1".
|
|
32153
|
+
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((v2) => !v2), children: expanded ? formatMessage2({ id: "Collapse", defaultMessage: "Collapse" }) : formatMessage2({ id: "Edit", defaultMessage: "Edit" }) })] }), expanded && rows.map((row2, idx) => jsxRuntimeExports.jsx(RowItem, { entryKey: entry.key, rowIndex: idx, row: row2, descriptor: entry.descriptor, state, missingKeys: missingKeysOfRow(idx), classNames }, idx))] });
|
|
31905
32154
|
}
|
|
31906
32155
|
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: (v2) => state.setScalarEdit(entry.key, v2) })] })] }) });
|
|
31907
32156
|
};
|
|
@@ -31942,6 +32191,7 @@ var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")])
|
|
|
31942
32191
|
})] })] }), jsxRuntimeExports.jsx(FieldEditControl, { descriptor: fd, value, onChange: (v2) => state.setRowFieldEdit(entryKey, rowIndex, fd.key, v2) })] }, fd.key);
|
|
31943
32192
|
}) })] })] });
|
|
31944
32193
|
};
|
|
32194
|
+
const BLOCKING_GAPS_SHOWN = 3;
|
|
31945
32195
|
const ScalarGapRow = ({ descriptor, value, onChange, classNames, mandatory }) => {
|
|
31946
32196
|
const { formatMessage: formatMessage2 } = useIntl();
|
|
31947
32197
|
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": formatMessage2({
|
|
@@ -131298,8 +131548,8 @@ Here are the output tags:
|
|
|
131298
131548
|
};
|
|
131299
131549
|
}
|
|
131300
131550
|
if (allowJson) {
|
|
131301
|
-
const
|
|
131302
|
-
if (
|
|
131551
|
+
const looksLikeJson2 = /^\s*[\{\[]/.test(processedInput);
|
|
131552
|
+
if (looksLikeJson2) {
|
|
131303
131553
|
const jsonValidation = this.validateJson(processedInput);
|
|
131304
131554
|
if (jsonValidation.isValid) {
|
|
131305
131555
|
return jsonValidation;
|
|
@@ -135870,6 +136120,7 @@ Here are the output tags:
|
|
|
135870
136120
|
}
|
|
135871
136121
|
}, []);
|
|
135872
136122
|
};
|
|
136123
|
+
const MISSING_SUBSCRIPTIONS_GRACE_MS = 1e3;
|
|
135873
136124
|
const BrowserCapabilityProbe = () => {
|
|
135874
136125
|
useBrowserCapabilityCheck();
|
|
135875
136126
|
return null;
|
|
@@ -135932,11 +136183,13 @@ Here are the output tags:
|
|
|
135932
136183
|
return (_a3 = onEventRef.current) == null ? void 0 : _a3.call(onEventRef, event);
|
|
135933
136184
|
});
|
|
135934
136185
|
}, [hasEventHandler]);
|
|
136186
|
+
const hasSubscriptionsProp = eventSubscriptions !== void 0 && eventSubscriptions !== null;
|
|
135935
136187
|
reactExports.useEffect(() => {
|
|
135936
|
-
if (hasEventHandler
|
|
135937
|
-
|
|
135938
|
-
|
|
135939
|
-
|
|
136188
|
+
if (!hasEventHandler || hasSubscriptionsProp)
|
|
136189
|
+
return;
|
|
136190
|
+
const timer = setTimeout(reportHandlerWithoutSubscriptions, MISSING_SUBSCRIPTIONS_GRACE_MS);
|
|
136191
|
+
return () => clearTimeout(timer);
|
|
136192
|
+
}, [hasEventHandler, hasSubscriptionsProp]);
|
|
135940
136193
|
reactExports.useEffect(() => {
|
|
135941
136194
|
if (apikey && apikey.trim() !== "") {
|
|
135942
136195
|
setEncryptionSeed(apikey);
|
|
@@ -136144,6 +136397,8 @@ Here are the output tags:
|
|
|
136144
136397
|
};
|
|
136145
136398
|
const toAttributeName = (prop) => prop.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
136146
136399
|
const JSON_ATTRS = new Set(Object.entries(r2wcProps).filter(([, type]) => type === "json").map(([prop]) => toAttributeName(prop)));
|
|
136400
|
+
const EVENT_SUBSCRIPTIONS_ATTR = toAttributeName("eventSubscriptions");
|
|
136401
|
+
const looksLikeJson = (value) => /^\s*[[{"]/.test(value);
|
|
136147
136402
|
const SofiaSDK = s$1(Omniscribe, {
|
|
136148
136403
|
props: r2wcProps,
|
|
136149
136404
|
shadow: "open"
|
|
@@ -136174,7 +136429,18 @@ Here are the output tags:
|
|
|
136174
136429
|
}
|
|
136175
136430
|
});
|
|
136176
136431
|
}
|
|
136177
|
-
const SENSITIVE_ATTRS = [
|
|
136432
|
+
const SENSITIVE_ATTRS = [
|
|
136433
|
+
"apikey",
|
|
136434
|
+
"userid",
|
|
136435
|
+
"patientid",
|
|
136436
|
+
"patientdata",
|
|
136437
|
+
"baseurl",
|
|
136438
|
+
"wssurl",
|
|
136439
|
+
"toolsargs",
|
|
136440
|
+
"templateid",
|
|
136441
|
+
"template",
|
|
136442
|
+
"template-extras"
|
|
136443
|
+
];
|
|
136178
136444
|
let _sanitizing = false;
|
|
136179
136445
|
async function injectStyles(shadowRoot) {
|
|
136180
136446
|
if (!shadowRoot)
|
|
@@ -136197,8 +136463,12 @@ Here are the output tags:
|
|
|
136197
136463
|
try {
|
|
136198
136464
|
JSON.parse(newValue);
|
|
136199
136465
|
} catch (e) {
|
|
136200
|
-
|
|
136201
|
-
|
|
136466
|
+
if (name2 === EVENT_SUBSCRIPTIONS_ATTR && !looksLikeJson(newValue)) {
|
|
136467
|
+
newValue = JSON.stringify(newValue);
|
|
136468
|
+
} else {
|
|
136469
|
+
logger.configError(`Ignoring malformed JSON in the "${name2}" property.`);
|
|
136470
|
+
return;
|
|
136471
|
+
}
|
|
136202
136472
|
}
|
|
136203
136473
|
}
|
|
136204
136474
|
if (originalAttributeChangedCallback) {
|
|
@@ -137909,7 +138179,7 @@ Here are the output tags:
|
|
|
137909
138179
|
__proto__: null,
|
|
137910
138180
|
default: zig
|
|
137911
138181
|
}, [zigExports]);
|
|
137912
|
-
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";
|
|
138182
|
+
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";
|
|
137913
138183
|
const injectedCss$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
137914
138184
|
__proto__: null,
|
|
137915
138185
|
default: injectedCss
|