/* Mobile-only visual budget (<=1120px). The desktop component owners
 * opt into compositing and glass; mobile never allocates those layers.
 * Content, links, forms, native disclosures and rating remain rendered. */
@media (max-width:1120px) {
  /* Universal mobile animation budget. The real theme root attributes give
   * the override adequate specificity without priority flags. Deliberately
   * opt back into a handful of compositor-friendly effects below. */
  .apx-site[data-apx-site][data-apx-kind],
  .apx-site[data-apx-site][data-apx-kind] *,
  .apx-site[data-apx-site][data-apx-kind] *::before,
  .apx-site[data-apx-site][data-apx-kind] *::after{animation:none}
  /* Transform layer hints and glass blur are now scoped at the desktop
     component declarations, not reset here with priority rules. */
  /* Native, instantaneous TOC/FAQ/extra disclosures on mobile only. */
  .apx-site .apx-disclosure,
  .apx-site .apx-disclosure__body,
  .apx-site .apx-disclosure__inner,
  .apx-site .page-toc__sublist,
  .apx-site .apx-disclosure .apx-toc-branch::before{
    transition:none;
  }
  /* Desktop-only optical nodes: source rules have no competing priority.
     Hide these presentational nodes without changing Drupal content. */
  .apx-site :is(.apx-section-rail,.apx-cursor-halo,.apx-cursor-dot,
    .apx-v4-depth-corner,.apx-v5-edge,.apx-photo-ambient,
    .apx-hero__mesh,.apx-v2-hero-circuits,.apx-related-console,
    .apx-story-telemetry,.apx-v2-network__lines,.apx-v2-network__signal,
    .apx-v2-network__hub){display:none}
  /* Keep the six real ecosystem links: a small static directory instead of
     an interactive animated network. No gameplay animation or SVG graph. */
  .apx-site--front .apx-v2-ecosystem{padding-block:30px}
  .apx-site--front .apx-v2-ecosystem__hint{display:none}
  .apx-site--front .apx-v2-network{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;
    width:100%;min-height:0;aspect-ratio:auto;margin-inline:auto;
  }
  .apx-site--front .apx-v2-network__node{
    position:static;left:auto;top:auto;translate:none;scale:1;
    width:100%;min-width:0;min-height:68px;padding:10px 8px;
    transform:none;transition:border-color .15s ease,background-color .15s ease;
  }
  .apx-site--front .apx-v2-network__node b{font-size:14px}
  .apx-site--front .apx-v2-network__node small{font-size:11px}
  /* Desktop-only reveal and image staging are excluded by their owning
     media query. Retain readable mobile defaults without override flags. */
  .apx-site [data-apx-reveal-pending],
  .apx-site [data-apx-card-pending],
  .apx-site img[data-apx-media-pending]{opacity:1;filter:none;translate:none}
}
@media(max-width:390px){
  .apx-site--front .apx-v2-network{grid-template-columns:minmax(0,1fr)}
}

/* Deliberately cheap mobile motion: opacity and a small transform only. No
 * large blur, animated background-size, pointer tracking or per-card timers. */
@media(max-width:1120px) and (prefers-reduced-motion:no-preference){
  .apx-site[data-apx-site][data-apx-kind] .apx-hero__glyph{animation:apxMobileGlyphFocus 8s ease-in-out infinite}
  /* Real travelling packet inside the straight decorative traces.
   * Compositor-only transform, no extra Canvas work or JS timers. */
  .apx-site[data-apx-site][data-apx-kind] .apx-region-seam__head{animation:apxSignalTravel 5.6s linear infinite}
  .apx-site[data-apx-site][data-apx-kind] .apx-region-seam[data-apx-seam="faq"] .apx-region-seam__head{animation-duration:7.3s;animation-direction:reverse}
  .apx-site[data-apx-site][data-apx-kind] .apx-region-seam[data-apx-seam="contact"] .apx-region-seam__head{animation-duration:6.8s}
  .apx-site[data-apx-site][data-apx-kind] .apx-contact-scene__mark{animation:apxMobileTraceBreath 9s ease-in-out infinite}
  .apx-site[data-apx-site][data-apx-kind] .apx-notice .info-banner__close{animation:apxNoticeCloseRing 2.9s ease-in-out infinite}
  .apx-site[data-apx-site][data-apx-kind] .apx-nav.apx-nav--open,
  .apx-site[data-apx-site][data-apx-kind] .apx-nav nav li.apx-menu-open>ul{animation:apxMobileMenuOpen .24s ease-out both}
  .apx-site[data-apx-site][data-apx-kind] .apx-blink{animation:apxMobileTraceBreath 4.8s ease-in-out infinite}
}
@keyframes apxMobileGlyphFocus{50%{opacity:.78}}
@keyframes apxMobileTraceBreath{50%{opacity:.4}}
@media(max-width:1120px) and (prefers-reduced-motion:reduce){
  .apx-site[data-apx-site][data-apx-kind] .apx-hero__glyph,
  .apx-site[data-apx-site][data-apx-kind] .apx-region-seam__head,
  .apx-site[data-apx-site][data-apx-kind] .apx-contact-scene__mark,
  .apx-site[data-apx-site][data-apx-kind] .apx-notice .info-banner__close,
  .apx-site[data-apx-site][data-apx-kind] .apx-blink{animation:none}
}
