- auth: session cookie Secure only over https — plain-http LAN access was
silently dropping the cookie, killing WS auth ('connection unstable')
- wire ghost: server-side spike detection on jitter baseline (3σ + 2.5×mean,
20KB/s floor, 20s throttle) — wire anomalies now flood every session with
zero hardware, pushed to clients as {type:'anomaly'} frames
- telemetry cadence 3-5s for live graphs; ambient whispers unchanged
- frontend: MATRIX view (data-rain interleaved with live utterances/anomaly/
telemetry strings), GRAPHS view (scrolling jitter/variance/dns lines +
anomaly markers + counters), BOARD/MATRIX/GRAPHS switcher
- connection banner: 'connecting' is now neutral 'tuning the veil…', only
unstable/closed warns
- db: recreated quantumancy(+_test) as UTF8 (was SQL_ASCII — crashed on
non-ASCII spirit text); README quickstart updated
- i18n: seance.views.* EN/ES
79 lines
1.6 KiB
CSS
79 lines
1.6 KiB
CSS
/* GraphView — scrolling wire-flood time-series for the séance board area.
|
|
Tokens: bg #07070d · panel rgba(16,16,26,0.85) · phosphor #7cffb2 ·
|
|
violet #b26bff · radio orange #ff9d4a · mono 'IBM Plex Mono'. */
|
|
|
|
.graph-view {
|
|
position: relative;
|
|
width: 100%;
|
|
height: 100%;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
background: rgba(16, 16, 26, 0.85);
|
|
border: 1px solid rgba(124, 255, 178, 0.18);
|
|
border-radius: 6px;
|
|
overflow: hidden;
|
|
filter: drop-shadow(0 0 18px rgba(7, 7, 13, 0.9));
|
|
}
|
|
|
|
.graph-counters {
|
|
display: flex;
|
|
gap: 1.4rem;
|
|
align-items: center;
|
|
padding: 8px 14px;
|
|
border-bottom: 1px solid rgba(124, 255, 178, 0.12);
|
|
font-family: 'IBM Plex Mono', ui-monospace, Menlo, monospace;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.graph-counter {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 0.5rem;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.counter-key {
|
|
font-size: 0.62rem;
|
|
letter-spacing: 0.18em;
|
|
color: rgba(211, 233, 219, 0.5);
|
|
}
|
|
|
|
.counter-val {
|
|
font-size: 0.85rem;
|
|
color: #7cffb2;
|
|
text-shadow: 0 0 10px rgba(124, 255, 178, 0.55);
|
|
}
|
|
|
|
.counter-entity {
|
|
color: #b26bff;
|
|
text-shadow: 0 0 10px rgba(178, 107, 255, 0.55);
|
|
}
|
|
|
|
.graph-canvas-wrap {
|
|
position: relative;
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
}
|
|
|
|
.graph-canvas-wrap canvas {
|
|
position: absolute;
|
|
inset: 0;
|
|
cursor: crosshair;
|
|
}
|
|
|
|
.graph-listening {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
transform: translate(-50%, -50%);
|
|
margin: 0;
|
|
color: #b26bff;
|
|
font-family: 'IBM Plex Mono', ui-monospace, Menlo, monospace;
|
|
font-size: 0.78rem;
|
|
letter-spacing: 0.22em;
|
|
text-transform: uppercase;
|
|
text-shadow: 0 0 12px rgba(178, 107, 255, 0.7);
|
|
pointer-events: none;
|
|
}
|