@polderlabs/bizar 4.4.11 → 4.4.12

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.
@@ -0,0 +1,371 @@
1
+ /* ============================================================================
2
+ * src/web/styles/minimax-usage.css
3
+ *
4
+ * v4.5.0 — Styles for the MiniMax Token Plan usage dashboard.
5
+ *
6
+ * Scope: `.view-minimax-usage` and all child classes prefixed with
7
+ * `minimax-`. Reuses the dashboard's existing CSS variables
8
+ * (--accent, --bg-1, --bg-2, --border, --text, --text-muted, --success,
9
+ * --warning, --error) so the page inherits the rest of the design
10
+ * system automatically.
11
+ * ========================================================================== */
12
+
13
+ .view-minimax-usage {
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 16px;
17
+ padding: 16px 20px 32px;
18
+ max-width: 1280px;
19
+ margin: 0 auto;
20
+ width: 100%;
21
+ }
22
+
23
+ /* ── header ────────────────────────────────────────────────────────────── */
24
+ .view-minimax-usage .view-header {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: flex-end;
28
+ gap: 16px;
29
+ flex-wrap: wrap;
30
+ }
31
+ .view-minimax-usage .view-header-titles { flex: 1 1 360px; min-width: 0; }
32
+ .view-minimax-usage .view-title {
33
+ display: flex;
34
+ align-items: center;
35
+ font-size: 22px;
36
+ font-weight: 600;
37
+ margin: 0 0 4px;
38
+ color: var(--text);
39
+ }
40
+ .view-minimax-usage .view-subtitle {
41
+ margin: 0;
42
+ color: var(--text-muted);
43
+ font-size: 13px;
44
+ }
45
+ .view-minimax-usage .view-subtitle code {
46
+ font-size: 12px;
47
+ padding: 1px 5px;
48
+ border-radius: 3px;
49
+ background: var(--bg-2);
50
+ color: var(--text);
51
+ }
52
+ .view-minimax-usage .view-header-actions { display: flex; gap: 8px; align-items: center; }
53
+
54
+ /* ── banner (warn / err) ───────────────────────────────────────────── */
55
+ .view-minimax-usage .banner {
56
+ display: flex;
57
+ align-items: center;
58
+ gap: 10px;
59
+ padding: 10px 14px;
60
+ border-radius: 8px;
61
+ font-size: 13px;
62
+ border: 1px solid transparent;
63
+ }
64
+ .view-minimax-usage .banner code {
65
+ font-size: 12px;
66
+ padding: 1px 5px;
67
+ border-radius: 3px;
68
+ background: rgba(0,0,0,0.18);
69
+ }
70
+ .view-minimax-usage .banner-warn {
71
+ background: rgba(217, 158, 38, 0.12);
72
+ border-color: rgba(217, 158, 38, 0.35);
73
+ color: var(--text);
74
+ }
75
+ .view-minimax-usage .banner-err {
76
+ background: rgba(248, 81, 73, 0.10);
77
+ border-color: rgba(248, 81, 73, 0.40);
78
+ color: var(--text);
79
+ }
80
+
81
+ /* ── stat row ──────────────────────────────────────────────────────── */
82
+ .view-minimax-usage .minimax-stats-row {
83
+ display: grid;
84
+ grid-template-columns: repeat(4, 1fr);
85
+ gap: 12px;
86
+ }
87
+ @media (max-width: 900px) {
88
+ .view-minimax-usage .minimax-stats-row { grid-template-columns: repeat(2, 1fr); }
89
+ }
90
+ .view-minimax-usage .stat {
91
+ background: var(--bg-1);
92
+ border: 1px solid var(--border);
93
+ border-radius: 8px;
94
+ padding: 12px 14px;
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: 2px;
98
+ }
99
+ .view-minimax-usage .stat-label {
100
+ font-size: 11px;
101
+ letter-spacing: 0.05em;
102
+ text-transform: uppercase;
103
+ color: var(--text-muted);
104
+ }
105
+ .view-minimax-usage .stat-value {
106
+ font-size: 18px;
107
+ font-weight: 600;
108
+ color: var(--text);
109
+ font-family: var(--font-mono, ui-monospace, monospace);
110
+ word-break: break-word;
111
+ }
112
+ .view-minimax-usage .stat-hint {
113
+ font-size: 11px;
114
+ color: var(--text-muted);
115
+ }
116
+
117
+ /* ── per-model quota grid ────────────────────────────────────────── */
118
+ .view-minimax-usage .minimax-models-grid {
119
+ display: grid;
120
+ grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
121
+ gap: 14px;
122
+ }
123
+ .view-minimax-usage .minimax-model-card { padding: 14px 16px; }
124
+ .view-minimax-usage .minimax-model-head {
125
+ display: flex;
126
+ justify-content: space-between;
127
+ align-items: center;
128
+ margin-bottom: 12px;
129
+ gap: 8px;
130
+ }
131
+ .view-minimax-usage .minimax-model-name {
132
+ font-size: 15px;
133
+ font-weight: 600;
134
+ color: var(--text);
135
+ font-family: var(--font-mono, ui-monospace, monospace);
136
+ }
137
+ .view-minimax-usage .minimax-model-status {
138
+ font-size: 11px;
139
+ color: var(--text-muted);
140
+ text-transform: lowercase;
141
+ letter-spacing: 0.02em;
142
+ }
143
+ .view-minimax-usage .minimax-model-status.is-warn { color: var(--warning, #d29922); }
144
+ .view-minimax-usage .minimax-model-status.is-ok { color: var(--success, #3fb950); }
145
+
146
+ /* ── quota rows inside a model card ─────────────────────────────── */
147
+ .view-minimax-usage .minimax-quota-rows {
148
+ display: flex;
149
+ flex-direction: column;
150
+ gap: 10px;
151
+ }
152
+ .view-minimax-usage .minimax-quota-row {
153
+ display: flex;
154
+ flex-direction: column;
155
+ gap: 4px;
156
+ padding: 8px 10px;
157
+ border-radius: 6px;
158
+ background: rgba(255,255,255,0.02);
159
+ border: 1px solid var(--border);
160
+ }
161
+ .view-minimax-usage .minimax-quota-row.is-good { border-color: rgba(63, 185, 80, 0.25); }
162
+ .view-minimax-usage .minimax-quota-row.is-warn { border-color: rgba(217, 158, 38, 0.35); background: rgba(217, 158, 38, 0.05); }
163
+ .view-minimax-usage .minimax-quota-row.is-low { border-color: rgba(248, 81, 73, 0.45); background: rgba(248, 81, 73, 0.06); }
164
+
165
+ .view-minimax-usage .minimax-quota-head {
166
+ display: flex;
167
+ justify-content: space-between;
168
+ align-items: center;
169
+ font-size: 12px;
170
+ color: var(--text-muted);
171
+ }
172
+ .view-minimax-usage .minimax-quota-label {
173
+ display: inline-flex;
174
+ align-items: center;
175
+ gap: 4px;
176
+ color: var(--text);
177
+ font-weight: 500;
178
+ }
179
+ .view-minimax-usage .minimax-quota-remaining {
180
+ font-family: var(--font-mono, ui-monospace, monospace);
181
+ font-weight: 600;
182
+ color: var(--text);
183
+ }
184
+ .view-minimax-usage .minimax-quota-row.is-good .minimax-quota-remaining { color: var(--success, #3fb950); }
185
+ .view-minimax-usage .minimax-quota-row.is-warn .minimax-quota-remaining { color: var(--warning, #d29922); }
186
+ .view-minimax-usage .minimax-quota-row.is-low .minimax-quota-remaining { color: var(--error, #f85149); }
187
+
188
+ .view-minimax-usage .minimax-bar {
189
+ position: relative;
190
+ height: 8px;
191
+ background: var(--bg-2);
192
+ border-radius: 4px;
193
+ overflow: hidden;
194
+ }
195
+ .view-minimax-usage .minimax-bar-fill {
196
+ height: 100%;
197
+ background: var(--accent);
198
+ transition: width 200ms ease-out;
199
+ }
200
+ .view-minimax-usage .minimax-quota-row.is-good .minimax-bar-fill { background: var(--success, #3fb950); }
201
+ .view-minimax-usage .minimax-quota-row.is-warn .minimax-bar-fill { background: var(--warning, #d29922); }
202
+ .view-minimax-usage .minimax-quota-row.is-low .minimax-bar-fill { background: var(--error, #f85149); }
203
+
204
+ .view-minimax-usage .minimax-quota-meta {
205
+ display: flex;
206
+ justify-content: space-between;
207
+ font-size: 11px;
208
+ color: var(--text-muted);
209
+ }
210
+ .view-minimax-usage .minimax-quota-meta strong {
211
+ color: var(--text);
212
+ font-weight: 600;
213
+ font-family: var(--font-mono, ui-monospace, monospace);
214
+ }
215
+
216
+ /* ── Subscription Key card ──────────────────────────────────────── */
217
+ .view-minimax-usage .minimax-link {
218
+ color: var(--accent);
219
+ text-decoration: underline;
220
+ }
221
+ .view-minimax-usage .minimax-key-row {
222
+ display: flex;
223
+ align-items: center;
224
+ gap: 10px;
225
+ margin-top: 10px;
226
+ flex-wrap: wrap;
227
+ }
228
+ .view-minimax-usage .minimax-key-input-wrap {
229
+ position: relative;
230
+ flex: 1 1 320px;
231
+ display: flex;
232
+ align-items: center;
233
+ }
234
+ .view-minimax-usage .minimax-key-icon {
235
+ position: absolute;
236
+ left: 10px;
237
+ color: var(--text-muted);
238
+ pointer-events: none;
239
+ }
240
+ .view-minimax-usage .minimax-key-input {
241
+ width: 100%;
242
+ background: var(--bg-2);
243
+ border: 1px solid var(--border);
244
+ border-radius: 6px;
245
+ padding: 8px 36px 8px 32px;
246
+ color: var(--text);
247
+ font-family: var(--font-mono, ui-monospace, monospace);
248
+ font-size: 12px;
249
+ outline: none;
250
+ transition: border-color 120ms ease;
251
+ }
252
+ .view-minimax-usage .minimax-key-input:focus {
253
+ border-color: var(--accent);
254
+ }
255
+ .view-minimax-usage .minimax-key-input::placeholder {
256
+ color: var(--text-muted);
257
+ opacity: 0.7;
258
+ }
259
+ .view-minimax-usage .minimax-key-toggle {
260
+ position: absolute;
261
+ right: 6px;
262
+ width: 26px;
263
+ height: 26px;
264
+ display: inline-flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ background: transparent;
268
+ border: 0;
269
+ border-radius: 4px;
270
+ color: var(--text-muted);
271
+ cursor: pointer;
272
+ }
273
+ .view-minimax-usage .minimax-key-toggle:hover { color: var(--text); background: var(--bg-1); }
274
+ .view-minimax-usage .is-ok { color: var(--success, #3fb950); }
275
+ .view-minimax-usage .is-warn { color: var(--warning, #d29922); }
276
+
277
+ /* ── test prompt card ────────────────────────────────────────────── */
278
+ .view-minimax-usage .minimax-test-actions {
279
+ display: flex;
280
+ align-items: center;
281
+ gap: 12px;
282
+ flex-wrap: wrap;
283
+ margin-top: 8px;
284
+ }
285
+ .view-minimax-usage .minimax-test-prompt {
286
+ font-family: var(--font-mono, ui-monospace, monospace);
287
+ font-size: 12px;
288
+ color: var(--text-muted);
289
+ padding: 4px 8px;
290
+ background: var(--bg-2);
291
+ border-radius: 4px;
292
+ border: 1px solid var(--border);
293
+ }
294
+ .view-minimax-usage .minimax-test-result {
295
+ margin-top: 12px;
296
+ padding: 10px 12px;
297
+ border-radius: 6px;
298
+ display: flex;
299
+ gap: 10px;
300
+ align-items: flex-start;
301
+ font-size: 13px;
302
+ border: 1px solid transparent;
303
+ }
304
+ .view-minimax-usage .minimax-test-result.ok {
305
+ background: rgba(63, 185, 80, 0.08);
306
+ border-color: rgba(63, 185, 80, 0.30);
307
+ color: var(--text);
308
+ }
309
+ .view-minimax-usage .minimax-test-result.err {
310
+ background: rgba(248, 81, 73, 0.08);
311
+ border-color: rgba(248, 81, 73, 0.30);
312
+ color: var(--text);
313
+ }
314
+ .view-minimax-usage .minimax-test-body { flex: 1; min-width: 0; }
315
+ .view-minimax-usage .minimax-test-line { margin-bottom: 4px; }
316
+ .view-minimax-usage .minimax-test-line code {
317
+ font-size: 12px;
318
+ background: rgba(0,0,0,0.25);
319
+ padding: 0 4px;
320
+ border-radius: 3px;
321
+ }
322
+ .view-minimax-usage .minimax-test-content {
323
+ margin: 6px 0;
324
+ padding: 6px 8px;
325
+ background: var(--bg-2);
326
+ border-radius: 4px;
327
+ font-family: var(--font-mono, ui-monospace, monospace);
328
+ font-size: 12px;
329
+ }
330
+ .view-minimax-usage .minimax-test-usage {
331
+ font-size: 12px;
332
+ color: var(--text-muted);
333
+ }
334
+ .view-minimax-usage .minimax-test-usage code {
335
+ background: rgba(0,0,0,0.25);
336
+ padding: 0 4px;
337
+ border-radius: 3px;
338
+ font-size: 11px;
339
+ }
340
+ .view-minimax-usage .minimax-test-result pre {
341
+ margin: 0;
342
+ white-space: pre-wrap;
343
+ word-break: break-word;
344
+ font-family: var(--font-mono, ui-monospace, monospace);
345
+ font-size: 12px;
346
+ }
347
+
348
+ /* ── error card fallback ─────────────────────────────────────────── */
349
+ .view-minimax-usage .error-card {
350
+ display: flex;
351
+ align-items: flex-start;
352
+ gap: 12px;
353
+ padding: 14px 16px;
354
+ border-radius: 8px;
355
+ background: rgba(248, 81, 73, 0.06);
356
+ border: 1px solid rgba(248, 81, 73, 0.30);
357
+ color: var(--text);
358
+ }
359
+ .view-minimax-usage .error-card pre {
360
+ margin: 6px 0 0;
361
+ font-family: var(--font-mono, ui-monospace, monospace);
362
+ font-size: 12px;
363
+ white-space: pre-wrap;
364
+ }
365
+
366
+ /* ── spinner helper (in case global .spin doesn't cover all cases) ─── */
367
+ .view-minimax-usage .spin { animation: minimax-spin 900ms linear infinite; }
368
+ @keyframes minimax-spin {
369
+ from { transform: rotate(0deg); }
370
+ to { transform: rotate(360deg); }
371
+ }