update sigil
CI / frontend (push) Failing after 1s
CI / backend (push) Failing after 1s

This commit is contained in:
2026-05-21 05:02:44 +02:00
parent 9d326c7f29
commit 0b24cfeeac
2 changed files with 64 additions and 2 deletions
+41
View File
@@ -103,6 +103,7 @@
const hudTL = fx.querySelector('.cs-hud--tl');
const hudTR = fx.querySelector('.cs-hud--tr');
const hudBL = fx.querySelector('.cs-hud--bl');
const apply = () => {
raf = 0;
@@ -118,6 +119,46 @@
if (hudTL) hudTL.textContent = `0x${Math.floor(depth * 255).toString(16).toUpperCase().padStart(2, '0')} // ADDR`;
if (hudTR) hudTR.textContent = `SYS.PTR // ${mx.toFixed(2)}, ${my.toFixed(2)}`;
};
/* ─── Terminal Command Echo ─── */
const onBtnClick = (e: MouseEvent) => {
const btn = (e.target as HTMLElement).closest('button, a.btn');
if (!btn || !hudBL) return;
const label = btn.textContent?.trim().slice(0, 12).toUpperCase() || 'NULL';
hudBL.textContent = `> CMD: [${label}] ... [OK]`;
hudBL.classList.remove('cs-hud-flicker');
void hudBL.offsetWidth;
hudBL.classList.add('cs-hud-flicker');
};
window.addEventListener('click', onBtnClick);
off.push(() => window.removeEventListener('click', onBtnClick));
/* ─── Character Scramble ─── */
const scrambleChars = '!@#$%^&*()_+{}:"<>?-=[];\',./';
const onHover = (e: MouseEvent) => {
const el = (e.target as HTMLElement).closest('.font-display, .btn, .prose h1, .prose h2');
if (!el || el.classList.contains('cs-is-scrambling')) return;
const original = el.textContent || '';
if (!original.trim()) return;
el.classList.add('cs-is-scrambling');
let iterations = 0;
const interval = setInterval(() => {
el.textContent = original.split('').map((char, index) => {
if (index < iterations) return original[index];
return scrambleChars[Math.floor(Math.random() * scrambleChars.length)];
}).join('');
if (iterations >= original.length) {
clearInterval(interval);
el.classList.remove('cs-is-scrambling');
}
iterations += 1 / 3;
}, 30);
};
window.addEventListener('mouseover', onHover);
off.push(() => window.removeEventListener('mouseover', onHover));
const schedule = () => { if (!raf) raf = requestAnimationFrame(apply); };
const onScroll = () => {
+23 -2
View File
@@ -81,6 +81,24 @@ html.cybersigil body::after {
.cybersigil .cs-hud--bl { bottom: 1.5rem; left: 1.5rem; }
.cybersigil .cs-hud--br { bottom: 1.5rem; right: 1.5rem; }
.cs-hud-flicker {
animation: cs-flicker 0.4s steps(4) 1;
}
/* Barbed Borders (Stitched Wire) */
.cybersigil .plate,
.cybersigil .btn,
.cybersigil .glass {
border-image-source: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100 100'><path d='M0 0 H100 V100 H0 Z' fill='none' stroke='%234fe9ff' stroke-width='1.5' stroke-dasharray='4 12'/><path d='M10 0 L15 -5 M30 0 L25 -5 M50 0 L50 -8 M70 0 L75 -5 M90 0 L85 -5' fill='none' stroke='%234fe9ff' stroke-width='1'/><path d='M10 100 L15 105 M30 100 L25 105 M50 100 L50 108 M70 100 L75 105 M90 100 L85 105' fill='none' stroke='%234fe9ff' stroke-width='1'/></svg>");
border-image-slice: 10;
border-image-repeat: stretch;
}
.cybersigil .plate:hover,
.cybersigil .btn:hover {
border-image-source: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 100 100'><path d='M0 0 H100 V100 H0 Z' fill='none' stroke='%23c8327a' stroke-width='2' stroke-dasharray='1 4'/><path d='M5 0 L15 -10 M25 0 L35 -10 M45 0 L55 -10 M65 0 L75 -10 M85 0 L95 -10' fill='none' stroke='%23c8327a' stroke-width='1.5'/></svg>");
animation: cs-flicker 0.2s infinite;
}
/* Boot Overlay */
.cybersigil .cs-boot {
position: fixed;
@@ -95,10 +113,12 @@ html.cybersigil body::after {
}
.cybersigil .cs-boot-log {
font-family: var(--font-display);
font-size: 1.2rem;
font-size: clamp(0.9rem, 4vw, 1.2rem);
color: var(--sky);
line-height: 1.4;
text-shadow: 0 0 8px var(--sky);
max-width: 90vw;
padding: 1rem;
}
.cybersigil .cs-boot-log p {
overflow: hidden;
@@ -113,7 +133,8 @@ html.cybersigil body::after {
@keyframes cs-boot-fade {
0% { opacity: 1; visibility: visible; }
100% { opacity: 0; visibility: hidden; }
99% { opacity: 0; visibility: visible; }
100% { opacity: 0; visibility: hidden; display: none; }
}
@keyframes cs-boot-type {
to { width: 100%; }