Move :root handling into interpretor.
Start testing counters implementations, fix syntactic shorthand lowering for counter[s]() functions.
Evaluate attribute namespace selectors.
Parse namespace selectors.
Rewrite trivial cases of :where & :is.
This is mostly for the psuedoselector rewrites performed in Data.CSS.Preprocessor.PsuedoClasses
Compute correct specificity for :is() & :not() pseudoclasses.
Implement :nth-child() & :nth-of-type().
I don't think I'll implement :nth-last-child() & :nth-last-of-type() until I'm shown their value,
Haskell Stylist doesn't yet have access to the data to support them.
Implement :is, :where, & :not functional pseudoclasses.
This is needed by some of the lowerings for other pseudoclasses.
TODO correctly compute specificity.
Prepare to interpret functional pseudoclasses.
Optimize: use HashMap.Lazy for cascade.
Improve documentation, release version 1.2
Write reference documentation.
Test rules capturing of ConditionalStyleSheet.
Code cleanliness: drop unneeded ' from Data.CSS.Style.Cascade.dispatch'
Implement var() via a PropertyParser decorator.
Expose hooks for implementing var().
The tricky part here is around CSS inheritance, it works naturally in the existing cascade implementation.
Resolve attr() functions.
It's defined during query, because that's when Stylish Haskell (or it's callers)
have easy access to the element being queried.
Rework psuedoelement infrastructure so they can be their own boxes.
Add support for psuedoelements/classes.