# Supported behavior and limitations

Fluri is a stylized 2D browser effects engine. Geometry, paint order, and snow physics are useful approximations rather than a reconstruction of the browser compositor.

- **Layers:** Background/content particle passes mask simple opaque candidate rectangles. A bounded cache of DOM hit samples also excludes covered support bins from accumulation. Foreground flakes intentionally appear over content. Nested stacking contexts, partially transparent backgrounds, filters, blend modes, arbitrary CSS masks, clip paths, and complex sibling paint ordering can need explicit surface/layer overrides. A numeric z-index estimate is not exact browser painting order.
- **Top layer:** Native dialogs/popovers remain in the browser's top layer above document overlays. Snow cannot render over their top-layer contents from a body canvas. Native interaction and focus behavior are preserved. Use a dedicated document/component integration if this is essential.
- **Transforms:** Horizontal edges and common affine rotation/scale are supported. `getBoxQuads()` is used where available; the fallback approximates centered affine geometry. Nested transforms, skew, perspective, noncentral transform origins, and 3D projection are approximate. Debug confidence labels expose uncertainty.
- **Clipping:** Ancestor overflow rectangles and border radii are approximated. Canvas does not reproduce arbitrary clip paths or CSS masks. Surface profiles taper near rounded corners. Particles use scene-wide passes rather than independent canvases inside each scrolling container.
- **Shadow DOM:** Open roots are scanned on discovery. Internal changes inside a shadow root may require a host mutation or surface registration to refresh discovery. Closed roots cannot be inspected. Register a host as a surface or integrate explicitly.
- **Iframes:** Register the iframe element as an opaque surface. Its internal document is not inspected, including same-origin frames. Cross-origin content remains inaccessible.
- **SVG:** Outer SVG elements can be explicitly registered. Individual SVG path collision geometry is not inferred.
- **Container:** Effects are clipped to a rectangular viewport projection of the container. Changing container requires a new instance. Mobile pinch zoom and browser UI behavior vary; visual viewport events trigger geometry refresh, but arbitrary zoom/compositor behavior is not guaranteed.
- **Snow:** Mass is a 2D visual area. Snowflake emission and manual spawn/add commands introduce mass; viewport exit, melting, clear, stop, destroy, and configured disposal remove it. Clumps and deposits account for transfer within floating-point tolerance. This is not SI-unit simulation.
- **Snowballs:** Shift + press-and-drag is the intentional default. Hover-circle is opt-in. Touch gestures are conservative; use explicit accessible controls on touch-only devices. Manual snowman spawning is an explicit demo convenience; gesture-based three-ball assembly uses existing compatible balls.
- **Quality:** Particle and surface budgets are bounded. Offscreen candidate profiles can remain cached. Discovery traversals cap work at 12,000 nodes per root, and the configured surface cap bounds tracked profiles. A bounded transient particle pool coalesces clumps under pressure.
- **Performance data:** Headless/browser measurements are local observations, not guarantees for physical mobile devices or other hardware. Device emulation is not physical-device certification. Reports identify test environments.
- **External features:** No real-weather adapter, audio, native desktop integration, multiplayer, GPU renderer, or P3 experimental effects are included. P0–P2 winter/Christmas functionality is the delivery scope.
- **CSP:** The overlay and optional control use programmatic style properties. An integrator's restrictive style CSP may require a compatible policy. No executable strings, eval, injected scripts, or external assets are used by the runtime.

Use explicit `data-weather-surface`, `data-weather-layer`, `data-weather-ignore`, material/depth attributes, and JavaScript registration for deliberate results. Evaluate the layer stress scene on the actual host page before enabling effects for visitors.

- **Physical model:** Snow uses a two-dimensional granular height field with material repose, friction, support inertia, and discrete parcels. It is a stylized browser simulation rather than a 3D continuum or native desktop compositor. Monotone rendered profiles and sampled collisions share geometry, with finite subdivision error.
