@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
@@ -1175,5 +1175,163 @@ kbd {
1175
1175
  grid-template-columns: 180px 1fr;
1176
1176
  }
1177
1177
 
1178
+ /* ─── Native Channel Bridges Cards Styling ────────────────── */
1179
+
1180
+ .bridge-cards-container {
1181
+ display: flex;
1182
+ flex-direction: column;
1183
+ gap: 14px;
1184
+ margin-top: 10px;
1185
+ }
1186
+
1187
+ .bridge-card {
1188
+ background: var(--surface-bg, rgba(255, 255, 255, 0.025));
1189
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
1190
+ border-radius: 12px;
1191
+ padding: 16px 18px;
1192
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1193
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1194
+ }
1195
+
1196
+ .bridge-card:hover {
1197
+ border-color: var(--border-strong, rgba(255, 255, 255, 0.18));
1198
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
1199
+ }
1200
+
1201
+ .bridge-card.active {
1202
+ background: var(--surface-strong, rgba(16, 185, 129, 0.04));
1203
+ border-color: rgba(16, 185, 129, 0.3);
1204
+ }
1205
+
1206
+ .bridge-card-header {
1207
+ display: flex;
1208
+ align-items: center;
1209
+ justify-content: space-between;
1210
+ gap: 12px;
1211
+ }
1212
+
1213
+ .bridge-info {
1214
+ display: flex;
1215
+ align-items: center;
1216
+ gap: 12px;
1217
+ }
1218
+
1219
+ .bridge-icon-badge {
1220
+ width: 38px;
1221
+ height: 38px;
1222
+ border-radius: 10px;
1223
+ display: flex;
1224
+ align-items: center;
1225
+ justify-content: center;
1226
+ font-size: 18px;
1227
+ color: #fff;
1228
+ box-shadow: 0 4px 10px rgba(0,0,0,0.25);
1229
+ flex-shrink: 0;
1230
+ }
1231
+
1232
+ .bridge-icon-telegram {
1233
+ background: linear-gradient(135deg, #0088cc 0%, #24a1de 100%);
1234
+ }
1235
+
1236
+ .bridge-icon-discord {
1237
+ background: linear-gradient(135deg, #5865F2 0%, #4752C4 100%);
1238
+ }
1239
+
1240
+ .bridge-icon-slack {
1241
+ background: linear-gradient(135deg, #4A154B 0%, #611f69 100%);
1242
+ }
1243
+
1244
+ .bridge-icon-line {
1245
+ background: linear-gradient(135deg, #00B900 0%, #00c300 100%);
1246
+ }
1247
+
1248
+ .bridge-icon-whatsapp {
1249
+ background: linear-gradient(135deg, #25D366 0%, #128C7E 100%);
1250
+ }
1251
+
1252
+ .bridge-title-group {
1253
+ display: flex;
1254
+ flex-direction: column;
1255
+ gap: 3px;
1256
+ }
1257
+
1258
+ .bridge-title {
1259
+ font-size: 14px;
1260
+ font-weight: 600;
1261
+ color: var(--text-main, #f8fafc);
1262
+ display: flex;
1263
+ align-items: center;
1264
+ gap: 8px;
1265
+ }
1266
+
1267
+ .bridge-status-pill {
1268
+ font-size: 10px;
1269
+ font-weight: 600;
1270
+ padding: 2px 8px;
1271
+ border-radius: 12px;
1272
+ text-transform: uppercase;
1273
+ letter-spacing: 0.5px;
1274
+ }
1275
+
1276
+ .bridge-status-pill.active {
1277
+ background: rgba(16, 185, 129, 0.15);
1278
+ color: #34d399;
1279
+ border: 1px solid rgba(16, 185, 129, 0.3);
1280
+ }
1281
+
1282
+ .bridge-status-pill.inactive {
1283
+ background: rgba(255, 255, 255, 0.05);
1284
+ color: var(--text-muted, #94a3b8);
1285
+ border: 1px solid rgba(255, 255, 255, 0.08);
1286
+ }
1287
+
1288
+ .bridge-subtitle {
1289
+ font-size: 12px;
1290
+ color: var(--text-muted, #94a3b8);
1291
+ }
1292
+
1293
+ .bridge-inputs {
1294
+ display: flex;
1295
+ flex-direction: column;
1296
+ gap: 10px;
1297
+ margin-top: 14px;
1298
+ padding-top: 12px;
1299
+ border-top: 1px dashed var(--border, rgba(255, 255, 255, 0.08));
1300
+ }
1301
+
1302
+ .bridge-input-row {
1303
+ display: flex;
1304
+ gap: 10px;
1305
+ }
1306
+
1307
+ .bridge-input {
1308
+ width: 100%;
1309
+ padding: 9px 12px;
1310
+ background: var(--input-bg, rgba(0, 0, 0, 0.35));
1311
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.1));
1312
+ border-radius: 8px;
1313
+ color: var(--text-main, #f8fafc);
1314
+ font-size: 13px;
1315
+ transition: all 0.2s ease;
1316
+ }
1317
+
1318
+ .bridge-input:focus {
1319
+ outline: none;
1320
+ border-color: var(--accent, #10b981);
1321
+ background: var(--input-focus-bg, rgba(0, 0, 0, 0.5));
1322
+ box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.2);
1323
+ }
1324
+
1325
+ .bridge-input[type="number"] {
1326
+ -moz-appearance: textfield;
1327
+ appearance: textfield;
1328
+ }
1329
+
1330
+ .bridge-input[type="number"]::-webkit-outer-spin-button,
1331
+ .bridge-input[type="number"]::-webkit-inner-spin-button {
1332
+ -webkit-appearance: none;
1333
+ margin: 0;
1334
+ }
1335
+
1178
1336
 
1179
1337
 
@@ -1171,6 +1171,132 @@ h1 {
1171
1171
  padding: 0 !important;
1172
1172
  }
1173
1173
 
1174
+ /* Thai Typography & Formatting Enhancement for Chat */
1175
+ .chat-formatted-body {
1176
+ display: flex;
1177
+ flex-direction: column;
1178
+ gap: 8px;
1179
+ width: 100%;
1180
+ font-family: 'Prompt', 'Sarabun', 'Noto Sans Thai', 'Kanit', Inter, ui-sans-serif, system-ui, -apple-system, sans-serif;
1181
+ font-size: 0.94rem;
1182
+ line-height: 1.7;
1183
+ letter-spacing: 0.01em;
1184
+ word-break: break-word;
1185
+ overflow-wrap: anywhere;
1186
+ line-break: relaxed;
1187
+ }
1188
+
1189
+ .chat-paragraph {
1190
+ margin: 0;
1191
+ margin-bottom: 6px;
1192
+ line-height: 1.7;
1193
+ white-space: pre-wrap;
1194
+ word-break: break-word;
1195
+ }
1196
+
1197
+ .chat-paragraph:last-child {
1198
+ margin-bottom: 0;
1199
+ }
1200
+
1201
+ .chat-heading {
1202
+ font-weight: 700;
1203
+ color: var(--text-main);
1204
+ margin-top: 14px;
1205
+ margin-bottom: 6px;
1206
+ line-height: 1.45;
1207
+ }
1208
+
1209
+ .chat-heading-1 { font-size: 1.25rem; color: var(--accent-hover, #34d399); }
1210
+ .chat-heading-2 { font-size: 1.15rem; color: var(--text-main); }
1211
+ .chat-heading-3 { font-size: 1.05rem; color: var(--text-main); }
1212
+
1213
+ .chat-section-title {
1214
+ font-size: 1.02rem;
1215
+ font-weight: 700;
1216
+ color: var(--accent-hover, #34d399);
1217
+ padding-bottom: 2px;
1218
+ margin-top: 12px;
1219
+ margin-bottom: 6px;
1220
+ }
1221
+
1222
+ .chat-list-item {
1223
+ display: flex;
1224
+ align-items: flex-start;
1225
+ gap: 8px;
1226
+ margin: 3px 0 3px 4px;
1227
+ line-height: 1.7;
1228
+ }
1229
+
1230
+ .chat-list-bullet {
1231
+ position: relative;
1232
+ display: inline-flex;
1233
+ align-items: center;
1234
+ justify-content: center;
1235
+ flex-shrink: 0;
1236
+ height: 1.7em;
1237
+ width: 14px;
1238
+ font-size: 0.94rem;
1239
+ line-height: 1.7;
1240
+ color: transparent;
1241
+ user-select: none;
1242
+ }
1243
+
1244
+ .chat-list-bullet::before {
1245
+ content: '';
1246
+ position: absolute;
1247
+ top: 50%;
1248
+ left: 50%;
1249
+ transform: translate(-50%, -50%);
1250
+ width: 7px;
1251
+ height: 7px;
1252
+ border-radius: 50%;
1253
+ background-color: var(--accent, #10b981);
1254
+ box-shadow: 0 0 5px color-mix(in srgb, var(--accent, #10b981) 35%, transparent);
1255
+ }
1256
+
1257
+ .chat-list-number {
1258
+ color: var(--accent-hover, #34d399);
1259
+ font-weight: 700;
1260
+ font-size: 0.9em;
1261
+ flex-shrink: 0;
1262
+ line-height: 1.7;
1263
+ min-width: 20px;
1264
+ }
1265
+
1266
+ .chat-list-text {
1267
+ flex: 1;
1268
+ min-width: 0;
1269
+ word-break: break-word;
1270
+ white-space: pre-wrap;
1271
+ }
1272
+
1273
+ .chat-link {
1274
+ color: var(--accent-hover, #34d399);
1275
+ text-decoration: underline;
1276
+ text-underline-offset: 3px;
1277
+ word-break: break-all;
1278
+ transition: opacity 0.15s ease;
1279
+ }
1280
+
1281
+ .chat-link:hover {
1282
+ opacity: 0.85;
1283
+ text-decoration: underline;
1284
+ }
1285
+
1286
+ .chat-bold-highlight {
1287
+ font-weight: 600;
1288
+ color: var(--text-main);
1289
+ }
1290
+
1291
+ .chat-inline-code {
1292
+ background: rgba(255, 255, 255, 0.08);
1293
+ padding: 2px 6px;
1294
+ border-radius: 4px;
1295
+ font-family: monospace;
1296
+ font-size: 0.88em;
1297
+ color: #38bdf8;
1298
+ }
1299
+
1174
1300
 
1175
1301
  /* Typing Indicator */
1176
1302
  .typing-indicator {
@@ -1217,6 +1343,7 @@ h1 {
1217
1343
 
1218
1344
  /* Input Area */
1219
1345
  .input-area {
1346
+ position: relative;
1220
1347
  padding: 16px 20px;
1221
1348
  background: color-mix(in srgb, var(--panel-bg) 60%, transparent);
1222
1349
  backdrop-filter: var(--glass-blur);
@@ -1225,6 +1352,113 @@ h1 {
1225
1352
  box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.1);
1226
1353
  }
1227
1354
 
1355
+ /* Slash Command Suggestions Popup */
1356
+ .slash-suggestions-popup {
1357
+ position: absolute;
1358
+ bottom: calc(100% + 12px);
1359
+ left: 20px;
1360
+ right: 20px;
1361
+ max-height: 250px;
1362
+ background: color-mix(in srgb, var(--card-bg, #18191c) 92%, #000 8%);
1363
+ border: 1px solid var(--border, rgba(255, 255, 255, 0.15));
1364
+ border-radius: 14px;
1365
+ box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(45, 212, 191, 0.15);
1366
+ display: flex;
1367
+ flex-direction: column;
1368
+ overflow: hidden;
1369
+ z-index: 100;
1370
+ backdrop-filter: blur(16px);
1371
+ -webkit-backdrop-filter: blur(16px);
1372
+ transform-origin: bottom center;
1373
+ animation: slashPopupFadeIn 0.22s cubic-bezier(0.16, 1, 0.3, 1);
1374
+ will-change: transform, opacity;
1375
+ }
1376
+
1377
+ @keyframes slashPopupFadeIn {
1378
+ from {
1379
+ opacity: 0;
1380
+ transform: translateY(8px) scale(0.97);
1381
+ }
1382
+ to {
1383
+ opacity: 1;
1384
+ transform: translateY(0) scale(1);
1385
+ }
1386
+ }
1387
+
1388
+ .slash-suggestions-header {
1389
+ padding: 9px 16px;
1390
+ font-size: 0.75rem;
1391
+ font-weight: 700;
1392
+ color: var(--accent, #2dd4bf);
1393
+ border-bottom: 1px solid var(--border, rgba(255, 255, 255, 0.08));
1394
+ background: rgba(0, 0, 0, 0.3);
1395
+ letter-spacing: 0.03em;
1396
+ text-transform: uppercase;
1397
+ }
1398
+
1399
+ .slash-suggestions-list {
1400
+ overflow-y: auto;
1401
+ padding: 6px;
1402
+ display: flex;
1403
+ flex-direction: column;
1404
+ gap: 3px;
1405
+ scroll-behavior: smooth;
1406
+ }
1407
+
1408
+ .slash-suggestion-item {
1409
+ display: flex;
1410
+ align-items: center;
1411
+ gap: 12px;
1412
+ padding: 9px 14px;
1413
+ border-radius: 10px;
1414
+ background: transparent;
1415
+ border: none;
1416
+ text-align: left;
1417
+ cursor: pointer;
1418
+ width: 100%;
1419
+ transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), background 0.18s ease, box-shadow 0.18s ease;
1420
+ will-change: transform, background;
1421
+ }
1422
+
1423
+ .slash-suggestion-item:hover,
1424
+ .slash-suggestion-item.active {
1425
+ background: rgba(45, 212, 191, 0.12);
1426
+ transform: translateX(4px);
1427
+ box-shadow: inset 2px 0 0 var(--accent, #2dd4bf);
1428
+ }
1429
+
1430
+ .slash-cmd-name {
1431
+ font-size: 0.86rem;
1432
+ font-weight: 600;
1433
+ font-family: var(--font-mono, monospace);
1434
+ color: var(--accent, #2dd4bf);
1435
+ min-width: 140px;
1436
+ flex-shrink: 0;
1437
+ transition: color 0.15s ease;
1438
+ }
1439
+
1440
+ .slash-suggestion-item.active .slash-cmd-name {
1441
+ color: #5eead4;
1442
+ }
1443
+
1444
+ .skill-badge {
1445
+ font-size: 0.72rem;
1446
+ font-weight: 600;
1447
+ color: var(--accent, #2dd4bf);
1448
+ background: rgba(45, 212, 191, 0.16);
1449
+ padding: 2px 7px;
1450
+ border-radius: 6px;
1451
+ flex-shrink: 0;
1452
+ }
1453
+
1454
+ .slash-cmd-desc {
1455
+ font-size: 0.8rem;
1456
+ color: var(--text-soft, rgba(255, 255, 255, 0.6));
1457
+ overflow: hidden;
1458
+ text-overflow: ellipsis;
1459
+ white-space: nowrap;
1460
+ }
1461
+
1228
1462
  #chat-form {
1229
1463
  display: flex;
1230
1464
  gap: 12px;
@@ -2822,6 +3056,52 @@ input:checked + .slider:before {
2822
3056
  cursor: not-allowed;
2823
3057
  }
2824
3058
 
3059
+ /* ── Pictures Type Filter & Video Card Styles ── */
3060
+ .pictures-type-filter {
3061
+ display: flex;
3062
+ gap: 8px;
3063
+ max-width: 1120px;
3064
+ margin: 0 auto 20px;
3065
+ padding: 0 10px;
3066
+ }
3067
+
3068
+ .filter-tab-btn {
3069
+ display: inline-flex;
3070
+ align-items: center;
3071
+ gap: 6px;
3072
+ padding: 6px 14px;
3073
+ border-radius: 20px;
3074
+ background: rgba(255, 255, 255, 0.04);
3075
+ border: 1px solid var(--border);
3076
+ color: var(--text-soft);
3077
+ font-size: 0.8rem;
3078
+ font-weight: 500;
3079
+ cursor: pointer;
3080
+ transition: all 0.15s ease;
3081
+ outline: none;
3082
+ }
3083
+
3084
+ .filter-tab-btn:hover {
3085
+ background: rgba(255, 255, 255, 0.08);
3086
+ color: var(--text-main);
3087
+ border-color: var(--accent);
3088
+ }
3089
+
3090
+ .filter-tab-btn.active {
3091
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
3092
+ border-color: var(--accent);
3093
+ color: var(--accent-hover);
3094
+ font-weight: 600;
3095
+ }
3096
+
3097
+ .picture-card video {
3098
+ display: block;
3099
+ width: 100%;
3100
+ aspect-ratio: 4 / 3;
3101
+ object-fit: cover;
3102
+ background: var(--panel-soft);
3103
+ }
3104
+
2825
3105
  .pictures-empty {
2826
3106
  max-width: 360px;
2827
3107
  margin: 18vh auto 0;
@@ -3412,9 +3692,32 @@ input:checked + .slider:before {
3412
3692
  transform: translate(-50%, -50%);
3413
3693
  }
3414
3694
 
3695
+ #chat-tool-btn,
3696
+ #send-btn,
3697
+ #mic-btn,
3698
+ #screen-capture-btn {
3699
+ 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;
3700
+ will-change: transform;
3701
+ }
3702
+
3703
+ #chat-tool-btn:hover,
3704
+ #send-btn:hover:not(:disabled),
3705
+ #mic-btn:hover,
3706
+ #screen-capture-btn:hover {
3707
+ transform: scale(1.08);
3708
+ }
3709
+
3710
+ #chat-tool-btn:active,
3711
+ #send-btn:active:not(:disabled),
3712
+ #mic-btn:active,
3713
+ #screen-capture-btn:active {
3714
+ transform: scale(0.92);
3715
+ }
3716
+
3415
3717
  #chat-tool-btn[aria-expanded='true'] {
3416
3718
  background: var(--panel-raised);
3417
3719
  color: var(--text-main);
3720
+ transform: rotate(45deg);
3418
3721
  }
3419
3722
 
3420
3723
  .chat-tool-menu {
@@ -3427,9 +3730,23 @@ input:checked + .slider:before {
3427
3730
  background: color-mix(in srgb, var(--panel-raised) 92%, #000 8%);
3428
3731
  border: 1px solid var(--border);
3429
3732
  border-radius: 16px;
3430
- box-shadow: 0 18px 50px rgba(0, 0, 0, 0.28);
3733
+ box-shadow: 0 18px 50px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(45, 212, 191, 0.12);
3431
3734
  backdrop-filter: var(--glass-blur);
3432
3735
  -webkit-backdrop-filter: var(--glass-blur);
3736
+ transform-origin: bottom left;
3737
+ animation: toolMenuPopIn 0.22s cubic-bezier(0.16, 1, 0.3, 1);
3738
+ will-change: transform, opacity;
3739
+ }
3740
+
3741
+ @keyframes toolMenuPopIn {
3742
+ from {
3743
+ opacity: 0;
3744
+ transform: translateY(8px) scale(0.94);
3745
+ }
3746
+ to {
3747
+ opacity: 1;
3748
+ transform: translateY(0) scale(1);
3749
+ }
3433
3750
  }
3434
3751
 
3435
3752
  .chat-tool-menu button {
@@ -3448,10 +3765,12 @@ input:checked + .slider:before {
3448
3765
  font-size: 0.92rem;
3449
3766
  text-align: left;
3450
3767
  cursor: pointer;
3768
+ transition: transform 0.16s cubic-bezier(0.16, 1, 0.3, 1), background 0.16s ease;
3451
3769
  }
3452
3770
 
3453
3771
  .chat-tool-menu button:hover {
3454
3772
  background: var(--surface-strong);
3773
+ transform: translateX(4px);
3455
3774
  }
3456
3775
 
3457
3776
  .chat-tool-menu button span:first-child {
@@ -4266,4 +4585,37 @@ input:checked + .slider:before {
4266
4585
  transform: scale(0.98);
4267
4586
  }
4268
4587
 
4588
+ /* Message action buttons (Copy, Read Aloud, Like, Dislike) */
4589
+ .msg-action-btn {
4590
+ background: transparent;
4591
+ border: none;
4592
+ color: var(--text-soft, #94a3b8);
4593
+ padding: 4px 6px;
4594
+ border-radius: 6px;
4595
+ cursor: pointer;
4596
+ display: inline-flex;
4597
+ align-items: center;
4598
+ justify-content: center;
4599
+ transition: all 0.15s ease-in-out;
4600
+ opacity: 0.75;
4601
+ }
4602
+
4603
+ .msg-action-btn:hover {
4604
+ background: rgba(255, 255, 255, 0.08);
4605
+ color: var(--text-main, #f8fafc);
4606
+ opacity: 1;
4607
+ }
4608
+
4609
+ .msg-action-btn.is-copied {
4610
+ color: var(--accent, #10b981) !important;
4611
+ opacity: 1 !important;
4612
+ }
4613
+
4614
+ .msg-action-btn.is-speaking {
4615
+ color: var(--accent, #10b981) !important;
4616
+ opacity: 1 !important;
4617
+ }
4618
+
4619
+
4620
+
4269
4621