Limitations
What the current engine does not observe or support, and the pitfalls that follow from it.
Beta limits
- Selector features backed by state the DOM does not reflect are not observed: interaction and validity pseudo-classes (
:hover,:focus,:checked,:invalid, …) match on the first run only, and the rule logs a warning at build. Everything else the native engine matches is observed — seeSelectors for the list and the partial cases (:emptyignores text-only changes,:nth-child(… of S)observes only the attributes inS,:opencovers<details>/<dialog>only, sibling-relative:has(+ …)re-runs the whole rule) - A sheet containing an at-rule Quark does not have (
@media,@keyframes,@supports, …) fails to load: media queries, keyframes and the rest of the browser's style engine stay in your stylesheet. Quark's own at-rules are listed underAt-rules - Setting attributes is recommended over toggling / mutating classes and ids, since the latter has a heavier impact on Quark's performance: a sheet that names any class wakes on every class change under its host (styling churn included)
- Rules do not revert when they stop matching — see
No reversion @view-transitionrelies ondocument.startViewTransition(): one transition per document, no scoped transitions yet;untilfreezes the page while it waits (short waits only)
See the related section under
Pitfalls
Do not render a template that re-matches the same rule — the loop guard cuts it after 50 nested paints, but the fix is the selector:
/* BAD — each new span matches again */
span {
content: template("#span-template");
}/* BAD — each new span matches again */
span {
content: template("#span-template");
}A sheet that registers after an element's connect-time events will not hear them (no replay): react to state attributes, or load the sheet first in its host.