diff --git a/frontend/index.html b/frontend/index.html index ccaf55e420..26faa92d45 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -44,6 +44,11 @@ border: 4px solid #eee; border-color: #eee transparent #eee transparent; animation: spinning-loading-indicator 1s linear infinite; + @media (prefers-reduced-motion) { + animation: none; + content: "Loading…"; + border: none; + } } @keyframes spinning-loading-indicator { diff --git a/frontend/src/components/floating-menus/ColorPicker.svelte b/frontend/src/components/floating-menus/ColorPicker.svelte index 7e221eac7b..b132acfa81 100644 --- a/frontend/src/components/floating-menus/ColorPicker.svelte +++ b/frontend/src/components/floating-menus/ColorPicker.svelte @@ -962,6 +962,10 @@ // We don't use the CSS `filter: grayscale(1);` property because it produces overly dark tones for bright colors with a noticeable jump on hover. background: var(--pure-color-gray); transition: background-color 0.1s; + + @media (prefers-reduced-motion) { + transition: none; + } } &:hover div { @@ -976,6 +980,10 @@ &.disabled .details .choice-preview { transition: opacity 0.1s; + @media (prefers-reduced-motion) { + transition: none; + } + &:hover { opacity: 0.5; } diff --git a/frontend/src/components/panels/Document.svelte b/frontend/src/components/panels/Document.svelte index 3f679690b2..31a1b8ff6c 100644 --- a/frontend/src/components/panels/Document.svelte +++ b/frontend/src/components/panels/Document.svelte @@ -702,6 +702,10 @@ opacity: 0.25; transition: opacity 0.1s; + @media (prefers-reduced-motion) { + transition: none; + } + &:hover { opacity: 1; } @@ -853,6 +857,10 @@ transition: opacity 0.2s; opacity: 0; + @media (prefers-reduced-motion) { + transition: none; + } + &.open { cursor: auto; pointer-events: auto; diff --git a/frontend/src/components/views/Graph.svelte b/frontend/src/components/views/Graph.svelte index 99c509c4e1..f7bde0cabe 100644 --- a/frontend/src/components/views/Graph.svelte +++ b/frontend/src/components/views/Graph.svelte @@ -846,6 +846,10 @@ opacity: 0.5; transform: translateY(-100%); + @media (prefers-reduced-motion) { + transition: none; + } + // Tail &::after { content: ""; diff --git a/frontend/src/components/widgets/inputs/NumberInput.svelte b/frontend/src/components/widgets/inputs/NumberInput.svelte index 3b70934525..51d0836053 100644 --- a/frontend/src/components/widgets/inputs/NumberInput.svelte +++ b/frontend/src/components/widgets/inputs/NumberInput.svelte @@ -283,6 +283,9 @@ clearTimeout(repeatTimeout); } + // The widget might be destroyed, in which case it would be very bad to keep sending events pointing at the wrong index. + onDestroy(onIncrementPointerUp); + function incrementPressAbort(e: KeyboardEvent | MouseEvent) { // Only abort if the user right clicks or presses Escape if (e instanceof KeyboardEvent && e.key !== "Escape") return; diff --git a/frontend/src/components/widgets/inputs/SpectrumInput.svelte b/frontend/src/components/widgets/inputs/SpectrumInput.svelte index 6611614c5d..528979baf4 100644 --- a/frontend/src/components/widgets/inputs/SpectrumInput.svelte +++ b/frontend/src/components/widgets/inputs/SpectrumInput.svelte @@ -303,6 +303,10 @@ &.disabled .gradient-strip { transition: opacity 0.1s; + @media (prefers-reduced-motion) { + transition: none; + } + &:hover { opacity: 0.5; }