GlassStyle
An opaque sequence of Glass appearance writes.
The block passed to GlassStyle runs each time a node resolves its style, into a fresh node-owned accumulator. It may run on any frame and must not have side effects. Combine Styles with then. Writes run in order and the last write to a property wins. The companion object is the empty Style and performs no writes.
A block may read snapshot state, such as an animated value. Each consuming node observes those reads; when the state changes the node resolves the Style again and redraws on the next frame without recomposition. Styles compare by identity, so remember or hoist a Style: constructing a new Style in each composition replaces it on every node. The built-in Regular and Clear responses are selected from the attached node's current system appearance during resolution, so a system appearance change does not require a replacement Style.
A Style contains no renderer or mutable runtime state. GlassStyleScope.hovered, GlassStyleScope.focused, GlassStyleScope.pressed, GlassStyleScope.interactionLightRadiusFraction, and GlassStyleScope.interactionPositionAnimationSpec declare reusable interaction presentation; each hazeGlass node replays it into a fresh node-owned snapshot and owns its signals, geometry, animations, pointer observation, and renderer resources.
The same Style sequence is replayed into whichever private renderer Haze selects. Full renderers consume every supported authored channel. Limited renderers preserve supported channels, approximate supported lighting, and omit unsupported base and interaction optics. Selection is automatic; callers do not need a capability check or a second fallback Style.