antigravity-claude-proxy 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +4 -11
- package/package.json +1 -1
- package/public/app.js +7 -4
- package/public/css/src/input.css +379 -216
- package/public/css/style.css +1 -1
- package/public/favicon.svg +4 -8
- package/public/index.html +78 -72
- package/public/js/components/claude-config.js +0 -8
- package/public/js/components/dashboard/charts.js +25 -51
- package/public/js/components/dashboard/stats.js +1 -1
- package/public/js/components/dashboard.js +16 -21
- package/public/js/components/logs-viewer.js +1 -1
- package/public/js/components/models.js +12 -12
- package/public/js/components/server-config.js +1 -9
- package/public/js/data-store.js +2 -2
- package/public/js/store.js +1 -1
- package/public/js/translations/en.js +37 -39
- package/public/js/translations/id.js +36 -37
- package/public/js/translations/pt.js +37 -38
- package/public/js/translations/tr.js +37 -39
- package/public/js/translations/zh.js +0 -2
- package/public/js/utils/error-handler.js +0 -2
- package/public/js/utils/ui-logger.js +4 -3
- package/public/views/accounts.html +34 -38
- package/public/views/dashboard.html +86 -99
- package/public/views/logs.html +4 -4
- package/public/views/models.html +32 -36
- package/public/views/settings.html +50 -50
- package/src/account-manager/index.js +0 -4
- package/src/account-manager/rate-limits.js +0 -5
- package/src/account-manager/strategies/base-strategy.js +4 -4
- package/src/account-manager/strategies/hybrid-strategy.js +3 -3
- package/src/auth/database.js +1 -0
- package/src/auth/oauth.js +43 -41
- package/src/auth/token-extractor.js +1 -1
- package/src/cli/accounts.js +2 -1
- package/src/cloudcode/model-registry.js +0 -3
- package/src/cloudcode/rate-limit-state.js +1 -7
- package/src/config.js +1 -1
- package/src/constants.js +0 -2
- package/src/format/content-converter.js +0 -4
- package/src/format/request-converter.js +1 -6
- package/src/format/response-converter.js +0 -3
- package/src/format/schema-sanitizer.js +3 -22
- package/src/format/thinking-utils.js +1 -13
- package/src/index.js +1 -6
- package/src/modules/usage-stats.js +1 -1
- package/src/server.js +1 -28
- package/src/utils/claude-config.js +2 -6
- package/src/utils/native-module-helper.js +0 -4
- package/src/utils/proxy.js +1 -10
- package/src/utils/version-detector.js +14 -5
- package/src/webui/index.js +1 -37
package/public/css/src/input.css
CHANGED
|
@@ -2,97 +2,178 @@
|
|
|
2
2
|
@tailwind components;
|
|
3
3
|
@tailwind utilities;
|
|
4
4
|
|
|
5
|
+
/*
|
|
6
|
+
* Design tokens.
|
|
7
|
+
* JS reads several of these by name (charts.js) and appends alpha suffixes,
|
|
8
|
+
* so every colour must stay a 6-digit hex.
|
|
9
|
+
*/
|
|
5
10
|
:root {
|
|
6
|
-
/* ===
|
|
7
|
-
--color-space-950: #
|
|
8
|
-
--color-space-900: #
|
|
9
|
-
--color-space-850: #
|
|
10
|
-
--color-space-800: #
|
|
11
|
-
--color-space-border: #
|
|
12
|
-
|
|
13
|
-
/* ===
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
--color-neon-
|
|
18
|
-
--color-neon-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
--color-neon-
|
|
22
|
-
--color-neon-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
--color-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
--color-
|
|
30
|
-
|
|
31
|
-
|
|
11
|
+
/* === Surfaces: near-black panel, darkest first === */
|
|
12
|
+
--color-space-950: #0b0c0d;
|
|
13
|
+
--color-space-900: #111214;
|
|
14
|
+
--color-space-850: #16181a;
|
|
15
|
+
--color-space-800: #1c1e21;
|
|
16
|
+
--color-space-border: #27292d;
|
|
17
|
+
|
|
18
|
+
/* === Glass-cockpit colour code (legacy token names kept for JS) ===
|
|
19
|
+
purple -> cyan : things you set
|
|
20
|
+
magenta : the one current thing
|
|
21
|
+
green/yellow/red: normal / caution / warning */
|
|
22
|
+
--color-neon-purple: #4cc9d6;
|
|
23
|
+
--color-neon-cyan: #4cc9d6;
|
|
24
|
+
--color-neon-magenta: #d45bc2;
|
|
25
|
+
--color-neon-green: #6fcf6a;
|
|
26
|
+
--color-neon-yellow: #f2a93b;
|
|
27
|
+
--color-neon-red: #ee5a4f;
|
|
28
|
+
|
|
29
|
+
--color-neon-purple-soft: #2fa3b0;
|
|
30
|
+
--color-neon-green-soft: #57b553;
|
|
31
|
+
--color-neon-cyan-soft: #2fa3b0;
|
|
32
|
+
|
|
33
|
+
/* === Model families: never share a hue with a status === */
|
|
34
|
+
--color-family-claude: #4cc9d6;
|
|
35
|
+
--color-family-gemini: #d9c39a;
|
|
36
|
+
--color-family-other: #9aa7b0;
|
|
37
|
+
|
|
38
|
+
/* === Lettering === */
|
|
39
|
+
--color-text-primary: #eceae4;
|
|
40
|
+
--color-text-secondary: #c4c2bc;
|
|
41
|
+
--color-text-tertiary: #a3a19c;
|
|
42
|
+
--color-text-quaternary: #87857f;
|
|
43
|
+
|
|
44
|
+
/* === Legacy aliases (read by charts.js) === */
|
|
32
45
|
--color-text-main: var(--color-text-secondary);
|
|
33
46
|
--color-text-dim: var(--color-text-tertiary);
|
|
34
47
|
--color-text-muted: var(--color-text-tertiary);
|
|
35
48
|
--color-text-bright: var(--color-text-primary);
|
|
36
49
|
|
|
37
|
-
|
|
38
|
-
--color-
|
|
39
|
-
--color-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
--color-chart-
|
|
44
|
-
--color-chart-
|
|
45
|
-
--color-chart-
|
|
46
|
-
--color-chart-
|
|
47
|
-
--color-chart-
|
|
48
|
-
--color-chart-
|
|
49
|
-
--color-chart-
|
|
50
|
-
--color-chart-
|
|
51
|
-
--color-chart-
|
|
52
|
-
--color-chart-
|
|
53
|
-
--color-chart-
|
|
54
|
-
--color-chart-
|
|
55
|
-
--color-chart-
|
|
56
|
-
--color-chart-
|
|
57
|
-
--color-chart-
|
|
58
|
-
|
|
50
|
+
--color-green-400: #93dc8f;
|
|
51
|
+
--color-yellow-400: #f6c06a;
|
|
52
|
+
--color-red-400: #f27e74;
|
|
53
|
+
|
|
54
|
+
/* === Chart series: Claude models in blue-greens, Gemini in sands, others in steel === */
|
|
55
|
+
--color-chart-1: #4cc9d6;
|
|
56
|
+
--color-chart-2: #7fdbe4;
|
|
57
|
+
--color-chart-3: #2fa3b0;
|
|
58
|
+
--color-chart-4: #a9e7ec;
|
|
59
|
+
--color-chart-5: #d9c39a;
|
|
60
|
+
--color-chart-6: #bfa678;
|
|
61
|
+
--color-chart-7: #ecdcbc;
|
|
62
|
+
--color-chart-8: #a08a5f;
|
|
63
|
+
--color-chart-9: #9aa7b0;
|
|
64
|
+
--color-chart-10: #c7ccd1;
|
|
65
|
+
--color-chart-11: #74828c;
|
|
66
|
+
--color-chart-12: #5fb3a0;
|
|
67
|
+
--color-chart-13: #c2a1bb;
|
|
68
|
+
--color-chart-14: #8fb7c9;
|
|
69
|
+
--color-chart-15: #b8b08f;
|
|
70
|
+
--color-chart-16: #6f97a8;
|
|
71
|
+
|
|
72
|
+
/* === Shape === */
|
|
73
|
+
--view-padding: 2rem;
|
|
74
|
+
--view-gap: 1.75rem;
|
|
75
|
+
--card-radius: 0.625rem;
|
|
76
|
+
--control-radius: 0.375rem;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@media (max-width: 768px) {
|
|
80
|
+
:root {
|
|
81
|
+
--view-padding: 1rem;
|
|
82
|
+
--view-gap: 1.25rem;
|
|
83
|
+
}
|
|
59
84
|
}
|
|
60
85
|
|
|
61
86
|
[x-cloak] {
|
|
62
87
|
display: none !important;
|
|
63
88
|
}
|
|
64
89
|
|
|
65
|
-
/*
|
|
90
|
+
/* -------------------------------------------------------------------------- */
|
|
91
|
+
/* Base */
|
|
92
|
+
/* -------------------------------------------------------------------------- */
|
|
93
|
+
|
|
94
|
+
html {
|
|
95
|
+
font-feature-settings: "ss02";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
body {
|
|
99
|
+
background-color: var(--color-space-950);
|
|
100
|
+
letter-spacing: -0.003em;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Tabular figures wherever numbers are compared side by side */
|
|
104
|
+
.font-mono,
|
|
105
|
+
.stat-value,
|
|
106
|
+
table td {
|
|
107
|
+
font-variant-numeric: tabular-nums;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:focus-visible {
|
|
111
|
+
outline: 2px solid var(--color-neon-purple);
|
|
112
|
+
outline-offset: 2px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.btn:focus-visible,
|
|
116
|
+
.input:focus-visible,
|
|
117
|
+
.select:focus-visible,
|
|
118
|
+
.toggle:focus-visible {
|
|
119
|
+
outline: 2px solid var(--color-neon-purple);
|
|
120
|
+
outline-offset: 2px;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
::selection {
|
|
124
|
+
background: rgba(76, 201, 214, 0.3);
|
|
125
|
+
color: var(--color-text-primary);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* Small all-caps tracked labels read as template chrome.
|
|
130
|
+
* Labels across views carry `uppercase` + `tracking-*`; calm them globally
|
|
131
|
+
* so the copy (sentence case in translations) sets the tone.
|
|
132
|
+
*/
|
|
133
|
+
.uppercase.tracking-wider,
|
|
134
|
+
.uppercase.tracking-widest,
|
|
135
|
+
.uppercase.tracking-wide {
|
|
136
|
+
letter-spacing: 0.02em;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Glows and frosted glass are replaced by flat surfaces */
|
|
140
|
+
[class*="shadow-[0_0_"] {
|
|
141
|
+
--tw-shadow: 0 0 #0000 !important;
|
|
142
|
+
--tw-shadow-colored: 0 0 #0000 !important;
|
|
143
|
+
box-shadow: none !important;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Scrollbar */
|
|
66
147
|
.custom-scrollbar {
|
|
67
148
|
scrollbar-gutter: stable;
|
|
68
149
|
}
|
|
69
150
|
|
|
70
151
|
::-webkit-scrollbar {
|
|
71
|
-
width:
|
|
72
|
-
height:
|
|
152
|
+
width: 10px;
|
|
153
|
+
height: 10px;
|
|
73
154
|
}
|
|
74
155
|
|
|
75
156
|
::-webkit-scrollbar-track {
|
|
76
|
-
background:
|
|
77
|
-
border-radius: 4px;
|
|
157
|
+
background: transparent;
|
|
78
158
|
}
|
|
79
159
|
|
|
80
160
|
::-webkit-scrollbar-thumb {
|
|
81
|
-
background:
|
|
82
|
-
border-radius:
|
|
83
|
-
border:
|
|
84
|
-
transition: background 0.2s ease;
|
|
161
|
+
background: var(--color-space-border);
|
|
162
|
+
border-radius: 999px;
|
|
163
|
+
border: 3px solid var(--color-space-950);
|
|
85
164
|
}
|
|
86
165
|
|
|
87
166
|
::-webkit-scrollbar-thumb:hover {
|
|
88
|
-
background:
|
|
89
|
-
border-color: rgba(168, 85, 247, 0.3);
|
|
167
|
+
background: #4d4d4a;
|
|
90
168
|
}
|
|
91
169
|
|
|
92
|
-
/*
|
|
170
|
+
/* -------------------------------------------------------------------------- */
|
|
171
|
+
/* Motion */
|
|
172
|
+
/* -------------------------------------------------------------------------- */
|
|
173
|
+
|
|
93
174
|
.fade-enter-active,
|
|
94
175
|
.fade-leave-active {
|
|
95
|
-
transition: opacity 0.
|
|
176
|
+
transition: opacity 0.15s ease;
|
|
96
177
|
}
|
|
97
178
|
|
|
98
179
|
.fade-enter-from,
|
|
@@ -103,65 +184,133 @@
|
|
|
103
184
|
@keyframes fadeIn {
|
|
104
185
|
from {
|
|
105
186
|
opacity: 0;
|
|
106
|
-
transform: translateY(5px);
|
|
107
187
|
}
|
|
108
188
|
to {
|
|
109
189
|
opacity: 1;
|
|
110
|
-
transform: translateY(0);
|
|
111
190
|
}
|
|
112
191
|
}
|
|
113
192
|
|
|
114
193
|
.animate-fade-in {
|
|
115
|
-
animation: fadeIn 0.
|
|
194
|
+
animation: fadeIn 0.2s ease-out forwards;
|
|
116
195
|
}
|
|
117
196
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
197
|
+
@media (prefers-reduced-motion: reduce) {
|
|
198
|
+
*,
|
|
199
|
+
*::before,
|
|
200
|
+
*::after {
|
|
201
|
+
animation-duration: 0.01ms !important;
|
|
202
|
+
animation-iteration-count: 1 !important;
|
|
203
|
+
transition-duration: 0.01ms !important;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* -------------------------------------------------------------------------- */
|
|
208
|
+
/* Shell */
|
|
209
|
+
/* -------------------------------------------------------------------------- */
|
|
210
|
+
|
|
211
|
+
.app-topbar {
|
|
212
|
+
background: var(--color-space-950);
|
|
213
|
+
border-bottom: 1px solid var(--color-space-border);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.app-sidebar {
|
|
217
|
+
background: var(--color-space-950);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.nav-section-label {
|
|
221
|
+
@apply px-5 mb-1.5 text-xs font-medium text-gray-600;
|
|
125
222
|
}
|
|
126
223
|
|
|
127
224
|
.nav-item {
|
|
128
|
-
@apply
|
|
225
|
+
@apply relative mx-3 rounded-md transition-colors duration-150;
|
|
129
226
|
}
|
|
130
227
|
|
|
131
|
-
.
|
|
132
|
-
background
|
|
228
|
+
.nav-item.active {
|
|
229
|
+
background: var(--color-space-800);
|
|
230
|
+
@apply text-white;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.nav-item.active::before {
|
|
234
|
+
content: "";
|
|
235
|
+
position: absolute;
|
|
236
|
+
left: -0.75rem;
|
|
237
|
+
top: 0.625rem;
|
|
238
|
+
bottom: 0.625rem;
|
|
239
|
+
width: 3px;
|
|
240
|
+
border-radius: 0 3px 3px 0;
|
|
241
|
+
background: var(--color-neon-magenta);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.nav-item.active svg {
|
|
245
|
+
color: var(--color-neon-magenta);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* -------------------------------------------------------------------------- */
|
|
249
|
+
/* Quota gauges */
|
|
250
|
+
/* Progress bars read as instrument tapes: square ends, a 10% tick scale */
|
|
251
|
+
/* engraved on the track, and a fill coloured only by health. */
|
|
252
|
+
/* -------------------------------------------------------------------------- */
|
|
253
|
+
|
|
254
|
+
.progress {
|
|
255
|
+
border-radius: 1px;
|
|
256
|
+
background-color: var(--color-space-800);
|
|
257
|
+
background-image: repeating-linear-gradient(
|
|
133
258
|
to right,
|
|
134
|
-
|
|
135
|
-
|
|
259
|
+
transparent 0,
|
|
260
|
+
transparent calc(10% - 1px),
|
|
261
|
+
rgba(236, 234, 228, 0.14) calc(10% - 1px),
|
|
262
|
+
rgba(236, 234, 228, 0.14) 10%
|
|
136
263
|
);
|
|
137
264
|
}
|
|
138
265
|
|
|
266
|
+
.progress::-webkit-progress-bar {
|
|
267
|
+
background: transparent;
|
|
268
|
+
border-radius: 1px;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.progress::-webkit-progress-value {
|
|
272
|
+
border-radius: 1px;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.progress::-moz-progress-bar {
|
|
276
|
+
border-radius: 1px;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.progress-gradient-success::-webkit-progress-value {
|
|
280
|
+
background: var(--color-neon-green);
|
|
281
|
+
}
|
|
282
|
+
|
|
139
283
|
.progress-gradient-warning::-webkit-progress-value {
|
|
140
|
-
background
|
|
141
|
-
to right,
|
|
142
|
-
var(--color-neon-yellow),
|
|
143
|
-
var(--color-yellow-400)
|
|
144
|
-
);
|
|
284
|
+
background: var(--color-neon-yellow);
|
|
145
285
|
}
|
|
146
286
|
|
|
147
287
|
.progress-gradient-error::-webkit-progress-value {
|
|
148
|
-
background
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
);
|
|
288
|
+
background: var(--color-neon-red);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.progress-gradient-success::-moz-progress-bar {
|
|
292
|
+
background: var(--color-neon-green);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.progress-gradient-warning::-moz-progress-bar {
|
|
296
|
+
background: var(--color-neon-yellow);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.progress-gradient-error::-moz-progress-bar {
|
|
300
|
+
background: var(--color-neon-red);
|
|
153
301
|
}
|
|
154
302
|
|
|
155
|
-
/*
|
|
156
|
-
.
|
|
157
|
-
display
|
|
158
|
-
|
|
159
|
-
|
|
303
|
+
/* Readouts: every number a person reads off the panel */
|
|
304
|
+
.readout {
|
|
305
|
+
@apply font-display;
|
|
306
|
+
font-variant-numeric: tabular-nums;
|
|
307
|
+
letter-spacing: 0;
|
|
160
308
|
}
|
|
161
309
|
|
|
162
|
-
/* Tooltip
|
|
310
|
+
/* Tooltip */
|
|
163
311
|
.tooltip:before {
|
|
164
|
-
@apply bg-space-800 border border-space-border text-gray-200 font-
|
|
312
|
+
@apply bg-space-800 border border-space-border text-gray-200 font-sans text-xs;
|
|
313
|
+
border-radius: var(--control-radius);
|
|
165
314
|
}
|
|
166
315
|
|
|
167
316
|
.tooltip-left:before {
|
|
@@ -169,38 +318,23 @@
|
|
|
169
318
|
}
|
|
170
319
|
|
|
171
320
|
/* -------------------------------------------------------------------------- */
|
|
172
|
-
/*
|
|
321
|
+
/* Layout */
|
|
173
322
|
/* -------------------------------------------------------------------------- */
|
|
174
323
|
|
|
175
|
-
|
|
176
|
-
:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
:
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
324
|
+
.view-container {
|
|
325
|
+
display: flex;
|
|
326
|
+
flex-direction: column;
|
|
327
|
+
margin-left: auto;
|
|
328
|
+
margin-right: auto;
|
|
329
|
+
width: 100%;
|
|
330
|
+
padding: var(--view-padding);
|
|
331
|
+
gap: var(--view-gap);
|
|
332
|
+
min-height: calc(100vh - 56px);
|
|
333
|
+
max-width: 1400px;
|
|
334
|
+
scrollbar-gutter: stable;
|
|
187
335
|
}
|
|
188
336
|
|
|
189
|
-
/*
|
|
190
|
-
.view-container {
|
|
191
|
-
display: flex;
|
|
192
|
-
flex-direction: column;
|
|
193
|
-
margin-left: auto;
|
|
194
|
-
margin-right: auto;
|
|
195
|
-
width: 100%;
|
|
196
|
-
padding: var(--view-padding);
|
|
197
|
-
gap: var(--view-gap);
|
|
198
|
-
min-height: calc(100vh - 56px); /* Align with navbar height */
|
|
199
|
-
max-width: 1400px;
|
|
200
|
-
scrollbar-gutter: stable;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/* Specialized container for data-heavy pages (Logs) */
|
|
337
|
+
/* Data-heavy pages (Logs) */
|
|
204
338
|
.view-container-full {
|
|
205
339
|
@apply w-full animate-fade-in flex flex-col;
|
|
206
340
|
padding: var(--view-padding);
|
|
@@ -209,29 +343,27 @@
|
|
|
209
343
|
max-width: 100%;
|
|
210
344
|
}
|
|
211
345
|
|
|
212
|
-
/*
|
|
346
|
+
/* Form-heavy pages (Settings/Accounts) */
|
|
213
347
|
.view-container-centered {
|
|
214
348
|
@apply mx-auto w-full animate-fade-in flex flex-col;
|
|
215
349
|
padding: var(--view-padding);
|
|
216
350
|
gap: var(--view-gap);
|
|
217
351
|
min-height: calc(100vh - 56px);
|
|
218
|
-
max-width: 900px;
|
|
352
|
+
max-width: 900px;
|
|
219
353
|
}
|
|
220
354
|
|
|
221
|
-
/* Standard Section Header */
|
|
222
355
|
.view-header {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
gap: 1rem;
|
|
356
|
+
display: flex;
|
|
357
|
+
flex-direction: column;
|
|
358
|
+
justify-content: space-between;
|
|
359
|
+
gap: 1rem;
|
|
228
360
|
}
|
|
229
361
|
|
|
230
362
|
@media (min-width: 768px) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
363
|
+
.view-header {
|
|
364
|
+
flex-direction: row;
|
|
365
|
+
align-items: flex-end;
|
|
366
|
+
}
|
|
235
367
|
}
|
|
236
368
|
|
|
237
369
|
.view-header-title {
|
|
@@ -239,7 +371,8 @@
|
|
|
239
371
|
}
|
|
240
372
|
|
|
241
373
|
.view-header-title h2 {
|
|
242
|
-
@apply text-
|
|
374
|
+
@apply font-display text-[1.5rem] leading-tight font-bold text-white;
|
|
375
|
+
letter-spacing: -0.01em;
|
|
243
376
|
}
|
|
244
377
|
|
|
245
378
|
.view-header-title p {
|
|
@@ -250,59 +383,69 @@
|
|
|
250
383
|
@apply flex items-center gap-3;
|
|
251
384
|
}
|
|
252
385
|
|
|
253
|
-
/*
|
|
386
|
+
/* Panel */
|
|
254
387
|
.view-card {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
rgba(15, 15, 17, 0.75) 0%,
|
|
262
|
-
rgba(18, 18, 20, 0.70) 100%
|
|
263
|
-
);
|
|
264
|
-
-webkit-backdrop-filter: blur(12px);
|
|
265
|
-
backdrop-filter: blur(12px);
|
|
266
|
-
box-shadow:
|
|
267
|
-
0 0 0 1px rgba(255, 255, 255, 0.02) inset,
|
|
268
|
-
0 4px 24px rgba(0, 0, 0, 0.4);
|
|
269
|
-
transition: border-color 0.3s ease, box-shadow 0.3s ease;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
.view-card:hover {
|
|
273
|
-
border-color: rgba(255, 255, 255, 0.12);
|
|
274
|
-
box-shadow:
|
|
275
|
-
0 0 0 1px rgba(255, 255, 255, 0.04) inset,
|
|
276
|
-
0 8px 32px rgba(0, 0, 0, 0.5);
|
|
388
|
+
position: relative;
|
|
389
|
+
overflow: hidden;
|
|
390
|
+
border-radius: var(--card-radius);
|
|
391
|
+
padding: 1.5rem;
|
|
392
|
+
border: 1px solid var(--color-space-border);
|
|
393
|
+
background: var(--color-space-900);
|
|
277
394
|
}
|
|
278
395
|
|
|
279
396
|
.view-card-header {
|
|
280
|
-
@apply flex items-center justify-between mb-4 pb-4 border-b border-
|
|
397
|
+
@apply flex items-center justify-between mb-4 pb-4 border-b border-space-border;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/* Stat tiles share the panel surface */
|
|
401
|
+
.stat {
|
|
402
|
+
border-color: var(--color-space-border);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.stat-title {
|
|
406
|
+
text-transform: none;
|
|
407
|
+
letter-spacing: 0;
|
|
281
408
|
}
|
|
282
409
|
|
|
283
|
-
/*
|
|
410
|
+
/* -------------------------------------------------------------------------- */
|
|
411
|
+
/* Tables */
|
|
412
|
+
/* -------------------------------------------------------------------------- */
|
|
413
|
+
|
|
284
414
|
.standard-table {
|
|
285
415
|
@apply table w-full border-separate border-spacing-0;
|
|
286
416
|
}
|
|
417
|
+
|
|
287
418
|
.standard-table thead {
|
|
288
|
-
@apply
|
|
419
|
+
@apply text-gray-500 font-sans text-xs border-b border-space-border;
|
|
420
|
+
background: transparent;
|
|
289
421
|
}
|
|
422
|
+
|
|
423
|
+
.standard-table thead th {
|
|
424
|
+
@apply font-medium normal-case;
|
|
425
|
+
letter-spacing: 0;
|
|
426
|
+
border-bottom: 1px solid var(--color-space-border);
|
|
427
|
+
}
|
|
428
|
+
|
|
290
429
|
.standard-table tbody tr {
|
|
291
|
-
@apply transition-
|
|
430
|
+
@apply transition-colors duration-150;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.standard-table tbody td {
|
|
434
|
+
border-bottom: 1px solid rgba(39, 41, 45, 0.7);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.standard-table tbody tr:last-child td {
|
|
438
|
+
border-bottom: 0;
|
|
292
439
|
}
|
|
293
440
|
|
|
294
441
|
.standard-table tbody tr:hover {
|
|
295
|
-
background:
|
|
296
|
-
90deg,
|
|
297
|
-
rgba(255, 255, 255, 0.03) 0%,
|
|
298
|
-
rgba(255, 255, 255, 0.05) 50%,
|
|
299
|
-
rgba(255, 255, 255, 0.03) 100%
|
|
300
|
-
);
|
|
301
|
-
border-color: rgba(255, 255, 255, 0.08);
|
|
302
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
|
|
442
|
+
background: rgba(28, 30, 33, 0.6);
|
|
303
443
|
}
|
|
304
444
|
|
|
305
|
-
/*
|
|
445
|
+
/* -------------------------------------------------------------------------- */
|
|
446
|
+
/* Range slider */
|
|
447
|
+
/* -------------------------------------------------------------------------- */
|
|
448
|
+
|
|
306
449
|
.custom-range {
|
|
307
450
|
-webkit-appearance: none;
|
|
308
451
|
appearance: none;
|
|
@@ -321,6 +464,8 @@
|
|
|
321
464
|
height: 14px;
|
|
322
465
|
border-radius: 50%;
|
|
323
466
|
background: var(--range-color, var(--color-neon-purple));
|
|
467
|
+
border: 2px solid var(--color-space-950);
|
|
468
|
+
box-shadow: 0 0 0 1px var(--range-color, var(--color-neon-purple));
|
|
324
469
|
cursor: pointer;
|
|
325
470
|
transition: transform 0.1s ease;
|
|
326
471
|
}
|
|
@@ -332,7 +477,7 @@
|
|
|
332
477
|
.custom-range::-moz-range-thumb {
|
|
333
478
|
width: 14px;
|
|
334
479
|
height: 14px;
|
|
335
|
-
border:
|
|
480
|
+
border: 2px solid var(--color-space-950);
|
|
336
481
|
border-radius: 50%;
|
|
337
482
|
background: var(--range-color, var(--color-neon-purple));
|
|
338
483
|
cursor: pointer;
|
|
@@ -343,7 +488,11 @@
|
|
|
343
488
|
transform: scale(1.15);
|
|
344
489
|
}
|
|
345
490
|
|
|
346
|
-
|
|
491
|
+
.custom-range:focus-visible {
|
|
492
|
+
outline: 2px solid var(--color-neon-purple);
|
|
493
|
+
outline-offset: 4px;
|
|
494
|
+
}
|
|
495
|
+
|
|
347
496
|
.custom-range-purple {
|
|
348
497
|
--range-color: var(--color-neon-purple);
|
|
349
498
|
}
|
|
@@ -361,29 +510,26 @@
|
|
|
361
510
|
}
|
|
362
511
|
|
|
363
512
|
/* -------------------------------------------------------------------------- */
|
|
364
|
-
/*
|
|
513
|
+
/* Controls */
|
|
365
514
|
/* -------------------------------------------------------------------------- */
|
|
366
515
|
|
|
367
|
-
/* Phase 1.2 additions ... */
|
|
368
|
-
|
|
369
|
-
/* Filter Controls */
|
|
370
516
|
.filter-control {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
517
|
+
@apply flex items-center justify-center gap-2 px-3 py-1.5
|
|
518
|
+
text-xs font-sans font-medium text-gray-400
|
|
519
|
+
bg-space-800 border border-space-border
|
|
520
|
+
rounded-md hover:text-white hover:border-gray-600
|
|
521
|
+
transition-colors duration-150 whitespace-nowrap w-full sm:w-auto;
|
|
376
522
|
}
|
|
377
523
|
|
|
378
|
-
.filter-control
|
|
379
|
-
|
|
524
|
+
.filter-control-item {
|
|
525
|
+
@apply block w-full px-3 py-1.5 text-left text-xs font-sans hover:bg-white/5 transition-colors;
|
|
380
526
|
}
|
|
381
527
|
|
|
382
|
-
.
|
|
383
|
-
|
|
528
|
+
.btn {
|
|
529
|
+
@apply font-medium normal-case;
|
|
530
|
+
letter-spacing: 0;
|
|
384
531
|
}
|
|
385
532
|
|
|
386
|
-
/* Action Buttons */
|
|
387
533
|
.btn-action-ghost {
|
|
388
534
|
@apply btn btn-xs btn-ghost text-gray-400 hover:text-white transition-colors;
|
|
389
535
|
}
|
|
@@ -393,92 +539,109 @@
|
|
|
393
539
|
}
|
|
394
540
|
|
|
395
541
|
.btn-action-primary {
|
|
396
|
-
@apply btn
|
|
397
|
-
|
|
398
|
-
|
|
542
|
+
@apply btn border-none transition-colors;
|
|
543
|
+
background: var(--color-neon-purple);
|
|
544
|
+
color: var(--color-space-950);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.btn-action-primary:hover {
|
|
548
|
+
background: #7fdbe4;
|
|
399
549
|
}
|
|
400
550
|
|
|
401
551
|
.btn-action-success {
|
|
402
|
-
@apply btn btn-xs btn-ghost btn-square text-green
|
|
552
|
+
@apply btn btn-xs btn-ghost btn-square text-neon-green hover:bg-neon-green/15;
|
|
403
553
|
}
|
|
404
554
|
|
|
405
555
|
.btn-action-danger {
|
|
406
|
-
@apply btn btn-xs btn-ghost btn-square text-red
|
|
556
|
+
@apply btn btn-xs btn-ghost btn-square text-neon-red hover:bg-neon-red/15;
|
|
407
557
|
}
|
|
408
558
|
|
|
409
559
|
.btn-action-neutral {
|
|
410
560
|
@apply btn btn-xs btn-ghost btn-square text-gray-500 hover:bg-gray-500/20;
|
|
411
561
|
}
|
|
412
562
|
|
|
413
|
-
/* Status
|
|
563
|
+
/* Status pills: quiet sentence-case chips; colour carries the meaning */
|
|
414
564
|
.status-pill {
|
|
415
|
-
@apply px-2 py-
|
|
565
|
+
@apply inline-flex items-center gap-1 px-2 py-0.5 text-[11px] font-sans font-medium rounded-full border normal-case;
|
|
566
|
+
letter-spacing: 0;
|
|
416
567
|
}
|
|
417
568
|
|
|
418
569
|
.status-pill-purple {
|
|
419
|
-
@apply status-pill bg-neon-purple/10 text-neon-purple border-neon-purple/
|
|
570
|
+
@apply status-pill bg-neon-purple/10 text-neon-purple border-neon-purple/25;
|
|
420
571
|
}
|
|
421
572
|
|
|
422
573
|
.status-pill-ultra {
|
|
423
|
-
@apply status-pill bg-yellow
|
|
574
|
+
@apply status-pill bg-neon-yellow/10 text-neon-yellow border-neon-yellow/25;
|
|
424
575
|
}
|
|
425
576
|
|
|
426
577
|
.status-pill-pro {
|
|
427
|
-
@apply status-pill bg-
|
|
578
|
+
@apply status-pill bg-neon-cyan/10 text-neon-cyan border-neon-cyan/25;
|
|
428
579
|
}
|
|
429
580
|
|
|
430
581
|
.status-pill-free {
|
|
431
|
-
@apply status-pill bg-gray-500/10 text-gray-400 border-gray-500/
|
|
582
|
+
@apply status-pill bg-gray-500/10 text-gray-400 border-gray-500/25;
|
|
432
583
|
}
|
|
433
584
|
|
|
434
585
|
.status-pill-success {
|
|
435
|
-
@apply status-pill bg-neon-green/10 text-neon-green border-neon-green/
|
|
586
|
+
@apply status-pill bg-neon-green/10 text-neon-green border-neon-green/25;
|
|
436
587
|
}
|
|
437
588
|
|
|
438
589
|
.status-pill-warning {
|
|
439
|
-
@apply status-pill bg-yellow
|
|
590
|
+
@apply status-pill bg-neon-yellow/10 text-neon-yellow border-neon-yellow/25;
|
|
440
591
|
}
|
|
441
592
|
|
|
442
593
|
.status-pill-error {
|
|
443
|
-
@apply status-pill bg-red
|
|
594
|
+
@apply status-pill bg-neon-red/10 text-neon-red border-neon-red/25;
|
|
444
595
|
}
|
|
445
596
|
|
|
446
|
-
/*
|
|
597
|
+
/* Inputs */
|
|
447
598
|
.input-search {
|
|
448
|
-
@apply w-full bg-space-900
|
|
449
|
-
rounded-
|
|
450
|
-
focus:outline-none focus:
|
|
451
|
-
hover:border-
|
|
452
|
-
transition-
|
|
599
|
+
@apply w-full bg-space-900 border border-space-border text-gray-200
|
|
600
|
+
rounded-md pl-10 pr-4 py-2
|
|
601
|
+
focus:outline-none focus:border-neon-purple/60
|
|
602
|
+
hover:border-gray-600
|
|
603
|
+
transition-colors placeholder-gray-600;
|
|
453
604
|
}
|
|
454
605
|
|
|
455
606
|
.input-search-sm {
|
|
456
607
|
@apply input-search h-8 text-xs font-normal;
|
|
457
608
|
}
|
|
458
609
|
|
|
610
|
+
.input,
|
|
611
|
+
.select,
|
|
612
|
+
.textarea {
|
|
613
|
+
border-radius: var(--control-radius);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/* Modals */
|
|
617
|
+
.modal-box {
|
|
618
|
+
border-radius: 0.75rem;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.modal-backdrop {
|
|
622
|
+
background: rgba(0, 0, 0, 0.7);
|
|
623
|
+
}
|
|
624
|
+
|
|
459
625
|
/* -------------------------------------------------------------------------- */
|
|
460
|
-
/* Skeleton
|
|
626
|
+
/* Skeleton loading */
|
|
461
627
|
/* -------------------------------------------------------------------------- */
|
|
462
628
|
|
|
463
|
-
/* Skeleton animation */
|
|
464
629
|
@keyframes skeleton-pulse {
|
|
465
|
-
0%,
|
|
630
|
+
0%,
|
|
631
|
+
100% {
|
|
466
632
|
opacity: 1;
|
|
467
633
|
}
|
|
468
634
|
50% {
|
|
469
|
-
opacity: 0.
|
|
635
|
+
opacity: 0.5;
|
|
470
636
|
}
|
|
471
637
|
}
|
|
472
638
|
|
|
473
|
-
/* Base skeleton element */
|
|
474
639
|
.skeleton {
|
|
475
|
-
|
|
476
|
-
background-size: 200% 100%;
|
|
640
|
+
background: var(--color-space-800);
|
|
477
641
|
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
478
642
|
border-radius: 0.375rem;
|
|
479
643
|
}
|
|
480
644
|
|
|
481
|
-
/* Skeleton variants */
|
|
482
645
|
.skeleton-text {
|
|
483
646
|
@apply skeleton h-4 w-full;
|
|
484
647
|
}
|
|
@@ -513,11 +676,11 @@
|
|
|
513
676
|
background-color: oklch(var(--su)) !important;
|
|
514
677
|
}
|
|
515
678
|
|
|
516
|
-
/* Desktop
|
|
679
|
+
/* Desktop sidebar collapsed state */
|
|
517
680
|
@media (min-width: 1024px) {
|
|
518
681
|
body .sidebar-collapsed {
|
|
519
682
|
width: 0;
|
|
520
683
|
padding: 0;
|
|
521
684
|
border: none;
|
|
522
685
|
}
|
|
523
|
-
}
|
|
686
|
+
}
|