@pheem49/mint 1.9.0 → 1.10.0

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.
Files changed (90) hide show
  1. package/Cargo.lock +55 -3
  2. package/Cargo.toml +2 -1
  3. package/Release_Note.md +285 -140
  4. package/bin/mint +0 -0
  5. package/crates/mint-cli/Cargo.toml +1 -0
  6. package/crates/mint-cli/src/actions.rs +233 -0
  7. package/crates/mint-cli/src/agent.rs +287 -43
  8. package/crates/mint-cli/src/gmail.rs +22 -2
  9. package/crates/mint-cli/src/interactive.rs +2888 -0
  10. package/crates/mint-cli/src/main.rs +336 -2854
  11. package/crates/mint-cli/src/markdown.rs +294 -0
  12. package/crates/mint-cli/src/onboard.rs +44 -1
  13. package/crates/mint-cli/src/updater.rs +48 -6
  14. package/crates/mint-core/Cargo.toml +1 -0
  15. package/crates/mint-core/src/agent_loop.rs +1 -0
  16. package/crates/mint-core/src/api_server.rs +376 -13
  17. package/crates/mint-core/src/browser.rs +629 -101
  18. package/crates/mint-core/src/channels.rs +105 -6
  19. package/crates/mint-core/src/chat.rs +52 -4
  20. package/crates/mint-core/src/code_tools.rs +29 -11
  21. package/crates/mint-core/src/config.rs +118 -0
  22. package/crates/mint-core/src/image_gen.rs +294 -33
  23. package/crates/mint-core/src/lib.rs +5 -2
  24. package/crates/mint-core/src/mcp.rs +119 -6
  25. package/crates/mint-core/src/orchestration.rs +133 -11
  26. package/crates/mint-core/src/pictures.rs +64 -1
  27. package/crates/mint-core/src/skills.rs +82 -6
  28. package/crates/mint-core/src/video_gen.rs +235 -0
  29. package/package.json +8 -2
  30. package/shared-modules/luajit/luajit.json +2 -2
  31. package/skills-lock.json +41 -0
  32. package/src/renderer/index-web.html +1 -1
  33. package/src/renderer/index.html +1 -1
  34. package/src/renderer/shared/constants/slashCommands.ts +27 -0
  35. package/src/renderer/shared/platform.ts +3 -0
  36. package/src/renderer/shared/types.ts +4 -0
  37. package/src/renderer/shared/utils/approval.tsx +86 -7
  38. package/src/renderer/shared/utils/markdown.tsx +217 -88
  39. package/src/renderer/shared/utils/slashCommandProcessor.ts +239 -0
  40. package/src/renderer/src/components/ChatPanel.tsx +461 -64
  41. package/src/renderer/src/components/DashboardSidebar.tsx +11 -2
  42. package/src/renderer/src/components/ImageStudioPanel.tsx +87 -4
  43. package/src/renderer/src/components/MintDashboard.tsx +150 -5
  44. package/src/renderer/src/components/PicturesLibrary.tsx +156 -15
  45. package/src/renderer/src/components/Settings/AutomationTab.tsx +316 -18
  46. package/src/renderer/src/components/Settings/GeneralTab.tsx +762 -634
  47. package/src/renderer/src/components/Settings/PluginsTab.tsx +304 -70
  48. package/src/renderer/src/components/Settings/ThemeTab.tsx +6 -1
  49. package/src/renderer/src/components/SettingsWindow.tsx +38 -2
  50. package/src/renderer/src/components/VeoStudioPanel.tsx +549 -0
  51. package/src/renderer/src/css/image-studio.css +106 -0
  52. package/src/renderer/src/css/settings.css +158 -0
  53. package/src/renderer/src/css/styles.css +352 -1
  54. package/src/renderer/src/css/veo-studio.css +626 -0
  55. package/src/renderer/src/index.css +1 -0
  56. package/src/renderer/src/tauri.ts +144 -17
  57. package/src/renderer/src-web/components/ChatPanel.tsx +360 -88
  58. package/src/renderer/src-web/components/DashboardSidebar.tsx +16 -1
  59. package/src/renderer/src-web/components/ImageStudioPanel.tsx +87 -4
  60. package/src/renderer/src-web/components/MintDashboard.tsx +137 -4
  61. package/src/renderer/src-web/components/PicturesLibrary.tsx +155 -15
  62. package/src/renderer/src-web/components/Settings/AutomationTab.tsx +316 -18
  63. package/src/renderer/src-web/components/Settings/GeneralTab.tsx +762 -629
  64. package/src/renderer/src-web/components/Settings/PluginsTab.tsx +304 -70
  65. package/src/renderer/src-web/components/Settings/ThemeTab.tsx +6 -1
  66. package/src/renderer/src-web/components/SettingsWindow.tsx +35 -2
  67. package/src/renderer/src-web/components/VeoStudioPanel.tsx +549 -0
  68. package/src/renderer/src-web/css/image-studio.css +106 -0
  69. package/src/renderer/src-web/css/settings.css +158 -0
  70. package/src/renderer/src-web/css/styles.css +353 -1
  71. package/src/renderer/src-web/css/veo-studio.css +650 -0
  72. package/src/renderer/src-web/index.css +1 -0
  73. package/src/renderer/src-web/tauri.ts +135 -16
  74. package/src-tauri/src/lib.rs +114 -8
  75. package/src-tauri/src/webhooks.rs +45 -31
  76. package/src-tauri/src/workflows.rs +1 -0
  77. package/src-tauri/tauri.conf.json +1 -1
  78. package/temp_gridgeist/AGENTS.md +8 -0
  79. package/temp_gridgeist/CHANGELOG.md +130 -0
  80. package/temp_gridgeist/LICENSE +21 -0
  81. package/temp_gridgeist/README.md +323 -0
  82. package/temp_gridgeist/README.th.md +325 -0
  83. package/temp_gridgeist/skills/gridgeist/SKILL.md +88 -0
  84. package/temp_gridgeist/skills/gridgeist/agents/openai.yaml +9 -0
  85. package/temp_gridgeist/skills/gridgeist/assets/gridgeist-small.svg +10 -0
  86. package/temp_gridgeist/skills/gridgeist/assets/gridgeist.png +0 -0
  87. package/temp_gridgeist/skills/gridgeist/assets/gridgeist.svg +18 -0
  88. package/temp_gridgeist/skills/gridgeist/references/design-language.md +88 -0
  89. package/temp_gridgeist/skills/gridgeist/references/review-checklist.md +128 -0
  90. package/temp_gridgeist/skills/gridgeist/references/system-contract.md +109 -0
@@ -1132,5 +1132,163 @@ kbd {
1132
1132
  grid-template-columns: 180px 1fr;
1133
1133
  }
1134
1134
 
1135
+ /* ─── Native Channel Bridges Cards Styling ────────────────── */
1136
+
1137
+ .bridge-cards-container {
1138
+ display: flex;
1139
+ flex-direction: column;
1140
+ gap: 14px;
1141
+ margin-top: 10px;
1142
+ }
1143
+
1144
+ .bridge-card {
1145
+ background: var(--surface-bg, rgba(255, 255, 255, 0.025));
1146
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
1147
+ border-radius: 12px;
1148
+ padding: 16px 18px;
1149
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1150
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1151
+ }
1152
+
1153
+ .bridge-card:hover {
1154
+ border-color: var(--border-strong, rgba(255, 255, 255, 0.18));
1155
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
1156
+ }
1157
+
1158
+ .bridge-card.active {
1159
+ background: var(--surface-strong, rgba(16, 185, 129, 0.04));
1160
+ border-color: rgba(16, 185, 129, 0.3);
1161
+ }
1162
+
1163
+ .bridge-card-header {
1164
+ display: flex;
1165
+ align-items: center;
1166
+ justify-content: space-between;
1167
+ gap: 12px;
1168
+ }
1169
+
1170
+ .bridge-info {
1171
+ display: flex;
1172
+ align-items: center;
1173
+ gap: 12px;
1174
+ }
1175
+
1176
+ .bridge-icon-badge {
1177
+ width: 38px;
1178
+ height: 38px;
1179
+ border-radius: 10px;
1180
+ display: flex;
1181
+ align-items: center;
1182
+ justify-content: center;
1183
+ font-size: 18px;
1184
+ color: #fff;
1185
+ box-shadow: 0 4px 10px rgba(0,0,0,0.25);
1186
+ flex-shrink: 0;
1187
+ }
1188
+
1189
+ .bridge-icon-telegram {
1190
+ background: linear-gradient(135deg, #0088cc 0%, #24a1de 100%);
1191
+ }
1192
+
1193
+ .bridge-icon-discord {
1194
+ background: linear-gradient(135deg, #5865F2 0%, #4752C4 100%);
1195
+ }
1196
+
1197
+ .bridge-icon-slack {
1198
+ background: linear-gradient(135deg, #4A154B 0%, #611f69 100%);
1199
+ }
1200
+
1201
+ .bridge-icon-line {
1202
+ background: linear-gradient(135deg, #00B900 0%, #00c300 100%);
1203
+ }
1204
+
1205
+ .bridge-icon-whatsapp {
1206
+ background: linear-gradient(135deg, #25D366 0%, #128C7E 100%);
1207
+ }
1208
+
1209
+ .bridge-title-group {
1210
+ display: flex;
1211
+ flex-direction: column;
1212
+ gap: 3px;
1213
+ }
1214
+
1215
+ .bridge-title {
1216
+ font-size: 14px;
1217
+ font-weight: 600;
1218
+ color: var(--text-main, #f8fafc);
1219
+ display: flex;
1220
+ align-items: center;
1221
+ gap: 8px;
1222
+ }
1223
+
1224
+ .bridge-status-pill {
1225
+ font-size: 10px;
1226
+ font-weight: 600;
1227
+ padding: 2px 8px;
1228
+ border-radius: 12px;
1229
+ text-transform: uppercase;
1230
+ letter-spacing: 0.5px;
1231
+ }
1232
+
1233
+ .bridge-status-pill.active {
1234
+ background: rgba(16, 185, 129, 0.15);
1235
+ color: #34d399;
1236
+ border: 1px solid rgba(16, 185, 129, 0.3);
1237
+ }
1238
+
1239
+ .bridge-status-pill.inactive {
1240
+ background: rgba(255, 255, 255, 0.05);
1241
+ color: var(--text-muted, #94a3b8);
1242
+ border: 1px solid rgba(255, 255, 255, 0.08);
1243
+ }
1244
+
1245
+ .bridge-subtitle {
1246
+ font-size: 12px;
1247
+ color: var(--text-muted, #94a3b8);
1248
+ }
1249
+
1250
+ .bridge-inputs {
1251
+ display: flex;
1252
+ flex-direction: column;
1253
+ gap: 10px;
1254
+ margin-top: 14px;
1255
+ padding-top: 12px;
1256
+ border-top: 1px dashed var(--border, rgba(255, 255, 255, 0.08));
1257
+ }
1258
+
1259
+ .bridge-input-row {
1260
+ display: flex;
1261
+ gap: 10px;
1262
+ }
1263
+
1264
+ .bridge-input {
1265
+ width: 100%;
1266
+ padding: 9px 12px;
1267
+ background: var(--input-bg, rgba(0, 0, 0, 0.35));
1268
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.1));
1269
+ border-radius: 8px;
1270
+ color: var(--text-main, #f8fafc);
1271
+ font-size: 13px;
1272
+ transition: all 0.2s ease;
1273
+ }
1274
+
1275
+ .bridge-input:focus {
1276
+ outline: none;
1277
+ border-color: var(--accent, #10b981);
1278
+ background: var(--input-focus-bg, rgba(0, 0, 0, 0.5));
1279
+ box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.2);
1280
+ }
1281
+
1282
+ .bridge-input[type="number"] {
1283
+ -moz-appearance: textfield;
1284
+ appearance: textfield;
1285
+ }
1286
+
1287
+ .bridge-input[type="number"]::-webkit-outer-spin-button,
1288
+ .bridge-input[type="number"]::-webkit-inner-spin-button {
1289
+ -webkit-appearance: none;
1290
+ margin: 0;
1291
+ }
1292
+
1135
1293
 
1136
1294
 
@@ -1113,6 +1113,131 @@ h1 {
1113
1113
  padding: 0 !important;
1114
1114
  }
1115
1115
 
1116
+ /* Thai Typography & Formatting Enhancement for Chat */
1117
+ .chat-formatted-body {
1118
+ display: flex;
1119
+ flex-direction: column;
1120
+ gap: 8px;
1121
+ width: 100%;
1122
+ font-family: 'Prompt', 'Sarabun', 'Noto Sans Thai', 'Kanit', Inter, ui-sans-serif, system-ui, -apple-system, sans-serif;
1123
+ font-size: 0.94rem;
1124
+ line-height: 1.7;
1125
+ letter-spacing: 0.01em;
1126
+ word-break: break-word;
1127
+ overflow-wrap: anywhere;
1128
+ line-break: relaxed;
1129
+ }
1130
+
1131
+ .chat-paragraph {
1132
+ margin: 0;
1133
+ margin-bottom: 6px;
1134
+ line-height: 1.7;
1135
+ white-space: pre-wrap;
1136
+ word-break: break-word;
1137
+ }
1138
+
1139
+ .chat-paragraph:last-child {
1140
+ margin-bottom: 0;
1141
+ }
1142
+
1143
+ .chat-heading {
1144
+ font-weight: 700;
1145
+ color: var(--text-main);
1146
+ margin-top: 14px;
1147
+ margin-bottom: 6px;
1148
+ line-height: 1.45;
1149
+ }
1150
+
1151
+ .chat-heading-1 { font-size: 1.25rem; color: var(--accent-hover, #34d399); }
1152
+ .chat-heading-2 { font-size: 1.15rem; color: var(--text-main); }
1153
+ .chat-heading-3 { font-size: 1.05rem; color: var(--text-main); }
1154
+
1155
+ .chat-section-title {
1156
+ font-size: 1.02rem;
1157
+ font-weight: 700;
1158
+ color: var(--accent-hover, #34d399);
1159
+ padding-bottom: 2px;
1160
+ margin-top: 12px;
1161
+ margin-bottom: 6px;
1162
+ }
1163
+
1164
+ .chat-list-item {
1165
+ display: flex;
1166
+ align-items: flex-start;
1167
+ gap: 8px;
1168
+ margin: 3px 0 3px 4px;
1169
+ line-height: 1.7;
1170
+ }
1171
+
1172
+ .chat-list-bullet {
1173
+ position: relative;
1174
+ display: inline-flex;
1175
+ align-items: center;
1176
+ justify-content: center;
1177
+ flex-shrink: 0;
1178
+ height: 1.7em;
1179
+ width: 14px;
1180
+ font-size: 0.94rem;
1181
+ line-height: 1.7;
1182
+ color: transparent;
1183
+ user-select: none;
1184
+ }
1185
+
1186
+ .chat-list-bullet::before {
1187
+ content: '';
1188
+ position: absolute;
1189
+ top: 50%;
1190
+ left: 50%;
1191
+ transform: translate(-50%, -50%);
1192
+ width: 7px;
1193
+ height: 7px;
1194
+ border-radius: 50%;
1195
+ background-color: var(--accent, #10b981);
1196
+ box-shadow: 0 0 5px color-mix(in srgb, var(--accent, #10b981) 35%, transparent);
1197
+ }
1198
+
1199
+ .chat-list-number {
1200
+ color: var(--accent-hover, #34d399);
1201
+ font-weight: 700;
1202
+ font-size: 0.9em;
1203
+ flex-shrink: 0;
1204
+ line-height: 1.7;
1205
+ min-width: 20px;
1206
+ }
1207
+
1208
+ .chat-list-text {
1209
+ flex: 1;
1210
+ min-width: 0;
1211
+ word-break: break-word;
1212
+ white-space: pre-wrap;
1213
+ }
1214
+
1215
+ .chat-link {
1216
+ color: var(--accent-hover, #34d399);
1217
+ text-decoration: underline;
1218
+ text-underline-offset: 3px;
1219
+ word-break: break-all;
1220
+ transition: opacity 0.15s ease;
1221
+ }
1222
+
1223
+ .chat-link:hover {
1224
+ opacity: 0.85;
1225
+ text-decoration: underline;
1226
+ }
1227
+
1228
+ .chat-bold-highlight {
1229
+ font-weight: 600;
1230
+ color: var(--text-main);
1231
+ }
1232
+
1233
+ .chat-inline-code {
1234
+ background: rgba(255, 255, 255, 0.08);
1235
+ padding: 2px 6px;
1236
+ border-radius: 4px;
1237
+ font-family: monospace;
1238
+ font-size: 0.88em;
1239
+ color: #38bdf8;
1240
+ }
1116
1241
 
1117
1242
  /* Typing Indicator */
1118
1243
  .typing-indicator {
@@ -1159,6 +1284,7 @@ h1 {
1159
1284
 
1160
1285
  /* Input Area */
1161
1286
  .input-area {
1287
+ position: relative;
1162
1288
  padding: 16px 20px;
1163
1289
  background: color-mix(in srgb, var(--panel-bg) 60%, transparent);
1164
1290
  backdrop-filter: var(--glass-blur);
@@ -1167,6 +1293,113 @@ h1 {
1167
1293
  box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.1);
1168
1294
  }
1169
1295
 
1296
+ /* Slash Command Suggestions Popup */
1297
+ .slash-suggestions-popup {
1298
+ position: absolute;
1299
+ bottom: calc(100% + 12px);
1300
+ left: 20px;
1301
+ right: 20px;
1302
+ max-height: 250px;
1303
+ background: color-mix(in srgb, var(--card-bg, #18191c) 92%, #000 8%);
1304
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.15));
1305
+ border-radius: 14px;
1306
+ box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(45, 212, 191, 0.15);
1307
+ display: flex;
1308
+ flex-direction: column;
1309
+ overflow: hidden;
1310
+ z-index: 100;
1311
+ backdrop-filter: blur(16px);
1312
+ -webkit-backdrop-filter: blur(16px);
1313
+ transform-origin: bottom center;
1314
+ animation: slashPopupFadeIn 0.22s cubic-bezier(0.16, 1, 0.3, 1);
1315
+ will-change: transform, opacity;
1316
+ }
1317
+
1318
+ @keyframes slashPopupFadeIn {
1319
+ from {
1320
+ opacity: 0;
1321
+ transform: translateY(8px) scale(0.97);
1322
+ }
1323
+ to {
1324
+ opacity: 1;
1325
+ transform: translateY(0) scale(1);
1326
+ }
1327
+ }
1328
+
1329
+ .slash-suggestions-header {
1330
+ padding: 9px 16px;
1331
+ font-size: 0.75rem;
1332
+ font-weight: 700;
1333
+ color: var(--accent, #2dd4bf);
1334
+ border-bottom: 1px solid var(--border, rgba(255, 255, 255, 0.08));
1335
+ background: rgba(0, 0, 0, 0.3);
1336
+ letter-spacing: 0.03em;
1337
+ text-transform: uppercase;
1338
+ }
1339
+
1340
+ .slash-suggestions-list {
1341
+ overflow-y: auto;
1342
+ padding: 6px;
1343
+ display: flex;
1344
+ flex-direction: column;
1345
+ gap: 3px;
1346
+ scroll-behavior: smooth;
1347
+ }
1348
+
1349
+ .slash-suggestion-item {
1350
+ display: flex;
1351
+ align-items: center;
1352
+ gap: 12px;
1353
+ padding: 9px 14px;
1354
+ border-radius: 10px;
1355
+ background: transparent;
1356
+ border: none;
1357
+ text-align: left;
1358
+ cursor: pointer;
1359
+ width: 100%;
1360
+ transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), background 0.18s ease, box-shadow 0.18s ease;
1361
+ will-change: transform, background;
1362
+ }
1363
+
1364
+ .slash-suggestion-item:hover,
1365
+ .slash-suggestion-item.active {
1366
+ background: rgba(45, 212, 191, 0.12);
1367
+ transform: translateX(4px);
1368
+ box-shadow: inset 2px 0 0 var(--accent, #2dd4bf);
1369
+ }
1370
+
1371
+ .slash-cmd-name {
1372
+ font-size: 0.86rem;
1373
+ font-weight: 600;
1374
+ font-family: var(--font-mono, monospace);
1375
+ color: var(--accent, #2dd4bf);
1376
+ min-width: 140px;
1377
+ flex-shrink: 0;
1378
+ transition: color 0.15s ease;
1379
+ }
1380
+
1381
+ .slash-suggestion-item.active .slash-cmd-name {
1382
+ color: #5eead4;
1383
+ }
1384
+
1385
+ .skill-badge {
1386
+ font-size: 0.72rem;
1387
+ font-weight: 600;
1388
+ color: var(--accent, #2dd4bf);
1389
+ background: rgba(45, 212, 191, 0.16);
1390
+ padding: 2px 7px;
1391
+ border-radius: 6px;
1392
+ flex-shrink: 0;
1393
+ }
1394
+
1395
+ .slash-cmd-desc {
1396
+ font-size: 0.8rem;
1397
+ color: var(--text-soft, rgba(255, 255, 255, 0.65));
1398
+ overflow: hidden;
1399
+ text-overflow: ellipsis;
1400
+ white-space: nowrap;
1401
+ }
1402
+
1170
1403
  .input-disclaimer {
1171
1404
  text-align: center;
1172
1405
  font-size: 0.7rem;
@@ -3183,6 +3416,52 @@ input:checked + .slider:before {
3183
3416
  cursor: not-allowed;
3184
3417
  }
3185
3418
 
3419
+ /* ── Pictures Type Filter & Video Card Styles ── */
3420
+ .pictures-type-filter {
3421
+ display: flex;
3422
+ gap: 8px;
3423
+ max-width: 1120px;
3424
+ margin: 0 auto 20px;
3425
+ padding: 0 10px;
3426
+ }
3427
+
3428
+ .filter-tab-btn {
3429
+ display: inline-flex;
3430
+ align-items: center;
3431
+ gap: 6px;
3432
+ padding: 6px 14px;
3433
+ border-radius: 20px;
3434
+ background: rgba(255, 255, 255, 0.04);
3435
+ border: 1px solid var(--border);
3436
+ color: var(--text-soft);
3437
+ font-size: 0.8rem;
3438
+ font-weight: 500;
3439
+ cursor: pointer;
3440
+ transition: all 0.15s ease;
3441
+ outline: none;
3442
+ }
3443
+
3444
+ .filter-tab-btn:hover {
3445
+ background: rgba(255, 255, 255, 0.08);
3446
+ color: var(--text-main);
3447
+ border-color: var(--accent);
3448
+ }
3449
+
3450
+ .filter-tab-btn.active {
3451
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
3452
+ border-color: var(--accent);
3453
+ color: var(--accent-hover);
3454
+ font-weight: 600;
3455
+ }
3456
+
3457
+ .picture-card video {
3458
+ display: block;
3459
+ width: 100%;
3460
+ aspect-ratio: 4 / 3;
3461
+ object-fit: cover;
3462
+ background: var(--panel-soft);
3463
+ }
3464
+
3186
3465
  .pictures-empty {
3187
3466
  max-width: 360px;
3188
3467
  margin: 18vh auto 0;
@@ -3797,9 +4076,32 @@ input:checked + .slider:before {
3797
4076
  transform: translate(-50%, -50%);
3798
4077
  }
3799
4078
 
4079
+ #chat-tool-btn,
4080
+ #send-btn,
4081
+ #mic-btn,
4082
+ #screen-capture-btn {
4083
+ transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), background 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
4084
+ will-change: transform;
4085
+ }
4086
+
4087
+ #chat-tool-btn:hover,
4088
+ #send-btn:hover:not(:disabled),
4089
+ #mic-btn:hover,
4090
+ #screen-capture-btn:hover {
4091
+ transform: scale(1.08);
4092
+ }
4093
+
4094
+ #chat-tool-btn:active,
4095
+ #send-btn:active:not(:disabled),
4096
+ #mic-btn:active,
4097
+ #screen-capture-btn:active {
4098
+ transform: scale(0.92);
4099
+ }
4100
+
3800
4101
  #chat-tool-btn[aria-expanded='true'] {
3801
4102
  background: var(--panel-raised);
3802
4103
  color: var(--text-main);
4104
+ transform: rotate(45deg);
3803
4105
  }
3804
4106
 
3805
4107
  .chat-tool-menu {
@@ -3812,9 +4114,23 @@ input:checked + .slider:before {
3812
4114
  background: color-mix(in srgb, var(--panel-raised) 92%, #000 8%);
3813
4115
  border: 1px solid var(--border);
3814
4116
  border-radius: 16px;
3815
- box-shadow: 0 18px 50px rgba(0, 0, 0, 0.28);
4117
+ box-shadow: 0 18px 50px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(45, 212, 191, 0.12);
3816
4118
  backdrop-filter: var(--glass-blur);
3817
4119
  -webkit-backdrop-filter: var(--glass-blur);
4120
+ transform-origin: bottom left;
4121
+ animation: toolMenuPopIn 0.22s cubic-bezier(0.16, 1, 0.3, 1);
4122
+ will-change: transform, opacity;
4123
+ }
4124
+
4125
+ @keyframes toolMenuPopIn {
4126
+ from {
4127
+ opacity: 0;
4128
+ transform: translateY(8px) scale(0.94);
4129
+ }
4130
+ to {
4131
+ opacity: 1;
4132
+ transform: translateY(0) scale(1);
4133
+ }
3818
4134
  }
3819
4135
 
3820
4136
  .chat-tool-menu button {
@@ -3833,10 +4149,12 @@ input:checked + .slider:before {
3833
4149
  font-size: 0.92rem;
3834
4150
  text-align: left;
3835
4151
  cursor: pointer;
4152
+ transition: transform 0.16s cubic-bezier(0.16, 1, 0.3, 1), background 0.16s ease;
3836
4153
  }
3837
4154
 
3838
4155
  .chat-tool-menu button:hover {
3839
4156
  background: var(--surface-strong);
4157
+ transform: translateX(4px);
3840
4158
  }
3841
4159
 
3842
4160
  .chat-tool-menu button span:first-child {
@@ -4391,4 +4709,37 @@ input:checked + .slider:before {
4391
4709
  transform: scale(0.98);
4392
4710
  }
4393
4711
 
4712
+ /* Message action buttons (Copy, Read Aloud, Like, Dislike) */
4713
+ .msg-action-btn {
4714
+ background: transparent;
4715
+ border: none;
4716
+ color: var(--text-soft, #94a3b8);
4717
+ padding: 4px 6px;
4718
+ border-radius: 6px;
4719
+ cursor: pointer;
4720
+ display: inline-flex;
4721
+ align-items: center;
4722
+ justify-content: center;
4723
+ transition: all 0.15s ease-in-out;
4724
+ opacity: 0.75;
4725
+ }
4726
+
4727
+ .msg-action-btn:hover {
4728
+ background: rgba(255, 255, 255, 0.08);
4729
+ color: var(--text-main, #f8fafc);
4730
+ opacity: 1;
4731
+ }
4732
+
4733
+ .msg-action-btn.is-copied {
4734
+ color: var(--accent, #10b981) !important;
4735
+ opacity: 1 !important;
4736
+ }
4737
+
4738
+ .msg-action-btn.is-speaking {
4739
+ color: var(--accent, #10b981) !important;
4740
+ opacity: 1 !important;
4741
+ }
4742
+
4743
+
4744
+
4394
4745