codex-lb 0.3.0__py3-none-any.whl → 0.4.0__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,220 @@
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;
91
+ }
92
+
93
+ body[data-theme="dark"] {
94
+ color-scheme: dark;
95
+ }
96
+
97
+ body[data-theme="light"] {
98
+ color-scheme: light;
171
99
  }
172
100
 
173
101
  .app-shell {
102
+ display: flex;
103
+ flex-direction: column;
104
+ min-height: 100vh;
105
+ }
106
+
107
+ .main-header {
108
+ background: var(--bg-panel);
109
+ border-bottom: 1px solid var(--border-subtle);
110
+ position: sticky;
111
+ top: 0;
112
+ z-index: 10;
113
+ }
114
+
115
+ .header-content {
174
116
  max-width: var(--shell-max-width);
175
117
  margin: 0 auto;
118
+ padding: 16px 24px;
176
119
  display: flex;
177
- flex-direction: column;
178
- gap: var(--shell-gap);
120
+ justify-content: space-between;
121
+ align-items: center;
179
122
  }
180
123
 
181
- .window > .window-body {
182
- position: relative;
124
+ .app-logo {
125
+ font-size: 18px;
126
+ font-weight: 600;
127
+ margin: 0;
128
+ color: var(--text-main);
129
+ letter-spacing: -0.02em;
183
130
  }
184
131
 
185
- .loading-overlay {
186
- position: absolute;
187
- inset: 0;
132
+ .header-actions button {
133
+ background: transparent;
134
+ border: 1px solid var(--border-strong);
135
+ color: var(--text-muted);
136
+ cursor: pointer;
137
+ padding: 8px;
138
+ border-radius: 8px;
188
139
  display: flex;
189
140
  align-items: center;
190
141
  justify-content: center;
191
- background: rgba(248, 250, 255, 0.88);
192
- z-index: 10;
142
+ transition: all 0.2s;
193
143
  }
194
144
 
195
- .loading-panel {
145
+ .header-actions button:hover {
146
+ background: var(--bg-surface);
147
+ color: var(--text-main);
148
+ border-color: var(--text-muted);
149
+ }
150
+
151
+ .main-content {
152
+ flex: 1;
153
+ width: 100%;
154
+ max-width: var(--shell-max-width);
155
+ margin: 0 auto;
156
+ padding: 32px 24px 80px;
157
+ position: relative;
158
+ }
159
+
160
+ .tabs menu[role="tablist"] {
196
161
  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;
162
+ gap: 24px;
163
+ margin: 0 0 32px 0;
164
+ padding: 0;
165
+ list-style: none;
166
+ border-bottom: 1px solid var(--border-subtle);
167
+ }
168
+
169
+ .tabs menu[role="tablist"] button {
170
+ appearance: none;
171
+ background: transparent;
172
+ border: none;
173
+ border-bottom: 2px solid transparent;
174
+ color: var(--text-muted);
175
+ font-family: inherit;
176
+ font-size: 14px;
177
+ font-weight: 500;
178
+ padding: 0 0 12px 0;
179
+ cursor: pointer;
180
+ transition: all 0.2s;
206
181
  }
207
182
 
208
- .loading-panel .spinner {
209
- width: 22px;
210
- height: 22px;
183
+ .tabs menu[role="tablist"] button:hover {
184
+ color: var(--text-main);
211
185
  }
212
186
 
187
+ .tabs menu[role="tablist"] button[aria-selected="true"] {
188
+ color: var(--accent-primary);
189
+ border-bottom-color: var(--accent-primary);
190
+ }
213
191
 
214
192
  .section-grid {
215
193
  display: grid;
216
- gap: 12px;
217
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
194
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
195
+ gap: 24px;
196
+ margin-top: 24px;
218
197
  }
219
198
 
220
199
  .two-column {
221
200
  display: grid;
222
- gap: 16px;
223
- grid-template-columns: minmax(0, 2fr) minmax(260px, 1fr);
201
+ grid-template-columns: 1fr 380px;
202
+ gap: 24px;
203
+ margin-top: 24px;
204
+ }
205
+
206
+ @media (max-width: 900px) {
207
+ .two-column {
208
+ grid-template-columns: 1fr;
209
+ }
224
210
  }
225
211
 
226
212
  .two-column--equal {
227
- grid-template-columns: repeat(2, minmax(0, 1fr));
213
+ grid-template-columns: 1fr 1fr;
228
214
  }
229
215
 
230
- @media (max-width: 900px) {
231
- .two-column {
216
+ @media (max-width: 768px) {
217
+ .two-column--equal {
232
218
  grid-template-columns: 1fr;
233
219
  }
234
220
  }
235
221
 
236
222
  .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);
223
+ background: var(--bg-card);
224
+ border: 1px solid var(--border-subtle);
225
+ border-radius: 12px;
226
+ padding: 24px;
227
+ box-shadow: var(--shadow-sm);
242
228
  }
243
229
 
244
230
  .panel h3 {
245
- margin: 0 0 6px;
231
+ margin: 0 0 16px 0;
246
232
  font-size: 14px;
233
+ font-weight: 600;
234
+ color: var(--text-muted);
235
+ text-transform: uppercase;
236
+ letter-spacing: 0.05em;
237
+ }
238
+
239
+ .hero-banner {
240
+ background: linear-gradient(to right bottom, var(--bg-card), var(--bg-surface));
241
+ border: 1px solid var(--border-subtle);
242
+ border-radius: 12px;
243
+ padding: 32px;
244
+ margin-bottom: 32px;
245
+ }
246
+
247
+ .hero-banner h2 {
248
+ font-size: 24px;
249
+ font-weight: 600;
250
+ margin: 0 0 12px 0;
251
+ color: var(--text-main);
252
+ letter-spacing: -0.02em;
247
253
  }
248
254
 
255
+ .hero-banner p {
256
+ color: var(--text-muted);
257
+ margin: 0 0 24px 0;
258
+ line-height: 1.6;
259
+ max-width: 600px;
260
+ }
249
261
 
250
262
  .stat-value {
251
- margin-top: 4px;
252
- font-size: 22px;
253
- font-weight: 600;
263
+ font-size: 32px;
264
+ font-weight: 700;
265
+ color: var(--text-main);
266
+ margin-bottom: 4px;
267
+ letter-spacing: -0.02em;
254
268
  }
255
269
 
256
270
  .stat-meta {
257
- color: #555;
258
- font-size: 12px;
271
+ color: var(--text-muted);
272
+ font-size: 14px;
259
273
  }
260
274
 
261
275
  .donut-wrap {
262
276
  display: flex;
263
277
  align-items: center;
264
- gap: 16px;
278
+ gap: 32px;
279
+ justify-content: center;
265
280
  flex-wrap: wrap;
266
- margin-top: 10px;
267
281
  }
268
282
 
269
283
  .donut {
270
284
  width: 140px;
271
285
  height: 140px;
272
286
  border-radius: 50%;
273
- background: var(--donut-data, #d3d3d3);
287
+ background: var(--donut-data, var(--donut-empty));
274
288
  position: relative;
289
+ flex-shrink: 0;
275
290
  }
276
291
 
277
292
  .donut::after {
278
293
  content: "";
279
294
  position: absolute;
280
- inset: 18px;
281
- background: #fdfdfd;
295
+ inset: 24px;
296
+ background: var(--bg-card);
282
297
  border-radius: 50%;
283
- box-shadow: inset 0 0 0 1px #c7c7c7;
284
298
  }
285
299
 
286
300
  .donut-center {
@@ -289,284 +303,1323 @@ body {
289
303
  left: 50%;
290
304
  transform: translate(-50%, -50%);
291
305
  text-align: center;
306
+ z-index: 2;
307
+ }
308
+
309
+ .donut-center strong {
310
+ display: block;
311
+ font-size: 16px;
312
+ color: var(--text-main);
313
+ }
314
+
315
+ .donut-center div {
292
316
  font-size: 12px;
293
- color: #333;
294
- z-index: 1;
317
+ color: var(--text-muted);
295
318
  }
296
319
 
297
320
  .legend {
298
- display: grid;
299
- gap: 6px;
300
- padding: 0;
301
321
  list-style: none;
322
+ padding: 0;
323
+ margin: 0;
302
324
  flex: 1;
303
325
  min-width: 0;
304
326
  }
305
327
 
306
328
  .legend li {
307
- display: grid;
308
- grid-template-columns: minmax(0, 1fr) 120px;
329
+ display: flex;
330
+ justify-content: space-between;
309
331
  align-items: center;
310
- gap: 8px;
311
- font-size: 12px;
312
- width: 100%;
332
+ padding: 8px 0;
333
+ border-bottom: 1px solid var(--border-subtle);
334
+ font-size: 13px;
335
+ gap: 12px;
336
+ }
337
+
338
+ .legend li:last-child {
339
+ border-bottom: none;
313
340
  }
314
341
 
315
342
  .legend-label {
316
343
  display: flex;
317
344
  align-items: center;
318
- gap: 6px;
345
+ gap: 8px;
346
+ color: var(--text-main);
319
347
  min-width: 0;
348
+ flex: 1;
320
349
  }
321
350
 
322
351
  .legend-label-text {
323
- flex: 1 1 auto;
324
352
  min-width: 0;
325
353
  overflow: hidden;
326
354
  text-overflow: ellipsis;
327
355
  white-space: nowrap;
328
356
  }
329
357
 
330
- .legend-detail {
331
- white-space: nowrap;
332
- display: flex;
333
- align-items: baseline;
334
- justify-content: space-between;
335
- gap: 6px;
358
+ .legend i {
359
+ width: 8px;
360
+ height: 8px;
361
+ border-radius: 50%;
362
+ background: var(--legend-color, #888);
336
363
  }
337
364
 
338
- .legend-detail-label {
339
- min-width: 0;
365
+ .legend-detail {
366
+ display: flex;
367
+ gap: 12px;
340
368
  }
341
369
 
342
370
  .legend-detail-value {
371
+ font-family: monospace;
372
+ color: var(--text-main);
343
373
  min-width: 4ch;
344
374
  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
- }
379
-
380
- .account-card header > div {
381
- flex: 1 1 auto;
382
- min-width: 0;
383
375
  }
384
376
 
385
- .account-card header > div > div {
386
- overflow: hidden;
387
- text-overflow: ellipsis;
388
- white-space: nowrap;
377
+ .text-success,
378
+ .legend-detail-value.success {
379
+ color: var(--status-active-text);
389
380
  }
390
381
 
391
- .account-card .account-id {
392
- font-size: 12px;
393
- color: #666;
382
+ .text-limited,
383
+ .legend-detail-value.limited {
384
+ color: var(--status-warning-text);
394
385
  }
395
386
 
396
- .account-card .account-actions {
397
- display: flex;
398
- gap: 6px;
399
- flex-wrap: wrap;
400
- margin-top: 8px;
387
+ .text-error,
388
+ .legend-detail-value.error {
389
+ color: var(--status-error-text);
401
390
  }
402
391
 
403
392
  .status-pill {
404
393
  display: inline-flex;
405
394
  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;
395
+ padding: 4px 10px;
396
+ border-radius: 9999px;
397
+ font-size: 12px;
398
+ font-weight: 500;
399
+ background: var(--bg-surface);
400
+ color: var(--text-muted);
401
+ line-height: 1;
414
402
  white-space: nowrap;
415
- flex-shrink: 0;
416
- color: #222;
417
- background: var(--w7-el-grad);
418
- text-shadow: 0 1px 0 #fff;
419
403
  }
420
404
 
421
405
  .status-pill.active {
422
- background: linear-gradient(#f4fff6 45%, #dff3e4 45%, #c7e6d0);
423
- border-color: #7fab86;
424
- color: #1f5b2c;
406
+ background: var(--status-active-bg);
407
+ color: var(--status-active-text);
408
+ }
409
+
410
+ .status-pill.ok {
411
+ background: var(--status-active-bg);
412
+ color: var(--status-active-text);
425
413
  }
426
414
 
427
415
  .status-pill.limited {
428
- background: linear-gradient(#fff8e7 45%, #f9e3b9 45%, #e5c981);
429
- border-color: #c4973b;
430
- color: #7c4f13;
416
+ background: var(--status-warning-bg);
417
+ color: var(--status-warning-text);
431
418
  }
432
419
 
433
- .status-pill.paused {
434
- background: linear-gradient(#f0f7ff 45%, #d6e6fb 45%, #bdd7f6);
435
- border-color: #6f92c9;
436
- color: #2b4a7a;
420
+ .status-pill.rate_limit {
421
+ background: var(--status-warning-bg);
422
+ color: var(--status-warning-text);
437
423
  }
438
424
 
439
425
  .status-pill.exceeded {
440
- background: linear-gradient(#ffefed 45%, #f5d0cb 45%, #e2a59c);
441
- border-color: #b45d58;
442
- color: #7a2f2c;
426
+ background: var(--status-error-bg);
427
+ color: var(--status-error-text);
443
428
  }
444
429
 
445
- .status-pill.deactivated {
446
- background: linear-gradient(#f7f7f7 45%, #e7e7e7 45%, #d2d2d2);
447
- border-color: #9b9b9b;
448
- color: #5a5a5a;
430
+ .status-pill.quota {
431
+ background: var(--status-error-bg);
432
+ color: var(--status-error-text);
449
433
  }
450
434
 
451
- .progress-row {
452
- display: flex;
453
- align-items: center;
454
- gap: 2px;
435
+ .status-pill.error {
436
+ background: var(--status-error-bg);
437
+ color: var(--status-error-text);
455
438
  }
456
439
 
457
- .progress-row label {
458
- min-width: 60px;
459
- font-size: 12px;
460
- margin-right: 10px;
440
+ .status-pill.deactivated,
441
+ .status-pill.paused {
442
+ background: var(--status-paused-bg);
443
+ color: var(--status-paused-text);
461
444
  }
462
445
 
463
- .progress-row [role="progressbar"] {
464
- flex: 1;
446
+ .badge-row {
447
+ display: flex;
448
+ gap: 8px;
449
+ flex-wrap: wrap;
465
450
  }
466
451
 
467
- .progress-row .text-muted {
468
- flex: 0 0 36px;
469
- text-align: right;
452
+ .account-grid {
453
+ display: grid;
454
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
455
+ gap: 16px;
456
+ margin-top: 16px;
470
457
  }
471
458
 
472
- #tab-accounts .account-list-panel {
459
+ .account-card {
460
+ background: var(--bg-card);
461
+ border: 1px solid var(--border-subtle);
462
+ border-radius: 12px;
463
+ padding: 20px;
473
464
  display: flex;
474
465
  flex-direction: column;
466
+ gap: 16px;
467
+ transition: transform 0.2s, box-shadow 0.2s;
475
468
  }
476
469
 
477
- #tab-accounts .account-list-panel .table-wrap {
478
- flex: 1;
479
- min-height: 0;
480
- }
481
-
482
- #tab-accounts .account-list-panel .table-wrap--column-lines {
483
- --w7-table-cols: 6;
470
+ .account-card:hover {
471
+ transform: translateY(-2px);
472
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -2px rgba(0, 0, 0, 0.3);
473
+ border-color: var(--accent-primary);
474
+ background: var(--bg-surface);
484
475
  }
485
476
 
486
- .table-wrap--requests {
487
- --w7-table-cols: 7;
488
- height: 220px;
477
+ .account-card header {
478
+ display: flex;
479
+ justify-content: space-between;
480
+ align-items: flex-start;
481
+ gap: 12px;
489
482
  }
490
483
 
491
- table {
492
- width: 100%;
484
+ .account-card header>div {
485
+ flex: 1;
486
+ min-width: 0;
487
+ padding-right: 8px;
488
+ }
489
+
490
+ .account-card header .status-pill {
491
+ flex-shrink: 0;
492
+ }
493
+
494
+ .account-card header>div>div:first-child {
495
+ font-weight: 500;
496
+ font-size: 15px;
497
+ color: var(--text-main);
498
+ white-space: nowrap;
499
+ overflow: hidden;
500
+ text-overflow: ellipsis;
501
+ }
502
+
503
+ .account-card .account-id {
504
+ font-size: 12px;
505
+ color: var(--text-muted);
506
+ font-family: monospace;
507
+ margin-top: 4px;
508
+ }
509
+
510
+ .progress-row {
511
+ display: flex;
512
+ flex-direction: column;
513
+ gap: 6px;
514
+ }
515
+
516
+ .progress-row+.progress-row {
517
+ margin-top: 24px;
518
+ }
519
+
520
+ .progress-row label {
521
+ font-size: 13px;
522
+ color: var(--text-muted);
523
+ display: flex;
524
+ justify-content: space-between;
525
+ }
526
+
527
+ [role="progressbar"] {
528
+ height: 6px;
529
+ background: var(--border-strong);
530
+ border-radius: 99px;
531
+ overflow: hidden;
532
+ position: relative;
533
+ }
534
+
535
+ [role="progressbar"] div {
536
+ height: 100%;
537
+ background: var(--accent-primary);
538
+ border-radius: 99px;
539
+ }
540
+
541
+ [role="progressbar"].limited div {
542
+ background: var(--status-warning-text);
543
+ }
544
+
545
+ [role="progressbar"].error div {
546
+ background: var(--status-error-text);
547
+ }
548
+
549
+ [role="progressbar"].success div {
550
+ background: var(--status-active-text);
493
551
  }
494
552
 
553
+ .account-actions {
554
+ display: flex;
555
+ gap: 8px;
556
+ margin-top: auto;
557
+ padding-top: 8px;
558
+ }
559
+
560
+ .account-actions button {
561
+ font-size: 12px;
562
+ padding: 6px 10px;
563
+ border-radius: 6px;
564
+ border: 1px solid var(--accent-primary);
565
+ background: var(--accent-primary);
566
+ color: var(--accent-primary-text);
567
+ cursor: pointer;
568
+ font-weight: 500;
569
+ transition: background 0.2s;
570
+ }
571
+
572
+ .account-actions button:hover {
573
+ background: var(--accent-primary-hover);
574
+ border-color: var(--accent-primary-hover);
575
+ }
576
+
577
+
578
+
495
579
  .inline-actions {
496
580
  display: flex;
497
581
  gap: 8px;
582
+ }
583
+
584
+ .inline-actions button {
585
+ font-size: 13px;
586
+ padding: 8px 12px;
587
+ border-radius: 6px;
588
+ border: 1px solid var(--accent-primary);
589
+ background: var(--accent-primary);
590
+ color: var(--accent-primary-text);
591
+ cursor: pointer;
592
+ font-weight: 500;
593
+ transition: all 0.2s;
594
+ }
595
+
596
+ .inline-actions button:hover {
597
+ border-color: var(--accent-primary-hover);
598
+ background: var(--accent-primary-hover);
599
+ }
600
+
601
+ .controls-toolbar {
602
+ display: flex;
498
603
  flex-wrap: wrap;
604
+ gap: 12px;
605
+ margin-bottom: 16px;
606
+ align-items: center;
607
+ justify-content: space-between;
499
608
  }
500
609
 
501
- .badge-row {
610
+ .controls-group {
502
611
  display: flex;
503
- gap: 8px;
504
612
  flex-wrap: wrap;
613
+ gap: 8px;
614
+ align-items: center;
505
615
  }
506
616
 
507
- .text-muted {
508
- color: #666;
509
- font-size: 12px;
617
+ .filter-input {
618
+ background: var(--bg-surface);
619
+ border: 1px solid var(--border-subtle);
620
+ color: var(--text-main);
621
+ padding: 8px 12px;
622
+ border-radius: 6px;
623
+ font-size: 13px;
624
+ outline: none;
625
+ min-width: 120px;
510
626
  }
511
627
 
512
- .split-stack {
513
- display: grid;
628
+ .filter-input:focus {
629
+ border-color: var(--accent-primary);
630
+ }
631
+
632
+ .filter-select {
633
+ background: var(--bg-surface);
634
+ border: 1px solid var(--border-subtle);
635
+ color: var(--text-main);
636
+ padding: 8px 32px 8px 12px;
637
+ border-radius: 6px;
638
+ font-size: 13px;
639
+ outline: none;
640
+ -webkit-appearance: none;
641
+ appearance: none;
642
+ background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%2358A6FF%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");
643
+ background-repeat: no-repeat;
644
+ background-position: right 10px top 50%;
645
+ background-size: 10px auto;
646
+ }
647
+
648
+ .filter-select[multiple] {
649
+ padding-right: 12px;
650
+ background-image: none;
651
+ }
652
+
653
+ .filter-select option {
654
+ background: var(--bg-surface);
655
+ color: var(--text-main);
656
+ }
657
+
658
+ .single-select {
659
+ position: relative;
660
+ }
661
+
662
+ .single-select-trigger {
663
+ display: inline-flex;
664
+ align-items: center;
665
+ justify-content: space-between;
514
666
  gap: 12px;
667
+ min-width: 120px;
668
+ cursor: pointer;
669
+ position: relative;
670
+ background-image: none;
515
671
  }
516
672
 
517
- .list-actions {
673
+ .single-select-trigger::after {
674
+ content: "";
675
+ position: absolute;
676
+ right: 10px;
677
+ top: 50%;
678
+ width: 10px;
679
+ height: 10px;
680
+ background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%2358A6FF%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");
681
+ background-repeat: no-repeat;
682
+ background-size: contain;
683
+ transform: translateY(-50%) rotate(0deg);
684
+ transition: transform 0.25s ease;
685
+ }
686
+
687
+ .single-select-trigger[aria-expanded="true"] {
688
+ border-color: var(--accent-primary);
689
+ box-shadow: 0 0 0 1px var(--accent-primary);
690
+ }
691
+
692
+ .single-select-trigger[aria-expanded="true"]::after {
693
+ transform: translateY(-50%) rotate(180deg);
694
+ }
695
+
696
+ .single-select-menu {
697
+ position: absolute;
698
+ top: calc(100% + 8px);
699
+ left: 0;
700
+ z-index: 50;
701
+ width: max-content;
702
+ min-width: 140px;
703
+ padding: 8px;
704
+ padding-top: 12px;
705
+ border-radius: 10px;
706
+ border: 1px solid var(--border-subtle);
707
+ background: var(--bg-panel);
708
+ box-shadow: var(--shadow-md);
709
+ }
710
+
711
+ .single-select-menu::before {
712
+ content: "";
713
+ position: absolute;
714
+ top: -6px;
715
+ left: 16px;
716
+ width: 10px;
717
+ height: 10px;
718
+ background: var(--bg-panel);
719
+ border-left: 1px solid var(--border-subtle);
720
+ border-top: 1px solid var(--border-subtle);
721
+ transform: rotate(45deg);
722
+ }
723
+
724
+ .single-select-item {
518
725
  display: flex;
519
- gap: 8px;
520
726
  align-items: center;
521
- flex-wrap: wrap;
522
- margin-bottom: 8px;
727
+ gap: 10px;
728
+ padding: 8px 10px;
729
+ border-radius: 8px;
730
+ cursor: pointer;
731
+ user-select: none;
732
+ color: var(--text-main);
733
+ font-size: 13px;
523
734
  }
524
735
 
525
- .list-actions label[role="button"] {
736
+ .single-select-item:hover {
737
+ background: var(--bg-list-hover);
738
+ }
739
+
740
+ .single-select-item.is-selected {
741
+ background: var(--bg-list-selected);
742
+ }
743
+
744
+ .single-select-item input[type="radio"] {
745
+ display: none;
746
+ }
747
+
748
+ .multi-select {
749
+ position: relative;
750
+ }
751
+
752
+ .multi-select-trigger {
753
+ display: inline-flex;
754
+ align-items: center;
755
+ justify-content: space-between;
756
+ gap: 12px;
757
+ min-width: 180px;
758
+ cursor: pointer;
526
759
  position: relative;
760
+ background-image: none;
761
+ }
762
+
763
+ .multi-select-trigger::after {
764
+ content: "";
765
+ position: absolute;
766
+ right: 10px;
767
+ top: 50%;
768
+ width: 10px;
769
+ height: 10px;
770
+ background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%2358A6FF%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");
771
+ background-repeat: no-repeat;
772
+ background-size: contain;
773
+ transform: translateY(-50%) rotate(0deg);
774
+ transition: transform 0.25s ease;
775
+ }
776
+
777
+ .multi-select-trigger:disabled {
778
+ opacity: 0.7;
779
+ cursor: not-allowed;
780
+ }
781
+
782
+ .multi-select-trigger[aria-expanded="true"] {
783
+ border-color: var(--accent-primary);
784
+ box-shadow: 0 0 0 1px var(--accent-primary);
785
+ }
786
+
787
+ .multi-select-trigger[aria-expanded="true"]::after {
788
+ transform: translateY(-50%) rotate(180deg);
789
+ }
790
+
791
+
792
+ .multi-select-menu {
793
+ position: absolute;
794
+ top: calc(100% + 8px);
795
+ left: 0;
796
+ z-index: 50;
797
+ width: max-content;
798
+ min-width: 220px;
799
+ max-width: 360px;
800
+ padding: 8px;
801
+ padding-top: 12px;
802
+ border-radius: 10px;
803
+ border: 1px solid var(--border-subtle);
804
+ background: var(--bg-panel);
805
+ box-shadow: var(--shadow-md);
806
+ overflow: visible;
807
+ }
808
+
809
+ .multi-select-scroller {
810
+ max-height: 280px;
811
+ overflow-y: auto;
812
+ overflow-x: hidden;
813
+ /* Add padding to ensure scrollbar doesn't overlap content tightly if needed,
814
+ but we removed padding from parent. Wait, parent has padding 8px.
815
+ The scroller is inside. */
816
+ }
817
+
818
+ .multi-select-menu::before {
819
+ content: "";
820
+ position: absolute;
821
+ top: -6px;
822
+ left: 16px;
823
+ width: 10px;
824
+ height: 10px;
825
+ background: var(--bg-panel);
826
+ border-left: 1px solid var(--border-subtle);
827
+ border-top: 1px solid var(--border-subtle);
828
+ transform: rotate(45deg);
829
+ }
830
+
831
+ .multi-select-actions {
832
+ display: flex;
833
+ justify-content: flex-end;
834
+ margin-bottom: 6px;
835
+ }
836
+
837
+ .multi-select-action {
838
+ background: transparent;
839
+ border: 1px solid var(--border-subtle);
840
+ color: var(--text-muted);
841
+ padding: 6px 10px;
842
+ border-radius: 8px;
843
+ font-size: 12px;
844
+ cursor: pointer;
845
+ }
846
+
847
+ .multi-select-action:hover {
848
+ border-color: var(--border-strong);
849
+ color: var(--text-main);
850
+ }
851
+
852
+ .multi-select-item {
853
+ display: flex;
854
+ align-items: center;
855
+ gap: 10px;
856
+ padding: 8px 10px;
857
+ border-radius: 8px;
858
+ cursor: pointer;
859
+ user-select: none;
860
+ }
861
+
862
+ .multi-select-item:hover {
863
+ background: var(--bg-list-hover);
864
+ }
865
+
866
+ .multi-select-item input[type="checkbox"] {
867
+ accent-color: var(--accent-primary);
868
+ }
869
+
870
+ .multi-select-label {
871
+ color: var(--text-main);
872
+ font-size: 13px;
873
+ white-space: nowrap;
527
874
  overflow: hidden;
875
+ text-overflow: ellipsis;
876
+ max-width: 280px;
877
+ }
878
+
879
+ .filter-apply {
880
+ font-size: 13px;
881
+ padding: 8px 12px;
882
+ border-radius: 6px;
883
+ border: 1px solid var(--accent-primary);
884
+ background: var(--accent-primary);
885
+ color: var(--accent-primary-text);
886
+ cursor: pointer;
887
+ font-weight: 500;
888
+ transition: all 0.2s;
889
+ }
890
+
891
+ .filter-apply:hover {
892
+ border-color: var(--accent-primary-hover);
893
+ background: var(--accent-primary-hover);
528
894
  }
529
895
 
530
- .list-actions label[role="button"].is-disabled {
896
+ .filter-apply:disabled {
531
897
  opacity: 0.6;
532
- pointer-events: none;
898
+ cursor: not-allowed;
533
899
  }
534
900
 
535
- .list-actions label[role="button"] > input[type="file"].file-input {
536
- position: absolute;
537
- inset: 0;
538
- display: block;
539
- border: 0;
540
- margin: 0;
541
- padding: 0;
901
+ .table-wrap {
542
902
  width: 100%;
543
- height: 100%;
544
- opacity: 0;
545
- cursor: pointer;
903
+ overflow-x: auto;
904
+ border: 1px solid var(--border-subtle);
905
+ border-radius: 8px;
546
906
  }
547
907
 
548
- .hero-banner {
549
- display: grid;
550
- gap: 8px;
551
- border: 1px solid var(--panel-border);
552
- background: rgba(255, 255, 255, 0.65);
553
- padding: 12px;
554
- border-radius: 4px;
908
+ .table-wrap--requests th,
909
+ .table-wrap--requests td {
910
+ text-align: center;
555
911
  }
556
912
 
557
- .hero-banner h2 {
558
- margin: 0;
559
- font-size: 18px;
913
+ .table-wrap--requests td:nth-child(2),
914
+ .table-wrap--requests td:nth-child(5) {
915
+ text-align: left;
560
916
  }
561
917
 
562
- .summary-list {
563
- display: grid;
564
- gap: 6px;
565
- font-size: 12px;
918
+
919
+
920
+ table {
921
+ width: 100%;
922
+ border-collapse: collapse;
923
+ font-size: 14px;
924
+ text-align: left;
925
+ table-layout: fixed;
926
+ }
927
+
928
+ .cell-truncate {
929
+ white-space: nowrap;
930
+ overflow: hidden;
931
+ text-overflow: ellipsis;
566
932
  }
567
933
 
568
- .summary-list div {
934
+ .error-cell {
569
935
  display: flex;
570
- justify-content: space-between;
571
- gap: 8px;
936
+ align-items: flex-start;
937
+ gap: 6px;
938
+ min-width: 0;
939
+ }
940
+
941
+ .error-cell.placeholder {
942
+ justify-content: center;
943
+ }
944
+
945
+ .error-cell.placeholder .error-text {
946
+ text-align: center;
947
+ }
948
+
949
+ .error-text {
950
+ flex: 1;
951
+ min-width: 0;
952
+ }
953
+
954
+ .error-text.truncated {
955
+ white-space: nowrap;
956
+ overflow: hidden;
957
+ text-overflow: ellipsis;
958
+ }
959
+
960
+ .cell-error {
961
+ vertical-align: middle;
962
+ }
963
+
964
+ .error-toggle {
965
+ background: transparent;
966
+ border: none;
967
+ color: var(--accent-primary);
968
+ font-size: 11px;
969
+ padding: 0;
970
+ cursor: pointer;
971
+ white-space: nowrap;
972
+ margin-top: 3px;
973
+ font-weight: 500;
974
+ line-height: 1.2;
975
+ min-width: 32px;
976
+ text-align: left;
977
+ flex-shrink: 0;
978
+ }
979
+
980
+ .error-toggle:hover {
981
+ text-decoration: underline;
572
982
  }
983
+
984
+ /* ... existing styles ... */
985
+
986
+ .list-actions .searchbox button {
987
+ background: transparent;
988
+ color: var(--text-muted);
989
+ border: none;
990
+ padding: 0;
991
+ right: 8px;
992
+ width: auto;
993
+ }
994
+
995
+ .list-actions .searchbox button:hover {
996
+ background: transparent;
997
+ }
998
+
999
+ /* ... existing styles ... */
1000
+
1001
+ .summary-list strong {
1002
+ color: var(--text-main);
1003
+ font-weight: 500;
1004
+ white-space: nowrap;
1005
+ overflow: hidden;
1006
+ text-overflow: ellipsis;
1007
+ max-width: 60%;
1008
+ text-align: right;
1009
+ }
1010
+
1011
+ th {
1012
+ background: var(--bg-surface);
1013
+ padding: 12px 20px;
1014
+ font-weight: 600;
1015
+ color: var(--text-muted);
1016
+ font-size: 12px;
1017
+ text-transform: uppercase;
1018
+ border-bottom: 1px solid var(--border-subtle);
1019
+ vertical-align: middle;
1020
+ }
1021
+
1022
+ td {
1023
+ padding: 12px 20px;
1024
+ border-bottom: 1px solid var(--border-subtle);
1025
+ color: var(--text-main);
1026
+ vertical-align: middle;
1027
+ }
1028
+
1029
+ tr:last-child td {
1030
+ border-bottom: none;
1031
+ }
1032
+
1033
+ tr {
1034
+ transition: background-color 0.15s;
1035
+ }
1036
+
1037
+ tr:hover td {
1038
+ background: var(--bg-list-hover);
1039
+ color: var(--text-main);
1040
+ }
1041
+
1042
+ tr:hover td.text-success {
1043
+ color: var(--status-active-text);
1044
+ }
1045
+
1046
+ tr:hover td.text-limited {
1047
+ color: var(--status-warning-text);
1048
+ }
1049
+
1050
+ tr:hover td.text-error {
1051
+ color: var(--status-error-text);
1052
+ }
1053
+
1054
+ tr:hover {
1055
+ outline: none;
1056
+ }
1057
+
1058
+ tr.highlighted td {
1059
+ background: var(--bg-list-selected);
1060
+ border-bottom-color: var(--border-subtle);
1061
+ }
1062
+
1063
+ tr.highlighted td:first-child {
1064
+ box-shadow: inset 3px 0 0 var(--accent-primary);
1065
+ }
1066
+
1067
+ input[type="text"],
1068
+ input[type="search"],
1069
+ input[type="file"] {
1070
+ background: var(--bg-surface);
1071
+ border: 1px solid var(--border-strong);
1072
+ color: var(--text-main);
1073
+ padding: 8px 12px;
1074
+ border-radius: 6px;
1075
+ font-family: inherit;
1076
+ font-size: 14px;
1077
+ outline: none;
1078
+ transition: border-color 0.2s;
1079
+ width: 100%;
1080
+ }
1081
+
1082
+ input:focus {
1083
+ border-color: var(--accent-primary);
1084
+ }
1085
+
1086
+ .list-actions {
1087
+ display: flex;
1088
+ gap: 12px;
1089
+ align-items: center;
1090
+ margin-bottom: 16px;
1091
+ }
1092
+
1093
+ .searchbox {
1094
+ flex: 1;
1095
+ max-width: 320px;
1096
+ position: relative;
1097
+ }
1098
+
1099
+ .searchbox button {
1100
+ position: absolute;
1101
+ right: 8px;
1102
+ top: 50%;
1103
+ transform: translateY(-50%);
1104
+ background: transparent;
1105
+ border: none;
1106
+ color: var(--text-muted);
1107
+ cursor: pointer;
1108
+ }
1109
+
1110
+ button {
1111
+ font-family: inherit;
1112
+ }
1113
+
1114
+ .list-actions button,
1115
+ .dialog-actions button {
1116
+ background: var(--accent-primary);
1117
+ color: var(--accent-primary-text);
1118
+ border: none;
1119
+ padding: 8px 16px;
1120
+ border-radius: 6px;
1121
+ font-size: 14px;
1122
+ font-weight: 500;
1123
+ cursor: pointer;
1124
+ transition: background 0.2s;
1125
+ }
1126
+
1127
+ .list-actions button:hover {
1128
+ background: var(--accent-primary-hover);
1129
+ }
1130
+
1131
+ .list-actions label[role="button"] {
1132
+ display: inline-block;
1133
+ padding: 8px 16px;
1134
+ border: 1px solid var(--accent-primary);
1135
+ border-radius: 6px;
1136
+ font-size: 14px;
1137
+ font-weight: 500;
1138
+ cursor: pointer;
1139
+ color: var(--accent-primary-text);
1140
+ position: relative;
1141
+ background: var(--accent-primary);
1142
+ transition: background 0.2s;
1143
+ }
1144
+
1145
+ .list-actions label[role="button"] input {
1146
+ position: absolute;
1147
+ opacity: 0;
1148
+ width: 0;
1149
+ }
1150
+
1151
+ .list-actions label[role="button"]:hover {
1152
+ background: var(--accent-primary-hover);
1153
+ border-color: var(--accent-primary-hover);
1154
+ }
1155
+
1156
+ .dialog-backdrop {
1157
+ position: fixed;
1158
+ inset: 0;
1159
+ background: rgba(0, 0, 0, 0.6);
1160
+ backdrop-filter: blur(4px);
1161
+ z-index: 50;
1162
+ opacity: 0;
1163
+ pointer-events: none;
1164
+ transition: opacity 0.2s;
1165
+ }
1166
+
1167
+ .dialog-backdrop.is-open {
1168
+ opacity: 1;
1169
+ pointer-events: auto;
1170
+ }
1171
+
1172
+ .window.message-dialog,
1173
+ .window.auth-dialog {
1174
+ position: fixed;
1175
+ top: 50%;
1176
+ left: 50%;
1177
+ transform: translate(-50%, -50%) scale(0.95);
1178
+ width: 90%;
1179
+ max-width: 480px;
1180
+ background: var(--bg-panel);
1181
+ z-index: 51;
1182
+ opacity: 0;
1183
+ pointer-events: none;
1184
+ transition: all 0.2s;
1185
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.4);
1186
+ border: 1px solid var(--border-subtle);
1187
+ border-radius: 12px;
1188
+ overflow: hidden;
1189
+ /* Ensure children don't bleed out */
1190
+ }
1191
+
1192
+ /* Title Bar - Common for all dialogs */
1193
+ .title-bar {
1194
+ display: flex;
1195
+ justify-content: space-between;
1196
+ align-items: center;
1197
+ padding: 16px 20px;
1198
+ border-bottom: 1px solid var(--border-subtle);
1199
+ background: var(--bg-panel);
1200
+ }
1201
+
1202
+ .title-bar-text {
1203
+ font-weight: 600;
1204
+ font-size: 16px;
1205
+ color: var(--text-main);
1206
+ }
1207
+
1208
+ .title-bar-controls button {
1209
+ width: 28px;
1210
+ height: 28px;
1211
+ background: transparent;
1212
+ border: none;
1213
+ color: var(--text-muted);
1214
+ cursor: pointer;
1215
+ position: relative;
1216
+ border-radius: 4px;
1217
+ transition: all 0.2s;
1218
+ }
1219
+
1220
+ .title-bar-controls button:hover {
1221
+ background: var(--bg-surface);
1222
+ color: var(--text-main);
1223
+ }
1224
+
1225
+ .title-bar-controls button::before,
1226
+ .title-bar-controls button::after {
1227
+ content: '';
1228
+ position: absolute;
1229
+ top: 50%;
1230
+ left: 50%;
1231
+ width: 14px;
1232
+ height: 1.5px;
1233
+ background: currentColor;
1234
+ transform: translate(-50%, -50%) rotate(45deg);
1235
+ }
1236
+
1237
+ .title-bar-controls button::after {
1238
+ transform: translate(-50%, -50%) rotate(-45deg);
1239
+ }
1240
+
1241
+ .window.is-open {
1242
+ opacity: 1;
1243
+ pointer-events: auto;
1244
+ transform: translate(-50%, -50%) scale(1);
1245
+ }
1246
+
1247
+ .window-body {
1248
+ padding: 20px;
1249
+ }
1250
+
1251
+ .text-muted {
1252
+ color: var(--text-muted);
1253
+ font-size: 13px;
1254
+ }
1255
+
1256
+ .summary-list>div {
1257
+ display: flex;
1258
+ justify-content: space-between;
1259
+ padding: 10px 0;
1260
+ border-bottom: 1px solid var(--border-subtle);
1261
+ font-size: 14px;
1262
+ }
1263
+
1264
+ .summary-list span {
1265
+ color: var(--text-muted);
1266
+ }
1267
+
1268
+ .summary-list strong {
1269
+ color: var(--text-main);
1270
+ font-weight: 500;
1271
+ }
1272
+
1273
+ .settings-fieldset {
1274
+ margin-top: 12px;
1275
+ border: 1px solid var(--border-strong);
1276
+ border-radius: 8px;
1277
+ padding: 16px;
1278
+ }
1279
+
1280
+ .settings-fieldset legend {
1281
+ padding: 0 8px;
1282
+ color: var(--text-muted);
1283
+ font-size: 13px;
1284
+ font-weight: 500;
1285
+ margin-left: -4px;
1286
+ }
1287
+
1288
+ .settings-fieldset label {
1289
+ font-size: 14px;
1290
+ color: var(--text-main);
1291
+ }
1292
+
1293
+ .settings-fieldset input[type="checkbox"] {
1294
+ accent-color: var(--accent-primary);
1295
+ margin-right: 8px;
1296
+ }
1297
+
1298
+ .settings-fieldset .text-muted {
1299
+ margin-top: 6px;
1300
+ margin-left: 22px;
1301
+ }
1302
+
1303
+ .token-fieldset {
1304
+ margin-top: 24px;
1305
+ border: 1px solid var(--border-strong);
1306
+ border-radius: 8px;
1307
+ padding: 0 16px;
1308
+ }
1309
+
1310
+ .token-fieldset legend {
1311
+ padding: 0 8px;
1312
+ color: var(--text-muted);
1313
+ font-size: 13px;
1314
+ font-weight: 500;
1315
+ margin-left: -4px;
1316
+ }
1317
+
1318
+ .token-fieldset .summary-list>div:last-child {
1319
+ border-bottom: none;
1320
+ }
1321
+
1322
+ .auth-dialog__panel {
1323
+ padding: 24px;
1324
+ display: flex;
1325
+ flex-direction: column;
1326
+ }
1327
+
1328
+ .auth-dialog__lead {
1329
+ margin: 0 0 20px 0;
1330
+ line-height: 1.5;
1331
+ color: var(--text-main);
1332
+ }
1333
+
1334
+ .auth-dialog__detail {
1335
+ margin-bottom: 24px;
1336
+ }
1337
+
1338
+ .auth-dialog__steps {
1339
+ margin: 0 0 24px 0;
1340
+ padding-left: 20px;
1341
+ color: var(--text-muted);
1342
+ font-size: 13px;
1343
+ display: flex;
1344
+ flex-direction: column;
1345
+ gap: 8px;
1346
+ }
1347
+
1348
+ .auth-dialog__device-grid {
1349
+ display: grid;
1350
+ grid-template-columns: 1fr;
1351
+ gap: 20px;
1352
+ margin-bottom: 24px;
1353
+ }
1354
+
1355
+ .auth-dialog__methods {
1356
+ margin: 20px 0 0;
1357
+ border: 1px solid var(--border-subtle);
1358
+ border-radius: 8px;
1359
+ padding: 12px;
1360
+ display: flex;
1361
+ flex-direction: column;
1362
+ gap: 8px;
1363
+ }
1364
+
1365
+ .auth-dialog__methods legend {
1366
+ padding: 0 8px;
1367
+ color: var(--text-muted);
1368
+ font-size: 13px;
1369
+ font-weight: 500;
1370
+ margin-left: -4px;
1371
+ }
1372
+
1373
+ .auth-dialog__option {
1374
+ border: 1px solid var(--border-subtle);
1375
+ border-radius: 6px;
1376
+ padding: 12px;
1377
+ cursor: pointer;
1378
+ background: var(--bg-surface);
1379
+ transition: all 0.2s;
1380
+ display: flex;
1381
+ flex-direction: column;
1382
+ position: relative;
1383
+ }
1384
+
1385
+ .auth-dialog__option:hover {
1386
+ border-color: var(--accent-primary);
1387
+ background: var(--bg-list-hover);
1388
+ }
1389
+
1390
+ .auth-dialog__option input[type="radio"] {
1391
+ position: absolute;
1392
+ top: 14px;
1393
+ left: 12px;
1394
+ margin: 0;
1395
+ accent-color: var(--accent-primary);
1396
+ cursor: pointer;
1397
+ }
1398
+
1399
+ .auth-dialog__option:has(input:checked) {
1400
+ border-color: var(--accent-primary);
1401
+ background: var(--bg-list-hover);
1402
+ }
1403
+
1404
+ .auth-dialog__option label {
1405
+ margin-left: 24px;
1406
+ font-weight: 500;
1407
+ color: var(--text-main);
1408
+ font-size: 14px;
1409
+ cursor: pointer;
1410
+ }
1411
+
1412
+ .auth-dialog__option-meta {
1413
+ margin-left: 24px;
1414
+ font-size: 12px;
1415
+ margin-top: 2px;
1416
+ color: var(--text-muted);
1417
+ cursor: pointer;
1418
+ }
1419
+
1420
+ .auth-dialog__actions,
1421
+ .message-dialog__actions {
1422
+ display: flex;
1423
+ justify-content: flex-end;
1424
+ gap: 12px;
1425
+ padding: 16px 20px;
1426
+ border-top: 1px solid var(--border-subtle);
1427
+ background: var(--bg-panel);
1428
+ }
1429
+
1430
+ .auth-dialog__actions button,
1431
+ .message-dialog__actions button {
1432
+ padding: 8px 16px;
1433
+ border-radius: 6px;
1434
+ font-size: 14px;
1435
+ font-weight: 500;
1436
+ cursor: pointer;
1437
+ transition: all 0.2s;
1438
+ }
1439
+
1440
+ /* Secondary Button */
1441
+ .auth-dialog__actions button:not(.default),
1442
+ .message-dialog__actions button:not(.default) {
1443
+ background: transparent;
1444
+ border: 1px solid var(--border-subtle);
1445
+ color: var(--text-main);
1446
+ }
1447
+
1448
+ .auth-dialog__actions button:not(.default):hover,
1449
+ .message-dialog__actions button:not(.default):hover {
1450
+ background: var(--bg-surface);
1451
+ border-color: var(--text-muted);
1452
+ }
1453
+
1454
+ /* Primary Button */
1455
+ .auth-dialog__actions button.default,
1456
+ .message-dialog__actions button.default {
1457
+ background: var(--accent-primary) !important;
1458
+ border: 1px solid var(--accent-primary) !important;
1459
+ color: var(--accent-primary-text) !important;
1460
+ }
1461
+
1462
+ .auth-dialog__actions button.default:hover,
1463
+ .message-dialog__actions button.default:hover {
1464
+ background: var(--accent-primary-hover) !important;
1465
+ border-color: var(--accent-primary-hover) !important;
1466
+ }
1467
+
1468
+ .auth-dialog__code-value {
1469
+ font-family: monospace;
1470
+ font-size: 24px;
1471
+ letter-spacing: 4px;
1472
+ background: var(--bg-surface);
1473
+ padding: 4px 4px 4px 16px;
1474
+ border-radius: 8px;
1475
+ border: 1px solid var(--border-strong);
1476
+ color: var(--accent-primary);
1477
+ display: flex;
1478
+ justify-content: space-between;
1479
+ align-items: center;
1480
+ gap: 8px;
1481
+ }
1482
+
1483
+ .auth-dialog__label {
1484
+ display: block;
1485
+ font-size: 13px;
1486
+ font-weight: 500;
1487
+ color: var(--text-muted);
1488
+ margin-bottom: 8px;
1489
+ }
1490
+
1491
+ .auth-dialog__status {
1492
+ display: flex;
1493
+ flex-direction: column;
1494
+ align-items: center;
1495
+ gap: 8px;
1496
+ margin-top: 24px;
1497
+ color: var(--text-muted);
1498
+ font-size: 13px;
1499
+ text-align: center;
1500
+ }
1501
+
1502
+ .auth-dialog__status-text {
1503
+ font-weight: 600;
1504
+ color: var(--accent-primary);
1505
+ font-size: 14px;
1506
+ }
1507
+
1508
+ .url-copy-row {
1509
+ display: flex;
1510
+ gap: 8px;
1511
+ align-items: center;
1512
+ background: var(--bg-surface);
1513
+ border: 1px solid var(--border-subtle);
1514
+ border-radius: 6px;
1515
+ padding: 4px;
1516
+ }
1517
+
1518
+ .url-copy-row a {
1519
+ flex: 1;
1520
+ border: none;
1521
+ background: transparent;
1522
+ padding: 8px;
1523
+ font-family: monospace;
1524
+ font-size: 13px;
1525
+ text-decoration: none;
1526
+ min-width: 0;
1527
+ overflow: hidden;
1528
+ text-overflow: ellipsis;
1529
+ white-space: nowrap;
1530
+ color: var(--accent-primary) !important;
1531
+ transition: color 0.2s;
1532
+ }
1533
+
1534
+ .url-copy-row a:hover {
1535
+ text-decoration: underline;
1536
+ color: var(--accent-primary-hover) !important;
1537
+ }
1538
+
1539
+ .copy-btn {
1540
+ background: transparent;
1541
+ border: 1px solid var(--border-subtle);
1542
+ color: var(--text-muted);
1543
+ font-size: 12px;
1544
+ padding: 8px 12px;
1545
+ border-radius: 4px;
1546
+ cursor: pointer;
1547
+ transition: color 0.2s, border-color 0.2s, background 0.2s;
1548
+ flex-shrink: 0;
1549
+ width: 70px;
1550
+ text-align: center;
1551
+ box-sizing: border-box;
1552
+ }
1553
+
1554
+ .copy-btn:hover {
1555
+ background: var(--bg-card);
1556
+ color: var(--text-main);
1557
+ border-color: var(--text-muted);
1558
+ }
1559
+
1560
+ .copy-btn.copy-success {
1561
+ color: #10b981 !important;
1562
+ border-color: #10b981 !important;
1563
+ }
1564
+
1565
+ .auth-dialog__status-meta {
1566
+ display: flex;
1567
+ align-items: center;
1568
+ justify-content: center;
1569
+ gap: 8px;
1570
+ margin-top: 4px;
1571
+ }
1572
+
1573
+ .status-bar {
1574
+ position: fixed;
1575
+ bottom: 0;
1576
+ left: 0;
1577
+ right: 0;
1578
+ display: flex;
1579
+ gap: 16px;
1580
+ padding: 8px 24px;
1581
+ background: var(--bg-panel);
1582
+ border-top: 1px solid var(--border-subtle);
1583
+ color: var(--text-muted);
1584
+ font-size: 12px;
1585
+ z-index: 20;
1586
+ }
1587
+
1588
+ .animate {
1589
+ animation: spin 1s linear infinite;
1590
+ }
1591
+
1592
+ @keyframes spin {
1593
+ 100% {
1594
+ transform: rotate(360deg);
1595
+ }
1596
+ }
1597
+
1598
+ /* Loading State */
1599
+ .loading-overlay {
1600
+ position: absolute;
1601
+ inset: 0;
1602
+ background: var(--bg-app);
1603
+ z-index: 15;
1604
+ display: flex;
1605
+ align-items: center;
1606
+ justify-content: center;
1607
+ }
1608
+
1609
+ .loading-panel {
1610
+ display: flex;
1611
+ flex-direction: column;
1612
+ align-items: center;
1613
+ gap: 16px;
1614
+ color: var(--text-muted);
1615
+ font-size: 14px;
1616
+ }
1617
+
1618
+ .spinner {
1619
+ width: 24px;
1620
+ height: 24px;
1621
+ border: 2px solid var(--border-strong);
1622
+ border-top-color: var(--accent-primary);
1623
+ border-radius: 50%;
1624
+ display: block;
1625
+ }