/* ==========================================================================
   SVG System Scanner — CSS Animation Engine
   ========================================================================== */

.scanner-container {
    position: relative; width: 100%; max-width: 1000px;
    height: 500px; margin: 0 auto;
    animation: float 8s ease-in-out infinite;
}

.scanner-svg {
    width: 100%; height: 100%;
    overflow: visible;
    font-family: var(--font-mono);
}

/* ── Connection Paths ── */
.path-bg {
    fill: none; stroke: var(--border-light);
    stroke-width: 1; stroke-dasharray: 4 4;
}

.data-pulse {
    fill: none; stroke: var(--accent); stroke-width: 2;
    stroke-linecap: round;
    filter: drop-shadow(0 0 6px var(--accent));
}

@keyframes pulseData {
    0%   { stroke-dashoffset: 400; opacity: 0; }
    10%  { opacity: 1; }
    90%  { opacity: 1; }
    100% { stroke-dashoffset: 0; opacity: 0; }
}

/* ── Nodes ── */
.node-rect {
    fill: var(--bg-card); stroke: var(--border);
    stroke-width: 1.5; rx: 6;
    transition: all var(--transition-base);
}

.node-text {
    fill: var(--text-muted); font-size: 10px;
    text-anchor: middle; font-weight: 500;
    transition: fill var(--transition-base);
    pointer-events: none;
}

.node-icon {
    fill: var(--text-dark);
    transition: fill var(--transition-base);
    pointer-events: none;
}

.node-group { cursor: pointer; }

.node-group:hover .node-rect {
    stroke: var(--text-main);
    fill: rgba(255, 255, 255, 0.05);
    filter: drop-shadow(0 0 12px rgba(255, 255, 255, 0.1));
}

.node-group:hover .node-text { fill: var(--text-main); }
.node-group:hover .node-icon { fill: var(--text-main); }

/* ── Core Center ── */
.core-center {
    fill: var(--bg-main); stroke: var(--accent); stroke-width: 3;
    filter: drop-shadow(0 0 20px var(--accent-glow-strong));
    transition: filter var(--transition-slow);
}

.core-logo { width: 40px; height: 40px; border-radius: 50%; }

.core-text {
    fill: #fff; font-size: 9px; font-weight: 700;
    text-anchor: middle; letter-spacing: 0.15em;
    text-transform: uppercase;
}

/* ── Rotating Rings ── */
.core-ring {
    fill: none; stroke: var(--accent); stroke-width: 1;
    stroke-dasharray: 30 15;
    transform-origin: 500px 250px;
    animation: spin 15s linear infinite;
    opacity: 0.8;
}

.core-ring-2 {
    fill: none; stroke: var(--text-main); stroke-width: 0.5;
    stroke-dasharray: 10 40;
    transform-origin: 500px 250px;
    animation: spinReverse 20s linear infinite;
    opacity: 0.3;
}

.core-ring-3 {
    fill: none; stroke: var(--accent); stroke-width: 0.5;
    stroke-dasharray: 5 25;
    transform-origin: 500px 250px;
    animation: spin 25s linear infinite;
    opacity: 0.2;
}

/* ── Scan Wave ── */
.scan-wave {
    fill: none; stroke: var(--accent); stroke-width: 1;
    opacity: 0;
    transform-origin: 500px 250px;
}

.scan-wave:nth-child(1) { animation: scanPulse 4s ease-out infinite; }
.scan-wave:nth-child(2) { animation: scanPulse 4s ease-out infinite 2s; }

@keyframes scanPulse {
    0%   { r: 40; opacity: 0.6; stroke-width: 2; }
    100% { r: 120; opacity: 0; stroke-width: 0.5; }
}

/* ── Floating Particles ── */
.particle {
    fill: var(--accent); opacity: 0;
    animation: particleFloat 6s ease-in-out infinite;
}

@keyframes particleFloat {
    0%, 100% { opacity: 0; transform: translateY(0); }
    20%  { opacity: 0.6; }
    80%  { opacity: 0.6; }
    50%  { transform: translateY(-10px); }
}

@keyframes spinReverse { to { transform: rotate(-360deg); } }
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-15px); } }

/* ── Output Node ── */
.output-rect {
    fill: var(--bg-card); stroke: var(--accent);
    stroke-width: 1.5; rx: 8;
    transition: all var(--transition-base);
}

.node-group:hover .output-rect {
    filter: drop-shadow(0 0 15px var(--accent-glow));
}

.output-text {
    fill: var(--text-main); font-size: 12px;
    font-weight: 600; text-anchor: middle;
}
