/** * Live-tunable glow parameters. * * Every number the halo + catch-light overlay used to hard-code lives here as * a mutable singleton so a tuning surface can drive it at runtime. Two classes: * * • runtime — read every frame inside `updateGlow`. Changing one takes * effect on the next frame with no DOM work. * • markup — baked into the SVG (`buildSvgMarkup`) at inject time: stroke * widths, blur radii, per-layer opacities, blob lengths. Changing one * requires the SVG to be rebuilt, which `setGlowConfig` signals through * `subscribeGlowConfig` so MetalFx can re-inject. * * `GLOW_DEFAULTS` are the values that shipped before this file existed, so * `resetGlowConfig()` is an exact restore. */ export interface GlowConfig { /** Overall halo group opacity multiplier. */ haloOpMul: number; /** Catch-light group intensity multiplier (clamped to 1 after multiply). */ extraIntensity: number; /** Glow opacity at a fully-lit perimeter point. */ peakOp: number; /** Glow opacity at a dark perimeter point. */ baseOp: number; /** Perpendicular inset of the halo from the ring, SVG units at 1×. */ inset: number; /** Extra outward offset for the catch-light, SVG units at 1×. */ extraOutward: number; /** Random wander amplitude along the perimeter, at the 140×40 reference. */ wanderRange: number; /** Per-frame lerp toward the wander target. */ wanderLerp: number; /** Per-frame lerp of opacity toward its luminance-driven target. */ fadeRate: number; /** Luminance below which the glow sits at `baseOp`. */ lumLo: number; /** Luminance above which the glow reaches `peakOp`. */ lumHi: number; /** Minimum time at a hotspot before a brighter rival can steal it. */ minDwellMs: number; /** Appear duration, ms. A relocation is a full fade-out at the old spot * then a full fade-in at the new one — the glow never slides. */ relocFadeMs: number; /** Disappear duration, ms. Slower than the appear so a hotspot lingers. */ relocFadeOutMs: number; /** Point-mode (masked text/glyph) intensity multiplier. The mask discards * most of the halo's blur, so what survives inside the strokes needs a * boost to read at all. */ pointGain: number; /** Half-length of the halo stroke path, at the reference pill. */ haloHalfLen: number; /** Half-length of the catch-light stroke path, at the reference pill. */ extraHalfLen: number; haloStrokeXl: number; haloStrokeLg: number; haloStrokeMd: number; haloStrokeSm: number; haloBlurXl: number; haloBlurLg: number; haloBlurMd: number; haloBlurSm: number; haloOpXl: number; haloOpLg: number; haloOpMd: number; haloOpSm: number; extraStrokeOuter: number; extraStrokeCore: number; extraBlurOuter: number; extraBlurCore: number; /** Radius of the radial mask that fades the catch-light's ends. */ extraFadeR: number; extraOpOuter: number; } export declare const GLOW_MARKUP_KEYS: ReadonlySet; export declare const GLOW_DEFAULTS: Readonly; /** Live values. Read directly by the glow engine; write via `setGlowConfig`. */ export declare const GLOW: GlowConfig; type Listener = (markupChanged: boolean) => void; /** * Merge a partial config. Notifies subscribers, flagging whether any markup * key changed so they can decide between "next frame picks it up" and * "rebuild the SVG". */ export declare function setGlowConfig(patch: Partial): void; export declare function resetGlowConfig(): void; export declare function subscribeGlowConfig(fn: Listener): () => void; export {};