openclacky 1.5.4 → 1.5.6

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +63 -0
  3. data/lib/clacky/agent/goal_manager.rb +305 -0
  4. data/lib/clacky/agent/goal_state.rb +88 -0
  5. data/lib/clacky/agent/message_compressor_helper.rb +4 -1
  6. data/lib/clacky/agent/session_serializer.rb +27 -3
  7. data/lib/clacky/agent.rb +202 -3
  8. data/lib/clacky/agent_config.rb +4 -2
  9. data/lib/clacky/agent_profile.rb +25 -3
  10. data/lib/clacky/cli.rb +15 -15
  11. data/lib/clacky/default_extensions/ext-studio/api/handler.rb +29 -1
  12. data/lib/clacky/default_extensions/ext-studio/ext.yml +4 -4
  13. data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +130 -59
  14. data/lib/clacky/default_extensions/ext-studio/skills/ext-develop/SKILL.md +12 -4
  15. data/lib/clacky/default_extensions/git/ext.yml +3 -0
  16. data/lib/clacky/default_extensions/meeting/ext.yml +3 -0
  17. data/lib/clacky/default_extensions/time_machine/ext.yml +4 -0
  18. data/lib/clacky/default_searchers/tavily.rb +98 -0
  19. data/lib/clacky/default_skills/new/SKILL.md +17 -12
  20. data/lib/clacky/extension/api_extension.rb +29 -1
  21. data/lib/clacky/extension/loader.rb +1 -0
  22. data/lib/clacky/extension/packager.rb +114 -20
  23. data/lib/clacky/extension/verifier.rb +1 -1
  24. data/lib/clacky/idle_compression_timer.rb +1 -3
  25. data/lib/clacky/message_format/anthropic.rb +1 -1
  26. data/lib/clacky/message_format/bedrock.rb +1 -1
  27. data/lib/clacky/message_format/open_ai.rb +8 -0
  28. data/lib/clacky/providers.rb +65 -8
  29. data/lib/clacky/search_config.rb +57 -0
  30. data/lib/clacky/server/http_server.rb +249 -31
  31. data/lib/clacky/server/session_registry.rb +10 -3
  32. data/lib/clacky/server/web_ui_controller.rb +12 -2
  33. data/lib/clacky/session_manager.rb +1 -0
  34. data/lib/clacky/tools/terminal.rb +30 -3
  35. data/lib/clacky/tools/web_search.rb +45 -6
  36. data/lib/clacky/ui2/components/command_suggestions.rb +17 -0
  37. data/lib/clacky/ui2/components/input_area.rb +26 -2
  38. data/lib/clacky/ui2/ui_controller.rb +17 -0
  39. data/lib/clacky/ui_interface.rb +9 -0
  40. data/lib/clacky/utils/gitignore_parser.rb +7 -1
  41. data/lib/clacky/utils/model_pricing.rb +0 -10
  42. data/lib/clacky/utils/searcher_manager.rb +87 -0
  43. data/lib/clacky/version.rb +1 -1
  44. data/lib/clacky/web/app.css +530 -197
  45. data/lib/clacky/web/app.js +28 -3
  46. data/lib/clacky/web/components/chat-navigator.js +260 -0
  47. data/lib/clacky/web/features/billing/view.js +2 -2
  48. data/lib/clacky/web/features/brand/view.js +5 -1
  49. data/lib/clacky/web/features/extensions/store.js +214 -9
  50. data/lib/clacky/web/features/extensions/view.js +158 -13
  51. data/lib/clacky/web/features/new-session/store.js +25 -3
  52. data/lib/clacky/web/features/new-session/view.js +337 -140
  53. data/lib/clacky/web/features/skills/store.js +4 -2
  54. data/lib/clacky/web/features/skills/view.js +1 -1
  55. data/lib/clacky/web/i18n.js +72 -18
  56. data/lib/clacky/web/index.html +71 -64
  57. data/lib/clacky/web/projects.js +36 -19
  58. data/lib/clacky/web/sessions.js +173 -8
  59. data/lib/clacky/web/settings.js +85 -0
  60. data/lib/clacky/web/skills.js +24 -4
  61. data/lib/clacky/web/utils.js +1 -0
  62. data/lib/clacky/web/ws-dispatcher.js +63 -3
  63. data/lib/clacky.rb +2 -0
  64. metadata +7 -1
@@ -322,6 +322,8 @@ html { font-size: 16px; }
322
322
 
323
323
  /* ── Reset & Base ────────────────────────────────────────────────────────── */
324
324
  * { box-sizing: border-box; margin: 0; padding: 0; }
325
+ select:hover { border-color: var(--color-border-strong); }
326
+ input:focus, select:focus { outline: none; border-color: var(--color-accent-primary); }
325
327
 
326
328
  /* ── Global Tooltip ──────────────────────────────────────────────────────
327
329
  JS-driven: Tooltip.init() in utils.js mounts a single <div id="tooltip">
@@ -378,7 +380,9 @@ html { font-size: 16px; }
378
380
  100% { background-position: -200% 0; }
379
381
  }
380
382
  .skel {
381
- display: inline-block;
383
+ display: inline-flex;
384
+ align-items: center;
385
+ justify-content: center;
382
386
  border-radius: 6px;
383
387
  background: linear-gradient(90deg,
384
388
  #e8e8e8 25%,
@@ -534,7 +538,7 @@ body {
534
538
  }
535
539
  .header-logo {
536
540
  font-family: "Geist Sans", "Satoshi", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
537
- font-weight: 750;
541
+ font-weight: 650;
538
542
  font-size: 0.9375rem;
539
543
  color: var(--color-text-primary);
540
544
  letter-spacing: -0.02em;
@@ -548,7 +552,7 @@ body {
548
552
  #header-brand.has-logo .header-logo {
549
553
  font-family: "Geist Sans", "Satoshi", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
550
554
  font-size: 0.9375rem;
551
- font-weight: 750;
555
+ font-weight: 650;
552
556
  color: var(--color-text-primary);
553
557
  letter-spacing: -0.02em;
554
558
  -webkit-font-smoothing: antialiased;
@@ -563,7 +567,7 @@ body {
563
567
  }
564
568
 
565
569
  .header-logo-img {
566
- height: 2rem;
570
+ height: 2.2rem;
567
571
  object-fit: contain;
568
572
  display: block;
569
573
  flex-shrink: 0;
@@ -987,10 +991,12 @@ body {
987
991
  in subtle hue so they don't compete with each other.
988
992
  Critical: all colors are neutrals — no hue bleeds onto the brand accent. */
989
993
  .session-badge {
990
- display: inline-block;
994
+ display: inline-flex;
995
+ align-items: center;
996
+ justify-content: center;
991
997
  font-family: var(--font-mono);
992
998
  font-size: 0.5625rem;
993
- font-weight: 600;
999
+ font-weight: 500;
994
1000
  line-height: 1;
995
1001
  padding: 2px 0.3125rem;
996
1002
  border-radius: var(--radius-xs);
@@ -1309,7 +1315,7 @@ body {
1309
1315
  margin-bottom: 0.5rem;
1310
1316
  }
1311
1317
  .dp-title {
1312
- font-weight: 600;
1318
+ font-weight: 500;
1313
1319
  font-size: 0.8125rem;
1314
1320
  }
1315
1321
  .dp-nav {
@@ -1354,7 +1360,7 @@ body {
1354
1360
  .dp-day--selected {
1355
1361
  background: var(--color-accent-primary);
1356
1362
  color: var(--color-text-inverse) !important;
1357
- font-weight: 600;
1363
+ font-weight: 500;
1358
1364
  }
1359
1365
  .dp-day--selected:hover { background: var(--color-accent-primary); opacity: 0.88; }
1360
1366
  .dp-footer {
@@ -1404,17 +1410,19 @@ body {
1404
1410
  display: block;
1405
1411
  width: 100%;
1406
1412
  margin: 0.375rem 0 0.25rem;
1407
- padding: 0.1875rem 0;
1413
+ padding: 0.375rem 0.625rem;
1408
1414
  background: transparent;
1409
1415
  border: none;
1416
+ border-radius: var(--radius-sm);
1410
1417
  color: var(--color-text-muted);
1411
- font-size: 0.6875rem;
1418
+ font-size: 0.75rem;
1412
1419
  cursor: pointer;
1413
- text-align: center;
1414
- transition: color 0.15s;
1420
+ text-align: left;
1421
+ transition: background var(--transition-fast), color var(--transition-fast);
1415
1422
  }
1416
1423
  .btn-load-more-sessions:hover {
1417
- color: var(--color-accent-primary);
1424
+ background: var(--color-bg-hover);
1425
+ color: var(--color-text-primary);
1418
1426
  }
1419
1427
  .btn-load-more-sessions:disabled {
1420
1428
  cursor: default;
@@ -1424,7 +1432,7 @@ body {
1424
1432
  .session-search-group {
1425
1433
  padding: 0.5rem 0.75rem 0.25rem;
1426
1434
  font-size: 0.6875rem;
1427
- font-weight: 600;
1435
+ font-weight: 500;
1428
1436
  color: var(--color-text-muted);
1429
1437
  text-transform: none;
1430
1438
  letter-spacing: 0.02em;
@@ -1448,7 +1456,7 @@ body {
1448
1456
  color: var(--color-text-primary);
1449
1457
  padding: 0 2px;
1450
1458
  border-radius: 2px;
1451
- font-weight: 600;
1459
+ font-weight: 500;
1452
1460
  }
1453
1461
 
1454
1462
  .session-name__text mark {
@@ -1722,7 +1730,9 @@ body {
1722
1730
  margin-top: 2px;
1723
1731
  }
1724
1732
  .session-meta-sep {
1725
- display: inline-block;
1733
+ display: inline-flex;
1734
+ align-items: center;
1735
+ justify-content: center;
1726
1736
  width: 0.125rem;
1727
1737
  height: 0.125rem;
1728
1738
  border-radius: 50%;
@@ -1736,7 +1746,9 @@ body {
1736
1746
 
1737
1747
  .session-dot {
1738
1748
  flex-shrink: 0;
1739
- display: inline-block;
1749
+ display: inline-flex;
1750
+ align-items: center;
1751
+ justify-content: center;
1740
1752
  width: 0.375rem;
1741
1753
  height: 0.375rem;
1742
1754
  border-radius: 50%;
@@ -1891,7 +1903,7 @@ body {
1891
1903
  overflow: hidden;
1892
1904
  display: flex;
1893
1905
  flex-direction: column;
1894
- padding: 2rem 2rem 1.5rem;
1906
+ padding: 1.75rem 2.25rem;
1895
1907
  gap: 1.25rem;
1896
1908
  }
1897
1909
 
@@ -1923,7 +1935,7 @@ body {
1923
1935
  display: flex;
1924
1936
  align-items: center;
1925
1937
  gap: 0.375rem;
1926
- padding: 0.5rem 1rem;
1938
+ padding: 0.375rem 0.75rem;
1927
1939
  background: var(--color-button-primary);
1928
1940
  color: #fff;
1929
1941
  border: none;
@@ -2024,7 +2036,7 @@ body {
2024
2036
  }
2025
2037
  .task-card-name {
2026
2038
  font-size: 0.8125rem;
2027
- font-weight: 600;
2039
+ font-weight: 500;
2028
2040
  color: var(--color-text-primary);
2029
2041
  }
2030
2042
  .task-card-cron {
@@ -2039,7 +2051,7 @@ body {
2039
2051
  }
2040
2052
  .task-card-badge {
2041
2053
  font-size: 0.625rem;
2042
- font-weight: 600;
2054
+ font-weight: 500;
2043
2055
  padding: 2px 0.4375rem;
2044
2056
  border-radius: 10px;
2045
2057
  letter-spacing: 0.3px;
@@ -2180,7 +2192,7 @@ body {
2180
2192
  flex-direction: column;
2181
2193
  gap: 1.25rem;
2182
2194
  width: 100%;
2183
- padding: 6rem max(1.5rem, calc(50% - 30rem)) 1rem;
2195
+ padding: 5.5rem max(1.5rem, calc(50% - 30rem)) 1rem;
2184
2196
  }
2185
2197
  .new-session-composer {
2186
2198
  position: relative;
@@ -2207,14 +2219,6 @@ body {
2207
2219
  grid-auto-rows: 1fr;
2208
2220
  gap: 0.75rem;
2209
2221
  }
2210
- .new-session-agent-panels {
2211
- display: flex;
2212
- flex-wrap: wrap;
2213
- align-items: center;
2214
- gap: 0.375rem;
2215
- margin-top: -0.625rem;
2216
- padding-left: 0.125rem;
2217
- }
2218
2222
 
2219
2223
  /* ── Starter Prompts ── */
2220
2224
  .ns-starter-label {
@@ -2246,30 +2250,6 @@ body {
2246
2250
  background: var(--color-bg-hover);
2247
2251
  color: var(--color-text-primary);
2248
2252
  }
2249
- .ns-panels-label {
2250
- width: 100%;
2251
- font-size: 0.75rem;
2252
- color: var(--color-text-tertiary);
2253
- margin-bottom: 0.0625rem;
2254
- }
2255
- .ns-panel-chip {
2256
- display: inline-flex;
2257
- align-items: center;
2258
- padding: 0.1875rem 0.5rem;
2259
- border-radius: 0.375rem;
2260
- font-size: 0.78125rem;
2261
- font-weight: 500;
2262
- line-height: 1.3;
2263
- }
2264
- .ns-panel-chip--panel {
2265
- background: var(--color-accent-soft);
2266
- color: var(--color-accent-primary);
2267
- }
2268
- .ns-panel-chip--skill {
2269
- background: var(--color-bg-secondary);
2270
- color: var(--color-text-secondary);
2271
- border: 1px solid var(--color-border-primary);
2272
- }
2273
2253
  .agent-card {
2274
2254
  position: relative;
2275
2255
  padding: 0.9375rem 1rem;
@@ -2353,13 +2333,12 @@ body {
2353
2333
  top: 0.5rem;
2354
2334
  right: 0.5rem;
2355
2335
  font-size: 0.65rem;
2356
- font-weight: 600;
2357
- padding: 1px 5px;
2336
+ font-weight: 500;
2337
+ padding: 2px 6px;
2358
2338
  border-radius: 4px;
2359
2339
  background: var(--color-bg-hover);
2360
2340
  color: var(--color-text-secondary);
2361
2341
  letter-spacing: 0.02em;
2362
- text-transform: uppercase;
2363
2342
  }
2364
2343
  .agent-card-badge--custom {
2365
2344
  background: color-mix(in srgb, var(--color-accent-primary) 15%, transparent);
@@ -2374,17 +2353,10 @@ body {
2374
2353
  .new-session-input-bar {
2375
2354
  margin: 0;
2376
2355
  padding: 10px 12px;
2377
- border: 1px solid var(--color-border-primary);
2378
- border-radius: 13px;
2379
- background: var(--color-bg-primary);
2356
+ background: transparent;
2380
2357
  display: flex;
2381
2358
  align-items: center;
2382
2359
  gap: 8px;
2383
- box-shadow: var(--shadow-card);
2384
- transition: border-color .14s;
2385
- }
2386
- .new-session-input-bar:focus-within {
2387
- border-color: color-mix(in srgb, var(--color-accent-primary) 50%, var(--color-border-primary));
2388
2360
  }
2389
2361
  .new-session-composer-btn {
2390
2362
  flex: none;
@@ -2486,6 +2458,140 @@ body {
2486
2458
  background: color-mix(in srgb, var(--color-accent-primary) 85%, #fff);
2487
2459
  }
2488
2460
 
2461
+
2462
+ /* ── Composer frame: two stacked cards, offset like Codex ───────────────── */
2463
+ .ns-composer-frame {
2464
+ display: flex;
2465
+ flex-direction: column;
2466
+ gap: 0;
2467
+ background: transparent;
2468
+ border: none;
2469
+ box-shadow: none;
2470
+ }
2471
+
2472
+ /* Context bar card — narrower on both sides, no gap below */
2473
+ /* ── New Session: context bar (chips above composer input) ─────────────── */
2474
+ .ns-context-bar {
2475
+ display: flex;
2476
+ flex-wrap: wrap;
2477
+ align-items: center;
2478
+ align-self: flex-start;
2479
+ width: calc(100% - 2rem);
2480
+ gap: 0.25rem;
2481
+ padding: 0.3rem 0.75rem;
2482
+ margin: 0 1rem;
2483
+ border: none;
2484
+ border-radius: 10px 10px 0 0;
2485
+ background: var(--color-bg-primary);
2486
+ box-shadow: var(--shadow-card);
2487
+ }
2488
+ .ns-context-bar:empty {
2489
+ display: none;
2490
+ }
2491
+
2492
+ /* Input bar card — full width, slightly brighter background */
2493
+ .ns-input-bar-card {
2494
+ border: 1px solid var(--color-border-primary);
2495
+ border-radius: 13px;
2496
+ background: var(--color-bg-secondary);
2497
+ box-shadow: var(--shadow-card);
2498
+ overflow: hidden;
2499
+ transition: border-color .14s;
2500
+ }
2501
+ .ns-input-bar-card:focus-within {
2502
+ border-color: color-mix(in srgb, var(--color-accent-primary) 50%, var(--color-border-primary));
2503
+ }
2504
+ .ns-ctx-chip {
2505
+ display: inline-flex;
2506
+ align-items: center;
2507
+ gap: 0.3125rem;
2508
+ padding: 0.1875rem 0.5rem;
2509
+ border: none;
2510
+ border-radius: 0.375rem;
2511
+ background: transparent;
2512
+ color: var(--color-text-secondary);
2513
+ font-size: 0.75rem;
2514
+ font-family: inherit;
2515
+ cursor: pointer;
2516
+ transition: background 0.12s, color 0.12s;
2517
+ white-space: nowrap;
2518
+ max-width: 16rem;
2519
+ overflow: hidden;
2520
+ text-overflow: ellipsis;
2521
+ }
2522
+ .ns-ctx-chip:hover {
2523
+ color: var(--color-text-primary);
2524
+ background: var(--color-bg-hover);
2525
+ }
2526
+ .ns-ctx-chip--muted {
2527
+ color: var(--color-text-tertiary);
2528
+ opacity: 0.8;
2529
+ }
2530
+ .ns-ctx-chip--active,
2531
+ .ns-ctx-chip--active:hover {
2532
+ color: var(--color-accent-primary) !important;
2533
+ background: var(--color-accent-soft) !important;
2534
+ }
2535
+ .ns-ctx-chip-icon {
2536
+ display: flex;
2537
+ align-items: center;
2538
+ flex-shrink: 0;
2539
+ opacity: 0.7;
2540
+ }
2541
+ .ns-ctx-chip-label {
2542
+ overflow: hidden;
2543
+ text-overflow: ellipsis;
2544
+ }
2545
+
2546
+ /* Context bar popover */
2547
+ .ns-ctx-popover {
2548
+ z-index: 9999;
2549
+ background: var(--color-bg-primary);
2550
+ border: 1px solid var(--color-border-primary);
2551
+ border-radius: 0.5rem;
2552
+ box-shadow: var(--shadow-popover, 0 4px 16px rgba(0,0,0,.12));
2553
+ padding: 0.25rem;
2554
+ min-width: 11rem;
2555
+ max-width: 22rem;
2556
+ max-height: 18rem;
2557
+ overflow-y: auto;
2558
+ display: flex;
2559
+ flex-direction: column;
2560
+ gap: 1px;
2561
+ }
2562
+ .ns-ctx-popover-item {
2563
+ display: block;
2564
+ width: 100%;
2565
+ text-align: left;
2566
+ padding: 0.375rem 0.625rem;
2567
+ border: none;
2568
+ border-radius: 0.3125rem;
2569
+ background: transparent;
2570
+ color: var(--color-text-secondary);
2571
+ font-size: 0.8125rem;
2572
+ font-family: inherit;
2573
+ cursor: pointer;
2574
+ transition: background 0.1s, color 0.1s;
2575
+ white-space: nowrap;
2576
+ overflow: hidden;
2577
+ text-overflow: ellipsis;
2578
+ }
2579
+ .ns-ctx-popover-item:hover {
2580
+ background: var(--color-bg-hover);
2581
+ color: var(--color-text-primary);
2582
+ }
2583
+ .ns-ctx-popover-item.active {
2584
+ color: var(--color-accent-primary);
2585
+ font-weight: 500;
2586
+ }
2587
+ .ns-ctx-popover-empty {
2588
+ padding: 0.5rem 0.625rem;
2589
+ font-size: 0.8125rem;
2590
+ color: var(--color-text-tertiary);
2591
+ }
2592
+
2593
+ /* Dir popover layout */
2594
+
2489
2595
  .new-session-advanced {
2490
2596
  display: flex;
2491
2597
  flex-direction: column;
@@ -2667,7 +2773,7 @@ body {
2667
2773
  border-bottom: 2px solid transparent;
2668
2774
  }
2669
2775
  .aside-tab:hover { color: var(--color-text-secondary); }
2670
- .aside-tab.active { color: var(--color-text-primary); border-bottom-color: var(--color-accent-primary); font-weight: 600; }
2776
+ .aside-tab.active { color: var(--color-text-primary); border-bottom-color: var(--color-accent-primary); font-weight: 500; }
2671
2777
  .aside-tab-badge {
2672
2778
  font-size: 10px;
2673
2779
  min-width: 16px;
@@ -2712,6 +2818,8 @@ body {
2712
2818
  .session-composer {
2713
2819
  flex-shrink: 0;
2714
2820
  display: flex;
2821
+ flex-direction: column;
2822
+ gap: 0.2rem;
2715
2823
  padding-inline: 24px;
2716
2824
  }
2717
2825
  .session-composer > * {
@@ -2799,6 +2907,116 @@ body {
2799
2907
  gap: 0.75rem;
2800
2908
  }
2801
2909
 
2910
+ /* ── Chat navigator (right-edge minimap) ───────────────────────────────────
2911
+ Absolutely positioned inside #chat-main, vertically synced to #messages
2912
+ via JS (ResizeObserver). Bars are evenly distributed; the active one
2913
+ (matching current scroll position) is highlighted. Hover opens a popup
2914
+ listing every message preview; click scrolls to that message. */
2915
+ .chat-navigator {
2916
+ position: absolute;
2917
+ right: 0;
2918
+ width: 1.5rem;
2919
+ z-index: 10;
2920
+ pointer-events: none;
2921
+ display: flex;
2922
+ flex-direction: column;
2923
+ }
2924
+ .chat-nav-track {
2925
+ flex: 1;
2926
+ display: flex;
2927
+ flex-direction: column;
2928
+ justify-content: center;
2929
+ gap: 0.25rem;
2930
+ padding: 0.625rem 0.375rem;
2931
+ pointer-events: none;
2932
+ overflow: hidden;
2933
+ }
2934
+ .chat-nav-bar {
2935
+ height: 0.1875rem;
2936
+ flex-shrink: 0;
2937
+ border-radius: 0.125rem;
2938
+ background: var(--color-border-secondary);
2939
+ cursor: pointer;
2940
+ pointer-events: auto;
2941
+ opacity: 0.45;
2942
+ transition: opacity 0.15s ease, background 0.15s ease, transform 0.12s ease;
2943
+ }
2944
+ .chat-nav-bar:hover {
2945
+ opacity: 0.85;
2946
+ background: var(--color-text-muted);
2947
+ transform: scaleX(1.6);
2948
+ }
2949
+ .chat-nav-bar.hovered {
2950
+ opacity: 0.85;
2951
+ background: var(--color-text-muted);
2952
+ transform: scaleX(1.6);
2953
+ }
2954
+ .chat-nav-bar.active {
2955
+ opacity: 1;
2956
+ background: var(--color-accent-primary);
2957
+ }
2958
+
2959
+ /* ── Hover popup ─────────────────────────────────────────────────────────── */
2960
+ .chat-nav-popup {
2961
+ position: absolute;
2962
+ right: 100%;
2963
+ top: 0;
2964
+ width: 17rem;
2965
+ max-width: 60vw;
2966
+ max-height: 100%;
2967
+ margin-right: 0.25rem;
2968
+ background: var(--color-bg-primary);
2969
+ border: 1px solid var(--color-border-primary);
2970
+ border-radius: 0.5rem;
2971
+ box-shadow: 0 0.25rem 1.5rem rgba(0, 0, 0, 0.12);
2972
+ display: flex;
2973
+ flex-direction: column;
2974
+ overflow: hidden;
2975
+ pointer-events: auto;
2976
+ }
2977
+ .chat-nav-popup-header {
2978
+ flex-shrink: 0;
2979
+ padding: 0.5rem 0.75rem;
2980
+ border-bottom: 1px solid var(--color-border-secondary);
2981
+ font-size: 0.75rem;
2982
+ font-weight: 600;
2983
+ color: var(--color-text-secondary);
2984
+ text-transform: uppercase;
2985
+ letter-spacing: 0.04em;
2986
+ }
2987
+ .chat-nav-popup-list {
2988
+ flex: 1;
2989
+ overflow-y: auto;
2990
+ overflow-x: hidden;
2991
+ padding: 0.25rem;
2992
+ display: flex;
2993
+ flex-direction: column;
2994
+ gap: 0.0625rem;
2995
+ }
2996
+ .chat-nav-popup-item {
2997
+ padding: 0.4375rem 0.625rem;
2998
+ border-radius: 0.375rem;
2999
+ cursor: pointer;
3000
+ font-size: 0.8125rem;
3001
+ line-height: 1.4;
3002
+ color: var(--color-text-secondary);
3003
+ display: flex;
3004
+ align-items: flex-start;
3005
+ gap: 0.375rem;
3006
+ transition: background 0.1s ease, color 0.1s ease;
3007
+ }
3008
+ .chat-nav-popup-item:hover,
3009
+ .chat-nav-popup-item.highlighted {
3010
+ background: var(--color-bg-hover);
3011
+ color: var(--color-text-primary);
3012
+ }
3013
+ .chat-nav-popup-item-text {
3014
+ overflow: hidden;
3015
+ text-overflow: ellipsis;
3016
+ white-space: nowrap;
3017
+ min-width: 0;
3018
+ }
3019
+
2802
3020
  /* Empty-state hint: shown inside #messages when a session has no messages yet.
2803
3021
  Designed to be quiet and low-contrast so it guides without distracting. */
2804
3022
  .chat-empty-hint {
@@ -2861,7 +3079,7 @@ body {
2861
3079
  padding: 0.625rem 1.25rem;
2862
3080
  border-radius: 24px;
2863
3081
  font-size: 0.8125rem;
2864
- font-weight: 600;
3082
+ font-weight: 500;
2865
3083
  cursor: pointer;
2866
3084
  z-index: 100;
2867
3085
  box-shadow: var(--shadow-md);
@@ -3134,7 +3352,7 @@ body {
3134
3352
  .msg-assistant h1, .msg-assistant h2, .msg-assistant h3,
3135
3353
  .msg-assistant h4, .msg-assistant h5, .msg-assistant h6 {
3136
3354
  margin: 0.8em 0 0.4em;
3137
- font-weight: 600;
3355
+ font-weight: 500;
3138
3356
  line-height: 1.3;
3139
3357
  color: var(--color-text-primary);
3140
3358
  }
@@ -3249,7 +3467,7 @@ body {
3249
3467
  }
3250
3468
  .msg-assistant th {
3251
3469
  background: var(--color-bg-tertiary);
3252
- font-weight: 600;
3470
+ font-weight: 500;
3253
3471
  color: var(--color-text-primary);
3254
3472
  }
3255
3473
  .msg-assistant tr:nth-child(even) { background: var(--color-bg-tertiary); }
@@ -3264,7 +3482,7 @@ body {
3264
3482
  margin: 0.8em 0;
3265
3483
  }
3266
3484
  .msg-assistant img { max-width: 100%; height: auto; border-radius: 0.25rem; }
3267
- .msg-assistant strong { font-weight: 600; color: var(--color-text-primary); }
3485
+ .msg-assistant strong { font-weight: 500; color: var(--color-text-primary); }
3268
3486
  .msg-assistant em { font-style: italic; color: var(--color-text-secondary); }
3269
3487
  .msg-tool { background: var(--color-bg-primary); border: 1px solid var(--color-border-primary); font-family: monospace; font-size: 0.75rem; color: var(--color-text-secondary); align-self: flex-start; }
3270
3488
  .msg-info { color: var(--color-text-secondary); font-size: 0.75rem; align-self: center; font-style: italic; }
@@ -3388,7 +3606,7 @@ body {
3388
3606
  }
3389
3607
  .msg-error a {
3390
3608
  color: var(--color-error);
3391
- font-weight: 600;
3609
+ font-weight: 500;
3392
3610
  text-decoration: underline;
3393
3611
  }
3394
3612
  .msg-error a:hover {
@@ -3416,7 +3634,9 @@ body {
3416
3634
  .error-raw-detail summary::-webkit-details-marker { display: none; }
3417
3635
  .error-raw-detail summary::before {
3418
3636
  content: "";
3419
- display: inline-block;
3637
+ display: inline-flex;
3638
+ align-items: center;
3639
+ justify-content: center;
3420
3640
  width: 0;
3421
3641
  height: 0;
3422
3642
  border-top: 4px solid transparent;
@@ -3471,9 +3691,69 @@ body {
3471
3691
  .btn-ext-refresh:disabled {
3472
3692
  cursor: default;
3473
3693
  }
3474
- .tool-name { color: var(--color-warning); font-weight: 600; }
3694
+ .tool-name { color: var(--color-warning); font-weight: 500; }
3475
3695
  .progress-msg { color: var(--color-accent-primary); font-size: 0.75rem; align-self: center; }
3476
3696
 
3697
+ /* ── Todo / task list panel ────────────────────────────────────────────────
3698
+ Fixed panel above the composer, driven by `todo_update` WS events.
3699
+ Mirrors the CLI TodoArea: shows progress count + each task with a
3700
+ done/pending marker. Hidden automatically when no todos are active. */
3701
+ .todo-panel {
3702
+ max-height: 12rem;
3703
+ overflow-y: auto;
3704
+ padding: 0.625rem 24px 0.625rem;
3705
+ background: transparent;
3706
+ font-size: 0.8125rem;
3707
+ }
3708
+ .todo-header {
3709
+ display: flex;
3710
+ align-items: center;
3711
+ gap: 0.375rem;
3712
+ color: var(--color-text-tertiary);
3713
+ font-weight: 500;
3714
+ font-size: 0.75rem;
3715
+ margin-bottom: 0.5rem;
3716
+ cursor: pointer;
3717
+ user-select: none;
3718
+ }
3719
+ .todo-header:hover { color: var(--color-text-secondary); }
3720
+ .todo-toggle {
3721
+ width: 0.7rem;
3722
+ height: 0.7rem;
3723
+ flex-shrink: 0;
3724
+ transition: transform 0.15s ease;
3725
+ }
3726
+ .todo-panel.collapsed .todo-list { display: none; }
3727
+ .todo-panel.collapsed .todo-toggle { transform: rotate(-90deg); }
3728
+ .todo-panel.collapsed .todo-header { margin-bottom: 0; }
3729
+ .todo-count {
3730
+ font-weight: 500;
3731
+ color: var(--color-text-muted, var(--color-text-tertiary));
3732
+ }
3733
+ .todo-list { display: flex; flex-direction: column; gap: 1px; }
3734
+ .todo-item {
3735
+ display: flex;
3736
+ align-items: center;
3737
+ gap: 0.5rem;
3738
+ padding: 0.2rem 0.5rem;
3739
+ border-radius: var(--radius-sm, 6px);
3740
+ color: var(--color-text-secondary);
3741
+ line-height: 1.4;
3742
+ transition: background 0.12s ease;
3743
+ }
3744
+ .todo-item:hover { background: var(--color-bg-hover, rgba(128,128,128,0.04)); }
3745
+ /* Completed state: dim text color only — no strikethrough, no global opacity (Things3/Linear style) */
3746
+ .todo-item.done { color: var(--color-text-muted, var(--color-text-tertiary)); }
3747
+ .todo-icon {
3748
+ width: 1em; height: 1em;
3749
+ flex-shrink: 0;
3750
+ color: var(--color-accent-primary);
3751
+ }
3752
+ .todo-item:not(.done) .todo-icon {
3753
+ color: var(--color-border-strong, #d4d4ce);
3754
+ }
3755
+ .todo-text { flex: 1; word-break: break-word; }
3756
+
3477
3757
  /* ── Token usage line ────────────────────────────────────────────────────── */
3478
3758
  .token-usage-line {
3479
3759
  align-self: flex-start;
@@ -3491,10 +3771,10 @@ body {
3491
3771
  transition: opacity 0.15s ease;
3492
3772
  }
3493
3773
  .token-usage-line:hover { opacity: 1; }
3494
- .token-usage-line b { font-weight: 600; color: var(--color-text-secondary); }
3495
- .tu-label { color: var(--color-text-tertiary); font-weight: 600; }
3774
+ .token-usage-line b { font-weight: 500; color: var(--color-text-secondary); }
3775
+ .tu-label { color: var(--color-text-tertiary); font-weight: 500; }
3496
3776
  .tu-sep { color: var(--color-text-muted); opacity: 0.45; padding: 0 1px; }
3497
- .tu-cache { color: var(--color-text-tertiary); font-weight: 600; } /* [*] cache hit — neutral, not brand */
3777
+ .tu-cache { color: var(--color-text-tertiary); font-weight: 500; } /* [*] cache hit — neutral, not brand */
3498
3778
  .tu-field { color: var(--color-text-muted); }
3499
3779
  .tu-cost { color: var(--color-text-tertiary); }
3500
3780
  .tu-delta { font-weight: 700; }
@@ -3545,7 +3825,9 @@ body {
3545
3825
  .tool-group-arrow {
3546
3826
  font-size: 0.625rem;
3547
3827
  transition: transform 0.2s;
3548
- display: inline-block;
3828
+ display: inline-flex;
3829
+ align-items: center;
3830
+ justify-content: center;
3549
3831
  color: var(--color-text-tertiary);
3550
3832
  }
3551
3833
  .tool-group.expanded .tool-group-arrow { transform: rotate(90deg); }
@@ -3572,7 +3854,7 @@ body {
3572
3854
  align-items: baseline;
3573
3855
  gap: 0.375rem;
3574
3856
  }
3575
- .tool-item-name { color: var(--color-text-primary); font-weight: 600; }
3857
+ .tool-item-name { color: var(--color-text-primary); font-weight: 500; }
3576
3858
  .tool-item-arg { color: var(--color-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1 1 auto; }
3577
3859
  .tool-item-header.tool-item-expandable { cursor: pointer; user-select: none; }
3578
3860
  .tool-item-header.tool-item-expandable:hover .tool-item-name,
@@ -3691,7 +3973,9 @@ body {
3691
3973
  color: inherit;
3692
3974
  transition: transform 0.2s;
3693
3975
  line-height: 1;
3694
- display: inline-block;
3976
+ display: inline-flex;
3977
+ align-items: center;
3978
+ justify-content: center;
3695
3979
  }
3696
3980
  .thinking-block[open] .thinking-chevron { transform: rotate(90deg); }
3697
3981
 
@@ -4015,7 +4299,9 @@ body {
4015
4299
  height: 0.6875rem;
4016
4300
  }
4017
4301
  .sib-signal-clickable .sig-bars i {
4018
- display: inline-block;
4302
+ display: inline-flex;
4303
+ align-items: center;
4304
+ justify-content: center;
4019
4305
  width: 2px;
4020
4306
  background: var(--color-text-secondary);
4021
4307
  opacity: 0.25; /* dim "off" bar */
@@ -4093,7 +4379,7 @@ body {
4093
4379
  }
4094
4380
  .sib-reasoning-heading {
4095
4381
  font-size: 0.75rem;
4096
- font-weight: 600;
4382
+ font-weight: 500;
4097
4383
  color: var(--color-text-primary);
4098
4384
  }
4099
4385
  .sib-reasoning-hint {
@@ -4116,7 +4402,7 @@ body {
4116
4402
  }
4117
4403
  .sib-reasoning-option.current {
4118
4404
  background: var(--color-bg-hover);
4119
- font-weight: 600;
4405
+ font-weight: 500;
4120
4406
  }
4121
4407
  .sib-model-dropdown {
4122
4408
  position: fixed;
@@ -4151,7 +4437,7 @@ body {
4151
4437
  }
4152
4438
  .sib-model-option.current {
4153
4439
  background: var(--color-bg-hover);
4154
- font-weight: 600;
4440
+ font-weight: 500;
4155
4441
  }
4156
4442
  .sib-model-option .model-badge {
4157
4443
  font-size: 0.5625rem;
@@ -4253,7 +4539,7 @@ body {
4253
4539
  }
4254
4540
  .sib-submodel-row.current {
4255
4541
  background: var(--color-bg-hover);
4256
- font-weight: 600;
4542
+ font-weight: 500;
4257
4543
  color: var(--color-accent-primary);
4258
4544
  }
4259
4545
  .sib-submodel-row-name {
@@ -4441,7 +4727,7 @@ body {
4441
4727
  .sib-model-option .sib-model-name-override {
4442
4728
  font-size: 0.6875rem;
4443
4729
  color: var(--color-accent-primary);
4444
- font-weight: 600;
4730
+ font-weight: 500;
4445
4731
  overflow: hidden;
4446
4732
  text-overflow: ellipsis;
4447
4733
  white-space: nowrap;
@@ -4688,7 +4974,7 @@ body {
4688
4974
  .skill-ac-name {
4689
4975
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
4690
4976
  font-size: 0.8125rem;
4691
- font-weight: 600;
4977
+ font-weight: 500;
4692
4978
  color: var(--color-accent-primary);
4693
4979
  white-space: nowrap;
4694
4980
  flex-shrink: 0;
@@ -4700,7 +4986,7 @@ body {
4700
4986
  .skill-ac-name-zh {
4701
4987
  font-family: inherit;
4702
4988
  font-size: 0.8125rem;
4703
- font-weight: 600;
4989
+ font-weight: 500;
4704
4990
  color: var(--color-accent-primary);
4705
4991
  }
4706
4992
 
@@ -4733,7 +5019,7 @@ body {
4733
5019
  color: var(--color-text-tertiary);
4734
5020
  text-transform: uppercase;
4735
5021
  letter-spacing: .06em;
4736
- font-weight: 600;
5022
+ font-weight: 500;
4737
5023
  border-bottom: 1px solid var(--color-border-secondary);
4738
5024
  margin-bottom: 2px;
4739
5025
  }
@@ -4757,7 +5043,7 @@ body {
4757
5043
  color: var(--color-text-secondary);
4758
5044
  text-transform: uppercase;
4759
5045
  letter-spacing: .06em;
4760
- font-weight: 600;
5046
+ font-weight: 500;
4761
5047
  line-height: 1rem;
4762
5048
  }
4763
5049
 
@@ -4779,7 +5065,9 @@ body {
4779
5065
 
4780
5066
  .skill-ac-toggle-track {
4781
5067
  position: relative;
4782
- display: inline-block;
5068
+ display: inline-flex;
5069
+ align-items: center;
5070
+ justify-content: center;
4783
5071
  width: 1.75rem;
4784
5072
  height: 1rem;
4785
5073
  background: var(--color-border-primary);
@@ -5029,7 +5317,7 @@ body {
5029
5317
  padding: 1rem 1.25rem;
5030
5318
  border-bottom: 1px solid var(--color-border-primary);
5031
5319
  font-size: 1rem;
5032
- font-weight: 600;
5320
+ font-weight: 500;
5033
5321
  color: var(--color-text-primary);
5034
5322
  flex-shrink: 0;
5035
5323
  }
@@ -5284,7 +5572,9 @@ body {
5284
5572
  }
5285
5573
  .toggle-switch {
5286
5574
  position: relative;
5287
- display: inline-block;
5575
+ display: inline-flex;
5576
+ align-items: center;
5577
+ justify-content: center;
5288
5578
  width: 2.25rem;
5289
5579
  height: 1.25rem;
5290
5580
  cursor: pointer;
@@ -5339,7 +5629,7 @@ body {
5339
5629
  .model-card-badges { display: flex; gap: 0.375rem; }
5340
5630
  .badge {
5341
5631
  font-size: 0.6875rem;
5342
- font-weight: 600;
5632
+ font-weight: 500;
5343
5633
  padding: 2px 0.5rem;
5344
5634
  border-radius: 20px;
5345
5635
  letter-spacing: 0.3px;
@@ -5552,9 +5842,11 @@ body {
5552
5842
 
5553
5843
  /* Provider recommended badge (inside dropdown option) */
5554
5844
  .provider-badge-recommended {
5555
- display: inline-block;
5845
+ display: inline-flex;
5846
+ align-items: center;
5847
+ justify-content: center;
5556
5848
  font-size: 0.625rem;
5557
- font-weight: 600;
5849
+ font-weight: 500;
5558
5850
  padding: 1px 0.375rem;
5559
5851
  margin-left: 0.375rem;
5560
5852
  border-radius: 4px;
@@ -5581,7 +5873,7 @@ body {
5581
5873
  }
5582
5874
  .provider-promo-hint .promo-title {
5583
5875
  font-size: 0.6875rem;
5584
- font-weight: 600;
5876
+ font-weight: 500;
5585
5877
  color: var(--color-text-secondary);
5586
5878
  margin-bottom: 0.1875rem;
5587
5879
  }
@@ -5646,7 +5938,7 @@ body {
5646
5938
  }
5647
5939
  .model-card-grid-name {
5648
5940
  font-size: 0.9375rem;
5649
- font-weight: 600;
5941
+ font-weight: 500;
5650
5942
  color: var(--color-text-primary);
5651
5943
  line-height: 1.4;
5652
5944
  word-break: break-word;
@@ -5661,7 +5953,7 @@ body {
5661
5953
  font-family: var(--font-mono, monospace);
5662
5954
  background: var(--color-bg-tertiary);
5663
5955
  border-radius: 4px;
5664
- display: inline-block;
5956
+ display: inline-flex;
5665
5957
  max-width: 100%;
5666
5958
  overflow: hidden;
5667
5959
  text-overflow: ellipsis;
@@ -5874,7 +6166,7 @@ body {
5874
6166
  .modal-content .modal-header h3 {
5875
6167
  margin: 0;
5876
6168
  font-size: 1.0625rem;
5877
- font-weight: 600;
6169
+ font-weight: 500;
5878
6170
  color: var(--color-text-primary);
5879
6171
  }
5880
6172
  .modal-close {
@@ -5939,7 +6231,7 @@ body {
5939
6231
  padding: 1rem 1.25rem;
5940
6232
  border-bottom: 1px solid var(--color-border-primary);
5941
6233
  font-size: 1.0625rem;
5942
- font-weight: 600;
6234
+ font-weight: 500;
5943
6235
  color: var(--color-text-primary);
5944
6236
  }
5945
6237
  .modal-buttons {
@@ -6062,7 +6354,7 @@ body {
6062
6354
  .dp-col-name {
6063
6355
  flex: 1;
6064
6356
  font-size: 0.75rem;
6065
- font-weight: 600;
6357
+ font-weight: 500;
6066
6358
  color: var(--color-text-tertiary);
6067
6359
  text-transform: uppercase;
6068
6360
  letter-spacing: 0.04em;
@@ -6401,7 +6693,7 @@ body {
6401
6693
  }
6402
6694
  .modal-box.sm { max-width: 30rem; }
6403
6695
  .modal-box.lg { max-width: 42.5rem; }
6404
- .modal-box .modal-title { font-size: 1rem; font-weight: 600; color: var(--color-text-primary); }
6696
+ .modal-box .modal-title { font-size: 1rem; font-weight: 500; color: var(--color-text-primary); }
6405
6697
  .modal-confirm-message {
6406
6698
  font-size: 0.9375rem;
6407
6699
  line-height: 1.6;
@@ -6415,7 +6707,7 @@ body {
6415
6707
  justify-content: flex-end;
6416
6708
  margin-top: 1rem;
6417
6709
  }
6418
- .btn-primary { background: var(--color-button-primary); color: #fff; border: none; border-radius: var(--radius-sm); padding: 0.5rem 1.25rem; font-weight: 600; cursor: pointer; box-shadow: var(--shadow-xs); transition: background var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast); }
6710
+ .btn-primary { background: var(--color-button-primary); color: #fff; border: none; border-radius: var(--radius-sm); padding: 0.5rem 1.25rem; font-weight: 500; cursor: pointer; box-shadow: var(--shadow-xs); transition: background var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast); }
6419
6711
  .btn-primary:hover { background: var(--color-button-primary-hover); box-shadow: var(--shadow-md); transform: translateY(-1px); }
6420
6712
  .btn-primary:active { transform: translateY(0); box-shadow: var(--shadow-xs); }
6421
6713
  .btn-secondary { background: transparent; color: var(--color-text-secondary); border: 1px solid var(--color-border-primary); border-radius: var(--radius-sm); padding: 0.5rem 1.25rem; font-weight: 500; cursor: pointer; transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast); }
@@ -6473,7 +6765,9 @@ body {
6473
6765
  .toast-body { flex: 1; min-width: 0; }
6474
6766
  .toast-message { white-space: pre-wrap; word-break: break-word; }
6475
6767
  .toast-action {
6476
- display: inline-block;
6768
+ display: inline-flex;
6769
+ align-items: center;
6770
+ justify-content: center;
6477
6771
  margin-top: 0.25rem;
6478
6772
  padding: 0;
6479
6773
  background: none;
@@ -6698,7 +6992,7 @@ body {
6698
6992
  overflow: hidden;
6699
6993
  display: flex;
6700
6994
  flex-direction: column;
6701
- padding: 2rem 2rem 1.5rem;
6995
+ padding: 1.75rem 2.25rem;
6702
6996
  gap: 1.25rem;
6703
6997
  }
6704
6998
 
@@ -6919,10 +7213,6 @@ body {
6919
7213
  width: 12rem;
6920
7214
  }
6921
7215
  .skills-search::placeholder { color: var(--color-text-tertiary); }
6922
- .skills-search:focus {
6923
- outline: none;
6924
- border-color: var(--color-accent, #6366f1);
6925
- }
6926
7216
  .skills-search-empty {
6927
7217
  padding: 2rem 1rem;
6928
7218
  text-align: center;
@@ -7111,7 +7401,7 @@ body {
7111
7401
  }
7112
7402
  .skill-name {
7113
7403
  font-size: 0.8125rem;
7114
- font-weight: 600;
7404
+ font-weight: 500;
7115
7405
  color: var(--color-text-primary);
7116
7406
  }
7117
7407
  .skill-card-desc {
@@ -7126,7 +7416,7 @@ body {
7126
7416
  /* ── Skill Badges ────────────────────────────────────────────────────────── */
7127
7417
  .skill-badge {
7128
7418
  font-size: 0.625rem;
7129
- font-weight: 600;
7419
+ font-weight: 500;
7130
7420
  padding: 2px 0.4375rem;
7131
7421
  border-radius: 10px;
7132
7422
  letter-spacing: 0.3px;
@@ -7202,7 +7492,9 @@ body {
7202
7492
  position: absolute;
7203
7493
  }
7204
7494
  .skill-toggle-track {
7205
- display: inline-block;
7495
+ display: inline-flex;
7496
+ align-items: center;
7497
+ justify-content: center;
7206
7498
  width: 2.25rem;
7207
7499
  height: 1.25rem;
7208
7500
  background: var(--color-border-primary);
@@ -7385,7 +7677,7 @@ body {
7385
7677
  .store-card-body { flex: 1; min-width: 0; }
7386
7678
  .store-card-title {
7387
7679
  font-size: 0.8125rem;
7388
- font-weight: 600;
7680
+ font-weight: 500;
7389
7681
  color: var(--color-text-primary);
7390
7682
  margin-bottom: 0.25rem;
7391
7683
  }
@@ -7402,7 +7694,7 @@ body {
7402
7694
  color: var(--color-accent-primary);
7403
7695
  padding: 0.375rem 0.875rem;
7404
7696
  font-size: 0.75rem;
7405
- font-weight: 600;
7697
+ font-weight: 500;
7406
7698
  cursor: pointer;
7407
7699
  transition: background .15s, border-color .15s;
7408
7700
  }
@@ -7413,7 +7705,7 @@ body {
7413
7705
  .store-badge-installed {
7414
7706
  font-size: 0.75rem;
7415
7707
  color: var(--color-success);
7416
- font-weight: 600;
7708
+ font-weight: 500;
7417
7709
  }
7418
7710
 
7419
7711
  /* ── Brand Skills tab ────────────────────────────────────────────────────── */
@@ -7579,10 +7871,6 @@ body {
7579
7871
  background: var(--color-bg-secondary);
7580
7872
  color: var(--color-text-primary);
7581
7873
  }
7582
- .extensions-search:focus {
7583
- outline: none;
7584
- border-color: var(--color-accent, #6366f1);
7585
- }
7586
7874
  .extensions-sort {
7587
7875
  flex-shrink: 0;
7588
7876
  font-size: 0.8125rem;
@@ -7653,7 +7941,7 @@ body {
7653
7941
  }
7654
7942
  .extension-name {
7655
7943
  font-size: 0.8125rem;
7656
- font-weight: 600;
7944
+ font-weight: 500;
7657
7945
  color: var(--color-text-primary);
7658
7946
  }
7659
7947
  .extension-version {
@@ -7717,7 +8005,7 @@ body {
7717
8005
  }
7718
8006
  .extension-homepage {
7719
8007
  font-size: 0.6875rem;
7720
- color: var(--color-accent, #6366f1);
8008
+ color: var(--color-accent-primary);
7721
8009
  text-decoration: none;
7722
8010
  }
7723
8011
  .extension-homepage:hover { text-decoration: underline; }
@@ -7725,6 +8013,35 @@ body {
7725
8013
  /* Clickable catalog card + detail view */
7726
8014
  .extension-card-clickable { cursor: pointer; }
7727
8015
 
8016
+ /* System extension card toggle switch */
8017
+ .ext-card-toggle {
8018
+ flex-shrink: 0;
8019
+ position: relative;
8020
+ width: 2.25rem;
8021
+ height: 1.25rem;
8022
+ border-radius: 999px;
8023
+ border: none;
8024
+ background: var(--color-border-primary);
8025
+ cursor: pointer;
8026
+ transition: background 0.2s;
8027
+ padding: 0;
8028
+ margin-left: auto;
8029
+ align-self: center;
8030
+ }
8031
+ .ext-card-toggle-on { background: var(--color-accent-primary); }
8032
+ .ext-card-toggle-thumb {
8033
+ position: absolute;
8034
+ top: 0.125rem;
8035
+ left: 0.125rem;
8036
+ width: 1rem;
8037
+ height: 1rem;
8038
+ border-radius: 50%;
8039
+ background: #fff;
8040
+ transition: transform 0.2s;
8041
+ display: block;
8042
+ }
8043
+ .ext-card-toggle-on .ext-card-toggle-thumb { transform: translateX(1rem); }
8044
+
7728
8045
  .extension-detail {
7729
8046
  flex: 1;
7730
8047
  overflow-y: auto;
@@ -7767,7 +8084,7 @@ body {
7767
8084
  .extension-detail-block { margin-top: 1.5rem; }
7768
8085
  .extension-detail-block-title {
7769
8086
  font-size: 0.75rem;
7770
- font-weight: 600;
8087
+ font-weight: 500;
7771
8088
  text-transform: uppercase;
7772
8089
  letter-spacing: 0.04em;
7773
8090
  margin: 0 0 0.75rem;
@@ -7781,7 +8098,7 @@ body {
7781
8098
  }
7782
8099
  .extension-readme-body h1,
7783
8100
  .extension-readme-body h2,
7784
- .extension-readme-body h3 { margin: 1em 0 0.4em; font-weight: 600; }
8101
+ .extension-readme-body h3 { margin: 1em 0 0.4em; font-weight: 500; }
7785
8102
  .extension-readme-body h1 { font-size: 1.2em; }
7786
8103
  .extension-readme-body h2 { font-size: 1.05em; }
7787
8104
  .extension-readme-body h3 { font-size: 0.95em; }
@@ -7807,7 +8124,7 @@ body {
7807
8124
  .extension-detail-section { margin-bottom: 0.875rem; }
7808
8125
  .extension-detail-section-title {
7809
8126
  font-size: 0.6875rem;
7810
- font-weight: 600;
8127
+ font-weight: 500;
7811
8128
  text-transform: uppercase;
7812
8129
  letter-spacing: 0.03em;
7813
8130
  color: var(--color-text-muted);
@@ -7888,7 +8205,7 @@ body {
7888
8205
  .extension-version-notes h2,
7889
8206
  .extension-version-notes h3 {
7890
8207
  font-size: 0.8125rem;
7891
- font-weight: 600;
8208
+ font-weight: 500;
7892
8209
  color: var(--color-text-primary);
7893
8210
  margin: 0.75rem 0 0.25rem;
7894
8211
  }
@@ -7978,6 +8295,11 @@ body {
7978
8295
  background: var(--color-error-bg);
7979
8296
  border-color: var(--color-error);
7980
8297
  }
8298
+ .extension-install-error {
8299
+ margin-top: 0.5rem;
8300
+ font-size: 0.8125rem;
8301
+ color: var(--color-error);
8302
+ }
7981
8303
 
7982
8304
  /* Brand Skill card */
7983
8305
  .brand-skill-card {
@@ -8002,7 +8324,7 @@ body {
8002
8324
  }
8003
8325
  .brand-skill-name {
8004
8326
  font-size: 0.8125rem;
8005
- font-weight: 600;
8327
+ font-weight: 500;
8006
8328
  color: var(--color-text-primary);
8007
8329
  }
8008
8330
  .brand-skill-desc {
@@ -8030,7 +8352,7 @@ body {
8030
8352
  /* Version chips */
8031
8353
  .brand-skill-version {
8032
8354
  font-size: 0.6875rem;
8033
- font-weight: 600;
8355
+ font-weight: 500;
8034
8356
  padding: 2px 0.5rem;
8035
8357
  border-radius: 10px;
8036
8358
  white-space: nowrap;
@@ -8109,7 +8431,7 @@ body {
8109
8431
  border-radius: 6px;
8110
8432
  cursor: pointer;
8111
8433
  font-size: 0.75rem;
8112
- font-weight: 600;
8434
+ font-weight: 500;
8113
8435
  padding: 0.3125rem 0.75rem;
8114
8436
  transition: background .15s;
8115
8437
  }
@@ -8141,7 +8463,7 @@ body {
8141
8463
  color: var(--color-success);
8142
8464
  cursor: pointer;
8143
8465
  font-size: 0.75rem;
8144
- font-weight: 600;
8466
+ font-weight: 500;
8145
8467
  padding: 0.3125rem 0.75rem;
8146
8468
  transition: background .15s;
8147
8469
  white-space: nowrap;
@@ -8210,7 +8532,7 @@ body {
8210
8532
  .code-editor-header h3 {
8211
8533
  margin: 0;
8212
8534
  font-size: 0.875rem;
8213
- font-weight: 600;
8535
+ font-weight: 500;
8214
8536
  font-family: var(--font-mono, 'SF Mono', 'Fira Code', monospace);
8215
8537
  color: var(--color-text-primary);
8216
8538
  }
@@ -8353,7 +8675,7 @@ body {
8353
8675
  .code-editor-markdown-preview h4 {
8354
8676
  margin-top: 1.25em;
8355
8677
  margin-bottom: 0.5em;
8356
- font-weight: 600;
8678
+ font-weight: 500;
8357
8679
  }
8358
8680
  .code-editor-markdown-preview h1:first-child,
8359
8681
  .code-editor-markdown-preview h2:first-child,
@@ -8420,7 +8742,7 @@ body {
8420
8742
  }
8421
8743
  .code-editor-markdown-preview th {
8422
8744
  background: rgba(128, 128, 128, 0.15);
8423
- font-weight: 600;
8745
+ font-weight: 500;
8424
8746
  }
8425
8747
 
8426
8748
  /* ── Skills sidebar section ──────────────────────────────────────────────── */
@@ -8571,7 +8893,7 @@ body.setup-mode[data-theme="dark"] {
8571
8893
  /* Phase label */
8572
8894
  .setup-phase-label {
8573
8895
  font-size: 0.8125rem;
8574
- font-weight: 600;
8896
+ font-weight: 500;
8575
8897
  color: var(--color-text-secondary);
8576
8898
  text-align: center;
8577
8899
  margin: 0;
@@ -8598,7 +8920,7 @@ body.setup-mode[data-theme="dark"] {
8598
8920
  border-radius: 8px;
8599
8921
  color: var(--color-text-primary);
8600
8922
  font-size: 0.8125rem;
8601
- font-weight: 600;
8923
+ font-weight: 500;
8602
8924
  padding: 0.5rem 0;
8603
8925
  cursor: pointer;
8604
8926
  transition: border-color .15s, background .15s, color .15s;
@@ -8620,7 +8942,7 @@ body.setup-mode[data-theme="dark"] {
8620
8942
  border-radius: 8px;
8621
8943
  padding: 0.5625rem 0;
8622
8944
  font-size: 0.8125rem;
8623
- font-weight: 600;
8945
+ font-weight: 500;
8624
8946
  cursor: pointer;
8625
8947
  transition: background .15s, opacity .15s;
8626
8948
  }
@@ -8640,7 +8962,7 @@ body.setup-mode[data-theme="dark"] {
8640
8962
  }
8641
8963
  .setup-label {
8642
8964
  font-size: 0.6875rem;
8643
- font-weight: 600;
8965
+ font-weight: 500;
8644
8966
  color: var(--color-text-tertiary);
8645
8967
  text-transform: uppercase;
8646
8968
  letter-spacing: .06em;
@@ -8699,7 +9021,7 @@ body.setup-mode[data-theme="dark"] {
8699
9021
  }
8700
9022
  .setup-device-card-badge {
8701
9023
  font-size: 0.625rem;
8702
- font-weight: 600;
9024
+ font-weight: 500;
8703
9025
  padding: 1px 0.375rem;
8704
9026
  border-radius: 4px;
8705
9027
  background: var(--color-accent-primary);
@@ -8709,7 +9031,7 @@ body.setup-mode[data-theme="dark"] {
8709
9031
  }
8710
9032
  .setup-device-card-lead {
8711
9033
  font-size: 0.8125rem;
8712
- font-weight: 600;
9034
+ font-weight: 500;
8713
9035
  color: var(--color-text-primary);
8714
9036
  margin: 0 0 0.625rem;
8715
9037
  line-height: 1.5;
@@ -8765,7 +9087,9 @@ body.setup-mode[data-theme="dark"] {
8765
9087
  color: var(--color-text-primary);
8766
9088
  }
8767
9089
  .setup-device-reopen {
8768
- display: inline-block;
9090
+ display: inline-flex;
9091
+ align-items: center;
9092
+ justify-content: center;
8769
9093
  font-size: 0.75rem;
8770
9094
  color: var(--color-accent, var(--accent, #6366f1));
8771
9095
  text-decoration: none;
@@ -8820,7 +9144,7 @@ body.setup-mode[data-theme="dark"] {
8820
9144
  }
8821
9145
  .setup-device-success-points li strong {
8822
9146
  color: var(--color-text-primary);
8823
- font-weight: 600;
9147
+ font-weight: 500;
8824
9148
  margin-right: 0.25rem;
8825
9149
  }
8826
9150
  .setup-device-success-points li.setup-device-success-note {
@@ -8901,7 +9225,7 @@ body.setup-mode[data-theme="dark"] {
8901
9225
  border-radius: 8px;
8902
9226
  padding: 0.5625rem 0.875rem;
8903
9227
  font-size: 0.8125rem;
8904
- font-weight: 600;
9228
+ font-weight: 500;
8905
9229
  cursor: pointer;
8906
9230
  white-space: nowrap;
8907
9231
  transition: border-color .15s, color .15s;
@@ -8920,7 +9244,7 @@ body.setup-mode[data-theme="dark"] {
8920
9244
  border-radius: 8px;
8921
9245
  padding: 0.625rem 0;
8922
9246
  font-size: 0.875rem;
8923
- font-weight: 600;
9247
+ font-weight: 500;
8924
9248
  cursor: pointer;
8925
9249
  transition: background .15s, opacity .15s;
8926
9250
  }
@@ -9033,7 +9357,7 @@ body.setup-mode[data-theme="dark"] {
9033
9357
  border-radius: 8px;
9034
9358
  color: var(--color-text-primary);
9035
9359
  font-size: 0.9375rem;
9036
- font-weight: 600;
9360
+ font-weight: 500;
9037
9361
  padding: 0.75rem 2rem;
9038
9362
  cursor: pointer;
9039
9363
  transition: border-color .15s, background .15s, color .15s;
@@ -9061,7 +9385,7 @@ body.setup-mode[data-theme="dark"] {
9061
9385
  border-radius: 6px;
9062
9386
  color: var(--color-text-primary);
9063
9387
  font-size: 0.8125rem;
9064
- font-weight: 600;
9388
+ font-weight: 500;
9065
9389
  padding: 0.375rem 1.125rem;
9066
9390
  cursor: pointer;
9067
9391
  transition: border-color .15s, background .15s, color .15s;
@@ -9088,7 +9412,7 @@ body.setup-mode[data-theme="dark"] {
9088
9412
 
9089
9413
  .onboard-phase-title {
9090
9414
  font-size: 1rem;
9091
- font-weight: 600;
9415
+ font-weight: 500;
9092
9416
  color: var(--color-text-primary);
9093
9417
  text-align: center;
9094
9418
  }
@@ -9109,7 +9433,7 @@ body.setup-mode[data-theme="dark"] {
9109
9433
 
9110
9434
  .onboard-label {
9111
9435
  font-size: 0.75rem;
9112
- font-weight: 600;
9436
+ font-weight: 500;
9113
9437
  color: var(--color-text-secondary);
9114
9438
  text-transform: uppercase;
9115
9439
  letter-spacing: .04em;
@@ -9172,7 +9496,7 @@ body.setup-mode[data-theme="dark"] {
9172
9496
  border-radius: 6px;
9173
9497
  padding: 0.625rem 1.75rem;
9174
9498
  font-size: 0.875rem;
9175
- font-weight: 600;
9499
+ font-weight: 500;
9176
9500
  cursor: pointer;
9177
9501
  transition: background .15s;
9178
9502
  }
@@ -9445,7 +9769,7 @@ body.setup-mode[data-theme="dark"] {
9445
9769
  }
9446
9770
  .qr-lightbox-label {
9447
9771
  font-size: 0.9375rem;
9448
- font-weight: 600;
9772
+ font-weight: 500;
9449
9773
  color: var(--color-text-primary);
9450
9774
  margin: 0;
9451
9775
  text-align: center;
@@ -9563,7 +9887,7 @@ body.setup-mode[data-theme="dark"] {
9563
9887
  color: var(--color-warning);
9564
9888
  cursor: pointer;
9565
9889
  font-size: 0.75rem;
9566
- font-weight: 600;
9890
+ font-weight: 500;
9567
9891
  padding: 0.2rem 0.6rem;
9568
9892
  opacity: 0.9;
9569
9893
  flex-shrink: 0;
@@ -9598,7 +9922,7 @@ body.setup-mode[data-theme="dark"] {
9598
9922
  color: #fff;
9599
9923
  cursor: pointer;
9600
9924
  font-size: 0.75rem;
9601
- font-weight: 600;
9925
+ font-weight: 500;
9602
9926
  padding: 0.25rem 0.75rem;
9603
9927
  white-space: nowrap;
9604
9928
  transition: opacity 0.15s;
@@ -9661,7 +9985,7 @@ body.setup-mode[data-theme="dark"] {
9661
9985
 
9662
9986
  .settings-theme-label {
9663
9987
  font-size: 0.875rem;
9664
- font-weight: 600;
9988
+ font-weight: 500;
9665
9989
  color: var(--color-text-primary);
9666
9990
  transition: color 0.3s ease;
9667
9991
  }
@@ -9729,11 +10053,18 @@ body.setup-mode[data-theme="dark"] {
9729
10053
  }
9730
10054
 
9731
10055
  .channels-page-header {
10056
+ display: flex;
10057
+ align-items: flex-start;
10058
+ justify-content: space-between;
10059
+ gap: 1rem;
9732
10060
  margin-bottom: 0.25rem;
9733
10061
  }
10062
+ .channels-page-header-main {
10063
+ min-width: 0;
10064
+ }
9734
10065
 
9735
10066
  .channels-page-title {
9736
- font-size: 1.375rem;
10067
+ font-size: 1.5rem;
9737
10068
  font-weight: 700;
9738
10069
  color: var(--color-text-primary);
9739
10070
  margin: 0 0 0.375rem;
@@ -9853,7 +10184,7 @@ body.setup-mode[data-theme="dark"] {
9853
10184
 
9854
10185
  .channel-card-name {
9855
10186
  font-size: 0.9375rem;
9856
- font-weight: 600;
10187
+ font-weight: 500;
9857
10188
  color: var(--color-text-primary);
9858
10189
  margin-bottom: 2px;
9859
10190
  }
@@ -9979,7 +10310,7 @@ body.setup-mode[data-theme="dark"] {
9979
10310
 
9980
10311
  .channel-section-header {
9981
10312
  font-size: 0.75rem;
9982
- font-weight: 600;
10313
+ font-weight: 500;
9983
10314
  text-transform: uppercase;
9984
10315
  letter-spacing: 0.05em;
9985
10316
  color: var(--color-text-tertiary);
@@ -10173,7 +10504,7 @@ body.setup-mode[data-theme="dark"] {
10173
10504
  font-family: monospace;
10174
10505
  color: var(--color-text-primary);
10175
10506
  margin: 0 0 0.75rem;
10176
- font-weight: 600;
10507
+ font-weight: 500;
10177
10508
  }
10178
10509
  .vup-arrow {
10179
10510
  color: var(--color-accent-primary);
@@ -10191,7 +10522,7 @@ body.setup-mode[data-theme="dark"] {
10191
10522
  border: none;
10192
10523
  border-radius: 6px;
10193
10524
  font-size: 0.75rem;
10194
- font-weight: 600;
10525
+ font-weight: 500;
10195
10526
  cursor: pointer;
10196
10527
  transition: background .15s, transform .1s;
10197
10528
  }
@@ -10229,7 +10560,9 @@ body.setup-mode[data-theme="dark"] {
10229
10560
  .vup-installing-dot::after,
10230
10561
  .vup-installing-dot b {
10231
10562
  content: "";
10232
- display: inline-block;
10563
+ display: inline-flex;
10564
+ align-items: center;
10565
+ justify-content: center;
10233
10566
  width: 0.3125rem;
10234
10567
  height: 0.3125rem;
10235
10568
  border-radius: 50%;
@@ -10309,7 +10642,7 @@ body.setup-mode[data-theme="dark"] {
10309
10642
  border: none;
10310
10643
  border-radius: 6px;
10311
10644
  font-size: 0.8125rem;
10312
- font-weight: 600;
10645
+ font-weight: 500;
10313
10646
  cursor: pointer;
10314
10647
  transition: background .15s, transform .1s;
10315
10648
  letter-spacing: .02em;
@@ -10351,7 +10684,7 @@ body.setup-mode[data-theme="dark"] {
10351
10684
  .vup-restart-failed-title {
10352
10685
  margin: 0 0 0.375rem;
10353
10686
  font-size: 0.8125rem;
10354
- font-weight: 600;
10687
+ font-weight: 500;
10355
10688
  color: var(--color-error, #ef4444);
10356
10689
  }
10357
10690
  .vup-restart-failed-desc {
@@ -10458,7 +10791,7 @@ body.setup-mode[data-theme="dark"] {
10458
10791
 
10459
10792
  .profile-section-title {
10460
10793
  font-size: 0.9375rem;
10461
- font-weight: 600;
10794
+ font-weight: 500;
10462
10795
  color: var(--color-text-primary);
10463
10796
  margin: 0;
10464
10797
  }
@@ -10587,7 +10920,7 @@ body.setup-mode[data-theme="dark"] {
10587
10920
  .profile-markdown h2,
10588
10921
  .profile-markdown h3 {
10589
10922
  margin: 0.875rem 0 0.5rem;
10590
- font-weight: 600;
10923
+ font-weight: 500;
10591
10924
  color: var(--color-text-primary);
10592
10925
  }
10593
10926
 
@@ -10617,7 +10950,7 @@ body.setup-mode[data-theme="dark"] {
10617
10950
  font-size: 0.75rem;
10618
10951
  }
10619
10952
 
10620
- .profile-markdown strong { font-weight: 600; }
10953
+ .profile-markdown strong { font-weight: 500; }
10621
10954
  .profile-markdown em { font-style: italic; }
10622
10955
 
10623
10956
  /* ── Memories list (cards) ───────────────────────────────────────────── */
@@ -10676,7 +11009,7 @@ body.setup-mode[data-theme="dark"] {
10676
11009
 
10677
11010
  .memory-card-title {
10678
11011
  font-size: 0.875rem;
10679
- font-weight: 600;
11012
+ font-weight: 500;
10680
11013
  color: var(--color-text-primary);
10681
11014
  margin-bottom: 0.1875rem;
10682
11015
  overflow: hidden;
@@ -10771,7 +11104,7 @@ body.setup-mode[data-theme="dark"] {
10771
11104
  .memory-card-body h2,
10772
11105
  .memory-card-body h3 {
10773
11106
  margin: 0.625rem 0 0.375rem;
10774
- font-weight: 600;
11107
+ font-weight: 500;
10775
11108
  }
10776
11109
 
10777
11110
  .memory-card-body p { margin: 0.375rem 0; }
@@ -10866,7 +11199,7 @@ body.setup-mode[data-theme="dark"] {
10866
11199
  }
10867
11200
  .trash-session-card-name {
10868
11201
  font-size: 0.875rem;
10869
- font-weight: 600;
11202
+ font-weight: 500;
10870
11203
  color: var(--color-text-primary);
10871
11204
  white-space: nowrap;
10872
11205
  overflow: hidden;
@@ -11092,9 +11425,8 @@ body.setup-mode[data-theme="dark"] {
11092
11425
  min-width: 0;
11093
11426
  }
11094
11427
  .trash-card-title {
11095
- font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
11096
11428
  font-size: 0.8125rem;
11097
- font-weight: 600;
11429
+ font-weight: 500;
11098
11430
  color: var(--color-text-primary);
11099
11431
  white-space: nowrap;
11100
11432
  overflow: hidden;
@@ -11102,7 +11434,6 @@ body.setup-mode[data-theme="dark"] {
11102
11434
  margin-bottom: 0.25rem;
11103
11435
  }
11104
11436
  .trash-card-path {
11105
- font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
11106
11437
  font-size: 0.6875rem;
11107
11438
  color: var(--color-text-muted);
11108
11439
  white-space: nowrap;
@@ -11270,7 +11601,7 @@ body.setup-mode[data-theme="dark"] {
11270
11601
  }
11271
11602
  .billing-title-row h2 {
11272
11603
  font-size: 1.5rem;
11273
- font-weight: 600;
11604
+ font-weight: 500;
11274
11605
  color: var(--color-text-primary);
11275
11606
  margin: 0;
11276
11607
  }
@@ -11344,9 +11675,6 @@ body.setup-mode[data-theme="dark"] {
11344
11675
  background-position: right 0.625rem center;
11345
11676
  transition: border-color 0.15s ease;
11346
11677
  }
11347
- .billing-model-filter:hover {
11348
- border-color: var(--color-border-strong);
11349
- }
11350
11678
  .billing-model-filter:focus {
11351
11679
  outline: none;
11352
11680
  border-color: var(--color-accent-primary);
@@ -11568,7 +11896,7 @@ body.setup-mode[data-theme="dark"] {
11568
11896
  /* ── Cost Trend Line Chart ───────────────────────────────────────────── */
11569
11897
  .billing-trend-total {
11570
11898
  font-size: 0.75rem;
11571
- font-weight: 600;
11899
+ font-weight: 500;
11572
11900
  color: var(--color-accent-primary);
11573
11901
  }
11574
11902
  .billing-trend-chart {
@@ -11637,7 +11965,7 @@ body.setup-mode[data-theme="dark"] {
11637
11965
  }
11638
11966
  .billing-chart-header h4 {
11639
11967
  font-size: 0.9375rem;
11640
- font-weight: 600;
11968
+ font-weight: 500;
11641
11969
  color: var(--color-text-primary);
11642
11970
  margin: 0;
11643
11971
  }
@@ -11762,14 +12090,14 @@ body.setup-mode[data-theme="dark"] {
11762
12090
  border-bottom: 1px solid var(--color-border-primary);
11763
12091
  }
11764
12092
  .tooltip-date {
11765
- font-weight: 600;
12093
+ font-weight: 500;
11766
12094
  color: var(--color-text-primary);
11767
12095
  white-space: nowrap;
11768
12096
  }
11769
12097
  .tooltip-total-value {
11770
12098
  font-size: 0.875rem;
11771
12099
  color: var(--color-accent);
11772
- font-weight: 600;
12100
+ font-weight: 500;
11773
12101
  white-space: nowrap;
11774
12102
  margin-left: 0.75rem;
11775
12103
  }
@@ -11814,7 +12142,7 @@ body.setup-mode[data-theme="dark"] {
11814
12142
  }
11815
12143
  .billing-section h3 {
11816
12144
  font-size: 0.9375rem;
11817
- font-weight: 600;
12145
+ font-weight: 500;
11818
12146
  color: var(--color-text-primary);
11819
12147
  margin: 0 0 1rem 0;
11820
12148
  }
@@ -11841,7 +12169,7 @@ body.setup-mode[data-theme="dark"] {
11841
12169
  }
11842
12170
  .billing-token-bar-value {
11843
12171
  font-size: 0.8125rem;
11844
- font-weight: 600;
12172
+ font-weight: 500;
11845
12173
  color: var(--color-text-primary);
11846
12174
  }
11847
12175
  .billing-token-bar-track {
@@ -11916,7 +12244,7 @@ body.setup-mode[data-theme="dark"] {
11916
12244
  }
11917
12245
  .billing-model-cost {
11918
12246
  font-size: 0.8125rem;
11919
- font-weight: 600;
12247
+ font-weight: 500;
11920
12248
  font-family: var(--font-mono);
11921
12249
  color: var(--color-text-primary);
11922
12250
  text-align: right;
@@ -12043,7 +12371,9 @@ body.setup-mode[data-theme="dark"] {
12043
12371
  cursor: not-allowed;
12044
12372
  }
12045
12373
  .mcp-chip {
12046
- display: inline-block;
12374
+ display: inline-flex;
12375
+ align-items: center;
12376
+ justify-content: center;
12047
12377
  font-size: 0.6875rem;
12048
12378
  font-weight: 500;
12049
12379
  padding: 0.25rem 0.5rem;
@@ -12061,7 +12391,7 @@ body.setup-mode[data-theme="dark"] {
12061
12391
  }
12062
12392
  .mcp-cmd-label {
12063
12393
  font-size: 0.6875rem;
12064
- font-weight: 600;
12394
+ font-weight: 500;
12065
12395
  color: var(--color-text-secondary);
12066
12396
  text-transform: uppercase;
12067
12397
  letter-spacing: 0.05em;
@@ -12114,7 +12444,7 @@ body.setup-mode[data-theme="dark"] {
12114
12444
  }
12115
12445
  .mcp-tools-header {
12116
12446
  font-size: 0.8125rem;
12117
- font-weight: 600;
12447
+ font-weight: 500;
12118
12448
  color: var(--color-text-secondary);
12119
12449
  margin-bottom: 0.5rem;
12120
12450
  letter-spacing: 0.01em;
@@ -12140,7 +12470,7 @@ body.setup-mode[data-theme="dark"] {
12140
12470
  .mcp-tool-name {
12141
12471
  font-family: var(--font-mono);
12142
12472
  font-size: 0.8125rem;
12143
- font-weight: 600;
12473
+ font-weight: 500;
12144
12474
  color: var(--color-text-primary, var(--color-text));
12145
12475
  }
12146
12476
  .mcp-tool-desc {
@@ -12165,7 +12495,7 @@ body.setup-mode[data-theme="dark"] {
12165
12495
  .mcp-cta-text h3 {
12166
12496
  margin: 0 0 0.25rem;
12167
12497
  font-size: 0.9375rem;
12168
- font-weight: 600;
12498
+ font-weight: 500;
12169
12499
  color: var(--color-text-primary, var(--color-text));
12170
12500
  letter-spacing: -0.2px;
12171
12501
  }
@@ -12268,7 +12598,7 @@ body.setup-mode[data-theme="dark"] {
12268
12598
  background: color-mix(in srgb, var(--color-accent-primary) 8%, var(--color-bg-secondary));
12269
12599
  color: var(--color-accent-primary);
12270
12600
  font-size: 0.8125rem;
12271
- font-weight: 600;
12601
+ font-weight: 500;
12272
12602
  line-height: 1;
12273
12603
  white-space: nowrap;
12274
12604
  cursor: pointer;
@@ -12451,7 +12781,7 @@ body.setup-mode[data-theme="dark"] {
12451
12781
 
12452
12782
  .settings-bg-theme-card.active .bg-card-label {
12453
12783
  color: var(--color-accent-primary);
12454
- font-weight: 600;
12784
+ font-weight: 500;
12455
12785
  }
12456
12786
 
12457
12787
  /* ── Sessions List ───────────────────────────────────────────────────── */
@@ -12468,7 +12798,7 @@ body.setup-mode[data-theme="dark"] {
12468
12798
  }
12469
12799
  .billing-sessions-section h3 {
12470
12800
  font-size: 0.9375rem;
12471
- font-weight: 600;
12801
+ font-weight: 500;
12472
12802
  color: var(--color-text-primary);
12473
12803
  margin: 0 0 1rem 0;
12474
12804
  }
@@ -12486,7 +12816,7 @@ body.setup-mode[data-theme="dark"] {
12486
12816
  background: var(--color-bg-tertiary);
12487
12817
  border-radius: 8px;
12488
12818
  font-size: 0.75rem;
12489
- font-weight: 600;
12819
+ font-weight: 500;
12490
12820
  color: var(--color-text-secondary);
12491
12821
  text-transform: uppercase;
12492
12822
  letter-spacing: 0.05em;
@@ -12567,9 +12897,12 @@ body.setup-mode[data-theme="dark"] {
12567
12897
  .billing-cell-miss {
12568
12898
  color: #f59e0b;
12569
12899
  }
12900
+ .billing-cell-output {
12901
+ color: #34d399;
12902
+ }
12570
12903
  .billing-cell-cost {
12571
12904
  font-family: var(--font-mono);
12572
- font-weight: 600;
12905
+ font-weight: 500;
12573
12906
  color: var(--color-text-primary);
12574
12907
  text-align: right;
12575
12908
  }
@@ -12609,7 +12942,7 @@ body.setup-mode[data-theme="dark"] {
12609
12942
  }
12610
12943
  .media-row-title {
12611
12944
  font-size: 0.875rem;
12612
- font-weight: 600;
12945
+ font-weight: 500;
12613
12946
  color: var(--color-text-primary);
12614
12947
  min-width: 3rem;
12615
12948
  }
@@ -12980,7 +13313,7 @@ body.setup-mode[data-theme="dark"] {
12980
13313
 
12981
13314
  .share-row-label {
12982
13315
  font-size: 0.6875rem;
12983
- font-weight: 600;
13316
+ font-weight: 500;
12984
13317
  letter-spacing: .04em;
12985
13318
  text-transform: uppercase;
12986
13319
  color: var(--color-text-muted);
@@ -13055,7 +13388,7 @@ body.setup-mode[data-theme="dark"] {
13055
13388
  background: transparent;
13056
13389
  color: var(--color-text-secondary);
13057
13390
  font-size: 0.8125rem;
13058
- font-weight: 600;
13391
+ font-weight: 500;
13059
13392
  cursor: pointer;
13060
13393
  transition: background .12s ease, color .12s ease;
13061
13394
  }
@@ -13078,7 +13411,7 @@ body.setup-mode[data-theme="dark"] {
13078
13411
  background: var(--color-bg-primary);
13079
13412
  color: var(--color-text-secondary);
13080
13413
  font-size: 0.75rem;
13081
- font-weight: 600;
13414
+ font-weight: 500;
13082
13415
  cursor: pointer;
13083
13416
  display: flex;
13084
13417
  flex-direction: column;
@@ -13113,7 +13446,7 @@ body.setup-mode[data-theme="dark"] {
13113
13446
  background: none;
13114
13447
  color: var(--color-button-primary);
13115
13448
  font-size: 0.75rem;
13116
- font-weight: 600;
13449
+ font-weight: 500;
13117
13450
  cursor: pointer;
13118
13451
  padding: 2px 4px;
13119
13452
  border-radius: 4px;
@@ -13172,7 +13505,7 @@ body.setup-mode[data-theme="dark"] {
13172
13505
  padding: 9px 8px;
13173
13506
  border-radius: var(--radius-sm, 6px);
13174
13507
  font-size: 0.8125rem;
13175
- font-weight: 600;
13508
+ font-weight: 500;
13176
13509
  cursor: pointer;
13177
13510
  border: 1px solid var(--color-border-primary);
13178
13511
  background: var(--color-bg-primary);
@@ -13622,7 +13955,7 @@ body.setup-mode[data-theme="dark"] {
13622
13955
  margin-top: 0.125rem;
13623
13956
  }
13624
13957
  .billing-session-numbers-row .billing-cell-cost {
13625
- font-weight: 600;
13958
+ font-weight: 500;
13626
13959
  color: var(--color-text-primary);
13627
13960
  }
13628
13961
  .billing-session-numbers-row .billing-cell-time {
@@ -13848,7 +14181,7 @@ body.setup-mode[data-theme="dark"] {
13848
14181
  flex: 1;
13849
14182
  min-width: 0;
13850
14183
  font-size: 0.8125rem;
13851
- font-weight: 600;
14184
+ font-weight: 500;
13852
14185
  color: var(--color-text-primary);
13853
14186
  overflow: hidden;
13854
14187
  text-overflow: ellipsis;