accessify-widget 0.2.12 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accessify.min.js +1 -1
- package/dist/accessify.min.js.map +1 -1
- package/dist/accessify.mjs +1 -1
- package/dist/{animation-stop-D7fUkoyL.js → animation-stop-CKP0GPCj.js} +199 -41
- package/dist/animation-stop-CKP0GPCj.js.map +1 -0
- package/dist/{index-8Pdy-P-C.js → index-DaJnh9oG.js} +4 -4
- package/dist/{index-8Pdy-P-C.js.map → index-DaJnh9oG.js.map} +1 -1
- package/dist/{keyboard-nav-CcbrBWbb.js → keyboard-nav-B5IcuHY7.js} +2 -2
- package/dist/{keyboard-nav-CcbrBWbb.js.map → keyboard-nav-B5IcuHY7.js.map} +1 -1
- package/dist/{page-structure-DG1b6-Dl.js → page-structure-B-hy7z_v.js} +2 -2
- package/dist/{page-structure-DG1b6-Dl.js.map → page-structure-B-hy7z_v.js.map} +1 -1
- package/dist/widget.js +1 -1
- package/dist/widget.js.map +1 -1
- package/package.json +1 -1
- package/dist/animation-stop-D7fUkoyL.js.map +0 -1
package/dist/accessify.mjs
CHANGED
|
@@ -4,14 +4,56 @@ function createAnimationStopModule() {
|
|
|
4
4
|
const STORAGE_KEY = "accessify-animation-stop";
|
|
5
5
|
const DATA_ORIG = "data-accessify-orig-style";
|
|
6
6
|
const DATA_FIXED = "data-accessify-fixed";
|
|
7
|
+
const DATA_FROZEN_TRANSFORM = "data-a11y-frozen-transform";
|
|
7
8
|
let pausedVideos = [];
|
|
8
9
|
let gifOriginals = /* @__PURE__ */ new Map();
|
|
9
10
|
let mutationObserver = null;
|
|
11
|
+
let scrollStyleObserver = null;
|
|
12
|
+
let scrollHandler = null;
|
|
10
13
|
let originalVideoPlay = null;
|
|
11
14
|
let originalIntersectionObserver = null;
|
|
15
|
+
let originalClassListAdd = null;
|
|
16
|
+
let originalClassListRemove = null;
|
|
12
17
|
let interactionTimer = null;
|
|
13
18
|
let styleEl = null;
|
|
14
19
|
let scanTimers = [];
|
|
20
|
+
function sharedCSS() {
|
|
21
|
+
return `
|
|
22
|
+
html {
|
|
23
|
+
scroll-behavior: auto !important;
|
|
24
|
+
}
|
|
25
|
+
marquee {
|
|
26
|
+
-moz-binding: none !important;
|
|
27
|
+
overflow: hidden !important;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Kill CSS scroll-driven animations */
|
|
31
|
+
*, *::before, *::after {
|
|
32
|
+
animation-timeline: auto !important;
|
|
33
|
+
scroll-timeline: none !important;
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
const INTERACTIVE_SELECTORS = [
|
|
38
|
+
"details > *",
|
|
39
|
+
"[data-accordion] > *",
|
|
40
|
+
'[role="tabpanel"]',
|
|
41
|
+
"dialog",
|
|
42
|
+
"dialog *",
|
|
43
|
+
"[aria-expanded] + *",
|
|
44
|
+
".accordion *",
|
|
45
|
+
".collapse *",
|
|
46
|
+
".dropdown-menu *",
|
|
47
|
+
".faq *",
|
|
48
|
+
"[data-dropdown] *",
|
|
49
|
+
'[data-framer-component-type="CollapsibleContent"] *',
|
|
50
|
+
'[data-framer-name="Accordion"] *',
|
|
51
|
+
'[data-framer-name="FAQ"] *',
|
|
52
|
+
'[data-framer-component-type="NavigationContainer"] *',
|
|
53
|
+
".nav *",
|
|
54
|
+
".navbar *",
|
|
55
|
+
".menu *"
|
|
56
|
+
].join(",\n ");
|
|
15
57
|
function strictCSS() {
|
|
16
58
|
return `
|
|
17
59
|
/* Accessify animation-stop — strict mode */
|
|
@@ -23,30 +65,32 @@ function createAnimationStopModule() {
|
|
|
23
65
|
transition-duration: 0.01ms !important;
|
|
24
66
|
transition-delay: 0s !important;
|
|
25
67
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
68
|
+
|
|
69
|
+
/* Hover & focus transitions — explicitly killed even on interactive elements */
|
|
70
|
+
*:hover, *:focus, *:focus-within,
|
|
71
|
+
*:hover *, *:focus *, *:focus-within * {
|
|
72
|
+
transition-duration: 0.01ms !important;
|
|
73
|
+
transition-delay: 0s !important;
|
|
32
74
|
}
|
|
33
75
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
[data-framer-name="Accordion"] *, [data-framer-name="FAQ"] *,
|
|
40
|
-
[data-framer-component-type="NavigationContainer"] *,
|
|
41
|
-
.nav *, .navbar *, .menu * {
|
|
76
|
+
${sharedCSS()}
|
|
77
|
+
|
|
78
|
+
/* Interactive elements keep a short functional transition for CLICK state-changes.
|
|
79
|
+
Hover is still killed by the :hover rule above (higher specificity combo). */
|
|
80
|
+
${INTERACTIVE_SELECTORS} {
|
|
42
81
|
transition-duration: 0.15s !important;
|
|
43
82
|
animation-duration: 0.15s !important;
|
|
44
83
|
}
|
|
84
|
+
|
|
85
|
+
/* But re-kill hover even on interactive elements */
|
|
86
|
+
${INTERACTIVE_SELECTORS.split(",").map((s) => s.trim() + ":hover").join(",\n ")} {
|
|
87
|
+
transition-duration: 0.01ms !important;
|
|
88
|
+
}
|
|
45
89
|
`;
|
|
46
90
|
}
|
|
47
91
|
function relaxedCSS() {
|
|
48
92
|
return `
|
|
49
|
-
/* Accessify animation-stop — relaxed (post-interaction) */
|
|
93
|
+
/* Accessify animation-stop — relaxed (post-interaction, 350ms window) */
|
|
50
94
|
*, *::before, *::after {
|
|
51
95
|
animation-fill-mode: forwards !important;
|
|
52
96
|
animation-duration: 0.01ms !important;
|
|
@@ -55,13 +99,7 @@ function createAnimationStopModule() {
|
|
|
55
99
|
transition-duration: 0.15s !important;
|
|
56
100
|
transition-delay: 0s !important;
|
|
57
101
|
}
|
|
58
|
-
|
|
59
|
-
scroll-behavior: auto !important;
|
|
60
|
-
}
|
|
61
|
-
marquee {
|
|
62
|
-
-moz-binding: none !important;
|
|
63
|
-
overflow: hidden !important;
|
|
64
|
-
}
|
|
102
|
+
${sharedCSS()}
|
|
65
103
|
`;
|
|
66
104
|
}
|
|
67
105
|
function injectStyles() {
|
|
@@ -151,6 +189,39 @@ function createAnimationStopModule() {
|
|
|
151
189
|
originalIntersectionObserver = null;
|
|
152
190
|
}
|
|
153
191
|
}
|
|
192
|
+
const BLOCKED_HOVER_CLASSES = /* @__PURE__ */ new Set(["hover", "pressed"]);
|
|
193
|
+
function patchClassList() {
|
|
194
|
+
if (originalClassListAdd) return;
|
|
195
|
+
originalClassListAdd = DOMTokenList.prototype.add;
|
|
196
|
+
originalClassListRemove = DOMTokenList.prototype.remove;
|
|
197
|
+
DOMTokenList.prototype.add = function(...tokens) {
|
|
198
|
+
if (enabled) {
|
|
199
|
+
tokens = tokens.filter((t) => !BLOCKED_HOVER_CLASSES.has(t));
|
|
200
|
+
if (tokens.length === 0) return;
|
|
201
|
+
}
|
|
202
|
+
return originalClassListAdd.apply(this, tokens);
|
|
203
|
+
};
|
|
204
|
+
DOMTokenList.prototype.remove = function(...tokens) {
|
|
205
|
+
if (enabled) {
|
|
206
|
+
tokens = tokens.filter((t) => !BLOCKED_HOVER_CLASSES.has(t));
|
|
207
|
+
if (tokens.length === 0) return;
|
|
208
|
+
}
|
|
209
|
+
return originalClassListRemove.apply(this, tokens);
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function restoreClassList() {
|
|
213
|
+
if (originalClassListAdd) {
|
|
214
|
+
DOMTokenList.prototype.add = originalClassListAdd;
|
|
215
|
+
originalClassListAdd = null;
|
|
216
|
+
}
|
|
217
|
+
if (originalClassListRemove) {
|
|
218
|
+
DOMTokenList.prototype.remove = originalClassListRemove;
|
|
219
|
+
originalClassListRemove = null;
|
|
220
|
+
}
|
|
221
|
+
document.querySelectorAll(".hover, .pressed").forEach((el) => {
|
|
222
|
+
el.classList.remove("hover", "pressed");
|
|
223
|
+
});
|
|
224
|
+
}
|
|
154
225
|
function isInsideWidget(el) {
|
|
155
226
|
return !!el.closest("#accessify-root");
|
|
156
227
|
}
|
|
@@ -170,9 +241,12 @@ function createAnimationStopModule() {
|
|
|
170
241
|
const inlineStyle = el.getAttribute("style") || "";
|
|
171
242
|
let needsFix = false;
|
|
172
243
|
const fixes = [];
|
|
244
|
+
const isFramerAppear = el.hasAttribute("data-framer-appear-id");
|
|
245
|
+
const isAnimatedEl = isFramerAppear || el.hasAttribute("data-aos") || el.hasAttribute("data-scroll") || el.hasAttribute("data-sr-id") || el.classList.contains("gsap-reveal") || inlineStyle.includes("will-change") && inlineStyle.includes("transform");
|
|
246
|
+
const opacityThreshold = isAnimatedEl ? 0.95 : 0.1;
|
|
173
247
|
if (computed.display !== "none") {
|
|
174
248
|
const opacityVal = parseFloat(computed.opacity);
|
|
175
|
-
if (!isNaN(opacityVal) && opacityVal <
|
|
249
|
+
if (!isNaN(opacityVal) && opacityVal < opacityThreshold) {
|
|
176
250
|
const rect = el.getBoundingClientRect();
|
|
177
251
|
if (rect.width > 0 || rect.height > 0 || el.children.length > 0) {
|
|
178
252
|
fixes.push("opacity:1");
|
|
@@ -196,21 +270,15 @@ function createAnimationStopModule() {
|
|
|
196
270
|
const transformMatch = inlineStyle.match(/transform\s*:\s*([^;]+)/i);
|
|
197
271
|
if (transformMatch) {
|
|
198
272
|
const t = transformMatch[1];
|
|
199
|
-
const translateYMatch = t.match(/translateY\(\s*(
|
|
200
|
-
const translateXMatch = t.match(/translateX\(\s*(
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (translateXMatch) {
|
|
209
|
-
const val = Math.abs(parseInt(translateXMatch[1], 10));
|
|
210
|
-
if (val > 20) {
|
|
211
|
-
fixes.push("transform:none");
|
|
212
|
-
needsFix = true;
|
|
213
|
-
}
|
|
273
|
+
const translateYMatch = t.match(/translateY\(\s*(-?[\d.]+)/);
|
|
274
|
+
const translateXMatch = t.match(/translateX\(\s*(-?[\d.]+)/);
|
|
275
|
+
const threshold = isAnimatedEl ? 1 : 20;
|
|
276
|
+
let shouldFixTransform = false;
|
|
277
|
+
if (translateYMatch && Math.abs(parseFloat(translateYMatch[1])) >= threshold) shouldFixTransform = true;
|
|
278
|
+
if (translateXMatch && Math.abs(parseFloat(translateXMatch[1])) >= threshold) shouldFixTransform = true;
|
|
279
|
+
if (shouldFixTransform) {
|
|
280
|
+
fixes.push("translate-zero");
|
|
281
|
+
needsFix = true;
|
|
214
282
|
}
|
|
215
283
|
}
|
|
216
284
|
}
|
|
@@ -218,8 +286,14 @@ function createAnimationStopModule() {
|
|
|
218
286
|
el.setAttribute(DATA_ORIG, inlineStyle);
|
|
219
287
|
el.setAttribute(DATA_FIXED, "true");
|
|
220
288
|
for (const fix of fixes) {
|
|
221
|
-
|
|
222
|
-
|
|
289
|
+
if (fix === "translate-zero") {
|
|
290
|
+
const currentTransform = el.style.transform || computed.transform || "";
|
|
291
|
+
const zeroed = currentTransform.replace(/translateY\([^)]+\)/gi, "translateY(0px)").replace(/translateX\([^)]+\)/gi, "translateX(0px)");
|
|
292
|
+
el.style.setProperty("transform", zeroed, "important");
|
|
293
|
+
} else {
|
|
294
|
+
const [prop, val] = fix.split(":");
|
|
295
|
+
el.style.setProperty(prop, val, "important");
|
|
296
|
+
}
|
|
223
297
|
}
|
|
224
298
|
}
|
|
225
299
|
}
|
|
@@ -236,6 +310,22 @@ function createAnimationStopModule() {
|
|
|
236
310
|
el.removeAttribute(DATA_FIXED);
|
|
237
311
|
}
|
|
238
312
|
}
|
|
313
|
+
function forceFramerAppearElements() {
|
|
314
|
+
const appearEls = document.querySelectorAll("[data-framer-appear-id]");
|
|
315
|
+
for (const el of appearEls) {
|
|
316
|
+
if (isInsideWidget(el)) continue;
|
|
317
|
+
if (el.hasAttribute(DATA_FIXED)) continue;
|
|
318
|
+
const inlineStyle = el.getAttribute("style") || "";
|
|
319
|
+
el.setAttribute(DATA_ORIG, inlineStyle);
|
|
320
|
+
el.setAttribute(DATA_FIXED, "true");
|
|
321
|
+
el.style.setProperty("opacity", "1", "important");
|
|
322
|
+
const current = el.style.transform || "";
|
|
323
|
+
if (/translate/i.test(current)) {
|
|
324
|
+
const zeroed = current.replace(/translateY\([^)]+\)/gi, "translateY(0px)").replace(/translateX\([^)]+\)/gi, "translateX(0px)");
|
|
325
|
+
el.style.setProperty("transform", zeroed, "important");
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
239
329
|
function finishAllAnimations() {
|
|
240
330
|
try {
|
|
241
331
|
const animations = document.getAnimations?.();
|
|
@@ -355,6 +445,64 @@ function createAnimationStopModule() {
|
|
|
355
445
|
}
|
|
356
446
|
});
|
|
357
447
|
}
|
|
448
|
+
function freezeScrollAnimations() {
|
|
449
|
+
const all = document.querySelectorAll("*");
|
|
450
|
+
for (const el of all) {
|
|
451
|
+
if (isInsideWidget(el)) continue;
|
|
452
|
+
if (el.hasAttribute(DATA_FROZEN_TRANSFORM)) continue;
|
|
453
|
+
const computed = window.getComputedStyle(el);
|
|
454
|
+
const t = computed.transform;
|
|
455
|
+
if (t && t !== "none") {
|
|
456
|
+
el.setAttribute(DATA_FROZEN_TRANSFORM, t);
|
|
457
|
+
el.style.transform = t;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
scrollHandler = () => {
|
|
461
|
+
if (!enabled) return;
|
|
462
|
+
const frozen = document.querySelectorAll(`[${DATA_FROZEN_TRANSFORM}]`);
|
|
463
|
+
for (const el of frozen) {
|
|
464
|
+
const saved = el.getAttribute(DATA_FROZEN_TRANSFORM);
|
|
465
|
+
if (saved && el.style.transform !== saved) {
|
|
466
|
+
el.style.transform = saved;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
};
|
|
470
|
+
window.addEventListener("scroll", scrollHandler, { passive: true, capture: true });
|
|
471
|
+
scrollStyleObserver = new MutationObserver((mutations) => {
|
|
472
|
+
if (!enabled) return;
|
|
473
|
+
for (const m of mutations) {
|
|
474
|
+
if (m.type !== "attributes" || m.attributeName !== "style") continue;
|
|
475
|
+
const el = m.target;
|
|
476
|
+
if (!el.hasAttribute(DATA_FROZEN_TRANSFORM)) continue;
|
|
477
|
+
const saved = el.getAttribute(DATA_FROZEN_TRANSFORM);
|
|
478
|
+
if (saved && el.style.transform !== saved) {
|
|
479
|
+
el.style.transform = saved;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
scrollStyleObserver.observe(document.body, {
|
|
484
|
+
attributes: true,
|
|
485
|
+
attributeFilter: ["style"],
|
|
486
|
+
subtree: true
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
function unfreezeScrollAnimations() {
|
|
490
|
+
if (scrollHandler) {
|
|
491
|
+
window.removeEventListener("scroll", scrollHandler, true);
|
|
492
|
+
scrollHandler = null;
|
|
493
|
+
}
|
|
494
|
+
if (scrollStyleObserver) {
|
|
495
|
+
scrollStyleObserver.disconnect();
|
|
496
|
+
scrollStyleObserver = null;
|
|
497
|
+
}
|
|
498
|
+
const frozen = document.querySelectorAll(`[${DATA_FROZEN_TRANSFORM}]`);
|
|
499
|
+
for (const el of frozen) {
|
|
500
|
+
if (!el.hasAttribute(DATA_FIXED)) {
|
|
501
|
+
el.style.removeProperty("transform");
|
|
502
|
+
}
|
|
503
|
+
el.removeAttribute(DATA_FROZEN_TRANSFORM);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
358
506
|
function setupObserver() {
|
|
359
507
|
if (mutationObserver) return;
|
|
360
508
|
mutationObserver = new MutationObserver((mutations) => {
|
|
@@ -420,7 +568,9 @@ function createAnimationStopModule() {
|
|
|
420
568
|
scanTimers.push(setTimeout(() => {
|
|
421
569
|
if (!enabled) return;
|
|
422
570
|
finishAllAnimations();
|
|
571
|
+
forceFramerAppearElements();
|
|
423
572
|
bruteForceVisibilityScan();
|
|
573
|
+
freezeScrollAnimations();
|
|
424
574
|
pauseAllVideos();
|
|
425
575
|
freezeAllGifs();
|
|
426
576
|
pauseSVG();
|
|
@@ -435,9 +585,15 @@ function createAnimationStopModule() {
|
|
|
435
585
|
if (enabled) return;
|
|
436
586
|
enabled = true;
|
|
437
587
|
injectStyles();
|
|
588
|
+
patchClassList();
|
|
589
|
+
document.querySelectorAll(".hover, .pressed").forEach((el) => {
|
|
590
|
+
el.classList.remove("hover", "pressed");
|
|
591
|
+
});
|
|
438
592
|
patchIntersectionObserver();
|
|
439
593
|
finishAllAnimations();
|
|
594
|
+
forceFramerAppearElements();
|
|
440
595
|
bruteForceVisibilityScan();
|
|
596
|
+
freezeScrollAnimations();
|
|
441
597
|
pauseAllVideos();
|
|
442
598
|
interceptVideoPlay();
|
|
443
599
|
freezeAllGifs();
|
|
@@ -453,6 +609,8 @@ function createAnimationStopModule() {
|
|
|
453
609
|
clearScans();
|
|
454
610
|
teardownObserver();
|
|
455
611
|
removeInteractionListeners();
|
|
612
|
+
unfreezeScrollAnimations();
|
|
613
|
+
restoreClassList();
|
|
456
614
|
startMarquees();
|
|
457
615
|
resumeSVG();
|
|
458
616
|
restoreAllGifs();
|
|
@@ -480,4 +638,4 @@ function createAnimationStopModule() {
|
|
|
480
638
|
export {
|
|
481
639
|
createAnimationStopModule as default
|
|
482
640
|
};
|
|
483
|
-
//# sourceMappingURL=animation-stop-
|
|
641
|
+
//# sourceMappingURL=animation-stop-CKP0GPCj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-stop-CKP0GPCj.js","sources":["../src/features/animation-stop.ts"],"sourcesContent":["import type { FeatureModule, FeatureState } from '../types';\n\n/**\n * Animation Stop – V3.1\n *\n * 8-Layer approach for universal animation stopping:\n * 1. CSS: fill-mode:forwards + duration:0.01ms (NOT 0ms or none!)\n * 2. CSS: Hover/focus transitions killed explicitly\n * 3. CSS: scroll-timeline/animation-timeline neutralised\n * 4. IntersectionObserver monkey-patch: scroll-triggered content appears immediately\n * 5. Scroll-linked animation freeze: snapshot transforms, block scroll-driven changes\n * 6. Brute-force element scan: force hidden-by-animation elements visible\n * 7. Web Animations API: finish() running animations\n * 8. Media: pause videos, freeze GIFs, stop SVG SMIL, stop marquees\n * + MutationObserver for dynamic content\n *\n * Interactive elements (accordions, dropdowns) keep short transitions on CLICK only.\n * User clicks temporarily allow transitions (350ms window).\n * Clean restore via data-attributes when deactivated.\n */\nexport default function createAnimationStopModule(): FeatureModule {\n let enabled = false;\n const STYLE_ID = 'accessify-animation-stop';\n const STORAGE_KEY = 'accessify-animation-stop';\n const DATA_ORIG = 'data-accessify-orig-style';\n const DATA_FIXED = 'data-accessify-fixed';\n const DATA_FROZEN_TRANSFORM = 'data-a11y-frozen-transform';\n\n // --- State ---\n let pausedVideos: HTMLVideoElement[] = [];\n let gifOriginals = new Map<HTMLImageElement, string>();\n let mutationObserver: MutationObserver | null = null;\n let scrollStyleObserver: MutationObserver | null = null;\n let scrollHandler: (() => void) | null = null;\n let originalVideoPlay: typeof HTMLVideoElement.prototype.play | null = null;\n let originalIntersectionObserver: typeof IntersectionObserver | null = null;\n let originalClassListAdd: typeof DOMTokenList.prototype.add | null = null;\n let originalClassListRemove: typeof DOMTokenList.prototype.remove | null = null;\n let interactionTimer: ReturnType<typeof setTimeout> | null = null;\n let styleEl: HTMLStyleElement | null = null;\n let scanTimers: ReturnType<typeof setTimeout>[] = [];\n\n // =========================================================================\n // 1. CSS – force end-states via fill-mode:forwards + 0.01ms duration\n // =========================================================================\n\n // Shared CSS block for scroll-timeline + scroll-behavior + marquee\n function sharedCSS(): string {\n return `\n html {\n scroll-behavior: auto !important;\n }\n marquee {\n -moz-binding: none !important;\n overflow: hidden !important;\n }\n\n /* Kill CSS scroll-driven animations */\n *, *::before, *::after {\n animation-timeline: auto !important;\n scroll-timeline: none !important;\n }\n `;\n }\n\n // Interactive selectors — these get a short transition on CLICK (not hover)\n const INTERACTIVE_SELECTORS = [\n 'details > *', '[data-accordion] > *', '[role=\"tabpanel\"]',\n 'dialog', 'dialog *', '[aria-expanded] + *',\n '.accordion *', '.collapse *', '.dropdown-menu *',\n '.faq *', '[data-dropdown] *',\n '[data-framer-component-type=\"CollapsibleContent\"] *',\n '[data-framer-name=\"Accordion\"] *', '[data-framer-name=\"FAQ\"] *',\n '[data-framer-component-type=\"NavigationContainer\"] *',\n '.nav *', '.navbar *', '.menu *',\n ].join(',\\n ');\n\n function strictCSS(): string {\n return `\n /* Accessify animation-stop — strict mode */\n *, *::before, *::after {\n animation-fill-mode: forwards !important;\n animation-duration: 0.01ms !important;\n animation-delay: 0s !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n transition-delay: 0s !important;\n }\n\n /* Hover & focus transitions — explicitly killed even on interactive elements */\n *:hover, *:focus, *:focus-within,\n *:hover *, *:focus *, *:focus-within * {\n transition-duration: 0.01ms !important;\n transition-delay: 0s !important;\n }\n\n ${sharedCSS()}\n\n /* Interactive elements keep a short functional transition for CLICK state-changes.\n Hover is still killed by the :hover rule above (higher specificity combo). */\n ${INTERACTIVE_SELECTORS} {\n transition-duration: 0.15s !important;\n animation-duration: 0.15s !important;\n }\n\n /* But re-kill hover even on interactive elements */\n ${INTERACTIVE_SELECTORS.split(',').map(s => s.trim() + ':hover').join(',\\n ')} {\n transition-duration: 0.01ms !important;\n }\n `;\n }\n\n function relaxedCSS(): string {\n return `\n /* Accessify animation-stop — relaxed (post-interaction, 350ms window) */\n *, *::before, *::after {\n animation-fill-mode: forwards !important;\n animation-duration: 0.01ms !important;\n animation-delay: 0s !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.15s !important;\n transition-delay: 0s !important;\n }\n ${sharedCSS()}\n `;\n }\n\n function injectStyles() {\n if (document.getElementById(STYLE_ID)) return;\n styleEl = document.createElement('style');\n styleEl.id = STYLE_ID;\n styleEl.textContent = strictCSS();\n document.head.appendChild(styleEl);\n }\n\n function removeStyles() {\n document.getElementById(STYLE_ID)?.remove();\n styleEl = null;\n }\n\n // =========================================================================\n // 2. Interaction listener — briefly allow transitions on click/key\n // =========================================================================\n\n function onUserInteraction() {\n if (!enabled || !styleEl) return;\n styleEl.textContent = relaxedCSS();\n if (interactionTimer) clearTimeout(interactionTimer);\n interactionTimer = setTimeout(() => {\n if (enabled && styleEl) styleEl.textContent = strictCSS();\n }, 350);\n }\n\n function onKeyInteraction(e: KeyboardEvent) {\n if (e.key === 'Enter' || e.key === ' ') onUserInteraction();\n }\n\n function addInteractionListeners() {\n document.addEventListener('click', onUserInteraction, true);\n document.addEventListener('keydown', onKeyInteraction, true);\n }\n\n function removeInteractionListeners() {\n document.removeEventListener('click', onUserInteraction, true);\n document.removeEventListener('keydown', onKeyInteraction, true);\n if (interactionTimer) { clearTimeout(interactionTimer); interactionTimer = null; }\n }\n\n // =========================================================================\n // 3. IntersectionObserver monkey-patch\n // Scroll-triggered animations (AOS, Framer, ScrollReveal, GSAP ScrollTrigger)\n // rely on IntersectionObserver. We replace it with a fake that immediately\n // reports all observed elements as intersecting, so their reveal callbacks fire.\n // =========================================================================\n\n function patchIntersectionObserver() {\n if (originalIntersectionObserver) return;\n originalIntersectionObserver = window.IntersectionObserver;\n\n const FakeObserver = class {\n private callback: IntersectionObserverCallback;\n private _entries: IntersectionObserverEntry[];\n\n constructor(callback: IntersectionObserverCallback, _options?: IntersectionObserverInit) {\n this.callback = callback;\n this._entries = [];\n }\n\n observe(target: Element) {\n const entry: IntersectionObserverEntry = {\n target,\n isIntersecting: true,\n intersectionRatio: 1,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRect: target.getBoundingClientRect(),\n rootBounds: null,\n time: performance.now(),\n };\n this._entries.push(entry);\n // Fire callback async so it behaves like real observer\n setTimeout(() => {\n try { this.callback([entry], this as any); } catch { /* lib error */ }\n }, 0);\n }\n\n unobserve(_target: Element) {\n this._entries = this._entries.filter(e => e.target !== _target);\n }\n\n disconnect() {\n this._entries = [];\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return this._entries;\n }\n\n get root() { return null; }\n get rootMargin() { return '0px 0px 0px 0px'; }\n get thresholds() { return [0]; }\n };\n\n (window as any).IntersectionObserver = FakeObserver;\n }\n\n function restoreIntersectionObserver() {\n if (originalIntersectionObserver) {\n window.IntersectionObserver = originalIntersectionObserver;\n originalIntersectionObserver = null;\n }\n }\n\n // =========================================================================\n // 4. Framer hover class interceptor\n // Framer doesn't use CSS :hover — it adds/removes a JS \".hover\" class\n // via mouseenter/mouseleave. We intercept classList.add/remove to block\n // the \"hover\" token entirely while active.\n // =========================================================================\n\n const BLOCKED_HOVER_CLASSES = new Set(['hover', 'pressed']);\n\n function patchClassList() {\n if (originalClassListAdd) return;\n originalClassListAdd = DOMTokenList.prototype.add;\n originalClassListRemove = DOMTokenList.prototype.remove;\n\n DOMTokenList.prototype.add = function (...tokens: string[]) {\n if (enabled) {\n tokens = tokens.filter(t => !BLOCKED_HOVER_CLASSES.has(t));\n if (tokens.length === 0) return;\n }\n return originalClassListAdd!.apply(this, tokens);\n };\n\n DOMTokenList.prototype.remove = function (...tokens: string[]) {\n if (enabled) {\n tokens = tokens.filter(t => !BLOCKED_HOVER_CLASSES.has(t));\n if (tokens.length === 0) return;\n }\n return originalClassListRemove!.apply(this, tokens);\n };\n }\n\n function restoreClassList() {\n if (originalClassListAdd) {\n DOMTokenList.prototype.add = originalClassListAdd;\n originalClassListAdd = null;\n }\n if (originalClassListRemove) {\n DOMTokenList.prototype.remove = originalClassListRemove;\n originalClassListRemove = null;\n }\n // Remove any leftover .hover classes that got applied before patching\n document.querySelectorAll('.hover, .pressed').forEach(el => {\n el.classList.remove('hover', 'pressed');\n });\n }\n\n // =========================================================================\n // 5. Brute-force element scan — force hidden-by-animation elements visible\n // Checks: computed opacity, inline transform/translate, visibility, clipPath\n // Stores originals in data-attributes for clean restore\n // =========================================================================\n\n function isInsideWidget(el: HTMLElement): boolean {\n return !!el.closest('#accessify-root');\n }\n\n /**\n * Scan ALL elements and force anything that looks animation-hidden into visible state.\n * We check both computed styles and inline styles.\n */\n function bruteForceVisibilityScan() {\n const all = document.querySelectorAll<HTMLElement>('*');\n for (const el of all) {\n if (isInsideWidget(el)) continue;\n if (el.hasAttribute(DATA_FIXED)) continue; // already fixed\n fixElementIfHidden(el);\n }\n }\n\n function fixElementIfHidden(el: HTMLElement) {\n if (isInsideWidget(el)) return;\n if (el.hasAttribute(DATA_FIXED)) return;\n if (el.tagName === 'SCRIPT' || el.tagName === 'STYLE' || el.tagName === 'LINK' || el.tagName === 'META') return;\n\n const computed = window.getComputedStyle(el);\n const inlineStyle = el.getAttribute('style') || '';\n let needsFix = false;\n const fixes: string[] = [];\n\n // Is this a Framer appear-animation element?\n const isFramerAppear = el.hasAttribute('data-framer-appear-id');\n // Is this any known animation-start-state element? (AOS, GSAP, scroll-reveal, Framer)\n const isAnimatedEl = isFramerAppear\n || el.hasAttribute('data-aos')\n || el.hasAttribute('data-scroll')\n || el.hasAttribute('data-sr-id')\n || el.classList.contains('gsap-reveal')\n || (inlineStyle.includes('will-change') && inlineStyle.includes('transform'));\n\n // Opacity threshold: for known animated elements use 0.95 (anything not fully visible)\n // For generic elements use 0.1 (clearly hidden)\n const opacityThreshold = isAnimatedEl ? 0.95 : 0.1;\n\n // Check opacity\n if (computed.display !== 'none') {\n const opacityVal = parseFloat(computed.opacity);\n if (!isNaN(opacityVal) && opacityVal < opacityThreshold) {\n const rect = el.getBoundingClientRect();\n if (rect.width > 0 || rect.height > 0 || el.children.length > 0) {\n fixes.push('opacity:1');\n needsFix = true;\n }\n }\n }\n\n // Check visibility:hidden (only if element has content)\n if (computed.visibility === 'hidden' && el.children.length > 0) {\n const rect = el.getBoundingClientRect();\n if (rect.width > 1 && rect.height > 1) {\n fixes.push('visibility:visible');\n needsFix = true;\n }\n }\n\n // Check clip-path that hides element completely\n const clipPath = computed.clipPath || (computed as any).webkitClipPath || '';\n if (clipPath && clipPath !== 'none' && (\n clipPath.includes('inset(100') || clipPath.includes('circle(0') ||\n clipPath.includes('polygon(0') || clipPath === 'inset(50%)'\n )) {\n fixes.push('clip-path:none');\n needsFix = true;\n }\n\n // Check inline transform with translate that moves element off-position\n // For Framer appear elements: ANY translate is an animation start-state\n // For generic elements: only large translates (>20px)\n if (inlineStyle && /translate/i.test(inlineStyle)) {\n const transformMatch = inlineStyle.match(/transform\\s*:\\s*([^;]+)/i);\n if (transformMatch) {\n const t = transformMatch[1];\n const translateYMatch = t.match(/translateY\\(\\s*(-?[\\d.]+)/);\n const translateXMatch = t.match(/translateX\\(\\s*(-?[\\d.]+)/);\n const threshold = isAnimatedEl ? 1 : 20; // 1px for animated, 20px for generic\n\n let shouldFixTransform = false;\n if (translateYMatch && Math.abs(parseFloat(translateYMatch[1])) >= threshold) shouldFixTransform = true;\n if (translateXMatch && Math.abs(parseFloat(translateXMatch[1])) >= threshold) shouldFixTransform = true;\n\n if (shouldFixTransform) {\n // Don't use transform:none — that breaks Framer layout.\n // Instead zero out only the translate portion.\n fixes.push('translate-zero');\n needsFix = true;\n }\n }\n }\n\n if (needsFix) {\n // Store original inline style for clean restore\n el.setAttribute(DATA_ORIG, inlineStyle);\n el.setAttribute(DATA_FIXED, 'true');\n // Apply fixes\n for (const fix of fixes) {\n if (fix === 'translate-zero') {\n // Replace translate values in existing transform with zero, keep rest\n const currentTransform = el.style.transform || computed.transform || '';\n const zeroed = currentTransform\n .replace(/translateY\\([^)]+\\)/gi, 'translateY(0px)')\n .replace(/translateX\\([^)]+\\)/gi, 'translateX(0px)');\n el.style.setProperty('transform', zeroed, 'important');\n } else {\n const [prop, val] = fix.split(':');\n el.style.setProperty(prop, val, 'important');\n }\n }\n }\n }\n\n function restoreFixedElements() {\n const fixed = document.querySelectorAll<HTMLElement>(`[${DATA_FIXED}]`);\n for (const el of fixed) {\n const orig = el.getAttribute(DATA_ORIG);\n if (orig !== null) {\n el.setAttribute('style', orig);\n } else {\n el.removeAttribute('style');\n }\n el.removeAttribute(DATA_ORIG);\n el.removeAttribute(DATA_FIXED);\n }\n }\n\n // =========================================================================\n // 5b. Framer-specific appear element force-reveal\n // Framer appear animations start at opacity:0.001 with translateY/X\n // and are driven by Framer's internal viewport detection.\n // We force them all to their visible end-state.\n // =========================================================================\n\n function forceFramerAppearElements() {\n const appearEls = document.querySelectorAll<HTMLElement>('[data-framer-appear-id]');\n for (const el of appearEls) {\n if (isInsideWidget(el)) continue;\n if (el.hasAttribute(DATA_FIXED)) continue;\n\n const inlineStyle = el.getAttribute('style') || '';\n el.setAttribute(DATA_ORIG, inlineStyle);\n el.setAttribute(DATA_FIXED, 'true');\n\n // Force opacity to 1\n el.style.setProperty('opacity', '1', 'important');\n\n // Zero out any translates but keep the rest of the transform\n const current = el.style.transform || '';\n if (/translate/i.test(current)) {\n const zeroed = current\n .replace(/translateY\\([^)]+\\)/gi, 'translateY(0px)')\n .replace(/translateX\\([^)]+\\)/gi, 'translateX(0px)');\n el.style.setProperty('transform', zeroed, 'important');\n }\n }\n }\n\n // =========================================================================\n // 6. Web Animations API — finish() running animations\n // =========================================================================\n\n function finishAllAnimations() {\n try {\n const animations = document.getAnimations?.();\n if (animations) {\n for (const anim of animations) {\n try {\n // finish() jumps to END state (visible) — NOT pause() which freezes at START\n anim.finish();\n } catch {\n try { anim.cancel(); } catch { /* ignore */ }\n }\n }\n }\n } catch { /* getAnimations not supported */ }\n }\n\n // =========================================================================\n // 6. Video control\n // =========================================================================\n\n function pauseAllVideos() {\n document.querySelectorAll<HTMLVideoElement>('video').forEach((video) => {\n if (!video.paused) {\n video.pause();\n video.dataset.accessifyPaused = 'true';\n pausedVideos.push(video);\n }\n });\n }\n\n function interceptVideoPlay() {\n if (originalVideoPlay) return;\n originalVideoPlay = HTMLVideoElement.prototype.play;\n HTMLVideoElement.prototype.play = function () {\n if (enabled) return Promise.resolve();\n return originalVideoPlay!.call(this);\n };\n }\n\n function restoreVideoPlay() {\n if (originalVideoPlay) {\n HTMLVideoElement.prototype.play = originalVideoPlay;\n originalVideoPlay = null;\n }\n }\n\n function resumeAllVideos() {\n restoreVideoPlay();\n pausedVideos.forEach((video) => {\n try { delete video.dataset.accessifyPaused; video.play(); } catch { /* gone */ }\n });\n pausedVideos = [];\n }\n\n // =========================================================================\n // 7. GIF freeze\n // =========================================================================\n\n function freezeGif(img: HTMLImageElement) {\n const src = (img.src || img.getAttribute('src') || '').toLowerCase();\n if (!src.includes('.gif')) return;\n if (gifOriginals.has(img)) return;\n\n const doFreeze = () => {\n try {\n const w = img.naturalWidth || img.width;\n const h = img.naturalHeight || img.height;\n if (w === 0 || h === 0) return;\n const c = document.createElement('canvas');\n c.width = w; c.height = h;\n const ctx = c.getContext('2d');\n if (!ctx) return;\n ctx.drawImage(img, 0, 0);\n gifOriginals.set(img, img.src);\n img.src = c.toDataURL('image/png');\n } catch { /* cross-origin */ }\n };\n\n if (img.complete && img.naturalWidth > 0) doFreeze();\n else img.addEventListener('load', doFreeze, { once: true });\n }\n\n function freezeAllGifs() {\n document.querySelectorAll<HTMLImageElement>('img').forEach(freezeGif);\n }\n\n function restoreAllGifs() {\n for (const [img, src] of gifOriginals) {\n try { img.src = src; } catch { /* gone */ }\n }\n gifOriginals.clear();\n }\n\n // =========================================================================\n // 8. SVG SMIL & Marquee\n // =========================================================================\n\n function pauseSVG() {\n document.querySelectorAll('svg').forEach((s) => {\n try { (s as any).pauseAnimations?.(); } catch { /* ignore */ }\n });\n }\n function resumeSVG() {\n document.querySelectorAll('svg').forEach((s) => {\n try { (s as any).unpauseAnimations?.(); } catch { /* ignore */ }\n });\n }\n function stopMarquees() {\n document.querySelectorAll('marquee').forEach((m) => {\n try { (m as any).stop?.(); } catch { /* ignore */ }\n });\n }\n function startMarquees() {\n document.querySelectorAll('marquee').forEach((m) => {\n try { (m as any).start?.(); } catch { /* ignore */ }\n });\n }\n\n // =========================================================================\n // 9. Scroll-linked animation freeze\n // Parallax, GSAP scrub, Framer useScroll, JS scroll-handlers that\n // update inline transforms/opacity. We snapshot current transforms\n // and enforce them on every scroll tick + block style mutations.\n // =========================================================================\n\n function freezeScrollAnimations() {\n // Snapshot current computed transforms for ALL elements that have one\n const all = document.querySelectorAll<HTMLElement>('*');\n for (const el of all) {\n if (isInsideWidget(el)) continue;\n if (el.hasAttribute(DATA_FROZEN_TRANSFORM)) continue;\n\n const computed = window.getComputedStyle(el);\n const t = computed.transform;\n // Only freeze elements that actually have a non-identity transform\n if (t && t !== 'none') {\n el.setAttribute(DATA_FROZEN_TRANSFORM, t);\n // Pin the current value as inline style so scroll handlers can't change it\n el.style.transform = t;\n }\n }\n\n // On scroll: re-enforce frozen transforms (scroll handlers may override inline styles)\n scrollHandler = () => {\n if (!enabled) return;\n const frozen = document.querySelectorAll<HTMLElement>(`[${DATA_FROZEN_TRANSFORM}]`);\n for (const el of frozen) {\n const saved = el.getAttribute(DATA_FROZEN_TRANSFORM);\n if (saved && el.style.transform !== saved) {\n el.style.transform = saved;\n }\n }\n };\n window.addEventListener('scroll', scrollHandler, { passive: true, capture: true });\n\n // MutationObserver that catches JS-driven style attribute changes on frozen elements\n scrollStyleObserver = new MutationObserver((mutations) => {\n if (!enabled) return;\n for (const m of mutations) {\n if (m.type !== 'attributes' || m.attributeName !== 'style') continue;\n const el = m.target as HTMLElement;\n if (!el.hasAttribute(DATA_FROZEN_TRANSFORM)) continue;\n const saved = el.getAttribute(DATA_FROZEN_TRANSFORM);\n if (saved && el.style.transform !== saved) {\n el.style.transform = saved;\n }\n }\n });\n scrollStyleObserver.observe(document.body, {\n attributes: true,\n attributeFilter: ['style'],\n subtree: true,\n });\n }\n\n function unfreezeScrollAnimations() {\n // Remove scroll listener\n if (scrollHandler) {\n window.removeEventListener('scroll', scrollHandler, true);\n scrollHandler = null;\n }\n // Disconnect style observer\n if (scrollStyleObserver) {\n scrollStyleObserver.disconnect();\n scrollStyleObserver = null;\n }\n // Restore original transforms\n const frozen = document.querySelectorAll<HTMLElement>(`[${DATA_FROZEN_TRANSFORM}]`);\n for (const el of frozen) {\n // The element's original inline style is stored in DATA_ORIG if the brute-force\n // scan also touched it. If not, just remove the inline transform we pinned.\n if (!el.hasAttribute(DATA_FIXED)) {\n // We only added inline transform — remove it\n el.style.removeProperty('transform');\n }\n el.removeAttribute(DATA_FROZEN_TRANSFORM);\n }\n }\n\n // =========================================================================\n // 10. MutationObserver — dynamic content\n // =========================================================================\n\n function setupObserver() {\n if (mutationObserver) return;\n mutationObserver = new MutationObserver((mutations) => {\n if (!enabled) return;\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (!(node instanceof HTMLElement)) continue;\n if (isInsideWidget(node)) continue;\n\n // Videos\n if (node.tagName === 'VIDEO') {\n const v = node as HTMLVideoElement;\n if (!v.paused) { v.pause(); v.dataset.accessifyPaused = 'true'; pausedVideos.push(v); }\n }\n node.querySelectorAll?.('video')?.forEach((v) => {\n if (!v.paused) { v.pause(); (v as HTMLVideoElement).dataset.accessifyPaused = 'true'; pausedVideos.push(v); }\n });\n\n // GIFs\n if (node.tagName === 'IMG') freezeGif(node as HTMLImageElement);\n node.querySelectorAll?.('img')?.forEach((i) => freezeGif(i as HTMLImageElement));\n\n // SVGs\n if (node.tagName === 'SVG') { try { (node as any).pauseAnimations?.(); } catch { /* */ } }\n node.querySelectorAll?.('svg')?.forEach((s) => {\n try { (s as any).pauseAnimations?.(); } catch { /* */ }\n });\n\n // Fix hidden-by-animation elements\n fixElementIfHidden(node);\n node.querySelectorAll?.('*')?.forEach((child) => {\n fixElementIfHidden(child as HTMLElement);\n });\n\n // Finish any new animations\n try {\n const anims = node.getAnimations?.() || [];\n for (const a of anims) { try { a.finish(); } catch { /* */ } }\n } catch { /* */ }\n }\n }\n });\n mutationObserver.observe(document.body, { childList: true, subtree: true });\n }\n\n function teardownObserver() {\n mutationObserver?.disconnect();\n mutationObserver = null;\n }\n\n // =========================================================================\n // 10. Delayed re-scans — frameworks render async\n // =========================================================================\n\n function scheduleScans() {\n for (const delay of [100, 500, 1500, 3000, 5000]) {\n scanTimers.push(setTimeout(() => {\n if (!enabled) return;\n finishAllAnimations();\n forceFramerAppearElements();\n bruteForceVisibilityScan();\n freezeScrollAnimations(); // Re-snapshot any new scroll-animated elements\n pauseAllVideos();\n freezeAllGifs();\n pauseSVG();\n }, delay));\n }\n }\n\n function clearScans() {\n scanTimers.forEach(clearTimeout);\n scanTimers = [];\n }\n\n // =========================================================================\n // Lifecycle\n // =========================================================================\n\n function activate() {\n if (enabled) return;\n enabled = true;\n\n // Layer 1+2+3: CSS — end-states, hover/focus kill, scroll-timeline kill\n injectStyles();\n\n // Layer 4: Block Framer .hover class via classList intercept\n patchClassList();\n\n // Strip any existing .hover classes already on the page\n document.querySelectorAll('.hover, .pressed').forEach(el => {\n el.classList.remove('hover', 'pressed');\n });\n\n // Layer 5: IntersectionObserver monkey-patch\n patchIntersectionObserver();\n\n // Layer 6: Finish running Web Animations\n finishAllAnimations();\n\n // Layer 7: Framer appear elements — force visible immediately\n forceFramerAppearElements();\n\n // Layer 8: Brute-force visibility scan (catches non-Framer elements)\n bruteForceVisibilityScan();\n\n // Layer 9: Scroll-linked animation freeze (parallax, GSAP scrub, etc.)\n freezeScrollAnimations();\n\n // Layer 10: Media\n pauseAllVideos();\n interceptVideoPlay();\n freezeAllGifs();\n pauseSVG();\n stopMarquees();\n\n // Interaction listener for accordions etc.\n addInteractionListeners();\n\n // Dynamic content observer\n setupObserver();\n\n // Async re-scans for framework render timing\n scheduleScans();\n\n localStorage.setItem(STORAGE_KEY, 'true');\n }\n\n function deactivate() {\n enabled = false;\n\n clearScans();\n teardownObserver();\n removeInteractionListeners();\n unfreezeScrollAnimations();\n restoreClassList();\n startMarquees();\n resumeSVG();\n restoreAllGifs();\n resumeAllVideos();\n restoreFixedElements();\n restoreIntersectionObserver();\n removeStyles();\n\n localStorage.removeItem(STORAGE_KEY);\n }\n\n return {\n id: 'animation-stop',\n name: () => 'Stop Animations',\n description: 'Pause all animations, transitions, and auto-playing videos (WCAG 2.3.1)',\n icon: 'animation-stop',\n category: 'visual',\n activate,\n deactivate,\n getState: (): FeatureState => ({ id: 'animation-stop', enabled }),\n setState: (state: { enabled: boolean }) => {\n if (state.enabled) activate();\n else deactivate();\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -6310,14 +6310,14 @@ function FeatureGrid($$anchor, $$props) {
|
|
|
6310
6310
|
const FEATURE_LOADERS = {
|
|
6311
6311
|
contrast: () => import("./contrast-CqsICAkU.js"),
|
|
6312
6312
|
"text-size": () => import("./text-size-C6OFhCGi.js"),
|
|
6313
|
-
"keyboard-nav": () => import("./keyboard-nav-
|
|
6313
|
+
"keyboard-nav": () => import("./keyboard-nav-B5IcuHY7.js"),
|
|
6314
6314
|
"link-highlight": () => import("./link-highlight-DBGm067Y.js"),
|
|
6315
6315
|
"reading-guide": () => import("./reading-guide-VT8NciIL.js"),
|
|
6316
6316
|
"reading-mask": () => import("./reading-mask-BABChuCz.js"),
|
|
6317
|
-
"animation-stop": () => import("./animation-stop-
|
|
6317
|
+
"animation-stop": () => import("./animation-stop-CKP0GPCj.js"),
|
|
6318
6318
|
"hide-images": () => import("./hide-images-B_LeCBcd.js"),
|
|
6319
6319
|
"big-cursor": () => import("./big-cursor-B2UKu9dQ.js"),
|
|
6320
|
-
"page-structure": () => import("./page-structure-
|
|
6320
|
+
"page-structure": () => import("./page-structure-B-hy7z_v.js"),
|
|
6321
6321
|
tts: () => import("./tts-CjszLRnb.js"),
|
|
6322
6322
|
"text-simplify": () => import("./text-simplify-B1v6Muvn.js"),
|
|
6323
6323
|
"alt-text": () => Promise.resolve().then(() => altText)
|
|
@@ -8400,4 +8400,4 @@ export {
|
|
|
8400
8400
|
init as i,
|
|
8401
8401
|
t
|
|
8402
8402
|
};
|
|
8403
|
-
//# sourceMappingURL=index-
|
|
8403
|
+
//# sourceMappingURL=index-DaJnh9oG.js.map
|