magnax 1.0.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.
Files changed (87) hide show
  1. magnax/__init__.py +3 -0
  2. magnax/__main__.py +25 -0
  3. magnax/debug.py +65 -0
  4. magnax/public/__init__.py +1 -0
  5. magnax/public/adb/linux/adb +0 -0
  6. magnax/public/adb/linux_arm/adb +0 -0
  7. magnax/public/adb/mac/adb +0 -0
  8. magnax/public/adb/windows/AdbWinApi.dll +0 -0
  9. magnax/public/adb/windows/AdbWinUsbApi.dll +0 -0
  10. magnax/public/adb/windows/adb.exe +0 -0
  11. magnax/public/adb.py +96 -0
  12. magnax/public/android_fps.py +750 -0
  13. magnax/public/apm.py +1306 -0
  14. magnax/public/apm_pk.py +184 -0
  15. magnax/public/common.py +1598 -0
  16. magnax/public/config.json +1 -0
  17. magnax/public/ios_perf_adapter.py +790 -0
  18. magnax/public/report_template/android.html +526 -0
  19. magnax/public/report_template/ios.html +482 -0
  20. magnax/public/scrcpy/scrcpy-win32-v2.4/AdbWinApi.dll +0 -0
  21. magnax/public/scrcpy/scrcpy-win32-v2.4/AdbWinUsbApi.dll +0 -0
  22. magnax/public/scrcpy/scrcpy-win32-v2.4/SDL2.dll +0 -0
  23. magnax/public/scrcpy/scrcpy-win32-v2.4/adb.exe +0 -0
  24. magnax/public/scrcpy/scrcpy-win32-v2.4/avcodec-60.dll +0 -0
  25. magnax/public/scrcpy/scrcpy-win32-v2.4/avformat-60.dll +0 -0
  26. magnax/public/scrcpy/scrcpy-win32-v2.4/avutil-58.dll +0 -0
  27. magnax/public/scrcpy/scrcpy-win32-v2.4/icon.png +0 -0
  28. magnax/public/scrcpy/scrcpy-win32-v2.4/libusb-1.0.dll +0 -0
  29. magnax/public/scrcpy/scrcpy-win32-v2.4/open_a_terminal_here.bat +1 -0
  30. magnax/public/scrcpy/scrcpy-win32-v2.4/scrcpy-console.bat +2 -0
  31. magnax/public/scrcpy/scrcpy-win32-v2.4/scrcpy-noconsole.vbs +7 -0
  32. magnax/public/scrcpy/scrcpy-win32-v2.4/scrcpy-server +0 -0
  33. magnax/public/scrcpy/scrcpy-win32-v2.4/scrcpy.exe +0 -0
  34. magnax/public/scrcpy/scrcpy-win32-v2.4/swresample-4.dll +0 -0
  35. magnax/public/scrcpy/scrcpy-win64-v2.4/AdbWinApi.dll +0 -0
  36. magnax/public/scrcpy/scrcpy-win64-v2.4/AdbWinUsbApi.dll +0 -0
  37. magnax/public/scrcpy/scrcpy-win64-v2.4/SDL2.dll +0 -0
  38. magnax/public/scrcpy/scrcpy-win64-v2.4/avformat-60.dll +0 -0
  39. magnax/public/scrcpy/scrcpy-win64-v2.4/avutil-58.dll +0 -0
  40. magnax/public/scrcpy/scrcpy-win64-v2.4/open_a_terminal_here.bat +1 -0
  41. magnax/public/scrcpy/scrcpy-win64-v2.4/scrcpy-noconsole.vbs +7 -0
  42. magnax/public/scrcpy/scrcpy-win64-v2.4/scrcpy-server +0 -0
  43. magnax/public/scrcpy/scrcpy-win64-v2.4/scrcpy.exe +0 -0
  44. magnax/public/scrcpy/scrcpy-win64-v2.4/swresample-4.dll +0 -0
  45. magnax/static/css/highlight.min.css +9 -0
  46. magnax/static/css/magnax-dark-theme.css +1237 -0
  47. magnax/static/css/select2-bootstrap-5-theme.min.css +3 -0
  48. magnax/static/css/select2-bootstrap-5-theme.rtl.min.css +3 -0
  49. magnax/static/css/select2.min.css +1 -0
  50. magnax/static/css/sweetalert2.min.css +1 -0
  51. magnax/static/css/tabler.demo.min.css +9 -0
  52. magnax/static/css/tabler.min.css +14 -0
  53. magnax/static/image/500.png +0 -0
  54. magnax/static/image/avatar.png +0 -0
  55. magnax/static/image/empty.png +0 -0
  56. magnax/static/image/readme/home.png +0 -0
  57. magnax/static/image/readme/pk.png +0 -0
  58. magnax/static/js/apexcharts.js +14 -0
  59. magnax/static/js/gray.js +16 -0
  60. magnax/static/js/highlight.min.js +1173 -0
  61. magnax/static/js/highstock.js +803 -0
  62. magnax/static/js/html2canvas.min.js +20 -0
  63. magnax/static/js/jquery.min.js +2 -0
  64. magnax/static/js/magnax-chart-theme.js +492 -0
  65. magnax/static/js/select2.min.js +2 -0
  66. magnax/static/js/sweetalert2.min.js +1 -0
  67. magnax/static/js/tabler.demo.min.js +9 -0
  68. magnax/static/js/tabler.min.js +9 -0
  69. magnax/static/logo/logo.png +0 -0
  70. magnax/templates/404.html +30 -0
  71. magnax/templates/analysis.html +1375 -0
  72. magnax/templates/analysis_compare.html +600 -0
  73. magnax/templates/analysis_pk.html +680 -0
  74. magnax/templates/base.html +365 -0
  75. magnax/templates/index.html +2471 -0
  76. magnax/templates/pk.html +743 -0
  77. magnax/templates/report.html +416 -0
  78. magnax/view/__init__.py +1 -0
  79. magnax/view/apis.py +952 -0
  80. magnax/view/pages.py +146 -0
  81. magnax/web.py +345 -0
  82. magnax-1.0.0.dist-info/METADATA +242 -0
  83. magnax-1.0.0.dist-info/RECORD +87 -0
  84. magnax-1.0.0.dist-info/WHEEL +5 -0
  85. magnax-1.0.0.dist-info/entry_points.txt +2 -0
  86. magnax-1.0.0.dist-info/licenses/LICENSE +21 -0
  87. magnax-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1237 @@
1
+ /**
2
+ * MagnaX Dark Theme - Grafana Style
3
+ * A professional dark theme inspired by Grafana's monitoring dashboard
4
+ */
5
+
6
+ /* ==================== CSS Variables ==================== */
7
+ :root {
8
+ /* Background Colors */
9
+ --magnax-canvas-bg: #111217;
10
+ --magnax-main-bg: #181b1f;
11
+ --magnax-card-bg: #1e2128;
12
+ --magnax-input-bg: #2a2e37;
13
+ --magnax-hover-bg: #2a2e37;
14
+
15
+ /* Border Colors */
16
+ --magnax-border-weak: #2a2e37;
17
+ --magnax-border-medium: #3d4453;
18
+
19
+ /* Text Colors - White for all text */
20
+ --magnax-text-primary: #ffffff;
21
+ --magnax-text-secondary: #ffffff;
22
+ --magnax-text-disabled: #888888;
23
+
24
+ /* Accent Colors - Enhanced brightness for dark background */
25
+ --magnax-accent-green: #8dd17a;
26
+ --magnax-accent-blue: #5c9cf5;
27
+ --magnax-accent-orange: #ffab4a;
28
+ --magnax-accent-red: #ff6b7a;
29
+ --magnax-accent-purple: #c99ae8;
30
+ --magnax-accent-yellow: #ffeb5c;
31
+ --magnax-accent-cyan: #33e8d8;
32
+ --magnax-accent-gold: #ffc933;
33
+
34
+ /* Chart Colors - Enhanced brightness for dark background */
35
+ --magnax-chart-cpu: #8dd17a;
36
+ --magnax-chart-memory: #6ba8ff;
37
+ --magnax-chart-network-tx: #ffab4a;
38
+ --magnax-chart-network-rx: #c99ae8;
39
+ --magnax-chart-fps: #ffeb5c;
40
+ --magnax-chart-gpu: #33e8d8;
41
+ --magnax-chart-battery: #ffc933;
42
+
43
+ /* Shadows */
44
+ --magnax-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
45
+ --magnax-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.4);
46
+ }
47
+
48
+ /* ==================== Body & Page Container ==================== */
49
+ body.Body {
50
+ background-color: var(--magnax-canvas-bg) !important;
51
+ color: #ffffff !important;
52
+ }
53
+
54
+ /* Global white text */
55
+ body.Body,
56
+ body.Body * {
57
+ color: #ffffff;
58
+ }
59
+
60
+ /* Keep colored elements */
61
+ .text-success { color: var(--magnax-accent-green) !important; }
62
+ .text-danger { color: var(--magnax-accent-red) !important; }
63
+ .text-warning { color: var(--magnax-accent-orange) !important; }
64
+ .text-primary { color: var(--magnax-accent-blue) !important; }
65
+ .text-muted { color: #cccccc !important; }
66
+
67
+ /* Override layout-boxed to make UI full width */
68
+ body.Body.layout-boxed {
69
+ background-color: var(--magnax-canvas-bg) !important;
70
+ }
71
+
72
+ body.Body.layout-boxed .page {
73
+ max-width: 100% !important;
74
+ margin: 0 !important;
75
+ box-shadow: none !important;
76
+ }
77
+
78
+ body.Body.layout-boxed .container-xl {
79
+ max-width: 100% !important;
80
+ padding-left: 24px !important;
81
+ padding-right: 24px !important;
82
+ }
83
+
84
+ .page {
85
+ background-color: var(--magnax-canvas-bg) !important;
86
+ }
87
+
88
+ .page-wrapper {
89
+ background-color: var(--magnax-canvas-bg) !important;
90
+ }
91
+
92
+ .page-body {
93
+ background-color: var(--magnax-canvas-bg) !important;
94
+ }
95
+
96
+ .container-xl {
97
+ background-color: transparent !important;
98
+ }
99
+
100
+ /* ==================== Navbar ==================== */
101
+ .navbar {
102
+ background-color: var(--magnax-main-bg) !important;
103
+ border-bottom: 1px solid var(--magnax-border-weak) !important;
104
+ box-shadow: var(--magnax-shadow) !important;
105
+ }
106
+
107
+ .navbar-brand-autodark {
108
+ color: var(--magnax-text-primary) !important;
109
+ }
110
+
111
+ .navbar-brand-autodark label {
112
+ color: var(--magnax-accent-green) !important;
113
+ }
114
+
115
+ .navbar-light .navbar-toggler {
116
+ color: var(--magnax-text-primary) !important;
117
+ border-color: var(--magnax-border-weak) !important;
118
+ }
119
+
120
+ .navbar-toggler-icon {
121
+ filter: invert(1) !important;
122
+ }
123
+
124
+ /* Nav Items */
125
+ .nav-item a,
126
+ .nav-link {
127
+ color: var(--magnax-text-secondary) !important;
128
+ }
129
+
130
+ .nav-item a:hover,
131
+ .nav-link:hover {
132
+ color: var(--magnax-text-primary) !important;
133
+ }
134
+
135
+ .nav-link.active {
136
+ color: var(--magnax-accent-green) !important;
137
+ border-bottom-color: var(--magnax-accent-green) !important;
138
+ }
139
+
140
+ /* Status Dot */
141
+ .status-dot {
142
+ background-color: var(--magnax-accent-red) !important;
143
+ }
144
+
145
+ /* ==================== Buttons ==================== */
146
+ .btn-primary {
147
+ background-color: var(--magnax-accent-blue) !important;
148
+ border-color: var(--magnax-accent-blue) !important;
149
+ color: #fff !important;
150
+ }
151
+
152
+ .btn-primary:hover {
153
+ background-color: #4a8ae6 !important;
154
+ border-color: #4a8ae6 !important;
155
+ }
156
+
157
+ .btn-default,
158
+ .btn-secondary,
159
+ .btn-light {
160
+ background-color: var(--magnax-input-bg) !important;
161
+ border-color: var(--magnax-border-weak) !important;
162
+ color: var(--magnax-text-primary) !important;
163
+ }
164
+
165
+ .btn-default:hover,
166
+ .btn-secondary:hover,
167
+ .btn-light:hover {
168
+ background-color: var(--magnax-border-medium) !important;
169
+ border-color: var(--magnax-border-medium) !important;
170
+ color: var(--magnax-text-primary) !important;
171
+ }
172
+
173
+ .btn-pill {
174
+ background-color: var(--magnax-input-bg) !important;
175
+ border-color: var(--magnax-border-weak) !important;
176
+ color: var(--magnax-text-primary) !important;
177
+ }
178
+
179
+ .btn-pill:hover {
180
+ background-color: var(--magnax-hover-bg) !important;
181
+ border-color: var(--magnax-accent-green) !important;
182
+ }
183
+
184
+ .btn-success {
185
+ background-color: var(--magnax-accent-green) !important;
186
+ border-color: var(--magnax-accent-green) !important;
187
+ }
188
+
189
+ .btn-warning {
190
+ background-color: var(--magnax-accent-orange) !important;
191
+ border-color: var(--magnax-accent-orange) !important;
192
+ }
193
+
194
+ .btn-danger {
195
+ background-color: var(--magnax-accent-red) !important;
196
+ border-color: var(--magnax-accent-red) !important;
197
+ }
198
+
199
+ .btn-outline-primary {
200
+ color: var(--magnax-accent-blue) !important;
201
+ border-color: var(--magnax-accent-blue) !important;
202
+ }
203
+
204
+ .btn-outline-primary:hover {
205
+ background-color: var(--magnax-accent-blue) !important;
206
+ color: #fff !important;
207
+ }
208
+
209
+ /* ==================== Cards ==================== */
210
+ .card {
211
+ background-color: var(--magnax-card-bg) !important;
212
+ border: 1px solid var(--magnax-border-weak) !important;
213
+ box-shadow: var(--magnax-shadow) !important;
214
+ }
215
+
216
+ .card-header {
217
+ background-color: var(--magnax-card-bg) !important;
218
+ border-bottom: 1px solid var(--magnax-border-weak) !important;
219
+ color: var(--magnax-text-primary) !important;
220
+ }
221
+
222
+ .card-title {
223
+ color: var(--magnax-text-primary) !important;
224
+ }
225
+
226
+ .card-body {
227
+ background-color: var(--magnax-card-bg) !important;
228
+ color: var(--magnax-text-primary) !important;
229
+ }
230
+
231
+ .card-footer {
232
+ background-color: var(--magnax-card-bg) !important;
233
+ border-top: 1px solid var(--magnax-border-weak) !important;
234
+ }
235
+
236
+ /* ==================== Dropdown Menu ==================== */
237
+ .dropdown-menu {
238
+ background-color: var(--magnax-card-bg) !important;
239
+ border: 1px solid var(--magnax-border-weak) !important;
240
+ box-shadow: var(--magnax-shadow-lg) !important;
241
+ }
242
+
243
+ .dropdown-item {
244
+ color: #ffffff !important;
245
+ }
246
+
247
+ .dropdown-item:hover,
248
+ .dropdown-item:focus {
249
+ background-color: var(--magnax-hover-bg) !important;
250
+ color: var(--magnax-accent-green) !important;
251
+ }
252
+
253
+ .dropdown-divider {
254
+ border-color: var(--magnax-border-weak) !important;
255
+ }
256
+
257
+ /* ==================== Form Controls ==================== */
258
+ .form-control {
259
+ background-color: var(--magnax-input-bg) !important;
260
+ border-color: var(--magnax-border-weak) !important;
261
+ color: var(--magnax-text-primary) !important;
262
+ }
263
+
264
+ .form-control:focus {
265
+ background-color: var(--magnax-input-bg) !important;
266
+ border-color: var(--magnax-accent-blue) !important;
267
+ box-shadow: 0 0 0 0.2rem rgba(50, 116, 217, 0.25) !important;
268
+ color: var(--magnax-text-primary) !important;
269
+ }
270
+
271
+ .form-control::placeholder {
272
+ color: var(--magnax-text-disabled) !important;
273
+ }
274
+
275
+ .form-control:disabled,
276
+ .form-control[readonly] {
277
+ background-color: var(--magnax-main-bg) !important;
278
+ color: var(--magnax-text-disabled) !important;
279
+ }
280
+
281
+ .form-label {
282
+ color: #ffffff !important;
283
+ }
284
+
285
+ .input-group-text {
286
+ background-color: var(--magnax-input-bg) !important;
287
+ border-color: var(--magnax-border-weak) !important;
288
+ color: var(--magnax-text-secondary) !important;
289
+ }
290
+
291
+ /* Form Help */
292
+ .form-help {
293
+ background-color: var(--magnax-input-bg) !important;
294
+ border-color: var(--magnax-border-weak) !important;
295
+ color: var(--magnax-text-secondary) !important;
296
+ }
297
+
298
+ /* File Input - Select File Button */
299
+ input[type="file"].form-control {
300
+ background-color: var(--magnax-input-bg) !important;
301
+ border: 2px solid #6c7a8c !important;
302
+ color: #ffffff !important;
303
+ }
304
+
305
+ input[type="file"].form-control::file-selector-button {
306
+ background-color: #3d4453 !important;
307
+ border: none !important;
308
+ border-right: 2px solid #6c7a8c !important;
309
+ color: #ffffff !important;
310
+ padding: 0.5rem 1rem !important;
311
+ margin-right: 1rem !important;
312
+ font-weight: 500 !important;
313
+ cursor: pointer !important;
314
+ }
315
+
316
+ input[type="file"].form-control::file-selector-button:hover {
317
+ background-color: var(--magnax-accent-blue) !important;
318
+ }
319
+
320
+ /* Webkit browsers (Chrome, Safari) */
321
+ input[type="file"].form-control::-webkit-file-upload-button {
322
+ background-color: #3d4453 !important;
323
+ border: none !important;
324
+ border-right: 2px solid #6c7a8c !important;
325
+ color: #ffffff !important;
326
+ padding: 0.5rem 1rem !important;
327
+ margin-right: 1rem !important;
328
+ font-weight: 500 !important;
329
+ cursor: pointer !important;
330
+ }
331
+
332
+ input[type="file"].form-control::-webkit-file-upload-button:hover {
333
+ background-color: var(--magnax-accent-blue) !important;
334
+ }
335
+
336
+ /* ==================== Select2 ==================== */
337
+ .select2-container--bootstrap-5 .select2-selection {
338
+ background-color: var(--magnax-input-bg) !important;
339
+ border-color: var(--magnax-border-weak) !important;
340
+ color: var(--magnax-text-primary) !important;
341
+ }
342
+
343
+ .select2-container--bootstrap-5 .select2-selection--single .select2-selection__rendered {
344
+ color: #ffffff !important;
345
+ }
346
+
347
+ .select2-container--bootstrap-5 .select2-dropdown {
348
+ background-color: var(--magnax-card-bg) !important;
349
+ border-color: var(--magnax-border-weak) !important;
350
+ }
351
+
352
+ .select2-container--bootstrap-5 .select2-results__option {
353
+ color: #ffffff !important;
354
+ }
355
+
356
+ .select2-container--bootstrap-5 .select2-results__option--highlighted {
357
+ background-color: var(--magnax-hover-bg) !important;
358
+ color: var(--magnax-accent-green) !important;
359
+ }
360
+
361
+ .select2-container--bootstrap-5 .select2-results__option--selected {
362
+ background-color: var(--magnax-accent-blue) !important;
363
+ color: #fff !important;
364
+ }
365
+
366
+ .select2-container--bootstrap-5 .select2-search--dropdown .select2-search__field {
367
+ background-color: var(--magnax-input-bg) !important;
368
+ border-color: var(--magnax-border-weak) !important;
369
+ color: var(--magnax-text-primary) !important;
370
+ }
371
+
372
+ .select2-container--bootstrap-5 .select2-selection__placeholder {
373
+ color: var(--magnax-text-disabled) !important;
374
+ }
375
+
376
+ .select2-container--bootstrap-5 .select2-selection__arrow b {
377
+ border-color: var(--magnax-text-secondary) transparent transparent transparent !important;
378
+ }
379
+
380
+ /* ==================== Checkbox & Switch ==================== */
381
+ .form-check-input {
382
+ background-color: var(--magnax-input-bg) !important;
383
+ border-color: var(--magnax-border-weak) !important;
384
+ }
385
+
386
+ .form-check-input:checked {
387
+ background-color: var(--magnax-accent-green) !important;
388
+ border-color: var(--magnax-accent-green) !important;
389
+ }
390
+
391
+ .form-check-input:focus {
392
+ border-color: var(--magnax-accent-blue) !important;
393
+ box-shadow: 0 0 0 0.2rem rgba(50, 116, 217, 0.25) !important;
394
+ }
395
+
396
+ .form-switch .form-check-input {
397
+ background-color: var(--magnax-input-bg) !important;
398
+ }
399
+
400
+ .form-switch .form-check-input:checked {
401
+ background-color: var(--magnax-accent-green) !important;
402
+ }
403
+
404
+ /* ==================== Tables ==================== */
405
+ .table {
406
+ color: #ffffff !important;
407
+ }
408
+
409
+ .table th,
410
+ .table td {
411
+ border-color: var(--magnax-border-weak) !important;
412
+ color: #ffffff !important;
413
+ }
414
+
415
+ .table thead th {
416
+ background-color: var(--magnax-main-bg) !important;
417
+ border-bottom-color: var(--magnax-border-weak) !important;
418
+ color: #ffffff !important;
419
+ }
420
+
421
+ .table-striped > tbody > tr:nth-of-type(odd) {
422
+ background-color: rgba(255, 255, 255, 0.02) !important;
423
+ }
424
+
425
+ .table-hover > tbody > tr:hover {
426
+ background-color: var(--magnax-hover-bg) !important;
427
+ }
428
+
429
+ /* ==================== Left Panel (apm-info) ==================== */
430
+ .apm-info {
431
+ background-color: var(--magnax-card-bg) !important;
432
+ border: 1px solid var(--magnax-border-weak) !important;
433
+ border-radius: 4px;
434
+ }
435
+
436
+ .apm-info .card {
437
+ background-color: transparent !important;
438
+ border: none !important;
439
+ }
440
+
441
+ .apm-info label {
442
+ color: var(--magnax-text-secondary) !important;
443
+ }
444
+
445
+ .apm-info h3,
446
+ .apm-info h4 {
447
+ color: var(--magnax-text-primary) !important;
448
+ }
449
+
450
+ /* Device Info Labels */
451
+ .apm-info .text-muted {
452
+ color: var(--magnax-text-secondary) !important;
453
+ }
454
+
455
+ /* ==================== Right Panel (apm-data) ==================== */
456
+ .apm-data {
457
+ background-color: var(--magnax-card-bg) !important;
458
+ border: 1px solid var(--magnax-border-weak) !important;
459
+ border-radius: 4px;
460
+ }
461
+
462
+ .apm-data .card {
463
+ background-color: transparent !important;
464
+ border: none !important;
465
+ border-bottom: 1px solid var(--magnax-border-weak) !important;
466
+ }
467
+
468
+ .apm-data .card:last-child {
469
+ border-bottom: none !important;
470
+ }
471
+
472
+ /* Chart Containers */
473
+ .apm-data .card-body {
474
+ background-color: transparent !important;
475
+ }
476
+
477
+ /* ==================== Highcharts ==================== */
478
+ /* Chart background */
479
+ .highcharts-background {
480
+ fill: var(--magnax-card-bg) !important;
481
+ }
482
+
483
+ /* Axis labels - White text */
484
+ .highcharts-axis-labels text,
485
+ .highcharts-xaxis-labels text,
486
+ .highcharts-yaxis-labels text {
487
+ fill: #ffffff !important;
488
+ color: #ffffff !important;
489
+ }
490
+
491
+ /* Tooltip - Dark background with white text */
492
+ .highcharts-tooltip > span {
493
+ background-color: rgba(30, 33, 40, 0.95) !important;
494
+ border: 1px solid #3d4453 !important;
495
+ padding: 8px 12px !important;
496
+ border-radius: 4px !important;
497
+ }
498
+
499
+ .highcharts-tooltip text,
500
+ .highcharts-tooltip tspan,
501
+ .highcharts-tooltip span {
502
+ fill: #ffffff !important;
503
+ color: #ffffff !important;
504
+ }
505
+
506
+ .highcharts-tooltip-box {
507
+ fill: rgba(30, 33, 40, 0.95) !important;
508
+ stroke: #3d4453 !important;
509
+ }
510
+
511
+ .highcharts-label-box {
512
+ fill: rgba(30, 33, 40, 0.95) !important;
513
+ stroke: #3d4453 !important;
514
+ }
515
+
516
+ /* Chart title and legend */
517
+ .highcharts-title,
518
+ .highcharts-subtitle {
519
+ fill: #ffffff !important;
520
+ }
521
+
522
+ .highcharts-legend-item text {
523
+ fill: #ffffff !important;
524
+ }
525
+
526
+ /* ==================== ApexCharts Dark Theme ==================== */
527
+ /* Chart background */
528
+ .apexcharts-canvas {
529
+ background-color: var(--magnax-card-bg) !important;
530
+ }
531
+
532
+ /* X-axis and Y-axis labels - White text */
533
+ .apexcharts-xaxis-label,
534
+ .apexcharts-yaxis-label {
535
+ fill: #ffffff !important;
536
+ font-weight: 500 !important;
537
+ }
538
+
539
+ .apexcharts-xaxis text,
540
+ .apexcharts-yaxis text {
541
+ fill: #ffffff !important;
542
+ }
543
+
544
+ .apexcharts-xaxis-label tspan,
545
+ .apexcharts-yaxis-label tspan {
546
+ fill: #ffffff !important;
547
+ }
548
+
549
+ /* Axis title */
550
+ .apexcharts-xaxis-title-text,
551
+ .apexcharts-yaxis-title-text {
552
+ fill: #ffffff !important;
553
+ }
554
+
555
+ /* Grid lines */
556
+ .apexcharts-gridlines-horizontal line,
557
+ .apexcharts-gridlines-vertical line {
558
+ stroke: rgba(255, 255, 255, 0.1) !important;
559
+ }
560
+
561
+ .apexcharts-grid-borders line {
562
+ stroke: rgba(255, 255, 255, 0.2) !important;
563
+ }
564
+
565
+ /* Tooltip - Dark background with white text */
566
+ .apexcharts-tooltip {
567
+ background-color: #1e2128 !important;
568
+ border: 1px solid #3d4453 !important;
569
+ color: #ffffff !important;
570
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4) !important;
571
+ }
572
+
573
+ .apexcharts-tooltip-title {
574
+ background-color: #2a2e37 !important;
575
+ border-bottom: 1px solid #3d4453 !important;
576
+ color: #ffffff !important;
577
+ }
578
+
579
+ .apexcharts-tooltip-text,
580
+ .apexcharts-tooltip-text-y-label,
581
+ .apexcharts-tooltip-text-y-value,
582
+ .apexcharts-tooltip-text-goals-label,
583
+ .apexcharts-tooltip-text-goals-value,
584
+ .apexcharts-tooltip-text-z-label,
585
+ .apexcharts-tooltip-text-z-value {
586
+ color: #ffffff !important;
587
+ }
588
+
589
+ .apexcharts-tooltip-series-group {
590
+ background-color: transparent !important;
591
+ }
592
+
593
+ .apexcharts-tooltip.apexcharts-theme-light {
594
+ background-color: #1e2128 !important;
595
+ border-color: #3d4453 !important;
596
+ }
597
+
598
+ .apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {
599
+ background-color: #2a2e37 !important;
600
+ border-bottom-color: #3d4453 !important;
601
+ }
602
+
603
+ /* Legend */
604
+ .apexcharts-legend-text {
605
+ color: #ffffff !important;
606
+ }
607
+
608
+ /* Data labels */
609
+ .apexcharts-data-labels text,
610
+ .apexcharts-datalabel {
611
+ fill: #ffffff !important;
612
+ }
613
+
614
+ /* Crosshairs */
615
+ .apexcharts-xcrosshairs,
616
+ .apexcharts-ycrosshairs {
617
+ stroke: rgba(255, 255, 255, 0.3) !important;
618
+ }
619
+
620
+ /* Annotations */
621
+ .apexcharts-annotation-text {
622
+ fill: #ffffff !important;
623
+ }
624
+
625
+ /* Pie/Donut chart labels */
626
+ .apexcharts-pie-label {
627
+ fill: #ffffff !important;
628
+ }
629
+
630
+ /* Toolbar icons */
631
+ .apexcharts-toolbar svg {
632
+ fill: #ffffff !important;
633
+ }
634
+
635
+ .apexcharts-menu {
636
+ background-color: #1e2128 !important;
637
+ border: 1px solid #3d4453 !important;
638
+ }
639
+
640
+ .apexcharts-menu-item {
641
+ color: #ffffff !important;
642
+ }
643
+
644
+ .apexcharts-menu-item:hover {
645
+ background-color: #2a2e37 !important;
646
+ }
647
+
648
+ /* Zoom selection */
649
+ .apexcharts-selection-rect {
650
+ fill: rgba(90, 156, 245, 0.2) !important;
651
+ }
652
+
653
+ /* Reset icon */
654
+ .apexcharts-reset-icon,
655
+ .apexcharts-zoom-icon,
656
+ .apexcharts-zoomin-icon,
657
+ .apexcharts-zoomout-icon,
658
+ .apexcharts-pan-icon,
659
+ .apexcharts-download-icon {
660
+ fill: #ffffff !important;
661
+ }
662
+
663
+ /* ==================== Analysis Page Buttons ==================== */
664
+ /* Top page buttons (Compare, Save Html, Save Image) in btn-list */
665
+ .btn-list .btn {
666
+ background-color: #3d4453 !important;
667
+ border: 2px solid #6c7a8c !important;
668
+ color: #ffffff !important;
669
+ padding: 0.5rem 1rem !important;
670
+ font-weight: 500 !important;
671
+ border-radius: 4px !important;
672
+ }
673
+
674
+ .btn-list .btn:hover {
675
+ background-color: var(--magnax-accent-blue) !important;
676
+ border-color: var(--magnax-accent-blue) !important;
677
+ color: #ffffff !important;
678
+ }
679
+
680
+ .btn-list .btn svg {
681
+ width: 20px !important;
682
+ height: 20px !important;
683
+ margin-right: 4px !important;
684
+ }
685
+
686
+ /* Card actions buttons (Refresh, Screenshot) */
687
+ .card-actions .btn,
688
+ .btn-actions .btn {
689
+ background-color: #3d4453 !important;
690
+ border: 2px solid #6c7a8c !important;
691
+ color: #ffffff !important;
692
+ padding: 0.375rem 0.75rem !important;
693
+ font-weight: 500 !important;
694
+ border-radius: 4px !important;
695
+ }
696
+
697
+ .card-actions .btn:hover,
698
+ .btn-actions .btn:hover {
699
+ background-color: var(--magnax-accent-blue) !important;
700
+ border-color: var(--magnax-accent-blue) !important;
701
+ color: #ffffff !important;
702
+ }
703
+
704
+ /* PK Mode buttons (apm-btn-list) */
705
+ .apm-btn-list .btn {
706
+ background-color: #3d4453 !important;
707
+ border: 2px solid #6c7a8c !important;
708
+ color: #ffffff !important;
709
+ padding: 0.5rem 1rem !important;
710
+ font-weight: 500 !important;
711
+ border-radius: 4px !important;
712
+ }
713
+
714
+ .apm-btn-list .btn:hover {
715
+ background-color: var(--magnax-accent-blue) !important;
716
+ border-color: var(--magnax-accent-blue) !important;
717
+ color: #ffffff !important;
718
+ }
719
+
720
+ /* PK Mode button SVG icons - keep colorful, set size */
721
+ .apm-btn-list .btn svg {
722
+ width: 20px !important;
723
+ height: 20px !important;
724
+ margin-right: 4px !important;
725
+ }
726
+
727
+ /* Card action button icons - keep colorful SVGs, only refresh icon is white */
728
+
729
+ /* Refresh and Screenshot buttons in chart headers */
730
+ .btn-outline-secondary,
731
+ .btn-outline-primary,
732
+ .btn-outline-default {
733
+ background-color: #3d4453 !important;
734
+ border: 2px solid #6c7a8c !important;
735
+ color: #ffffff !important;
736
+ }
737
+
738
+ .btn-outline-secondary:hover,
739
+ .btn-outline-primary:hover,
740
+ .btn-outline-default:hover {
741
+ background-color: var(--magnax-accent-blue) !important;
742
+ border-color: var(--magnax-accent-blue) !important;
743
+ color: #ffffff !important;
744
+ }
745
+
746
+ .btn-outline-primary.active {
747
+ background-color: var(--magnax-accent-blue) !important;
748
+ border-color: var(--magnax-accent-blue) !important;
749
+ color: #ffffff !important;
750
+ }
751
+
752
+ /* Small buttons in chart area */
753
+ .btn-sm {
754
+ background-color: #3d4453 !important;
755
+ border: 2px solid #6c7a8c !important;
756
+ color: #ffffff !important;
757
+ }
758
+
759
+ .btn-sm:hover {
760
+ background-color: var(--magnax-accent-blue) !important;
761
+ border-color: var(--magnax-accent-blue) !important;
762
+ }
763
+
764
+ /* White/light buttons */
765
+ .btn-white,
766
+ .btn-light {
767
+ background-color: #3d4453 !important;
768
+ border: 2px solid #6c7a8c !important;
769
+ color: #ffffff !important;
770
+ }
771
+
772
+ .btn-white:hover,
773
+ .btn-light:hover {
774
+ background-color: var(--magnax-border-medium) !important;
775
+ border-color: var(--magnax-accent-blue) !important;
776
+ color: #ffffff !important;
777
+ }
778
+
779
+ /* Generic btn class in dark theme - High specificity for analysis page */
780
+ .card .btn:not(.btn-primary):not(.btn-success):not(.btn-danger):not(.btn-warning),
781
+ a.btn:not(.btn-primary):not(.btn-success):not(.btn-danger):not(.btn-warning) {
782
+ background-color: #3d4453 !important;
783
+ border: 2px solid #6c7a8c !important;
784
+ color: #ffffff !important;
785
+ }
786
+
787
+ .card .btn:not(.btn-primary):not(.btn-success):not(.btn-danger):not(.btn-warning):hover,
788
+ a.btn:not(.btn-primary):not(.btn-success):not(.btn-danger):not(.btn-warning):hover {
789
+ background-color: var(--magnax-accent-blue) !important;
790
+ border-color: var(--magnax-accent-blue) !important;
791
+ }
792
+
793
+ /* Ensure all btn text is white */
794
+ .btn {
795
+ color: #ffffff !important;
796
+ }
797
+
798
+ /* Keep button icons colorful - DO NOT override SVG fill colors */
799
+ /* Button SVG paths should use their inline fill attributes */
800
+
801
+ /* Only make refresh icons white (they use stroke="currentColor") */
802
+ .card-actions .btn svg[stroke="currentColor"],
803
+ .btn-actions .btn svg[stroke="currentColor"],
804
+ .apm-btn-list .btn svg[stroke="currentColor"] {
805
+ stroke: #ffffff !important;
806
+ }
807
+
808
+ /* ==================== Tab Navigation ==================== */
809
+ .nav-tabs {
810
+ border-bottom-color: var(--magnax-border-weak) !important;
811
+ }
812
+
813
+ .nav-tabs .nav-link {
814
+ color: var(--magnax-text-secondary) !important;
815
+ border-color: transparent !important;
816
+ }
817
+
818
+ .nav-tabs .nav-link:hover {
819
+ border-color: var(--magnax-border-weak) !important;
820
+ color: var(--magnax-text-primary) !important;
821
+ }
822
+
823
+ .nav-tabs .nav-link.active {
824
+ background-color: var(--magnax-card-bg) !important;
825
+ border-color: var(--magnax-border-weak) var(--magnax-border-weak) var(--magnax-card-bg) !important;
826
+ color: var(--magnax-accent-green) !important;
827
+ }
828
+
829
+ .tab-content {
830
+ background-color: var(--magnax-card-bg) !important;
831
+ }
832
+
833
+ .tab-pane {
834
+ background-color: var(--magnax-card-bg) !important;
835
+ }
836
+
837
+ .card-tabs .nav-tabs {
838
+ background-color: var(--magnax-main-bg) !important;
839
+ }
840
+
841
+ /* ==================== Modal ==================== */
842
+ .modal-content {
843
+ background-color: var(--magnax-card-bg) !important;
844
+ border: 1px solid var(--magnax-border-weak) !important;
845
+ }
846
+
847
+ .modal-header {
848
+ border-bottom-color: var(--magnax-border-weak) !important;
849
+ }
850
+
851
+ .modal-title {
852
+ color: var(--magnax-text-primary) !important;
853
+ }
854
+
855
+ .modal-body {
856
+ color: var(--magnax-text-primary) !important;
857
+ }
858
+
859
+ .modal-footer {
860
+ border-top-color: var(--magnax-border-weak) !important;
861
+ }
862
+
863
+ .btn-close {
864
+ filter: invert(1) !important;
865
+ }
866
+
867
+ /* ==================== Offcanvas ==================== */
868
+ .offcanvas {
869
+ background-color: var(--magnax-card-bg) !important;
870
+ border-left: 1px solid var(--magnax-border-weak) !important;
871
+ }
872
+
873
+ /* Override layout-boxed restriction on offcanvas */
874
+ .offcanvas.layout-boxed {
875
+ max-width: 100% !important;
876
+ }
877
+
878
+ .offcanvas-header {
879
+ border-bottom: 1px solid var(--magnax-border-weak) !important;
880
+ }
881
+
882
+ .offcanvas-title {
883
+ color: var(--magnax-text-primary) !important;
884
+ }
885
+
886
+ .offcanvas-body {
887
+ color: var(--magnax-text-primary) !important;
888
+ }
889
+
890
+ /* ==================== SweetAlert2 ==================== */
891
+ .swal2-popup {
892
+ background-color: var(--magnax-card-bg) !important;
893
+ color: var(--magnax-text-primary) !important;
894
+ border: 1px solid var(--magnax-border-weak) !important;
895
+ }
896
+
897
+ .swal2-title {
898
+ color: var(--magnax-text-primary) !important;
899
+ }
900
+
901
+ .swal2-html-container {
902
+ color: var(--magnax-text-secondary) !important;
903
+ }
904
+
905
+ .swal2-confirm {
906
+ background-color: var(--magnax-accent-blue) !important;
907
+ border-color: var(--magnax-accent-blue) !important;
908
+ }
909
+
910
+ .swal2-cancel {
911
+ background-color: var(--magnax-input-bg) !important;
912
+ border-color: var(--magnax-border-weak) !important;
913
+ color: var(--magnax-text-primary) !important;
914
+ }
915
+
916
+ .swal2-timer-progress-bar {
917
+ background-color: var(--magnax-accent-green) !important;
918
+ }
919
+
920
+ .swal2-loader {
921
+ border-color: var(--magnax-accent-blue) transparent var(--magnax-accent-blue) transparent !important;
922
+ }
923
+
924
+ /* ==================== Footer ==================== */
925
+ .footer {
926
+ background-color: var(--magnax-main-bg) !important;
927
+ border-top: 1px solid var(--magnax-border-weak) !important;
928
+ color: var(--magnax-text-secondary) !important;
929
+ }
930
+
931
+ .footer a {
932
+ color: var(--magnax-text-secondary) !important;
933
+ }
934
+
935
+ .footer a:hover {
936
+ color: var(--magnax-accent-green) !important;
937
+ }
938
+
939
+ /* ==================== Page Title ==================== */
940
+ .page-title {
941
+ color: var(--magnax-text-primary) !important;
942
+ }
943
+
944
+ .page-header {
945
+ border-bottom-color: var(--magnax-border-weak) !important;
946
+ }
947
+
948
+ /* ==================== Text Utilities ==================== */
949
+ .text-muted {
950
+ color: #cccccc !important;
951
+ }
952
+
953
+ /* Force white text on labels and spans */
954
+ label, span, p, div, td, th, li, strong, small {
955
+ color: #ffffff;
956
+ }
957
+
958
+ .text-primary {
959
+ color: var(--magnax-accent-blue) !important;
960
+ }
961
+
962
+ .text-success {
963
+ color: var(--magnax-accent-green) !important;
964
+ }
965
+
966
+ .text-warning {
967
+ color: var(--magnax-accent-orange) !important;
968
+ }
969
+
970
+ .text-danger {
971
+ color: var(--magnax-accent-red) !important;
972
+ }
973
+
974
+ /* ==================== Alerts ==================== */
975
+ .alert-success {
976
+ background-color: rgba(115, 191, 105, 0.15) !important;
977
+ border-color: var(--magnax-accent-green) !important;
978
+ color: var(--magnax-accent-green) !important;
979
+ }
980
+
981
+ .alert-warning {
982
+ background-color: rgba(255, 152, 48, 0.15) !important;
983
+ border-color: var(--magnax-accent-orange) !important;
984
+ color: var(--magnax-accent-orange) !important;
985
+ }
986
+
987
+ .alert-danger {
988
+ background-color: rgba(242, 73, 92, 0.15) !important;
989
+ border-color: var(--magnax-accent-red) !important;
990
+ color: var(--magnax-accent-red) !important;
991
+ }
992
+
993
+ .alert-info {
994
+ background-color: rgba(50, 116, 217, 0.15) !important;
995
+ border-color: var(--magnax-accent-blue) !important;
996
+ color: var(--magnax-accent-blue) !important;
997
+ }
998
+
999
+ /* ==================== Badge ==================== */
1000
+ .badge {
1001
+ background-color: var(--magnax-input-bg) !important;
1002
+ color: var(--magnax-text-primary) !important;
1003
+ }
1004
+
1005
+ .badge.bg-primary {
1006
+ background-color: var(--magnax-accent-blue) !important;
1007
+ }
1008
+
1009
+ .badge.bg-success {
1010
+ background-color: var(--magnax-accent-green) !important;
1011
+ }
1012
+
1013
+ .badge.bg-warning {
1014
+ background-color: var(--magnax-accent-orange) !important;
1015
+ }
1016
+
1017
+ .badge.bg-danger {
1018
+ background-color: var(--magnax-accent-red) !important;
1019
+ }
1020
+
1021
+ /* ==================== Progress Bar ==================== */
1022
+ .progress {
1023
+ background-color: var(--magnax-input-bg) !important;
1024
+ }
1025
+
1026
+ .progress-bar {
1027
+ background-color: var(--magnax-accent-green) !important;
1028
+ }
1029
+
1030
+ /* ==================== Popover ==================== */
1031
+ .popover {
1032
+ background-color: var(--magnax-card-bg) !important;
1033
+ border-color: var(--magnax-border-weak) !important;
1034
+ }
1035
+
1036
+ .popover-header {
1037
+ background-color: var(--magnax-main-bg) !important;
1038
+ border-bottom-color: var(--magnax-border-weak) !important;
1039
+ color: var(--magnax-text-primary) !important;
1040
+ }
1041
+
1042
+ .popover-body {
1043
+ color: var(--magnax-text-primary) !important;
1044
+ }
1045
+
1046
+ .bs-popover-top > .popover-arrow::after,
1047
+ .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after {
1048
+ border-top-color: var(--magnax-card-bg) !important;
1049
+ }
1050
+
1051
+ .bs-popover-bottom > .popover-arrow::after,
1052
+ .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after {
1053
+ border-bottom-color: var(--magnax-card-bg) !important;
1054
+ }
1055
+
1056
+ /* ==================== Tooltip ==================== */
1057
+ .tooltip-inner {
1058
+ background-color: var(--magnax-card-bg) !important;
1059
+ border: 1px solid var(--magnax-border-weak) !important;
1060
+ color: var(--magnax-text-primary) !important;
1061
+ }
1062
+
1063
+ /* ==================== Scrollbar ==================== */
1064
+ ::-webkit-scrollbar {
1065
+ width: 8px;
1066
+ height: 8px;
1067
+ }
1068
+
1069
+ ::-webkit-scrollbar-track {
1070
+ background: var(--magnax-main-bg);
1071
+ }
1072
+
1073
+ ::-webkit-scrollbar-thumb {
1074
+ background: var(--magnax-border-medium);
1075
+ border-radius: 4px;
1076
+ }
1077
+
1078
+ ::-webkit-scrollbar-thumb:hover {
1079
+ background: var(--magnax-text-disabled);
1080
+ }
1081
+
1082
+ /* ==================== Links ==================== */
1083
+ a {
1084
+ color: #ffffff;
1085
+ }
1086
+
1087
+ a:hover {
1088
+ color: var(--magnax-accent-green);
1089
+ }
1090
+
1091
+ a.nav-link,
1092
+ a.btn {
1093
+ color: #ffffff !important;
1094
+ }
1095
+
1096
+ /* ==================== Horizontal Rule ==================== */
1097
+ hr {
1098
+ border-color: var(--magnax-border-weak) !important;
1099
+ }
1100
+
1101
+ /* ==================== List Group ==================== */
1102
+ .list-group-item {
1103
+ background-color: var(--magnax-card-bg) !important;
1104
+ border-color: var(--magnax-border-weak) !important;
1105
+ color: var(--magnax-text-primary) !important;
1106
+ }
1107
+
1108
+ .list-group-item:hover {
1109
+ background-color: var(--magnax-hover-bg) !important;
1110
+ }
1111
+
1112
+ .list-inline-dots .list-inline-item::before {
1113
+ color: var(--magnax-text-disabled) !important;
1114
+ }
1115
+
1116
+ /* ==================== Code & Pre ==================== */
1117
+ code {
1118
+ background-color: var(--magnax-input-bg) !important;
1119
+ color: var(--magnax-accent-orange) !important;
1120
+ }
1121
+
1122
+ pre {
1123
+ background-color: var(--magnax-main-bg) !important;
1124
+ border: 1px solid var(--magnax-border-weak) !important;
1125
+ color: var(--magnax-text-primary) !important;
1126
+ }
1127
+
1128
+ /* Highlight.js Override */
1129
+ .hljs {
1130
+ background-color: var(--magnax-main-bg) !important;
1131
+ color: var(--magnax-text-primary) !important;
1132
+ }
1133
+
1134
+ /* ==================== SVG Icons ==================== */
1135
+ /* Only apply to non-button SVGs in navbar/offcanvas */
1136
+ .navbar > .container-xl > a svg path,
1137
+ .navbar > .container-xl > .nav-item > a:not(.btn) svg path,
1138
+ .offcanvas svg path {
1139
+ fill: var(--magnax-text-secondary) !important;
1140
+ }
1141
+
1142
+ .navbar > .container-xl > a svg:hover path,
1143
+ .navbar > .container-xl > .nav-item > a:not(.btn) svg:hover path,
1144
+ .offcanvas svg:hover path {
1145
+ fill: var(--magnax-text-primary) !important;
1146
+ }
1147
+
1148
+ /* Keep colored SVGs as-is for buttons - don't set any fill */
1149
+
1150
+ /* Card action button icons - keep colorful SVGs */
1151
+ /* Only apply white to refresh icons (stroke-based), not colorful fill-based icons */
1152
+ .card-actions .btn .icon,
1153
+ .btn-actions .btn .icon,
1154
+ .apm-btn-list .btn .icon {
1155
+ color: #ffffff !important;
1156
+ }
1157
+
1158
+ /* Refresh icon uses stroke - make it white */
1159
+ .card-actions .btn svg[stroke="currentColor"],
1160
+ .btn-actions .btn svg[stroke="currentColor"],
1161
+ .apm-btn-list .btn svg[stroke="currentColor"] {
1162
+ stroke: #ffffff !important;
1163
+ }
1164
+
1165
+ /* Button SVG icons keep their original inline fill colors - no CSS override needed */
1166
+
1167
+ /* ==================== Specific Page Styles ==================== */
1168
+
1169
+ /* Index Page - Device Selection Area */
1170
+ .device-selection {
1171
+ background-color: var(--magnax-card-bg) !important;
1172
+ }
1173
+
1174
+ /* Report Page */
1175
+ .report-container {
1176
+ background-color: var(--magnax-card-bg) !important;
1177
+ }
1178
+
1179
+ /* Analysis Page */
1180
+ .analysis-container {
1181
+ background-color: var(--magnax-card-bg) !important;
1182
+ }
1183
+
1184
+ /* ==================== Metric Cards ==================== */
1185
+ .metric-card {
1186
+ background-color: var(--magnax-card-bg) !important;
1187
+ border: 1px solid var(--magnax-border-weak) !important;
1188
+ border-radius: 4px;
1189
+ padding: 16px;
1190
+ }
1191
+
1192
+ .metric-card .metric-value {
1193
+ color: var(--magnax-text-primary) !important;
1194
+ font-size: 24px;
1195
+ font-weight: 600;
1196
+ }
1197
+
1198
+ .metric-card .metric-label {
1199
+ color: var(--magnax-text-secondary) !important;
1200
+ font-size: 12px;
1201
+ text-transform: uppercase;
1202
+ }
1203
+
1204
+ .metric-card.cpu .metric-value {
1205
+ color: var(--magnax-chart-cpu) !important;
1206
+ }
1207
+
1208
+ .metric-card.memory .metric-value {
1209
+ color: var(--magnax-chart-memory) !important;
1210
+ }
1211
+
1212
+ .metric-card.fps .metric-value {
1213
+ color: var(--magnax-chart-fps) !important;
1214
+ }
1215
+
1216
+ .metric-card.gpu .metric-value {
1217
+ color: var(--magnax-chart-gpu) !important;
1218
+ }
1219
+
1220
+ .metric-card.battery .metric-value {
1221
+ color: var(--magnax-chart-battery) !important;
1222
+ }
1223
+
1224
+ .metric-card.network .metric-value {
1225
+ color: var(--magnax-chart-network-tx) !important;
1226
+ }
1227
+
1228
+ /* ==================== Responsive Adjustments ==================== */
1229
+ @media (max-width: 768px) {
1230
+ .navbar {
1231
+ background-color: var(--magnax-main-bg) !important;
1232
+ }
1233
+
1234
+ .offcanvas {
1235
+ width: 100% !important;
1236
+ }
1237
+ }