/* ============================================================
   ARC MEMORY VISUALS  —  node-scan + broadcast (Bounce-cast)
   Used by shortcodes: layouts/shortcodes/node-scan.html, broadcast.html
   ============================================================ */

/* ---- node-scan: raw memory/node dump (Vector's internals leaking) ---- */
.node-scan{--ns:var(--char-color,#3b82f6);margin:2rem 0;padding:1.1rem 1.1rem .9rem;border:1px solid var(--ns);
  border-left:4px solid var(--ns);border-radius:6px;background:#070b14;color:var(--ns);
  font-family:'SF Mono','Monaco','Courier New',monospace;position:relative;overflow:hidden;
  box-shadow:0 0 22px rgba(var(--char-color-rgb,59,130,246),.18),inset 0 0 40px rgba(var(--char-color-rgb,59,130,246),.06);
  animation:ns-flicker 4.2s infinite steps(60)}
.node-scan::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(0deg,rgba(0,0,0,.28) 0 1px,transparent 1px 3px);mix-blend-mode:overlay;opacity:.5}
.node-scan-label{font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;opacity:.85;
  display:flex;align-items:center;gap:.5rem;margin-bottom:.6rem;border-bottom:1px dashed rgba(var(--char-color-rgb,59,130,246),.35);padding-bottom:.45rem}
.node-scan-dot{width:7px;height:7px;border-radius:50%;background:var(--ns);box-shadow:0 0 8px var(--ns);animation:ns-blink 1s steps(2) infinite}
.node-scan-body{font-size:.9rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;text-shadow:0 0 6px rgba(var(--char-color-rgb,59,130,246),.5)}
.node-scan-body p{margin:.25rem 0}
.node-scan[data-level="2"]{animation-duration:2.6s;box-shadow:0 0 30px rgba(var(--char-color-rgb,59,130,246),.3),inset 0 0 60px rgba(var(--char-color-rgb,59,130,246),.1)}
.node-scan[data-level="3"]{animation:ns-breach .18s infinite steps(2);border-color:#ef4444;border-left-color:#ef4444}
.node-scan[data-level="3"] .node-scan-body{text-shadow:1.5px 0 #ef4444,-1.5px 0 #22d3ee,0 0 6px rgba(var(--char-color-rgb,59,130,246),.5)}
.node-scan[data-level="3"] .node-scan-label{color:#ef4444}
@keyframes ns-flicker{0%,97%,100%{opacity:1}98%{opacity:.82}99%{opacity:.93}}
@keyframes ns-blink{50%{opacity:.15}}
@keyframes ns-breach{0%{transform:translateX(0)}50%{transform:translateX(-1px)}100%{transform:translateX(1px)}}

/* ---- broadcast: Bounce renders the dump into a watchable CRT ---- */
.broadcast{--bc:var(--char-color,#f59e0b);margin:2.25rem auto;max-width:540px}
.broadcast-bezel{background:linear-gradient(#2a2622,#15120f);border:2px solid var(--bc);border-radius:16px;
  padding:18px 18px 12px;box-shadow:0 10px 30px rgba(0,0,0,.45),inset 0 0 0 6px #0a0807;position:relative}
.broadcast-screen{position:relative;border-radius:14px/10px;overflow:hidden;aspect-ratio:4/3;
  background:radial-gradient(120% 120% at 50% 50%,#1c2a1c 0%,#0c130c 70%,#060906 100%);
  box-shadow:inset 0 0 60px rgba(0,0,0,.8);filter:saturate(.85)}
.broadcast-screen::before{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(130% 130% at 50% 50%,transparent 55%,rgba(0,0,0,.65) 100%)}
.broadcast-scanlines{position:absolute;inset:0;z-index:2;pointer-events:none;
  background:repeating-linear-gradient(0deg,rgba(0,0,0,.35) 0 1px,transparent 1px 3px);
  animation:bc-roll 7s linear infinite;opacity:.55}
.broadcast-content{position:relative;z-index:1;height:100%;overflow:auto;padding:1.4rem 1.5rem;
  color:#cfe8cf;font-family:Georgia,'Times New Roman',serif;font-size:.96rem;line-height:1.6;
  text-shadow:0 0 5px rgba(180,255,180,.25);animation:bc-flicker 5s infinite steps(40)}
.broadcast-content p{margin:.5rem 0}
.broadcast-content em{color:#eafbe8}
.broadcast-label{margin-top:10px;text-align:center;font-family:'SF Mono',Monaco,monospace;
  font-size:.62rem;letter-spacing:.2em;color:var(--bc);text-transform:uppercase;
  display:flex;align-items:center;justify-content:center;gap:.5rem}
.broadcast-label::before{content:"";width:7px;height:7px;border-radius:50%;background:#ef4444;box-shadow:0 0 8px #ef4444;animation:bc-rec 1.4s steps(2) infinite}
@keyframes bc-roll{to{background-position:0 12px}}
@keyframes bc-flicker{0%,96%,100%{opacity:1}97%{opacity:.86}98%{opacity:.95}}
@keyframes bc-rec{50%{opacity:.2}}

@media (prefers-reduced-motion:reduce){
  .node-scan,.node-scan-dot,.broadcast-scanlines,.broadcast-content,.broadcast-label::before{animation:none}
}

/* ---- In-box stage directions (italics) read as quiet asides, not shouting ----
   Dims the bright/bold white *action* text inside dialogue boxes so the spoken
   lines (the character's color) stay the loudest thing in the box. */
.dialogue-box em,
.character-dialogue .dialogue-text em,
.dialogue-text em {
  color: #e4e8ef !important;
  font-weight: 400 !important;
  font-size: 0.86em !important;
  font-style: italic !important;
  opacity: 1 !important;
  letter-spacing: 0;
}

