/* M190 source-level bridge. The source mirror is local-only and is not a
   production dependency. Our site chrome and handoff remain in the parent. */
/* Keep this bridge scoped to the story section. The parent document owns its
   own scrollbar and global html/body rules here would restyle every section
   on the homepage while the source scene is mounted. */
#m187-story-entrance {
  position: relative !important;
  /* The selected source segment now contains only the requested timeline
     window. Keep enough travel for the feather's final descent, while
     returning to the site's own first-screen sooner after the handoff. */
  height: clamp(3300px, 460vh, 5000px) !important;
  min-height: 0 !important;
  overflow: visible !important;
  background: #050822 !important;
}
#m187-story-entrance .m187-entrance-viewport {
  position: sticky !important;
  inset: 0 auto auto 0 !important;
  width: 100% !important;
  height: 100svh !important;
  min-height: 620px !important;
  overflow: hidden !important;
  isolation: isolate !important;
  background: #050822 !important;
}
#m187-story-entrance .m190-source-stage {
  position: absolute !important;
  inset: 0 !important;
  z-index: 2 !important;
  overflow: hidden !important;
  background: #050822 !important;
}
#m187-story-entrance .m190-source-frame {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  border: 0 !important;
  background: #050822 !important;
  overflow: hidden !important;
  scrollbar-width: none !important;
  pointer-events: none !important;
}
#m187-story-entrance .m190-mobile-scroll-shield {
  display: none !important;
}
#m187-story-entrance .m190-source-frame::-webkit-scrollbar {
  width: 0 !important;
  height: 0 !important;
  display: none !important;
}
#m187-story-entrance .m190-source-loader {
  position: absolute !important;
  inset: 0 !important;
  z-index: 8 !important;
  /* The iframe keeps the source page's own preloader. This bridge layer is
     intentionally non-visual so the selected 3D scene is never replaced by
     a custom orb or a lightweight pixel stand-in. */
  display: none !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  overflow: hidden !important;
  color: #fff !important;
  background: linear-gradient(45deg, #cebdf8, #e2dbf8) !important;
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: none !important;
  transition: opacity .7s ease, visibility .7s ease !important;
}
#m187-story-entrance .m190-source-loader.is-complete {
  opacity: 0 !important;
  visibility: hidden !important;
}
/* The reference site uses this small animated pixel bird while its WebGL scene
   compiles. Keep the marker deliberately light and let the real iframe scene
   provide all of the visual weight after it is ready. */
#m187-story-entrance .m190-loader-mark {
  width: 50px !important;
  height: 50px !important;
  display: grid !important;
  place-items: center !important;
}
#m187-story-entrance .m190-loader-mark img {
  display: block !important;
  width: 50px !important;
  height: auto !important;
  image-rendering: pixelated !important;
  opacity: .88 !important;
}
/* Progress remains available through the live status label; the reference
   preloader itself does not add a competing percentage readout. */
#m187-story-entrance .m190-loader-value,
#m187-story-entrance .m190-loader-caption {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
/* Parent navigation stays visible above the source canvas. */
body.m190-source-opening .site-header,
body:has(#m187-story-entrance[data-m190-state="source-timeline"]) .site-header {
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
  pointer-events: auto !important;
  z-index: 100 !important;
}
/* All former approximations are disabled; the iframe is the only scene. */
#m187-story-entrance .m189-noomo-canvas,
#m187-story-entrance .m189-noomo-scene,
#m187-story-entrance .m189-noomo-vignette,
#m187-story-entrance .m189-noomo-copy,
#m187-story-entrance .m189-wordmark,
#m187-story-entrance .m187-herd-layer,
#m187-story-entrance .m188-opening-lockup,
#m187-story-entrance .m188-side-horse,
#m187-story-entrance .m188-runner-stage,
#m187-story-entrance .m187-story-copy,
#m187-story-entrance .m187-story-line,
#m187-story-entrance .m187-entrance-sky,
#m187-story-entrance .m187-entrance-night,
#m187-story-entrance .m187-entrance-glow,
#m187-story-entrance .m187-entrance-grain { display: none !important; }
#m174-business .hero-description,
#m174-business [aria-label="后续内容入口"],
#m174-business .m173-actions.m181-hero-actions { display: none !important; visibility: hidden !important; pointer-events: none !important; }
#m187-story-entrance::before,
#m187-story-entrance::after { content: none !important; }

/* A quiet overlap at the handoff prevents a hard color seam while the source
   feather falls out and the site's business hero becomes visible. */
#m174-business {
  position: relative !important;
  z-index: 3 !important;
  margin-top: -32px !important;
  padding-top: calc(118px + 32px) !important;
}

/* M211: retain desktop composition; the mobile scene fits below the header.
   The parent remains the scrolling surface, including during WebGL startup. */
#m187-story-entrance .m187-entrance-viewport,
#m187-story-entrance .m190-source-stage {
  touch-action: pan-y pinch-zoom;
}
@media (max-width: 820px), (pointer: coarse) {
  #m187-story-entrance {
    height: 240svh !important;
  }
  /* Keep the full-screen source stage visual-only on touch devices. The
     parent viewport owns native vertical panning; leaving the absolute stage
     as the hit-test target makes iOS Safari classify the opening as a
     distracting layer and can require Safari's Hide Distracting Items action
     before a swipe reaches the document. Visible action links opt back in
     below when the timeline reaches them. */
  #m187-story-entrance .m190-source-stage {
    pointer-events: none !important;
  }
  /* WebKit has shipped versions where pointer-events:none on an iframe is
     ignored for the touch scroll hit-test. This transparent parent-owned
     surface keeps the selected WebGL scene visible while routing an empty
     swipe to the document's native scroll chain. */
  #m187-story-entrance .m190-mobile-scroll-shield {
    display: block !important;
    position: absolute !important;
    inset: 0 !important;
    z-index: 4 !important;
    background: transparent !important;
    pointer-events: auto !important;
    touch-action: pan-y pinch-zoom !important;
  }
  /* iOS Safari can still nominate a full-screen sticky container as the
     gesture target after its children are pointer-transparent. Let the
     document section receive the hand-scroll directly; only the measured CTA
     anchors below opt back into hit testing. */
  #m187-story-entrance .m187-entrance-viewport {
    pointer-events: none !important;
  }
  #m187-story-entrance .m187-entrance-viewport {
    top: var(--m211-header-height, 75px) !important;
    height: calc(100svh - var(--m211-header-height, 75px)) !important;
    min-height: 0 !important;
  }
  /* Only the two measured source buttons are touch targets. Empty overlay
     space remains available for the parent's native pan and pinch gestures. */
  #m187-story-entrance .m190-parent-entry-overlay,
  #m187-story-entrance .m190-parent-entry-overlay a {
    pointer-events: none !important;
  }
  #m187-story-entrance .m190-parent-entry-overlay.is-mobile-source-actions {
    display: block !important;
    padding: 0 !important;
  }
  #m187-story-entrance .m190-parent-entry-overlay.is-mobile-source-actions a {
    position: absolute !important;
    box-sizing: border-box !important;
    min-width: 0 !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
  }
  #m187-story-entrance .m190-parent-entry-overlay.is-mobile-source-actions.is-visible a {
    pointer-events: auto !important;
  }
}


