/* ThreadSync — hero ambient visual (UI campaign item P4) — v2
   External + fingerprinted by necessity, not preference: this site's CSP sets
   style-src 'self' with a single hash, so any page-level inline <style> block is
   silently dropped (style.sheet === null). Never inline this.

   v2 closes Codex P2s from consult 20260801T094317Z-threadsync-io-hero:
     - text contrast no longer depends on what the artwork happens to do
     - prefers-reduced-transparency handled alongside prefers-contrast

   Note on structure: v1 used element `opacity` to dim the art. That also dims
   any child pseudo-element, so a scrim nested inside it could never be
   deterministic. Dimming now lives in the background stack instead, which frees
   ::after to sit at full strength over the top. */

.sov-hero-ambient{
  position:absolute;
  inset:0;
  z-index:0;
  pointer-events:none;
  background-image:
    /* flat wash — replaces the old element opacity */
    linear-gradient(0deg,rgba(10,11,15,.42),rgba(10,11,15,.42)),
    url("/assets/img/hero-ambient.f2002eb9c30b.webp");
  background-size:cover,cover;
  background-position:center,68% 50%;
  background-repeat:no-repeat,no-repeat;
}

/* Deterministic text protection. The copy column resolves to near-solid
   --sov-bg regardless of the artwork, so hero contrast is a property of the
   CSS rather than of the image. */
.sov-hero-ambient::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(90deg,
    #0A0B0F 0%,
    rgba(10,11,15,.93) 26%,
    rgba(10,11,15,.58) 50%,
    rgba(10,11,15,.18) 72%,
    rgba(10,11,15,0) 100%);
}

/* Hero content must clear the ambient layer. .sov-wrap is a direct child of
   .sov-hero and is otherwise statically positioned, so it needs both. */
.sov-hero > .sov-wrap{position:relative;z-index:1}

/* Below 900px the hero grid collapses to one column and the copy spans the full
   width — deepen the wash and walk the art up out from behind the headline. */
@media (max-width:900px){
  .sov-hero-ambient{
    background-image:
      linear-gradient(0deg,rgba(10,11,15,.66),rgba(10,11,15,.66)),
      url("/assets/img/hero-ambient.f2002eb9c30b.webp");
    background-position:center,78% 18%;
  }
  .sov-hero-ambient::after{
    background:linear-gradient(180deg,
      rgba(10,11,15,.92) 0%,
      rgba(10,11,15,.72) 55%,
      rgba(10,11,15,.55) 100%);
  }
}

/* Decoration never costs text contrast, and never overrides a stated user
   preference. Both of these drop the artwork entirely rather than merely
   thinning it — the hero's own gradient stack still renders underneath. */
@media (prefers-contrast:more){
  .sov-hero-ambient{background-image:none}
  .sov-hero-ambient::after{background:none}
}
@media (prefers-reduced-transparency:reduce){
  .sov-hero-ambient{background-image:none}
  .sov-hero-ambient::after{background:none}
}
