Overview#
Implement CSS Media Queries Level 4 (core subset) to support responsive design and user preferences.
Requirements#
Parsing#
- Parse
@mediarules with media types:screen,print,all - Parse media features:
width,min-width,max-widthheight,min-height,max-heightprefers-color-scheme: light | darkprefers-reduced-motion: reduce | no-preference
- Parse logical operators:
and,not,only,,(OR) - Range syntax:
(width >= 768px),(400px <= width <= 1200px)
Evaluation#
- Evaluate media queries against the current viewport dimensions
- Query macOS for color scheme preference (via
NSApp.effectiveAppearance) - Re-evaluate on viewport resize
- Signal style recalculation when media query results change
Integration#
- Extend
@mediaparsing incrates/css/ - Integrate with stylesheet application in
crates/style/— only apply rules when media query matches - Connect to viewport dimensions from
crates/platform/
Acceptance Criteria#
-
@media screenand@media printevaluate correctly -
@media (min-width: 768px)matches based on viewport -
@media (prefers-color-scheme: dark)detects macOS dark mode - Logical operators
and,not,onlywork correctly - Comma-separated media queries act as OR
- Rules inside non-matching
@mediablocks are not applied - All existing tests continue to pass
- New unit tests for parsing and evaluation