codex-lb 0.3.0__py3-none-any.whl → 0.3.1__py3-none-any.whl

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.
app/static/index.css CHANGED
@@ -1,156 +1,74 @@
1
- .dialog-backdrop.auth-dialog-backdrop {
2
- z-index: 1000;
3
- }
4
-
5
- .window.auth-dialog[role="dialog"] {
6
- position: absolute;
7
- top: 50%;
8
- left: 50%;
9
- width: min(560px, calc(100% - 40px));
10
- transform: translate(-50%, -50%) scale(0.98);
11
- opacity: 0;
12
- visibility: hidden;
13
- pointer-events: none;
14
- transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s linear 0.2s;
15
- box-shadow: 0 18px 40px rgba(0, 0, 0, 0.45), 0 6px 16px rgba(0, 0, 0, 0.25);
16
- z-index: 1001;
17
- }
18
-
19
- .window.auth-dialog[role="dialog"].is-open {
20
- opacity: 1;
21
- visibility: visible;
22
- pointer-events: auto;
23
- transform: translate(-50%, -50%) scale(1);
24
- transition: opacity 0.2s ease, transform 0.2s ease;
25
- }
26
-
27
- .window.auth-dialog .auth-dialog__body {
28
- padding: 18px 22px;
29
- }
1
+ :root {
2
+ --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
30
3
 
31
- .auth-dialog__intro,
32
- .auth-dialog__panel {
33
- display: grid;
34
- gap: 12px;
35
- }
4
+ --bg-app: #09090b;
5
+ --bg-panel: #18181b;
6
+ --bg-card: #27272a;
7
+ --bg-surface: #27272a;
36
8
 
37
- .auth-dialog__lead {
38
- margin: 0;
39
- line-height: 1.4;
40
- color: #1a1a1a;
41
- }
9
+ --border-subtle: #3f3f46;
10
+ --border-strong: #52525b;
42
11
 
43
- .auth-dialog__methods {
44
- margin: 0;
45
- gap: 12px;
46
- }
12
+ --text-main: #f4f4f5;
13
+ --text-muted: #a1a1aa;
47
14
 
48
- .auth-dialog__option {
49
- display: grid;
50
- gap: 4px;
51
- align-items: start;
52
- }
15
+ --accent-primary: #3b82f6;
16
+ --accent-primary-hover: #2563eb;
17
+ --accent-primary-text: #ffffff;
53
18
 
54
- .auth-dialog__option label {
55
- font-weight: 600;
56
- }
19
+ --status-active-bg: rgba(34, 197, 94, 0.15);
20
+ --status-active-text: #4ade80;
57
21
 
58
- .auth-dialog__option-meta {
59
- margin-left: var(--w7-rd-left);
60
- }
22
+ --status-warning-bg: rgba(234, 179, 8, 0.15);
23
+ --status-warning-text: #facc15;
61
24
 
25
+ --status-error-bg: rgba(239, 68, 68, 0.15);
26
+ --status-error-text: #f87171;
62
27
 
63
- .auth-dialog__detail {
64
- display: grid;
65
- gap: 4px;
66
- }
28
+ --status-paused-bg: rgba(59, 130, 246, 0.15);
29
+ --status-paused-text: #60a5fa;
67
30
 
68
- .auth-dialog__label {
69
- font-size: 12px;
70
- color: #555;
71
- }
31
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.5);
32
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
72
33
 
73
- .auth-dialog__value {
74
- font-size: 12px;
75
- color: #1a1a1a;
76
- word-break: break-all;
77
- }
34
+ --donut-empty: #3f3f46;
78
35
 
79
- .auth-dialog__link {
80
- color: #2b579a;
81
- text-decoration: underline;
82
- }
36
+ --bg-list-hover: rgba(255, 255, 255, 0.03);
37
+ --bg-list-selected: rgba(59, 130, 246, 0.15);
83
38
 
84
- .auth-dialog__device-grid {
85
- display: grid;
86
- gap: 12px;
39
+ --shell-max-width: 1400px;
87
40
  }
88
41
 
89
- .auth-dialog__device-grid > div {
90
- display: grid;
91
- gap: 4px;
92
- }
42
+ [data-theme="light"] {
43
+ --bg-app: #f4f4f5;
44
+ --bg-panel: #ffffff;
45
+ --bg-card: #ffffff;
46
+ --bg-surface: #f4f4f5;
93
47
 
94
- .auth-dialog__steps {
95
- margin: 0;
96
- padding-left: 18px;
97
- color: #333;
98
- font-size: 12px;
99
- line-height: 1.4;
100
- }
48
+ --border-subtle: #e4e4e7;
49
+ --border-strong: #d4d4d8;
101
50
 
102
- .auth-dialog__steps li {
103
- margin-bottom: 4px;
104
- }
51
+ --text-main: #18181b;
52
+ --text-muted: #71717a;
105
53
 
106
- .auth-dialog__code-value {
107
- display: inline-block;
108
- padding: 6px 10px;
109
- border: 1px solid #c2c2c2;
110
- background: #fff;
111
- border-radius: 3px;
112
- font-weight: 700;
113
- letter-spacing: 1px;
114
- font-size: 13px;
115
- }
54
+ --status-active-bg: #dcfce7;
55
+ --status-active-text: #16a34a;
116
56
 
117
- .auth-dialog__device-meta {
118
- font-size: 12px;
119
- }
57
+ --status-warning-bg: #fef3c7;
58
+ --status-warning-text: #f59e0b;
120
59
 
121
- .auth-dialog__status {
122
- display: flex;
123
- align-items: center;
124
- gap: 6px;
125
- font-size: 12px;
126
- color: #444;
127
- }
60
+ --status-error-bg: #fee2e2;
61
+ --status-error-text: #ef4444;
128
62
 
129
- .auth-dialog__actions {
130
- display: flex;
131
- justify-content: flex-end;
132
- gap: 8px;
133
- flex-wrap: wrap;
134
- }
63
+ --status-paused-bg: #dbeafe;
64
+ --status-paused-text: #2563eb;
135
65
 
136
- .auth-dialog__actions-row {
137
- display: flex;
138
- gap: 8px;
139
- flex-wrap: wrap;
140
- }
66
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
67
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
68
+ --bg-list-hover: rgba(0, 0, 0, 0.04);
69
+ --bg-list-selected: rgba(59, 130, 246, 0.1);
141
70
 
142
- :root {
143
- color-scheme: light;
144
- --shell-max-width: 1180px;
145
- --shell-gap: 16px;
146
- --panel-bg: #f6f8fc;
147
- --panel-border: #b7c0d6;
148
- --panel-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
149
- --accent-blue: #2b579a;
150
- --accent-green: #2f7d32;
151
- --accent-orange: #b86a00;
152
- --accent-red: #a32a2a;
153
- --accent-gray: #5f5f5f;
71
+ --donut-empty: #e4e4e7;
154
72
  }
155
73
 
156
74
  * {
@@ -163,124 +81,212 @@
163
81
 
164
82
  body {
165
83
  margin: 0;
84
+ padding: 0;
166
85
  min-height: 100vh;
167
- padding: 20px;
168
- background:
169
- radial-gradient(circle at 12% 18%, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0) 45%),
170
- linear-gradient(135deg, #b9cce8 0%, #cadcf2 40%, #e8f0fb 100%);
86
+ font-family: var(--font-sans);
87
+ background-color: var(--bg-app);
88
+ color: var(--text-main);
89
+ text-rendering: optimizeLegibility;
90
+ -webkit-font-smoothing: antialiased;
171
91
  }
172
92
 
173
93
  .app-shell {
94
+ display: flex;
95
+ flex-direction: column;
96
+ min-height: 100vh;
97
+ }
98
+
99
+ .main-header {
100
+ background: var(--bg-panel);
101
+ border-bottom: 1px solid var(--border-subtle);
102
+ position: sticky;
103
+ top: 0;
104
+ z-index: 10;
105
+ }
106
+
107
+ .header-content {
174
108
  max-width: var(--shell-max-width);
175
109
  margin: 0 auto;
110
+ padding: 16px 24px;
176
111
  display: flex;
177
- flex-direction: column;
178
- gap: var(--shell-gap);
112
+ justify-content: space-between;
113
+ align-items: center;
179
114
  }
180
115
 
181
- .window > .window-body {
182
- position: relative;
116
+ .app-logo {
117
+ font-size: 18px;
118
+ font-weight: 600;
119
+ margin: 0;
120
+ color: var(--text-main);
121
+ letter-spacing: -0.02em;
183
122
  }
184
123
 
185
- .loading-overlay {
186
- position: absolute;
187
- inset: 0;
124
+ .header-actions button {
125
+ background: transparent;
126
+ border: 1px solid var(--border-strong);
127
+ color: var(--text-muted);
128
+ cursor: pointer;
129
+ padding: 8px;
130
+ border-radius: 8px;
188
131
  display: flex;
189
132
  align-items: center;
190
133
  justify-content: center;
191
- background: rgba(248, 250, 255, 0.88);
192
- z-index: 10;
134
+ transition: all 0.2s;
193
135
  }
194
136
 
195
- .loading-panel {
137
+ .header-actions button:hover {
138
+ background: var(--bg-surface);
139
+ color: var(--text-main);
140
+ border-color: var(--text-muted);
141
+ }
142
+
143
+ .main-content {
144
+ flex: 1;
145
+ width: 100%;
146
+ max-width: var(--shell-max-width);
147
+ margin: 0 auto;
148
+ padding: 32px 24px 80px;
149
+ position: relative;
150
+ }
151
+
152
+ .tabs menu[role="tablist"] {
196
153
  display: flex;
197
- align-items: center;
198
- gap: 10px;
199
- padding: 10px 14px;
200
- border: 1px solid var(--panel-border);
201
- border-radius: 4px;
202
- background: #fff;
203
- box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2);
204
- font-weight: 600;
205
- color: #222;
154
+ gap: 24px;
155
+ margin: 0 0 32px 0;
156
+ padding: 0;
157
+ list-style: none;
158
+ border-bottom: 1px solid var(--border-subtle);
159
+ }
160
+
161
+ .tabs menu[role="tablist"] button {
162
+ appearance: none;
163
+ background: transparent;
164
+ border: none;
165
+ border-bottom: 2px solid transparent;
166
+ color: var(--text-muted);
167
+ font-family: inherit;
168
+ font-size: 14px;
169
+ font-weight: 500;
170
+ padding: 0 0 12px 0;
171
+ cursor: pointer;
172
+ transition: all 0.2s;
206
173
  }
207
174
 
208
- .loading-panel .spinner {
209
- width: 22px;
210
- height: 22px;
175
+ .tabs menu[role="tablist"] button:hover {
176
+ color: var(--text-main);
211
177
  }
212
178
 
179
+ .tabs menu[role="tablist"] button[aria-selected="true"] {
180
+ color: var(--accent-primary);
181
+ border-bottom-color: var(--accent-primary);
182
+ }
213
183
 
214
184
  .section-grid {
215
185
  display: grid;
216
- gap: 12px;
217
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
186
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
187
+ gap: 24px;
188
+ margin-top: 24px;
218
189
  }
219
190
 
220
191
  .two-column {
221
192
  display: grid;
222
- gap: 16px;
223
- grid-template-columns: minmax(0, 2fr) minmax(260px, 1fr);
193
+ grid-template-columns: 1fr 380px;
194
+ gap: 24px;
195
+ margin-top: 24px;
196
+ }
197
+
198
+ @media (max-width: 900px) {
199
+ .two-column {
200
+ grid-template-columns: 1fr;
201
+ }
224
202
  }
225
203
 
226
204
  .two-column--equal {
227
- grid-template-columns: repeat(2, minmax(0, 1fr));
205
+ grid-template-columns: 1fr 1fr;
228
206
  }
229
207
 
230
- @media (max-width: 900px) {
231
- .two-column {
208
+ @media (max-width: 768px) {
209
+ .two-column--equal {
232
210
  grid-template-columns: 1fr;
233
211
  }
234
212
  }
235
213
 
236
214
  .panel {
237
- border: 1px solid var(--panel-border);
238
- background: var(--panel-bg);
239
- padding: 12px;
240
- border-radius: 4px;
241
- box-shadow: var(--panel-shadow);
215
+ background: var(--bg-card);
216
+ border: 1px solid var(--border-subtle);
217
+ border-radius: 12px;
218
+ padding: 24px;
219
+ box-shadow: var(--shadow-sm);
242
220
  }
243
221
 
244
222
  .panel h3 {
245
- margin: 0 0 6px;
223
+ margin: 0 0 16px 0;
246
224
  font-size: 14px;
225
+ font-weight: 600;
226
+ color: var(--text-muted);
227
+ text-transform: uppercase;
228
+ letter-spacing: 0.05em;
247
229
  }
248
230
 
231
+ .hero-banner {
232
+ background: linear-gradient(to right bottom, var(--bg-card), var(--bg-surface));
233
+ border: 1px solid var(--border-subtle);
234
+ border-radius: 12px;
235
+ padding: 32px;
236
+ margin-bottom: 32px;
237
+ }
249
238
 
250
- .stat-value {
251
- margin-top: 4px;
252
- font-size: 22px;
239
+ .hero-banner h2 {
240
+ font-size: 24px;
253
241
  font-weight: 600;
242
+ margin: 0 0 12px 0;
243
+ color: var(--text-main);
244
+ letter-spacing: -0.02em;
245
+ }
246
+
247
+ .hero-banner p {
248
+ color: var(--text-muted);
249
+ margin: 0 0 24px 0;
250
+ line-height: 1.6;
251
+ max-width: 600px;
252
+ }
253
+
254
+ .stat-value {
255
+ font-size: 32px;
256
+ font-weight: 700;
257
+ color: var(--text-main);
258
+ margin-bottom: 4px;
259
+ letter-spacing: -0.02em;
254
260
  }
255
261
 
256
262
  .stat-meta {
257
- color: #555;
258
- font-size: 12px;
263
+ color: var(--text-muted);
264
+ font-size: 14px;
259
265
  }
260
266
 
261
267
  .donut-wrap {
262
268
  display: flex;
263
269
  align-items: center;
264
- gap: 16px;
270
+ gap: 32px;
271
+ justify-content: center;
265
272
  flex-wrap: wrap;
266
- margin-top: 10px;
267
273
  }
268
274
 
269
275
  .donut {
270
276
  width: 140px;
271
277
  height: 140px;
272
278
  border-radius: 50%;
273
- background: var(--donut-data, #d3d3d3);
279
+ background: var(--donut-data, var(--donut-empty));
274
280
  position: relative;
281
+ flex-shrink: 0;
275
282
  }
276
283
 
277
284
  .donut::after {
278
285
  content: "";
279
286
  position: absolute;
280
- inset: 18px;
281
- background: #fdfdfd;
287
+ inset: 24px;
288
+ background: var(--bg-card);
282
289
  border-radius: 50%;
283
- box-shadow: inset 0 0 0 1px #c7c7c7;
284
290
  }
285
291
 
286
292
  .donut-center {
@@ -289,284 +295,954 @@ body {
289
295
  left: 50%;
290
296
  transform: translate(-50%, -50%);
291
297
  text-align: center;
298
+ z-index: 2;
299
+ }
300
+
301
+ .donut-center strong {
302
+ display: block;
303
+ font-size: 16px;
304
+ color: var(--text-main);
305
+ }
306
+
307
+ .donut-center div {
292
308
  font-size: 12px;
293
- color: #333;
294
- z-index: 1;
309
+ color: var(--text-muted);
295
310
  }
296
311
 
297
312
  .legend {
298
- display: grid;
299
- gap: 6px;
300
- padding: 0;
301
313
  list-style: none;
314
+ padding: 0;
315
+ margin: 0;
302
316
  flex: 1;
303
317
  min-width: 0;
304
318
  }
305
319
 
306
320
  .legend li {
307
- display: grid;
308
- grid-template-columns: minmax(0, 1fr) 120px;
321
+ display: flex;
322
+ justify-content: space-between;
309
323
  align-items: center;
310
- gap: 8px;
311
- font-size: 12px;
312
- width: 100%;
324
+ padding: 8px 0;
325
+ border-bottom: 1px solid var(--border-subtle);
326
+ font-size: 13px;
327
+ gap: 12px;
328
+ }
329
+
330
+ .legend li:last-child {
331
+ border-bottom: none;
313
332
  }
314
333
 
315
334
  .legend-label {
316
335
  display: flex;
317
336
  align-items: center;
318
- gap: 6px;
337
+ gap: 8px;
338
+ color: var(--text-main);
319
339
  min-width: 0;
340
+ flex: 1;
320
341
  }
321
342
 
322
343
  .legend-label-text {
323
- flex: 1 1 auto;
324
344
  min-width: 0;
325
345
  overflow: hidden;
326
346
  text-overflow: ellipsis;
327
347
  white-space: nowrap;
328
348
  }
329
349
 
330
- .legend-detail {
331
- white-space: nowrap;
332
- display: flex;
333
- align-items: baseline;
334
- justify-content: space-between;
335
- gap: 6px;
350
+ .legend i {
351
+ width: 8px;
352
+ height: 8px;
353
+ border-radius: 50%;
354
+ background: var(--legend-color, #888);
336
355
  }
337
356
 
338
- .legend-detail-label {
339
- min-width: 0;
357
+ .legend-detail {
358
+ display: flex;
359
+ gap: 12px;
340
360
  }
341
361
 
342
362
  .legend-detail-value {
363
+ font-family: monospace;
364
+ color: var(--text-main);
343
365
  min-width: 4ch;
344
366
  text-align: right;
345
- font-variant-numeric: tabular-nums;
346
- font-feature-settings: "tnum" 1;
347
- }
348
-
349
-
350
- .legend i {
351
- width: 10px;
352
- height: 10px;
353
- border-radius: 2px;
354
- display: inline-block;
355
- background: var(--legend-color, #999);
356
- }
357
-
358
-
359
- .account-grid {
360
- display: grid;
361
- gap: 12px;
362
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
363
- }
364
-
365
- .account-card {
366
- border: 1px solid var(--panel-border);
367
- background: #fff;
368
- padding: 10px;
369
- border-radius: 4px;
370
- }
371
-
372
- .account-card header {
373
- display: flex;
374
- justify-content: space-between;
375
- align-items: center;
376
- gap: 10px;
377
- margin-bottom: 8px;
378
367
  }
379
368
 
380
- .account-card header > div {
381
- flex: 1 1 auto;
382
- min-width: 0;
383
- }
384
-
385
- .account-card header > div > div {
386
- overflow: hidden;
387
- text-overflow: ellipsis;
388
- white-space: nowrap;
369
+ .text-success,
370
+ .legend-detail-value.success {
371
+ color: var(--status-active-text);
389
372
  }
390
373
 
391
- .account-card .account-id {
392
- font-size: 12px;
393
- color: #666;
374
+ .text-limited,
375
+ .legend-detail-value.limited {
376
+ color: var(--status-warning-text);
394
377
  }
395
378
 
396
- .account-card .account-actions {
397
- display: flex;
398
- gap: 6px;
399
- flex-wrap: wrap;
400
- margin-top: 8px;
379
+ .text-error,
380
+ .legend-detail-value.error {
381
+ color: var(--status-error-text);
401
382
  }
402
383
 
403
384
  .status-pill {
404
385
  display: inline-flex;
405
386
  align-items: center;
406
- gap: 4px;
407
- padding: 0 9px;
408
- min-height: 18px;
409
- border-radius: 999px;
410
- border: 1px solid var(--w7-el-bd);
411
- box-shadow: var(--w7-el-sd);
412
- font-size: 11px;
413
- line-height: 16px;
387
+ padding: 4px 10px;
388
+ border-radius: 9999px;
389
+ font-size: 12px;
390
+ font-weight: 500;
391
+ background: var(--bg-surface);
392
+ color: var(--text-muted);
393
+ line-height: 1;
414
394
  white-space: nowrap;
415
- flex-shrink: 0;
416
- color: #222;
417
- background: var(--w7-el-grad);
418
- text-shadow: 0 1px 0 #fff;
419
395
  }
420
396
 
421
397
  .status-pill.active {
422
- background: linear-gradient(#f4fff6 45%, #dff3e4 45%, #c7e6d0);
423
- border-color: #7fab86;
424
- color: #1f5b2c;
398
+ background: var(--status-active-bg);
399
+ color: var(--status-active-text);
400
+ }
401
+
402
+ .status-pill.ok {
403
+ background: var(--status-active-bg);
404
+ color: var(--status-active-text);
425
405
  }
426
406
 
427
407
  .status-pill.limited {
428
- background: linear-gradient(#fff8e7 45%, #f9e3b9 45%, #e5c981);
429
- border-color: #c4973b;
430
- color: #7c4f13;
408
+ background: var(--status-warning-bg);
409
+ color: var(--status-warning-text);
431
410
  }
432
411
 
433
- .status-pill.paused {
434
- background: linear-gradient(#f0f7ff 45%, #d6e6fb 45%, #bdd7f6);
435
- border-color: #6f92c9;
436
- color: #2b4a7a;
412
+ .status-pill.rate_limit {
413
+ background: var(--status-warning-bg);
414
+ color: var(--status-warning-text);
437
415
  }
438
416
 
439
417
  .status-pill.exceeded {
440
- background: linear-gradient(#ffefed 45%, #f5d0cb 45%, #e2a59c);
441
- border-color: #b45d58;
442
- color: #7a2f2c;
418
+ background: var(--status-error-bg);
419
+ color: var(--status-error-text);
443
420
  }
444
421
 
445
- .status-pill.deactivated {
446
- background: linear-gradient(#f7f7f7 45%, #e7e7e7 45%, #d2d2d2);
447
- border-color: #9b9b9b;
448
- color: #5a5a5a;
422
+ .status-pill.quota {
423
+ background: var(--status-error-bg);
424
+ color: var(--status-error-text);
449
425
  }
450
426
 
451
- .progress-row {
427
+ .status-pill.deactivated,
428
+ .status-pill.paused {
429
+ background: var(--status-paused-bg);
430
+ color: var(--status-paused-text);
431
+ }
432
+
433
+ .badge-row {
452
434
  display: flex;
453
- align-items: center;
454
- gap: 2px;
435
+ gap: 8px;
436
+ flex-wrap: wrap;
455
437
  }
456
438
 
457
- .progress-row label {
458
- min-width: 60px;
459
- font-size: 12px;
460
- margin-right: 10px;
439
+ .account-grid {
440
+ display: grid;
441
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
442
+ gap: 16px;
443
+ margin-top: 16px;
461
444
  }
462
445
 
463
- .progress-row [role="progressbar"] {
464
- flex: 1;
446
+ .account-card {
447
+ background: var(--bg-card);
448
+ border: 1px solid var(--border-subtle);
449
+ border-radius: 12px;
450
+ padding: 20px;
451
+ display: flex;
452
+ flex-direction: column;
453
+ gap: 16px;
454
+ transition: transform 0.2s, box-shadow 0.2s;
465
455
  }
466
456
 
467
- .progress-row .text-muted {
468
- flex: 0 0 36px;
469
- text-align: right;
457
+ .account-card:hover {
458
+ transform: translateY(-2px);
459
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -2px rgba(0, 0, 0, 0.3);
460
+ border-color: var(--accent-primary);
461
+ background: var(--bg-surface);
470
462
  }
471
463
 
472
- #tab-accounts .account-list-panel {
464
+ .account-card header {
473
465
  display: flex;
474
- flex-direction: column;
466
+ justify-content: space-between;
467
+ align-items: flex-start;
468
+ gap: 12px;
475
469
  }
476
470
 
477
- #tab-accounts .account-list-panel .table-wrap {
471
+ .account-card header>div {
478
472
  flex: 1;
479
- min-height: 0;
473
+ min-width: 0;
474
+ padding-right: 8px;
480
475
  }
481
476
 
482
- #tab-accounts .account-list-panel .table-wrap--column-lines {
483
- --w7-table-cols: 6;
477
+ .account-card header .status-pill {
478
+ flex-shrink: 0;
484
479
  }
485
480
 
486
- .table-wrap--requests {
487
- --w7-table-cols: 7;
488
- height: 220px;
481
+ .account-card header>div>div:first-child {
482
+ font-weight: 500;
483
+ font-size: 15px;
484
+ color: var(--text-main);
485
+ white-space: nowrap;
486
+ overflow: hidden;
487
+ text-overflow: ellipsis;
489
488
  }
490
489
 
491
- table {
492
- width: 100%;
493
- }
490
+ .account-card .account-id {
491
+ font-size: 12px;
492
+ color: var(--text-muted);
493
+ font-family: monospace;
494
+ margin-top: 4px;
495
+ }
494
496
 
495
- .inline-actions {
497
+ .progress-row {
498
+ display: flex;
499
+ flex-direction: column;
500
+ gap: 6px;
501
+ }
502
+
503
+ .progress-row+.progress-row {
504
+ margin-top: 24px;
505
+ }
506
+
507
+ .progress-row label {
508
+ font-size: 13px;
509
+ color: var(--text-muted);
510
+ display: flex;
511
+ justify-content: space-between;
512
+ }
513
+
514
+ [role="progressbar"] {
515
+ height: 6px;
516
+ background: var(--border-strong);
517
+ border-radius: 99px;
518
+ overflow: hidden;
519
+ position: relative;
520
+ }
521
+
522
+ [role="progressbar"] div {
523
+ height: 100%;
524
+ background: var(--accent-primary);
525
+ border-radius: 99px;
526
+ }
527
+
528
+ [role="progressbar"].limited div {
529
+ background: var(--status-warning-text);
530
+ }
531
+
532
+ [role="progressbar"].error div {
533
+ background: var(--status-error-text);
534
+ }
535
+
536
+ [role="progressbar"].success div {
537
+ background: var(--status-active-text);
538
+ }
539
+
540
+ .account-actions {
496
541
  display: flex;
497
542
  gap: 8px;
498
- flex-wrap: wrap;
543
+ margin-top: auto;
544
+ padding-top: 8px;
499
545
  }
500
546
 
501
- .badge-row {
547
+ .account-actions button {
548
+ font-size: 12px;
549
+ padding: 6px 10px;
550
+ border-radius: 6px;
551
+ border: 1px solid var(--accent-primary);
552
+ background: var(--accent-primary);
553
+ color: var(--accent-primary-text);
554
+ cursor: pointer;
555
+ font-weight: 500;
556
+ transition: background 0.2s;
557
+ }
558
+
559
+ .account-actions button:hover {
560
+ background: var(--accent-primary-hover);
561
+ border-color: var(--accent-primary-hover);
562
+ }
563
+
564
+
565
+
566
+ .inline-actions {
502
567
  display: flex;
503
568
  gap: 8px;
504
- flex-wrap: wrap;
505
569
  }
506
570
 
507
- .text-muted {
508
- color: #666;
571
+ .inline-actions button {
572
+ font-size: 13px;
573
+ padding: 8px 12px;
574
+ border-radius: 6px;
575
+ border: 1px solid var(--accent-primary);
576
+ background: var(--accent-primary);
577
+ color: var(--accent-primary-text);
578
+ cursor: pointer;
579
+ font-weight: 500;
580
+ transition: all 0.2s;
581
+ }
582
+
583
+ .inline-actions button:hover {
584
+ border-color: var(--accent-primary-hover);
585
+ background: var(--accent-primary-hover);
586
+ }
587
+
588
+ .table-wrap {
589
+ width: 100%;
590
+ overflow-x: auto;
591
+ border: 1px solid var(--border-subtle);
592
+ border-radius: 8px;
593
+ }
594
+
595
+ table {
596
+ width: 100%;
597
+ border-collapse: collapse;
598
+ font-size: 14px;
599
+ text-align: left;
600
+ table-layout: fixed;
601
+ }
602
+
603
+ .cell-truncate {
604
+ white-space: nowrap;
605
+ overflow: hidden;
606
+ text-overflow: ellipsis;
607
+ }
608
+
609
+ /* ... existing styles ... */
610
+
611
+ .list-actions .searchbox button {
612
+ background: transparent;
613
+ color: var(--text-muted);
614
+ border: none;
615
+ padding: 0;
616
+ right: 8px;
617
+ width: auto;
618
+ }
619
+
620
+ .list-actions .searchbox button:hover {
621
+ background: transparent;
622
+ }
623
+
624
+ /* ... existing styles ... */
625
+
626
+ .summary-list strong {
627
+ color: var(--text-main);
628
+ font-weight: 500;
629
+ white-space: nowrap;
630
+ overflow: hidden;
631
+ text-overflow: ellipsis;
632
+ max-width: 60%;
633
+ text-align: right;
634
+ }
635
+
636
+ th {
637
+ background: var(--bg-surface);
638
+ padding: 12px 20px;
639
+ font-weight: 600;
640
+ color: var(--text-muted);
509
641
  font-size: 12px;
642
+ text-transform: uppercase;
643
+ border-bottom: 1px solid var(--border-subtle);
510
644
  }
511
645
 
512
- .split-stack {
513
- display: grid;
514
- gap: 12px;
646
+ td {
647
+ padding: 14px 20px;
648
+ border-bottom: 1px solid var(--border-subtle);
649
+ color: var(--text-main);
650
+ }
651
+
652
+ tr:last-child td {
653
+ border-bottom: none;
654
+ }
655
+
656
+ tr {
657
+ transition: background-color 0.15s;
658
+ }
659
+
660
+ tr:hover td {
661
+ background: var(--bg-list-hover);
662
+ color: var(--text-main);
663
+ }
664
+
665
+ tr:hover td.text-success {
666
+ color: var(--status-active-text);
667
+ }
668
+
669
+ tr:hover td.text-limited {
670
+ color: var(--status-warning-text);
671
+ }
672
+
673
+ tr:hover td.text-error {
674
+ color: var(--status-error-text);
675
+ }
676
+
677
+ tr:hover {
678
+ outline: none;
679
+ }
680
+
681
+ tr.highlighted td {
682
+ background: var(--bg-list-selected);
683
+ border-bottom-color: var(--border-subtle);
684
+ }
685
+
686
+ tr.highlighted td:first-child {
687
+ box-shadow: inset 3px 0 0 var(--accent-primary);
688
+ }
689
+
690
+ input[type="text"],
691
+ input[type="search"],
692
+ input[type="file"] {
693
+ background: var(--bg-surface);
694
+ border: 1px solid var(--border-strong);
695
+ color: var(--text-main);
696
+ padding: 8px 12px;
697
+ border-radius: 6px;
698
+ font-family: inherit;
699
+ font-size: 14px;
700
+ outline: none;
701
+ transition: border-color 0.2s;
702
+ width: 100%;
703
+ }
704
+
705
+ input:focus {
706
+ border-color: var(--accent-primary);
515
707
  }
516
708
 
517
709
  .list-actions {
518
710
  display: flex;
519
- gap: 8px;
711
+ gap: 12px;
520
712
  align-items: center;
521
- flex-wrap: wrap;
522
- margin-bottom: 8px;
713
+ margin-bottom: 16px;
523
714
  }
524
715
 
525
- .list-actions label[role="button"] {
716
+ .searchbox {
717
+ flex: 1;
718
+ max-width: 320px;
526
719
  position: relative;
527
- overflow: hidden;
528
720
  }
529
721
 
530
- .list-actions label[role="button"].is-disabled {
531
- opacity: 0.6;
532
- pointer-events: none;
722
+ .searchbox button {
723
+ position: absolute;
724
+ right: 8px;
725
+ top: 50%;
726
+ transform: translateY(-50%);
727
+ background: transparent;
728
+ border: none;
729
+ color: var(--text-muted);
730
+ cursor: pointer;
533
731
  }
534
732
 
535
- .list-actions label[role="button"] > input[type="file"].file-input {
733
+ button {
734
+ font-family: inherit;
735
+ }
736
+
737
+ .list-actions button,
738
+ .dialog-actions button {
739
+ background: var(--accent-primary);
740
+ color: var(--accent-primary-text);
741
+ border: none;
742
+ padding: 8px 16px;
743
+ border-radius: 6px;
744
+ font-size: 14px;
745
+ font-weight: 500;
746
+ cursor: pointer;
747
+ transition: background 0.2s;
748
+ }
749
+
750
+ .list-actions button:hover {
751
+ background: var(--accent-primary-hover);
752
+ }
753
+
754
+ .list-actions label[role="button"] {
755
+ display: inline-block;
756
+ padding: 8px 16px;
757
+ border: 1px solid var(--accent-primary);
758
+ border-radius: 6px;
759
+ font-size: 14px;
760
+ font-weight: 500;
761
+ cursor: pointer;
762
+ color: var(--accent-primary-text);
763
+ position: relative;
764
+ background: var(--accent-primary);
765
+ transition: background 0.2s;
766
+ }
767
+
768
+ .list-actions label[role="button"] input {
536
769
  position: absolute;
770
+ opacity: 0;
771
+ width: 0;
772
+ }
773
+
774
+ .list-actions label[role="button"]:hover {
775
+ background: var(--accent-primary-hover);
776
+ border-color: var(--accent-primary-hover);
777
+ }
778
+
779
+ .dialog-backdrop {
780
+ position: fixed;
537
781
  inset: 0;
538
- display: block;
539
- border: 0;
540
- margin: 0;
541
- padding: 0;
542
- width: 100%;
543
- height: 100%;
782
+ background: rgba(0, 0, 0, 0.6);
783
+ backdrop-filter: blur(4px);
784
+ z-index: 50;
785
+ opacity: 0;
786
+ pointer-events: none;
787
+ transition: opacity 0.2s;
788
+ }
789
+
790
+ .dialog-backdrop.is-open {
791
+ opacity: 1;
792
+ pointer-events: auto;
793
+ }
794
+
795
+ .window.message-dialog,
796
+ .window.auth-dialog {
797
+ position: fixed;
798
+ top: 50%;
799
+ left: 50%;
800
+ transform: translate(-50%, -50%) scale(0.95);
801
+ width: 90%;
802
+ max-width: 480px;
803
+ background: var(--bg-panel);
804
+ z-index: 51;
544
805
  opacity: 0;
806
+ pointer-events: none;
807
+ transition: all 0.2s;
808
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.4);
809
+ border: 1px solid var(--border-subtle);
810
+ border-radius: 12px;
811
+ overflow: hidden;
812
+ /* Ensure children don't bleed out */
813
+ }
814
+
815
+ /* Title Bar - Common for all dialogs */
816
+ .title-bar {
817
+ display: flex;
818
+ justify-content: space-between;
819
+ align-items: center;
820
+ padding: 16px 20px;
821
+ border-bottom: 1px solid var(--border-subtle);
822
+ background: var(--bg-panel);
823
+ }
824
+
825
+ .title-bar-text {
826
+ font-weight: 600;
827
+ font-size: 16px;
828
+ color: var(--text-main);
829
+ }
830
+
831
+ .title-bar-controls button {
832
+ width: 28px;
833
+ height: 28px;
834
+ background: transparent;
835
+ border: none;
836
+ color: var(--text-muted);
545
837
  cursor: pointer;
838
+ position: relative;
839
+ border-radius: 4px;
840
+ transition: all 0.2s;
546
841
  }
547
842
 
548
- .hero-banner {
843
+ .title-bar-controls button:hover {
844
+ background: var(--bg-surface);
845
+ color: var(--text-main);
846
+ }
847
+
848
+ .title-bar-controls button::before,
849
+ .title-bar-controls button::after {
850
+ content: '';
851
+ position: absolute;
852
+ top: 50%;
853
+ left: 50%;
854
+ width: 14px;
855
+ height: 1.5px;
856
+ background: currentColor;
857
+ transform: translate(-50%, -50%) rotate(45deg);
858
+ }
859
+
860
+ .title-bar-controls button::after {
861
+ transform: translate(-50%, -50%) rotate(-45deg);
862
+ }
863
+
864
+ .window.is-open {
865
+ opacity: 1;
866
+ pointer-events: auto;
867
+ transform: translate(-50%, -50%) scale(1);
868
+ }
869
+
870
+ .window-body {
871
+ padding: 20px;
872
+ }
873
+
874
+ .text-muted {
875
+ color: var(--text-muted);
876
+ font-size: 13px;
877
+ }
878
+
879
+ .summary-list>div {
880
+ display: flex;
881
+ justify-content: space-between;
882
+ padding: 10px 0;
883
+ border-bottom: 1px solid var(--border-subtle);
884
+ font-size: 14px;
885
+ }
886
+
887
+ .summary-list span {
888
+ color: var(--text-muted);
889
+ }
890
+
891
+ .summary-list strong {
892
+ color: var(--text-main);
893
+ font-weight: 500;
894
+ }
895
+
896
+ .settings-fieldset {
897
+ margin-top: 12px;
898
+ border: 1px solid var(--border-strong);
899
+ border-radius: 8px;
900
+ padding: 16px;
901
+ }
902
+
903
+ .settings-fieldset legend {
904
+ padding: 0 8px;
905
+ color: var(--text-muted);
906
+ font-size: 13px;
907
+ font-weight: 500;
908
+ margin-left: -4px;
909
+ }
910
+
911
+ .settings-fieldset label {
912
+ font-size: 14px;
913
+ color: var(--text-main);
914
+ }
915
+
916
+ .settings-fieldset input[type="checkbox"] {
917
+ accent-color: var(--accent-primary);
918
+ margin-right: 8px;
919
+ }
920
+
921
+ .settings-fieldset .text-muted {
922
+ margin-top: 6px;
923
+ margin-left: 22px;
924
+ }
925
+
926
+ .token-fieldset {
927
+ margin-top: 24px;
928
+ border: 1px solid var(--border-strong);
929
+ border-radius: 8px;
930
+ padding: 0 16px;
931
+ }
932
+
933
+ .token-fieldset legend {
934
+ padding: 0 8px;
935
+ color: var(--text-muted);
936
+ font-size: 13px;
937
+ font-weight: 500;
938
+ margin-left: -4px;
939
+ }
940
+
941
+ .token-fieldset .summary-list>div:last-child {
942
+ border-bottom: none;
943
+ }
944
+
945
+ .auth-dialog__panel {
946
+ padding: 24px;
947
+ display: flex;
948
+ flex-direction: column;
949
+ }
950
+
951
+ .auth-dialog__lead {
952
+ margin: 0 0 20px 0;
953
+ line-height: 1.5;
954
+ color: var(--text-main);
955
+ }
956
+
957
+ .auth-dialog__detail {
958
+ margin-bottom: 24px;
959
+ }
960
+
961
+ .auth-dialog__steps {
962
+ margin: 0 0 24px 0;
963
+ padding-left: 20px;
964
+ color: var(--text-muted);
965
+ font-size: 13px;
966
+ display: flex;
967
+ flex-direction: column;
968
+ gap: 8px;
969
+ }
970
+
971
+ .auth-dialog__device-grid {
549
972
  display: grid;
973
+ grid-template-columns: 1fr;
974
+ gap: 20px;
975
+ margin-bottom: 24px;
976
+ }
977
+
978
+ .auth-dialog__methods {
979
+ margin: 20px 0 0;
980
+ border: 1px solid var(--border-subtle);
981
+ border-radius: 8px;
982
+ padding: 12px;
983
+ display: flex;
984
+ flex-direction: column;
550
985
  gap: 8px;
551
- border: 1px solid var(--panel-border);
552
- background: rgba(255, 255, 255, 0.65);
986
+ }
987
+
988
+ .auth-dialog__methods legend {
989
+ padding: 0 8px;
990
+ color: var(--text-muted);
991
+ font-size: 13px;
992
+ font-weight: 500;
993
+ margin-left: -4px;
994
+ }
995
+
996
+ .auth-dialog__option {
997
+ border: 1px solid var(--border-subtle);
998
+ border-radius: 6px;
553
999
  padding: 12px;
554
- border-radius: 4px;
1000
+ cursor: pointer;
1001
+ background: var(--bg-surface);
1002
+ transition: all 0.2s;
1003
+ display: flex;
1004
+ flex-direction: column;
1005
+ position: relative;
555
1006
  }
556
1007
 
557
- .hero-banner h2 {
1008
+ .auth-dialog__option:hover {
1009
+ border-color: var(--accent-primary);
1010
+ background: var(--bg-list-hover);
1011
+ }
1012
+
1013
+ .auth-dialog__option input[type="radio"] {
1014
+ position: absolute;
1015
+ top: 14px;
1016
+ left: 12px;
558
1017
  margin: 0;
559
- font-size: 18px;
1018
+ accent-color: var(--accent-primary);
1019
+ cursor: pointer;
560
1020
  }
561
1021
 
562
- .summary-list {
563
- display: grid;
564
- gap: 6px;
1022
+ .auth-dialog__option:has(input:checked) {
1023
+ border-color: var(--accent-primary);
1024
+ background: var(--bg-list-hover);
1025
+ }
1026
+
1027
+ .auth-dialog__option label {
1028
+ margin-left: 24px;
1029
+ font-weight: 500;
1030
+ color: var(--text-main);
1031
+ font-size: 14px;
1032
+ cursor: pointer;
1033
+ }
1034
+
1035
+ .auth-dialog__option-meta {
1036
+ margin-left: 24px;
565
1037
  font-size: 12px;
1038
+ margin-top: 2px;
1039
+ color: var(--text-muted);
1040
+ cursor: pointer;
566
1041
  }
567
1042
 
568
- .summary-list div {
1043
+ .auth-dialog__actions,
1044
+ .message-dialog__actions {
1045
+ display: flex;
1046
+ justify-content: flex-end;
1047
+ gap: 12px;
1048
+ padding: 16px 20px;
1049
+ border-top: 1px solid var(--border-subtle);
1050
+ background: var(--bg-panel);
1051
+ }
1052
+
1053
+ .auth-dialog__actions button,
1054
+ .message-dialog__actions button {
1055
+ padding: 8px 16px;
1056
+ border-radius: 6px;
1057
+ font-size: 14px;
1058
+ font-weight: 500;
1059
+ cursor: pointer;
1060
+ transition: all 0.2s;
1061
+ }
1062
+
1063
+ /* Secondary Button */
1064
+ .auth-dialog__actions button:not(.default),
1065
+ .message-dialog__actions button:not(.default) {
1066
+ background: transparent;
1067
+ border: 1px solid var(--border-subtle);
1068
+ color: var(--text-main);
1069
+ }
1070
+
1071
+ .auth-dialog__actions button:not(.default):hover,
1072
+ .message-dialog__actions button:not(.default):hover {
1073
+ background: var(--bg-surface);
1074
+ border-color: var(--text-muted);
1075
+ }
1076
+
1077
+ /* Primary Button */
1078
+ .auth-dialog__actions button.default,
1079
+ .message-dialog__actions button.default {
1080
+ background: var(--accent-primary) !important;
1081
+ border: 1px solid var(--accent-primary) !important;
1082
+ color: var(--accent-primary-text) !important;
1083
+ }
1084
+
1085
+ .auth-dialog__actions button.default:hover,
1086
+ .message-dialog__actions button.default:hover {
1087
+ background: var(--accent-primary-hover) !important;
1088
+ border-color: var(--accent-primary-hover) !important;
1089
+ }
1090
+
1091
+ .auth-dialog__code-value {
1092
+ font-family: monospace;
1093
+ font-size: 24px;
1094
+ letter-spacing: 4px;
1095
+ background: var(--bg-surface);
1096
+ padding: 4px 4px 4px 16px;
1097
+ border-radius: 8px;
1098
+ border: 1px solid var(--border-strong);
1099
+ color: var(--accent-primary);
569
1100
  display: flex;
570
1101
  justify-content: space-between;
1102
+ align-items: center;
1103
+ gap: 8px;
1104
+ }
1105
+
1106
+ .auth-dialog__label {
1107
+ display: block;
1108
+ font-size: 13px;
1109
+ font-weight: 500;
1110
+ color: var(--text-muted);
1111
+ margin-bottom: 8px;
1112
+ }
1113
+
1114
+ .auth-dialog__status {
1115
+ display: flex;
1116
+ flex-direction: column;
1117
+ align-items: center;
1118
+ gap: 8px;
1119
+ margin-top: 24px;
1120
+ color: var(--text-muted);
1121
+ font-size: 13px;
1122
+ text-align: center;
1123
+ }
1124
+
1125
+ .auth-dialog__status-text {
1126
+ font-weight: 600;
1127
+ color: var(--accent-primary);
1128
+ font-size: 14px;
1129
+ }
1130
+
1131
+ .url-copy-row {
1132
+ display: flex;
1133
+ gap: 8px;
1134
+ align-items: center;
1135
+ background: var(--bg-surface);
1136
+ border: 1px solid var(--border-subtle);
1137
+ border-radius: 6px;
1138
+ padding: 4px;
1139
+ }
1140
+
1141
+ .url-copy-row a {
1142
+ flex: 1;
1143
+ border: none;
1144
+ background: transparent;
1145
+ padding: 8px;
1146
+ font-family: monospace;
1147
+ font-size: 13px;
1148
+ text-decoration: none;
1149
+ min-width: 0;
1150
+ overflow: hidden;
1151
+ text-overflow: ellipsis;
1152
+ white-space: nowrap;
1153
+ color: var(--accent-primary) !important;
1154
+ transition: color 0.2s;
1155
+ }
1156
+
1157
+ .url-copy-row a:hover {
1158
+ text-decoration: underline;
1159
+ color: var(--accent-primary-hover) !important;
1160
+ }
1161
+
1162
+ .copy-btn {
1163
+ background: transparent;
1164
+ border: 1px solid var(--border-subtle);
1165
+ color: var(--text-muted);
1166
+ font-size: 12px;
1167
+ padding: 8px 12px;
1168
+ border-radius: 4px;
1169
+ cursor: pointer;
1170
+ transition: color 0.2s, border-color 0.2s, background 0.2s;
1171
+ flex-shrink: 0;
1172
+ width: 70px;
1173
+ text-align: center;
1174
+ box-sizing: border-box;
1175
+ }
1176
+
1177
+ .copy-btn:hover {
1178
+ background: var(--bg-card);
1179
+ color: var(--text-main);
1180
+ border-color: var(--text-muted);
1181
+ }
1182
+
1183
+ .copy-btn.copy-success {
1184
+ color: #10b981 !important;
1185
+ border-color: #10b981 !important;
1186
+ }
1187
+
1188
+ .auth-dialog__status-meta {
1189
+ display: flex;
1190
+ align-items: center;
1191
+ justify-content: center;
571
1192
  gap: 8px;
1193
+ margin-top: 4px;
1194
+ }
1195
+
1196
+ .status-bar {
1197
+ position: fixed;
1198
+ bottom: 0;
1199
+ left: 0;
1200
+ right: 0;
1201
+ display: flex;
1202
+ gap: 16px;
1203
+ padding: 8px 24px;
1204
+ background: var(--bg-panel);
1205
+ border-top: 1px solid var(--border-subtle);
1206
+ color: var(--text-muted);
1207
+ font-size: 12px;
1208
+ z-index: 20;
1209
+ }
1210
+
1211
+ .animate {
1212
+ animation: spin 1s linear infinite;
1213
+ }
1214
+
1215
+ @keyframes spin {
1216
+ 100% {
1217
+ transform: rotate(360deg);
1218
+ }
1219
+ }
1220
+
1221
+ /* Loading State */
1222
+ .loading-overlay {
1223
+ position: absolute;
1224
+ inset: 0;
1225
+ background: var(--bg-app);
1226
+ z-index: 15;
1227
+ display: flex;
1228
+ align-items: center;
1229
+ justify-content: center;
572
1230
  }
1231
+
1232
+ .loading-panel {
1233
+ display: flex;
1234
+ flex-direction: column;
1235
+ align-items: center;
1236
+ gap: 16px;
1237
+ color: var(--text-muted);
1238
+ font-size: 14px;
1239
+ }
1240
+
1241
+ .spinner {
1242
+ width: 24px;
1243
+ height: 24px;
1244
+ border: 2px solid var(--border-strong);
1245
+ border-top-color: var(--accent-primary);
1246
+ border-radius: 50%;
1247
+ display: block;
1248
+ }