shadok-ai 0.16.13 → 0.16.14
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.
- package/package.json +1 -1
- package/public/index.html +15 -6
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -350,8 +350,13 @@
|
|
|
350
350
|
display: block; margin-top: 3px; opacity: 0.8;
|
|
351
351
|
white-space: normal; line-height: 1.45;
|
|
352
352
|
}
|
|
353
|
+
/* Top banners sit ABOVE the header, not over it: they are flow items at the
|
|
354
|
+
very top of the fixed flex chassis (inserted as body's first child), so they
|
|
355
|
+
push the header and everything below down instead of overlapping it. A
|
|
356
|
+
`position:fixed; top:0` strip used to float over the header and hide the
|
|
357
|
+
brand/gauges underneath. */
|
|
353
358
|
#updateBanner {
|
|
354
|
-
|
|
359
|
+
flex: 0 0 auto; width: 100%; z-index: 1000;
|
|
355
360
|
background: var(--amber); color: var(--on-accent);
|
|
356
361
|
font-family: var(--sans); font-size: 12px; text-align: center;
|
|
357
362
|
padding: 6px 12px;
|
|
@@ -359,7 +364,7 @@
|
|
|
359
364
|
/* The re-login reminder (sign-in within 48h / expired). Same top strip as the
|
|
360
365
|
update banner; its own id so the two never share styling by accident. */
|
|
361
366
|
#expiryBanner {
|
|
362
|
-
|
|
367
|
+
flex: 0 0 auto; width: 100%; z-index: 1000;
|
|
363
368
|
background: var(--amber); color: var(--on-accent);
|
|
364
369
|
font-family: var(--sans); font-size: 12px;
|
|
365
370
|
padding: 6px 12px;
|
|
@@ -4562,8 +4567,10 @@
|
|
|
4562
4567
|
swapped = true;
|
|
4563
4568
|
restoring = true; // freezes pushChannels AND persistGroups (both bail on it)
|
|
4564
4569
|
const bar = document.createElement("div");
|
|
4570
|
+
// A flow strip at the very top (first child) so it sits ABOVE the header
|
|
4571
|
+
// rather than floating over it — same placement as the update/expiry banners.
|
|
4565
4572
|
bar.style.cssText =
|
|
4566
|
-
"
|
|
4573
|
+
"flex:0 0 auto;width:100%;z-index:99999;background:#b23b3b;color:#fff;" +
|
|
4567
4574
|
"padding:10px 14px;font:14px system-ui;text-align:center";
|
|
4568
4575
|
bar.textContent = "This cockpit was replaced by another instance on this port — reload to reconnect. ";
|
|
4569
4576
|
const btn = document.createElement("button");
|
|
@@ -4571,7 +4578,7 @@
|
|
|
4571
4578
|
btn.style.cssText = "margin-left:8px;padding:3px 10px;cursor:pointer";
|
|
4572
4579
|
btn.addEventListener("click", () => location.reload());
|
|
4573
4580
|
bar.appendChild(btn);
|
|
4574
|
-
document.body.
|
|
4581
|
+
document.body.insertBefore(bar, document.body.firstChild);
|
|
4575
4582
|
}
|
|
4576
4583
|
function pushChannels(list) {
|
|
4577
4584
|
if (restoring || swapped) return; // never overwrite the server list with a partial one, nor a foreign instance's
|
|
@@ -7674,7 +7681,8 @@
|
|
|
7674
7681
|
btn.textContent = "Re-login now";
|
|
7675
7682
|
btn.addEventListener("click", () => openAuthCard(true));
|
|
7676
7683
|
el.append(span, btn);
|
|
7677
|
-
|
|
7684
|
+
// First child → above the header in the flex chassis, not floating over it.
|
|
7685
|
+
document.body.insertBefore(el, document.body.firstChild);
|
|
7678
7686
|
}
|
|
7679
7687
|
// Expired is an escalation, not just a reminder — turn the strip red.
|
|
7680
7688
|
el.style.background = w.expired ? "var(--err)" : "";
|
|
@@ -7867,7 +7875,8 @@
|
|
|
7867
7875
|
if (!el) {
|
|
7868
7876
|
el = document.createElement("div");
|
|
7869
7877
|
el.id = "updateBanner";
|
|
7870
|
-
|
|
7878
|
+
// First child → above the header in the flex chassis, not floating over it.
|
|
7879
|
+
document.body.insertBefore(el, document.body.firstChild);
|
|
7871
7880
|
}
|
|
7872
7881
|
el.textContent = "Updating to v" + version + "… the page will reload automatically.";
|
|
7873
7882
|
}
|