/** FNV-1a 32-bit over a string, hex-encoded, with a length suffix so the * (tiny) collision surface also has to match on length. Used for text and * stylesheet digests — a comparison fingerprint, not a security hash. */ export declare function fnv1a32(text: string): string; /** One element's structural fingerprint inside a captured page. */ export interface QaNodeSignature { /** Structural path from body: `body>div:0>table:1>tr:4>td:2` (index among * element siblings). Position-sensitive by design — reordering IS a * structural change. */ path: string; tag: string; /** Canonical attribute string: sorted `name=value` pairs joined with \x1f. * Raw (not digested) so a reviewer can see WHICH attribute changed. */ attrs: string; /** Digest of the element's direct text-node content (whitespace-normalized), * absent when the element has no direct text. */ text?: string; /** Digest of opaque rendered content whose pixels can change without a DOM * structure or attribute change (for example SVG descendants or a canvas * bitmap). `unavailable` widens to unknown because text-only cannot be * proven without this evidence. */ visual?: string; /** Nearest strict-ancestor stable anchor (unique `#id` or * `[data-qa-scope="…"]`), with the anchor element's own path so nested * anchors can be deduped to the outermost root. Absent for nodes with no * anchored ancestor (e.g. direct children of body on an anchor-free page). */ anchor?: { selector: string; path: string; }; } export interface QaStylesheetSignature { /** External sheet href, or `inline:` for a `