/* Editorial illustrations only. Geometry remains still; small accents carry motion. */
.content-visual { position: relative; isolation: isolate; width: 100%; overflow: hidden; }
.content-visual > svg { display: block; width: 100%; height: auto; overflow: visible; }
.content-visual svg { stroke-linecap: round; stroke-linejoin: round; }
.content-visual .visual-grid { stroke: #9eb8e5; stroke-width: 1; opacity: .09; }
.content-visual .visual-wire { stroke: #7797cb; stroke-width: 1.25; opacity: .65; }
.content-visual .visual-marker { stroke: #99b9ee; stroke-width: 1.25; opacity: .6; }
.content-visual .visual-edge { stroke: #7d9bc5; stroke-width: 1; opacity: .5; }
.content-visual .visual-backplate { fill: #162a48; stroke: #6484b2; stroke-width: 1; opacity: .7; }
.content-visual .visual-surface { fill: #0b1628; stroke: #9eb7db; stroke-width: 1.4; }
.content-visual .visual-small-surface { fill: #14243c; stroke: #809fce; stroke-width: 1.25; }
.content-visual .visual-ink { stroke: #d6e4ff; stroke-width: 1.8; }
.content-visual .visual-dot { fill: #bfd6ff; }
.content-visual .visual-dot-muted { fill: #526d95; }
.content-visual .visual-code { stroke: #708cb5; stroke-width: 4; opacity: .65; }
.content-visual .visual-code-bright { stroke: #b3ccf9; opacity: .85; }
.content-visual .visual-cursor { stroke: #edf4ff; stroke-width: 2.5; }
.content-visual .visual-node { fill: #14243d; stroke: #a9c7f6; stroke-width: 1.4; }
.content-visual .visual-layer { fill: #112540; stroke: #5375a5; stroke-width: 1; opacity: .65; }
.content-visual .visual-cube-left { fill: #1b304e; stroke: #8aabda; stroke-width: 1.2; }
.content-visual .visual-cube-right { fill: #101e34; stroke: #8aabda; stroke-width: 1.2; }
.content-visual .visual-cube-top { fill: #1a304e; fill-opacity: .8; stroke: #c1d7fc; stroke-width: 1.5; }
.content-visual .visual-scan { stroke: #e4eeff; stroke-width: 2; opacity: .75; }
.content-visual .visual-paper-back { fill: #152a49; stroke: #7593bf; stroke-width: 1; }
.content-visual .visual-paper-front { fill: #213a5a; stroke: #aac4eb; stroke-width: 1.3; }
.content-visual .visual-paper-line { stroke: #96b4df; stroke-width: 3; opacity: .4; }
.content-visual .visual-paper-node { fill: #12243e; stroke: #b8cfee; stroke-width: 1.4; }
.content-visual .visual-paper-hub { fill: #2a4770; }
.content-visual .visual-packet { stroke: #e5efff; stroke-width: 2.2; stroke-dasharray: 8 92; stroke-dashoffset: 8; opacity: 0; }
.content-visual .visual-pulse { fill: none; stroke: #a5c7ff; stroke-width: 1; opacity: .2; }
.content-visual .visual-packet { animation: content-packet 5.4s linear infinite paused; }
.content-visual .visual-pulse { animation: content-pulse 5.4s ease-in-out infinite paused; }
.content-visual .visual-cursor { animation: content-cursor 3.4s steps(1) infinite paused; }
.content-visual .visual-scan { animation: content-scan 5.4s ease-in-out infinite paused; }
.content-visual .visual-delay-2 { animation-delay: -1.8s; }
.content-visual .visual-delay-3 { animation-delay: -3.5s; }
.content-visual.visual-running :is(.visual-packet, .visual-pulse, .visual-cursor, .visual-scan) { animation-play-state: running; }
.service-icon { display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center; color: #bad0f3; }
.service-icon > svg { display: block; width: 28px; height: 28px; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; }
@keyframes content-packet { 0% { stroke-dashoffset: 8; opacity: 0; } 8% { opacity: .95; } 68% { opacity: .95; } 86%, 100% { stroke-dashoffset: -100; opacity: 0; } }
@keyframes content-pulse { 0%, 100% { opacity: .12; } 35% { opacity: .6; } 55% { opacity: .15; } }
@keyframes content-cursor { 0%, 65%, 100% { opacity: .9; } 80% { opacity: .15; } }
@keyframes content-scan { 0%, 100% { transform: translateY(-12px); opacity: .1; } 50% { transform: translateY(18px); opacity: .85; } }
@media (prefers-reduced-motion: reduce) {
  .content-visual :is(.visual-packet, .visual-pulse, .visual-cursor, .visual-scan) { animation: none; }
  .content-visual .visual-packet { opacity: 0; }
  .content-visual .visual-scan { transform: none; opacity: .65; }
}
