/* Unobtrusive neon traces around the viewport during Boom SPA navigation. */
.boom-spa-loader {
  position:fixed;
  inset:0;
  z-index:2147483000;
  overflow:hidden;
  background:transparent;
  opacity:0;
  pointer-events:none;
  transition:opacity 140ms cubic-bezier(.23,1,.32,1);
}
.boom-spa-loader[hidden] { display:none !important; }
.boom-spa-loader.is-visible { opacity:1; }
.boom-spa-loader__edge {
  display:block;
  width:100%;
  height:100%;
  overflow:visible;
}
.boom-spa-loader__trace rect {
  fill:none;
  vector-effect:non-scaling-stroke;
  stroke-linecap:round;
  stroke-linejoin:round;
  stroke-dasharray:var(--boom-spa-segment,140px) var(--boom-spa-gap,4000px);
  animation:boom-spa-edge-flow 2.4s linear infinite;
}
.boom-spa-loader__trace .boom-spa-loader__glow {
  stroke:var(--boom-spa-color,#00ccff);
  stroke-width:10;
  opacity:.25;
  filter:blur(4px);
}
.boom-spa-loader__trace .boom-spa-loader__line {
  stroke:var(--boom-spa-color,#00ccff);
  stroke-width:2.5;
  filter:drop-shadow(0 0 5px var(--boom-spa-color,#00ccff));
}
.boom-spa-loader__trace:nth-child(2) rect { animation-delay:-.6s; }
.boom-spa-loader__trace:nth-child(3) rect { animation-delay:-1.2s; }
.boom-spa-loader__trace:nth-child(4) rect { animation-delay:-1.8s; }
@keyframes boom-spa-edge-flow {
  from { stroke-dashoffset:0; }
  to { stroke-dashoffset:var(--boom-spa-end,-4200px); }
}
@media(prefers-reduced-motion:reduce) {
  .boom-spa-loader { transition:opacity 120ms ease-out; }
  .boom-spa-loader__trace rect { animation:none; }
  .boom-spa-loader__trace:nth-child(2) rect { stroke-dashoffset:var(--boom-spa-quarter,-1050px); }
  .boom-spa-loader__trace:nth-child(3) rect { stroke-dashoffset:var(--boom-spa-half,-2100px); }
  .boom-spa-loader__trace:nth-child(4) rect { stroke-dashoffset:var(--boom-spa-three-quarter,-3150px); }
}
