At-rules starts with an at-keyword and consists of everything up to and including the next semicolon or the next block, whichever comes first. (proof http://www.w3.org/TR/CSS21/syndata.html#at-rules)
The parser is to handle unexpected tokens encountered while parsing a media query by reading until the end of the media query, while observing the rules for matching pairs of (), [], {}, "", and '', and correctly handling escapes. (proof http://www.w3.org/TR/css3-mediaqueries/#error-handling)
So this
@media {example, all,}, speech { /* ... */ }
must be parsed as
@media { /* error while parsing rulesets */ }
/* error while parsing selectors */
or as
@media /* error while parsing media query */ speech { /* ... */ }
At-rules starts with an at-keyword and consists of everything up to and including the next semicolon or the next block, whichever comes first. (proof http://www.w3.org/TR/CSS21/syndata.html#at-rules)
The parser is to handle unexpected tokens encountered while parsing a media query by reading until the end of the media query, while observing the rules for matching pairs of (), [], {}, "", and '', and correctly handling escapes. (proof http://www.w3.org/TR/css3-mediaqueries/#error-handling)
So this
must be parsed as
or as