/* ========================================
   PCB Loader
   ======================================== */

body.pcb-loading > :not(#pcb-loader) {
  visibility: hidden;
}

#pcb-loader {
  position: fixed;
  inset: 0;
  z-index: 9999;
  /* Light mode defaults (blue-on-light) */
  --pcb-bg: #f4f8ff;
  --pcb-dot: #1d4ed8;
  --pcb-trace: #2563eb;
  --pcb-via: #1d4ed8;
  --pcb-via-lg: #2563eb;
  --pcb-ic-fill: #e6effd;
  --pcb-ic-stroke: #3b82f6;
  --pcb-main-ic-stroke: #1d4ed8;
  --pcb-component-fill: #dde9fb;
  --pcb-component-stroke: #2563eb;
  --pcb-fuse-wire: #2563eb;
  --pcb-label-main: #0f172a;
  --pcb-label-ref: #2563eb;
  --pcb-loading-text: #3b82f6;
  --pcb-detail-fill: #c6d9f7;
  --pcb-detail-stroke: #2563eb;
  --pcb-cutout-fill: #f4f8ff;
  --pcb-main-glow-base: drop-shadow(0 0 8px rgba(37, 99, 235, 0.28)) drop-shadow(0 0 18px rgba(29, 78, 216, 0.16));
  --pcb-main-glow-peak: drop-shadow(0 0 11px rgba(37, 99, 235, 0.42)) drop-shadow(0 0 24px rgba(29, 78, 216, 0.24));
  --pcb-main-glow-safari: drop-shadow(0 0 7px rgba(37, 99, 235, 0.26)) drop-shadow(0 0 14px rgba(29, 78, 216, 0.14));
  --pcb-label-glow-base: drop-shadow(0 0 6px rgba(37, 99, 235, 0.22)) drop-shadow(0 0 16px rgba(29, 78, 216, 0.14));
  --pcb-label-glow-peak: drop-shadow(0 0 8px rgba(37, 99, 235, 0.32)) drop-shadow(0 0 22px rgba(29, 78, 216, 0.2));
  --pcb-label-glow-safari: drop-shadow(0 0 5px rgba(37, 99, 235, 0.2)) drop-shadow(0 0 12px rgba(29, 78, 216, 0.12));
  --pcb-loading-text-glow: drop-shadow(0 0 6px rgba(37, 99, 235, 0.26));
  background: var(--pcb-bg);
  overflow: hidden;
}

html[data-theme="dark"] #pcb-loader {
  --pcb-bg: #070e1b;
  --pcb-dot: #1e3a6e;
  --pcb-trace: #2563eb;
  --pcb-via: #3b82f6;
  --pcb-via-lg: #60a5fa;
  --pcb-ic-fill: #0d1e38;
  --pcb-ic-stroke: #3b82f6;
  --pcb-main-ic-stroke: #60a5fa;
  --pcb-component-fill: #0c1929;
  --pcb-component-stroke: #2563eb;
  --pcb-fuse-wire: #60a5fa;
  --pcb-label-main: #f8fbff;
  --pcb-label-ref: #60a5fa;
  --pcb-loading-text: #93c5fd;
  --pcb-detail-fill: #0a1e38;
  --pcb-detail-stroke: #60a5fa;
  --pcb-cutout-fill: #070e1b;
  --pcb-main-glow-base: drop-shadow(0 0 8px rgba(59, 130, 246, 0.35)) drop-shadow(0 0 18px rgba(37, 99, 235, 0.22));
  --pcb-main-glow-peak: drop-shadow(0 0 11px rgba(96, 165, 250, 0.5)) drop-shadow(0 0 24px rgba(37, 99, 235, 0.3));
  --pcb-main-glow-safari: drop-shadow(0 0 7px rgba(59, 130, 246, 0.32)) drop-shadow(0 0 14px rgba(37, 99, 235, 0.2));
  --pcb-label-glow-base: drop-shadow(0 0 6px rgba(239, 246, 255, 0.45)) drop-shadow(0 0 16px rgba(96, 165, 250, 0.28));
  --pcb-label-glow-peak: drop-shadow(0 0 8px rgba(239, 246, 255, 0.6)) drop-shadow(0 0 22px rgba(96, 165, 250, 0.42));
  --pcb-label-glow-safari: drop-shadow(0 0 5px rgba(239, 246, 255, 0.42)) drop-shadow(0 0 12px rgba(96, 165, 250, 0.24));
  --pcb-loading-text-glow: drop-shadow(0 0 6px rgba(96, 165, 250, 0.3));
}

#pcb-loader > svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.pcb-svg--mobile {
  display: none;
}

@media (max-width: 720px) {
  .pcb-svg--desktop {
    display: none;
  }

  .pcb-svg--mobile {
    display: block;
  }
}

.pcb-trace {
  fill: none;
  stroke: var(--pcb-trace);
  stroke-width: 1.1;
  stroke-linecap: round;
  stroke-linejoin: round;
  /* Prevent brief flash before JS applies stroke-dash animation state */
  opacity: 0;
}

.pcb-via {
  fill: var(--pcb-via);
}

.pcb-via--lg {
  fill: var(--pcb-via-lg);
}

.pcb-ic {
  fill: var(--pcb-ic-fill);
  stroke: var(--pcb-ic-stroke);
  stroke-width: 1.5;
}

.pcb-ic--main {
  stroke: var(--pcb-main-ic-stroke);
  stroke-width: 1.9;
  filter: var(--pcb-main-glow-base);
  animation: pcbCoreGlow 2.4s ease-in-out infinite;
}

.pcb-svg--desktop .pcb-ic--main {
  transform-box: fill-box;
  transform-origin: center;
  transform: scaleX(1.28);
}

.pcb-component {
  fill: var(--pcb-component-fill);
  stroke: var(--pcb-component-stroke);
  stroke-width: 1.0;
}

.pcb-fuse-wire {
  fill: none;
  stroke: var(--pcb-fuse-wire);
  stroke-width: 0.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.pcb-label-main {
  font-family: 'JetBrains Mono', monospace;
  font-size: 34px;
  font-weight: 800;
  fill: var(--pcb-label-main);
  text-anchor: middle;
  dominant-baseline: middle;
  letter-spacing: 4px;
  filter: var(--pcb-label-glow-base);
  animation: pcbLabelGlow 2s ease-in-out infinite;
}

.pcb-label-ref {
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  font-weight: 500;
  fill: var(--pcb-label-ref);
  text-anchor: middle;
  dominant-baseline: middle;
  letter-spacing: 1px;
}

.pcb-reveal {
  opacity: 0;
  transition: opacity 0.35s ease;
}

.pcb-loading-text {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  font-weight: 500;
  fill: var(--pcb-loading-text);
  text-anchor: middle;
  dominant-baseline: middle;
  letter-spacing: 1.2px;
  filter: var(--pcb-loading-text-glow);
  animation: pcbLoadingBreath 1.5s ease-in-out infinite;
}

.pcb-loading-dot-char {
  opacity: 0.18;
  transition: opacity 140ms linear;
}

.pcb-loading-dot {
  fill: var(--pcb-loading-text);
  opacity: 0.25;
  animation: pcbDotPulse 1.1s ease-in-out infinite;
}

.pcb-loading-dot--2 {
  animation-delay: 0.18s;
}

.pcb-loading-dot--3 {
  animation-delay: 0.36s;
}

/* iOS Safari perf mode: keep static glow look, avoid expensive animated SVG filters */
#pcb-loader.pcb-perf-safari .pcb-ic--main {
  animation: none;
  filter: var(--pcb-main-glow-safari);
}

#pcb-loader.pcb-perf-safari .pcb-label-main {
  animation: none;
  filter: var(--pcb-label-glow-safari);
}

#pcb-loader.pcb-perf-safari .pcb-loading-text {
  animation: none;
}

@keyframes pcbCoreGlow {
  0%, 100% {
    filter: var(--pcb-main-glow-base);
  }
  50% {
    filter: var(--pcb-main-glow-peak);
  }
}

@keyframes pcbLabelGlow {
  0%, 100% {
    filter: var(--pcb-label-glow-base);
  }
  50% {
    filter: var(--pcb-label-glow-peak);
  }
}

@keyframes pcbLoadingBreath {
  0%, 100% {
    opacity: 0.75;
  }
  50% {
    opacity: 1;
  }
}

@keyframes pcbDotPulse {
  0%, 100% {
    opacity: 0.2;
  }
  50% {
    opacity: 1;
  }
}

@media (max-width: 720px) {
  .pcb-svg--mobile .pcb-ic--main {
    transform: none;
  }

  .pcb-label-main {
    font-size: 31px;
    letter-spacing: 3px;
  }

  .pcb-loading-text {
    font-size: 12px;
    letter-spacing: 1px;
  }
}
