@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }

  /* The aura is an affordance, not decoration: it stops breathing but keeps its bloom. */
  .action-sheet,
  .action-sheet.is-centred,
  .card-viewer,
  .card-viewer .card-face-host,
  .empties-viewer,
  .empties-viewer-panel {
    animation: none !important;
  }

  /* The match WAITS on this one, so it may not depend on how a run ends: stated outright at
     full strength rather than left to the shortened duration above. */
  .card-reveal-overlay {
    opacity: 1 !important;
    animation: none !important;
  }

  /* The corona neither turns nor breathes: it holds one steady, even rim of light. */
  .is-aura .battle-card-shell::after,
  .is-aura .hand-card-visual::after,
  .is-aura .tray-card-visual::after,
  button.bench-slot.is-aura::after,
  button.deck-stack.is-aura::after {
    background: rgb(255 255 255 / 54%) !important;
    opacity: 1 !important;
    animation: none !important;
  }

  .is-aura.is-aura-selected .battle-card-shell::after,
  .is-aura.is-aura-selected .hand-card-visual::after,
  .is-aura.is-aura-selected .tray-card-visual::after {
    background: rgb(255 255 255 / 78%) !important;
  }

  /*
    The four surfaces the table speaks through. Each arrives, holds and leaves inside one run, so
    the shortening above collapses that to an instant and the fill mode leaves them at the end -
    invisible. That takes the information, not the movement. So: no run, full strength, and the
    beat ending is what removes them.
  */
  .card-play-overlay,
  .card-play-overlay.is-travelling strong,
  .turn-change-overlay,
  .attack-result-overlay {
    animation: none !important;
  }

  /* This one rests at nothing until its run puts it up, so it must also be told it is there. The
     shuffle's words rest there always, because with the riffle playing the table has already said
     it; with the riffle suppressed below they are the only thing left that can. */
  .event-toast.is-visible,
  .shuffle-toast {
    opacity: 1 !important;
    animation: none !important;
  }

  /* Nothing travels; the pieces that exist only to be moved are not drawn at all. */
  .card-play-overlay.is-travelling .card-travel,
  .cue-draw .hand-card.is-cue-target .hand-card-visual,
  .cue-draw .opponent-hand .oche-card-back.is-drawn,
  .is-cue-landing {
    opacity: 1 !important;
    transform: none !important;
    animation: none !important;
  }

  /* The one exception: a card on its way out stays gone. Suppressing a journey must not restore
     what the journey took away, or the card appears twice. */
  .cue-play .hand-card.is-cue-source .hand-card-visual,
  .cue-evolve .hand-card.is-cue-source .hand-card-visual,
  .cue-setup .hand-card.is-cue-source .hand-card-visual {
    transform: none !important;
    animation: none !important;
  }

  .battle-card-shell.is-cue-gone,
  .hand-card.is-cue-gone .hand-card-visual {
    opacity: 0 !important;
  }

  .draw-cover,
  .shuffle-riffle {
    display: none !important;
  }

  /* Both cards stand still; the number says the damage. Only the run goes - selection and aura
     holds are untouched, since both runs start and end where the card already is. */
  .battle-card-shell.is-cue-striking,
  .cue-damage .battle-card-shell.is-cue-struck {
    animation: none !important;
  }

  /* The cards a shuffle is made of are not shown at all here, so the stack has to be the one
     back it is drawn as the rest of the time rather than an empty box. */
  .deck-stack.is-riffling > .deck-card-back > .oche-card-back {
    opacity: 1 !important;
  }

  /* Nothing waits for anything else either: the spacing that lets a shuffle finish before the
     stack is squared, and lets the hand open late, is time spent waiting and nothing else. */
  .cue-shuffle.cue-actor-local .player-zone .deck-card-back,
  .cue-shuffle.cue-actor-opponent .opponent-zone .deck-card-back,
  .cue-draw .hand-card {
    animation-delay: 0s !important;
    transition-delay: 0s !important;
  }
}
