aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-05-15 09:02:42 +0000
committerFuwn <[email protected]>2026-05-15 09:02:42 +0000
commitb2fe8acbfeedbfff6b49019764e56570555be392 (patch)
tree8a459e4181ecf6942f50e5b5ea705b355e03fed6 /src
parentfix(a11y): restore focus-visible ring (diff)
downloaddue.moe-b2fe8acbfeedbfff6b49019764e56570555be392.tar.xz
due.moe-b2fe8acbfeedbfff6b49019764e56570555be392.zip
feat(a11y): respect prefers-reduced-motion
Add a global reduced-motion media query that collapses animation and transition durations and disables smooth scroll. Skip Lenis init when the same preference is set so the JS-driven smooth scroll falls back to the browser default, which the spec already honours.
Diffstat (limited to 'src')
-rw-r--r--src/routes/+layout.svelte6
-rw-r--r--src/styles/normalise.css11
2 files changed, 15 insertions, 2 deletions
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index e1677b44..4aaf2159 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -98,9 +98,11 @@ const handleScroll = () => {
onMount(async () => {
if (browser) {
- lenis = new Lenis({ autoRaf: true });
+ if (!window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
+ lenis = new Lenis({ autoRaf: true });
- lenisStore.set(lenis);
+ lenisStore.set(lenis);
+ }
if (await localforage.getItem("redirect")) {
window.location.href = (await localforage.getItem("redirect")) ?? "/";
diff --git a/src/styles/normalise.css b/src/styles/normalise.css
index a3e623f0..f38ff649 100644
--- a/src/styles/normalise.css
+++ b/src/styles/normalise.css
@@ -35,3 +35,14 @@ h5:before,
h6:before {
content: "" !important;
}
+
+@media (prefers-reduced-motion: reduce) {
+ *,
+ *::before,
+ *::after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ scroll-behavior: auto !important;
+ }
+}