Mark-Lasfar commited on
Commit ·
625c807
1
Parent(s): 89ce331
Fix: Multilingual speech synthesis with advanced language detection and playback controls
Browse files- static/css/chat/bubble.css +67 -14
static/css/chat/bubble.css
CHANGED
|
@@ -114,42 +114,95 @@ html.light .message-actions .action-btn:hover {
|
|
| 114 |
color: #2563eb;
|
| 115 |
}
|
| 116 |
|
| 117 |
-
/* Animation for speaking button */
|
| 118 |
-
@keyframes pulse {
|
| 119 |
-
0%, 100% { transform: scale(1); opacity: 1; }
|
| 120 |
-
50% { transform: scale(1.1); opacity: 0.7; }
|
| 121 |
-
}
|
| 122 |
|
| 123 |
-
/*
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
.speech-controls {
|
| 125 |
display: flex;
|
| 126 |
gap: 6px;
|
| 127 |
margin-top: 8px;
|
| 128 |
-
padding-top:
|
| 129 |
-
border-top: 1px solid rgba(255, 255, 255, 0.
|
|
|
|
| 130 |
}
|
| 131 |
|
|
|
|
| 132 |
.speech-controls .action-btn {
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
transition: all 0.2s ease;
|
|
|
|
|
|
|
|
|
|
| 137 |
}
|
| 138 |
|
| 139 |
.speech-controls .action-btn:hover {
|
| 140 |
-
background: rgba(59, 130, 246, 0.
|
| 141 |
transform: scale(1.05);
|
| 142 |
}
|
| 143 |
|
| 144 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
html.light .speech-controls {
|
| 146 |
border-top-color: rgba(0, 0, 0, 0.1);
|
| 147 |
}
|
| 148 |
|
| 149 |
html.light .speech-controls .action-btn {
|
| 150 |
background: rgba(59, 130, 246, 0.1);
|
|
|
|
| 151 |
}
|
| 152 |
|
| 153 |
html.light .speech-controls .action-btn:hover {
|
| 154 |
-
background: rgba(59, 130, 246, 0.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
}
|
|
|
|
| 114 |
color: #2563eb;
|
| 115 |
}
|
| 116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
+
/* ============================================================
|
| 119 |
+
SPEECH CONTROLS
|
| 120 |
+
============================================================ */
|
| 121 |
+
|
| 122 |
+
/* Container لأزرار التحكم */
|
| 123 |
.speech-controls {
|
| 124 |
display: flex;
|
| 125 |
gap: 6px;
|
| 126 |
margin-top: 8px;
|
| 127 |
+
padding-top: 6px;
|
| 128 |
+
border-top: 1px solid rgba(255, 255, 255, 0.15);
|
| 129 |
+
flex-wrap: wrap;
|
| 130 |
}
|
| 131 |
|
| 132 |
+
/* تنسيق الأزرار داخل الـ speech-controls */
|
| 133 |
.speech-controls .action-btn {
|
| 134 |
+
background: rgba(59, 130, 246, 0.15);
|
| 135 |
+
border-radius: 8px;
|
| 136 |
+
padding: 4px 8px;
|
| 137 |
transition: all 0.2s ease;
|
| 138 |
+
display: inline-flex;
|
| 139 |
+
align-items: center;
|
| 140 |
+
justify-content: center;
|
| 141 |
}
|
| 142 |
|
| 143 |
.speech-controls .action-btn:hover {
|
| 144 |
+
background: rgba(59, 130, 246, 0.35);
|
| 145 |
transform: scale(1.05);
|
| 146 |
}
|
| 147 |
|
| 148 |
+
.speech-controls .action-btn:active {
|
| 149 |
+
transform: scale(0.95);
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
/* زر الصوت النابض أثناء التشغيل */
|
| 153 |
+
@keyframes speakingPulse {
|
| 154 |
+
0%, 100% {
|
| 155 |
+
transform: scale(1);
|
| 156 |
+
opacity: 1;
|
| 157 |
+
}
|
| 158 |
+
50% {
|
| 159 |
+
transform: scale(1.15);
|
| 160 |
+
opacity: 0.7;
|
| 161 |
+
}
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
.action-btn.speaking {
|
| 165 |
+
animation: speakingPulse 0.6s ease-in-out infinite;
|
| 166 |
+
color: #10b981 !important;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
/* ============================================================
|
| 170 |
+
LIGHT THEME SUPPORT FOR SPEECH CONTROLS
|
| 171 |
+
============================================================ */
|
| 172 |
+
|
| 173 |
html.light .speech-controls {
|
| 174 |
border-top-color: rgba(0, 0, 0, 0.1);
|
| 175 |
}
|
| 176 |
|
| 177 |
html.light .speech-controls .action-btn {
|
| 178 |
background: rgba(59, 130, 246, 0.1);
|
| 179 |
+
color: #2563eb;
|
| 180 |
}
|
| 181 |
|
| 182 |
html.light .speech-controls .action-btn:hover {
|
| 183 |
+
background: rgba(59, 130, 246, 0.25);
|
| 184 |
+
color: #1d4ed8;
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
html.light .action-btn.speaking {
|
| 188 |
+
color: #059669 !important;
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
/* ============================================================
|
| 192 |
+
RESPONSIVE FOR MOBILE
|
| 193 |
+
============================================================ */
|
| 194 |
+
|
| 195 |
+
@media (max-width: 640px) {
|
| 196 |
+
.speech-controls {
|
| 197 |
+
gap: 4px;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
.speech-controls .action-btn {
|
| 201 |
+
padding: 3px 6px;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
.speech-controls .action-btn svg {
|
| 205 |
+
width: 12px;
|
| 206 |
+
height: 12px;
|
| 207 |
+
}
|
| 208 |
}
|