@mayurbhusare/resilient-queue-ui 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1197 @@
1
+ /* ResilientQueue Dashboard Stylesheet
2
+ Restrained, professional visual design for developer administration tooling.
3
+ */
4
+
5
+ :root {
6
+ --bg-primary: #0f172a;
7
+ --bg-secondary: #1e293b;
8
+ --bg-tertiary: #334155;
9
+ --bg-elevated: #243247;
10
+ --text-primary: #f8fafc;
11
+ --text-secondary: #94a3b8;
12
+ --text-muted: #64748b;
13
+ --border-color: #334155;
14
+ --border-subtle: #1e293b;
15
+
16
+ --accent-blue: #38bdf8;
17
+ --accent-blue-hover: #0369a1;
18
+ --accent-focus: #38bdf8;
19
+ --accent-blue-subtle: rgba(56, 189, 248, 0.1);
20
+
21
+ --status-active: #22c55e;
22
+ --status-active-subtle: rgba(34, 197, 94, 0.15);
23
+ --status-paused: #f59e0b;
24
+ --status-paused-subtle: rgba(245, 158, 11, 0.15);
25
+ --status-error: #ef4444;
26
+ --status-error-subtle: rgba(239, 68, 68, 0.15);
27
+
28
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
29
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
30
+
31
+ --sidebar-width: 250px;
32
+ --header-height: 60px;
33
+ --radius-sm: 4px;
34
+ --radius-md: 6px;
35
+ --radius-lg: 8px;
36
+ }
37
+
38
+ * {
39
+ box-sizing: border-box;
40
+ margin: 0;
41
+ padding: 0;
42
+ }
43
+
44
+ body {
45
+ font-family: var(--font-sans);
46
+ background-color: var(--bg-primary);
47
+ color: var(--text-primary);
48
+ line-height: 1.5;
49
+ font-size: 14px;
50
+ -webkit-font-smoothing: antialiased;
51
+ min-height: 100vh;
52
+ }
53
+
54
+ a {
55
+ color: var(--accent-blue);
56
+ text-decoration: none;
57
+ }
58
+
59
+ a:hover {
60
+ text-decoration: underline;
61
+ }
62
+
63
+ button {
64
+ font-family: inherit;
65
+ font-size: inherit;
66
+ cursor: pointer;
67
+ }
68
+
69
+ /* Accessibility: Skip Navigation Link */
70
+ .skip-link {
71
+ position: absolute;
72
+ top: -999px;
73
+ left: 1rem;
74
+ z-index: 1000;
75
+ padding: 0.6rem 1rem;
76
+ background-color: #0369a1;
77
+ color: #ffffff;
78
+ font-weight: 600;
79
+ font-size: 13px;
80
+ border-radius: var(--radius-sm);
81
+ text-decoration: none;
82
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
83
+ transition: top 0.15s ease-in-out;
84
+ }
85
+
86
+ .skip-link:focus {
87
+ top: 1rem;
88
+ outline: 2px solid #ffffff;
89
+ outline-offset: 2px;
90
+ }
91
+
92
+ /* Accessibility Focus States */
93
+ :focus-visible {
94
+ outline: 2px solid var(--accent-blue);
95
+ outline-offset: 2px;
96
+ }
97
+
98
+ /* Container programmatic focus reset */
99
+ .content-area:focus {
100
+ outline: none;
101
+ }
102
+
103
+ /* Dashboard Shell Layout */
104
+ .app-container {
105
+ display: flex;
106
+ min-height: 100vh;
107
+ }
108
+
109
+ /* Sidebar Navigation */
110
+ .sidebar {
111
+ width: var(--sidebar-width);
112
+ background-color: var(--bg-secondary);
113
+ border-right: 1px solid var(--border-color);
114
+ display: flex;
115
+ flex-direction: column;
116
+ flex-shrink: 0;
117
+ transition: transform 0.2s ease-in-out;
118
+ z-index: 50;
119
+ }
120
+
121
+ .sidebar-header {
122
+ height: var(--header-height);
123
+ padding: 0 1.25rem;
124
+ display: flex;
125
+ align-items: center;
126
+ border-bottom: 1px solid var(--border-color);
127
+ }
128
+
129
+ .brand {
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 0.6rem;
133
+ text-decoration: none;
134
+ color: var(--text-primary);
135
+ }
136
+
137
+ .brand-icon {
138
+ width: 28px;
139
+ height: 28px;
140
+ border-radius: var(--radius-sm);
141
+ background: linear-gradient(135deg, #0284c7, #38bdf8);
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ font-weight: 700;
146
+ font-size: 14px;
147
+ color: #fff;
148
+ }
149
+
150
+ .brand-title {
151
+ font-size: 15px;
152
+ font-weight: 600;
153
+ letter-spacing: -0.01em;
154
+ }
155
+
156
+ .brand-tag {
157
+ font-size: 10px;
158
+ background-color: var(--bg-tertiary);
159
+ color: var(--text-secondary);
160
+ padding: 2px 6px;
161
+ border-radius: var(--radius-sm);
162
+ margin-left: 0.25rem;
163
+ font-family: var(--font-mono);
164
+ }
165
+
166
+ .sidebar-nav {
167
+ padding: 1rem 0.75rem;
168
+ flex: 1;
169
+ display: flex;
170
+ flex-direction: column;
171
+ gap: 0.25rem;
172
+ }
173
+
174
+ .nav-link {
175
+ display: flex;
176
+ align-items: center;
177
+ gap: 0.75rem;
178
+ padding: 0.6rem 0.75rem;
179
+ border-radius: var(--radius-md);
180
+ color: var(--text-secondary);
181
+ background: transparent;
182
+ border: none;
183
+ width: 100%;
184
+ text-align: left;
185
+ font-weight: 500;
186
+ transition: background-color 0.15s, color 0.15s;
187
+ }
188
+
189
+ .nav-link:hover {
190
+ background-color: var(--bg-elevated);
191
+ color: var(--text-primary);
192
+ text-decoration: none;
193
+ }
194
+
195
+ .nav-link.active {
196
+ background-color: var(--accent-blue-subtle);
197
+ color: var(--accent-blue);
198
+ font-weight: 600;
199
+ }
200
+
201
+ .nav-badge {
202
+ margin-left: auto;
203
+ font-size: 11px;
204
+ padding: 1px 6px;
205
+ border-radius: 9999px;
206
+ background-color: var(--bg-tertiary);
207
+ color: var(--text-secondary);
208
+ font-weight: 500;
209
+ }
210
+
211
+ .nav-badge.badge-amber {
212
+ background-color: var(--status-paused-subtle);
213
+ color: var(--status-paused);
214
+ }
215
+
216
+ .nav-badge.badge-muted {
217
+ font-size: 10px;
218
+ text-transform: uppercase;
219
+ }
220
+
221
+ .sidebar-footer {
222
+ padding: 1rem;
223
+ border-top: 1px solid var(--border-color);
224
+ font-size: 12px;
225
+ color: var(--text-muted);
226
+ }
227
+
228
+ .sidebar-footer a {
229
+ color: var(--text-secondary);
230
+ }
231
+
232
+ /* Main Content Area */
233
+ .main-wrapper {
234
+ flex: 1;
235
+ display: flex;
236
+ flex-direction: column;
237
+ min-width: 0;
238
+ }
239
+
240
+ .top-bar {
241
+ height: var(--header-height);
242
+ background-color: var(--bg-secondary);
243
+ border-bottom: 1px solid var(--border-color);
244
+ padding: 0 1.5rem;
245
+ display: flex;
246
+ align-items: center;
247
+ justify-content: space-between;
248
+ }
249
+
250
+ .top-bar-left {
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 1rem;
254
+ }
255
+
256
+ .mobile-toggle {
257
+ display: none;
258
+ background: transparent;
259
+ border: 1px solid var(--border-color);
260
+ color: var(--text-primary);
261
+ padding: 0.4rem 0.6rem;
262
+ border-radius: var(--radius-sm);
263
+ }
264
+
265
+ .view-title {
266
+ font-size: 16px;
267
+ font-weight: 600;
268
+ letter-spacing: -0.01em;
269
+ }
270
+
271
+ .top-bar-actions {
272
+ display: flex;
273
+ align-items: center;
274
+ gap: 0.75rem;
275
+ }
276
+
277
+ .status-indicator {
278
+ display: flex;
279
+ align-items: center;
280
+ gap: 0.4rem;
281
+ font-size: 12px;
282
+ color: var(--text-secondary);
283
+ font-family: var(--font-mono);
284
+ }
285
+
286
+ .status-dot {
287
+ width: 8px;
288
+ height: 8px;
289
+ border-radius: 50%;
290
+ background-color: var(--status-active);
291
+ }
292
+
293
+ .status-dot.loading {
294
+ background-color: var(--status-paused);
295
+ }
296
+
297
+ .status-dot.offline {
298
+ background-color: var(--status-error);
299
+ }
300
+
301
+ /* Buttons */
302
+ .btn {
303
+ display: inline-flex;
304
+ align-items: center;
305
+ gap: 0.4rem;
306
+ padding: 0.4rem 0.8rem;
307
+ border-radius: var(--radius-sm);
308
+ font-weight: 500;
309
+ border: 1px solid transparent;
310
+ transition: all 0.15s ease;
311
+ }
312
+
313
+ .btn-sm {
314
+ padding: 0.25rem 0.6rem;
315
+ font-size: 12px;
316
+ }
317
+
318
+ .btn-secondary {
319
+ background-color: var(--bg-tertiary);
320
+ color: var(--text-primary);
321
+ border-color: var(--border-color);
322
+ }
323
+
324
+ .btn-secondary:hover {
325
+ background-color: var(--bg-elevated);
326
+ }
327
+
328
+ .btn-primary {
329
+ background-color: var(--accent-blue-hover);
330
+ color: #fff;
331
+ }
332
+
333
+ .btn-primary:hover {
334
+ background-color: #075985;
335
+ }
336
+
337
+ /* Content Container */
338
+ .content-area {
339
+ flex: 1;
340
+ padding: 1.5rem;
341
+ overflow-y: auto;
342
+ }
343
+
344
+ /* Metric Summary Cards */
345
+ .metrics-grid {
346
+ display: grid;
347
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
348
+ gap: 1rem;
349
+ margin-bottom: 1.5rem;
350
+ }
351
+
352
+ .metric-card {
353
+ background-color: var(--bg-secondary);
354
+ border: 1px solid var(--border-color);
355
+ border-radius: var(--radius-md);
356
+ padding: 1rem;
357
+ }
358
+
359
+ .metric-label {
360
+ font-size: 12px;
361
+ color: var(--text-secondary);
362
+ text-transform: uppercase;
363
+ letter-spacing: 0.05em;
364
+ font-weight: 600;
365
+ margin-bottom: 0.35rem;
366
+ }
367
+
368
+ .metric-value {
369
+ font-size: 24px;
370
+ font-weight: 700;
371
+ font-family: var(--font-mono);
372
+ color: var(--text-primary);
373
+ }
374
+
375
+ .metric-value.has-dlq {
376
+ color: var(--status-error);
377
+ }
378
+
379
+ /* Data Table */
380
+ .table-card {
381
+ background-color: var(--bg-secondary);
382
+ border: 1px solid var(--border-color);
383
+ border-radius: var(--radius-md);
384
+ overflow: hidden;
385
+ }
386
+
387
+ .table-header {
388
+ padding: 1rem 1.25rem;
389
+ border-bottom: 1px solid var(--border-color);
390
+ display: flex;
391
+ align-items: center;
392
+ justify-content: space-between;
393
+ }
394
+
395
+ .table-title {
396
+ font-size: 14px;
397
+ font-weight: 600;
398
+ }
399
+
400
+ .table-responsive {
401
+ width: 100%;
402
+ overflow-x: auto;
403
+ }
404
+
405
+ .data-table {
406
+ width: 100%;
407
+ border-collapse: collapse;
408
+ text-align: left;
409
+ }
410
+
411
+ .data-table th {
412
+ background-color: var(--bg-primary);
413
+ padding: 0.75rem 1.25rem;
414
+ font-size: 12px;
415
+ font-weight: 600;
416
+ color: var(--text-secondary);
417
+ text-transform: uppercase;
418
+ letter-spacing: 0.05em;
419
+ border-bottom: 1px solid var(--border-color);
420
+ }
421
+
422
+ .data-table td {
423
+ padding: 0.85rem 1.25rem;
424
+ border-bottom: 1px solid var(--border-color);
425
+ font-size: 13px;
426
+ }
427
+
428
+ .data-table tbody tr:last-child td {
429
+ border-bottom: none;
430
+ }
431
+
432
+ .data-table tbody tr:hover {
433
+ background-color: var(--bg-elevated);
434
+ }
435
+
436
+ .queue-name-cell {
437
+ font-family: var(--font-mono);
438
+ font-weight: 600;
439
+ color: var(--text-primary);
440
+ }
441
+
442
+ .metric-number {
443
+ font-family: var(--font-mono);
444
+ font-weight: 500;
445
+ }
446
+
447
+ /* Badges */
448
+ .badge {
449
+ display: inline-flex;
450
+ align-items: center;
451
+ gap: 0.35rem;
452
+ padding: 0.2rem 0.55rem;
453
+ border-radius: var(--radius-sm);
454
+ font-size: 11px;
455
+ font-weight: 600;
456
+ text-transform: uppercase;
457
+ letter-spacing: 0.02em;
458
+ }
459
+
460
+ .badge-active {
461
+ background-color: var(--status-active-subtle);
462
+ color: #4ade80;
463
+ }
464
+
465
+ .badge-paused {
466
+ background-color: var(--status-paused-subtle);
467
+ color: #fbbf24;
468
+ }
469
+
470
+ .badge-dlq-clean {
471
+ color: #94a3b8;
472
+ }
473
+
474
+ .badge-dlq-alert {
475
+ background-color: var(--status-error-subtle);
476
+ color: #f87171;
477
+ font-family: var(--font-mono);
478
+ font-weight: 700;
479
+ text-decoration: none;
480
+ }
481
+
482
+ .badge-completed {
483
+ background-color: var(--status-active-subtle);
484
+ color: #4ade80;
485
+ }
486
+
487
+ .badge-failed {
488
+ background-color: var(--status-error-subtle);
489
+ color: #f87171;
490
+ }
491
+
492
+ .badge-waiting {
493
+ background-color: var(--bg-tertiary);
494
+ color: #cbd5e1;
495
+ }
496
+
497
+ .badge-delayed {
498
+ background-color: rgba(245, 158, 11, 0.15);
499
+ color: #fbbf24;
500
+ }
501
+
502
+ .badge-closed {
503
+ background-color: var(--status-error-subtle);
504
+ color: #f87171;
505
+ }
506
+
507
+ .badge-unavailable {
508
+ background-color: var(--bg-tertiary);
509
+ color: #cbd5e1;
510
+ }
511
+
512
+ .badge-error {
513
+ background-color: var(--status-error-subtle);
514
+ color: #f87171;
515
+ }
516
+
517
+ .metric-unavailable {
518
+ color: var(--text-muted);
519
+ font-family: var(--font-mono);
520
+ font-weight: 500;
521
+ }
522
+
523
+ .view-dlq-link {
524
+ cursor: pointer;
525
+ transition: opacity 0.15s;
526
+ }
527
+
528
+ .view-dlq-link:hover,
529
+ .view-dlq-link:focus-visible {
530
+ opacity: 0.85;
531
+ outline: 2px solid var(--accent-focus);
532
+ outline-offset: 1px;
533
+ }
534
+
535
+ /* UI State Containers */
536
+ .state-container {
537
+ padding: 3rem 1.5rem;
538
+ text-align: center;
539
+ background-color: var(--bg-secondary);
540
+ border: 1px solid var(--border-color);
541
+ border-radius: var(--radius-md);
542
+ margin-bottom: 1.5rem;
543
+ }
544
+
545
+ .state-icon {
546
+ font-size: 32px;
547
+ margin-bottom: 0.75rem;
548
+ }
549
+
550
+ .state-title {
551
+ font-size: 16px;
552
+ font-weight: 600;
553
+ color: var(--text-primary);
554
+ margin-bottom: 0.5rem;
555
+ }
556
+
557
+ .state-description {
558
+ font-size: 13px;
559
+ color: var(--text-secondary);
560
+ max-width: 520px;
561
+ margin: 0 auto 1.25rem auto;
562
+ }
563
+
564
+ .code-snippet {
565
+ background-color: var(--bg-primary);
566
+ border: 1px solid var(--border-color);
567
+ padding: 0.75rem 1rem;
568
+ border-radius: var(--radius-sm);
569
+ font-family: var(--font-mono);
570
+ font-size: 12px;
571
+ color: var(--accent-blue);
572
+ display: inline-block;
573
+ max-width: 100%;
574
+ overflow-x: auto;
575
+ text-align: left;
576
+ }
577
+
578
+ /* Error State */
579
+ .error-state {
580
+ border-color: rgba(239, 68, 68, 0.4);
581
+ background-color: rgba(239, 68, 68, 0.05);
582
+ }
583
+
584
+ .error-title {
585
+ color: var(--status-error);
586
+ }
587
+
588
+ .error-code-badge {
589
+ display: inline-block;
590
+ font-family: var(--font-mono);
591
+ font-size: 11px;
592
+ background-color: var(--status-error-subtle);
593
+ color: var(--status-error);
594
+ padding: 2px 8px;
595
+ border-radius: var(--radius-sm);
596
+ margin-bottom: 0.5rem;
597
+ }
598
+
599
+ /* Loading State Spinner */
600
+ .spinner {
601
+ width: 32px;
602
+ height: 32px;
603
+ border: 3px solid var(--border-color);
604
+ border-top-color: var(--accent-blue);
605
+ border-radius: 50%;
606
+ margin: 0 auto 1rem auto;
607
+ animation: spin 0.8s linear infinite;
608
+ }
609
+
610
+ @keyframes spin {
611
+ to {
612
+ transform: rotate(360deg);
613
+ }
614
+ }
615
+
616
+ /* Callouts & Compatibility Alerts */
617
+ .callout {
618
+ padding: 1rem 1.25rem;
619
+ border-radius: var(--radius-md);
620
+ margin-bottom: 1.5rem;
621
+ border: 1px solid var(--border-color);
622
+ background-color: var(--bg-secondary);
623
+ }
624
+
625
+ .callout-warning {
626
+ border-color: rgba(245, 158, 11, 0.4);
627
+ background-color: rgba(245, 158, 11, 0.06);
628
+ }
629
+
630
+ .callout-header {
631
+ display: flex;
632
+ align-items: center;
633
+ gap: 0.5rem;
634
+ font-weight: 600;
635
+ margin-bottom: 0.4rem;
636
+ color: var(--status-paused);
637
+ }
638
+
639
+ .callout-body {
640
+ font-size: 13px;
641
+ color: var(--text-secondary);
642
+ line-height: 1.5;
643
+ }
644
+
645
+ .callout-body code {
646
+ font-family: var(--font-mono);
647
+ background-color: var(--bg-primary);
648
+ padding: 1px 4px;
649
+ border-radius: var(--radius-sm);
650
+ color: var(--text-primary);
651
+ }
652
+
653
+ /* DLQ Explorer Toolbar & Form Controls */
654
+ .dlq-toolbar {
655
+ display: flex;
656
+ flex-wrap: wrap;
657
+ gap: 1rem;
658
+ align-items: center;
659
+ margin-bottom: 1.5rem;
660
+ background-color: var(--bg-secondary);
661
+ padding: 0.85rem 1.25rem;
662
+ border: 1px solid var(--border-color);
663
+ border-radius: var(--radius-md);
664
+ }
665
+
666
+ .form-group {
667
+ display: flex;
668
+ align-items: center;
669
+ gap: 0.5rem;
670
+ }
671
+
672
+ .form-label {
673
+ font-size: 12px;
674
+ font-weight: 600;
675
+ color: var(--text-secondary);
676
+ text-transform: uppercase;
677
+ letter-spacing: 0.05em;
678
+ white-space: nowrap;
679
+ }
680
+
681
+ .form-select {
682
+ background-color: var(--bg-primary);
683
+ border: 1px solid var(--border-color);
684
+ color: var(--text-primary);
685
+ padding: 0.4rem 0.75rem;
686
+ border-radius: var(--radius-sm);
687
+ font-size: 13px;
688
+ font-family: inherit;
689
+ cursor: pointer;
690
+ }
691
+
692
+ .form-select:focus-visible {
693
+ outline: 2px solid var(--accent-blue);
694
+ outline-offset: 1px;
695
+ }
696
+
697
+ .form-select:disabled {
698
+ opacity: 0.5;
699
+ cursor: not-allowed;
700
+ }
701
+
702
+ .form-input {
703
+ background-color: var(--bg-primary);
704
+ border: 1px solid var(--border-color);
705
+ color: var(--text-primary);
706
+ padding: 0.4rem 0.75rem;
707
+ border-radius: var(--radius-sm);
708
+ font-size: 13px;
709
+ font-family: inherit;
710
+ }
711
+
712
+ .form-input:focus-visible {
713
+ outline: 2px solid var(--accent-blue);
714
+ outline-offset: 1px;
715
+ }
716
+
717
+ .job-search-form {
718
+ display: flex;
719
+ align-items: center;
720
+ gap: 1rem;
721
+ width: 100%;
722
+ flex-wrap: wrap;
723
+ }
724
+
725
+ /* Progress Bar */
726
+ .progress-container {
727
+ margin-bottom: 1.25rem;
728
+ padding: 0.85rem 1rem;
729
+ background-color: var(--bg-primary);
730
+ border: 1px solid var(--border-color);
731
+ border-radius: var(--radius-sm);
732
+ }
733
+
734
+ .progress-bar {
735
+ width: 100%;
736
+ height: 8px;
737
+ background-color: var(--bg-tertiary);
738
+ border-radius: var(--radius-sm);
739
+ overflow: hidden;
740
+ }
741
+
742
+ .progress-fill {
743
+ height: 100%;
744
+ background: linear-gradient(90deg, #0284c7, #38bdf8);
745
+ border-radius: var(--radius-sm);
746
+ transition: width 0.3s ease;
747
+ }
748
+
749
+ /* DLQ Table & Item Details */
750
+ .badge-corrupted {
751
+ background-color: rgba(239, 68, 68, 0.2);
752
+ color: #f87171;
753
+ border: 1px solid rgba(239, 68, 68, 0.4);
754
+ font-family: var(--font-mono);
755
+ font-weight: 700;
756
+ }
757
+
758
+ .failure-reason-text {
759
+ display: block;
760
+ max-width: 280px;
761
+ overflow: hidden;
762
+ text-overflow: ellipsis;
763
+ white-space: nowrap;
764
+ font-size: 12px;
765
+ color: var(--text-secondary);
766
+ }
767
+
768
+ .text-danger {
769
+ color: var(--status-error);
770
+ }
771
+
772
+ .text-muted {
773
+ color: var(--text-muted);
774
+ }
775
+
776
+ .job-expanded-row {
777
+ background-color: var(--bg-elevated);
778
+ }
779
+
780
+ .job-detail-box {
781
+ padding: 1.25rem;
782
+ border-top: 1px solid var(--border-color);
783
+ border-bottom: 1px solid var(--border-color);
784
+ }
785
+
786
+ .job-detail-grid {
787
+ display: grid;
788
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
789
+ gap: 0.75rem;
790
+ margin-bottom: 0.75rem;
791
+ }
792
+
793
+ .detail-item {
794
+ display: flex;
795
+ flex-direction: column;
796
+ gap: 0.2rem;
797
+ }
798
+
799
+ .detail-label {
800
+ font-size: 11px;
801
+ font-weight: 600;
802
+ text-transform: uppercase;
803
+ letter-spacing: 0.05em;
804
+ color: var(--text-muted);
805
+ }
806
+
807
+ .detail-value {
808
+ font-size: 13px;
809
+ color: var(--text-primary);
810
+ }
811
+
812
+ .failure-callout {
813
+ background-color: rgba(239, 68, 68, 0.1);
814
+ border-left: 3px solid var(--status-error);
815
+ padding: 0.6rem 0.85rem;
816
+ border-radius: var(--radius-sm);
817
+ font-family: var(--font-mono);
818
+ font-size: 12px;
819
+ color: #fca5a5;
820
+ margin-top: 0.25rem;
821
+ word-break: break-word;
822
+ overflow-wrap: anywhere;
823
+ }
824
+
825
+ .job-payload-box {
826
+ background-color: var(--bg-primary);
827
+ border: 1px solid var(--border-color);
828
+ border-radius: var(--radius-sm);
829
+ padding: 0.75rem 1rem;
830
+ font-family: var(--font-mono);
831
+ font-size: 12px;
832
+ max-height: 250px;
833
+ overflow-x: auto;
834
+ overflow-y: auto;
835
+ white-space: pre-wrap;
836
+ word-break: break-word;
837
+ color: var(--text-primary);
838
+ margin-top: 0.25rem;
839
+ }
840
+
841
+ .job-payload-box:focus-visible {
842
+ outline: 2px solid var(--accent-blue);
843
+ outline-offset: 1px;
844
+ }
845
+
846
+ .callout-info {
847
+ border-color: rgba(56, 189, 248, 0.3);
848
+ background-color: rgba(56, 189, 248, 0.05);
849
+ }
850
+
851
+ /* Pagination Bar */
852
+ .pagination-container {
853
+ display: flex;
854
+ align-items: center;
855
+ justify-content: space-between;
856
+ padding: 0.85rem 1.25rem;
857
+ border-top: 1px solid var(--border-color);
858
+ background-color: var(--bg-secondary);
859
+ font-size: 13px;
860
+ color: var(--text-secondary);
861
+ flex-wrap: wrap;
862
+ gap: 0.75rem;
863
+ }
864
+
865
+ .pagination-actions {
866
+ display: flex;
867
+ align-items: center;
868
+ gap: 0.75rem;
869
+ }
870
+
871
+ .pagination-page-indicator {
872
+ font-size: 12px;
873
+ color: var(--text-secondary);
874
+ }
875
+
876
+ /* Mobile backdrop */
877
+ .mobile-backdrop {
878
+ display: none;
879
+ position: fixed;
880
+ inset: 0;
881
+ background-color: rgba(0, 0, 0, 0.6);
882
+ z-index: 40;
883
+ }
884
+
885
+ /* Responsive Behavior */
886
+ @media (max-width: 768px) {
887
+ .mobile-toggle {
888
+ display: inline-flex;
889
+ }
890
+
891
+ .sidebar {
892
+ position: fixed;
893
+ top: 0;
894
+ bottom: 0;
895
+ left: 0;
896
+ transform: translateX(-100%);
897
+ }
898
+
899
+ .sidebar.open {
900
+ transform: translateX(0);
901
+ }
902
+
903
+ .mobile-backdrop.open {
904
+ display: block;
905
+ }
906
+
907
+ .content-area {
908
+ padding: 1rem;
909
+ }
910
+
911
+ .metrics-grid {
912
+ grid-template-columns: repeat(2, 1fr);
913
+ }
914
+
915
+ .dlq-toolbar {
916
+ flex-direction: column;
917
+ align-items: stretch;
918
+ gap: 0.75rem;
919
+ }
920
+
921
+ .form-group {
922
+ justify-content: space-between;
923
+ }
924
+
925
+ .form-group .form-select {
926
+ flex: 1;
927
+ max-width: 220px;
928
+ }
929
+
930
+ .dlq-toolbar > div:last-child {
931
+ margin-left: 0 !important;
932
+ }
933
+
934
+ .dlq-toolbar > div:last-child button {
935
+ width: 100%;
936
+ }
937
+
938
+ .job-search-form {
939
+ flex-direction: column;
940
+ align-items: stretch;
941
+ gap: 0.75rem;
942
+ }
943
+
944
+ .job-search-form .form-group {
945
+ width: 100%;
946
+ min-width: 0 !important;
947
+ }
948
+
949
+ .job-search-form .form-input {
950
+ width: 100%;
951
+ }
952
+
953
+ .job-search-form > div:last-child {
954
+ width: 100%;
955
+ }
956
+
957
+ .job-search-form > div:last-child button {
958
+ flex: 1;
959
+ }
960
+ }
961
+
962
+ /* Accessibility */
963
+ .visually-hidden {
964
+ position: absolute;
965
+ width: 1px;
966
+ height: 1px;
967
+ padding: 0;
968
+ margin: -1px;
969
+ overflow: hidden;
970
+ clip: rect(0, 0, 0, 0);
971
+ white-space: nowrap;
972
+ border-width: 0;
973
+ }
974
+
975
+ /* Monitoring & Telemetry Styles */
976
+ .table-title-group {
977
+ display: flex;
978
+ align-items: center;
979
+ gap: 0.75rem;
980
+ }
981
+
982
+ .table-meta {
983
+ display: flex;
984
+ align-items: center;
985
+ gap: 0.75rem;
986
+ }
987
+
988
+ .last-sync-label {
989
+ font-size: 12px;
990
+ color: var(--text-muted);
991
+ font-family: var(--font-mono);
992
+ }
993
+
994
+ .last-updated-cell {
995
+ font-family: var(--font-mono);
996
+ font-size: 12px;
997
+ color: var(--text-secondary);
998
+ white-space: nowrap;
999
+ }
1000
+
1001
+ .sync-error-banner {
1002
+ display: flex;
1003
+ align-items: center;
1004
+ justify-content: space-between;
1005
+ gap: 1rem;
1006
+ padding: 0.75rem 1rem;
1007
+ background-color: rgba(239, 68, 68, 0.1);
1008
+ border: 1px solid rgba(239, 68, 68, 0.35);
1009
+ border-radius: var(--radius-md);
1010
+ margin-bottom: 1.25rem;
1011
+ font-size: 13px;
1012
+ color: #fca5a5;
1013
+ flex-wrap: wrap;
1014
+ }
1015
+
1016
+ .sync-error-content {
1017
+ display: flex;
1018
+ align-items: center;
1019
+ gap: 0.6rem;
1020
+ }
1021
+
1022
+ .sync-error-icon {
1023
+ font-size: 16px;
1024
+ flex-shrink: 0;
1025
+ }
1026
+
1027
+ .sync-error-text {
1028
+ display: flex;
1029
+ flex-wrap: wrap;
1030
+ align-items: center;
1031
+ gap: 0.4rem;
1032
+ }
1033
+
1034
+ .sync-error-code {
1035
+ font-family: var(--font-mono);
1036
+ font-weight: 700;
1037
+ font-size: 11px;
1038
+ background-color: rgba(239, 68, 68, 0.2);
1039
+ padding: 1px 5px;
1040
+ border-radius: var(--radius-sm);
1041
+ }
1042
+
1043
+ .sync-error-sub {
1044
+ color: var(--text-muted);
1045
+ font-size: 12px;
1046
+ }
1047
+
1048
+ .auto-refresh-wrapper {
1049
+ display: flex;
1050
+ align-items: center;
1051
+ }
1052
+
1053
+ .poll-select {
1054
+ padding: 0.25rem 0.5rem;
1055
+ font-size: 12px;
1056
+ height: 28px;
1057
+ background-color: var(--bg-tertiary);
1058
+ border: 1px solid var(--border-color);
1059
+ color: var(--text-primary);
1060
+ border-radius: var(--radius-sm);
1061
+ }
1062
+
1063
+ /* Milestone 9: Queue Management & Operational Controls */
1064
+ .overview-toolbar {
1065
+ margin-bottom: 1.25rem;
1066
+ }
1067
+
1068
+ .sort-header-btn {
1069
+ background: transparent;
1070
+ border: none;
1071
+ color: inherit;
1072
+ font-family: inherit;
1073
+ font-size: inherit;
1074
+ font-weight: inherit;
1075
+ display: inline-flex;
1076
+ align-items: center;
1077
+ gap: 0.35rem;
1078
+ padding: 0;
1079
+ cursor: pointer;
1080
+ text-align: left;
1081
+ transition: color 0.15s ease;
1082
+ }
1083
+
1084
+ .sort-header-btn:hover {
1085
+ color: var(--accent-blue);
1086
+ }
1087
+
1088
+ .sort-indicator {
1089
+ font-size: 11px;
1090
+ line-height: 1;
1091
+ }
1092
+
1093
+ .sort-icon-idle {
1094
+ opacity: 0.4;
1095
+ }
1096
+
1097
+ .btn-xs {
1098
+ padding: 0.2rem 0.5rem;
1099
+ font-size: 11px;
1100
+ border-radius: var(--radius-sm);
1101
+ display: inline-flex;
1102
+ align-items: center;
1103
+ gap: 0.25rem;
1104
+ }
1105
+
1106
+ .action-nav-btn {
1107
+ margin-left: 0.25rem;
1108
+ text-decoration: none;
1109
+ }
1110
+
1111
+ .action-nav-btn:hover {
1112
+ text-decoration: none;
1113
+ }
1114
+
1115
+ .empty-filter-state {
1116
+ text-align: center;
1117
+ }
1118
+
1119
+ .diagnostic-guidance {
1120
+ width: 100%;
1121
+ }
1122
+
1123
+ .diagnostic-guidance .callout {
1124
+ margin: 0;
1125
+ }
1126
+
1127
+ /* Responsive Enhancements for Narrow & Mobile Screens */
1128
+ @media (max-width: 600px) {
1129
+ .top-bar {
1130
+ padding: 0.5rem 0.75rem;
1131
+ height: auto;
1132
+ min-height: var(--header-height);
1133
+ flex-wrap: wrap;
1134
+ gap: 0.5rem;
1135
+ }
1136
+
1137
+ .top-bar-left {
1138
+ gap: 0.5rem;
1139
+ }
1140
+
1141
+ .top-bar-actions {
1142
+ flex-wrap: wrap;
1143
+ gap: 0.5rem;
1144
+ width: 100%;
1145
+ justify-content: flex-end;
1146
+ }
1147
+
1148
+ .content-area {
1149
+ padding: 0.75rem;
1150
+ }
1151
+
1152
+ .metrics-grid {
1153
+ grid-template-columns: 1fr;
1154
+ gap: 0.75rem;
1155
+ }
1156
+
1157
+ .job-detail-grid {
1158
+ grid-template-columns: 1fr;
1159
+ gap: 0.5rem;
1160
+ }
1161
+
1162
+ .overview-toolbar .form-group {
1163
+ width: 100%;
1164
+ min-width: 0 !important;
1165
+ }
1166
+ }
1167
+
1168
+ @media (max-width: 480px) {
1169
+ .pagination-container {
1170
+ flex-direction: column;
1171
+ align-items: stretch;
1172
+ gap: 0.75rem;
1173
+ text-align: center;
1174
+ }
1175
+
1176
+ .pagination-actions {
1177
+ justify-content: center;
1178
+ }
1179
+ }
1180
+
1181
+ /* Reduced Motion Preference Support */
1182
+ @media (prefers-reduced-motion: reduce) {
1183
+ *,
1184
+ *::before,
1185
+ *::after {
1186
+ animation-duration: 0.01ms !important;
1187
+ animation-iteration-count: 1 !important;
1188
+ transition-duration: 0.01ms !important;
1189
+ scroll-behavior: auto !important;
1190
+ }
1191
+
1192
+ .spinner {
1193
+ animation: none !important;
1194
+ border-top-color: var(--accent-blue) !important;
1195
+ opacity: 0.85;
1196
+ }
1197
+ }