/* desktop3: gravity-particle canvas behind the scroll-world video on desktop (>=861px). Owned by the desktop-fill agent.
   The canvas is created by desktop3.mjs. z-index 5 sits above .sw-sky (0) and below .sw-stage (10), so the video panel,
   the copy, the nav and the route dots all paint over it. Nothing here is clickable or focusable. */
.d3-gravity {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 5;
  display: none;
  pointer-events: none;
  opacity: 0;
  transition: opacity 1.4s ease;
}
@media (min-width: 861px) {
  .d3-gravity { display: block; }
  .d3-gravity.is-on { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .d3-gravity { transition: none; }
}
@media print {
  .d3-gravity { display: none; }
}
/* The engine's left scrim (a black gradient across the left 780px, built for the old full-bleed layout) would swallow the
   particles beside the copy. Keep it exactly where the copy sits; let the field show through above that band. Desktop only,
   and only once this layer is live (html.d3-on is set by desktop3.mjs). */
@media (min-width: 861px) {
  html.d3-on .sw-copylayer::before {
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, transparent 36%, #000 50%);
    mask-image: linear-gradient(to bottom, transparent 0, transparent 36%, #000 50%);
  }
}
