export interface CursorLightConfig { enabled: boolean; /** Distance from the ring's edge, either side, where the pointer is felt (CSS px). */ reach: number; /** Envelope for the whole effect on enter/leave, ms (~95% settled). */ fadeMs: number; /** Pointer sprite lit by the ring (needs `setCursorSprite`). */ cursor: boolean; /** How far from the ring edge the pointer still gets lit, px. Beyond it * nothing is drawn on the pointer; the last third ramps out. Independent * of `reach`, which gates spill / catch-light. */ cursorDistance: number; /** Specular: intensity of the mirrored ring (0..4, >1 stacks passes). */ cursorStrength: number; /** Diffuse: intensity of the lit rim on the face toward the ring (0..2). */ cursorDiffuse: number; /** Distance from the ring edge at which light has fallen to half, px. * Inverse-square: I = 1 / (1 + (d / falloff)²). */ cursorFalloff: number; /** Depth compression of the mirrored ring (0.1..1). Lower = the ring stays * on the pointer's edge as it gets farther, like a convex surface. */ cursorDepth: number; /** Mirror plane offset from the pointer's silhouette edge, px (+ = outside). */ cursorEdge: number; /** How far the light spreads across the body from the facing edge, px. * ~6 lights one side of the ~8 px wide arrow; 20+ covers all of it. */ cursorReach: number; /** Blur on the mirrored ring, px. */ cursorBlur: number; /** Magnification of the mirrored ring (1..5). The ring is ~2 px thick; * without this it compresses into a hairline nobody can see. */ cursorZoom: number; /** Glint on the page under the pointer. */ spill: boolean; /** Glint radius, CSS px. */ spillRadius: number; /** Peak opacity with the pointer on the ring (0..1). */ spillStrength: number; /** 0 = centred on the pointer, 1 = centred on the nearest ring point. */ spillOffset: number; /** How much the ring's brightness at that point modulates the glint (0..1). */ spillLumGain: number; /** Saturation multiplier on the sampled tint. */ spillSaturation: number; /** Strength multiplier while the pointer is inside the ring (over content). */ spillInside: number; /** Extra blur on the glint element, CSS px. 0 = gradient only. */ spillBlur: number; /** Ring catch-light follows the pointer. */ catchLight: boolean; /** Hotspot tracking, per-60 Hz-frame lerp (0..1). Lower = lags more. */ catchFollow: number; /** Opacity multiplier on the cursor-driven catch-light. */ catchGain: number; } export declare const CURSOR_LIGHT_DEFAULTS: Readonly; /** Live values. Read every frame; write via `setCursorLightConfig`. */ export declare const CURSOR_LIGHT: CursorLightConfig; export declare function setCursorLightConfig(patch: Partial): void; export declare function resetCursorLightConfig(): void; /** A raster of the platform's real pointer. `width`/`height` in CSS px, * `hotX`/`hotY` the click point. `centerX`/`centerY` optionally override * the body centre (default: alpha centroid). */ export interface CursorSprite { src: string; width: number; height: number; hotX: number; hotY: number; centerX?: number; centerY?: number; } /** Supply the pointer raster (or null to turn the cursor effect off). Must * match the OS pointer pixel-for-pixel, or the swap is visible. */ export declare function setCursorSprite(next: CursorSprite | null): void; /** Reference-counted: MetalFx calls attach on mount, detach on unmount. */ export declare function attachCursorLight(): void; export declare function detachCursorLight(): void;