openclacky 1.5.7 → 1.5.9
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +71 -0
- data/README.md +3 -3
- data/README_CN.md +2 -2
- data/README_JA.md +2 -2
- data/lib/clacky/agent.rb +2 -3
- data/lib/clacky/agent_config.rb +40 -18
- data/lib/clacky/brand_config.rb +12 -7
- data/lib/clacky/cli.rb +0 -1
- data/lib/clacky/default_extensions/ext-studio/ext.yml +1 -1
- data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +27 -14
- data/lib/clacky/default_extensions/ext-studio/skills/ext-develop/SKILL.md +22 -5
- data/lib/clacky/default_extensions/general/ext.yml +1 -1
- data/lib/clacky/extension/api_loader.rb +4 -11
- data/lib/clacky/extension/packager.rb +1 -1
- data/lib/clacky/extension/scaffold/templates/hello/test/handler_test.rb.erb +22 -0
- data/lib/clacky/extension/verifier.rb +1 -1
- data/lib/clacky/media/generator.rb +3 -3
- data/lib/clacky/message_format/anthropic.rb +19 -2
- data/lib/clacky/message_format/bedrock.rb +8 -3
- data/lib/clacky/message_history.rb +1 -1
- data/lib/clacky/providers.rb +159 -105
- data/lib/clacky/server/channel/adapters/feishu/ws_client.rb +6 -0
- data/lib/clacky/server/http_server.rb +67 -79
- data/lib/clacky/session_manager.rb +7 -0
- data/lib/clacky/skill_loader.rb +4 -0
- data/lib/clacky/tools/base.rb +11 -1
- data/lib/clacky/tools/edit.rb +28 -0
- data/lib/clacky/tools/terminal.rb +5 -0
- data/lib/clacky/tools/trash_manager.rb +1 -1
- data/lib/clacky/ui2/components/inline_input.rb +1 -0
- data/lib/clacky/ui2/components/input_area.rb +1 -0
- data/lib/clacky/ui2/components/modal_component.rb +0 -1
- data/lib/clacky/ui2/components/todo_area.rb +1 -0
- data/lib/clacky/ui2/line_editor.rb +1 -0
- data/lib/clacky/ui2/markdown_renderer.rb +5 -1
- data/lib/clacky/ui2/ui_controller.rb +1 -0
- data/lib/clacky/utils/model_pricing.rb +62 -27
- data/lib/clacky/utils/string_matcher.rb +29 -2
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +278 -221
- data/lib/clacky/web/components/chat-navigator.js +1 -1
- data/lib/clacky/web/features/billing/store.js +3 -3
- data/lib/clacky/web/features/billing/view.js +5 -61
- data/lib/clacky/web/features/extensions/store.js +65 -41
- data/lib/clacky/web/features/extensions/view.js +74 -10
- data/lib/clacky/web/features/new-session/view.js +24 -0
- data/lib/clacky/web/features/version/view.js +2 -2
- data/lib/clacky/web/i18n.js +36 -22
- data/lib/clacky/web/index.html +17 -17
- data/lib/clacky/web/projects.js +83 -285
- data/lib/clacky/web/sessions.js +151 -17
- data/lib/clacky/web/settings.js +6 -1
- metadata +2 -1
data/lib/clacky/web/app.css
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
--color-border-strong: #d4d4ce; /* hover / active outline */
|
|
31
31
|
|
|
32
32
|
/* Text — 4-tier hierarchy */
|
|
33
|
-
--color-text-primary: #
|
|
33
|
+
--color-text-primary: #344054; /* titles, important content */
|
|
34
34
|
--color-text-secondary: #56585e; /* body text */
|
|
35
35
|
--color-text-tertiary: #8a8d94; /* captions, meta */
|
|
36
36
|
--color-text-muted: #a8abb2; /* placeholders, disabled */
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
--color-warning: #f59e0b;
|
|
56
56
|
--color-warning-bg: #fffbeb;
|
|
57
57
|
--color-warning-border: #fcd34d;
|
|
58
|
+
--color-warning-text: #92400e;
|
|
58
59
|
|
|
59
60
|
--color-info: #0ea5e9;
|
|
60
61
|
--color-secondary: #10b981;
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
--color-border-secondary: #1e2229;
|
|
114
115
|
--color-border-strong: #3a3f4a;
|
|
115
116
|
|
|
116
|
-
--color-text-primary: #
|
|
117
|
+
--color-text-primary: #c2cad1;
|
|
117
118
|
--color-text-secondary: #a4a9b4;
|
|
118
119
|
--color-text-tertiary: #6b707b;
|
|
119
120
|
--color-text-muted: #565b66;
|
|
@@ -137,6 +138,7 @@
|
|
|
137
138
|
--color-warning: #fbbf24;
|
|
138
139
|
--color-warning-bg: #2d1f00;
|
|
139
140
|
--color-warning-border: #4d3200;
|
|
141
|
+
--color-warning-text: #fcd34d;
|
|
140
142
|
|
|
141
143
|
--color-info: #38bdf8;
|
|
142
144
|
--color-secondary: #34d399;
|
|
@@ -190,6 +192,7 @@
|
|
|
190
192
|
--color-warning: #fbbf24;
|
|
191
193
|
--color-warning-bg: #2d1f00;
|
|
192
194
|
--color-warning-border: #4d3200;
|
|
195
|
+
--color-warning-text: #fcd34d;
|
|
193
196
|
|
|
194
197
|
--color-info: #38bdf8;
|
|
195
198
|
--color-secondary: #34d399;
|
|
@@ -242,6 +245,7 @@
|
|
|
242
245
|
--color-warning: #f59e0b;
|
|
243
246
|
--color-warning-bg: #fffbeb;
|
|
244
247
|
--color-warning-border: #fcd34d;
|
|
248
|
+
--color-warning-text: #92400e;
|
|
245
249
|
|
|
246
250
|
--color-info: #0ea5e9;
|
|
247
251
|
--color-secondary: #10b981;
|
|
@@ -294,6 +298,7 @@
|
|
|
294
298
|
--color-warning: #fbbf24;
|
|
295
299
|
--color-warning-bg: #2d1f00;
|
|
296
300
|
--color-warning-border: #4d3200;
|
|
301
|
+
--color-warning-text: #fcd34d;
|
|
297
302
|
|
|
298
303
|
--color-info: #38bdf8;
|
|
299
304
|
--color-secondary: #34d399;
|
|
@@ -644,7 +649,6 @@ body {
|
|
|
644
649
|
}
|
|
645
650
|
#header-cmdbar:hover {
|
|
646
651
|
border-color: var(--color-accent-primary);
|
|
647
|
-
background: var(--color-bg-hover);
|
|
648
652
|
color: var(--color-text-secondary);
|
|
649
653
|
}
|
|
650
654
|
#header-cmdbar svg {
|
|
@@ -807,7 +811,11 @@ body {
|
|
|
807
811
|
margin-bottom: 6px;
|
|
808
812
|
border-bottom: 1px solid var(--color-border-secondary);
|
|
809
813
|
}
|
|
810
|
-
#ext-slot-sidebar-nav
|
|
814
|
+
#ext-slot-sidebar-nav {
|
|
815
|
+
margin-top: 10px;
|
|
816
|
+
padding: 10px 0 0px;
|
|
817
|
+
border-top: 1px solid var(--color-border-secondary);
|
|
818
|
+
}
|
|
811
819
|
#ext-slot-sidebar-nav-bottom {
|
|
812
820
|
padding: 8px 0 10px;
|
|
813
821
|
margin-top: 6px;
|
|
@@ -821,7 +829,7 @@ body {
|
|
|
821
829
|
gap: 8px;
|
|
822
830
|
padding: 14px 8px 7px;
|
|
823
831
|
font-family: var(--font-mono);
|
|
824
|
-
font-size: 0.
|
|
832
|
+
font-size: 0.75rem;
|
|
825
833
|
font-weight: 500;
|
|
826
834
|
color: var(--color-text-tertiary);
|
|
827
835
|
text-transform: uppercase;
|
|
@@ -835,6 +843,11 @@ body {
|
|
|
835
843
|
white-space: nowrap;
|
|
836
844
|
flex: 0 0 auto;
|
|
837
845
|
}
|
|
846
|
+
.sidebar-divider [data-group-title] {
|
|
847
|
+
display: inline-flex;
|
|
848
|
+
align-items: center;
|
|
849
|
+
gap: 0.25rem;
|
|
850
|
+
}
|
|
838
851
|
/* Pure label dividers (Config / My Data / Creator) get a trailing rule line */
|
|
839
852
|
.sidebar-divider:not(:has(.sidebar-divider-actions))::after {
|
|
840
853
|
content: "";
|
|
@@ -1511,8 +1524,7 @@ body {
|
|
|
1511
1524
|
display: flex;
|
|
1512
1525
|
align-items: center;
|
|
1513
1526
|
gap: 0.25rem;
|
|
1514
|
-
|
|
1515
|
-
font-size: 0.8125rem;
|
|
1527
|
+
font-size: 0.8325rem;
|
|
1516
1528
|
font-weight: 400;
|
|
1517
1529
|
transition: color var(--transition-fast), font-weight var(--transition-fast);
|
|
1518
1530
|
}
|
|
@@ -1523,6 +1535,13 @@ body {
|
|
|
1523
1535
|
text-overflow: ellipsis;
|
|
1524
1536
|
white-space: nowrap;
|
|
1525
1537
|
}
|
|
1538
|
+
.session-item .session-name .session-cron-icon {
|
|
1539
|
+
flex-shrink: 0;
|
|
1540
|
+
margin-top: 0.0625rem;
|
|
1541
|
+
}
|
|
1542
|
+
.session-item .session-name .session-group-icon {
|
|
1543
|
+
flex-shrink: 0;
|
|
1544
|
+
}
|
|
1526
1545
|
.session-item .session-name .session-badge {
|
|
1527
1546
|
flex-shrink: 0;
|
|
1528
1547
|
}
|
|
@@ -1677,6 +1696,86 @@ body {
|
|
|
1677
1696
|
color: var(--color-error);
|
|
1678
1697
|
}
|
|
1679
1698
|
|
|
1699
|
+
/* Submenu for "Move to Project" */
|
|
1700
|
+
.session-actions-menu-item--has-submenu {
|
|
1701
|
+
position: relative;
|
|
1702
|
+
}
|
|
1703
|
+
.session-actions-menu-item--has-submenu.active {
|
|
1704
|
+
background: var(--color-bg-hover);
|
|
1705
|
+
}
|
|
1706
|
+
.session-actions-menu-arrow {
|
|
1707
|
+
margin-left: auto;
|
|
1708
|
+
display: inline-flex;
|
|
1709
|
+
align-items: center;
|
|
1710
|
+
color: var(--color-text-tertiary);
|
|
1711
|
+
flex-shrink: 0;
|
|
1712
|
+
}
|
|
1713
|
+
.session-actions-submenu {
|
|
1714
|
+
background: var(--color-bg-secondary);
|
|
1715
|
+
border: 1px solid var(--color-border-primary);
|
|
1716
|
+
border-radius: 8px;
|
|
1717
|
+
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);
|
|
1718
|
+
padding: 0.25rem;
|
|
1719
|
+
min-width: 10rem;
|
|
1720
|
+
max-height: 18rem;
|
|
1721
|
+
overflow-y: auto;
|
|
1722
|
+
z-index: 1002;
|
|
1723
|
+
animation: fadeIn 0.15s ease;
|
|
1724
|
+
}
|
|
1725
|
+
[data-theme="dark"] .session-actions-submenu {
|
|
1726
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5), 0 2px 6px rgba(0, 0, 0, 0.3);
|
|
1727
|
+
}
|
|
1728
|
+
.session-actions-submenu-item {
|
|
1729
|
+
display: flex;
|
|
1730
|
+
align-items: center;
|
|
1731
|
+
gap: 0.5rem;
|
|
1732
|
+
padding: 0.375rem 0.625rem;
|
|
1733
|
+
border-radius: 5px;
|
|
1734
|
+
cursor: pointer;
|
|
1735
|
+
color: var(--color-text-primary);
|
|
1736
|
+
font-size: 0.8125rem;
|
|
1737
|
+
line-height: 1.4;
|
|
1738
|
+
transition: background .12s ease;
|
|
1739
|
+
user-select: none;
|
|
1740
|
+
}
|
|
1741
|
+
.session-actions-submenu-icon {
|
|
1742
|
+
display: inline-flex;
|
|
1743
|
+
align-items: center;
|
|
1744
|
+
justify-content: center;
|
|
1745
|
+
width: 0.875rem;
|
|
1746
|
+
height: 0.875rem;
|
|
1747
|
+
color: var(--color-text-secondary);
|
|
1748
|
+
flex-shrink: 0;
|
|
1749
|
+
}
|
|
1750
|
+
.session-actions-submenu-label {
|
|
1751
|
+
flex: 1;
|
|
1752
|
+
min-width: 0;
|
|
1753
|
+
overflow: hidden;
|
|
1754
|
+
text-overflow: ellipsis;
|
|
1755
|
+
white-space: nowrap;
|
|
1756
|
+
}
|
|
1757
|
+
.session-actions-submenu-check {
|
|
1758
|
+
color: var(--color-accent-primary);
|
|
1759
|
+
font-size: 0.75rem;
|
|
1760
|
+
flex-shrink: 0;
|
|
1761
|
+
}
|
|
1762
|
+
.session-actions-submenu-item:hover {
|
|
1763
|
+
background: var(--color-bg-hover);
|
|
1764
|
+
}
|
|
1765
|
+
.session-actions-submenu-item:hover .session-actions-submenu-icon {
|
|
1766
|
+
color: var(--color-text-primary);
|
|
1767
|
+
}
|
|
1768
|
+
.session-actions-submenu-divider {
|
|
1769
|
+
height: 1px;
|
|
1770
|
+
background: var(--color-border-secondary);
|
|
1771
|
+
margin: 0.25rem 0;
|
|
1772
|
+
}
|
|
1773
|
+
.session-actions-submenu-hint {
|
|
1774
|
+
padding: 0.375rem 0.625rem;
|
|
1775
|
+
font-size: 0.75rem;
|
|
1776
|
+
color: var(--color-text-tertiary);
|
|
1777
|
+
}
|
|
1778
|
+
|
|
1680
1779
|
@keyframes fadeIn {
|
|
1681
1780
|
from { opacity: 0; transform: translateY(-0.25rem); }
|
|
1682
1781
|
to { opacity: 1; transform: translateY(0); }
|
|
@@ -1805,7 +1904,7 @@ body {
|
|
|
1805
1904
|
opacity: 1;
|
|
1806
1905
|
}
|
|
1807
1906
|
.task-item.active {
|
|
1808
|
-
background: var(--color-
|
|
1907
|
+
background: var(--color-bg-hover);
|
|
1809
1908
|
}
|
|
1810
1909
|
.task-item.active::before {
|
|
1811
1910
|
content: "";
|
|
@@ -2802,7 +2901,7 @@ body {
|
|
|
2802
2901
|
position: absolute;
|
|
2803
2902
|
top: 0.5rem;
|
|
2804
2903
|
right: 0.5rem;
|
|
2805
|
-
z-index:
|
|
2904
|
+
z-index: 100;
|
|
2806
2905
|
display: inline-flex;
|
|
2807
2906
|
align-items: center;
|
|
2808
2907
|
justify-content: center;
|
|
@@ -7425,7 +7524,7 @@ body {
|
|
|
7425
7524
|
font-size: 0.625rem;
|
|
7426
7525
|
font-weight: 500;
|
|
7427
7526
|
padding: 2px 0.4375rem;
|
|
7428
|
-
border-radius:
|
|
7527
|
+
border-radius: 4px;
|
|
7429
7528
|
letter-spacing: 0.3px;
|
|
7430
7529
|
flex-shrink: 0;
|
|
7431
7530
|
}
|
|
@@ -7908,6 +8007,27 @@ body {
|
|
|
7908
8007
|
text-align: center;
|
|
7909
8008
|
padding: 1.5rem 0;
|
|
7910
8009
|
}
|
|
8010
|
+
.extensions-load-more {
|
|
8011
|
+
display: block;
|
|
8012
|
+
width: 100%;
|
|
8013
|
+
padding: 0.6rem;
|
|
8014
|
+
margin-top: 0.5rem;
|
|
8015
|
+
background: var(--color-bg-secondary);
|
|
8016
|
+
border: 1px solid var(--color-border-primary);
|
|
8017
|
+
border-radius: 8px;
|
|
8018
|
+
color: var(--color-text-secondary);
|
|
8019
|
+
font-size: 0.8125rem;
|
|
8020
|
+
cursor: pointer;
|
|
8021
|
+
transition: border-color .15s, color .15s;
|
|
8022
|
+
}
|
|
8023
|
+
.extensions-load-more:hover:not(:disabled) {
|
|
8024
|
+
border-color: var(--color-text-muted);
|
|
8025
|
+
color: var(--color-text-primary);
|
|
8026
|
+
}
|
|
8027
|
+
.extensions-load-more:disabled {
|
|
8028
|
+
opacity: 0.6;
|
|
8029
|
+
cursor: default;
|
|
8030
|
+
}
|
|
7911
8031
|
.extension-card {
|
|
7912
8032
|
background: var(--color-bg-secondary);
|
|
7913
8033
|
border: 1px solid var(--color-border-primary);
|
|
@@ -7982,6 +8102,29 @@ body {
|
|
|
7982
8102
|
border-radius: 4px;
|
|
7983
8103
|
padding: 0.0625rem 0.375rem;
|
|
7984
8104
|
}
|
|
8105
|
+
.extension-verified {
|
|
8106
|
+
font-size: 0.625rem;
|
|
8107
|
+
color: var(--color-success, #16a34a);
|
|
8108
|
+
background: var(--color-success-bg, rgba(22,163,74,0.12));
|
|
8109
|
+
border-radius: 4px;
|
|
8110
|
+
padding: 0.2rem 0.375rem;
|
|
8111
|
+
}
|
|
8112
|
+
.extension-unverified-banner {
|
|
8113
|
+
font-size: 0.75rem;
|
|
8114
|
+
color: var(--color-warning-text, #92400e);
|
|
8115
|
+
background: var(--color-warning-bg, #fffbeb);
|
|
8116
|
+
border: 1px solid var(--color-warning-border, #fcd34d);
|
|
8117
|
+
border-radius: 8px;
|
|
8118
|
+
padding: 0.5rem 0.75rem;
|
|
8119
|
+
line-height: 1.4;
|
|
8120
|
+
display: flex;
|
|
8121
|
+
align-items: center;
|
|
8122
|
+
gap: 0.5rem;
|
|
8123
|
+
}
|
|
8124
|
+
.extension-unverified-icon {
|
|
8125
|
+
flex-shrink: 0;
|
|
8126
|
+
color: var(--color-warning, #d97706);
|
|
8127
|
+
}
|
|
7985
8128
|
.extension-desc {
|
|
7986
8129
|
font-size: 0.75rem;
|
|
7987
8130
|
color: var(--color-text-secondary);
|
|
@@ -8462,8 +8605,7 @@ body {
|
|
|
8462
8605
|
opacity: 0.5;
|
|
8463
8606
|
cursor: not-allowed;
|
|
8464
8607
|
}
|
|
8465
|
-
.btn-brand-use
|
|
8466
|
-
.btn-skill-use {
|
|
8608
|
+
.btn-brand-use {
|
|
8467
8609
|
background: transparent;
|
|
8468
8610
|
border: 1px solid var(--color-success-border);
|
|
8469
8611
|
border-radius: 6px;
|
|
@@ -8475,10 +8617,24 @@ body {
|
|
|
8475
8617
|
transition: background .15s;
|
|
8476
8618
|
white-space: nowrap;
|
|
8477
8619
|
}
|
|
8478
|
-
.btn-brand-use:hover
|
|
8479
|
-
.btn-skill-use:hover {
|
|
8620
|
+
.btn-brand-use:hover {
|
|
8480
8621
|
background: var(--color-success-bg);
|
|
8481
8622
|
}
|
|
8623
|
+
.btn-skill-use {
|
|
8624
|
+
background: transparent;
|
|
8625
|
+
border: 1px solid var(--color-accent-primary);
|
|
8626
|
+
border-radius: 6px;
|
|
8627
|
+
color: var(--color-accent-primary);
|
|
8628
|
+
cursor: pointer;
|
|
8629
|
+
font-size: 0.75rem;
|
|
8630
|
+
font-weight: 500;
|
|
8631
|
+
padding: 0.3125rem 0.75rem;
|
|
8632
|
+
transition: background .15s;
|
|
8633
|
+
white-space: nowrap;
|
|
8634
|
+
}
|
|
8635
|
+
.btn-skill-use:hover {
|
|
8636
|
+
background: var(--color-accent-soft);
|
|
8637
|
+
}
|
|
8482
8638
|
|
|
8483
8639
|
/* ── Delete button ────────────────────────────────────────────────────────── */
|
|
8484
8640
|
.btn-skill-delete {
|
|
@@ -10381,6 +10537,7 @@ body.setup-mode[data-theme="dark"] {
|
|
|
10381
10537
|
letter-spacing: 0.03em;
|
|
10382
10538
|
transition: color .15s;
|
|
10383
10539
|
line-height: 1;
|
|
10540
|
+
text-decoration: none;
|
|
10384
10541
|
}
|
|
10385
10542
|
/* Highlight version text when badge is actionable and btn is hovered */
|
|
10386
10543
|
.version-badge:hover .version-text { color: var(--color-text-tertiary); }
|
|
@@ -10535,17 +10692,21 @@ body.setup-mode[data-theme="dark"] {
|
|
|
10535
10692
|
}
|
|
10536
10693
|
.vup-btn-primary:hover { background: var(--color-button-primary-hover); }
|
|
10537
10694
|
.vup-btn-primary:active { transform: scale(.97); }
|
|
10538
|
-
.vup-btn-
|
|
10539
|
-
|
|
10695
|
+
.vup-btn-changelog {
|
|
10696
|
+
flex: 1;
|
|
10697
|
+
padding: 0.4375rem 0;
|
|
10540
10698
|
background: transparent;
|
|
10541
|
-
color: var(--color-
|
|
10542
|
-
border: 1px solid var(--color-
|
|
10699
|
+
color: var(--color-accent-primary);
|
|
10700
|
+
border: 1px solid var(--color-accent-primary);
|
|
10543
10701
|
border-radius: 6px;
|
|
10544
10702
|
font-size: 0.75rem;
|
|
10703
|
+
font-weight: 500;
|
|
10704
|
+
text-decoration: none;
|
|
10705
|
+
text-align: center;
|
|
10545
10706
|
cursor: pointer;
|
|
10546
|
-
transition: background .15s,
|
|
10707
|
+
transition: background .15s, opacity .15s;
|
|
10547
10708
|
}
|
|
10548
|
-
.vup-btn-
|
|
10709
|
+
.vup-btn-changelog:hover { background: var(--color-accent-primary); color: var(--color-button-primary-text); }
|
|
10549
10710
|
|
|
10550
10711
|
/* Progress state */
|
|
10551
10712
|
.vup-progress-header {
|
|
@@ -11549,6 +11710,42 @@ body.setup-mode[data-theme="dark"] {
|
|
|
11549
11710
|
gap: 0.625rem;
|
|
11550
11711
|
}
|
|
11551
11712
|
|
|
11713
|
+
/* ── Segmented Control (reusable compact tab selector) ──────────────────── */
|
|
11714
|
+
.segmented-control {
|
|
11715
|
+
display: flex;
|
|
11716
|
+
gap: 2px;
|
|
11717
|
+
background: var(--color-bg-hover);
|
|
11718
|
+
border-radius: 8px;
|
|
11719
|
+
padding: 3px;
|
|
11720
|
+
}
|
|
11721
|
+
.segmented-control__btn {
|
|
11722
|
+
padding: 0.3125rem 0.75rem;
|
|
11723
|
+
border: none;
|
|
11724
|
+
background: transparent;
|
|
11725
|
+
color: var(--color-text-secondary);
|
|
11726
|
+
font-size: 0.8125rem;
|
|
11727
|
+
cursor: pointer;
|
|
11728
|
+
border-radius: 6px;
|
|
11729
|
+
transition: all 0.15s ease;
|
|
11730
|
+
white-space: nowrap;
|
|
11731
|
+
}
|
|
11732
|
+
.segmented-control__btn:hover:not(.active) {
|
|
11733
|
+
color: var(--color-text-primary);
|
|
11734
|
+
}
|
|
11735
|
+
.segmented-control__btn.active {
|
|
11736
|
+
background: var(--color-bg-secondary);
|
|
11737
|
+
color: var(--color-text-primary);
|
|
11738
|
+
font-weight: 500;
|
|
11739
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
11740
|
+
}
|
|
11741
|
+
[data-theme="dark"] .segmented-control {
|
|
11742
|
+
background: var(--color-bg-primary);
|
|
11743
|
+
}
|
|
11744
|
+
[data-theme="dark"] .segmented-control__btn.active {
|
|
11745
|
+
background: var(--color-bg-hover);
|
|
11746
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
|
|
11747
|
+
}
|
|
11748
|
+
|
|
11552
11749
|
/* ═════════════════════════════════════════════════════════════════════════
|
|
11553
11750
|
* BILLING PANEL
|
|
11554
11751
|
* ═════════════════════════════════════════════════════════════════════════ */
|
|
@@ -11636,39 +11833,9 @@ body.setup-mode[data-theme="dark"] {
|
|
|
11636
11833
|
border-radius: 6px;
|
|
11637
11834
|
}
|
|
11638
11835
|
|
|
11639
|
-
/* ── Period Button Group ─────────────────────────────────────────────── */
|
|
11640
|
-
.billing-period-group {
|
|
11641
|
-
display: flex;
|
|
11642
|
-
background: var(--color-bg-secondary);
|
|
11643
|
-
border: 1px solid var(--color-border-primary);
|
|
11644
|
-
border-radius: 8px;
|
|
11645
|
-
overflow: hidden;
|
|
11646
|
-
}
|
|
11647
|
-
.billing-period-btn {
|
|
11648
|
-
padding: 0.4375rem 0.75rem;
|
|
11649
|
-
border: none;
|
|
11650
|
-
background: transparent;
|
|
11651
|
-
color: var(--color-text-secondary);
|
|
11652
|
-
font-size: 0.8125rem;
|
|
11653
|
-
cursor: pointer;
|
|
11654
|
-
transition: all 0.15s ease;
|
|
11655
|
-
}
|
|
11656
|
-
.billing-period-btn:not(:last-child) {
|
|
11657
|
-
border-right: 1px solid var(--color-border-primary);
|
|
11658
|
-
}
|
|
11659
|
-
.billing-period-btn:hover {
|
|
11660
|
-
background: var(--color-bg-hover);
|
|
11661
|
-
color: var(--color-text-primary);
|
|
11662
|
-
}
|
|
11663
|
-
.billing-period-btn.active {
|
|
11664
|
-
background: var(--color-accent-primary);
|
|
11665
|
-
color: #ffffff;
|
|
11666
|
-
font-weight: 500;
|
|
11667
|
-
}
|
|
11668
|
-
|
|
11669
11836
|
/* ── Model Filter ────────────────────────────────────────────────────── */
|
|
11670
11837
|
.billing-model-filter {
|
|
11671
|
-
padding: 0.
|
|
11838
|
+
padding: 0.5375rem 1.75rem 0.5375rem 0.75rem;
|
|
11672
11839
|
border: 1px solid var(--color-border-primary);
|
|
11673
11840
|
border-radius: 8px;
|
|
11674
11841
|
background: var(--color-bg-secondary);
|
|
@@ -11693,28 +11860,6 @@ body.setup-mode[data-theme="dark"] {
|
|
|
11693
11860
|
}
|
|
11694
11861
|
|
|
11695
11862
|
/* ── Action Buttons ──────────────────────────────────────────────────── */
|
|
11696
|
-
.billing-clear-container {
|
|
11697
|
-
position: relative;
|
|
11698
|
-
}
|
|
11699
|
-
.billing-clear-btn {
|
|
11700
|
-
width: 32px;
|
|
11701
|
-
height: 32px;
|
|
11702
|
-
display: inline-flex;
|
|
11703
|
-
align-items: center;
|
|
11704
|
-
justify-content: center;
|
|
11705
|
-
border: 1px solid var(--color-border-primary);
|
|
11706
|
-
border-radius: 8px;
|
|
11707
|
-
background: var(--color-bg-secondary);
|
|
11708
|
-
color: var(--color-text-secondary);
|
|
11709
|
-
font-size: 0.875rem;
|
|
11710
|
-
cursor: pointer;
|
|
11711
|
-
transition: all 0.15s ease;
|
|
11712
|
-
}
|
|
11713
|
-
.billing-clear-btn:hover {
|
|
11714
|
-
background: var(--color-bg-tertiary);
|
|
11715
|
-
border-color: #ef4444;
|
|
11716
|
-
color: #ef4444;
|
|
11717
|
-
}
|
|
11718
11863
|
.billing-share-btn {
|
|
11719
11864
|
display: inline-flex;
|
|
11720
11865
|
align-items: center;
|
|
@@ -11735,43 +11880,6 @@ body.setup-mode[data-theme="dark"] {
|
|
|
11735
11880
|
color: var(--color-text-primary);
|
|
11736
11881
|
border-color: var(--color-accent-primary);
|
|
11737
11882
|
}
|
|
11738
|
-
.billing-clear-popup {
|
|
11739
|
-
position: absolute;
|
|
11740
|
-
top: 100%;
|
|
11741
|
-
right: 0;
|
|
11742
|
-
margin-top: 0.25rem;
|
|
11743
|
-
display: flex;
|
|
11744
|
-
flex-direction: column;
|
|
11745
|
-
gap: 0.25rem;
|
|
11746
|
-
background: var(--color-bg-secondary);
|
|
11747
|
-
border: 1px solid var(--color-border-primary);
|
|
11748
|
-
border-radius: 8px;
|
|
11749
|
-
padding: 0.375rem;
|
|
11750
|
-
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
|
|
11751
|
-
z-index: 100;
|
|
11752
|
-
min-width: 120px;
|
|
11753
|
-
}
|
|
11754
|
-
.billing-clear-option {
|
|
11755
|
-
padding: 0.4375rem 0.75rem;
|
|
11756
|
-
border: none;
|
|
11757
|
-
border-radius: 6px;
|
|
11758
|
-
background: transparent;
|
|
11759
|
-
color: var(--color-text-primary);
|
|
11760
|
-
font-size: 0.8125rem;
|
|
11761
|
-
cursor: pointer;
|
|
11762
|
-
text-align: left;
|
|
11763
|
-
white-space: nowrap;
|
|
11764
|
-
transition: background 0.15s ease;
|
|
11765
|
-
}
|
|
11766
|
-
.billing-clear-option:hover {
|
|
11767
|
-
background: var(--color-bg-tertiary);
|
|
11768
|
-
}
|
|
11769
|
-
.billing-clear-danger {
|
|
11770
|
-
color: #ef4444;
|
|
11771
|
-
}
|
|
11772
|
-
.billing-clear-danger:hover {
|
|
11773
|
-
background: rgba(239, 68, 68, 0.08) !important;
|
|
11774
|
-
}
|
|
11775
11883
|
|
|
11776
11884
|
/* ── Stats Row ───────────────────────────────────────────────────────── */
|
|
11777
11885
|
.billing-stats-row {
|
|
@@ -11901,11 +12009,6 @@ body.setup-mode[data-theme="dark"] {
|
|
|
11901
12009
|
}
|
|
11902
12010
|
|
|
11903
12011
|
/* ── Cost Trend Line Chart ───────────────────────────────────────────── */
|
|
11904
|
-
.billing-trend-total {
|
|
11905
|
-
font-size: 0.75rem;
|
|
11906
|
-
font-weight: 500;
|
|
11907
|
-
color: var(--color-accent-primary);
|
|
11908
|
-
}
|
|
11909
12012
|
.billing-trend-chart {
|
|
11910
12013
|
flex: 1;
|
|
11911
12014
|
min-height: 0;
|
|
@@ -14050,11 +14153,23 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14050
14153
|
}
|
|
14051
14154
|
|
|
14052
14155
|
/* ── Section-level collapse ────────────────────────────────────────────────── */
|
|
14156
|
+
#projects-section-header {
|
|
14157
|
+
cursor: pointer;
|
|
14158
|
+
padding: 0.25rem 0.5rem;
|
|
14159
|
+
margin-top: 0.5rem;
|
|
14160
|
+
border-radius: var(--radius-sm);
|
|
14161
|
+
transition: background var(--transition-fast);
|
|
14162
|
+
}
|
|
14163
|
+
#projects-section-header:hover {
|
|
14164
|
+
background: var(--color-bg-hover);
|
|
14165
|
+
}
|
|
14166
|
+
#projects-section-header:hover .btn-icon-sm:hover {
|
|
14167
|
+
background: var(--color-border-primary);
|
|
14168
|
+
}
|
|
14053
14169
|
.projects-section-title {
|
|
14054
14170
|
display: inline-flex;
|
|
14055
14171
|
align-items: center;
|
|
14056
14172
|
gap: 3px;
|
|
14057
|
-
cursor: pointer;
|
|
14058
14173
|
}
|
|
14059
14174
|
.projects-section-chevron {
|
|
14060
14175
|
flex-shrink: 0;
|
|
@@ -14078,8 +14193,8 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14078
14193
|
.project-group-header {
|
|
14079
14194
|
display: flex;
|
|
14080
14195
|
align-items: center;
|
|
14081
|
-
gap: 0.
|
|
14082
|
-
padding: 0.
|
|
14196
|
+
gap: 0.575rem;
|
|
14197
|
+
padding: 0.3325rem 0.625rem;
|
|
14083
14198
|
border-radius: var(--radius-sm);
|
|
14084
14199
|
cursor: pointer;
|
|
14085
14200
|
user-select: none;
|
|
@@ -14095,7 +14210,7 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14095
14210
|
overflow: hidden;
|
|
14096
14211
|
text-overflow: ellipsis;
|
|
14097
14212
|
white-space: nowrap;
|
|
14098
|
-
font-size: 0.
|
|
14213
|
+
font-size: 0.875rem;
|
|
14099
14214
|
color: var(--color-text-primary);
|
|
14100
14215
|
}
|
|
14101
14216
|
|
|
@@ -14130,117 +14245,25 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14130
14245
|
|
|
14131
14246
|
/* ── Session group (indented children) ────────────────────────────────────── */
|
|
14132
14247
|
.project-session-group {
|
|
14133
|
-
padding-left: 0.875rem;
|
|
14134
14248
|
margin-top: 0.08rem;
|
|
14135
14249
|
}
|
|
14136
14250
|
|
|
14137
|
-
.project-
|
|
14138
|
-
padding:
|
|
14139
|
-
font-size: 0.75rem;
|
|
14140
|
-
color: var(--color-text-muted);
|
|
14251
|
+
.project-session-group .session-item {
|
|
14252
|
+
padding-left: 2.2rem;
|
|
14141
14253
|
}
|
|
14142
14254
|
|
|
14143
|
-
|
|
14144
|
-
.project-tooltip {
|
|
14145
|
-
position: fixed;
|
|
14146
|
-
z-index: 1200;
|
|
14147
|
-
background: var(--color-bg-secondary);
|
|
14148
|
-
border: 1px solid var(--color-border-primary);
|
|
14149
|
-
border-radius: 10px;
|
|
14150
|
-
box-shadow: 0 8px 24px rgba(0,0,0,.10), 0 2px 8px rgba(0,0,0,.06);
|
|
14151
|
-
padding: 0.75rem 0.875rem 0.75rem 1.125rem; /* extra left padding = visual gap */
|
|
14152
|
-
min-width: 13rem;
|
|
14153
|
-
max-width: 18rem;
|
|
14154
|
-
animation: fadeIn 0.12s ease;
|
|
14155
|
-
}
|
|
14156
|
-
/* Transparent bridge on the left side fills the gap between sidebar and tooltip */
|
|
14157
|
-
.project-tooltip::before {
|
|
14158
|
-
content: "";
|
|
14159
|
-
position: absolute;
|
|
14160
|
-
top: 0;
|
|
14161
|
-
left: -8px;
|
|
14162
|
-
width: 8px;
|
|
14163
|
-
height: 100%;
|
|
14164
|
-
}
|
|
14165
|
-
[data-theme="dark"] .project-tooltip {
|
|
14166
|
-
box-shadow: 0 8px 28px rgba(0,0,0,.55), 0 2px 8px rgba(0,0,0,.35);
|
|
14167
|
-
}
|
|
14168
|
-
|
|
14169
|
-
.project-tooltip-header {
|
|
14170
|
-
display: flex;
|
|
14171
|
-
align-items: center;
|
|
14172
|
-
gap: 0.4rem;
|
|
14173
|
-
margin-bottom: 0.75rem;
|
|
14174
|
-
}
|
|
14175
|
-
.project-tooltip-icon {
|
|
14176
|
-
flex-shrink: 0;
|
|
14177
|
-
display: flex;
|
|
14178
|
-
align-items: center;
|
|
14179
|
-
justify-content: center;
|
|
14180
|
-
color: var(--color-text-secondary);
|
|
14181
|
-
line-height: 0;
|
|
14182
|
-
}
|
|
14183
|
-
.project-tooltip-icon svg {
|
|
14184
|
-
display: block;
|
|
14185
|
-
flex-shrink: 0;
|
|
14186
|
-
}
|
|
14187
|
-
.project-tooltip-name {
|
|
14188
|
-
flex: 1;
|
|
14189
|
-
min-width: 0;
|
|
14190
|
-
font-size: 0.8125rem;
|
|
14191
|
-
font-weight: 500;
|
|
14192
|
-
color: var(--color-text-primary);
|
|
14193
|
-
overflow: hidden;
|
|
14194
|
-
text-overflow: ellipsis;
|
|
14195
|
-
white-space: nowrap;
|
|
14196
|
-
}
|
|
14197
|
-
.project-tooltip-rows {
|
|
14198
|
-
display: flex;
|
|
14199
|
-
flex-direction: column;
|
|
14200
|
-
gap: 0.3rem;
|
|
14201
|
-
}
|
|
14202
|
-
.project-tooltip-row {
|
|
14203
|
-
display: flex;
|
|
14204
|
-
align-items: center;
|
|
14205
|
-
gap: 0.4rem;
|
|
14206
|
-
font-size: 0.75rem;
|
|
14207
|
-
color: var(--color-text-secondary);
|
|
14208
|
-
min-width: 0;
|
|
14209
|
-
}
|
|
14210
|
-
.project-tooltip-row--clickable {
|
|
14211
|
-
cursor: pointer;
|
|
14212
|
-
border-radius: 4px;
|
|
14213
|
-
margin: 0 -0.25rem;
|
|
14214
|
-
padding: 0.15rem 0.25rem;
|
|
14215
|
-
transition: background var(--transition-fast);
|
|
14216
|
-
}
|
|
14217
|
-
.project-tooltip-row--clickable:hover {
|
|
14255
|
+
.project-session-group .session-item.active {
|
|
14218
14256
|
background: var(--color-bg-hover);
|
|
14219
14257
|
}
|
|
14220
14258
|
|
|
14221
|
-
.project-
|
|
14222
|
-
|
|
14223
|
-
background: var(--color-border-primary);
|
|
14224
|
-
margin: 0.25rem 0;
|
|
14259
|
+
.project-session-group .session-item.active::before {
|
|
14260
|
+
display: none;
|
|
14225
14261
|
}
|
|
14226
14262
|
|
|
14227
|
-
.project-
|
|
14228
|
-
|
|
14263
|
+
.project-sessions-empty {
|
|
14264
|
+
padding: 0.25rem 0.5rem 0.25rem 0.625rem;
|
|
14265
|
+
font-size: 0.75rem;
|
|
14229
14266
|
color: var(--color-text-muted);
|
|
14230
|
-
display: flex;
|
|
14231
|
-
align-items: center;
|
|
14232
|
-
line-height: 0;
|
|
14233
|
-
}
|
|
14234
|
-
.project-tooltip-row-icon svg {
|
|
14235
|
-
display: block;
|
|
14236
|
-
flex-shrink: 0;
|
|
14237
|
-
}
|
|
14238
|
-
.project-tooltip-row-text {
|
|
14239
|
-
min-width: 0;
|
|
14240
|
-
overflow: hidden;
|
|
14241
|
-
text-overflow: ellipsis;
|
|
14242
|
-
white-space: nowrap;
|
|
14243
|
-
line-height: 1.4;
|
|
14244
14267
|
}
|
|
14245
14268
|
|
|
14246
14269
|
/* ── Project context menu (rename / delete) ────────────────────────────────── */
|
|
@@ -14258,7 +14281,9 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14258
14281
|
box-shadow: 0 8px 24px rgba(0,0,0,.5), 0 2px 6px rgba(0,0,0,.3);
|
|
14259
14282
|
}
|
|
14260
14283
|
.project-actions-menu-item {
|
|
14261
|
-
display:
|
|
14284
|
+
display: flex;
|
|
14285
|
+
align-items: center;
|
|
14286
|
+
gap: 0.5rem;
|
|
14262
14287
|
width: 100%;
|
|
14263
14288
|
padding: 0.375rem 0.625rem;
|
|
14264
14289
|
border: none;
|
|
@@ -14267,17 +14292,43 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14267
14292
|
cursor: pointer;
|
|
14268
14293
|
color: var(--color-text-primary);
|
|
14269
14294
|
font-size: 0.8125rem;
|
|
14295
|
+
line-height: 1.4;
|
|
14270
14296
|
text-align: left;
|
|
14271
14297
|
transition: background .12s ease, color .12s ease;
|
|
14272
14298
|
}
|
|
14299
|
+
.project-actions-menu-icon {
|
|
14300
|
+
display: inline-flex;
|
|
14301
|
+
align-items: center;
|
|
14302
|
+
justify-content: center;
|
|
14303
|
+
width: 0.875rem;
|
|
14304
|
+
height: 0.875rem;
|
|
14305
|
+
flex: 0 0 0.875rem;
|
|
14306
|
+
color: var(--color-text-secondary);
|
|
14307
|
+
transition: color .12s ease;
|
|
14308
|
+
}
|
|
14309
|
+
.project-actions-menu-icon svg {
|
|
14310
|
+
display: block;
|
|
14311
|
+
flex-shrink: 0;
|
|
14312
|
+
}
|
|
14313
|
+
.project-actions-menu-label {
|
|
14314
|
+
min-width: 0;
|
|
14315
|
+
flex: 1;
|
|
14316
|
+
}
|
|
14273
14317
|
.project-actions-menu-item:hover {
|
|
14274
14318
|
background: var(--color-bg-hover);
|
|
14275
14319
|
}
|
|
14320
|
+
.project-actions-menu-item:hover .project-actions-menu-icon {
|
|
14321
|
+
color: var(--color-text-primary);
|
|
14322
|
+
}
|
|
14276
14323
|
.project-actions-menu-item.danger {
|
|
14277
14324
|
color: var(--color-error);
|
|
14278
14325
|
margin-top: 0.25rem;
|
|
14279
14326
|
position: relative;
|
|
14280
14327
|
}
|
|
14328
|
+
.project-actions-menu-item.danger .project-actions-menu-icon,
|
|
14329
|
+
.project-actions-menu-item.danger:hover .project-actions-menu-icon {
|
|
14330
|
+
color: var(--color-error);
|
|
14331
|
+
}
|
|
14281
14332
|
.project-actions-menu-item.danger::before {
|
|
14282
14333
|
content: "";
|
|
14283
14334
|
position: absolute;
|
|
@@ -14406,6 +14457,13 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14406
14457
|
margin-top: 0.75rem;
|
|
14407
14458
|
}
|
|
14408
14459
|
|
|
14460
|
+
.create-project-folder-hint {
|
|
14461
|
+
font-size: 0.72rem;
|
|
14462
|
+
color: var(--color-text-muted);
|
|
14463
|
+
margin-top: 0.35rem;
|
|
14464
|
+
line-height: 1.4;
|
|
14465
|
+
}
|
|
14466
|
+
|
|
14409
14467
|
.create-project-folder-label {
|
|
14410
14468
|
font-size: 0.78rem;
|
|
14411
14469
|
font-weight: 500;
|
|
@@ -14603,4 +14661,3 @@ body.setup-mode[data-theme="dark"] {
|
|
|
14603
14661
|
.project-picker-done-btn:hover {
|
|
14604
14662
|
background: var(--color-bg-hover);
|
|
14605
14663
|
}
|
|
14606
|
-
|