/**
 * Shared body scroll-lock used by every overlay in the design system (modal,
 * service/global header menus, search and user dropdowns).
 *
 * Strategy: an iOS-safe `position: fixed` lock — `overflow: hidden` alone is
 * ignored by iOS Safari. The current scroll position is saved, the body is
 * pinned, scrollbar width is reserved to avoid a layout shift, and the scroll
 * position is restored on release.
 *
 * Reference-counted so several open overlays don't unlock the page when one of
 * them closes. Each caller holds a token (see {@link createScrollLockToken}) so
 * repeated lock/unlock calls from the same source are idempotent — only the
 * first lock and the last unlock touch the DOM.
 */
export interface ScrollLockToken {
    locked: boolean;
}
export declare const createScrollLockToken: () => ScrollLockToken;
/**
 * Lock or unlock body scroll for a single source. Pass a token created with
 * {@link createScrollLockToken} so the call is idempotent — locking an already
 * locked token (or unlocking an unlocked one) is a no-op.
 */
export declare const setScrollLock: (token: ScrollLockToken, shouldLock: boolean) => void;
