pinokiod 7.3.5 → 7.3.8

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 (38) hide show
  1. package/kernel/api/index.js +3 -2
  2. package/kernel/api/script/index.js +1 -0
  3. package/kernel/resource_usage/gpu.js +1078 -270
  4. package/kernel/resource_usage/index.js +9 -4
  5. package/package.json +2 -1
  6. package/server/index.js +14 -2
  7. package/server/public/nav.js +1 -1
  8. package/server/public/style.css +298 -191
  9. package/server/public/task-launcher.css +16 -20
  10. package/server/public/universal-launcher.css +0 -113
  11. package/server/public/universal-launcher.js +1 -1
  12. package/server/views/app.ejs +592 -298
  13. package/server/views/autolaunch.ejs +1 -1
  14. package/server/views/checkpoints.ejs +2 -6
  15. package/server/views/connect.ejs +1 -1
  16. package/server/views/explore.ejs +2 -1
  17. package/server/views/index.ejs +89 -60
  18. package/server/views/install.ejs +5 -7
  19. package/server/views/invalid_content.ejs +1 -1
  20. package/server/views/layout.ejs +8 -2
  21. package/server/views/logs.ejs +5 -27
  22. package/server/views/net.ejs +1 -1
  23. package/server/views/network.ejs +1 -1
  24. package/server/views/partials/fs_status.ejs +0 -8
  25. package/server/views/partials/main_sidebar.ejs +108 -44
  26. package/server/views/plugin_detail.ejs +1 -1
  27. package/server/views/plugins.ejs +1 -28
  28. package/server/views/screenshots.ejs +1 -1
  29. package/server/views/settings.ejs +2 -1
  30. package/server/views/setup.ejs +15 -1
  31. package/server/views/skills.ejs +1 -1
  32. package/server/views/task_builder.ejs +1 -1
  33. package/server/views/task_install.ejs +1 -1
  34. package/server/views/task_launch.ejs +1 -1
  35. package/server/views/task_list.ejs +1 -1
  36. package/server/views/tools.ejs +1 -1
  37. package/test/resource-usage-gpu.test.js +320 -70
  38. package/test/script-api.test.js +90 -0
@@ -32,7 +32,7 @@
32
32
  }
33
33
  body.dark #devtab.selected {
34
34
  border: none;
35
- background: rgb(27, 28, 29) !important;
35
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
36
36
  }
37
37
  .app-header-identity {
38
38
  position: relative;
@@ -300,7 +300,7 @@ body.dark .snapshot-comment {
300
300
  #sidebar-toggle {
301
301
  color: #0f172a;
302
302
  position: relative;
303
- width: 48px;
303
+ width: 40px;
304
304
  height: 30px;
305
305
  padding: 0;
306
306
  border-radius: 9px;
@@ -450,12 +450,13 @@ body {
450
450
  }
451
451
  body.app-page {
452
452
  --app-page-accent: var(--pinokio-chrome-accent-fg-light);
453
- --app-page-selected-item-color: var(--pinokio-chrome-accent-fg-light);
453
+ --app-page-canvas-bg: #ffffff;
454
+ --app-page-selected-item-color: #111827;
454
455
  --app-page-shell-bg: rgba(250, 251, 253, 0.78);
455
456
  --app-page-shell-bg-strong: rgba(248, 250, 252, 0.9);
456
457
  --app-page-panel-bg: rgba(248, 250, 252, 0.92);
457
458
  --app-page-border: rgba(15, 23, 42, 0.12);
458
- --app-page-selected-item-bg: white;
459
+ --app-page-selected-item-bg: rgba(15, 23, 42, 0.045);
459
460
  --app-page-surface-soft: color-mix(in srgb, var(--app-page-shell-bg-strong) 4%, transparent);
460
461
  --app-page-surface-active: color-mix(in srgb, var(--app-page-shell-bg-strong) 6%, transparent);
461
462
  --app-page-shell-gradient:
@@ -468,12 +469,13 @@ body.app-page {
468
469
  }
469
470
  body.dark.app-page {
470
471
  --app-page-accent: var(--pinokio-chrome-accent-fg-dark);
471
- --app-page-selected-item-color: var(--pinokio-chrome-accent-fg-dark);
472
+ --app-page-canvas-bg: #1b1c1d;
473
+ --app-page-selected-item-color: rgba(248, 250, 252, 0.94);
472
474
  --app-page-shell-bg: rgba(10, 12, 16, 0.78);
473
475
  --app-page-shell-bg-strong: rgba(12, 15, 21, 0.9);
474
476
  --app-page-panel-bg: rgba(12, 15, 21, 0.92);
475
477
  --app-page-border: rgba(255, 255, 255, 0.08);
476
- --app-page-selected-item-bg: rgb(27, 28, 29);
478
+ --app-page-selected-item-bg: rgba(255, 255, 255, 0.055);
477
479
  --app-page-surface-soft: color-mix(in srgb, var(--app-page-shell-bg-strong) 4%, transparent);
478
480
  --app-page-surface-active: color-mix(in srgb, var(--app-page-shell-bg-strong) 6%, transparent);
479
481
  --app-page-shell-gradient:
@@ -497,9 +499,10 @@ body.dark.app-page::before {
497
499
  body.app-page > header.navheader,
498
500
  body.app-page > header.navheader.minimized,
499
501
  body.app-page .navheader {
500
- background: transparent !important;
501
- background-color: transparent !important;
502
+ background: var(--app-page-canvas-bg) !important;
503
+ background-color: var(--app-page-canvas-bg) !important;
502
504
  background-image: none !important;
505
+ border-bottom: 1px solid var(--pinokio-sidebar-separator);
503
506
  backdrop-filter: none;
504
507
  box-shadow: none;
505
508
  isolation: isolate;
@@ -550,28 +553,36 @@ body.dark .community-drawer {
550
553
  }
551
554
  .community-resizer {
552
555
  display: none;
553
- flex: 0 0 6px;
556
+ flex: 0 0 7px;
554
557
  align-items: stretch;
555
558
  justify-content: center;
556
559
  cursor: col-resize;
557
560
  touch-action: none;
558
561
  outline: none;
562
+ background: transparent;
559
563
  }
560
564
  .community-resizer::before {
561
565
  content: '';
562
- width: 2px;
563
- border-radius: 999px;
564
- margin: 6px 0;
565
- background: rgba(0,0,0,0.12);
566
+ width: 1px;
567
+ border-radius: 0;
568
+ margin: 0;
569
+ background: var(--pinokio-sidebar-separator, rgba(0,0,0,0.08));
570
+ transition: background 120ms ease;
571
+ }
572
+ .community-resizer:hover::before {
573
+ background: var(--pinokio-sidebar-separator-hover, rgba(0,0,0,0.14));
566
574
  }
567
575
  .community-resizer:focus-visible::before {
568
- background: rgba(59, 130, 246, 0.45);
576
+ background: var(--pinokio-sidebar-separator-focus, rgba(59, 130, 246, 0.45));
569
577
  }
570
578
  body.dark .community-resizer::before {
571
- background: rgba(255,255,255,0.18);
579
+ background: var(--pinokio-sidebar-separator, rgba(255,255,255,0.08));
580
+ }
581
+ body.dark .community-resizer:hover::before {
582
+ background: var(--pinokio-sidebar-separator-hover, rgba(255,255,255,0.14));
572
583
  }
573
584
  body.dark .community-resizer:focus-visible::before {
574
- background: rgba(96, 165, 250, 0.6);
585
+ background: var(--pinokio-sidebar-separator-focus, rgba(96, 165, 250, 0.6));
575
586
  }
576
587
  .appcanvas.community-open .community-resizer {
577
588
  display: flex;
@@ -1036,8 +1047,8 @@ body.dark .app-logs-report-output {
1036
1047
  .appcanvas.logs-open .menu-actions #logs-toggle:hover,
1037
1048
  .appcanvas.logs-open .menu-actions #logs-toggle:focus-visible,
1038
1049
  .appcanvas.logs-open .menu-actions #logs-toggle.selected {
1039
- background: var(--assist-surface-light-open) !important;
1040
- color: #fff !important;
1050
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
1051
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1041
1052
  box-shadow: none;
1042
1053
  }
1043
1054
  body.dark .appcanvas > aside .menu-actions #logs-toggle.selected,
@@ -1047,8 +1058,8 @@ body.dark .appcanvas.logs-open .menu-actions #logs-toggle,
1047
1058
  body.dark .appcanvas.logs-open .menu-actions #logs-toggle:hover,
1048
1059
  body.dark .appcanvas.logs-open .menu-actions #logs-toggle:focus-visible,
1049
1060
  body.dark .appcanvas.logs-open .menu-actions #logs-toggle.selected {
1050
- background: var(--assist-surface-dark-open) !important;
1051
- color: #fff !important;
1061
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
1062
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1052
1063
  box-shadow: none;
1053
1064
  }
1054
1065
  .appcanvas > aside .menu-actions #logs-toggle .tab {
@@ -1058,10 +1069,18 @@ body.dark .appcanvas.logs-open .menu-actions #logs-toggle.selected {
1058
1069
  }
1059
1070
  .appcanvas > aside .menu-actions #logs-toggle.has-new {
1060
1071
  position: relative;
1061
- animation: logsAttentionFlashLight 1.05s steps(2, end) infinite;
1072
+ overflow: hidden;
1062
1073
  }
1063
- body.dark .appcanvas > aside .menu-actions #logs-toggle.has-new {
1064
- animation-name: logsAttentionFlashDark;
1074
+ .appcanvas > aside .menu-actions #logs-toggle.has-new::before {
1075
+ content: "";
1076
+ position: absolute;
1077
+ inset: 0;
1078
+ z-index: 0;
1079
+ pointer-events: none;
1080
+ border-radius: inherit;
1081
+ background: var(--pinokio-sidebar-notice-flash-bg);
1082
+ opacity: 0;
1083
+ animation: logsAttentionFlash 1.2s cubic-bezier(0.25, 1, 0.5, 1) infinite;
1065
1084
  }
1066
1085
  .logs-new-badge {
1067
1086
  display: inline-flex;
@@ -1112,25 +1131,9 @@ body.dark .mobile-nav-logs.has-new {
1112
1131
  body.dark .mobile-nav-logs.has-new::after {
1113
1132
  box-shadow: 0 0 0 2px #0f1115;
1114
1133
  }
1115
- @keyframes logsAttentionFlashLight {
1116
- 0%, 100% {
1117
- --assist-surface-light: var(--pinokio-chrome-accent-bg-light);
1118
- --assist-text-light: var(--pinokio-chrome-accent-fg-light);
1119
- }
1120
- 50% {
1121
- --assist-surface-light: var(--pinokio-chrome-accent-fg-light);
1122
- --assist-text-light: var(--pinokio-chrome-accent-bg-light);
1123
- }
1124
- }
1125
- @keyframes logsAttentionFlashDark {
1126
- 0%, 100% {
1127
- --assist-surface-dark: var(--pinokio-chrome-accent-bg-dark);
1128
- --assist-text-dark: var(--pinokio-chrome-accent-fg-dark);
1129
- }
1130
- 50% {
1131
- --assist-surface-dark: var(--pinokio-chrome-accent-fg-dark);
1132
- --assist-text-dark: var(--pinokio-chrome-accent-bg-dark);
1133
- }
1134
+ @keyframes logsAttentionFlash {
1135
+ 0%, 100% { opacity: 0; }
1136
+ 45%, 55% { opacity: 1; }
1134
1137
  }
1135
1138
  @keyframes logsMobileAttentionFlashLight {
1136
1139
  0%, 100% {
@@ -1157,13 +1160,9 @@ body.dark .mobile-nav-logs.has-new::after {
1157
1160
  .mobile-nav-logs.has-new {
1158
1161
  animation: none;
1159
1162
  }
1160
- .appcanvas > aside .menu-actions #logs-toggle.has-new {
1161
- --assist-surface-light: var(--pinokio-chrome-accent-fg-light);
1162
- --assist-text-light: var(--pinokio-chrome-accent-bg-light);
1163
- }
1164
- body.dark .appcanvas > aside .menu-actions #logs-toggle.has-new {
1165
- --assist-surface-dark: var(--pinokio-chrome-accent-fg-dark);
1166
- --assist-text-dark: var(--pinokio-chrome-accent-bg-dark);
1163
+ .appcanvas > aside .menu-actions #logs-toggle.has-new::before {
1164
+ animation: none;
1165
+ opacity: 1;
1167
1166
  }
1168
1167
  .mobile-nav-logs.has-new {
1169
1168
  background: #64748b;
@@ -1189,28 +1188,36 @@ body.dark .ask-ai-drawer {
1189
1188
  }
1190
1189
  .ask-ai-resizer {
1191
1190
  display: none;
1192
- flex: 0 0 6px;
1191
+ flex: 0 0 7px;
1193
1192
  align-items: stretch;
1194
1193
  justify-content: center;
1195
1194
  cursor: col-resize;
1196
1195
  touch-action: none;
1197
1196
  outline: none;
1197
+ background: transparent;
1198
1198
  }
1199
1199
  .ask-ai-resizer::before {
1200
1200
  content: '';
1201
- width: 2px;
1202
- border-radius: 999px;
1203
- margin: 6px 0;
1204
- background: rgba(0,0,0,0.12);
1201
+ width: 1px;
1202
+ border-radius: 0;
1203
+ margin: 0;
1204
+ background: var(--pinokio-sidebar-separator, rgba(0,0,0,0.08));
1205
+ transition: background 120ms ease;
1206
+ }
1207
+ .ask-ai-resizer:hover::before {
1208
+ background: var(--pinokio-sidebar-separator-hover, rgba(0,0,0,0.14));
1205
1209
  }
1206
1210
  .ask-ai-resizer:focus-visible::before {
1207
- background: rgba(59, 130, 246, 0.45);
1211
+ background: var(--pinokio-sidebar-separator-focus, rgba(59, 130, 246, 0.45));
1208
1212
  }
1209
1213
  body.dark .ask-ai-resizer::before {
1210
- background: rgba(255,255,255,0.18);
1214
+ background: var(--pinokio-sidebar-separator, rgba(255,255,255,0.08));
1215
+ }
1216
+ body.dark .ask-ai-resizer:hover::before {
1217
+ background: var(--pinokio-sidebar-separator-hover, rgba(255,255,255,0.14));
1211
1218
  }
1212
1219
  body.dark .ask-ai-resizer:focus-visible::before {
1213
- background: rgba(96, 165, 250, 0.6);
1220
+ background: var(--pinokio-sidebar-separator-focus, rgba(96, 165, 250, 0.6));
1214
1221
  }
1215
1222
  .appcanvas.panel-open .ask-ai-resizer {
1216
1223
  display: flex;
@@ -1307,10 +1314,10 @@ body.dark .ask-ai-drawer-location-input {
1307
1314
  overflow-y: auto;
1308
1315
  overscroll-behavior: contain;
1309
1316
  -webkit-overflow-scrolling: touch;
1310
- padding: 16px;
1317
+ padding: 18px 20px 20px;
1311
1318
  display: flex;
1312
1319
  flex-direction: column;
1313
- gap: 10px;
1320
+ gap: 12px;
1314
1321
  font-size: 13px;
1315
1322
  color: rgba(0,0,0,0.6);
1316
1323
  }
@@ -1320,72 +1327,141 @@ body.dark .ask-ai-drawer-empty {
1320
1327
  .ask-ai-drawer-empty-title {
1321
1328
  font-size: 14px;
1322
1329
  font-weight: 600;
1330
+ line-height: 1.25;
1323
1331
  color: rgba(15, 23, 42, 0.92);
1324
1332
  }
1325
1333
  body.dark .ask-ai-drawer-empty-title {
1326
1334
  color: rgba(248, 250, 252, 0.95);
1327
1335
  }
1336
+ .ask-ai-drawer-search {
1337
+ display: flex;
1338
+ align-items: center;
1339
+ gap: 8px;
1340
+ min-height: 34px;
1341
+ padding: 0 10px;
1342
+ border: 1px solid rgba(15, 23, 42, 0.1);
1343
+ border-radius: 8px;
1344
+ background: rgba(255, 255, 255, 0.5);
1345
+ color: rgba(31, 41, 55, 0.52);
1346
+ box-sizing: border-box;
1347
+ }
1348
+ .ask-ai-drawer-search:focus-within {
1349
+ border-color: rgba(15, 23, 42, 0.18);
1350
+ color: rgba(31, 41, 55, 0.72);
1351
+ }
1352
+ body.dark .ask-ai-drawer-search {
1353
+ border-color: rgba(255, 255, 255, 0.08);
1354
+ background: rgba(255, 255, 255, 0.035);
1355
+ color: rgba(229, 231, 235, 0.48);
1356
+ }
1357
+ body.dark .ask-ai-drawer-search:focus-within {
1358
+ border-color: rgba(255, 255, 255, 0.16);
1359
+ color: rgba(229, 231, 235, 0.68);
1360
+ }
1361
+ .ask-ai-drawer-search i {
1362
+ flex: 0 0 auto;
1363
+ font-size: 12px;
1364
+ line-height: 1;
1365
+ }
1366
+ .ask-ai-drawer-search-input {
1367
+ width: 100%;
1368
+ min-width: 0;
1369
+ height: 32px;
1370
+ border: 0;
1371
+ outline: 0;
1372
+ padding: 0;
1373
+ background: transparent;
1374
+ color: rgba(17, 24, 39, 0.92);
1375
+ font: inherit;
1376
+ font-size: 13px;
1377
+ line-height: 1;
1378
+ }
1379
+ body.dark .ask-ai-drawer-search-input {
1380
+ color: rgba(248, 250, 252, 0.92);
1381
+ }
1382
+ .ask-ai-drawer-search-input::placeholder {
1383
+ color: rgba(31, 41, 55, 0.48);
1384
+ }
1385
+ body.dark .ask-ai-drawer-search-input::placeholder {
1386
+ color: rgba(229, 231, 235, 0.42);
1387
+ }
1328
1388
  .ask-ai-drawer-picker-list {
1329
1389
  display: flex;
1330
1390
  flex-direction: column;
1331
- gap: 12px;
1391
+ gap: 16px;
1332
1392
  }
1333
1393
  .ask-ai-drawer-picker-group {
1334
1394
  display: flex;
1335
1395
  flex-direction: column;
1336
- gap: 8px;
1396
+ gap: 2px;
1337
1397
  }
1338
1398
  .ask-ai-drawer-picker-group-label {
1339
1399
  font-size: 11px;
1340
1400
  font-weight: 600;
1341
- letter-spacing: 0.04em;
1401
+ letter-spacing: 0.03em;
1342
1402
  text-transform: uppercase;
1343
- opacity: 0.7;
1403
+ opacity: 0.58;
1404
+ padding: 0 2px 3px;
1344
1405
  }
1345
1406
  .ask-ai-drawer-picker-option {
1407
+ appearance: none;
1408
+ -webkit-appearance: none;
1346
1409
  width: 100%;
1347
- display: flex;
1410
+ display: grid;
1411
+ grid-template-columns: 28px minmax(0, 1fr);
1348
1412
  align-items: center;
1349
- gap: 10px;
1413
+ column-gap: 10px;
1350
1414
  text-align: left;
1351
- border: 1px solid rgba(0,0,0,0.12);
1415
+ border: 1px solid rgba(15, 23, 42, 0.045);
1352
1416
  border-radius: 6px;
1353
- padding: 8px 10px;
1354
- background: rgba(255,255,255,0.9);
1417
+ min-height: 38px;
1418
+ padding: 5px 8px;
1419
+ background: rgba(15, 23, 42, 0.022);
1355
1420
  color: rgba(15, 23, 42, 0.95);
1421
+ font: inherit;
1422
+ font-size: 13px;
1423
+ font-weight: 500;
1424
+ line-height: 1.2;
1356
1425
  cursor: pointer;
1426
+ box-sizing: border-box;
1427
+ transition: background 0.14s ease, border-color 0.14s ease, color 0.14s ease;
1357
1428
  }
1358
1429
  .ask-ai-drawer-picker-option:hover {
1359
- border-color: rgba(59, 130, 246, 0.6);
1360
- background: rgba(239, 246, 255, 0.95);
1430
+ border-color: rgba(15, 23, 42, 0.075);
1431
+ background: var(--pinokio-sidebar-tab-hover);
1361
1432
  }
1362
1433
  body.dark .ask-ai-drawer-picker-option {
1363
- border-color: rgba(255,255,255,0.12);
1364
- background: rgba(15, 17, 21, 0.9);
1434
+ border-color: rgba(255, 255, 255, 0.045);
1435
+ background: rgba(255, 255, 255, 0.018);
1365
1436
  color: rgba(248, 250, 252, 0.95);
1366
1437
  }
1367
1438
  body.dark .ask-ai-drawer-picker-option:hover {
1368
- border-color: rgba(96, 165, 250, 0.7);
1369
- background: rgba(30, 41, 59, 0.95);
1439
+ border-color: rgba(255, 255, 255, 0.075);
1440
+ background: var(--pinokio-sidebar-tab-hover);
1370
1441
  }
1371
1442
  .ask-ai-drawer-picker-icon {
1372
1443
  width: 18px;
1373
1444
  height: 18px;
1374
1445
  border-radius: 4px;
1375
1446
  object-fit: cover;
1376
- flex: 0 0 auto;
1447
+ justify-self: center;
1377
1448
  }
1378
1449
  .ask-ai-drawer-picker-icon-fallback {
1379
1450
  width: 18px;
1380
1451
  height: 18px;
1381
- border-radius: 4px;
1452
+ border-radius: 5px;
1382
1453
  display: inline-flex;
1383
1454
  align-items: center;
1384
1455
  justify-content: center;
1385
- flex: 0 0 auto;
1386
- background: rgba(148, 163, 184, 0.35);
1456
+ justify-self: center;
1457
+ background: rgba(148, 163, 184, 0.22);
1458
+ color: rgba(31, 41, 55, 0.82);
1387
1459
  font-size: 10px;
1388
1460
  }
1461
+ body.dark .ask-ai-drawer-picker-icon-fallback {
1462
+ background: rgba(148, 163, 184, 0.18);
1463
+ color: rgba(248, 250, 252, 0.82);
1464
+ }
1389
1465
  .ask-ai-drawer-picker-copy {
1390
1466
  min-width: 0;
1391
1467
  flex: 1 1 auto;
@@ -1401,13 +1477,16 @@ body.dark .ask-ai-drawer-picker-option:hover {
1401
1477
  .ask-ai-drawer-picker-meta {
1402
1478
  font-size: 11px;
1403
1479
  line-height: 1.2;
1404
- opacity: 0.7;
1480
+ opacity: 0.62;
1405
1481
  margin-top: 2px;
1406
1482
  }
1407
1483
  .ask-ai-drawer-picker-status {
1408
1484
  font-size: 12px;
1409
1485
  line-height: 1.4;
1410
1486
  }
1487
+ .ask-ai-drawer-picker-status:empty {
1488
+ display: none;
1489
+ }
1411
1490
  .ask-ai-frame {
1412
1491
  width: 100%;
1413
1492
  height: 100%;
@@ -1433,28 +1512,36 @@ body.dark .event-launch-drawer {
1433
1512
  }
1434
1513
  .event-launch-resizer {
1435
1514
  display: none;
1436
- flex: 0 0 6px;
1515
+ flex: 0 0 7px;
1437
1516
  align-items: stretch;
1438
1517
  justify-content: center;
1439
1518
  cursor: col-resize;
1440
1519
  touch-action: none;
1441
1520
  outline: none;
1521
+ background: transparent;
1442
1522
  }
1443
1523
  .event-launch-resizer::before {
1444
1524
  content: '';
1445
- width: 2px;
1446
- border-radius: 999px;
1447
- margin: 6px 0;
1448
- background: rgba(0,0,0,0.12);
1525
+ width: 1px;
1526
+ border-radius: 0;
1527
+ margin: 0;
1528
+ background: var(--pinokio-sidebar-separator, rgba(0,0,0,0.08));
1529
+ transition: background 120ms ease;
1530
+ }
1531
+ .event-launch-resizer:hover::before {
1532
+ background: var(--pinokio-sidebar-separator-hover, rgba(0,0,0,0.14));
1449
1533
  }
1450
1534
  .event-launch-resizer:focus-visible::before {
1451
- background: rgba(59, 130, 246, 0.45);
1535
+ background: var(--pinokio-sidebar-separator-focus, rgba(59, 130, 246, 0.45));
1452
1536
  }
1453
1537
  body.dark .event-launch-resizer::before {
1454
- background: rgba(255,255,255,0.18);
1538
+ background: var(--pinokio-sidebar-separator, rgba(255,255,255,0.08));
1539
+ }
1540
+ body.dark .event-launch-resizer:hover::before {
1541
+ background: var(--pinokio-sidebar-separator-hover, rgba(255,255,255,0.14));
1455
1542
  }
1456
1543
  body.dark .event-launch-resizer:focus-visible::before {
1457
- background: rgba(96, 165, 250, 0.6);
1544
+ background: var(--pinokio-sidebar-separator-focus, rgba(96, 165, 250, 0.6));
1458
1545
  }
1459
1546
  .appcanvas.event-drawer-open .event-launch-resizer {
1460
1547
  display: flex;
@@ -1558,10 +1645,10 @@ body.dark .event-launch-frame {
1558
1645
  }
1559
1646
  .appcanvas.vertical {
1560
1647
  flex-direction: row;
1561
- --appcanvas-sidebar-width: 252px;
1648
+ --appcanvas-sidebar-width: 224px;
1562
1649
  }
1563
1650
  .appcanvas.vertical.dev-workspace {
1564
- --appcanvas-sidebar-width: 260px;
1651
+ --appcanvas-sidebar-width: 236px;
1565
1652
  }
1566
1653
  .appcanvas.vertical.dev-workspace .menu-container {
1567
1654
  overflow: visible;
@@ -1573,56 +1660,58 @@ body.dark .event-launch-frame {
1573
1660
  gap: 2px;
1574
1661
  flex: 0 0 auto;
1575
1662
  min-width: 0;
1576
- width: calc(100% - 16px);
1577
- margin: 0 8px 0 8px;
1578
- padding: 3px;
1579
- border-radius: 7px;
1580
- border: 1px solid rgba(15, 23, 42, 0.055);
1581
- background: rgba(15, 23, 42, 0.035);
1663
+ width: 100%;
1664
+ margin: 0 0 8px;
1665
+ padding: 2px;
1666
+ border-radius: 8px;
1667
+ border: 1px solid var(--pinokio-sidebar-tabbar-border);
1668
+ background: var(--pinokio-sidebar-control-bg);
1582
1669
  box-sizing: border-box;
1583
1670
  }
1584
1671
  body.dark .appcanvas > aside .workspace-mode-switch {
1585
- border-color: rgba(255, 255, 255, 0.075);
1586
- background: rgba(255, 255, 255, 0.045);
1672
+ background: var(--pinokio-sidebar-control-bg);
1587
1673
  }
1588
1674
  .workspace-mode-link {
1589
1675
  flex: 1 1 0;
1590
1676
  min-width: 0;
1591
- min-height: 26px;
1677
+ min-height: 28px;
1592
1678
  display: inline-flex;
1593
1679
  align-items: center;
1594
1680
  justify-content: center;
1595
1681
  gap: 6px;
1596
- padding: 0 8px;
1597
- border-radius: 5px;
1682
+ padding: 0 10px;
1683
+ border-radius: 6px;
1598
1684
  color: var(--pinokio-sidebar-tab-muted);
1599
1685
  text-decoration: none;
1600
- font-size: 12px;
1601
- font-weight: 700;
1686
+ font-size: 13px;
1687
+ font-weight: 500;
1602
1688
  line-height: 1;
1603
1689
  box-sizing: border-box;
1604
1690
  }
1605
1691
  .workspace-mode-link:hover {
1606
- color: #111827;
1607
- background: rgba(255, 255, 255, 0.44);
1692
+ color: var(--pinokio-sidebar-tab-active-color);
1693
+ background: var(--pinokio-sidebar-tab-hover);
1608
1694
  }
1609
1695
  .workspace-mode-link.selected {
1610
- color: #111827;
1611
- background: rgba(255, 255, 255, 0.76);
1612
- box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.055);
1696
+ color: var(--pinokio-sidebar-tab-active-color);
1697
+ background: var(--pinokio-sidebar-control-active-bg);
1698
+ box-shadow: none;
1613
1699
  }
1614
1700
  body.dark .workspace-mode-link.selected {
1615
- color: rgba(248, 250, 252, 0.94);
1616
- background: rgba(255, 255, 255, 0.09);
1617
- box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.075);
1701
+ color: var(--pinokio-sidebar-tab-active-color);
1702
+ background: var(--pinokio-sidebar-control-active-bg);
1703
+ box-shadow: none;
1618
1704
  }
1619
1705
  body.dark .workspace-mode-link:hover {
1620
- color: rgba(248, 250, 252, 0.94);
1621
- background: rgba(255, 255, 255, 0.07);
1706
+ color: var(--pinokio-sidebar-tab-active-color);
1707
+ background: var(--pinokio-sidebar-tab-hover);
1622
1708
  }
1623
1709
  .workspace-mode-link i {
1624
- font-size: 11px;
1710
+ width: 16px;
1711
+ flex: 0 0 16px;
1712
+ font-size: 12px;
1625
1713
  line-height: 1;
1714
+ text-align: center;
1626
1715
  }
1627
1716
  .workspace-mode-community-proxy {
1628
1717
  display: none !important;
@@ -1637,9 +1726,9 @@ body.dark .workspace-mode-link:hover {
1637
1726
  }
1638
1727
  .appcanvas.vertical.dev-workspace #devtab.selected,
1639
1728
  .appcanvas.vertical.dev-workspace #filestab.selected {
1640
- color: var(--app-page-accent, var(--pinokio-sidebar-tab-active-color)) !important;
1641
- background: var(--app-page-selected-item-bg, var(--pinokio-sidebar-tab-active-bg)) !important;
1642
- box-shadow: 0 4px 12px var(--pinokio-sidebar-tab-shadow);
1729
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1730
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
1731
+ box-shadow: none;
1643
1732
  }
1644
1733
  .appcanvas.vertical.dev-workspace #devtab .tab,
1645
1734
  .appcanvas.vertical.dev-workspace #filestab .tab {
@@ -1650,10 +1739,10 @@ body.dark .workspace-mode-link:hover {
1650
1739
  color: inherit;
1651
1740
  }
1652
1741
  .appcanvas.vertical > aside .header-item {
1653
- border-radius: 0;
1742
+ border-radius: var(--sidebar-tab-radius);
1654
1743
  }
1655
1744
  .appcanvas.vertical #devtab {
1656
- border-radius: 0;
1745
+ border-radius: var(--sidebar-tab-radius);
1657
1746
  }
1658
1747
  .appcanvas.vertical img.meta-icon {
1659
1748
  /*
@@ -1725,20 +1814,24 @@ body.dark .appcanvas_filler {
1725
1814
  background: rgba(0, 0, 0, 0.15);
1726
1815
  }
1727
1816
  */
1817
+ .appcanvas.vertical .appcanvas-resizer:hover::before {
1818
+ background: var(--pinokio-sidebar-separator-hover);
1819
+ }
1728
1820
  .appcanvas.vertical .appcanvas-resizer::before {
1729
1821
  content: '';
1730
- width: 5px;
1731
- border-radius: 999px;
1732
- margin: 3px 0;
1822
+ width: 1px;
1823
+ border-radius: 0;
1824
+ margin: 0;
1825
+ background: var(--pinokio-sidebar-separator);
1733
1826
  }
1734
1827
  .appcanvas.vertical .appcanvas-resizer:focus-visible::before {
1735
- background: rgba(59, 130, 246, 0.45);
1828
+ background: var(--pinokio-sidebar-separator-focus);
1736
1829
  }
1737
1830
  body.dark .appcanvas.vertical .appcanvas-resizer:hover::before {
1738
- background: rgba(255, 255, 255, 0.3);
1831
+ background: var(--pinokio-sidebar-separator-hover);
1739
1832
  }
1740
1833
  body.dark .appcanvas.vertical .appcanvas-resizer:focus-visible::before {
1741
- background: rgba(96, 165, 250, 0.6);
1834
+ background: var(--pinokio-sidebar-separator-focus);
1742
1835
  }
1743
1836
  .appcanvas.vertical > aside .header-item {
1744
1837
  max-width: none;
@@ -1757,10 +1850,10 @@ body.dark .appcanvas.vertical .appcanvas-resizer:focus-visible::before {
1757
1850
  }
1758
1851
 
1759
1852
  body.dark .appcanvas > aside {
1760
- background: rgba(255, 255, 255, 0.04);
1853
+ background: var(--pinokio-sidebar-tabbar-bg);
1761
1854
  }
1762
1855
  .appcanvas > aside {
1763
- background: rgba(0, 0, 0, 0.04);
1856
+ background: var(--pinokio-sidebar-tabbar-bg);
1764
1857
  order: 0;
1765
1858
  position: relative;
1766
1859
  display: flex;
@@ -1774,9 +1867,9 @@ body.dark .appcanvas > aside {
1774
1867
  /*
1775
1868
  padding: 0 12px;
1776
1869
  */
1777
- gap: 6px;
1870
+ gap: 0;
1778
1871
  overflow: hidden;
1779
- --sidebar-tab-radius: 8px 8px 0 0;
1872
+ --sidebar-tab-radius: 6px;
1780
1873
  --sidebar-tab-selected-translate: 0;
1781
1874
  --sidebar-tab-outline: var(--pinokio-sidebar-tabbar-border);
1782
1875
  }
@@ -1811,17 +1904,21 @@ body.dark .appcanvas > aside {
1811
1904
  flex-direction: row;
1812
1905
  align-items: stretch;
1813
1906
  gap: 0;
1814
- padding: 0;
1907
+ padding: 8px;
1815
1908
  overflow: hidden;
1816
1909
  scrollbar-width: thin;
1817
1910
  flex: 1 1 auto;
1818
1911
  min-height: 0;
1912
+ box-sizing: border-box;
1913
+ }
1914
+ .appcanvas.vertical > aside .menu-container {
1915
+ padding: 8px 8px 8px;
1819
1916
  }
1820
1917
  .appcanvas > aside .menu-scroller {
1821
1918
  display: flex;
1822
1919
  flex-direction: row;
1823
1920
  align-items: center;
1824
- gap: 6px;
1921
+ gap: 1px;
1825
1922
  padding: 0;
1826
1923
  overflow-x: auto;
1827
1924
  overflow-y: hidden;
@@ -1856,11 +1953,10 @@ body.dark .appcanvas > aside .menu-scroller.menu-scrollable.scroll-left::before
1856
1953
  .appcanvas > aside .menu-actions {
1857
1954
  display: flex;
1858
1955
  align-items: flex-end;
1859
- gap: 6px;
1956
+ gap: 1px;
1860
1957
  flex: 0 0 auto;
1861
1958
  margin-left: auto;
1862
- padding-right: 6px;
1863
- padding-left: 6px;
1959
+ padding: 5px 0 0;
1864
1960
  border-left: 1px solid rgba(0,0,0,0.08);
1865
1961
  background: transparent;
1866
1962
  }
@@ -1869,30 +1965,33 @@ body.dark .appcanvas > aside .menu-actions {
1869
1965
  background: transparent;
1870
1966
  }
1871
1967
  .appcanvas > aside .menu-actions .header-item {
1872
- height: 100%;
1968
+ min-height: 28px;
1969
+ height: auto;
1873
1970
  min-width: 0;
1874
1971
  padding: 4px 8px;
1875
1972
  border: 0 !important;
1876
- background: var(--assist-surface-light) !important;
1877
- color: #fff !important;
1973
+ border-radius: var(--sidebar-tab-radius);
1974
+ background: transparent !important;
1975
+ color: var(--pinokio-sidebar-tab-muted) !important;
1878
1976
  box-shadow: none;
1879
- transition: none;
1977
+ transition: background 0.16s ease, color 0.16s ease;
1880
1978
  }
1881
1979
  body.dark .appcanvas > aside .menu-actions .header-item {
1882
- background: var(--assist-surface-dark) !important;
1883
- color: #fff !important;
1980
+ background: transparent !important;
1981
+ color: var(--pinokio-sidebar-tab-muted) !important;
1884
1982
  }
1885
1983
  .appcanvas > aside .menu-actions .header-item .display {
1886
1984
  display: block;
1887
- font-size: 12px;
1985
+ font-size: 13px;
1986
+ line-height: 1.15;
1888
1987
  white-space: nowrap;
1889
- font-weight: 700;
1988
+ font-weight: 500;
1890
1989
  }
1891
1990
  .appcanvas > aside .menu-actions .header-item .flexible {
1892
1991
  display: none;
1893
1992
  }
1894
1993
  .appcanvas > aside .menu-actions .header-item .tab {
1895
- gap: 0;
1994
+ gap: 8px;
1896
1995
  }
1897
1996
  .appcanvas > aside .menu-actions .header-item .tab .menu-action-leading-icon {
1898
1997
  width: 16px;
@@ -1902,14 +2001,16 @@ body.dark .appcanvas > aside .menu-actions .header-item {
1902
2001
  align-items: center;
1903
2002
  justify-content: center;
1904
2003
  line-height: 1;
1905
- margin-right: 5px;
2004
+ margin-right: 0;
2005
+ padding: 0;
2006
+ opacity: 0.9;
1906
2007
  }
1907
2008
  .appcanvas > aside .menu-actions .header-item .tab i.menu-action-leading-icon {
1908
- font-size: 14px;
2009
+ font-size: 13px;
1909
2010
  }
1910
2011
  .appcanvas > aside .menu-actions #community-toggle .menu-action-leading-icon {
1911
- margin-right: 3px;
1912
- font-size: 15px;
2012
+ margin-right: 0;
2013
+ font-size: 14px;
1913
2014
  }
1914
2015
  .appcanvas > aside .menu-actions .header-item .tab .ask-ai-brand-icon {
1915
2016
  background: currentColor;
@@ -1918,46 +2019,46 @@ body.dark .appcanvas > aside .menu-actions .header-item {
1918
2019
  }
1919
2020
  .appcanvas > aside .menu-actions .header-item:hover,
1920
2021
  .appcanvas > aside .menu-actions .header-item:focus-visible {
1921
- background: var(--assist-surface-light) !important;
1922
- color: #fff !important;
2022
+ background: var(--pinokio-sidebar-tab-hover) !important;
2023
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1923
2024
  box-shadow: none;
1924
2025
  }
1925
2026
  body.dark .appcanvas > aside .menu-actions .header-item:hover,
1926
2027
  body.dark .appcanvas > aside .menu-actions .header-item:focus-visible {
1927
- background: var(--assist-surface-dark) !important;
1928
- color: #fff !important;
2028
+ background: var(--pinokio-sidebar-tab-hover) !important;
2029
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1929
2030
  box-shadow: none;
1930
2031
  }
1931
2032
  .appcanvas.community-open .menu-actions #community-toggle,
1932
2033
  .appcanvas.community-open .menu-actions #community-toggle:hover,
1933
2034
  .appcanvas.community-open .menu-actions #community-toggle:focus-visible,
1934
2035
  .appcanvas.community-open .menu-actions #community-toggle.selected {
1935
- background: var(--assist-surface-light-open) !important;
1936
- color: #fff !important;
2036
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2037
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1937
2038
  box-shadow: none;
1938
2039
  }
1939
2040
  body.dark .appcanvas.community-open .menu-actions #community-toggle,
1940
2041
  body.dark .appcanvas.community-open .menu-actions #community-toggle:hover,
1941
2042
  body.dark .appcanvas.community-open .menu-actions #community-toggle:focus-visible,
1942
2043
  body.dark .appcanvas.community-open .menu-actions #community-toggle.selected {
1943
- background: var(--assist-surface-dark-open) !important;
1944
- color: #fff !important;
2044
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2045
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1945
2046
  box-shadow: none;
1946
2047
  }
1947
2048
  .appcanvas.panel-open .menu-actions #ask-ai-tab,
1948
2049
  .appcanvas.panel-open .menu-actions #ask-ai-tab:hover,
1949
2050
  .appcanvas.panel-open .menu-actions #ask-ai-tab:focus-visible,
1950
2051
  .appcanvas.panel-open .menu-actions #ask-ai-tab.selected {
1951
- background: var(--assist-surface-light-open) !important;
1952
- color: #fff !important;
2052
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2053
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1953
2054
  box-shadow: none;
1954
2055
  }
1955
2056
  body.dark .appcanvas.panel-open .menu-actions #ask-ai-tab,
1956
2057
  body.dark .appcanvas.panel-open .menu-actions #ask-ai-tab:hover,
1957
2058
  body.dark .appcanvas.panel-open .menu-actions #ask-ai-tab:focus-visible,
1958
2059
  body.dark .appcanvas.panel-open .menu-actions #ask-ai-tab.selected {
1959
- background: var(--assist-surface-dark-open) !important;
1960
- color: #fff !important;
2060
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2061
+ color: var(--pinokio-sidebar-tab-active-color) !important;
1961
2062
  box-shadow: none;
1962
2063
  }
1963
2064
  .appcanvas.vertical .menu-scroller {
@@ -1980,9 +2081,9 @@ body.dark .appcanvas.panel-open .menu-actions #ask-ai-tab.selected {
1980
2081
  .appcanvas.vertical .menu-actions {
1981
2082
  flex-direction: column;
1982
2083
  align-items: stretch;
1983
- gap: 0;
2084
+ gap: 1px;
1984
2085
  margin-top: auto;
1985
- padding: 0;
2086
+ padding: 5px 0 0;
1986
2087
  width: 100%;
1987
2088
  border-left: 0;
1988
2089
  border-top: none;
@@ -1991,14 +2092,14 @@ body.dark .appcanvas.vertical .menu-actions {
1991
2092
  border-top: none;
1992
2093
  }
1993
2094
  .appcanvas.vertical > aside .menu-actions .header-item + .header-item {
1994
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12) !important;
2095
+ box-shadow: none !important;
1995
2096
  }
1996
2097
  body.dark .appcanvas.vertical > aside .menu-actions .header-item + .header-item {
1997
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
2098
+ box-shadow: none !important;
1998
2099
  }
1999
2100
  .appcanvas.vertical.dev-workspace .menu-actions.dev-menu-actions {
2000
- gap: 0;
2001
- padding: 0;
2101
+ gap: 1px;
2102
+ padding: 5px 0 0;
2002
2103
  border-left: 0;
2003
2104
  border-top: 0;
2004
2105
  overflow: visible;
@@ -2023,14 +2124,14 @@ body.dark .appcanvas.vertical > aside .menu-actions .header-item + .header-item
2023
2124
  width: 100%;
2024
2125
  }
2025
2126
  .appcanvas.vertical.dev-workspace .menu-actions.dev-menu-actions #fs-status .fs-status-btn {
2026
- min-height: 0;
2127
+ min-height: 30px;
2027
2128
  justify-content: flex-start;
2028
- padding: 6px 8px 5px;
2029
- border-radius: 0;
2129
+ padding: 5px 8px;
2130
+ border-radius: var(--sidebar-tab-radius);
2030
2131
  gap: 8px;
2031
2132
  background: transparent !important;
2032
2133
  box-shadow: none;
2033
- transition: none;
2134
+ transition: background 0.16s ease, color 0.16s ease;
2034
2135
  color: var(--pinokio-sidebar-tab-muted);
2035
2136
  line-height: 1.25;
2036
2137
  }
@@ -2096,7 +2197,7 @@ body.dark .appcanvas.vertical > aside .menu-actions .header-item + .header-item
2096
2197
  .appcanvas.vertical.dev-workspace .menu-actions.dev-menu-actions #fs-status .fs-dropdown-item {
2097
2198
  min-height: 0;
2098
2199
  padding: 6px 8px 6px 34px;
2099
- border-radius: 0;
2200
+ border-radius: 6px;
2100
2201
  gap: 8px;
2101
2202
  font-size: 12px;
2102
2203
  }
@@ -2146,18 +2247,18 @@ body.dark .appcanvas > aside .menu-scroller::-webkit-scrollbar-thumb {
2146
2247
  }
2147
2248
 
2148
2249
  .appcanvas > aside .active-nested-path .header-item.is-current {
2149
- font-weight: bold;
2250
+ font-weight: 500;
2150
2251
  color: var(--pinokio-sidebar-tab-active-color);
2151
- box-shadow: 0 4px 12px var(--pinokio-sidebar-tab-shadow);
2152
- background: white !important;
2153
- border-bottom: none;
2252
+ box-shadow: none;
2253
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2254
+ border: none;
2154
2255
  z-index: 1;
2155
2256
  }
2156
2257
 
2157
2258
  body.dark .appcanvas > aside .active-nested-path .header-item.is-current {
2158
- background: rgb(27, 28, 29) !important;
2259
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2159
2260
  border: none;
2160
- box-shadow: rgba(67, 71, 85, 0.27) 0px 0px 0.25em, rgba(90, 125, 188, 0.05) 0px 0.25em 1em;
2261
+ box-shadow: none;
2161
2262
  }
2162
2263
 
2163
2264
  .appcanvas > aside .header-item {
@@ -2168,14 +2269,16 @@ body.dark .appcanvas > aside .active-nested-path .header-item.is-current {
2168
2269
  min-width: 120px;
2169
2270
  display: flex;
2170
2271
  align-items: center;
2171
- gap: 8px;
2272
+ gap: 7px;
2273
+ min-height: 28px;
2172
2274
  padding: 4px 8px;
2173
2275
  border: 1px solid transparent;
2276
+ border-radius: var(--sidebar-tab-radius);
2174
2277
  background: transparent;
2175
2278
  color: var(--pinokio-sidebar-tab-muted);
2176
2279
  line-height: 1.2;
2177
2280
  overflow: hidden;
2178
- transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
2281
+ transition: background 0.16s ease, color 0.16s ease, border-color 0.16s ease;
2179
2282
  }
2180
2283
 
2181
2284
  .appcanvas > aside .submenu {
@@ -2187,9 +2290,9 @@ body.dark .appcanvas > aside .active-nested-path .header-item.is-current {
2187
2290
  }
2188
2291
 
2189
2292
  .appcanvas > aside .m.menu .nested-menu > .submenu {
2190
- margin: 2px 0 4px 14px;
2293
+ margin: 1px 0 4px 8px;
2191
2294
  padding: 0 0 0 8px;
2192
- border-left: 1px solid var(--pinokio-sidebar-tabbar-border);
2295
+ border-left: 0;
2193
2296
  background: transparent;
2194
2297
  box-shadow: none;
2195
2298
  display: flex;
@@ -2202,7 +2305,7 @@ body.dark .appcanvas > aside .active-nested-path .header-item.is-current {
2202
2305
  }
2203
2306
 
2204
2307
  body.dark .appcanvas > aside .m.menu .nested-menu > .submenu {
2205
- border-color: rgba(67, 71, 85, 0.52);
2308
+ border-color: transparent;
2206
2309
  }
2207
2310
 
2208
2311
  .appcanvas > aside .m.menu .nested-menu > .submenu.hidden {
@@ -2212,14 +2315,14 @@ body.dark .appcanvas > aside .m.menu .nested-menu > .submenu {
2212
2315
  .appcanvas > aside .m.menu .nested-menu.is-open > .reveal {
2213
2316
  background: var(--pinokio-sidebar-tab-active-bg);
2214
2317
  color: var(--pinokio-sidebar-tab-active-color);
2215
- border-color: var(--sidebar-tab-outline);
2216
- box-shadow: 0 4px 12px var(--pinokio-sidebar-tab-shadow);
2318
+ border-color: transparent;
2319
+ box-shadow: none;
2217
2320
  }
2218
2321
 
2219
2322
  body.dark .appcanvas > aside .m.menu .nested-menu.is-open > .reveal {
2220
- background: rgba(27, 28, 29, 0.98);
2323
+ background: var(--pinokio-sidebar-tab-active-bg);
2221
2324
  color: var(--pinokio-sidebar-tab-active-color);
2222
- border-color: rgba(59, 130, 246, 0.28);
2325
+ border-color: transparent;
2223
2326
  }
2224
2327
 
2225
2328
  .appcanvas > aside .m.menu .nested-menu > .submenu .header-item,
@@ -2228,8 +2331,9 @@ body.dark .appcanvas > aside .m.menu .nested-menu.is-open > .reveal {
2228
2331
  width: 100%;
2229
2332
  max-width: none;
2230
2333
  min-width: 0;
2231
- padding: 6px 8px;
2232
- border-radius: 0;
2334
+ min-height: 28px;
2335
+ padding: 4px 8px;
2336
+ border-radius: var(--sidebar-tab-radius);
2233
2337
  border: 1px solid transparent;
2234
2338
  background: transparent !important;
2235
2339
  color: var(--pinokio-sidebar-tab-muted);
@@ -2315,12 +2419,12 @@ body.dark .appcanvas > aside .header-item.btn:not(.selected) {
2315
2419
  }
2316
2420
 
2317
2421
  body.dark .appcanvas > aside .header-item.selected {
2318
- background: rgb(27, 28, 29) !important;
2422
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2319
2423
  border: none;
2320
- box-shadow: rgba(67, 71, 85, 0.27) 0px 0px 0.25em, rgba(90, 125, 188, 0.05) 0px 0.25em 1em;
2424
+ box-shadow: none;
2321
2425
  }
2322
2426
  .appcanvas > aside .header-item.selected {
2323
- font-weight: bold;
2427
+ font-weight: 500;
2324
2428
  /*
2325
2429
  color: royalblue;
2326
2430
  border-color: var(--pinokio-sidebar-tab-active-bg);
@@ -2329,13 +2433,13 @@ body.dark .appcanvas > aside .header-item.selected {
2329
2433
  /*
2330
2434
  border-color: var(--sidebar-tab-outline);
2331
2435
  */
2332
- box-shadow: 0 4px 12px var(--pinokio-sidebar-tab-shadow);
2333
- background: white !important;
2334
- border-bottom: none;
2436
+ box-shadow: none;
2437
+ background: var(--pinokio-sidebar-tab-active-bg) !important;
2438
+ border: none;
2335
2439
  z-index: 1;
2336
2440
  }
2337
2441
  header.navheader.minimized + .appcanvas > aside .menu-container {
2338
- padding: 8px 0 0;
2442
+ padding: 8px 8px 8px;
2339
2443
  }
2340
2444
 
2341
2445
  main {
@@ -2881,6 +2985,93 @@ body.dark aside .btn {
2881
2985
  height: 20px;
2882
2986
  padding: 0;
2883
2987
  }
2988
+ .appcanvas.vertical > aside .header-item .tab,
2989
+ .appcanvas.vertical > aside .menu-actions .header-item .tab {
2990
+ gap: 8px;
2991
+ padding-right: 0;
2992
+ font-size: 13px;
2993
+ font-weight: 500;
2994
+ }
2995
+ .appcanvas.vertical > aside .header-item > .fa-circle {
2996
+ display: none !important;
2997
+ }
2998
+ .appcanvas.vertical > aside .header-item .tab > i:first-child {
2999
+ width: 16px;
3000
+ height: 16px;
3001
+ flex: 0 0 16px;
3002
+ display: inline-flex;
3003
+ align-items: center;
3004
+ justify-content: center;
3005
+ margin-right: 0;
3006
+ padding: 0;
3007
+ color: var(--pinokio-sidebar-icon-muted);
3008
+ font-size: 14px;
3009
+ line-height: 1;
3010
+ opacity: 0.82;
3011
+ }
3012
+ .appcanvas.vertical > aside .header-item:hover .tab > i:first-child,
3013
+ .appcanvas.vertical > aside .header-item:focus-within .tab > i:first-child,
3014
+ .appcanvas.vertical > aside .header-item.selected .tab > i:first-child,
3015
+ .appcanvas.vertical > aside .m.menu .nested-menu.is-open > .reveal .tab > i:first-child {
3016
+ color: var(--pinokio-sidebar-icon-active);
3017
+ opacity: 0.95;
3018
+ }
3019
+ .appcanvas.vertical > aside .header-item > .loader,
3020
+ .appcanvas.vertical > aside .header-item > .fa-angle-right {
3021
+ width: 16px;
3022
+ min-width: 16px;
3023
+ height: 16px;
3024
+ margin-left: auto;
3025
+ display: inline-flex;
3026
+ align-items: center;
3027
+ justify-content: center;
3028
+ color: var(--pinokio-sidebar-action-muted);
3029
+ font-size: 12px;
3030
+ line-height: 1;
3031
+ opacity: 0.42;
3032
+ transition: opacity 0.14s ease, color 0.14s ease;
3033
+ }
3034
+ .appcanvas.vertical > aside .header-item > .loader i,
3035
+ .appcanvas.vertical > aside .header-item > .fa-angle-right {
3036
+ font-size: 12px;
3037
+ line-height: 1;
3038
+ }
3039
+ .appcanvas.vertical > aside .header-item > .loader.shutdown {
3040
+ opacity: 0.58;
3041
+ }
3042
+ .appcanvas.vertical > aside .header-item:hover > .loader,
3043
+ .appcanvas.vertical > aside .header-item:focus-within > .loader,
3044
+ .appcanvas.vertical > aside .header-item.selected > .loader,
3045
+ .appcanvas.vertical > aside .header-item:hover > .fa-angle-right,
3046
+ .appcanvas.vertical > aside .header-item:focus-within > .fa-angle-right,
3047
+ .appcanvas.vertical > aside .header-item.selected > .fa-angle-right {
3048
+ opacity: 0.72;
3049
+ color: var(--pinokio-sidebar-icon-active);
3050
+ }
3051
+ .appcanvas.vertical > aside .header-item .tab .fa-ellipsis,
3052
+ .appcanvas.vertical > aside .header-item .tab .fa-ellipsis-h,
3053
+ .appcanvas.vertical > aside .header-item .tab .fa-ellipsis-vertical {
3054
+ width: 16px;
3055
+ flex: 0 0 16px;
3056
+ margin-left: auto;
3057
+ margin-right: 0;
3058
+ color: var(--pinokio-sidebar-action-muted);
3059
+ font-size: 12px;
3060
+ opacity: 0;
3061
+ transition: opacity 0.14s ease, color 0.14s ease;
3062
+ }
3063
+ .appcanvas.vertical > aside .header-item:hover .tab .fa-ellipsis,
3064
+ .appcanvas.vertical > aside .header-item:hover .tab .fa-ellipsis-h,
3065
+ .appcanvas.vertical > aside .header-item:hover .tab .fa-ellipsis-vertical,
3066
+ .appcanvas.vertical > aside .header-item:focus-within .tab .fa-ellipsis,
3067
+ .appcanvas.vertical > aside .header-item:focus-within .tab .fa-ellipsis-h,
3068
+ .appcanvas.vertical > aside .header-item:focus-within .tab .fa-ellipsis-vertical {
3069
+ opacity: 0.62;
3070
+ }
3071
+ .appcanvas.vertical > aside .header-item .tab .display,
3072
+ .appcanvas.vertical > aside .frame-link .tab .display {
3073
+ font-weight: 500;
3074
+ }
2884
3075
  /*
2885
3076
  body.dark .dynamic .submenu {
2886
3077
  border-left: 5px solid white;
@@ -2899,8 +3090,8 @@ body.dark .dynamic .submenu {
2899
3090
  }
2900
3091
  .appcanvas.vertical > aside .dynamic .submenu .frame-link,
2901
3092
  .appcanvas.vertical > aside .dynamic .submenu .header-item {
2902
- padding-top: 6px;
2903
- padding-bottom: 5px;
3093
+ padding-top: 4px;
3094
+ padding-bottom: 4px;
2904
3095
  }
2905
3096
  .appcanvas.vertical > aside .dynamic .submenu .header-item .tab:not(.has-preview),
2906
3097
  .appcanvas.vertical > aside .dynamic .submenu .frame-link .tab:not(.has-preview) {
@@ -3257,15 +3448,15 @@ body.dark .disk-usage {
3257
3448
  align-items: center;
3258
3449
  gap: 8px;
3259
3450
  width: 100%;
3260
- min-height: 34px;
3451
+ min-height: 30px;
3261
3452
  border: 0;
3262
3453
  background: transparent;
3263
3454
  color: var(--pinokio-sidebar-tab-muted);
3264
- border-radius: 0;
3265
- padding: 7px 10px;
3455
+ border-radius: var(--sidebar-tab-radius);
3456
+ padding: 5px 8px;
3266
3457
  font: inherit;
3267
3458
  font-size: 12px;
3268
- font-weight: 700;
3459
+ font-weight: 500;
3269
3460
  line-height: 1.2;
3270
3461
  cursor: pointer;
3271
3462
  white-space: nowrap;
@@ -3278,6 +3469,14 @@ body.dark .disk-usage {
3278
3469
  background: var(--pinokio-sidebar-tab-hover);
3279
3470
  color: var(--pinokio-sidebar-tab-active-color);
3280
3471
  }
3472
+ .app-autolaunch-row:hover .app-autolaunch-label,
3473
+ .app-autolaunch.open .app-autolaunch-label {
3474
+ color: var(--pinokio-sidebar-tab-active-color);
3475
+ }
3476
+ .app-autolaunch-row:hover .app-autolaunch-label i,
3477
+ .app-autolaunch.open .app-autolaunch-label i {
3478
+ color: var(--pinokio-sidebar-icon-active);
3479
+ }
3281
3480
  .app-autolaunch-row:focus {
3282
3481
  outline: none;
3283
3482
  }
@@ -3287,16 +3486,18 @@ body.dark .disk-usage {
3287
3486
  .app-autolaunch-label {
3288
3487
  display: inline-flex;
3289
3488
  align-items: center;
3290
- gap: 8px;
3489
+ gap: 7px;
3291
3490
  min-width: 0;
3292
3491
  overflow: hidden;
3293
3492
  text-overflow: ellipsis;
3493
+ color: var(--pinokio-sidebar-tab-muted);
3294
3494
  }
3295
3495
  .app-autolaunch-label i {
3296
- width: 18px;
3297
- flex: 0 0 18px;
3496
+ width: 16px;
3497
+ flex: 0 0 16px;
3298
3498
  text-align: center;
3299
- font-size: 16px;
3499
+ font-size: 14px;
3500
+ color: var(--pinokio-sidebar-icon-muted);
3300
3501
  }
3301
3502
  .app-autolaunch-spacer {
3302
3503
  flex: 1 1 auto;
@@ -3304,30 +3505,31 @@ body.dark .disk-usage {
3304
3505
  }
3305
3506
  .app-autolaunch-status {
3306
3507
  flex: 0 0 auto;
3307
- color: rgba(100, 116, 139, 0.95);
3508
+ color: var(--pinokio-sidebar-action-muted);
3308
3509
  font-size: 11px;
3309
- font-weight: 800;
3510
+ font-weight: 700;
3511
+ letter-spacing: 0.02em;
3310
3512
  }
3311
3513
  .app-autolaunch-row[data-enabled="true"] .app-autolaunch-status {
3312
3514
  color: rgba(22, 101, 52, 0.95);
3313
3515
  }
3314
3516
  .app-autolaunch-chevron {
3315
3517
  flex: 0 0 auto;
3316
- color: rgba(100, 116, 139, 0.85);
3518
+ color: var(--pinokio-sidebar-action-muted);
3317
3519
  font-size: 10px;
3318
3520
  }
3319
3521
  body.dark .app-autolaunch-row {
3320
3522
  background: transparent;
3321
- color: rgba(226, 232, 240, 0.9);
3523
+ color: var(--pinokio-sidebar-tab-muted);
3322
3524
  }
3323
3525
  body.dark .app-autolaunch-row:hover,
3324
3526
  body.dark .app-autolaunch.open .app-autolaunch-row {
3325
- background: rgba(148, 163, 184, 0.15);
3326
- color: #f8fafc;
3527
+ background: var(--pinokio-sidebar-tab-hover);
3528
+ color: var(--pinokio-sidebar-tab-active-color);
3327
3529
  }
3328
3530
  body.dark .app-autolaunch-status,
3329
3531
  body.dark .app-autolaunch-chevron {
3330
- color: rgba(148, 163, 184, 0.9);
3532
+ color: var(--pinokio-sidebar-action-muted);
3331
3533
  }
3332
3534
  body.dark .app-autolaunch-row[data-enabled="true"] .app-autolaunch-status {
3333
3535
  color: rgba(134, 239, 172, 0.92);
@@ -3578,22 +3780,25 @@ body.dark .app-autolaunch-feedback.error {
3578
3780
  .appcanvas.vertical .app-autolaunch {
3579
3781
  width: 100%;
3580
3782
  padding: 0;
3783
+ margin: 0;
3784
+ border: 0;
3581
3785
  box-sizing: border-box;
3582
3786
  }
3583
3787
  .appcanvas.vertical .app-autolaunch-row {
3584
3788
  width: 100%;
3585
3789
  justify-content: space-between;
3586
- min-height: 0;
3587
- padding: 6px 8px 5px;
3790
+ min-height: 28px;
3791
+ padding: 4px 8px;
3588
3792
  line-height: 1.25;
3793
+ font-size: 13px;
3589
3794
  }
3590
3795
  .appcanvas.vertical .app-autolaunch-label {
3591
- gap: 6px;
3796
+ gap: 8px;
3592
3797
  }
3593
3798
  .appcanvas.vertical .app-autolaunch-label i {
3594
- width: 20px;
3595
- flex-basis: 20px;
3596
- font-size: 15px;
3799
+ width: 16px;
3800
+ flex-basis: 16px;
3801
+ font-size: 14px;
3597
3802
  }
3598
3803
  .appcanvas:not(.vertical) > aside .menu-scroller .app-autolaunch {
3599
3804
  white-space: nowrap;
@@ -4001,24 +4206,28 @@ body.dark .fs-status-btn:hover {
4001
4206
  pointer-events: none;
4002
4207
  }
4003
4208
  body.app-page .appcanvas {
4004
- background: transparent;
4209
+ background: var(--app-page-canvas-bg);
4005
4210
  }
4006
4211
  body.app-page .appcanvas.vertical .menu-scroller {
4007
- padding-top: 10px;
4212
+ padding-top: 0;
4008
4213
  }
4009
4214
  body.app-page .appcanvas > aside,
4010
4215
  body.dark.app-page .appcanvas > aside {
4011
- background: transparent !important;
4012
- background-color: transparent !important;
4216
+ background: var(--app-page-canvas-bg) !important;
4217
+ background-color: var(--app-page-canvas-bg) !important;
4013
4218
  background-image: none !important;
4014
4219
  }
4015
4220
  body.app-page .appcanvas > .container,
4016
4221
  body.app-page .browserview-shell {
4017
- background: transparent;
4222
+ background: var(--app-page-canvas-bg);
4223
+ }
4224
+ body.app-page main.browserview,
4225
+ body.app-page main.browserview iframe {
4226
+ background: var(--app-page-canvas-bg);
4018
4227
  }
4019
4228
  body.app-page .appcanvas_filler {
4020
- background: transparent !important;
4021
- background-color: transparent !important;
4229
+ background: var(--app-page-canvas-bg) !important;
4230
+ background-color: var(--app-page-canvas-bg) !important;
4022
4231
  border: none;
4023
4232
  }
4024
4233
  body.app-page .disk-usage {
@@ -4049,7 +4258,7 @@ body.app-page .appcanvas > aside .active-nested-path .header-item.is-current,
4049
4258
  body.app-page .appcanvas > aside .menu-scroller .header-item.selected,
4050
4259
  body.app-page .appcanvas > aside .menu-scroller .frame-link.selected,
4051
4260
  body.app-page #devtab.selected {
4052
- font-weight: bold;
4261
+ font-weight: 500;
4053
4262
  color: var(--app-page-selected-item-color);
4054
4263
  border-bottom: none;
4055
4264
  z-index: 1;
@@ -4063,7 +4272,7 @@ body.light.app-page .appcanvas > aside .menu-scroller .frame-link.selected,
4063
4272
  body.light.app-page #devtab.selected {
4064
4273
  background: var(--app-page-selected-item-bg) !important;
4065
4274
  border: none;
4066
- box-shadow: 0 4px 12px var(--pinokio-sidebar-tab-shadow);
4275
+ box-shadow: none;
4067
4276
  }
4068
4277
  body.dark.app-page .appcanvas > aside .active-nested-path .header-item.is-current,
4069
4278
  body.dark.app-page .appcanvas > aside .menu-scroller .header-item.selected,
@@ -4071,16 +4280,16 @@ body.dark.app-page .appcanvas > aside .menu-scroller .frame-link.selected,
4071
4280
  body.dark.app-page #devtab.selected {
4072
4281
  background: var(--app-page-selected-item-bg) !important;
4073
4282
  border: none;
4074
- box-shadow: rgba(67, 71, 85, 0.27) 0px 0px 0.25em, rgba(90, 125, 188, 0.05) 0px 0.25em 1em;
4283
+ box-shadow: none;
4075
4284
  }
4076
4285
  body.light.app-page .appcanvas > aside .m.menu .nested-menu.is-open > .reveal {
4077
4286
  background: var(--pinokio-sidebar-tab-active-bg);
4078
- border-color: var(--sidebar-tab-outline);
4079
- box-shadow: 0 4px 12px var(--pinokio-sidebar-tab-shadow);
4287
+ border-color: transparent;
4288
+ box-shadow: none;
4080
4289
  }
4081
4290
  body.dark.app-page .appcanvas > aside .m.menu .nested-menu.is-open > .reveal {
4082
- background: rgba(27, 28, 29, 0.98);
4083
- border-color: rgba(59, 130, 246, 0.28);
4291
+ background: var(--pinokio-sidebar-tab-active-bg);
4292
+ border-color: transparent;
4084
4293
  box-shadow: none;
4085
4294
  }
4086
4295
  body.app-page #fs-status {
@@ -4095,25 +4304,36 @@ body.app-page .fs-dropdown-menu {
4095
4304
  background: var(--app-page-panel-bg);
4096
4305
  }
4097
4306
  body.app-page .ask-ai-drawer,
4307
+ body.app-page .app-logs-drawer,
4098
4308
  body.app-page .event-launch-drawer,
4099
4309
  body.app-page .community-drawer {
4100
4310
  border-left-color: var(--app-page-border);
4101
- background: var(--app-page-panel-bg);
4311
+ background: var(--app-page-canvas-bg);
4102
4312
  }
4103
4313
  body.app-page .appcanvas.event-bottom-open .event-launch-drawer {
4104
4314
  border-top-color: var(--app-page-border);
4105
4315
  }
4316
+ body.app-page .appcanvas.panel-open .ask-ai-drawer,
4317
+ body.app-page .appcanvas.event-drawer-open .event-launch-drawer,
4318
+ body.app-page .appcanvas.community-open .community-drawer {
4319
+ border-left-color: transparent;
4320
+ }
4106
4321
  body.app-page .ask-ai-drawer-bar,
4322
+ body.app-page .app-logs-drawer-bar,
4107
4323
  body.app-page .event-launch-drawer-bar,
4108
4324
  body.app-page .community-drawer-bar {
4109
4325
  border-bottom-color: var(--app-page-border);
4110
- background: var(--app-page-shell-bg-strong);
4326
+ background: var(--app-page-canvas-bg);
4111
4327
  backdrop-filter: none;
4112
4328
  }
4113
4329
  body.app-page .ask-ai-drawer-location,
4114
4330
  body.app-page .community-drawer-location {
4115
4331
  border-bottom-color: var(--app-page-border);
4116
- background: var(--app-page-shell-bg);
4332
+ background: var(--app-page-canvas-bg);
4333
+ }
4334
+ body.app-page .ask-ai-frame,
4335
+ body.app-page .community-frame {
4336
+ background: var(--app-page-canvas-bg);
4117
4337
  }
4118
4338
  /*
4119
4339
  body.app-page .ask-ai-resizer::before,
@@ -4124,20 +4344,20 @@ body.app-page .appcanvas.vertical .appcanvas-resizer::before {
4124
4344
  }
4125
4345
  */
4126
4346
  body.app-page .appcanvas.vertical .appcanvas-resizer::before {
4127
- background: transparent;
4347
+ background: var(--pinokio-sidebar-separator);
4128
4348
  transition: background 120ms ease;
4129
4349
  }
4130
4350
  body.app-page .appcanvas.vertical .appcanvas-resizer:hover::before {
4131
- background: rgba(15, 23, 42, 0.16);
4351
+ background: var(--pinokio-sidebar-separator-hover);
4132
4352
  }
4133
4353
  body.app-page .appcanvas.vertical .appcanvas-resizer:focus-visible::before {
4134
- background: rgba(59, 130, 246, 0.45);
4354
+ background: var(--pinokio-sidebar-separator-focus);
4135
4355
  }
4136
4356
  body.dark.app-page .appcanvas.vertical .appcanvas-resizer:hover::before {
4137
- background: rgba(255, 255, 255, 0.22);
4357
+ background: var(--pinokio-sidebar-separator-hover);
4138
4358
  }
4139
4359
  body.dark.app-page .appcanvas.vertical .appcanvas-resizer:focus-visible::before {
4140
- background: rgba(96, 165, 250, 0.6);
4360
+ background: var(--pinokio-sidebar-separator-focus);
4141
4361
  }
4142
4362
 
4143
4363
  /* Remote selection modal styles */
@@ -4240,13 +4460,22 @@ body.dark .swal2-html-container label {
4240
4460
  --pinokio-modal-icon-bg: linear-gradient(135deg, rgba(59, 130, 246, 0.18), rgba(59, 130, 246, 0.03));
4241
4461
  --pinokio-modal-icon-color: #2563eb;
4242
4462
  --pinokio-modal-body-text-color: rgba(30, 41, 59, 0.9);
4243
- --pinokio-sidebar-tabbar-bg: rgba(248, 250, 252, 0.92);
4244
- --pinokio-sidebar-tabbar-border: rgba(203, 213, 225, 0.7);
4245
- --pinokio-sidebar-tab-hover: rgba(59, 130, 246, 0.12);
4246
- --pinokio-sidebar-tab-active-bg: #ffffff;
4247
- --pinokio-sidebar-tab-active-color: #0f172a;
4248
- --pinokio-sidebar-tab-muted: rgba(71, 85, 105, 0.85);
4249
- --pinokio-sidebar-tab-shadow: rgba(15, 23, 42, 0.08);
4463
+ --pinokio-sidebar-tabbar-bg: #ffffff;
4464
+ --pinokio-sidebar-tabbar-border: rgba(15, 23, 42, 0.055);
4465
+ --pinokio-sidebar-separator: rgba(15, 23, 42, 0.06);
4466
+ --pinokio-sidebar-separator-hover: rgba(15, 23, 42, 0.12);
4467
+ --pinokio-sidebar-separator-focus: rgba(59, 130, 246, 0.4);
4468
+ --pinokio-sidebar-control-bg: rgba(15, 23, 42, 0.035);
4469
+ --pinokio-sidebar-control-active-bg: rgba(255, 255, 255, 0.82);
4470
+ --pinokio-sidebar-tab-hover: rgba(15, 23, 42, 0.035);
4471
+ --pinokio-sidebar-tab-active-bg: rgba(15, 23, 42, 0.045);
4472
+ --pinokio-sidebar-tab-active-color: #111827;
4473
+ --pinokio-sidebar-tab-muted: rgba(31, 41, 55, 0.78);
4474
+ --pinokio-sidebar-icon-muted: rgba(31, 41, 55, 0.64);
4475
+ --pinokio-sidebar-icon-active: rgba(17, 24, 39, 0.84);
4476
+ --pinokio-sidebar-action-muted: rgba(31, 41, 55, 0.48);
4477
+ --pinokio-sidebar-notice-flash-bg: rgba(185, 28, 28, 0.12);
4478
+ --pinokio-sidebar-tab-shadow: transparent;
4250
4479
  }
4251
4480
 
4252
4481
  body.dark {
@@ -4322,13 +4551,22 @@ body.dark {
4322
4551
  --pinokio-modal-icon-bg: linear-gradient(135deg, rgba(59, 130, 246, 0.25), rgba(59, 130, 246, 0.05));
4323
4552
  --pinokio-modal-icon-color: #60a5fa;
4324
4553
  --pinokio-modal-body-text-color: rgba(226, 232, 240, 0.92);
4325
- --pinokio-sidebar-tabbar-bg: rgba(15, 23, 42, 0.92);
4326
- --pinokio-sidebar-tabbar-border: rgba(59, 130, 246, 0.18);
4327
- --pinokio-sidebar-tab-hover: rgba(96, 165, 250, 0.18);
4328
- --pinokio-sidebar-tab-active-bg: rgba(15, 23, 42, 0.98);
4329
- --pinokio-sidebar-tab-active-color: #f8fafc;
4330
- --pinokio-sidebar-tab-muted: rgba(148, 163, 184, 0.8);
4331
- --pinokio-sidebar-tab-shadow: rgba(2, 8, 23, 0.55);
4554
+ --pinokio-sidebar-tabbar-bg: #1b1c1d;
4555
+ --pinokio-sidebar-tabbar-border: rgba(255, 255, 255, 0.055);
4556
+ --pinokio-sidebar-separator: rgba(255, 255, 255, 0.055);
4557
+ --pinokio-sidebar-separator-hover: rgba(255, 255, 255, 0.12);
4558
+ --pinokio-sidebar-separator-focus: rgba(96, 165, 250, 0.5);
4559
+ --pinokio-sidebar-control-bg: rgba(255, 255, 255, 0.035);
4560
+ --pinokio-sidebar-control-active-bg: rgba(255, 255, 255, 0.075);
4561
+ --pinokio-sidebar-tab-hover: rgba(255, 255, 255, 0.04);
4562
+ --pinokio-sidebar-tab-active-bg: rgba(255, 255, 255, 0.055);
4563
+ --pinokio-sidebar-tab-active-color: rgba(248, 250, 252, 0.91);
4564
+ --pinokio-sidebar-tab-muted: rgba(229, 231, 235, 0.62);
4565
+ --pinokio-sidebar-icon-muted: rgba(229, 231, 235, 0.56);
4566
+ --pinokio-sidebar-icon-active: rgba(248, 250, 252, 0.82);
4567
+ --pinokio-sidebar-action-muted: rgba(229, 231, 235, 0.42);
4568
+ --pinokio-sidebar-notice-flash-bg: rgba(248, 113, 113, 0.14);
4569
+ --pinokio-sidebar-tab-shadow: transparent;
4332
4570
  }
4333
4571
 
4334
4572
  /* Git diff modal styles - using specific prefixed classes to avoid collisions */
@@ -6591,45 +6829,6 @@ header.navheader h1 {
6591
6829
  </div>
6592
6830
  <% } %>
6593
6831
  <%if (type === 'run') { %>
6594
- <% if (typeof autolaunch_app !== 'undefined' && autolaunch_app) { %>
6595
- <div class="app-autolaunch" data-app-autolaunch data-app-id="<%=name%>">
6596
- <button type="button" class="app-autolaunch-row" data-app-autolaunch-button data-enabled="<%= autolaunch_app.autolaunch_enabled ? 'true' : 'false' %>" aria-haspopup="dialog" aria-expanded="false">
6597
- <span class="app-autolaunch-label"><i class="fa-solid fa-power-off"></i><span>Auto</span></span>
6598
- <span class="app-autolaunch-spacer" aria-hidden="true"></span>
6599
- <span class="app-autolaunch-status" data-app-autolaunch-status><%= autolaunch_app.autolaunch_enabled ? 'ON' : 'OFF' %></span>
6600
- <i class="fa-solid fa-angle-down app-autolaunch-chevron" aria-hidden="true"></i>
6601
- </button>
6602
- <div class="app-autolaunch-modal hidden" data-app-autolaunch-modal role="dialog" aria-modal="true" aria-label="Auto launch">
6603
- <div class="app-autolaunch-panel" data-app-autolaunch-panel>
6604
- <div class="app-autolaunch-modal-head">
6605
- <div>
6606
- <div class="app-autolaunch-title">Auto launch</div>
6607
- <div class="app-autolaunch-note">Run this app when Pinokio starts.</div>
6608
- </div>
6609
- <div class="app-autolaunch-modal-actions">
6610
- <button type="button" class="app-autolaunch-switch" role="switch" aria-checked="<%= autolaunch_app.autolaunch_enabled ? 'true' : 'false' %>" data-app-autolaunch-switch aria-label="Auto launch" title="Auto launch is <%= autolaunch_app.autolaunch_enabled ? 'on' : 'off' %>">
6611
- <span class="app-autolaunch-switch-label" data-app-autolaunch-switch-label><%= autolaunch_app.autolaunch_enabled ? 'ON' : 'OFF' %></span>
6612
- <span class="app-autolaunch-switch-thumb" aria-hidden="true"></span>
6613
- </button>
6614
- <button type="button" class="app-autolaunch-close" data-app-autolaunch-close aria-label="Close">
6615
- <i class="fa-solid fa-xmark" aria-hidden="true"></i>
6616
- </button>
6617
- </div>
6618
- </div>
6619
- <div class="app-autolaunch-modal-section">
6620
- <div class="app-autolaunch-section-label">Script</div>
6621
- <div class="app-autolaunch-script-list" data-app-autolaunch-scripts>
6622
- <div class="app-autolaunch-empty">Loading scripts...</div>
6623
- </div>
6624
- </div>
6625
- <div class="app-autolaunch-footer">
6626
- <div class="app-autolaunch-feedback" data-app-autolaunch-feedback></div>
6627
- <a class="app-autolaunch-link" href="/autolaunch">Manage all</a>
6628
- </div>
6629
- </div>
6630
- </div>
6631
- </div>
6632
- <% } %>
6633
6832
  <div class='m h menu' data-type='h'>
6634
6833
  <% if (config.menu) { %>
6635
6834
  <%- include('./partials/menu', { menu: config.menu, }) %>
@@ -6687,6 +6886,52 @@ header.navheader h1 {
6687
6886
  </div>
6688
6887
  </button>
6689
6888
  <% } %>
6889
+ <button type='button' id='sidebar-open-explorer' class="btn header-item" data-filepath="<%=path%>" data-tippy-content="Open in File Explorer">
6890
+ <div class='tab'>
6891
+ <i class="fa-solid fa-folder-open menu-action-leading-icon"></i>
6892
+ <div class='display'>File Explorer</div>
6893
+ <div class='flexible'></div>
6894
+ </div>
6895
+ </button>
6896
+ <% if (typeof autolaunch_app !== 'undefined' && autolaunch_app) { %>
6897
+ <div class="app-autolaunch" data-app-autolaunch data-app-id="<%=name%>">
6898
+ <button type="button" class="app-autolaunch-row" data-app-autolaunch-button data-enabled="<%= autolaunch_app.autolaunch_enabled ? 'true' : 'false' %>" aria-haspopup="dialog" aria-expanded="false">
6899
+ <span class="app-autolaunch-label"><i class="fa-solid fa-power-off"></i><span>Auto</span></span>
6900
+ <span class="app-autolaunch-spacer" aria-hidden="true"></span>
6901
+ <span class="app-autolaunch-status" data-app-autolaunch-status><%= autolaunch_app.autolaunch_enabled ? 'ON' : 'OFF' %></span>
6902
+ <i class="fa-solid fa-angle-down app-autolaunch-chevron" aria-hidden="true"></i>
6903
+ </button>
6904
+ <div class="app-autolaunch-modal hidden" data-app-autolaunch-modal role="dialog" aria-modal="true" aria-label="Auto launch">
6905
+ <div class="app-autolaunch-panel" data-app-autolaunch-panel>
6906
+ <div class="app-autolaunch-modal-head">
6907
+ <div>
6908
+ <div class="app-autolaunch-title">Auto launch</div>
6909
+ <div class="app-autolaunch-note">Run this app when Pinokio starts.</div>
6910
+ </div>
6911
+ <div class="app-autolaunch-modal-actions">
6912
+ <button type="button" class="app-autolaunch-switch" role="switch" aria-checked="<%= autolaunch_app.autolaunch_enabled ? 'true' : 'false' %>" data-app-autolaunch-switch aria-label="Auto launch" title="Auto launch is <%= autolaunch_app.autolaunch_enabled ? 'on' : 'off' %>">
6913
+ <span class="app-autolaunch-switch-label" data-app-autolaunch-switch-label><%= autolaunch_app.autolaunch_enabled ? 'ON' : 'OFF' %></span>
6914
+ <span class="app-autolaunch-switch-thumb" aria-hidden="true"></span>
6915
+ </button>
6916
+ <button type="button" class="app-autolaunch-close" data-app-autolaunch-close aria-label="Close">
6917
+ <i class="fa-solid fa-xmark" aria-hidden="true"></i>
6918
+ </button>
6919
+ </div>
6920
+ </div>
6921
+ <div class="app-autolaunch-modal-section">
6922
+ <div class="app-autolaunch-section-label">Script</div>
6923
+ <div class="app-autolaunch-script-list" data-app-autolaunch-scripts>
6924
+ <div class="app-autolaunch-empty">Loading scripts...</div>
6925
+ </div>
6926
+ </div>
6927
+ <div class="app-autolaunch-footer">
6928
+ <div class="app-autolaunch-feedback" data-app-autolaunch-feedback></div>
6929
+ <a class="app-autolaunch-link" href="/autolaunch">Manage all</a>
6930
+ </div>
6931
+ </div>
6932
+ </div>
6933
+ </div>
6934
+ <% } %>
6690
6935
  </div>
6691
6936
  </div>
6692
6937
  </aside>
@@ -6782,11 +7027,15 @@ header.navheader h1 {
6782
7027
  </button>
6783
7028
  </div>
6784
7029
  </div>
6785
- <div class='ask-ai-drawer-location'>
7030
+ <div class='ask-ai-drawer-location hidden'>
6786
7031
  <input class='ask-ai-drawer-location-input' type='text' value="" readonly aria-label="Ask AI URL">
6787
7032
  </div>
6788
7033
  <div class='ask-ai-drawer-body'>
6789
7034
  <div class='ask-ai-drawer-empty'>
7035
+ <div class='ask-ai-drawer-search'>
7036
+ <i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>
7037
+ <input class='ask-ai-drawer-search-input' type='search' placeholder="Filter tools" autocomplete="off" spellcheck="false" aria-label="Filter Ask AI launch options">
7038
+ </div>
6790
7039
  <div class='ask-ai-drawer-empty-title'>Pick a shell or plugin to launch</div>
6791
7040
  <div class='ask-ai-drawer-picker-list' role="list" aria-label="Ask AI launch options"></div>
6792
7041
  <div class='ask-ai-drawer-picker-status muted'>Use the Ask AI button to load launch options.</div>
@@ -14646,6 +14895,8 @@ document.addEventListener("DOMContentLoaded", () => {
14646
14895
  const empty = drawer.querySelector(".ask-ai-drawer-empty")
14647
14896
  const pickerList = drawer.querySelector(".ask-ai-drawer-picker-list")
14648
14897
  const pickerStatus = drawer.querySelector(".ask-ai-drawer-picker-status")
14898
+ const searchInput = drawer.querySelector(".ask-ai-drawer-search-input")
14899
+ const locationRow = drawer.querySelector(".ask-ai-drawer-location")
14649
14900
  const locationInput = drawer.querySelector(".ask-ai-drawer-location-input")
14650
14901
  const refreshBtn = drawer.querySelector(".ask-ai-drawer-refresh")
14651
14902
  const externalBtn = drawer.querySelector(".ask-ai-drawer-external")
@@ -14663,10 +14914,15 @@ document.addEventListener("DOMContentLoaded", () => {
14663
14914
  let askAiTools = null
14664
14915
  let askAiToolsPromise = null
14665
14916
  let askAiToolsKey = ""
14917
+ let renderedPickerTools = []
14918
+ let renderedPickerWorkspaceCwd = ""
14666
14919
 
14667
14920
  const setLocation = (value) => {
14668
- if (!locationInput) return
14669
14921
  const next = typeof value === "string" ? value : ""
14922
+ if (locationRow) {
14923
+ locationRow.classList.toggle("hidden", !next)
14924
+ }
14925
+ if (!locationInput) return
14670
14926
  locationInput.value = next
14671
14927
  locationInput.title = next
14672
14928
  }
@@ -15098,14 +15354,39 @@ document.addEventListener("DOMContentLoaded", () => {
15098
15354
  return button
15099
15355
  }
15100
15356
 
15101
- const renderPicker = (tools, workspaceCwd) => {
15357
+ const normalizePickerQuery = (value) => String(value || "").trim().toLowerCase()
15358
+
15359
+ const toolMatchesPickerQuery = (tool, query) => {
15360
+ if (!query) {
15361
+ return true
15362
+ }
15363
+ const haystack = [
15364
+ tool && tool.label,
15365
+ tool && tool.value,
15366
+ tool && tool.description,
15367
+ tool && tool.category,
15368
+ tool && tool.kind
15369
+ ].filter(Boolean).join(" ").toLowerCase()
15370
+ return haystack.includes(query)
15371
+ }
15372
+
15373
+ const renderPicker = (tools, workspaceCwd, query = "") => {
15102
15374
  clearPickerList()
15103
- if (!Array.isArray(tools) || tools.length === 0) {
15375
+ const sourceTools = Array.isArray(tools) ? tools : []
15376
+ if (sourceTools.length === 0) {
15104
15377
  setPickerStatus("No launch options available.")
15105
15378
  return
15106
15379
  }
15380
+ const normalizedQuery = normalizePickerQuery(query)
15381
+ const visibleTools = normalizedQuery
15382
+ ? sourceTools.filter((tool) => toolMatchesPickerQuery(tool, normalizedQuery))
15383
+ : sourceTools
15384
+ if (visibleTools.length === 0) {
15385
+ setPickerStatus("No matches.")
15386
+ return
15387
+ }
15107
15388
  const groups = new Map()
15108
- tools.forEach((tool) => {
15389
+ visibleTools.forEach((tool) => {
15109
15390
  const category = typeof tool.category === "string" && tool.category.trim() ? tool.category.trim() : "Other"
15110
15391
  if (!groups.has(category)) {
15111
15392
  groups.set(category, [])
@@ -15146,7 +15427,7 @@ document.addEventListener("DOMContentLoaded", () => {
15146
15427
  setPickerStatus("No launch options available.")
15147
15428
  return
15148
15429
  }
15149
- setPickerStatus("Select a shell or plugin to launch.")
15430
+ setPickerStatus("")
15150
15431
  }
15151
15432
 
15152
15433
  const openWithUrl = (rawUrl, opts = {}) => {
@@ -15194,12 +15475,19 @@ document.addEventListener("DOMContentLoaded", () => {
15194
15475
  setEmptyState(true)
15195
15476
  setOpen(true)
15196
15477
  clearPickerList()
15478
+ renderedPickerTools = []
15479
+ renderedPickerWorkspaceCwd = workspaceCwd
15480
+ if (searchInput) {
15481
+ searchInput.value = ""
15482
+ }
15197
15483
  setPickerStatus("Loading launch options...")
15198
15484
  getAskAiTools(workspaceCwd).then((tools) => {
15199
15485
  if (requestId !== pickerRequestId) {
15200
15486
  return
15201
15487
  }
15202
- renderPicker(tools, workspaceCwd)
15488
+ renderedPickerTools = Array.isArray(tools) ? tools : []
15489
+ renderedPickerWorkspaceCwd = workspaceCwd
15490
+ renderPicker(renderedPickerTools, renderedPickerWorkspaceCwd, searchInput ? searchInput.value : "")
15203
15491
  })
15204
15492
  return true
15205
15493
  }
@@ -15371,6 +15659,12 @@ document.addEventListener("DOMContentLoaded", () => {
15371
15659
  })
15372
15660
  }
15373
15661
 
15662
+ if (searchInput) {
15663
+ searchInput.addEventListener("input", () => {
15664
+ renderPicker(renderedPickerTools, renderedPickerWorkspaceCwd, searchInput.value)
15665
+ })
15666
+ }
15667
+
15374
15668
  window.addEventListener("message", (event) => {
15375
15669
  if (!event || !event.data || typeof event.data !== "object") {
15376
15670
  return