1// Tiny shared helpers used across modules.
2
3/** Query one element. */
4export const $ = (selector, root = document) => root.querySelector(selector);
5
6/** Query all elements as an array. */
7export const $$ = (selector, root = document) => [...root.querySelectorAll(selector)];
8
9/**
10 * Storage that no-ops when unavailable (private mode, blocked storage).
11 * Resolves once at load; callers use optional chaining: `storage?.getItem(...)`.
12 */
13const safeStorage = (backing) => {
14 try {
15 const key = "__storage-test";
16 backing.setItem(key, "1");
17 backing.removeItem(key);
18 return backing;
19 } catch (_) {
20 return null;
21 }
22};
23export const storage = safeStorage(localStorage);
24export const sessionStore = safeStorage(sessionStorage);
25
26const _rmq = window.matchMedia("(prefers-reduced-motion: reduce)");
27export const prefersReducedMotion = () => _rmq.matches;