/** * Sleep - a frame at rest, in place (spec 16). * * A resting frame is its own LIVE document. Nothing is copied, pictured or swapped, so the moment * the human interacts, comments or lasers, they are already looking at the thing itself: no line * break, no spacing, no pixel can move. Sleep changes PAINT only: * * - CSS animations pause (`animation-play-state: paused`); * - every `backdrop-filter` element - the one effect that reads back what is behind it on every * composited frame, and the reason a glass design checkerboards at scale - gets the compositor's * own filtered backdrop as a static texture under its own background layers, computed and * certified by the dev server in headless Chrome (src/server/bake.ts); the rule itself is * src/shared/sleep-rule.ts, the same one the compiler certified. * * A frame with no such element - markdown, images, slides, lo-fi - never talks to the server: * its sleep is the animation pause. Frames are asked in one batch per tick; the server answers from * its disk cache (keyed by frame, theme, size and source generation) or compiles. Textures are * decoded BEFORE the override is installed, so sleep is one paint. Without textures - no compiler * (a published canvas), a compile that failed, a texture that does not decode - the frame sleeps * with the pause alone and its glass stays live: never an effect layer without its texture. * * Safety: the override is all or nothing - every target's selector must resolve to an element whose * border box is the one the server measured (half a pixel) and whose filter is still the one baked, or * the frame stays live. Wake restores the live effects under `transition: none` (an authored * transition on backdrop-filter, filter or background must not animate out of the sleep, nor into * it), then removes the