/* Signal-from-noise WebGL hero (assets/signal-hero.js) */
.signal-viz{position:relative;height:245px;margin:18px 0 12px}
.signal-viz canvas{transition:opacity .6s;position:absolute;inset:0;width:100%;height:100%;display:block}
.signal-hud{position:absolute;left:0;bottom:0;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10.5px;letter-spacing:.03em;color:#6a7a8e}
.signal-hud b{color:#142438;font-weight:600}
.signal-steps{display:flex;gap:6px;margin:0 0 18px}
.signal-step{flex:1;position:relative;overflow:hidden;font:500 10px/1 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.05em;white-space:nowrap;padding:9px 4px;border:1px solid #e3e8ef;border-radius:6px;background:#fff;color:#8494a8;cursor:pointer;transition:color .35s,border-color .35s,background .35s}
.signal-step::after{content:"";position:absolute;left:0;bottom:0;height:2px;width:calc(var(--f,0)*100%);background:#17615C}
.signal-step:hover{color:#142438}
.signal-step:focus-visible{outline:2px solid #1755A4;outline-offset:2px}
.signal-step.on{color:#142438;border-color:#bcd3cf;background:#f3f8f7}
.hero-note.has-signal .security-map{display:none}