/* ============================================================
   What the site looks like with the motion switched off.

   These rules used to live inside @media (prefers-reduced-motion: reduce)
   in style.css. They are byte-identical here, only unwrapped, because a
   media query cannot be overridden at runtime and a link's media
   attribute can. The layout loads this file with
   media="(prefers-reduced-motion: reduce)" so the OS preference is still
   the default; the header's motion button flips that attribute to "all"
   or "not all" and remembers the choice.

   Keeping them byte-identical matters: every selector here was written
   to sit at a particular strength against the rule it overrides, and
   wrapping or re-scoping them would quietly change who wins.
   ============================================================ */
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
  html{scroll-behavior:auto}
  /* .js .reveal is two classes; this has to match it or the guard would
     out-rank the very override that makes reduced motion safe. */
  .reveal,.js .reveal{opacity:1;transform:none}
  .msg{opacity:1;transform:none}
  .radar-shape{transition:none}
  .orbit,.planet,.marquee-track,.t-track{animation:none !important}
  /*
    Stopping the marquee is right - an endless horizontal crawl is exactly what
    this setting exists to switch off. Leaving it stopped where it was is not:
    the track is eight thousand pixels wide behind a fading mask, so it froze
    with a word cut in half at each end and read as a broken page. Held still,
    it becomes what it should have been all along - a strip you can push with a
    finger, no mask, no second copy of the list to scroll past.
  */
  .marquee{overflow-x:auto;mask-image:none;-webkit-mask-image:none;
    scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .marquee::-webkit-scrollbar{display:none}
  .marquee-track{width:auto}
  .marquee-half+.marquee-half{display:none}
  /*
    Same for the testimonials, and here it matters more: the marquee is
    decorative and aria-hidden, but these are people saying what the service
    did for them. The carousel is overflow:hidden with the track twice the
    width of the window, and the desktop drag springs back on release - it is a
    peek, not navigation - so with the animation stopped every testimonial past
    the first screen was unreachable. Scrollable, unmasked, and without the
    duplicate half that only exists to make the loop seamless.
  */
  .t-carousel{overflow-x:auto;mask-image:none;-webkit-mask-image:none;cursor:auto;
    scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .t-carousel::-webkit-scrollbar{display:none}
  .t-track{width:auto}
  .t-track .t-dupe{display:none}
  .orbit-a .planet,.orbit-b .planet{animation:none !important}
  .tl-line i{transform:scaleY(1)}
  .btn-primary::after,.tl-pill.dark::after{display:none}
  .intro{display:none}
  .caret{animation:none}
  .m-body,.m-shadow,.m-eyes,.m-arm,.m-spark,.mascot-hi{animation:none !important}
  /*
    The exam ticker gets the same held-still treatment as the other two strips,
    but the rules have to live in THIS block rather than the one further up:
    .exam-strip is defined between the two, and at equal specificity the later
    rule wins - so written up there they lost to the very thing they override.
  */
  .exam-strip{overflow-x:auto;mask-image:none;-webkit-mask-image:none;padding-inline:4%;
    scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .exam-track{width:auto;animation:none !important}
  .exam-half+.exam-half,.exam-set+.exam-set{display:none}
  .wa-ping,.tl-pill.dark::after{display:none}
  .sp-chips span{animation:none}
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
