GeoLeaf Core API - v3.0.0
    Preparing search index...
    RenderSurface: "tooltip" | "popup" | "sidepanel"

    The three reading surfaces, as the render layer names them.

    ⚠️ Declared here rather than imported from contracts/attributes.contract.ts, where AttributeSurface says the same thing, because this module's stated invariant is that it imports nothing — not core, not the field-renderer package, not a sibling. The parity gate is what keeps the two lists equal; a shared import would trade a checked duplication for a broken invariant.