/** * Marker geometry: page-absolute scroll positions for an element's travel * and, for pinned elements, its pin stretch. Pure functions, no DOM: a * reimplementation of the driver's own enter/exit and pin-span math * (src/core/driver.ts computeView/pinSpan), kept independent on purpose * (debug is a separate entry, never imports core). Ponytail: this mirrors * the two edges the driver's default 75%/25% live band actually crosses, * not the full continuous -1..1 curve; enough to place ScrollTrigger-style * guide lines. */ export interface TravelGeo { top: number; bottom: number; } export interface TravelLines { /** Page Y where --sv-view first reaches 0 (the element goes live). */ enter: number; /** Page Y where --sv-view reaches 1 (the element has fully exited). */ exit: number; } export declare function readBand(raw: string | undefined, fallback: number): number; export declare function travelLines(geo: TravelGeo, scrollY: number, vp: number, enter?: number, exit?: number): TravelLines; export interface PinGeo { wrapperTop: number; wrapperHeight: number; stageHeight: number; } export interface PinLines { start: number; end: number; } /** Pin stretch start/end in page coordinates. Starts when the wrapper's top * reaches the pin offset; ends when the wrapper's bottom meets the stage's * border box (CLAUDE.md's pin-span rule: span = wrapper height minus stage * height, the offset already folded into the stage's own height). `origin` * is the stage's normal-flow offset the driver reads with readStageOrigin * (a heading or padding before the stage): the driver's own pin starts one * origin later and its span shortens by the same amount (driver.ts * pinSpan/computePin), so markers with no origin were off by exactly that * much whenever the stage was not the pinned element's first child * (ADU-354 item 10). */ export declare function pinLines(geo: PinGeo, scrollY: number, offset?: number, origin?: number): PinLines;