Pseudo-class combined with ':not()' does not work correctly
It looks like a regression and it started occurring in AdGuard Browser extension version 4.1.55, but works correctly in version 4.1.53. The same issue occurs in latest nightly build for Windows 7.13 nightly 8 (build 4242, CL 1.11.79).
Steps to reproduce:
- Add this rule:
example.org#?#div:matches-css(margin: /./) > :not(p)
or
example.org#?#div:has(a) > :not(p)
- Go to - https://example.org/
Rule hides div but it should hide only h1 element.
Screenshots


Related issues: https://github.com/AdguardTeam/AdguardFilters/issues/147558 https://github.com/AdguardTeam/AdguardFilters/issues/147319#issuecomment-1499966394
With extension version 4.1.53
Screenshots

Another case:
This rule in Easylist Cookie list:
bloomberg.com##body:not(:has(div[class*="player" i][class*="_container"], #root .datastrip)) > div[id^="sp_message_container"]
Broke Bloomberg completely: https://www.bloomberg.com/news/articles/2023-04-27/electronic-arts-star-wars-jedi-survivor-was-made-in-record-time?leadSource=uverify+wall
The rule should target div[id^="sp_message_container"], not the body element.
Also simpler forms of the rule cause the breakage:
bloomberg.com##body:not(:has(div[class*="player" i][class*="_container"])) > div[id^="sp_message_container"]
bloomberg.com##body:not(:has(#root .datastrip)) > div[id^="sp_message_container"]