kernelbot 1.0.37 → 1.0.38

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,700 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700;800;900&family=Share+Tech+Mono&family=Rajdhani:wght@300;400;500;600;700&display=swap');
2
+
3
+ :root {
4
+ --bg: #05080c;
5
+ --bg2: #080e18;
6
+ --panel-bg: rgba(8,14,24,0.92);
7
+ --panel-border: rgba(57,255,20,0.10);
8
+ --panel-border-hover: rgba(57,255,20,0.30);
9
+ --accent: #39ff14;
10
+ --accent-dim: rgba(57,255,20,0.45);
11
+ --accent-bg: rgba(57,255,20,0.04);
12
+ --accent-bg2: rgba(57,255,20,0.08);
13
+ --amber: #ffb000;
14
+ --red: #ff3333;
15
+ --magenta: #ff00ff;
16
+ --blue: #4488ff;
17
+ --dim: #3a5068;
18
+ --text: #8fa8bc;
19
+ --text-bright: #d0e0f0;
20
+ --sidebar-w: 56px;
21
+ --topbar-h: 42px;
22
+ --rightbar-w: 52px;
23
+ --font-hud: 'Orbitron', 'Share Tech Mono', monospace;
24
+ --font-mono: 'Share Tech Mono', 'Fira Code', monospace;
25
+ --font-ui: 'Rajdhani', 'Share Tech Mono', sans-serif;
26
+ }
27
+
28
+ * { margin: 0; padding: 0; box-sizing: border-box; }
29
+
30
+ body {
31
+ background: var(--bg);
32
+ color: var(--text);
33
+ font-family: var(--font-mono);
34
+ font-size: 12px;
35
+ line-height: 1.5;
36
+ overflow-x: hidden;
37
+ min-height: 100vh;
38
+ }
39
+
40
+ /* ═══════ PARTICLE NETWORK CANVAS ═══════ */
41
+ #particle-canvas {
42
+ position: fixed;
43
+ top: 0; left: 0;
44
+ width: 100%; height: 100%;
45
+ z-index: 0;
46
+ pointer-events: none;
47
+ }
48
+
49
+ /* ═══════ SCANLINES ═══════ */
50
+ .scanlines {
51
+ position: fixed; inset: 0;
52
+ background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.04) 2px, rgba(0,0,0,0.04) 4px);
53
+ pointer-events: none;
54
+ z-index: 9999;
55
+ }
56
+
57
+ /* ═══════ SIDEBAR ═══════ */
58
+ .sidebar {
59
+ position: fixed;
60
+ top: 0; left: 0; bottom: 0;
61
+ width: var(--sidebar-w);
62
+ background: var(--bg2);
63
+ border-right: 1px solid var(--panel-border);
64
+ z-index: 100;
65
+ display: flex;
66
+ flex-direction: column;
67
+ align-items: center;
68
+ padding: 12px 0;
69
+ gap: 2px;
70
+ }
71
+
72
+ .sidebar-logo {
73
+ width: 32px; height: 32px;
74
+ margin-bottom: 12px;
75
+ position: relative;
76
+ }
77
+ .sidebar-logo svg { width: 100%; height: 100%; }
78
+
79
+ .sidebar-nav {
80
+ display: flex;
81
+ flex-direction: column;
82
+ gap: 2px;
83
+ width: 100%;
84
+ flex: 1;
85
+ }
86
+
87
+ .nav-item {
88
+ display: flex;
89
+ flex-direction: column;
90
+ align-items: center;
91
+ justify-content: center;
92
+ padding: 8px 0;
93
+ cursor: pointer;
94
+ position: relative;
95
+ color: var(--dim);
96
+ transition: color 0.2s;
97
+ text-decoration: none;
98
+ }
99
+ .nav-item:hover, .nav-item.active { color: var(--accent); }
100
+ .nav-item.active::before {
101
+ content: '';
102
+ position: absolute;
103
+ left: 0; top: 4px; bottom: 4px;
104
+ width: 2px;
105
+ background: var(--accent);
106
+ box-shadow: 0 0 8px var(--accent);
107
+ }
108
+ .nav-item svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
109
+ .nav-label { font-family: var(--font-hud); font-size: 7px; letter-spacing: 1px; margin-top: 3px; }
110
+
111
+ /* Sidebar gauges */
112
+ .sidebar-gauges {
113
+ margin-top: auto;
114
+ display: flex;
115
+ flex-direction: column;
116
+ align-items: center;
117
+ gap: 8px;
118
+ padding-bottom: 8px;
119
+ }
120
+ .mini-gauge { position: relative; width: 38px; height: 38px; }
121
+ .mini-gauge svg { width: 100%; height: 100%; transform: rotate(-90deg); }
122
+ .mini-gauge .track { fill: none; stroke: rgba(57,255,20,0.08); stroke-width: 3; }
123
+ .mini-gauge .fill { fill: none; stroke: var(--accent); stroke-width: 3; stroke-linecap: round; transition: stroke-dashoffset 0.8s ease; }
124
+ .mini-gauge .fill.amber { stroke: var(--amber); }
125
+ .mini-gauge .fill.red { stroke: var(--red); }
126
+ .mini-gauge-label {
127
+ position: absolute; inset: 0;
128
+ display: flex; flex-direction: column;
129
+ align-items: center; justify-content: center;
130
+ font-family: var(--font-hud);
131
+ }
132
+ .mini-gauge-label .val { font-size: 9px; font-weight: 700; color: var(--accent); }
133
+ .mini-gauge-label .lbl { font-size: 6px; color: var(--dim); letter-spacing: 0.5px; }
134
+
135
+ .sidebar-clock {
136
+ font-family: var(--font-hud);
137
+ font-size: 8px;
138
+ color: var(--dim);
139
+ letter-spacing: 1px;
140
+ writing-mode: vertical-lr;
141
+ text-orientation: mixed;
142
+ margin-top: 8px;
143
+ padding-bottom: 4px;
144
+ }
145
+
146
+ .sidebar-conn {
147
+ width: 8px; height: 8px;
148
+ border-radius: 50%;
149
+ background: var(--red);
150
+ margin-top: 8px;
151
+ transition: all 0.3s;
152
+ }
153
+ .sidebar-conn.connected { background: var(--accent); box-shadow: 0 0 10px var(--accent); }
154
+
155
+ /* ═══════ TOP BAR ═══════ */
156
+ .top-bar {
157
+ position: fixed;
158
+ top: 0;
159
+ left: var(--sidebar-w);
160
+ right: 0;
161
+ height: var(--topbar-h);
162
+ background: var(--bg2);
163
+ border-bottom: 1px solid var(--panel-border);
164
+ z-index: 100;
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: space-between;
168
+ padding: 0 16px;
169
+ font-family: var(--font-hud);
170
+ }
171
+ .top-bar::after {
172
+ content: '';
173
+ position: absolute;
174
+ bottom: -1px;
175
+ left: 0; right: 0;
176
+ height: 1px;
177
+ background: linear-gradient(90deg, var(--accent), rgba(57,255,20,0.15) 30%, transparent 70%, rgba(57,255,20,0.15) 90%, var(--accent));
178
+ }
179
+ .top-bar-left {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 12px;
183
+ }
184
+ .top-bar-title {
185
+ font-size: 10px;
186
+ font-weight: 700;
187
+ letter-spacing: 3px;
188
+ color: var(--accent);
189
+ }
190
+ .top-bar-sep {
191
+ color: rgba(57,255,20,0.2);
192
+ font-size: 12px;
193
+ font-weight: 300;
194
+ }
195
+ .top-bar-nav {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 6px;
199
+ margin-left: 8px;
200
+ }
201
+ .top-bar-nav-item {
202
+ font-family: var(--font-hud);
203
+ font-size: 8px;
204
+ letter-spacing: 1.5px;
205
+ color: var(--dim);
206
+ padding: 4px 8px;
207
+ cursor: pointer;
208
+ transition: color 0.2s, background 0.2s;
209
+ border: 1px solid transparent;
210
+ text-decoration: none;
211
+ }
212
+ .top-bar-nav-item:hover { color: var(--accent); background: var(--accent-bg); }
213
+ .top-bar-nav-item.active { color: var(--accent); border-color: var(--panel-border); background: var(--accent-bg); }
214
+ .top-bar-right {
215
+ display: flex;
216
+ align-items: center;
217
+ gap: 16px;
218
+ font-size: 10px;
219
+ color: var(--dim);
220
+ }
221
+ .top-bar-right .val { color: var(--accent); }
222
+ .top-bar-right .sep { color: rgba(57,255,20,0.15); }
223
+ .top-bar-conn {
224
+ width: 7px; height: 7px;
225
+ border-radius: 50%;
226
+ background: var(--red);
227
+ transition: all 0.3s;
228
+ }
229
+ .top-bar-conn.connected { background: var(--accent); box-shadow: 0 0 8px var(--accent); }
230
+
231
+ /* ═══════ RIGHT BAR ═══════ */
232
+ .right-bar {
233
+ position: fixed;
234
+ top: var(--topbar-h);
235
+ right: 0;
236
+ bottom: 0;
237
+ width: var(--rightbar-w);
238
+ background: var(--bg2);
239
+ border-left: 1px solid var(--panel-border);
240
+ z-index: 100;
241
+ display: flex;
242
+ flex-direction: column;
243
+ align-items: center;
244
+ padding: 14px 0;
245
+ gap: 4px;
246
+ }
247
+ .right-stat {
248
+ display: flex;
249
+ flex-direction: column;
250
+ align-items: center;
251
+ gap: 2px;
252
+ padding: 6px 0;
253
+ width: 100%;
254
+ cursor: default;
255
+ transition: background 0.2s;
256
+ }
257
+ .right-stat:hover { background: var(--accent-bg); }
258
+ .right-stat .r-val {
259
+ font-family: var(--font-hud);
260
+ font-size: 13px;
261
+ font-weight: 700;
262
+ color: var(--accent);
263
+ line-height: 1;
264
+ }
265
+ .right-stat .r-val.zero { color: var(--dim); }
266
+ .right-stat .r-val.warn { color: var(--amber); }
267
+ .right-stat .r-lbl {
268
+ font-family: var(--font-hud);
269
+ font-size: 6px;
270
+ color: var(--dim);
271
+ letter-spacing: 1px;
272
+ }
273
+ .right-stat .r-dot {
274
+ width: 6px; height: 6px;
275
+ border-radius: 50%;
276
+ margin: 2px 0;
277
+ }
278
+ .r-dot.on { background: var(--accent); box-shadow: 0 0 8px var(--accent); }
279
+ .r-dot.paused { background: var(--amber); box-shadow: 0 0 8px var(--amber); animation: blink 2s ease-in-out infinite; }
280
+ .r-dot.off { background: var(--dim); }
281
+ .right-divider {
282
+ width: 28px;
283
+ height: 1px;
284
+ background: var(--panel-border);
285
+ margin: 4px 0;
286
+ }
287
+ .right-bar-clock {
288
+ margin-top: auto;
289
+ font-family: var(--font-hud);
290
+ font-size: 8px;
291
+ color: var(--dim);
292
+ letter-spacing: 1px;
293
+ writing-mode: vertical-lr;
294
+ text-orientation: mixed;
295
+ padding-bottom: 4px;
296
+ }
297
+
298
+ /* ═══════ MAIN CONTENT ═══════ */
299
+ .main {
300
+ margin-left: var(--sidebar-w);
301
+ margin-right: var(--rightbar-w);
302
+ padding-top: var(--topbar-h);
303
+ position: relative;
304
+ z-index: 1;
305
+ min-height: 100vh;
306
+ padding-bottom: 32px;
307
+ }
308
+
309
+ /* ═══════ HERO HEADER ═══════ */
310
+ .hero-bar {
311
+ position: relative;
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ padding: 18px 24px;
316
+ border-bottom: 1px solid var(--panel-border);
317
+ overflow: hidden;
318
+ min-height: 70px;
319
+ }
320
+ .hero-bar::after {
321
+ content: '';
322
+ position: absolute;
323
+ bottom: -1px;
324
+ left: 0; right: 0;
325
+ height: 1px;
326
+ background: linear-gradient(90deg, transparent, var(--accent-dim), transparent);
327
+ }
328
+
329
+ .hero-pulse {
330
+ position: relative;
331
+ z-index: 2;
332
+ display: flex;
333
+ align-items: center;
334
+ justify-content: center;
335
+ gap: 24px;
336
+ flex-wrap: wrap;
337
+ }
338
+ .pulse-stat {
339
+ display: flex;
340
+ flex-direction: column;
341
+ align-items: center;
342
+ gap: 1px;
343
+ min-width: 60px;
344
+ }
345
+ .pulse-label {
346
+ font-family: var(--font-hud);
347
+ font-size: 7px;
348
+ letter-spacing: 2px;
349
+ color: var(--dim);
350
+ }
351
+ .pulse-val {
352
+ font-family: var(--font-hud);
353
+ font-size: 13px;
354
+ font-weight: 700;
355
+ color: var(--accent);
356
+ letter-spacing: 1px;
357
+ text-shadow: 0 0 8px rgba(57,255,20,0.3);
358
+ }
359
+ .pulse-val.idle { color: var(--dim); text-shadow: none; }
360
+ .pulse-val.active { color: var(--accent); animation: pulseGlow 2s ease-in-out infinite; }
361
+ .pulse-val.warn { color: var(--amber); text-shadow: 0 0 8px rgba(255,176,0,0.3); }
362
+
363
+ /* Waveform canvas — full hero background */
364
+ #waveform-canvas {
365
+ position: absolute;
366
+ top: 0; left: 0;
367
+ width: 100%; height: 100%;
368
+ opacity: 0.25;
369
+ pointer-events: none;
370
+ }
371
+
372
+ /* ═══════ GAUGE ROW ═══════ */
373
+ .gauge-row {
374
+ display: flex;
375
+ justify-content: center;
376
+ gap: 24px;
377
+ padding: 20px 24px;
378
+ border-bottom: 1px solid var(--panel-border);
379
+ flex-wrap: wrap;
380
+ }
381
+
382
+ .gauge-widget {
383
+ display: flex;
384
+ flex-direction: column;
385
+ align-items: center;
386
+ gap: 4px;
387
+ }
388
+ .gauge-ring { position: relative; width: 90px; height: 90px; }
389
+ .gauge-ring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
390
+ .gauge-ring .track { fill: none; stroke: var(--accent-bg2); stroke-width: 4; }
391
+ .gauge-ring .fill { fill: none; stroke: var(--accent); stroke-width: 4; stroke-linecap: round; transition: stroke-dashoffset 0.8s cubic-bezier(0.22, 1, 0.36, 1); filter: drop-shadow(0 0 4px var(--accent)); }
392
+ .gauge-ring .fill.amber { stroke: var(--amber); filter: drop-shadow(0 0 4px var(--amber)); }
393
+ .gauge-ring .fill.red { stroke: var(--red); filter: drop-shadow(0 0 4px var(--red)); }
394
+ .gauge-center {
395
+ position: absolute; inset: 0;
396
+ display: flex; flex-direction: column;
397
+ align-items: center; justify-content: center;
398
+ }
399
+ .gauge-center .pct { font-family: var(--font-hud); font-size: 18px; font-weight: 700; color: var(--accent); }
400
+ .gauge-center .pct.amber { color: var(--amber); }
401
+ .gauge-center .pct.red { color: var(--red); }
402
+ .gauge-center .sub { font-family: var(--font-mono); font-size: 8px; color: var(--dim); }
403
+ .gauge-label { font-family: var(--font-hud); font-size: 8px; letter-spacing: 2px; color: var(--dim); }
404
+
405
+ /* ═══════ CONTENT AREA ═══════ */
406
+ .content {
407
+ padding: 12px;
408
+ display: grid;
409
+ grid-template-columns: repeat(12, 1fr);
410
+ gap: 10px;
411
+ }
412
+
413
+ .span-8 { grid-column: span 8; }
414
+ .span-6 { grid-column: span 6; }
415
+ .span-4 { grid-column: span 4; }
416
+ .span-3 { grid-column: span 3; }
417
+ .span-12 { grid-column: span 12; }
418
+
419
+ /* ═══════ PANEL ═══════ */
420
+ .panel {
421
+ position: relative;
422
+ background: var(--panel-bg);
423
+ border: 1px solid var(--panel-border);
424
+ overflow: hidden;
425
+ transition: border-color 0.3s, box-shadow 0.3s;
426
+ }
427
+ .panel:hover {
428
+ border-color: var(--panel-border-hover);
429
+ box-shadow: 0 0 20px rgba(57,255,20,0.04), inset 0 0 20px rgba(57,255,20,0.01);
430
+ }
431
+
432
+ /* Corner clips */
433
+ .panel::before {
434
+ content: '';
435
+ position: absolute;
436
+ top: 0; right: 0;
437
+ border-style: solid;
438
+ border-width: 0 14px 14px 0;
439
+ border-color: transparent var(--bg) transparent transparent;
440
+ z-index: 5;
441
+ }
442
+ .panel::after {
443
+ content: '';
444
+ position: absolute;
445
+ top: 0; right: 14px;
446
+ width: 0; height: 14px;
447
+ border-right: 1px solid var(--panel-border);
448
+ transform: rotate(45deg);
449
+ transform-origin: top right;
450
+ z-index: 4;
451
+ pointer-events: none;
452
+ }
453
+
454
+ .panel-header {
455
+ display: flex;
456
+ align-items: center;
457
+ gap: 8px;
458
+ padding: 6px 12px;
459
+ background: linear-gradient(90deg, var(--accent-bg), transparent 70%);
460
+ border-bottom: 1px solid var(--panel-border);
461
+ font-family: var(--font-hud);
462
+ font-size: 9px;
463
+ font-weight: 600;
464
+ letter-spacing: 2px;
465
+ color: var(--accent);
466
+ text-transform: uppercase;
467
+ user-select: none;
468
+ position: relative;
469
+ }
470
+ .panel-header::after {
471
+ content: '';
472
+ position: absolute;
473
+ bottom: -1px; left: 0;
474
+ width: 50px; height: 1px;
475
+ background: var(--accent);
476
+ box-shadow: 0 0 6px var(--accent);
477
+ }
478
+
479
+ .panel-header .dot {
480
+ width: 4px; height: 4px;
481
+ border-radius: 50%;
482
+ background: var(--accent);
483
+ box-shadow: 0 0 6px var(--accent);
484
+ animation: blink 3s ease-in-out infinite;
485
+ }
486
+
487
+ .panel-header .tag {
488
+ margin-left: auto;
489
+ font-family: var(--font-mono);
490
+ font-size: 8px;
491
+ color: var(--dim);
492
+ letter-spacing: 1px;
493
+ font-weight: 400;
494
+ }
495
+
496
+ .panel-body {
497
+ padding: 10px 12px;
498
+ max-height: 300px;
499
+ overflow-y: auto;
500
+ }
501
+ .panel-body.tall { max-height: 400px; }
502
+ .panel-body.short { max-height: 200px; }
503
+
504
+ .panel-body::-webkit-scrollbar { width: 3px; }
505
+ .panel-body::-webkit-scrollbar-track { background: transparent; }
506
+ .panel-body::-webkit-scrollbar-thumb { background: var(--accent-dim); border-radius: 2px; }
507
+
508
+ /* Scan sweep inside panels */
509
+ .panel .sweep {
510
+ position: absolute;
511
+ left: 0; right: 0;
512
+ height: 1px;
513
+ background: linear-gradient(90deg, transparent, rgba(57,255,20,0.06), transparent);
514
+ animation: sweepDown 10s linear infinite;
515
+ pointer-events: none;
516
+ z-index: 3;
517
+ }
518
+
519
+ /* ═══════ DATA ELEMENTS ═══════ */
520
+ .row { display: flex; justify-content: space-between; padding: 3px 0; border-bottom: 1px solid rgba(57,255,20,0.03); }
521
+ .row:last-child { border-bottom: none; }
522
+ .row .k { color: var(--dim); font-size: 11px; }
523
+ .row .v { color: var(--accent); text-align: right; font-size: 11px; }
524
+
525
+ .bar-track {
526
+ height: 5px;
527
+ background: var(--accent-bg);
528
+ margin: 3px 0;
529
+ overflow: hidden;
530
+ }
531
+ .bar-fill {
532
+ height: 100%;
533
+ transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1);
534
+ }
535
+ .bar-fill.green { background: linear-gradient(90deg, rgba(57,255,20,0.2), var(--accent)); }
536
+ .bar-fill.amber { background: linear-gradient(90deg, rgba(255,176,0,0.2), var(--amber)); }
537
+ .bar-fill.red { background: linear-gradient(90deg, rgba(255,51,51,0.2), var(--red)); }
538
+
539
+ .badge {
540
+ display: inline-block;
541
+ padding: 1px 6px;
542
+ font-family: var(--font-hud);
543
+ font-size: 8px;
544
+ font-weight: 600;
545
+ letter-spacing: 1px;
546
+ text-transform: uppercase;
547
+ border: 1px solid;
548
+ }
549
+ .badge.running { border-color: rgba(57,255,20,0.3); color: var(--accent); animation: pulseB 2s infinite; }
550
+ .badge.completed { border-color: rgba(57,255,20,0.2); color: var(--accent); }
551
+ .badge.failed { border-color: rgba(255,51,51,0.2); color: var(--red); }
552
+ .badge.cancelled { border-color: rgba(255,176,0,0.2); color: var(--amber); }
553
+ .badge.queued { border-color: rgba(58,74,90,0.3); color: var(--dim); }
554
+
555
+ .empty-msg { color: var(--dim); font-style: italic; text-align: center; padding: 20px 0; font-size: 11px; letter-spacing: 1px; }
556
+
557
+ /* ═══════ PANEL TABS ═══════ */
558
+ .panel-tabs {
559
+ display: flex;
560
+ gap: 1px;
561
+ padding: 0 12px;
562
+ margin: -1px 0 4px 0;
563
+ background: rgba(57,255,20,0.02);
564
+ border-bottom: 1px solid rgba(57,255,20,0.05);
565
+ }
566
+ .panel-tab {
567
+ padding: 3px 8px;
568
+ font-family: var(--font-hud);
569
+ font-size: 7px;
570
+ letter-spacing: 1px;
571
+ color: var(--dim);
572
+ cursor: pointer;
573
+ border-bottom: 1px solid transparent;
574
+ transition: color 0.2s, border-color 0.2s;
575
+ }
576
+ .panel-tab:hover { color: var(--text); }
577
+ .panel-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
578
+
579
+ /* ═══════ INTEGRATION STATUS BAR ═══════ */
580
+ .integrations-bar {
581
+ display: flex;
582
+ align-items: center;
583
+ justify-content: center;
584
+ gap: 16px;
585
+ padding: 8px 24px;
586
+ border-bottom: 1px solid var(--panel-border);
587
+ flex-wrap: wrap;
588
+ }
589
+ .integ-item {
590
+ display: flex;
591
+ align-items: center;
592
+ gap: 5px;
593
+ font-family: var(--font-hud);
594
+ font-size: 8px;
595
+ letter-spacing: 1px;
596
+ color: var(--dim);
597
+ }
598
+ .integ-dot {
599
+ width: 5px; height: 5px;
600
+ border-radius: 50%;
601
+ background: var(--dim);
602
+ }
603
+ .integ-dot.on { background: var(--accent); box-shadow: 0 0 6px var(--accent); }
604
+ .integ-dot.off { background: rgba(255,51,51,0.5); }
605
+
606
+ /* ═══════ LOG TICKER (bottom sticky) ═══════ */
607
+ .log-ticker {
608
+ position: fixed;
609
+ bottom: 0;
610
+ left: var(--sidebar-w);
611
+ right: 0;
612
+ height: 28px;
613
+ border-top: 1px solid var(--panel-border);
614
+ background: rgba(5,8,12,0.97);
615
+ overflow: hidden;
616
+ z-index: 101;
617
+ backdrop-filter: blur(8px);
618
+ -webkit-backdrop-filter: blur(8px);
619
+ }
620
+ .log-ticker .ticker-label {
621
+ position: absolute;
622
+ top: 0; left: 0; bottom: 0;
623
+ width: 80px;
624
+ background: linear-gradient(90deg, var(--bg2) 70%, transparent);
625
+ display: flex;
626
+ align-items: center;
627
+ justify-content: center;
628
+ font-family: var(--font-hud);
629
+ font-size: 8px;
630
+ letter-spacing: 2px;
631
+ color: var(--accent);
632
+ z-index: 2;
633
+ }
634
+ .log-ticker .ticker-label .dot-pulse {
635
+ width: 5px; height: 5px;
636
+ border-radius: 50%;
637
+ background: var(--accent);
638
+ margin-right: 6px;
639
+ animation: blink 1.5s ease-in-out infinite;
640
+ }
641
+ .ticker-track {
642
+ display: flex;
643
+ animation: tickerScroll var(--ticker-duration, 60s) linear infinite;
644
+ padding: 6px 0 6px 90px;
645
+ white-space: nowrap;
646
+ gap: 40px;
647
+ }
648
+ .ticker-item { font-size: 10px; white-space: nowrap; flex-shrink: 0; }
649
+ .ticker-item .ts { color: var(--dim); }
650
+ .ticker-item .lvl-error { color: var(--red); }
651
+ .ticker-item .lvl-warn { color: var(--amber); }
652
+ .ticker-item .lvl-info { color: var(--accent); }
653
+ .ticker-item .lvl-debug { color: var(--dim); }
654
+ .ticker-item .msg { color: var(--text); }
655
+
656
+ /* ═══════ KEYFRAME ANIMATIONS ═══════ */
657
+ @keyframes blink {
658
+ 0%, 100% { opacity: 0.4; }
659
+ 50% { opacity: 1; }
660
+ }
661
+ @keyframes pulseGlow {
662
+ 0%, 100% { text-shadow: 0 0 4px rgba(57,255,20,0.2); }
663
+ 50% { text-shadow: 0 0 12px rgba(57,255,20,0.5); }
664
+ }
665
+ @keyframes pulseB { 0%,100% { box-shadow: 0 0 2px rgba(57,255,20,0.1); } 50% { box-shadow: 0 0 10px rgba(57,255,20,0.3); } }
666
+ @keyframes sweepDown {
667
+ 0% { top: 0; opacity: 0; }
668
+ 5% { opacity: 1; }
669
+ 95% { opacity: 1; }
670
+ 100% { top: 100%; opacity: 0; }
671
+ }
672
+ @keyframes tickerScroll {
673
+ 0% { transform: translateX(0); }
674
+ 100% { transform: translateX(-50%); }
675
+ }
676
+
677
+ /* ═══════ RESPONSIVE ═══════ */
678
+ @media (max-width: 1100px) {
679
+ .right-bar { display: none; }
680
+ .main { margin-right: 0; }
681
+ .span-8, .span-6, .span-4, .span-3 { grid-column: span 6; }
682
+ .gauge-ring { width: 72px; height: 72px; }
683
+ .gauge-center .pct { font-size: 14px; }
684
+ .top-bar-nav { display: none; }
685
+ }
686
+ @media (max-width: 768px) {
687
+ .sidebar { display: none; }
688
+ .top-bar { left: 0; }
689
+ .right-bar { display: none; }
690
+ .main { margin-left: 0; margin-right: 0; padding-top: var(--topbar-h); }
691
+ .log-ticker { left: 0; }
692
+ .span-8, .span-6, .span-4, .span-3, .span-12 { grid-column: span 12; }
693
+ .content { grid-template-columns: 1fr; }
694
+ .hero-pulse { gap: 12px; }
695
+ .pulse-stat { min-width: 50px; }
696
+ .pulse-val { font-size: 11px; }
697
+ .gauge-row { gap: 12px; }
698
+ .gauge-ring { width: 64px; height: 64px; }
699
+ .gauge-center .pct { font-size: 12px; }
700
+ }