diff --git a/.gitignore b/.gitignore
index 65a6a549..e7271330 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,7 @@ node_modules/
.env
eng.traineddata
dist/
-.DS_Store
\ No newline at end of file
+.DS_Store
+roots.sst
+tmp_silence.wav
+test-azure-speech.js
\ No newline at end of file
diff --git a/chat.html b/chat.html
index d986477e..afdef1b6 100644
--- a/chat.html
+++ b/chat.html
@@ -45,7 +45,7 @@
-webkit-app-region: drag;
background: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(10px);
- cursor: move;
+ cursor: default;
flex-shrink: 0;
}
.header-title {
@@ -70,7 +70,7 @@
color: rgba(255, 255, 255, 0.9);
border-radius: 6px;
padding: 6px 10px;
- cursor: pointer;
+ cursor: default;
transition: all 0.2s ease;
}
.icon-button:hover {
@@ -110,7 +110,7 @@
/* Removed max-height restriction */
}
.message {
- margin-bottom: 16px;
+ margin-bottom: 6px;
padding: 12px 16px;
background: rgba(255, 255, 255, 0.08);
border-radius: 8px;
@@ -288,7 +288,7 @@
padding: 4px 8px;
font-size: 11px;
border-radius: 4px;
- cursor: pointer;
+ cursor: default;
-webkit-app-region: no-drag;
transition: background 0.2s ease, border-color 0.2s ease, transform 0.12s ease;
}
@@ -450,7 +450,7 @@
border-radius: 6px;
padding: 6px 10px;
color: rgba(255, 255, 255, 0.9);
- cursor: pointer;
+ cursor: default;
transition: all 0.2s;
-webkit-app-region: no-drag;
}
@@ -479,7 +479,7 @@
border-radius: 6px;
padding: 6px 10px;
color: rgba(255, 255, 255, 0.9);
- cursor: pointer;
+ cursor: default;
transition: all 0.2s;
-webkit-app-region: no-drag;
}
@@ -527,15 +527,10 @@
}
.non-interactive .input-container {
pointer-events: none;
- opacity: 0.5;
- }
- .non-interactive .mic-button {
- pointer-events: none;
- opacity: 0.5;
+ opacity: 0;
}
- .non-interactive .send-button {
- pointer-events: none;
- opacity: 0.5;
+ .non-interactive .icon-button {
+ display: none;
}
/* Minimalist Listening Animation */
@@ -665,6 +660,155 @@
transform: translateY(0);
}
}
+
+ /* Custom dropdown to avoid native OS select (which leaks through setContentProtection) */
+ .custom-dropdown {
+ position: relative;
+ display: inline-block;
+ margin-right: 8px;
+ -webkit-app-region: no-drag;
+ }
+ .custom-dropdown-btn {
+ background: rgba(255, 255, 255, 0.1);
+ color: rgba(255, 255, 255, 0.8);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 4px;
+ padding: 4px 8px;
+ font-size: 12px;
+ outline: none;
+ cursor: default;
+ font-family: inherit;
+ transition: all 0.2s ease;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ user-select: none;
+ }
+ .custom-dropdown-btn:hover {
+ background: rgba(255, 255, 255, 0.15);
+ }
+ .custom-dropdown-btn .arrow {
+ font-size: 8px;
+ transition: transform 0.2s ease;
+ }
+ .custom-dropdown.open .custom-dropdown-btn .arrow {
+ transform: rotate(180deg);
+ }
+ .custom-dropdown-menu {
+ display: none;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ margin-top: 2px;
+ background: rgba(30, 30, 30, 0.95);
+ backdrop-filter: blur(15px);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+ border-radius: 6px;
+ min-width: 130px;
+ z-index: 9999;
+ overflow: hidden;
+ box-shadow: 0 4px 16px rgba(0,0,0,0.4);
+ }
+ .custom-dropdown.open .custom-dropdown-menu {
+ display: block;
+ animation: dropIn 0.15s ease-out;
+ }
+ @keyframes dropIn {
+ from { opacity: 0; transform: translateY(-4px); }
+ to { opacity: 1; transform: translateY(0); }
+ }
+ .custom-dropdown-item {
+ padding: 6px 12px;
+ font-size: 12px;
+ color: rgba(255,255,255,0.8);
+ cursor: default;
+ transition: background 0.15s ease;
+ }
+ .custom-dropdown-item:hover {
+ background: rgba(255,255,255,0.1);
+ }
+ .custom-dropdown-item.selected {
+ background: rgba(33, 150, 243, 0.3);
+ color: #fff;
+ }
+ .non-interactive .custom-dropdown {
+ display: none;
+ }
+
+ /* Shortcut Help Overlay */
+ .shortcut-overlay {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.85);
+ backdrop-filter: blur(20px);
+ z-index: 10000;
+ justify-content: center;
+ align-items: center;
+ -webkit-app-region: no-drag;
+ }
+ .shortcut-overlay.visible {
+ display: flex;
+ animation: fadeIn 0.2s ease-out;
+ }
+ @keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+ }
+ .shortcut-card {
+ background: rgba(30, 30, 30, 0.95);
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ border-radius: 12px;
+ padding: 24px 28px;
+ max-width: 380px;
+ width: 90%;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
+ }
+ .shortcut-card h2 {
+ margin: 0 0 16px 0;
+ font-size: 15px;
+ font-weight: 600;
+ color: rgba(255, 255, 255, 0.95);
+ text-align: center;
+ }
+ .shortcut-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 6px 0;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
+ }
+ .shortcut-row:last-child {
+ border-bottom: none;
+ }
+ .shortcut-label {
+ font-size: 12px;
+ color: rgba(255, 255, 255, 0.7);
+ }
+ .shortcut-key {
+ font-size: 11px;
+ color: rgba(255, 255, 255, 0.9);
+ background: rgba(255, 255, 255, 0.1);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 4px;
+ padding: 2px 8px;
+ font-family: monospace;
+ }
+ .shortcut-mode-indicator {
+ text-align: center;
+ margin-top: 12px;
+ padding-top: 12px;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ font-size: 11px;
+ color: rgba(255, 255, 255, 0.5);
+ }
+ .shortcut-mode-indicator span {
+ color: #64b5f6;
+ font-weight: 600;
+ }
@@ -676,6 +820,30 @@