SimplecssError::UnexpectedEndOfStream(pos) => CssSyntaxError::UnexpectedEndOfStream(pos.into()),
SimplecssError::InvalidAdvance { expected, total, pos } => CssSyntaxError::InvalidAdvance(CssSyntaxInvalidAdvance { expected, total, pos: pos.into() }),
CssParseErrorInnerOwned::UnknownPropertyKey(UnknownPropertyKeyError { key: a.to_string().into(), value: b.to_string().into() })
"Error while parsing: \"{}: {};\": var() cannot be used on shorthand properties - use `{}-top` or `{}-x` as the key instead: ",
CssPseudoSelectorParseError::UnknownSelector(e.selector.as_str(), e.suggestion.as_ref().map(|s| s.as_str()))
UnsupportedKeyValuePair { key, value } => format!("Unsupported CSS property: \"{}: {}\"", key, value),
SkippedDeclaration { key, value, error } => format!("Skipped declaration '{}:{}': {}", key, value, error),
// Parse more complex media queries like "(min-width: 800px)" or "screen and (max-width: 600px)"
if value.eq_ignore_ascii_case("more") || value.eq_ignore_ascii_case("high") || value.eq_ignore_ascii_case("active") {
parse_px_value(value).map(|px| DynamicSelector::ContainerWidth(MinMaxRange::new(Some(px), None)))
parse_px_value(value).map(|px| DynamicSelector::ContainerWidth(MinMaxRange::new(None, Some(px))))
parse_px_value(value).map(|px| DynamicSelector::ContainerHeight(MinMaxRange::new(Some(px), None)))
parse_px_value(value).map(|px| DynamicSelector::ContainerHeight(MinMaxRange::new(None, Some(px))))
parse_ratio_value(value).map(|r| DynamicSelector::AspectRatio(MinMaxRange::new(Some(r), Some(r))))
parse_ratio_value(value).map(|r| DynamicSelector::AspectRatio(MinMaxRange::new(Some(r), None)))
parse_ratio_value(value).map(|r| DynamicSelector::AspectRatio(MinMaxRange::new(None, Some(r))))
// Collect multiple AtStr tokens (e.g., "screen", "(min-width: 800px)" for compound media queries)
let mut current_declarations: BTreeMap<&str, (&str, ErrorLocationRange)> = BTreeMap::new();
location: ErrorLocationRange { start: last_error_location, end: get_error_location(tokenizer) },
location: ErrorLocationRange { start: last_error_location, end: get_error_location(tokenizer) },
location: ErrorLocationRange { start: last_error_location, end: get_error_location(tokenizer) },
"os" => crate::dynamic_selector::parse_os_at_rule_content(&combined_content).unwrap_or_default(),
let is_pseudo_only = child.first().map(|s| matches!(s, CssPathSelector::PseudoSelector(_))).unwrap_or(false);
(val, ErrorLocationRange { start: last_error_location, end: get_error_location(tokenizer) }),
location: ErrorLocationRange { start: last_error_location, end: get_error_location(tokenizer) },
for (unparsed_css_key, (unparsed_css_value, location)) in &unparsed_css_block.declarations {
if let Some(combined_key) = CombinedCssPropertyType::from_str(unparsed_css_key, css_key_map) {
} else if let Some(normal_key) = CssPropertyType::from_str(unparsed_css_key, css_key_map) {
match parse_declaration_resilient(unparsed_css_key, unparsed_css_value, location, css_key_map) {