{"version":3,"sources":["../src/internal/css-defaults.ts","../src/internal/expand-directional.ts","../src/internal/parsers.ts","../src/core/schema.ts","../src/internal/property-sorter.ts","../src/internal/collapse-handler.ts","../src/handlers/animation/collapse-constants.ts","../src/handlers/animation/collapse-layer.ts","../src/handlers/animation/collapse-parser.ts","../src/handlers/animation/collapse.ts","../src/internal/is-time.ts","../src/internal/is-timing-function.ts","../src/internal/property-handler.ts","../src/internal/is-value-node.ts","../src/internal/layer-parser-utils.ts","../src/handlers/animation/animation-layers.ts","../src/handlers/animation/expand.ts","../src/handlers/background/collapse-constants.ts","../src/handlers/background/collapse-layer.ts","../src/handlers/background/collapse-parser.ts","../src/handlers/background/collapse.ts","../src/internal/color-utils.ts","../src/internal/is-color.ts","../src/internal/is-length.ts","../src/internal/normalize-color.ts","../src/handlers/background/background-layers.ts","../src/handlers/background/expand.ts","../src/handlers/border/collapse.ts","../src/internal/directional.ts","../src/handlers/border/expand.ts","../src/handlers/border-radius/collapse.ts","../src/handlers/border-radius/expand.ts","../src/handlers/column-rule/collapse.ts","../src/handlers/column-rule/expand.ts","../src/handlers/columns/collapse.ts","../src/handlers/columns/expand.ts","../src/handlers/contain-intrinsic-size/collapse.ts","../src/handlers/contain-intrinsic-size/expand.ts","../src/handlers/flex/collapse.ts","../src/handlers/flex/expand.ts","../src/handlers/flex-flow/collapse.ts","../src/handlers/flex-flow/expand.ts","../src/handlers/font/collapse.ts","../src/handlers/font/expand.ts","../src/handlers/grid/expand.ts","../src/handlers/grid/collapse-utils.ts","../src/handlers/grid/collapse.ts","../src/handlers/grid-area/collapse.ts","../src/internal/grid-line.ts","../src/handlers/grid-area/expand.ts","../src/handlers/grid-column/collapse.ts","../src/handlers/grid-column/expand.ts","../src/handlers/grid-row/collapse.ts","../src/handlers/grid-row/expand.ts","../src/handlers/list-style/collapse.ts","../src/handlers/list-style/expand.ts","../src/handlers/mask/mask-layers.ts","../src/handlers/mask/collapse-constants.ts","../src/handlers/mask/collapse-layer.ts","../src/handlers/mask/collapse-parser.ts","../src/handlers/mask/collapse.ts","../src/handlers/mask/expand.ts","../src/handlers/offset/collapse.ts","../src/internal/is-angle.ts","../src/handlers/offset/expand.ts","../src/handlers/outline/collapse.ts","../src/handlers/outline/expand.ts","../src/handlers/overflow/collapse.ts","../src/handlers/overflow/expand.ts","../src/handlers/place-content/collapse.ts","../src/internal/place-utils.ts","../src/handlers/place-content/expand.ts","../src/handlers/place-items/collapse.ts","../src/handlers/place-items/expand.ts","../src/handlers/place-self/collapse.ts","../src/handlers/place-self/expand.ts","../src/handlers/text-decoration/collapse.ts","../src/handlers/text-decoration/expand.ts","../src/handlers/text-emphasis/collapse.ts","../src/handlers/text-emphasis/expand.ts","../src/handlers/transition/collapse-constants.ts","../src/handlers/transition/collapse-layer.ts","../src/handlers/transition/collapse-parser.ts","../src/handlers/transition/collapse.ts","../src/handlers/transition/transition-layers.ts","../src/handlers/transition/expand.ts","../src/internal/shorthand-registry.ts","../src/core/validate.ts","../src/core/expand.ts","../src/handlers/gap/collapse.ts","../src/handlers/gap/expand.ts","../src/internal/handler-registry.ts","../src/internal/collapse-registry.ts","../src/core/collapse.ts"],"names":["CSS_DEFAULTS","DIRECTIONAL_SIDES","CORNER_POSITIONS","INSET_BASE_KEY","BORDER_RADIUS_BASE_KEY","buildPropertyName","prefix","side","suffix","expandDirectionalProperties","result","groups","cornerGroups","directionalRegex","property","cornerMatch","corner","match","baseKey","expanded","group","corners","fullProperty","defaultValue","sides","stripComments","css","i","j","parseInputString","input","declarations","current","char","nextChar","quoteEnd","parenCount","parenEnd","bracketEnd","decl","parseCssDeclaration","declaration","trimmed","colonIndex","value","FORMAT_VALUES","PROPERTY_GROUPING_VALUES","FORMAT_CSS","FORMAT_JS","GROUPING_BY_PROPERTY","GROUPING_BY_SIDE","ExpandOptions","Format","PropertyGrouping","Separator","Indent","DEFAULT_EXPAND_OPTIONS","DEFAULT_COLLAPSE_OPTIONS","PROPERTY_ORDER_MAP","sortProperties","obj","grouping","sortPropertiesBySide","sortPropertiesByProperty","getPropertyMetadata","prop","parts","p","sideIndex","base","sortedEntries","a","b","orderA","orderB","metaA","metaB","kebabToCamelCase","_","letter","objectToCss","indent","separator","propertyGrouping","indentStr","sorted","key","createCollapseHandler","config","properties","ANIMATION_DEFAULTS","isDefault","collapseSingleLayer","layer","hasNonDefaultName","hasNonDefaultDuration","hasNonDefaultTimingFunction","hasNonDefaultDelay","hasNonDefaultIterationCount","hasNonDefaultDirection","hasNonDefaultFillMode","hasNonDefaultPlayState","parseAnimationProperties","name","duration","timingFunction","delay","iterationCount","direction","fillMode","playState","nameLayers","splitLayers","durationLayers","timingFunctionLayers","delayLayers","iterationCountLayers","directionLayers","fillModeLayers","playStateLayers","layerCount","layers","depth","animationCollapser","layerStrings","collapsed","TIME","isTime","TIMING_KEYWORDS","TIMING_FUNCTIONS","hasBalancedParentheses","openCount","isTimingFunction","DEFAULT_PROPERTY_HANDLER_OPTIONS","createPropertyHandler","options","validatedOptions","COLOR_FUNCTIONS","IMAGE_FUNCTIONS","matchesType","node","types","typeArray","nodeType","funcName","isNumericValueNode","isPositionValueNode","keywords","isSizeValueNode","hasTopLevelCommas","detectFunctions","parenDepth","bracketDepth","hasFunctions","currentLayer","parseLayersGeneric","parseSingleLayer","layerStr","parsedLayer","needsAdvancedParser","parseAnimationLayers","layerValue","ast","E","children","child","processCssChildren","timeCount","matched","funcValue","timingValue","timeValue","numValue","identValue","reconstructLayers","l","values","KEYWORD","ITERATION_COUNT","DIRECTION","FILL_MODE","PLAY_STATE","parseAnimationValue","layeredResult","tokens","token","animationHandler","animation","BACKGROUND_DEFAULTS","hasNonDefaultPosition","hasNonDefaultSize","position","positionPart","hasNonDefaultOrigin","hasNonDefaultClip","parseBackgroundProperties","color","image","size","repeat","attachment","origin","clip","imageLayers","positionLayers","sizeLayers","repeatLayers","attachmentLayers","originLayers","clipLayers","backgroundCollapser","CSS_COLOR_NAMES","cssUrlRegex","hexColorRegex","opts","hslRegex","hslaRegex","rgbRegex","rgbaRegex","HEX","HSLA","HSL","RGB","RGBA","colorCache","MAX_CACHE_SIZE","isColor","cached","lowerValue","firstKey","LENGTH","ZERO","isLength","FUNCTIONS","normalizeColor","acc","func","parseBackgroundLayers","parsedLayers","globalColor","distributeLayerProperties","layerProps","parseSingleLayerWithCssTree","hasPositionSize","funcNode","positionParts","sizeParts","currentChild","sizeChild","nextName","ATTACHMENT","BOX","IMAGE","REPEAT_SINGLE","REPEAT_DOUBLE","POSITION_HORIZONTAL","POSITION_VERTICAL","SIZE_SINGLE","normalizeUrl","parseBackgroundValue","simpleBackgroundParser","group1","first","v","n","isHorizontal","isVertical","sizeV","sizeValue","sizeN","finalResult","backgroundHandler","background","BORDER_DEFAULTS","borderCollapser","topWidth","rightWidth","bottomWidth","leftWidth","topStyle","rightStyle","bottomStyle","leftStyle","topColor","rightColor","bottomColor","leftColor","directionalCache","directional","WIDTH","STYLE","longhand","all","filtered","width","style","boxSizing","parseBorderValue","widthProps","styleProps","colorProps","borderHandler","border","expand_default","borderRadiusCollapser","tl","tr","br","bl","parseCorner","tlH","tlV","trH","trV","brH","brV","blH","blV","horizontal","vertical","needsSlash","h","simplifyFourValues","hSimplified","vSimplified","expandFourValues","borderRadiusHandler","slashIndex","horizontalPart","verticalPart","horizontalValues","verticalValues","columnRuleCollapser","columnRuleHandler","parsed","columnRule","columnsCollapser","count","columnsHandler","INTEGER","specificValues","autoValues","val","type","autoValue","containIntrinsicSizeCollapser","height","containIntrinsicSizeHandler","parseValue","nextToken","widthValue","heightValue","flexCollapser","grow","shrink","basis","flexHandler","numberPattern","flexBasisKeywordPattern","fitContentFn","classified","part","second","third","flexFlowCollapser","wrap","flexFlowHandler","directionPattern","wrapPattern","fontCollapser","family","variant","weight","stretch","lineHeight","cleanFamily","states","parse","state","buffer","c","index","parseFontValue","fontHandler","font","GRID_DEFAULTS","parseValueAndGetSegments","ke","slashIndices","slashCount","childrenArray","listToArray","leftSegment","rightSegment","detectGridForm","hasAutoFlowLeft","hasAutoFlowRight","list","arr","item","separateAreasAndTracks","segmentNodes","strings","tracks","areas","rows","s","columnCount","row","tracksStr","parseTrackList","validNodes","generatedParts","parseTemplateForm","templateAreas","templateRows","templateColumns","leftAreas","leftTracks","rightTracks","parseExplicitRowsForm","firstNonWhiteSpace","autoFlow","autoColumns","hasDense","autoColumnsStart","autoColumnsSegment","parseExplicitColumnsForm","autoRows","autoRowsStart","autoRowsSegment","parseGridValue","segments","gridHandler","allDefaults","canCollapseToTemplate","cols","canCollapseToAutoFlowRows","flow","canCollapseToAutoFlowColumns","gridCollapser","required","areaRows","rowSizes","autoCols","gridAreaCollapser","rowStart","columnStart","rowEnd","columnEnd","isCustomIdent","isInteger","parseGridLine","rest","seenInt","seenIdent","getDefaultEnd","start","gridAreaHandler","gridColumnCollapser","end","gridColumnHandler","startValue","endValue","gridRowCollapser","gridRowHandler","listStyleCollapser","isDefaultType","isDefaultPosition","isDefaultImage","POSITION","COMMON_TYPE","IDENT","STRING_VALUE","listStyleHandler","normalizedValue","explicitlySet","listStyle","MASK_DEFAULTS","parseMaskLayers","Z","hasUnrecognizedToken","parseMaskProperties","mode","composite","modeLayers","compositeLayers","maskCollapser","parseMaskValue","trimmedValue","maskHandler","mask","OFFSET_DEFAULTS","offsetCollapser","path","distance","rotate","anchor","mainParts","ANGLE","isAngle","splitTopLevelSlash","inQuotes","quoteChar","main","tokenizeRespectingFunctions","isPositionKeyword","parsePosition","parsePath","parseDistance","parseRotate","parseAnchor","parseOffsetValue","slashSplit","positionResult","pathResult","distanceResult","rotateResult","parsedAnchor","offsetHandler","outlineCollapser","outlineHandler","outline","overflowCollapser","x","y","overflowHandler","validValues","placeContentCollapser","align","justify","consolidatePlaceTokens","nextTokenPattern","out","t","placeContentHandler","processedValues","validValuePattern","placeItemsCollapser","placeItemsHandler","isValidAlignItemsValue","isValidJustifyItemsValue","alignVal","justifyVal","placeSelfCollapser","placeSelfHandler","isValidAlignSelfValue","isValidJustifySelfValue","textDecorationCollapser","line","thickness","LINE","THICKNESS","textDecorationHandler","lines","hasStyle","hasColor","hasThickness","textDecoration","textEmphasisCollapser","FILL","SHAPE","textEmphasisHandler","textEmphasis","TRANSITION_DEFAULTS","hasNonDefaultProperty","parseTransitionProperties","propertyLayers","transitionCollapser","parseTransitionLayers","re","PROPERTY_KEYWORD","parseTransitionValue","transitionHandler","transition","shorthand","DEFAULT_MAX_LINE_WIDTH","LINE_NUMBER_PADDING","DEFAULT_CONTEXT_WINDOW_SIZE","containsVar","validate","errors","warnings","syntax","oe","uniqueDecls","err","stack","id","suppressNoise","msg","LOG_LEVEL","QUIET","origWarn","origError","args","error","formattedWarnings","cssLines","warning","formattedError","formatErrorDisplay","calculateLineWindow","errorLine","totalLines","contextWindowSize","formatLineNumber","lineNum","maxLineNum","maxDigits","paddedNum","trimLine","spacesRemoved","calculateTruncationBounds","lineLength","errorColumn","maxWidth","availableWidth","halfWidth","startPos","needsStartEllipsis","endPos","needsEndEllipsis","applyTruncation","bounds","originalErrorColumn","content","adjustedColumn","formatContextLine","formatErrorLine","adjustedErrorColumn","trimmedBounds","createPointerLine","prefixLength","column","length","safeLength","safeColumn","pointerPrefix","dashes","carets","mismatchLength","lineIndex","currentLine","currentPrefix","pointerLine","formattedLine","expand","cleanedInput","format","expandPartialLonghand","validation","inputs","results","issues","resultMetadata","normalized","removeConflictingProperties","metadata","cleanedResults","propertyToResultIndex","meta","resultObj","earlierIndex","earlierResult","earlierMeta","earlierObj","earlierProp","applyPartialExpansion","resultToProcess","camelCased","mergedObject","mergedResult","ok","allIssues","gapCollapser","parseGapValue","gapHandler","handlerMap","longhandToShorthandsMap","handler","existing","registry","category","expandProperty","validateProperty","isShorthandProperty","collapseHandlerMap","collapseRegistry","parseCssToObject","cleaned","formatCssString","collapse","collapseProperties","processedLonghands","availableShorthands","shorthandPriority","sortedShorthands","priorityA","priorityB","handlerA","handlerB","lengthA","collapseHandler","presentLonghands","missingLonghands","collapsedValue","getCollapsibleShorthands","collapsible"],"mappings":"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","file":"index.cjs","sourcesContent":["// b_path:: src/internal/css-defaults.ts\n\n/**\n * CSS default values for directional properties (kebab-case).\n * Used for partial longhand expansion when expandPartialLonghand option is enabled.\n */\nexport const CSS_DEFAULTS: Record<string, string> = {\n  // Border width\n  \"border-top-width\": \"medium\",\n  \"border-right-width\": \"medium\",\n  \"border-bottom-width\": \"medium\",\n  \"border-left-width\": \"medium\",\n\n  // Border style\n  \"border-top-style\": \"none\",\n  \"border-right-style\": \"none\",\n  \"border-bottom-style\": \"none\",\n  \"border-left-style\": \"none\",\n\n  // Border color\n  \"border-top-color\": \"currentcolor\",\n  \"border-right-color\": \"currentcolor\",\n  \"border-bottom-color\": \"currentcolor\",\n  \"border-left-color\": \"currentcolor\",\n\n  // Border radius\n  \"border-top-left-radius\": \"0\",\n  \"border-top-right-radius\": \"0\",\n  \"border-bottom-right-radius\": \"0\",\n  \"border-bottom-left-radius\": \"0\",\n\n  // Margin\n  \"margin-top\": \"0\",\n  \"margin-right\": \"0\",\n  \"margin-bottom\": \"0\",\n  \"margin-left\": \"0\",\n\n  // Padding\n  \"padding-top\": \"0\",\n  \"padding-right\": \"0\",\n  \"padding-bottom\": \"0\",\n  \"padding-left\": \"0\",\n\n  // Positioning\n  top: \"auto\",\n  right: \"auto\",\n  bottom: \"auto\",\n  left: \"auto\",\n\n  // Scroll margin\n  \"scroll-margin-top\": \"0\",\n  \"scroll-margin-right\": \"0\",\n  \"scroll-margin-bottom\": \"0\",\n  \"scroll-margin-left\": \"0\",\n\n  // Scroll padding\n  \"scroll-padding-top\": \"auto\",\n  \"scroll-padding-right\": \"auto\",\n  \"scroll-padding-bottom\": \"auto\",\n  \"scroll-padding-left\": \"auto\",\n};\n","// b_path:: src/internal/expand-directional.ts\n\nimport { CSS_DEFAULTS } from \"./css-defaults\";\n\nconst DIRECTIONAL_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\nconst CORNER_POSITIONS = [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"] as const;\n\n/**\n * Base key for grouping bare directional properties (top, right, bottom, left).\n * These map to the CSS `inset` logical property group.\n */\nconst INSET_BASE_KEY = \"inset\";\n\n/**\n * Base key for grouping border-radius corner properties.\n * These share the same \"border-radius\" shorthand.\n */\nconst BORDER_RADIUS_BASE_KEY = \"border-radius\";\n\n/**\n * Grouping information for side-based directional properties (top, right, bottom, left).\n */\ninterface DirectionalGroup {\n  prefix: string;\n  suffix: string;\n  sides: Set<string>;\n}\n\n/**\n * Grouping information for corner-based properties (top-left, top-right, etc.).\n */\ninterface CornerGroup {\n  corners: Set<string>;\n}\n\n/**\n * Builds a full CSS property name from prefix, side, and suffix components.\n *\n * @param prefix - Property prefix (e.g., \"border-\", \"margin-\", or \"\")\n * @param side - Directional side (e.g., \"top\", \"right\", \"bottom\", \"left\")\n * @param suffix - Property suffix (e.g., \"-width\", \"-style\", or \"\")\n * @returns Full property name (e.g., \"border-top-width\", \"margin-top\", \"top\")\n *\n * @example\n * buildPropertyName(\"border-\", \"top\", \"-width\") // → \"border-top-width\"\n * buildPropertyName(\"margin-\", \"top\", \"\") // → \"margin-top\"\n * buildPropertyName(\"\", \"top\", \"\") // → \"top\"\n */\nfunction buildPropertyName(prefix: string, side: string, suffix: string): string {\n  if (prefix === \"\" && suffix === \"\") {\n    // Just the side (top, right, bottom, left)\n    return side;\n  }\n  if (suffix === \"\") {\n    // prefix-side (e.g., \"margin-top\")\n    return `${prefix}${side}`;\n  }\n  // prefix-side-suffix (e.g., \"border-top-width\")\n  return `${prefix}${side}${suffix}`;\n}\n\n/**\n * Expands partial directional properties by filling in missing sides with CSS defaults.\n *\n * Scans the result for directional keywords (top, right, bottom, left), groups them by\n * base property, and fills in any missing sides with their CSS default values.\n *\n * @param result - Object with CSS properties (kebab-case)\n * @returns New object with expanded directional properties\n *\n * @example\n * expandDirectionalProperties({ 'border-top-width': '1px' })\n * // → {\n * //     'border-top-width': '1px',\n * //     'border-right-width': 'medium',\n * //     'border-bottom-width': 'medium',\n * //     'border-left-width': 'medium'\n * //   }\n */\nexport function expandDirectionalProperties(\n  result: Record<string, string>\n): Record<string, string> {\n  const groups = new Map<string, DirectionalGroup>();\n  const cornerGroups = new Map<string, CornerGroup>();\n\n  // Pre-compile regex for directional property matching (more efficient than string operations)\n  // Matches: -(top|right|bottom|left)- or -(top|right|bottom|left)$ or exact side\n  const directionalRegex = /^(.*)-(top|right|bottom|left)(-(.*))?$|^(top|right|bottom|left)$/;\n\n  // Detect directional properties and group by base\n  for (const property of Object.keys(result)) {\n    // Check for border-radius corner properties first\n    const cornerMatch = property.match(\n      /^border-(top-left|top-right|bottom-right|bottom-left)-radius$/\n    );\n    if (cornerMatch) {\n      const corner = cornerMatch[1];\n      if (!cornerGroups.has(BORDER_RADIUS_BASE_KEY)) {\n        cornerGroups.set(BORDER_RADIUS_BASE_KEY, { corners: new Set() });\n      }\n      cornerGroups.get(BORDER_RADIUS_BASE_KEY)!.corners.add(corner);\n      continue;\n    }\n\n    // Check for side-based directional properties using pre-compiled regex\n    const match = property.match(directionalRegex);\n    if (match) {\n      // match[1] = prefix (if side in middle or end), match[2] = side (if hyphenated),\n      // match[4] = suffix (if side in middle), match[5] = bare side\n      const side = match[2] || match[5]; // Side from hyphenated or bare match\n\n      if (!side) continue; // Shouldn't happen, but defensive check\n\n      if (match[5]) {\n        // Bare side property (e.g., \"top\")\n        const prefix = \"\";\n        const suffix = \"\";\n        const baseKey = INSET_BASE_KEY;\n\n        if (!groups.has(baseKey)) {\n          groups.set(baseKey, { prefix, suffix, sides: new Set() });\n        }\n        groups.get(baseKey)!.sides.add(side);\n      } else if (match[4] !== undefined) {\n        // Side in the middle (e.g., border-top-width)\n        const prefix = match[1] ? `${match[1]}-` : \"\"; // Include trailing hyphen\n        const suffix = match[4] ? `-${match[4]}` : \"\"; // Include leading hyphen\n        const baseKey = `${prefix}|${suffix}`; // Normalized grouping key\n\n        if (!groups.has(baseKey)) {\n          groups.set(baseKey, { prefix, suffix, sides: new Set() });\n        }\n        groups.get(baseKey)!.sides.add(side);\n      } else {\n        // Side at the end (e.g., margin-top)\n        const prefix = match[1] ? `${match[1]}-` : \"\"; // Include trailing hyphen\n        const suffix = \"\";\n        const baseKey = prefix || side; // Use prefix as key; fallback to side\n\n        if (!groups.has(baseKey)) {\n          groups.set(baseKey, { prefix, suffix, sides: new Set() });\n        }\n        groups.get(baseKey)!.sides.add(side);\n      }\n    }\n  }\n\n  // If no directional groups found, return as-is\n  if (groups.size === 0 && cornerGroups.size === 0) {\n    return result;\n  }\n\n  const expanded: Record<string, string> = { ...result };\n\n  // Fill missing corners for border-radius\n  for (const [, group] of cornerGroups) {\n    const { corners } = group;\n\n    // If all 4 corners present, nothing to expand\n    if (corners.size === 4) {\n      continue;\n    }\n\n    // Add missing corners\n    for (const corner of CORNER_POSITIONS) {\n      if (!corners.has(corner)) {\n        const fullProperty = `border-${corner}-radius`;\n        const defaultValue = CSS_DEFAULTS[fullProperty];\n\n        if (defaultValue) {\n          expanded[fullProperty] = defaultValue;\n        }\n      }\n    }\n  }\n\n  // Fill missing sides with defaults\n  for (const [, group] of groups) {\n    const { prefix, suffix, sides } = group;\n\n    // If all 4 sides present, nothing to expand\n    if (sides.size === 4) {\n      continue;\n    }\n\n    // Add missing sides\n    for (const side of DIRECTIONAL_SIDES) {\n      if (!sides.has(side)) {\n        const fullProperty = buildPropertyName(prefix, side, suffix);\n        const defaultValue = CSS_DEFAULTS[fullProperty];\n\n        if (defaultValue) {\n          expanded[fullProperty] = defaultValue;\n        }\n      }\n    }\n  }\n\n  return expanded;\n}\n","// b_path:: src/internal/parsers.ts\n\n/**\n * Internal parsing utilities for CSS declaration processing.\n * @internal\n */\n\n/**\n * Removes all CSS comments from the input string.\n * Uses a character-by-character scanning approach that safely handles multi-line comments.\n * @internal\n */\nexport function stripComments(css: string): string {\n  let result = \"\";\n  let i = 0;\n\n  while (i < css.length) {\n    if (css[i] === \"/\" && css[i + 1] === \"*\") {\n      let j = i + 2;\n      while (j < css.length) {\n        if (css[j] === \"*\" && css[j + 1] === \"/\") {\n          result += \" \";\n          i = j + 2;\n          break;\n        }\n        j++;\n      }\n      if (j >= css.length) {\n        i = css.length;\n      }\n    } else {\n      result += css[i];\n      i++;\n    }\n  }\n\n  return result;\n}\n\n/**\n * Parses CSS input string into individual declarations.\n * Handles quotes, parentheses, and brackets correctly.\n * @internal\n */\nexport function parseInputString(input: string): string[] {\n  const declarations: string[] = [];\n  let current = \"\";\n  let i = 0;\n\n  while (i < input.length) {\n    const char = input[i];\n    const nextChar = input[i + 1];\n\n    if (char === \"\\\\\" && nextChar) {\n      current += char + nextChar;\n      i += 2;\n      continue;\n    }\n\n    if (char === '\"' || char === \"'\") {\n      let quoteEnd = i + 1;\n      while (quoteEnd < input.length) {\n        if (input[quoteEnd] === char && input[quoteEnd - 1] !== \"\\\\\") {\n          break;\n        }\n        quoteEnd++;\n      }\n      if (quoteEnd < input.length) {\n        current += input.substring(i, quoteEnd + 1);\n        i = quoteEnd + 1;\n        continue;\n      }\n    }\n\n    if (char === \"(\") {\n      let parenCount = 1;\n      let parenEnd = i + 1;\n      while (parenEnd < input.length && parenCount > 0) {\n        if (input[parenEnd] === \"(\") parenCount++;\n        if (input[parenEnd] === \")\") parenCount--;\n        parenEnd++;\n      }\n      if (parenCount === 0) {\n        current += input.substring(i, parenEnd);\n        i = parenEnd;\n        continue;\n      }\n    }\n\n    if (char === \"[\") {\n      const bracketEnd = input.indexOf(\"]\", i + 1);\n      if (bracketEnd !== -1) {\n        current += input.substring(i, bracketEnd + 1);\n        i = bracketEnd + 1;\n        continue;\n      }\n    }\n\n    if (char === \";\") {\n      declarations.push(current.trim());\n      current = \"\";\n    } else {\n      current += char;\n    }\n\n    i++;\n  }\n\n  if (current.trim()) {\n    declarations.push(current.trim());\n  }\n\n  return declarations.filter((decl) => decl.length > 0);\n}\n\n/**\n * Parses a CSS declaration into property and value.\n * @internal\n */\nexport function parseCssDeclaration(\n  declaration: string\n): { property: string; value: string } | null {\n  const trimmed = declaration.trim();\n  const colonIndex = trimmed.indexOf(\":\");\n\n  if (colonIndex === -1) return null;\n\n  const property = trimmed.slice(0, colonIndex).trim();\n  const value = trimmed.slice(colonIndex + 1).trim();\n\n  if (!property || !value) return null;\n\n  return { property, value };\n}\n","// b_path:: src/core/schema.ts\n\n/**\n * Base CSS value types\n */\nexport type CssValue = string;\nexport type CssProperty = string;\nexport type CssDeclaration = string;\n\n/**\n * Output format enum\n * - 'css': Returns kebab-case CSS string (e.g., \"margin-top: 10px;\")\n * - 'js': Returns camelCase JavaScript object (e.g., { marginTop: '10px' })\n */\nexport const FORMAT_VALUES = [\"css\", \"js\"] as const;\nexport type Format = (typeof FORMAT_VALUES)[number];\n\n/**\n * Property grouping strategy enum\n * - 'by-property': Groups by property type (e.g., all margins, then all borders)\n * - 'by-side': Groups by directional side (e.g., all top properties, then all right properties)\n */\nexport const PROPERTY_GROUPING_VALUES = [\"by-property\", \"by-side\"] as const;\nexport type PropertyGrouping = (typeof PROPERTY_GROUPING_VALUES)[number];\n\n// Named constants for better readability\nexport const FORMAT_CSS = \"css\" as const;\nexport const FORMAT_JS = \"js\" as const;\nexport const GROUPING_BY_PROPERTY = \"by-property\" as const;\nexport const GROUPING_BY_SIDE = \"by-side\" as const;\n\n/**\n * Options for CSS shorthand expansion\n */\nexport interface ExpandOptions {\n  /** Output format: \"css\" (kebab-case string) or \"js\" (camelCase object). Default: \"css\" */\n  format?: Format;\n\n  /** Indentation spaces for CSS output (min: 0). Default: 0 */\n  indent?: number;\n\n  /** Separator between CSS declarations. Default: \"\\n\" */\n  separator?: string;\n\n  /**\n   * Property grouping strategy. Default: \"by-property\"\n   * - 'by-property': Groups by property type (e.g., all margins, then all borders)\n   * - 'by-side': Groups by directional side (e.g., all top properties, then all right properties)\n   */\n  propertyGrouping?: PropertyGrouping;\n\n  /**\n   * Expand partial directional longhand properties (e.g., margin-top) by filling in missing sides with CSS default values.\n   * Default: false\n   */\n  expandPartialLonghand?: boolean;\n}\n\n/**\n * Enum-style namespace for ExpandOptions values\n * Provides better autocomplete and discoverability\n *\n * @example\n * ```typescript\n * import * as b from 'b_short';\n *\n * b.expand('background: red', {\n *   format: b.ExpandOptions.Format.CSS,\n *   propertyGrouping: b.ExpandOptions.PropertyGrouping.BY_PROPERTY,\n *   separator: b.ExpandOptions.Separator.NEWLINE,\n *   indent: b.ExpandOptions.Indent.NONE\n * });\n * ```\n */\nexport namespace ExpandOptions {\n  /**\n   * Output format values\n   */\n  export enum Format {\n    /** CSS format: kebab-case strings like \"margin-top: 10px;\" */\n    CSS = \"css\",\n    /** JS format: camelCase objects like { marginTop: '10px' } */\n    JS = \"js\",\n  }\n\n  /**\n   * Property grouping strategy values\n   */\n  export enum PropertyGrouping {\n    /** Group by property type (all margins, then all borders) */\n    BY_PROPERTY = \"by-property\",\n    /** Group by directional side (all top properties, then all right) */\n    BY_SIDE = \"by-side\",\n  }\n\n  /**\n   * Common separator values\n   */\n  export enum Separator {\n    /** Newline separator (default) */\n    NEWLINE = \"\\n\",\n    /** Space separator */\n    SPACE = \" \",\n    /** Semicolon with space */\n    SEMICOLON = \"; \",\n    /** Empty string (compact) */\n    NONE = \"\",\n  }\n\n  /**\n   * Common indentation values\n   */\n  export enum Indent {\n    /** No indentation (default) */\n    NONE = 0,\n    /** 2 spaces */\n    TWO_SPACES = 2,\n    /** 4 spaces */\n    FOUR_SPACES = 4,\n    /** Tab character (8 spaces equivalent) */\n    TAB = 8,\n  }\n\n  /**\n   * Boolean option values for expandPartialLonghand\n   */\n  export const ExpandPartialLonghand = {\n    /** Don't expand partial longhand properties (default) */\n    DISABLED: false,\n    /** Expand partial longhand properties with CSS defaults */\n    ENABLED: true,\n  } as const;\n}\n\n/**\n * Default values for ExpandOptions\n * Users can spread this and override specific values\n *\n * @example\n * ```typescript\n * import { expand, DEFAULT_EXPAND_OPTIONS } from 'b_short';\n *\n * const myOptions = {\n *   ...DEFAULT_EXPAND_OPTIONS,\n *   indent: 2,\n *   format: 'js'\n * };\n *\n * expand('margin: 10px', myOptions);\n * ```\n */\nexport const DEFAULT_EXPAND_OPTIONS: Required<ExpandOptions> = {\n  format: \"css\",\n  indent: 0,\n  separator: \"\\n\",\n  propertyGrouping: \"by-property\",\n  expandPartialLonghand: false,\n};\n\n/**\n * CSS Tree syntax parsing error\n */\nexport interface CssTreeSyntaxParseError {\n  name: string;\n  message: string;\n  line?: number;\n  column?: number;\n  property?: string;\n  offset?: number;\n  length?: number;\n}\n\n/**\n * Custom warning for CSS property validation\n */\nexport interface BStyleWarning {\n  /** CSS property that has the warning */\n  property: string;\n  /** Warning name/type */\n  name: string;\n  /** CSS syntax that caused the warning */\n  syntax?: string;\n  /** Formatted warning message for display */\n  formattedWarning?: string;\n}\n\n/**\n * Single layer in a multi-layer background\n */\nexport interface BackgroundLayer {\n  /** Background image (url, gradient, or none) */\n  image?: string;\n  /** Background position (e.g., '10px 20px') */\n  position?: string;\n  /** Background size (e.g., 'cover', '100px 200px') */\n  size?: string;\n  /** Background repeat (e.g., 'no-repeat', 'repeat-x') */\n  repeat?: string;\n  /** Background attachment (e.g., 'fixed', 'scroll') */\n  attachment?: string;\n  /** Background origin (e.g., 'padding-box', 'border-box') */\n  origin?: string;\n  /** Background clip (e.g., 'padding-box', 'border-box') */\n  clip?: string;\n}\n\n/**\n * Result of parsing multi-layer background declaration\n */\nexport interface BackgroundResult {\n  /** Array of background layers */\n  layers: BackgroundLayer[];\n  /** Global background color applied to all layers */\n  color?: string;\n}\n\n/**\n * Single layer in a multi-layer mask\n */\nexport interface MaskLayer {\n  /** Mask image (url, gradient, or none) */\n  image?: string;\n  /** Masking mode (e.g., 'alpha', 'luminance', 'match-source') */\n  mode?: string;\n  /** Mask position (e.g., '10px 20px', 'center') */\n  position?: string;\n  /** Mask size (e.g., 'cover', '100px 200px', 'auto') */\n  size?: string;\n  /** Mask repeat (e.g., 'no-repeat', 'repeat-x') */\n  repeat?: string;\n  /** Mask origin (e.g., 'padding-box', 'border-box', 'content-box') */\n  origin?: string;\n  /** Mask clip (e.g., 'padding-box', 'border-box', 'content-box', 'no-clip') */\n  clip?: string;\n  /** Mask composite (e.g., 'add', 'subtract', 'intersect', 'exclude') */\n  composite?: string;\n}\n\n/**\n * Result of parsing multi-layer mask declaration\n */\nexport interface MaskResult {\n  /** Array of mask layers */\n  layers: MaskLayer[];\n}\n\n/**\n * Single layer in a multi-layer transition\n */\nexport interface TransitionLayer {\n  /** Transition property (e.g., 'opacity', 'all', 'transform') */\n  property?: string;\n  /** Transition duration (e.g., '300ms', '0.5s') */\n  duration?: string;\n  /** Transition timing function (e.g., 'ease', 'cubic-bezier(0.4, 0, 0.2, 1)') */\n  timingFunction?: string;\n  /** Transition delay (e.g., '100ms', '0s') */\n  delay?: string;\n}\n\n/**\n * Result of parsing multi-layer transition declaration\n */\nexport interface TransitionResult {\n  /** Array of transition layers */\n  layers: TransitionLayer[];\n}\n\n/**\n * Single layer in a multi-layer animation\n */\nexport interface AnimationLayer {\n  /** Animation name (e.g., 'spin', 'none') */\n  name?: string;\n  /** Animation duration (e.g., '1s', '300ms') */\n  duration?: string;\n  /** Animation timing function (e.g., 'ease', 'cubic-bezier(0.4, 0, 0.2, 1)') */\n  timingFunction?: string;\n  /** Animation delay (e.g., '100ms', '0s') */\n  delay?: string;\n  /** Animation iteration count (e.g., '3', 'infinite') */\n  iterationCount?: string;\n  /** Animation direction (e.g., 'normal', 'reverse', 'alternate', 'alternate-reverse') */\n  direction?: string;\n  /** Animation fill mode (e.g., 'none', 'forwards', 'backwards', 'both') */\n  fillMode?: string;\n  /** Animation play state (e.g., 'running', 'paused') */\n  playState?: string;\n}\n\n/**\n * Result of parsing multi-layer animation declaration\n */\nexport interface AnimationResult {\n  /** Array of animation layers */\n  layers: AnimationLayer[];\n}\n\n/**\n * Result of CSS shorthand expansion\n */\nexport interface ExpandResult {\n  /** Whether expansion was successful (no syntax errors) */\n  ok: boolean;\n  /**\n   * The expanded CSS result\n   * - JavaScript object format (multiple declarations are merged, with later properties overriding earlier ones)\n   * - CSS string format (multiple declarations are joined)\n   * - undefined when input is empty or invalid\n   */\n  result?: Record<string, string> | string;\n  /** Array of syntax errors and validation warnings */\n  issues: Array<CssTreeSyntaxParseError | BStyleWarning>;\n}\n\n/**\n * Result of CSS stylesheet validation\n */\nexport interface StylesheetValidation {\n  /** Whether validation passed (no errors) */\n  ok: boolean;\n  /** Array of syntax parsing errors */\n  errors: CssTreeSyntaxParseError[];\n  /** Array of property validation warnings */\n  warnings: BStyleWarning[];\n}\n\n/**\n * Options for CSS shorthand collapse\n */\nexport interface CollapseOptions {\n  /** Indentation spaces for CSS string output (min: 0). Default: 0 */\n  indent?: number;\n}\n\n/**\n * Default values for CollapseOptions\n */\nexport const DEFAULT_COLLAPSE_OPTIONS: Required<CollapseOptions> = {\n  indent: 0,\n};\n\n/**\n * Result of CSS shorthand collapse operation\n */\nexport interface CollapseResult {\n  /** Whether collapse was successful (no errors) */\n  ok: boolean;\n  /**\n   * The collapsed CSS result\n   * - JavaScript object format\n   * - CSS string format\n   * - undefined when input is empty\n   */\n  result?: Record<string, string> | string;\n  /** Array of warnings about incomplete longhands that couldn't be collapsed */\n  issues: BStyleWarning[];\n}\n","// b_path:: src/internal/property-sorter.ts\n\nimport type { PropertyGrouping } from \"../core/schema\";\nimport { GROUPING_BY_PROPERTY } from \"../core/schema\";\n\n/**\n * Internal property sorting utilities.\n * @internal\n */\n\n/**\n * CSS property ordering map - defines the canonical order of properties\n * @internal\n */\nexport const PROPERTY_ORDER_MAP: Record<string, number> = {\n  // Grid properties (indices 0-11)\n  \"grid-row-start\": 0,\n  \"grid-row-end\": 1,\n  \"grid-column-start\": 2,\n  \"grid-column-end\": 3,\n  \"grid-template-rows\": 4,\n  \"grid-template-columns\": 5,\n  \"grid-template-areas\": 6,\n  \"grid-auto-rows\": 7,\n  \"grid-auto-columns\": 8,\n  \"grid-auto-flow\": 9,\n  \"row-gap\": 10,\n  \"column-gap\": 11,\n\n  // Animation properties (indices 20-27)\n  \"animation-name\": 20,\n  \"animation-duration\": 21,\n  \"animation-timing-function\": 22,\n  \"animation-delay\": 23,\n  \"animation-iteration-count\": 24,\n  \"animation-direction\": 25,\n  \"animation-fill-mode\": 26,\n  \"animation-play-state\": 27,\n\n  // Transition properties (indices 30-33)\n  \"transition-property\": 30,\n  \"transition-duration\": 31,\n  \"transition-timing-function\": 32,\n  \"transition-delay\": 33,\n\n  // Background properties (indices 40-47)\n  \"background-image\": 40,\n  \"background-position\": 41,\n  \"background-size\": 42,\n  \"background-repeat\": 43,\n  \"background-attachment\": 44,\n  \"background-origin\": 45,\n  \"background-clip\": 46,\n  \"background-color\": 47,\n\n  // Font properties (indices 50-56)\n  \"font-style\": 50,\n  \"font-variant\": 51,\n  \"font-weight\": 52,\n  \"font-stretch\": 53,\n  \"font-size\": 54,\n  \"line-height\": 55,\n  \"font-family\": 56,\n\n  // Flex properties (indices 60-64)\n  \"flex-grow\": 60,\n  \"flex-shrink\": 61,\n  \"flex-basis\": 62,\n  \"flex-direction\": 63,\n  \"flex-wrap\": 64,\n\n  // Border directional properties (indices 70-84)\n  \"border-top-width\": 70,\n  \"border-top-style\": 71,\n  \"border-top-color\": 72,\n  \"border-right-width\": 73,\n  \"border-right-style\": 74,\n  \"border-right-color\": 75,\n  \"border-bottom-width\": 76,\n  \"border-bottom-style\": 77,\n  \"border-bottom-color\": 78,\n  \"border-left-width\": 79,\n  \"border-left-style\": 80,\n  \"border-left-color\": 81,\n  \"border-width\": 82,\n  \"border-style\": 83,\n  \"border-color\": 84,\n\n  // Border-radius properties (indices 90-93)\n  \"border-top-left-radius\": 90,\n  \"border-top-right-radius\": 91,\n  \"border-bottom-right-radius\": 92,\n  \"border-bottom-left-radius\": 93,\n\n  // Outline properties (indices 100-102)\n  \"outline-width\": 100,\n  \"outline-style\": 101,\n  \"outline-color\": 102,\n\n  // Column-rule properties (indices 110-112)\n  \"column-rule-width\": 110,\n  \"column-rule-style\": 111,\n  \"column-rule-color\": 112,\n\n  // Columns properties (indices 115-116)\n  \"column-width\": 115,\n  \"column-count\": 116,\n\n  // List-style properties (indices 120-122)\n  \"list-style-type\": 120,\n  \"list-style-position\": 121,\n  \"list-style-image\": 122,\n\n  // Text-decoration properties (indices 130-133)\n  \"text-decoration-line\": 130,\n  \"text-decoration-style\": 131,\n  \"text-decoration-color\": 132,\n  \"text-decoration-thickness\": 133,\n\n  // Overflow properties (indices 140-141)\n  \"overflow-x\": 140,\n  \"overflow-y\": 141,\n\n  // Place properties (indices 150-155)\n  \"align-items\": 150,\n  \"justify-items\": 151,\n  \"align-content\": 152,\n  \"justify-content\": 153,\n  \"align-self\": 154,\n  \"justify-self\": 155,\n\n  // Directional properties - margin (indices 200-203)\n  \"margin-top\": 200,\n  \"margin-right\": 201,\n  \"margin-bottom\": 202,\n  \"margin-left\": 203,\n\n  // Directional properties - padding (indices 210-213)\n  \"padding-top\": 210,\n  \"padding-right\": 211,\n  \"padding-bottom\": 212,\n  \"padding-left\": 213,\n\n  // Directional properties - inset (indices 220-223)\n  top: 220,\n  right: 221,\n  bottom: 222,\n  left: 223,\n\n  // Mask properties (indices 230-237)\n  \"mask-image\": 230,\n  \"mask-mode\": 231,\n  \"mask-position\": 232,\n  \"mask-size\": 233,\n  \"mask-repeat\": 234,\n  \"mask-origin\": 235,\n  \"mask-clip\": 236,\n  \"mask-composite\": 237,\n\n  // Offset properties (indices 240-244)\n  \"offset-position\": 240,\n  \"offset-path\": 241,\n  \"offset-distance\": 242,\n  \"offset-rotate\": 243,\n  \"offset-anchor\": 244,\n\n  // Text-emphasis properties (indices 250-252)\n  \"text-emphasis-style\": 250,\n  \"text-emphasis-color\": 251,\n  \"text-emphasis-position\": 252,\n\n  // Contain-intrinsic-size properties (indices 260-261)\n  \"contain-intrinsic-width\": 260,\n  \"contain-intrinsic-height\": 261,\n};\n\n/**\n * Sorts an object's properties according to CSS specification order.\n * @internal\n */\nexport function sortProperties(\n  obj: Record<string, string>,\n  grouping: PropertyGrouping = GROUPING_BY_PROPERTY\n): Record<string, string> {\n  if (grouping === \"by-side\") {\n    return sortPropertiesBySide(obj);\n  }\n  return sortPropertiesByProperty(obj);\n}\n\n/**\n * Helper to extract property metadata for directional grouping.\n * @internal\n */\nfunction getPropertyMetadata(prop: string): {\n  side: string | null;\n  sideIndex: number;\n  base: string;\n} {\n  const parts = prop.split(\"-\");\n  const sides = [\"top\", \"right\", \"bottom\", \"left\"];\n  const side = parts.find((p) => sides.includes(p)) || null;\n  const sideIndex = side ? sides.indexOf(side) : -1;\n  const base = parts[0];\n\n  return { side, sideIndex, base };\n}\n\n/**\n * Sort properties by property type (default CSS spec order).\n * @internal\n */\nfunction sortPropertiesByProperty(obj: Record<string, string>): Record<string, string> {\n  const sortedEntries = Object.entries(obj).sort(([a], [b]) => {\n    const orderA = PROPERTY_ORDER_MAP[a];\n    const orderB = PROPERTY_ORDER_MAP[b];\n\n    if (orderA !== undefined && orderB !== undefined) {\n      return orderA - orderB;\n    }\n    if (orderA !== undefined) return -1;\n    if (orderB !== undefined) return 1;\n    return a.localeCompare(b);\n  });\n\n  return Object.fromEntries(sortedEntries);\n}\n\n/**\n * Sort properties by directional side.\n * @internal\n */\nfunction sortPropertiesBySide(obj: Record<string, string>): Record<string, string> {\n  const sortedEntries = Object.entries(obj).sort(([a], [b]) => {\n    const metaA = getPropertyMetadata(a);\n    const metaB = getPropertyMetadata(b);\n\n    if (metaA.side && metaB.side) {\n      if (metaA.sideIndex !== metaB.sideIndex) {\n        return metaA.sideIndex - metaB.sideIndex;\n      }\n      const orderA = PROPERTY_ORDER_MAP[a] ?? 999999;\n      const orderB = PROPERTY_ORDER_MAP[b] ?? 999999;\n      return orderA - orderB;\n    }\n\n    if (!metaA.side && metaB.side) {\n      const orderA = PROPERTY_ORDER_MAP[a] ?? 999999;\n      if (orderA < 200) return -1;\n      return 1;\n    }\n    if (metaA.side && !metaB.side) {\n      const orderB = PROPERTY_ORDER_MAP[b] ?? 999999;\n      if (orderB < 200) return 1;\n      return -1;\n    }\n\n    const orderA = PROPERTY_ORDER_MAP[a] ?? 999999;\n    const orderB = PROPERTY_ORDER_MAP[b] ?? 999999;\n    if (orderA !== orderB) return orderA - orderB;\n    return a.localeCompare(b);\n  });\n\n  return Object.fromEntries(sortedEntries);\n}\n\n/**\n * Converts a kebab-case CSS property name to camelCase for JavaScript.\n * @internal\n */\nexport function kebabToCamelCase(property: string): string {\n  return property.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Converts a CSS object to CSS string format.\n * @internal\n */\nexport function objectToCss(\n  obj: Record<string, string>,\n  indent: number,\n  separator: string,\n  propertyGrouping: PropertyGrouping = GROUPING_BY_PROPERTY\n): string {\n  const indentStr = \"  \".repeat(indent);\n  const sorted = sortProperties(obj, propertyGrouping);\n  const sortedEntries = Object.entries(sorted);\n  return sortedEntries.map(([key, value]) => `${indentStr}${key}: ${value};`).join(separator);\n}\n","// b_path:: src/internal/collapse-handler.ts\n\n/**\n * Collapse handler interface for reconstructing shorthand properties from longhands.\n * @module collapse-handler\n */\n\n/**\n * Metadata for a collapse handler\n */\nexport interface CollapseHandlerMetadata {\n  /** The shorthand property name (e.g., 'overflow') */\n  shorthand: string;\n  /** Array of longhand property names that can be collapsed */\n  longhands: string[];\n}\n\n/**\n * Handler interface for collapsing longhand properties into shorthand values.\n *\n * Collapse handlers perform the reverse operation of expand handlers:\n * they take a set of longhand properties and reconstruct the shorthand value.\n *\n * @example\n * ```typescript\n * const collapser: CollapseHandler = {\n *   meta: {\n *     shorthand: 'overflow',\n *     longhands: ['overflow-x', 'overflow-y']\n *   },\n *   collapse(props) {\n *     const x = props['overflow-x'];\n *     const y = props['overflow-y'];\n *     if (!x || !y) return undefined;\n *     return x === y ? x : `${x} ${y}`;\n *   },\n *   canCollapse(props) {\n *     return !!(props['overflow-x'] && props['overflow-y']);\n *   }\n * };\n * ```\n */\nexport interface CollapseHandler {\n  /**\n   * Metadata describing the handler\n   */\n  readonly meta: CollapseHandlerMetadata;\n\n  /**\n   * Reconstruct a shorthand value from longhand properties.\n   *\n   * @param properties - Object containing CSS property names and values\n   * @returns The reconstructed shorthand value, or undefined if cannot collapse\n   *\n   * @example\n   * ```typescript\n   * collapse({ 'overflow-x': 'hidden', 'overflow-y': 'hidden' }); // 'hidden'\n   * collapse({ 'overflow-x': 'hidden', 'overflow-y': 'auto' }); // 'hidden auto'\n   * collapse({ 'overflow-x': 'hidden' }); // undefined (missing overflow-y)\n   * ```\n   */\n  collapse(properties: Record<string, string>): string | undefined;\n\n  /**\n   * Check if the given properties can be collapsed into this shorthand.\n   *\n   * @param properties - Object containing CSS property names and values\n   * @returns true if all required longhands are present and valid\n   *\n   * @example\n   * ```typescript\n   * canCollapse({ 'overflow-x': 'hidden', 'overflow-y': 'auto' }); // true\n   * canCollapse({ 'overflow-x': 'hidden' }); // false (missing overflow-y)\n   * ```\n   */\n  canCollapse(properties: Record<string, string>): boolean;\n}\n\n/**\n * Factory function for creating collapse handlers with consistent behavior.\n *\n * @param config - Collapse handler configuration\n * @returns A fully-formed CollapseHandler instance\n *\n * @example\n * ```typescript\n * export const overflowCollapser = createCollapseHandler({\n *   meta: {\n *     shorthand: 'overflow',\n *     longhands: ['overflow-x', 'overflow-y']\n *   },\n *   collapse: (props) => {\n *     const x = props['overflow-x'];\n *     const y = props['overflow-y'];\n *     if (!x || !y) return undefined;\n *     return x === y ? x : `${x} ${y}`;\n *   },\n *   canCollapse: (props) => !!(props['overflow-x'] && props['overflow-y'])\n * });\n * ```\n */\nexport function createCollapseHandler(config: CollapseHandler): CollapseHandler {\n  return {\n    ...config,\n    collapse: (properties: Record<string, string>): string | undefined => {\n      try {\n        return config.collapse(properties);\n      } catch (_error) {\n        return undefined;\n      }\n    },\n  };\n}\n","// b_path:: src/handlers/animation/collapse-constants.ts\n\n/**\n * Default values for animation properties per CSS specification.\n */\nexport const ANIMATION_DEFAULTS = {\n  name: \"none\",\n  duration: \"0s\",\n  timingFunction: \"ease\",\n  delay: \"0s\",\n  iterationCount: \"1\",\n  direction: \"normal\",\n  fillMode: \"none\",\n  playState: \"running\",\n} as const;\n\n/**\n * Checks if a value is the default for a given property\n */\nexport function isDefault(property: keyof typeof ANIMATION_DEFAULTS, value: string): boolean {\n  return ANIMATION_DEFAULTS[property] === value;\n}\n\n/**\n * Checks if all properties in a layer are at their defaults\n */\nexport function isDefaultLayer(layer: {\n  name?: string;\n  duration?: string;\n  timingFunction?: string;\n  delay?: string;\n  iterationCount?: string;\n  direction?: string;\n  fillMode?: string;\n  playState?: string;\n}): boolean {\n  return (\n    (!layer.name || isDefault(\"name\", layer.name)) &&\n    (!layer.duration || isDefault(\"duration\", layer.duration)) &&\n    (!layer.timingFunction || isDefault(\"timingFunction\", layer.timingFunction)) &&\n    (!layer.delay || isDefault(\"delay\", layer.delay)) &&\n    (!layer.iterationCount || isDefault(\"iterationCount\", layer.iterationCount)) &&\n    (!layer.direction || isDefault(\"direction\", layer.direction)) &&\n    (!layer.fillMode || isDefault(\"fillMode\", layer.fillMode)) &&\n    (!layer.playState || isDefault(\"playState\", layer.playState))\n  );\n}\n","// b_path:: src/handlers/animation/collapse-layer.ts\n\nimport type { AnimationLayer } from \"@/core/schema\";\nimport { isDefault } from \"./collapse-constants\";\n\n/**\n * Collapses a single animation layer into shorthand notation.\n *\n * Rules per CSS spec:\n * - Order is flexible (|| in grammar)\n * - Two time values: first is duration, second is delay\n * - Name should come first or last for clarity\n * - Default values can be omitted\n *\n * We use a sensible order: name duration timing-function delay iteration-count direction fill-mode play-state\n */\nexport function collapseSingleLayer(layer: AnimationLayer): string | undefined {\n  const parts: string[] = [];\n\n  // Check which values are non-default\n  const hasNonDefaultName = layer.name && !isDefault(\"name\", layer.name);\n  const hasNonDefaultDuration = layer.duration && !isDefault(\"duration\", layer.duration);\n  const hasNonDefaultTimingFunction =\n    layer.timingFunction && !isDefault(\"timingFunction\", layer.timingFunction);\n  const hasNonDefaultDelay = layer.delay && !isDefault(\"delay\", layer.delay);\n  const hasNonDefaultIterationCount =\n    layer.iterationCount && !isDefault(\"iterationCount\", layer.iterationCount);\n  const hasNonDefaultDirection = layer.direction && !isDefault(\"direction\", layer.direction);\n  const hasNonDefaultFillMode = layer.fillMode && !isDefault(\"fillMode\", layer.fillMode);\n  const hasNonDefaultPlayState = layer.playState && !isDefault(\"playState\", layer.playState);\n\n  // Need at least one non-default value\n  if (\n    !hasNonDefaultName &&\n    !hasNonDefaultDuration &&\n    !hasNonDefaultTimingFunction &&\n    !hasNonDefaultDelay &&\n    !hasNonDefaultIterationCount &&\n    !hasNonDefaultDirection &&\n    !hasNonDefaultFillMode &&\n    !hasNonDefaultPlayState\n  ) {\n    return undefined;\n  }\n\n  // Build output in a sensible order\n  // Name first (or can be last, but first is clearer)\n  if (hasNonDefaultName) {\n    parts.push(layer.name!);\n  }\n\n  // Duration (first time value)\n  if (hasNonDefaultDuration) {\n    parts.push(layer.duration!);\n  }\n\n  // Timing function\n  if (hasNonDefaultTimingFunction) {\n    parts.push(layer.timingFunction!);\n  }\n\n  // Delay (second time value - must come after duration if both present)\n  if (hasNonDefaultDelay) {\n    parts.push(layer.delay!);\n  }\n\n  // Iteration count\n  if (hasNonDefaultIterationCount) {\n    parts.push(layer.iterationCount!);\n  }\n\n  // Direction\n  if (hasNonDefaultDirection) {\n    parts.push(layer.direction!);\n  }\n\n  // Fill mode\n  if (hasNonDefaultFillMode) {\n    parts.push(layer.fillMode!);\n  }\n\n  // Play state\n  if (hasNonDefaultPlayState) {\n    parts.push(layer.playState!);\n  }\n\n  return parts.join(\" \");\n}\n","// b_path:: src/handlers/animation/collapse-parser.ts\n\nimport type { AnimationLayer } from \"@/core/schema\";\n\n/**\n * Parses animation longhand properties into layer structure.\n * Properties with multiple comma-separated values are split into layers.\n */\nexport function parseAnimationProperties(properties: Record<string, string>): {\n  layers: AnimationLayer[];\n} {\n  const name = properties[\"animation-name\"];\n  const duration = properties[\"animation-duration\"];\n  const timingFunction = properties[\"animation-timing-function\"];\n  const delay = properties[\"animation-delay\"];\n  const iterationCount = properties[\"animation-iteration-count\"];\n  const direction = properties[\"animation-direction\"];\n  const fillMode = properties[\"animation-fill-mode\"];\n  const playState = properties[\"animation-play-state\"];\n\n  // If no properties, return empty\n  if (\n    !name &&\n    !duration &&\n    !timingFunction &&\n    !delay &&\n    !iterationCount &&\n    !direction &&\n    !fillMode &&\n    !playState\n  ) {\n    return { layers: [] };\n  }\n\n  // Split each property by commas to get layers\n  const nameLayers = splitLayers(name);\n  const durationLayers = splitLayers(duration);\n  const timingFunctionLayers = splitLayers(timingFunction);\n  const delayLayers = splitLayers(delay);\n  const iterationCountLayers = splitLayers(iterationCount);\n  const directionLayers = splitLayers(direction);\n  const fillModeLayers = splitLayers(fillMode);\n  const playStateLayers = splitLayers(playState);\n\n  // Number of layers is the maximum of all properties\n  const layerCount = Math.max(\n    nameLayers.length,\n    durationLayers.length,\n    timingFunctionLayers.length,\n    delayLayers.length,\n    iterationCountLayers.length,\n    directionLayers.length,\n    fillModeLayers.length,\n    playStateLayers.length\n  );\n\n  // Build layer objects\n  const layers: AnimationLayer[] = [];\n  for (let i = 0; i < layerCount; i++) {\n    const layer: AnimationLayer = {};\n\n    if (nameLayers[i]) layer.name = nameLayers[i];\n    if (durationLayers[i]) layer.duration = durationLayers[i];\n    if (timingFunctionLayers[i]) layer.timingFunction = timingFunctionLayers[i];\n    if (delayLayers[i]) layer.delay = delayLayers[i];\n    if (iterationCountLayers[i]) layer.iterationCount = iterationCountLayers[i];\n    if (directionLayers[i]) layer.direction = directionLayers[i];\n    if (fillModeLayers[i]) layer.fillMode = fillModeLayers[i];\n    if (playStateLayers[i]) layer.playState = playStateLayers[i];\n\n    layers.push(layer);\n  }\n\n  return { layers };\n}\n\n/**\n * Splits a property value by commas, handling nested functions.\n * Returns empty array if value is undefined.\n */\nfunction splitLayers(value: string | undefined): string[] {\n  if (!value) return [];\n\n  const layers: string[] = [];\n  let current = \"\";\n  let depth = 0;\n\n  for (let i = 0; i < value.length; i++) {\n    const char = value[i];\n\n    if (char === \"(\") {\n      depth++;\n      current += char;\n    } else if (char === \")\") {\n      depth--;\n      current += char;\n    } else if (char === \",\" && depth === 0) {\n      layers.push(current.trim());\n      current = \"\";\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    layers.push(current.trim());\n  }\n\n  return layers;\n}\n","// b_path:: src/handlers/animation/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\nimport { collapseSingleLayer } from \"./collapse-layer\";\nimport { parseAnimationProperties } from \"./collapse-parser\";\n\n/**\n * Collapse handler for the animation shorthand property.\n *\n * Reconstructs `animation` from its 8 longhand properties.\n *\n * Rules:\n * - Supports multi-layer animations (comma-separated)\n * - Order is flexible per spec, but we use: name duration timing-function delay iteration-count direction fill-mode play-state\n * - Two time values: first is duration, second is delay\n * - Default values are omitted where possible\n */\nexport const animationCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"animation\",\n    longhands: [\n      \"animation-name\",\n      \"animation-duration\",\n      \"animation-timing-function\",\n      \"animation-delay\",\n      \"animation-iteration-count\",\n      \"animation-direction\",\n      \"animation-fill-mode\",\n      \"animation-play-state\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    // Parse longhands into layer structure\n    const { layers } = parseAnimationProperties(properties);\n\n    // Need at least one layer\n    if (layers.length === 0) {\n      return undefined;\n    }\n\n    // Collapse each layer\n    const layerStrings: string[] = [];\n\n    for (const layer of layers) {\n      const collapsed = collapseSingleLayer(layer);\n      if (collapsed) {\n        layerStrings.push(collapsed);\n      }\n    }\n\n    // If no layers collapsed, return undefined\n    if (layerStrings.length === 0) {\n      return undefined;\n    }\n\n    // Join layers with comma separator\n    return layerStrings.join(\", \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Need at least one animation property\n    return !!(\n      properties[\"animation-name\"] ||\n      properties[\"animation-duration\"] ||\n      properties[\"animation-timing-function\"] ||\n      properties[\"animation-delay\"] ||\n      properties[\"animation-iteration-count\"] ||\n      properties[\"animation-direction\"] ||\n      properties[\"animation-fill-mode\"] ||\n      properties[\"animation-play-state\"]\n    );\n  },\n});\n","// b_path:: src/internal/is-time.ts\n// Utility to detect CSS time values for transition-duration and transition-delay parsing\nconst TIME = /^[+-]?(\\d*\\.)?\\d+(m?s)$/i;\n\nexport default function isTime(value: string): boolean {\n  return TIME.test(value);\n}\n","// b_path:: src/internal/is-timing-function.ts\n// Utility to detect CSS timing function values for transition-timing-function parsing\nconst TIMING_KEYWORDS = /^(ease|linear|ease-in|ease-out|ease-in-out|step-start|step-end)$/i;\nconst TIMING_FUNCTIONS = /^(cubic-bezier|steps)\\s*\\(/i;\n\nfunction hasBalancedParentheses(value: string): boolean {\n  let openCount = 0;\n  for (const char of value) {\n    if (char === \"(\") {\n      openCount++;\n    } else if (char === \")\") {\n      openCount--;\n      if (openCount < 0) {\n        return false;\n      }\n    }\n  }\n  return openCount === 0;\n}\n\nexport default function isTimingFunction(value: string): boolean {\n  // Check for timing function keywords\n  if (TIMING_KEYWORDS.test(value)) {\n    return true;\n  }\n\n  // Check for timing function functions with balanced parentheses\n  if (TIMING_FUNCTIONS.test(value)) {\n    return hasBalancedParentheses(value);\n  }\n\n  return false;\n}\n","// b_path:: src/internal/property-handler.ts\n\n/**\n * Options for property handler behavior\n */\nexport interface PropertyHandlerOptions {\n  /** Enable strict validation mode (reject invalid values). Default: false */\n  strict?: boolean;\n  /** Preserve custom properties (CSS variables) in output. Default: true */\n  preserveCustomProperties?: boolean;\n}\n\n/**\n * Default values for PropertyHandlerOptions\n */\nexport const DEFAULT_PROPERTY_HANDLER_OPTIONS: Required<PropertyHandlerOptions> = {\n  strict: false,\n  preserveCustomProperties: true,\n};\n\n/**\n * Property category enumeration\n */\nexport const PROPERTY_CATEGORIES = [\n  \"box-model\",\n  \"visual\",\n  \"layout\",\n  \"animation\",\n  \"typography\",\n  \"other\",\n] as const;\n\nexport type PropertyCategory = (typeof PROPERTY_CATEGORIES)[number];\n\n/**\n * Metadata describing a property handler\n */\nexport interface PropertyHandlerMetadata {\n  /** The shorthand property name (e.g., 'border') */\n  shorthand: string;\n  /** Array of longhand property names this shorthand expands to */\n  longhands: string[];\n  /** Default values for longhand properties when not specified */\n  defaults?: Record<string, string>;\n  /** Property category classification */\n  category: PropertyCategory;\n}\n\n/**\n * Property handler interface for CSS shorthand expansion\n *\n * All property handlers must implement this interface to ensure:\n * - Consistent API across all handlers\n * - Type-safe expansion logic\n * - Introspection capabilities\n * - Future extensibility (e.g., collapse API)\n */\nexport interface PropertyHandler {\n  /**\n   * Metadata describing the handler's properties\n   */\n  readonly meta: PropertyHandlerMetadata;\n\n  /**\n   * Expand a CSS shorthand value into its longhand properties\n   *\n   * @param value - The CSS value to expand\n   * @param options - Optional handler options\n   * @returns Object mapping longhand property names to values, or undefined if invalid\n   *\n   * @example\n   * ```typescript\n   * const handler = overflowHandler;\n   * handler.expand('hidden auto'); // { 'overflow-x': 'hidden', 'overflow-y': 'auto' }\n   * handler.expand('invalid'); // undefined\n   * ```\n   */\n  expand(value: string, options?: PropertyHandlerOptions): Record<string, string> | undefined;\n\n  /**\n   * Optional: Validate a CSS value without expanding it\n   *\n   * @param value - The CSS value to validate\n   * @returns true if valid, false otherwise\n   */\n  validate?(value: string): boolean;\n\n  /**\n   * Optional: Reconstruct a shorthand value from longhand properties (future feature)\n   *\n   * This method enables the \"collapse API\" - converting longhand properties back\n   * into their shorthand equivalent.\n   *\n   * @param properties - Object mapping longhand property names to values\n   * @returns The reconstructed shorthand value, or undefined if cannot be collapsed\n   *\n   * @example\n   * ```typescript\n   * const handler = overflowHandler;\n   * handler.reconstruct?.({ 'overflow-x': 'hidden', 'overflow-y': 'hidden' }); // 'hidden'\n   * handler.reconstruct?.({ 'overflow-x': 'hidden', 'overflow-y': 'auto' }); // 'hidden auto'\n   * ```\n   */\n  reconstruct?(properties: Record<string, string>): string | undefined;\n\n  /**\n   * Optional: Sub-handlers for related shorthands\n   *\n   * Some properties like 'border' have sub-properties (border-width, border-style, etc.)\n   * that are themselves shorthands. This allows hierarchical composition.\n   *\n   * @example\n   * ```typescript\n   * const borderHandler: PropertyHandler = {\n   *   meta: { shorthand: 'border', ... },\n   *   expand: (value) => { ... },\n   *   handlers: {\n   *     width: borderWidthHandler,\n   *     style: borderStyleHandler,\n   *     color: borderColorHandler,\n   *   }\n   * };\n   * ```\n   */\n  readonly handlers?: Readonly<Record<string, PropertyHandler>>;\n}\n\n/**\n * Factory function for creating property handlers with consistent behavior\n *\n * This factory wraps handler logic with:\n * - Option validation and defaults\n * - Error handling (returns undefined on exceptions)\n * - Consistent return types\n *\n * @param config - Property handler configuration\n * @returns A fully-formed PropertyHandler instance\n *\n * @example\n * ```typescript\n * export const overflowHandler = createPropertyHandler({\n *   meta: {\n *     shorthand: 'overflow',\n *     longhands: ['overflow-x', 'overflow-y'],\n *     category: 'visual',\n *   },\n *   expand: (value) => {\n *     // Handler implementation\n *   },\n * });\n * ```\n */\nexport function createPropertyHandler(config: PropertyHandler): PropertyHandler {\n  return {\n    ...config,\n    expand: (\n      value: string,\n      options?: PropertyHandlerOptions\n    ): Record<string, string> | undefined => {\n      try {\n        // Apply default options\n        const validatedOptions: Required<PropertyHandlerOptions> = {\n          ...DEFAULT_PROPERTY_HANDLER_OPTIONS,\n          ...options,\n        };\n\n        // Call the underlying expand function with validated options\n        return config.expand(value, validatedOptions);\n      } catch (_error) {\n        // Return undefined on any errors (invalid options, parsing failures, etc.)\n        return undefined;\n      }\n    },\n  };\n}\n","// b_path:: src/internal/is-value-node.ts\nimport type * as csstree from \"@eslint/css-tree\";\n\n/**\n * CSS functions that represent colors, not numeric values.\n * These should NOT be accepted as position/size values.\n */\nconst COLOR_FUNCTIONS = new Set([\n  \"rgb\",\n  \"rgba\",\n  \"hsl\",\n  \"hsla\",\n  \"hwb\",\n  \"lab\",\n  \"lch\",\n  \"oklab\",\n  \"oklch\",\n  \"color\",\n  \"color-mix\",\n  \"light-dark\",\n]);\n\n/**\n * CSS functions that represent images, not numeric values.\n * These should NOT be accepted as position/size values.\n */\nconst IMAGE_FUNCTIONS = new Set([\n  \"url\",\n  \"image\",\n  \"image-set\",\n  \"element\",\n  \"linear-gradient\",\n  \"radial-gradient\",\n  \"conic-gradient\",\n  \"repeating-linear-gradient\",\n  \"repeating-radial-gradient\",\n  \"repeating-conic-gradient\",\n  \"cross-fade\",\n  \"paint\",\n]);\n\n/**\n * Universal type checker that handles CSS functions intelligently.\n *\n * Use this instead of direct `node.type === \"Dimension\"` checks.\n * Automatically accepts calc(), var(), min(), max(), and all math functions.\n *\n * @example\n * // OLD: if (child.type === \"Dimension\" || child.type === \"Percentage\")\n * // NEW: if (matchesType(child, [\"Dimension\", \"Percentage\"]))\n *\n * @internal\n */\nexport function matchesType(node: csstree.CssNode | undefined, types: string | string[]): boolean {\n  if (!node) return false;\n\n  const typeArray = Array.isArray(types) ? types : [types];\n  const nodeType = node.type;\n\n  // Direct type match\n  if (typeArray.includes(nodeType)) {\n    return true;\n  }\n\n  // Function node: treat as numeric value unless it's a color/image function\n  if (\n    nodeType === \"Function\" &&\n    (typeArray.includes(\"Dimension\") ||\n      typeArray.includes(\"Percentage\") ||\n      typeArray.includes(\"Number\"))\n  ) {\n    const funcName = (node as csstree.FunctionNode).name.toLowerCase();\n    return !COLOR_FUNCTIONS.has(funcName) && !IMAGE_FUNCTIONS.has(funcName);\n  }\n\n  return false;\n}\n\n/**\n * Checks if a css-tree node is a valid numeric/dimensional value type.\n * Accepts: Dimension, Percentage, Number, Function (calc, var, etc.)\n * Rejects: Color functions (rgb, hsl), Image functions (url, gradient)\n *\n * Use this for properties that accept length, percentage, or calculated values.\n *\n * @internal\n */\nexport function isNumericValueNode(node: csstree.CssNode): boolean {\n  return matchesType(node, [\"Dimension\", \"Percentage\", \"Number\"]);\n}\n\n/**\n * Checks if a css-tree node is a valid position value type.\n * Accepts: Identifier (keywords), Dimension, Percentage, Number, Function\n *\n * Use this for properties like background-position, mask-position, etc.\n *\n * @param node - css-tree node to check\n * @param keywords - Optional array of valid identifier keywords (e.g., ['left', 'center', 'right'])\n * @internal\n */\nexport function isPositionValueNode(node: csstree.CssNode, keywords?: string[]): boolean {\n  if (isNumericValueNode(node)) {\n    return true;\n  }\n\n  if (node.type === \"Identifier\") {\n    if (!keywords) return true;\n    return keywords.includes((node as csstree.Identifier).name);\n  }\n\n  return false;\n}\n\n/**\n * Checks if a css-tree node is a valid size value type.\n * Accepts: Identifier (keywords), Dimension, Percentage, Number, Function\n *\n * Use this for properties like background-size, mask-size, width, height, etc.\n *\n * @param node - css-tree node to check\n * @param keywords - Optional array of valid identifier keywords (e.g., ['auto', 'cover', 'contain'])\n * @internal\n */\nexport function isSizeValueNode(node: csstree.CssNode, keywords?: string[]): boolean {\n  return isPositionValueNode(node, keywords);\n}\n","// b_path:: src/internal/layer-parser-utils.ts\nimport * as csstree from \"@eslint/css-tree\";\n\n/**\n * Shared utilities for parsing multi-layer CSS properties (background, mask, animation, transition).\n * Eliminates ~360 lines of duplication across layer-parsing modules.\n */\n\n/**\n * Detects if a CSS value contains top-level commas (indicating multiple layers).\n * Ignores commas inside parentheses/brackets (functions, rgba(), etc.).\n *\n * @param value - CSS value to analyze\n * @param detectFunctions - If true, also return true for values with function calls\n * @returns true if multi-layer parsing is needed\n *\n * @example\n * hasTopLevelCommas('url(a.png), url(b.png)') // → true (multiple layers)\n * hasTopLevelCommas('rgba(0,0,0,0.5)')        // → false (comma inside function)\n * hasTopLevelCommas('cubic-bezier(0,0,1,1)', true) // → true (has function)\n */\nexport function hasTopLevelCommas(value: string, detectFunctions = false): boolean {\n  let parenDepth = 0;\n  let bracketDepth = 0;\n  let hasFunctions = false;\n\n  for (let i = 0; i < value.length; i++) {\n    const char = value[i];\n\n    if (char === \"(\") {\n      parenDepth++;\n      hasFunctions = true;\n    } else if (char === \")\") {\n      parenDepth--;\n    } else if (char === \"[\") {\n      bracketDepth++;\n    } else if (char === \"]\") {\n      bracketDepth--;\n    } else if (char === \",\" && parenDepth === 0 && bracketDepth === 0) {\n      // Found a comma at the top level - this indicates multiple layers\n      return true;\n    }\n  }\n\n  // Optionally detect functions (for animation/transition timing functions)\n  return detectFunctions && hasFunctions;\n}\n\n/**\n * Splits a CSS value into layers at top-level commas, respecting nested functions.\n *\n * @param value - CSS value to split\n * @returns Array of layer strings (trimmed)\n *\n * @example\n * splitLayers('url(a.png) center, url(b.png) top')\n * // → ['url(a.png) center', 'url(b.png) top']\n *\n * splitLayers('rgba(0,0,0,0.5)')\n * // → ['rgba(0,0,0,0.5)']\n */\nexport function splitLayers(value: string): string[] {\n  const layers: string[] = [];\n  let currentLayer = \"\";\n  let parenDepth = 0;\n  let bracketDepth = 0;\n\n  for (let i = 0; i < value.length; i++) {\n    const char = value[i];\n\n    if (char === \"(\") {\n      parenDepth++;\n    } else if (char === \")\") {\n      parenDepth--;\n    } else if (char === \"[\") {\n      bracketDepth++;\n    } else if (char === \"]\") {\n      bracketDepth--;\n    } else if (char === \",\" && parenDepth === 0 && bracketDepth === 0) {\n      // Found a comma at the top level - this separates layers\n      layers.push(currentLayer.trim());\n      currentLayer = \"\";\n      continue;\n    }\n\n    currentLayer += char;\n  }\n\n  // Add the last layer\n  if (currentLayer.trim()) {\n    layers.push(currentLayer.trim());\n  }\n\n  return layers;\n}\n\n/**\n * Generic layer parsing factory for multi-layer CSS properties.\n * Handles splitting, parsing, and error handling uniformly.\n *\n * @param value - CSS value to parse\n * @param parseSingleLayer - Function to parse a single layer string\n * @returns Parsed layers or undefined on error\n *\n * @example\n * // Background parsing\n * parseLayersGeneric(\n *   'url(a.png) center, url(b.png) top',\n *   parseBackgroundLayer\n * )\n */\nexport function parseLayersGeneric<T>(\n  value: string,\n  parseSingleLayer: (layerValue: string) => T | undefined\n): T[] | undefined {\n  try {\n    // Split into layers\n    const layerStrings = splitLayers(value);\n    if (layerStrings.length === 0) {\n      return undefined;\n    }\n\n    // Parse each layer\n    const layers: T[] = [];\n    for (const layerStr of layerStrings) {\n      const parsedLayer = parseSingleLayer(layerStr);\n      if (!parsedLayer) {\n        return undefined; // Parsing failed for this layer\n      }\n      layers.push(parsedLayer);\n    }\n\n    return layers;\n  } catch (_error) {\n    // If parsing fails, return undefined to indicate invalid input\n    return undefined;\n  }\n}\n\n/**\n * Collects all child nodes from a css-tree AST Value node.\n * Common pattern across all multi-layer parsers.\n *\n * @param ast - css-tree AST (must contain Value nodes)\n * @returns Flattened array of child nodes\n */\nexport function collectCssTreeChildren(ast: csstree.CssNode): csstree.CssNode[] {\n  const children: csstree.CssNode[] = [];\n\n  // Type guard to ensure we have a valid css-tree node\n  if (!ast || typeof ast !== \"object\") {\n    return children;\n  }\n\n  // Walk the AST and collect children from Value nodes\n  csstree.walk(ast, {\n    visit: \"Value\",\n    enter: (node: csstree.CssNode) => {\n      if (node.type === \"Value\" && node.children) {\n        for (const child of node.children) {\n          children.push(child);\n        }\n      }\n    },\n  });\n\n  return children;\n}\n","// b_path:: src/handlers/animation/animation-layers.ts\n\nimport * as csstree from \"@eslint/css-tree\";\nimport type { AnimationLayer, AnimationResult } from \"@/core/schema\";\nimport isTime from \"@/internal/is-time\";\nimport isTimingFunction from \"@/internal/is-timing-function\";\nimport { matchesType } from \"@/internal/is-value-node\";\nimport { hasTopLevelCommas, parseLayersGeneric } from \"@/internal/layer-parser-utils\";\n\n// CSS default values for animation properties\nexport const ANIMATION_DEFAULTS = {\n  name: \"none\",\n  duration: \"0s\",\n  timingFunction: \"ease\",\n  delay: \"0s\",\n  iterationCount: \"1\",\n  direction: \"normal\",\n  fillMode: \"none\",\n  playState: \"running\",\n} as const;\n\n/**\n * Detects if an animation value needs advanced parsing (multi-layer animations or complex functions)\n */\nexport function needsAdvancedParser(value: string): boolean {\n  return hasTopLevelCommas(value, true);\n}\n\n/**\n * Parses a complex animation value using css-tree AST parsing\n */\nexport function parseAnimationLayers(value: string): AnimationResult | undefined {\n  const layers = parseLayersGeneric(value, parseSingleLayer);\n  return layers ? { layers } : undefined;\n}\n\n/**\n * Parses a single animation layer using css-tree AST parsing\n */\nfunction parseSingleLayer(layerValue: string): AnimationLayer | undefined {\n  const result: AnimationLayer = {};\n\n  const ast = csstree.parse(layerValue.trim(), { context: \"value\" });\n\n  // Collect all child nodes from the Value node\n  const children: csstree.CssNode[] = [];\n  csstree.walk(ast, {\n    visit: \"Value\",\n    enter: (node: csstree.CssNode) => {\n      if (node.type === \"Value\" && node.children) {\n        node.children.forEach((child) => {\n          children.push(child);\n        });\n      }\n    },\n  });\n\n  // Process children in order, handling animation property parsing\n  if (!processCssChildren(children, result)) {\n    return undefined; // Parsing failed due to invalid syntax\n  }\n\n  return result;\n}\n\n/**\n * Processes CSS AST children sequentially to extract animation properties\n *\n * This function handles the parsing of CSS animation layer syntax,\n * including animation names, time values, timing functions, iteration counts,\n * direction, fill mode, and play state.\n * CSS ordering rules: first time = duration, second time = delay\n *\n * Returns false if parsing should fail (e.g., too many time values, unrecognized tokens, duplicates)\n */\nfunction processCssChildren(children: csstree.CssNode[], result: AnimationLayer): boolean {\n  let timeCount = 0; // Track first vs second time value\n\n  for (const child of children) {\n    let matched = false; // Track if this token was recognized\n\n    // Skip whitespace and operators\n    if (child.type === \"WhiteSpace\" || child.type === \"Operator\") {\n      continue;\n    }\n\n    // Handle animation name first (can be any identifier including var() or quoted strings)\n    if (!result.name) {\n      if (child.type === \"Identifier\") {\n        const name = (child as csstree.Identifier).name;\n        if (name === \"none\") {\n          result.name = \"none\";\n          matched = true;\n        }\n        // Check if it looks like a valid animation name identifier\n        // Allow custom identifiers matching pattern, but exclude timing functions and other keywords\n        else if (\n          /^-?[a-zA-Z][a-zA-Z0-9-]*$/.test(name) &&\n          !isTimingFunction(name) &&\n          !/^(normal|reverse|alternate|alternate-reverse|none|forwards|backwards|both|running|paused|infinite)$/i.test(\n            name\n          )\n        ) {\n          result.name = name;\n          matched = true;\n        }\n      } else if (child.type === \"Function\") {\n        const funcValue = csstree.generate(child);\n        if (funcValue.startsWith(\"var(\")) {\n          result.name = funcValue;\n          matched = true;\n        }\n      } else if (child.type === \"String\") {\n        result.name = csstree.generate(child);\n        matched = true;\n      }\n\n      if (matched) continue;\n    }\n\n    // Handle timing functions FIRST (keywords and functions)\n    // Must check before time values to avoid cubic-bezier() being treated as time\n    if (!result.timingFunction) {\n      if (child.type === \"Identifier\") {\n        const timingValue = csstree.generate(child);\n        if (isTimingFunction(timingValue)) {\n          result.timingFunction = timingValue;\n          matched = true;\n        }\n      }\n\n      if (child.type === \"Function\") {\n        const funcValue = csstree.generate(child);\n        if (isTimingFunction(funcValue)) {\n          // Fix spacing in function calls (css-tree removes spaces after commas)\n          result.timingFunction = funcValue.replace(/,([^\\s])/g, \", $1\");\n          matched = true;\n        }\n      }\n    } else {\n      // Check for duplicates\n      if (child.type === \"Identifier\") {\n        const timingValue = csstree.generate(child);\n        if (isTimingFunction(timingValue)) {\n          return false; // Duplicate timing function\n        }\n      }\n      if (child.type === \"Function\") {\n        const funcValue = csstree.generate(child);\n        if (isTimingFunction(funcValue)) {\n          return false; // Duplicate timing function\n        }\n      }\n    }\n\n    // Handle time values (duration and delay)\n    // Accept: Dimensions with time units (1s, 500ms), or any Function (calc, var, etc.)\n    if (!matched && matchesType(child, [\"Dimension\", \"Function\"])) {\n      const timeValue = csstree.generate(child);\n\n      // For Dimensions, validate they have time units\n      // For Functions (var, calc), accept unconditionally (carry over as-is)\n      if (child.type === \"Function\" || isTime(timeValue)) {\n        if (timeCount >= 2) {\n          // More than 2 time values is invalid\n          return false;\n        }\n        if (timeCount === 0) {\n          result.duration = timeValue;\n        } else {\n          result.delay = timeValue;\n        }\n        timeCount++;\n        matched = true;\n      }\n    }\n\n    // Handle iteration count\n    // Accept: Number, \"infinite\" keyword, or any Function (calc, var, etc.)\n    if (!matched && !result.iterationCount) {\n      if (matchesType(child, [\"Number\", \"Function\"])) {\n        const numValue = csstree.generate(child);\n        result.iterationCount = numValue;\n        matched = true;\n      }\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (identValue === \"infinite\") {\n          result.iterationCount = \"infinite\";\n          matched = true;\n        }\n      }\n    } else if (!matched) {\n      // Check for duplicates\n      if (matchesType(child, [\"Number\", \"Function\"])) {\n        return false; // Duplicate iteration count\n      }\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (identValue === \"infinite\") {\n          return false; // Duplicate iteration count\n        }\n      }\n    }\n\n    // Handle direction keywords\n    if (!result.direction) {\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (/^(normal|reverse|alternate|alternate-reverse)$/i.test(identValue)) {\n          result.direction = identValue;\n          matched = true;\n        }\n      }\n    } else {\n      // Check for duplicates\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (/^(normal|reverse|alternate|alternate-reverse)$/i.test(identValue)) {\n          return false; // Duplicate direction\n        }\n      }\n    }\n\n    // Handle fill mode keywords\n    if (!result.fillMode) {\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (/^(none|forwards|backwards|both)$/i.test(identValue)) {\n          result.fillMode = identValue;\n          matched = true;\n        }\n      }\n    } else {\n      // Check for duplicates\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (/^(none|forwards|backwards|both)$/i.test(identValue)) {\n          return false; // Duplicate fill mode\n        }\n      }\n    }\n\n    // Handle play state keywords\n    if (!result.playState) {\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (/^(running|paused)$/i.test(identValue)) {\n          result.playState = identValue;\n          matched = true;\n        }\n      }\n    } else {\n      // Check for duplicates\n      if (child.type === \"Identifier\") {\n        const identValue = csstree.generate(child);\n        if (/^(running|paused)$/i.test(identValue)) {\n          return false; // Duplicate play state\n        }\n      }\n    }\n\n    // If token was not matched by any category, it's unrecognized\n    if (!matched) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Reconstructs final CSS properties from layer objects\n */\nexport function reconstructLayers(layers: AnimationLayer[]): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  // Collect all layer values for each property\n  const properties = {\n    \"animation-name\": layers.map((l) => l.name || ANIMATION_DEFAULTS.name),\n    \"animation-duration\": layers.map((l) => l.duration || ANIMATION_DEFAULTS.duration),\n    \"animation-timing-function\": layers.map(\n      (l) => l.timingFunction || ANIMATION_DEFAULTS.timingFunction\n    ),\n    \"animation-delay\": layers.map((l) => l.delay || ANIMATION_DEFAULTS.delay),\n    \"animation-iteration-count\": layers.map(\n      (l) => l.iterationCount || ANIMATION_DEFAULTS.iterationCount\n    ),\n    \"animation-direction\": layers.map((l) => l.direction || ANIMATION_DEFAULTS.direction),\n    \"animation-fill-mode\": layers.map((l) => l.fillMode || ANIMATION_DEFAULTS.fillMode),\n    \"animation-play-state\": layers.map((l) => l.playState || ANIMATION_DEFAULTS.playState),\n  };\n\n  // Join layer values with commas\n  Object.entries(properties).forEach(([property, values]) => {\n    result[property] = values.join(\", \");\n  });\n\n  return result;\n}\n","// b_path:: src/handlers/animation/expand.ts\n\n// NOTE: This handler contains complex multi-layer parsing logic that is a candidate\n// for future refactoring. The current implementation works correctly but could be\n// simplified with better abstractions for timing/iteration/direction parsing.\n\nimport isTime from \"@/internal/is-time\";\nimport isTimingFunction from \"@/internal/is-timing-function\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport {\n  ANIMATION_DEFAULTS,\n  needsAdvancedParser,\n  parseAnimationLayers,\n  reconstructLayers,\n} from \"./animation-layers\";\n\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\nconst ITERATION_COUNT = /^(infinite|[0-9]+(\\.[0-9]+)?)$/;\nconst DIRECTION = /^(normal|reverse|alternate|alternate-reverse)$/i;\nconst FILL_MODE = /^(none|forwards|backwards|both)$/i;\nconst PLAY_STATE = /^(running|paused)$/i;\n\nfunction parseAnimationValue(value: string): Record<string, string> | undefined {\n  // Handle global keywords first\n  if (KEYWORD.test(value.trim())) {\n    return {\n      \"animation-name\": value.trim(),\n      \"animation-duration\": value.trim(),\n      \"animation-timing-function\": value.trim(),\n      \"animation-delay\": value.trim(),\n      \"animation-iteration-count\": value.trim(),\n      \"animation-direction\": value.trim(),\n      \"animation-fill-mode\": value.trim(),\n      \"animation-play-state\": value.trim(),\n    };\n  }\n\n  // Check for multi-layer syntax\n  if (needsAdvancedParser(value)) {\n    const layeredResult = parseAnimationLayers(value);\n    if (layeredResult) {\n      return reconstructLayers(layeredResult.layers);\n    }\n    return undefined; // Advanced parsing failed\n  }\n\n  // Simple single-layer fallback parser\n  const result: Record<string, string> = {};\n  const tokens = value.trim().split(/\\s+/);\n  let timeCount = 0; // Track first vs second time value\n\n  for (const token of tokens) {\n    // Handle animation name first (can be any identifier including var() or quoted strings)\n    if (!result[\"animation-name\"]) {\n      if (token === \"none\") {\n        result[\"animation-name\"] = \"none\";\n        continue;\n      }\n      // Check if it looks like a valid animation name identifier\n      // Allow custom identifiers matching pattern, var() functions, quoted strings, but exclude timing functions and other keywords\n      if (\n        (/^-?[a-zA-Z][a-zA-Z0-9-]*$/.test(token) ||\n          token.startsWith(\"var(\") ||\n          (token.startsWith('\"') && token.endsWith('\"')) ||\n          (token.startsWith(\"'\") && token.endsWith(\"'\"))) &&\n        !isTimingFunction(token) &&\n        !DIRECTION.test(token) &&\n        !FILL_MODE.test(token) &&\n        !PLAY_STATE.test(token) &&\n        !ITERATION_COUNT.test(token)\n      ) {\n        result[\"animation-name\"] = token;\n        continue;\n      }\n    }\n\n    // Handle time values (duration and delay) - CSS allows flexible ordering\n    if (isTime(token)) {\n      if (timeCount === 0) {\n        result[\"animation-duration\"] = token;\n      } else if (timeCount === 1) {\n        result[\"animation-delay\"] = token;\n      } else {\n        // More than 2 time values is invalid\n        return undefined;\n      }\n      timeCount++;\n      continue;\n    }\n\n    // Handle timing functions\n    if (!result[\"animation-timing-function\"] && isTimingFunction(token)) {\n      result[\"animation-timing-function\"] = token;\n      continue;\n    }\n\n    // Handle iteration count\n    if (!result[\"animation-iteration-count\"] && ITERATION_COUNT.test(token)) {\n      result[\"animation-iteration-count\"] = token;\n      continue;\n    }\n\n    // Handle direction keywords\n    if (!result[\"animation-direction\"] && DIRECTION.test(token)) {\n      result[\"animation-direction\"] = token;\n      continue;\n    }\n\n    // Handle fill mode keywords\n    if (!result[\"animation-fill-mode\"] && FILL_MODE.test(token)) {\n      result[\"animation-fill-mode\"] = token;\n      continue;\n    }\n\n    // Handle play state keywords\n    if (!result[\"animation-play-state\"] && PLAY_STATE.test(token)) {\n      result[\"animation-play-state\"] = token;\n      continue;\n    }\n\n    // If token doesn't match any category, it's invalid\n    return undefined;\n  }\n\n  // Accept single-token property values - they will expand to defaults\n\n  // Build final result with defaults\n  return {\n    \"animation-name\": result[\"animation-name\"] || ANIMATION_DEFAULTS.name,\n    \"animation-duration\": result[\"animation-duration\"] || ANIMATION_DEFAULTS.duration,\n    \"animation-timing-function\":\n      result[\"animation-timing-function\"] || ANIMATION_DEFAULTS.timingFunction,\n    \"animation-delay\": result[\"animation-delay\"] || ANIMATION_DEFAULTS.delay,\n    \"animation-iteration-count\":\n      result[\"animation-iteration-count\"] || ANIMATION_DEFAULTS.iterationCount,\n    \"animation-direction\": result[\"animation-direction\"] || ANIMATION_DEFAULTS.direction,\n    \"animation-fill-mode\": result[\"animation-fill-mode\"] || ANIMATION_DEFAULTS.fillMode,\n    \"animation-play-state\": result[\"animation-play-state\"] || ANIMATION_DEFAULTS.playState,\n  };\n}\n\n/**\n * Property handler for the 'animation' CSS shorthand property\n *\n * Expands animation into animation-name, animation-duration, animation-timing-function,\n * animation-delay, animation-iteration-count, animation-direction, animation-fill-mode,\n * and animation-play-state.\n *\n * @example\n * ```typescript\n * animationHandler.expand('slide 300ms ease-in');\n * animationHandler.expand('bounce 1s infinite');\n * ```\n */\nexport const animationHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"animation\",\n    longhands: [\n      \"animation-name\",\n      \"animation-duration\",\n      \"animation-timing-function\",\n      \"animation-delay\",\n      \"animation-iteration-count\",\n      \"animation-direction\",\n      \"animation-fill-mode\",\n      \"animation-play-state\",\n    ],\n    defaults: {\n      \"animation-name\": ANIMATION_DEFAULTS.name,\n      \"animation-duration\": ANIMATION_DEFAULTS.duration,\n      \"animation-timing-function\": ANIMATION_DEFAULTS.timingFunction,\n      \"animation-delay\": ANIMATION_DEFAULTS.delay,\n      \"animation-iteration-count\": ANIMATION_DEFAULTS.iterationCount,\n      \"animation-direction\": ANIMATION_DEFAULTS.direction,\n      \"animation-fill-mode\": ANIMATION_DEFAULTS.fillMode,\n      \"animation-play-state\": ANIMATION_DEFAULTS.playState,\n    },\n    category: \"animation\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    return parseAnimationValue(value);\n  },\n\n  validate: (value: string): boolean => {\n    return animationHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function animation(value: string): Record<string, string> | undefined {\n  return animationHandler.expand(value);\n}\n","// b_path:: src/handlers/background/collapse-constants.ts\n\n/**\n * Default values for background properties per CSS specification.\n * These values can be omitted when collapsing.\n */\nexport const BACKGROUND_DEFAULTS = {\n  image: \"none\",\n  position: \"0% 0%\",\n  size: \"auto auto\",\n  repeat: \"repeat\",\n  attachment: \"scroll\",\n  origin: \"padding-box\",\n  clip: \"border-box\",\n  color: \"transparent\",\n} as const;\n\n/**\n * Checks if a value is the default for a given property\n */\nexport function isDefault(property: keyof typeof BACKGROUND_DEFAULTS, value: string): boolean {\n  return BACKGROUND_DEFAULTS[property] === value;\n}\n\n/**\n * Checks if all properties in a layer are at their defaults\n */\nexport function isDefaultLayer(layer: {\n  image?: string;\n  position?: string;\n  size?: string;\n  repeat?: string;\n  attachment?: string;\n  origin?: string;\n  clip?: string;\n}): boolean {\n  return (\n    (!layer.image || isDefault(\"image\", layer.image)) &&\n    (!layer.position || isDefault(\"position\", layer.position)) &&\n    (!layer.size || isDefault(\"size\", layer.size)) &&\n    (!layer.repeat || isDefault(\"repeat\", layer.repeat)) &&\n    (!layer.attachment || isDefault(\"attachment\", layer.attachment)) &&\n    (!layer.origin || isDefault(\"origin\", layer.origin)) &&\n    (!layer.clip || isDefault(\"clip\", layer.clip))\n  );\n}\n","// b_path:: src/handlers/background/collapse-layer.ts\n\nimport type { BackgroundLayer } from \"@/core/schema\";\nimport { BACKGROUND_DEFAULTS, isDefault } from \"./collapse-constants\";\n\n/**\n * Collapses a single background layer into shorthand notation.\n *\n * Rules:\n * - Default values can be omitted\n * - Size must follow position with / separator\n * - Order matters for some properties\n * - Empty layers return undefined\n */\nexport function collapseSingleLayer(layer: BackgroundLayer): string | undefined {\n  const parts: string[] = [];\n\n  // Add image if not default\n  if (layer.image && !isDefault(\"image\", layer.image)) {\n    parts.push(layer.image);\n  }\n\n  // Add position (and size if present)\n  const hasNonDefaultPosition = layer.position && !isDefault(\"position\", layer.position);\n  const hasNonDefaultSize = layer.size && !isDefault(\"size\", layer.size);\n\n  if (hasNonDefaultPosition || hasNonDefaultSize) {\n    // Position/size must be together if either is non-default\n    const position = layer.position || BACKGROUND_DEFAULTS.position;\n    const positionPart = hasNonDefaultSize ? `${position} / ${layer.size}` : position;\n    parts.push(positionPart);\n  }\n\n  // Add repeat if not default\n  if (layer.repeat && !isDefault(\"repeat\", layer.repeat)) {\n    parts.push(layer.repeat);\n  }\n\n  // Add attachment if not default\n  if (layer.attachment && !isDefault(\"attachment\", layer.attachment)) {\n    parts.push(layer.attachment);\n  }\n\n  // Add origin/clip (special handling - they can be the same value)\n  const hasNonDefaultOrigin = layer.origin && !isDefault(\"origin\", layer.origin);\n  const hasNonDefaultClip = layer.clip && !isDefault(\"clip\", layer.clip);\n\n  if (hasNonDefaultOrigin && hasNonDefaultClip) {\n    // Both specified - check if same\n    if (layer.origin === layer.clip) {\n      parts.push(layer.origin!);\n    } else {\n      parts.push(layer.origin!);\n      parts.push(layer.clip!);\n    }\n  } else if (hasNonDefaultOrigin) {\n    parts.push(layer.origin!);\n  } else if (hasNonDefaultClip) {\n    // Clip alone needs both values\n    parts.push(BACKGROUND_DEFAULTS.origin);\n    parts.push(layer.clip!);\n  }\n\n  // If nothing was added, return undefined (all defaults)\n  if (parts.length === 0) {\n    return undefined;\n  }\n\n  return parts.join(\" \");\n}\n","// b_path:: src/handlers/background/collapse-parser.ts\n\nimport type { BackgroundLayer } from \"@/core/schema\";\n\n/**\n * Parses background longhand properties into layer structure.\n * Properties with multiple comma-separated values are split into layers.\n */\nexport function parseBackgroundProperties(properties: Record<string, string>): {\n  layers: BackgroundLayer[];\n  color?: string;\n} {\n  const color = properties[\"background-color\"];\n\n  // Get all layer properties\n  const image = properties[\"background-image\"];\n  const position = properties[\"background-position\"];\n  const size = properties[\"background-size\"];\n  const repeat = properties[\"background-repeat\"];\n  const attachment = properties[\"background-attachment\"];\n  const origin = properties[\"background-origin\"];\n  const clip = properties[\"background-clip\"];\n\n  // If no properties, return empty\n  if (!image && !position && !size && !repeat && !attachment && !origin && !clip) {\n    return { layers: [], color };\n  }\n\n  // Split each property by commas to get layers\n  const imageLayers = splitLayers(image);\n  const positionLayers = splitLayers(position);\n  const sizeLayers = splitLayers(size);\n  const repeatLayers = splitLayers(repeat);\n  const attachmentLayers = splitLayers(attachment);\n  const originLayers = splitLayers(origin);\n  const clipLayers = splitLayers(clip);\n\n  // Number of layers is the maximum of all properties\n  const layerCount = Math.max(\n    imageLayers.length,\n    positionLayers.length,\n    sizeLayers.length,\n    repeatLayers.length,\n    attachmentLayers.length,\n    originLayers.length,\n    clipLayers.length\n  );\n\n  // Build layer objects\n  const layers: BackgroundLayer[] = [];\n  for (let i = 0; i < layerCount; i++) {\n    const layer: BackgroundLayer = {};\n\n    if (imageLayers[i]) layer.image = imageLayers[i];\n    if (positionLayers[i]) layer.position = positionLayers[i];\n    if (sizeLayers[i]) layer.size = sizeLayers[i];\n    if (repeatLayers[i]) layer.repeat = repeatLayers[i];\n    if (attachmentLayers[i]) layer.attachment = attachmentLayers[i];\n    if (originLayers[i]) layer.origin = originLayers[i];\n    if (clipLayers[i]) layer.clip = clipLayers[i];\n\n    layers.push(layer);\n  }\n\n  return { layers, color };\n}\n\n/**\n * Splits a property value by commas, handling nested functions.\n * Returns empty array if value is undefined.\n */\nfunction splitLayers(value: string | undefined): string[] {\n  if (!value) return [];\n\n  const layers: string[] = [];\n  let current = \"\";\n  let depth = 0;\n\n  for (let i = 0; i < value.length; i++) {\n    const char = value[i];\n\n    if (char === \"(\") {\n      depth++;\n      current += char;\n    } else if (char === \")\") {\n      depth--;\n      current += char;\n    } else if (char === \",\" && depth === 0) {\n      layers.push(current.trim());\n      current = \"\";\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    layers.push(current.trim());\n  }\n\n  return layers;\n}\n","// b_path:: src/handlers/background/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\nimport { BACKGROUND_DEFAULTS } from \"./collapse-constants\";\nimport { collapseSingleLayer } from \"./collapse-layer\";\nimport { parseBackgroundProperties } from \"./collapse-parser\";\n\n/**\n * Collapse handler for the background shorthand property.\n *\n * Reconstructs `background` from its 8 longhand properties + color.\n *\n * Rules:\n * - Supports multi-layer backgrounds (comma-separated)\n * - background-color only appears in final layer\n * - Default values are omitted where possible\n * - Special handling for position/size (size needs / separator)\n * - origin and clip can share a value if identical\n */\nexport const backgroundCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"background\",\n    longhands: [\n      \"background-image\",\n      \"background-position\",\n      \"background-size\",\n      \"background-repeat\",\n      \"background-attachment\",\n      \"background-origin\",\n      \"background-clip\",\n      \"background-color\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    // Parse longhands into layer structure\n    const { layers, color } = parseBackgroundProperties(properties);\n\n    // Need at least one layer or color\n    if (layers.length === 0 && !color) {\n      return undefined;\n    }\n\n    // Collapse each layer\n    const layerStrings: string[] = [];\n\n    for (const layer of layers) {\n      const collapsed = collapseSingleLayer(layer);\n      if (collapsed) {\n        layerStrings.push(collapsed);\n      }\n    }\n\n    // If no layers collapsed and color is default, return undefined\n    if (layerStrings.length === 0 && (!color || color === BACKGROUND_DEFAULTS.color)) {\n      return undefined;\n    }\n\n    // Add color to final layer if not default\n    if (color && color !== BACKGROUND_DEFAULTS.color) {\n      if (layerStrings.length > 0) {\n        // Append to last layer\n        layerStrings[layerStrings.length - 1] += ` ${color}`;\n      } else {\n        // Color only\n        return color;\n      }\n    }\n\n    // If still no output, return undefined\n    if (layerStrings.length === 0) {\n      return undefined;\n    }\n\n    // Join layers with comma separator\n    return layerStrings.join(\", \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Need at least one background property\n    return !!(\n      properties[\"background-image\"] ||\n      properties[\"background-position\"] ||\n      properties[\"background-size\"] ||\n      properties[\"background-repeat\"] ||\n      properties[\"background-attachment\"] ||\n      properties[\"background-origin\"] ||\n      properties[\"background-clip\"] ||\n      properties[\"background-color\"]\n    );\n  },\n});\n","// b_path:: src/internal/color-utils.ts\n// Color utility functions - replacing external dependencies for better self-containment\n\nexport const CSS_COLOR_NAMES: Record<string, string> = {\n  aliceblue: \"#F0F8FF\",\n  antiquewhite: \"#FAEBD7\",\n  aqua: \"#00FFFF\",\n  aquamarine: \"#7FFFD4\",\n  azure: \"#F0FFFF\",\n  beige: \"#F5F5DC\",\n  bisque: \"#FFE4C4\",\n  black: \"#000000\",\n  blanchedalmond: \"#FFEBCD\",\n  blue: \"#0000FF\",\n  blueviolet: \"#8A2BE2\",\n  brown: \"#A52A2A\",\n  burlywood: \"#DEB887\",\n  cadetblue: \"#5F9EA0\",\n  chartreuse: \"#7FFF00\",\n  chocolate: \"#D2691E\",\n  coral: \"#FF7F50\",\n  cornflowerblue: \"#6495ED\",\n  cornsilk: \"#FFF8DC\",\n  crimson: \"#DC143C\",\n  cyan: \"#00FFFF\",\n  darkblue: \"#00008B\",\n  darkcyan: \"#008B8B\",\n  darkgoldenrod: \"#B8860B\",\n  darkgray: \"#A9A9A9\",\n  darkgrey: \"#A9A9A9\",\n  darkgreen: \"#006400\",\n  darkkhaki: \"#BDB76B\",\n  darkmagenta: \"#8B008B\",\n  darkolivegreen: \"#556B2F\",\n  darkorange: \"#FF8C00\",\n  darkorchid: \"#9932CC\",\n  darkred: \"#8B0000\",\n  darksalmon: \"#E9967A\",\n  darkseagreen: \"#8FBC8F\",\n  darkslateblue: \"#483D8B\",\n  darkslategray: \"#2F4F4F\",\n  darkslategrey: \"#2F4F4F\",\n  darkturquoise: \"#00CED1\",\n  darkviolet: \"#9400D3\",\n  deeppink: \"#FF1493\",\n  deepskyblue: \"#00BFFF\",\n  dimgray: \"#696969\",\n  dimgrey: \"#696969\",\n  dodgerblue: \"#1E90FF\",\n  firebrick: \"#B22222\",\n  floralwhite: \"#FFFAF0\",\n  forestgreen: \"#228B22\",\n  fuchsia: \"#FF00FF\",\n  gainsboro: \"#DCDCDC\",\n  ghostwhite: \"#F8F8FF\",\n  gold: \"#FFD700\",\n  goldenrod: \"#DAA520\",\n  gray: \"#808080\",\n  grey: \"#808080\",\n  green: \"#008000\",\n  greenyellow: \"#ADFF2F\",\n  honeydew: \"#F0FFF0\",\n  hotpink: \"#FF69B4\",\n  indianred: \"#CD5C5C\",\n  indigo: \"#4B0082\",\n  ivory: \"#FFFFF0\",\n  khaki: \"#F0E68C\",\n  lavender: \"#E6E6FA\",\n  lavenderblush: \"#FFF0F5\",\n  lawngreen: \"#7CFC00\",\n  lemonchiffon: \"#FFFACD\",\n  lightblue: \"#ADD8E6\",\n  lightcoral: \"#F08080\",\n  lightcyan: \"#E0FFFF\",\n  lightgoldenrodyellow: \"#FAFAD2\",\n  lightgray: \"#D3D3D3\",\n  lightgrey: \"#D3D3D3\",\n  lightgreen: \"#90EE90\",\n  lightpink: \"#FFB6C1\",\n  lightsalmon: \"#FFA07A\",\n  lightseagreen: \"#20B2AA\",\n  lightskyblue: \"#87CEFA\",\n  lightslategray: \"#778899\",\n  lightslategrey: \"#778899\",\n  lightsteelblue: \"#B0C4DE\",\n  lightyellow: \"#FFFFE0\",\n  lime: \"#00FF00\",\n  limegreen: \"#32CD32\",\n  linen: \"#FAF0E6\",\n  magenta: \"#FF00FF\",\n  maroon: \"#800000\",\n  mediumaquamarine: \"#66CDAA\",\n  mediumblue: \"#0000CD\",\n  mediumorchid: \"#BA55D3\",\n  mediumpurple: \"#9370DB\",\n  mediumseagreen: \"#3CB371\",\n  mediumslateblue: \"#7B68EE\",\n  mediumspringgreen: \"#00FA9A\",\n  mediumturquoise: \"#48D1CC\",\n  mediumvioletred: \"#C71585\",\n  midnightblue: \"#191970\",\n  mintcream: \"#F5FFFA\",\n  mistyrose: \"#FFE4E1\",\n  moccasin: \"#FFE4B5\",\n  navajowhite: \"#FFDEAD\",\n  navy: \"#000080\",\n  oldlace: \"#FDF5E6\",\n  olive: \"#808000\",\n  olivedrab: \"#6B8E23\",\n  orange: \"#FFA500\",\n  orangered: \"#FF4500\",\n  orchid: \"#DA70D6\",\n  palegoldenrod: \"#EEE8AA\",\n  palegreen: \"#98FB98\",\n  paleturquoise: \"#AFEEEE\",\n  palevioletred: \"#DB7093\",\n  papayawhip: \"#FFEFD5\",\n  peachpuff: \"#FFDAB9\",\n  peru: \"#CD853F\",\n  pink: \"#FFC0CB\",\n  plum: \"#DDA0DD\",\n  powderblue: \"#B0E0E6\",\n  purple: \"#800080\",\n  rebeccapurple: \"#663399\",\n  red: \"#FF0000\",\n  rosybrown: \"#BC8F8F\",\n  royalblue: \"#4169E1\",\n  saddlebrown: \"#8B4513\",\n  salmon: \"#FA8072\",\n  sandybrown: \"#F4A460\",\n  seagreen: \"#2E8B57\",\n  seashell: \"#FFF5EE\",\n  sienna: \"#A0522D\",\n  silver: \"#C0C0C0\",\n  skyblue: \"#87CEEB\",\n  slateblue: \"#6A5ACD\",\n  slategray: \"#708090\",\n  slategrey: \"#708090\",\n  snow: \"#FFFAFA\",\n  springgreen: \"#00FF7F\",\n  steelblue: \"#4682B4\",\n  tan: \"#D2B48C\",\n  teal: \"#008080\",\n  thistle: \"#D8BFD8\",\n  tomato: \"#FF6347\",\n  turquoise: \"#40E0D0\",\n  violet: \"#EE82EE\",\n  wheat: \"#F5DEB3\",\n  white: \"#FFFFFF\",\n  whitesmoke: \"#F5F5F5\",\n  yellow: \"#FFFF00\",\n  yellowgreen: \"#9ACD32\",\n};\n\nexport function cssUrlRegex(): RegExp {\n  return /url\\((.*?)\\)/gi;\n}\n\nexport function hexColorRegex(opts?: { strict?: boolean }): RegExp {\n  opts = opts && typeof opts === \"object\" ? opts : {};\n  return opts.strict\n    ? /^#([a-f0-9]{3,4}|[a-f0-9]{4}(?:[a-f0-9]{2}){1,2})\\b$/i\n    : /#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})\\b/gi;\n}\n\nexport function hslRegex(options?: { exact?: boolean }): RegExp {\n  options = options || {};\n  return options.exact\n    ? /^hsl\\(\\s*(\\d+)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)(?:\\s*\\/?\\s*(\\d*(?:\\.\\d+)?%?))?\\s*\\)$/\n    : /hsl\\(\\s*(\\d+)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)(?:\\s*\\/?\\s*(\\d*(?:\\.\\d+)?%?))?\\s*\\)/gi;\n}\n\nexport function hslaRegex(options?: { exact?: boolean }): RegExp {\n  options = options || {};\n  return options.exact\n    ? /^hsla\\(\\s*(\\d+)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)\\s*[,/]?\\s*(\\d*(?:\\.\\d+)?%?)\\s*\\)$/\n    : /hsla\\(\\s*(\\d+)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)\\s*[,\\s]?\\s*(\\d*(?:\\.\\d+)?%)\\s*[,/]?\\s*(\\d*(?:\\.\\d+)?%?)\\s*\\)/gi;\n}\n\nexport function rgbRegex(options?: { exact?: boolean }): RegExp {\n  options = options || {};\n  return options.exact\n    ? /^rgb\\(\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})(?:\\s*\\/?\\s*(\\d*(?:\\.\\d+)?%?))?\\s*\\)$/\n    : /rgb\\(\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})(?:\\s*\\/?\\s*(\\d*(?:\\.\\d+)?%?))?\\s*\\)/gi;\n}\n\nexport function rgbaRegex(options?: { exact?: boolean }): RegExp {\n  options = options || {};\n  return options.exact\n    ? /^rgba\\(\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})\\s*[,/]?\\s*(\\d*(?:\\.\\d+)?%?)\\s*\\)$/\n    : /rgba\\(\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})\\s*[,\\s]?\\s*(\\d{1,3})\\s*[,/]?\\s*(\\d*(?:\\.\\d+)?%?)\\s*\\)/gi;\n}\n","// b_path:: src/internal/is-color.ts\nimport {\n  CSS_COLOR_NAMES,\n  hexColorRegex,\n  hslaRegex,\n  hslRegex,\n  rgbaRegex,\n  rgbRegex,\n} from \"./color-utils\";\n\nconst HEX = new RegExp(`^${hexColorRegex().source}$`, \"i\");\nconst HSLA = hslaRegex({ exact: true });\nconst HSL = hslRegex({ exact: true });\nconst RGB = rgbRegex({ exact: true });\nconst RGBA = rgbaRegex({ exact: true });\n\n/**\n * Cache for color validation results.\n * Improves performance for repeated color checks.\n */\nconst colorCache = new Map<string, boolean>();\nconst MAX_CACHE_SIZE = 500;\n\n/**\n * Checks if a string value represents a valid CSS color.\n * Supports named colors, hex, rgb, rgba, hsl, hsla, and CSS custom properties.\n * Results are cached for performance.\n *\n * @param value - The CSS value to check\n * @returns true if the value is a valid color, false otherwise\n *\n * @example\n * isColor('red') // true\n * isColor('#ff0000') // true\n * isColor('rgb(255, 0, 0)') // true\n * isColor('var(--primary-color)') // true\n * isColor('10px') // false\n */\nexport default function isColor(value: string): boolean {\n  // Check cache first\n  const cached = colorCache.get(value);\n  if (cached !== undefined) return cached;\n\n  const lowerValue = value.toLowerCase();\n\n  // Support CSS custom property (var name)\n  if (/^var\\(\\s*--[a-zA-Z0-9-_]+\\s*\\)$/.test(lowerValue)) {\n    colorCache.set(value, true);\n    return true;\n  }\n\n  const result =\n    !!CSS_COLOR_NAMES[lowerValue] ||\n    lowerValue === \"currentcolor\" ||\n    lowerValue === \"transparent\" ||\n    HEX.test(lowerValue) ||\n    HSLA.test(lowerValue) ||\n    HSL.test(lowerValue) ||\n    RGB.test(lowerValue) ||\n    RGBA.test(lowerValue);\n\n  // Cache result with size limit\n  if (colorCache.size >= MAX_CACHE_SIZE) {\n    const firstKey = colorCache.keys().next().value;\n    if (firstKey !== undefined) {\n      colorCache.delete(firstKey);\n    }\n  }\n  colorCache.set(value, result);\n\n  return result;\n}\n","// b_path:: src/internal/is-length.ts\nconst LENGTH = /^(\\+|-)?([0-9]*\\.)?[0-9]+(em|ex|ch|rem|vh|vw|vmin|vmax|px|mm|cm|in|pt|pc|%)$/i;\nconst ZERO = /^(\\+|-)?(0*\\.)?0+$/;\n\nexport default function isLength(value: string): boolean {\n  return LENGTH.test(value) || ZERO.test(value);\n}\n","// b_path:: src/internal/normalize-color.ts\nimport { hslaRegex, hslRegex, rgbaRegex, rgbRegex } from \"./color-utils\";\n\nconst FUNCTIONS = [hslaRegex(), hslRegex(), rgbRegex(), rgbaRegex()];\n\nexport default function normalizeColor(value: string): string {\n  return FUNCTIONS.reduce((acc: string, func: RegExp) => {\n    return acc.replace(func, (match: string) => {\n      // Normalize both modern (space-separated) and legacy (comma-separated) syntax\n      // Convert space-separated to comma-separated for consistent handling\n      return match\n        .replace(/\\(\\s+/g, \"(\") // Remove space after opening paren\n        .replace(/\\s+\\)/g, \")\") // Remove space before closing paren\n        .replace(/\\s*,\\s*/g, \",\") // Normalize commas (remove spaces around them)\n        .replace(/\\s*\\/\\s*/g, \"/\") // Normalize slash (remove spaces around it)\n        .replace(/\\s+/g, \",\"); // Convert remaining spaces (separators) to commas\n    });\n  }, value);\n}\n","// b_path:: src/handlers/background/background-layers.ts\n\nimport * as csstree from \"@eslint/css-tree\";\nimport type { BackgroundLayer, BackgroundResult } from \"@/core/schema\";\nimport isColor from \"@/internal/is-color\";\nimport { isPositionValueNode, isSizeValueNode } from \"@/internal/is-value-node\";\nimport { hasTopLevelCommas, splitLayers } from \"@/internal/layer-parser-utils\";\n\n// CSS default values for background properties\nexport const BACKGROUND_DEFAULTS = {\n  image: \"none\",\n  position: \"0% 0%\",\n  size: \"auto auto\",\n  repeat: \"repeat\",\n  attachment: \"scroll\",\n  origin: \"padding-box\",\n  clip: \"border-box\",\n} as const;\n\n/**\n * Detects if a background value needs advanced parsing (multi-layer backgrounds)\n */\nexport function needsAdvancedParser(value: string): boolean {\n  return hasTopLevelCommas(value);\n}\n\n/**\n * Parses a complex background value using css-tree AST parsing\n */\nexport function parseBackgroundLayers(value: string): BackgroundResult | undefined {\n  try {\n    // Split into layers\n    const layerStrings = splitLayers(value);\n    if (layerStrings.length === 0) {\n      return undefined;\n    }\n\n    // Parse each layer to extract all properties\n    const parsedLayers: Array<BackgroundLayer & { color?: string }> = [];\n    let globalColor: string | undefined;\n\n    for (const layerStr of layerStrings) {\n      const parsedLayer = parseSingleLayer(layerStr);\n\n      // Extract color from the last layer that has one\n      if (parsedLayer.color) {\n        globalColor = parsedLayer.color;\n      }\n\n      parsedLayers.push(parsedLayer);\n    }\n\n    // Now distribute properties across layers according to CSS rules\n    const layers = distributeLayerProperties(parsedLayers);\n\n    return {\n      layers,\n      color: globalColor,\n    };\n  } catch (_error) {\n    // If parsing fails, return undefined to indicate invalid input\n    return undefined;\n  }\n}\n\n/**\n * Distributes properties across layers according to CSS background rules\n */\nfunction distributeLayerProperties(\n  parsedLayers: Array<BackgroundLayer & { color?: string }>\n): BackgroundLayer[] {\n  // For CSS backgrounds, properties are NOT distributed across layers.\n  // Each layer only gets the properties that were explicitly specified for it.\n  // Unspecified properties remain undefined and get default values during reconstruction.\n\n  const result: BackgroundLayer[] = [];\n\n  // Just copy the parsed properties - no distribution needed\n  for (const layer of parsedLayers) {\n    const { color: _, ...layerProps } = layer;\n    result.push(layerProps);\n  }\n\n  // Special handling for origin/clip: if a layer specifies only one box value,\n  // it applies to both origin and clip\n  result.forEach((layer) => {\n    if (layer.origin !== undefined && layer.clip === undefined) {\n      layer.clip = layer.origin;\n    }\n  });\n\n  return result;\n}\n\n/**\n * Parses a single background layer using css-tree AST parsing\n */\nfunction parseSingleLayerWithCssTree(layerValue: string): BackgroundLayer & { color?: string } {\n  const result: BackgroundLayer & { color?: string } = {};\n\n  const ast = csstree.parse(layerValue.trim(), { context: \"value\" });\n\n  // Collect all child nodes from the Value node\n  const children: csstree.CssNode[] = [];\n  csstree.walk(ast, {\n    visit: \"Value\",\n    enter: (node: csstree.CssNode) => {\n      if (node.type === \"Value\" && node.children) {\n        node.children.forEach((child) => {\n          children.push(child);\n        });\n      }\n    },\n  });\n\n  // Process children in order, handling position/size parsing\n  processCssChildren(children, result);\n\n  return result;\n}\n\n/**\n * Processes CSS AST children sequentially to extract background properties\n *\n * This function handles the complex parsing of CSS background layer syntax,\n * including position/size combinations separated by \"/\", various keyword types,\n * and proper ordering according to CSS specifications.\n */\nfunction processCssChildren(\n  children: csstree.CssNode[],\n  result: BackgroundLayer & { color?: string }\n): void {\n  let i = 0;\n  let hasPositionSize = false;\n\n  while (i < children.length) {\n    const child = children[i];\n\n    // Skip whitespace and operators (except \"/\")\n    if (child.type === \"WhiteSpace\") {\n      i++;\n      continue;\n    }\n\n    if (child.type === \"Operator\" && (child as csstree.Operator).value !== \"/\") {\n      i++;\n      continue;\n    }\n\n    // Handle background-image (url(), none, or image functions like gradients)\n    if (child.type === \"Url\" && !result.image) {\n      result.image = `url(${(child as csstree.Url).value})`;\n      i++;\n      continue;\n    }\n\n    if (child.type === \"Function\") {\n      const funcNode = child as csstree.FunctionNode;\n      if (\n        [\n          \"linear-gradient\",\n          \"radial-gradient\",\n          \"conic-gradient\",\n          \"repeating-linear-gradient\",\n          \"repeating-radial-gradient\",\n          \"repeating-conic-gradient\",\n          \"image\",\n          \"element\",\n        ].includes(funcNode.name)\n      ) {\n        if (!result.image) {\n          result.image = csstree.generate(child);\n        }\n        i++;\n        continue;\n      }\n    }\n\n    if (\n      child.type === \"Identifier\" &&\n      (child as csstree.Identifier).name === \"none\" &&\n      !result.image\n    ) {\n      result.image = \"none\";\n      i++;\n      continue;\n    }\n\n    // Handle position and size (complex parsing needed)\n    if (\n      !hasPositionSize &&\n      ((child.type === \"Operator\" && (child as csstree.Operator).value === \"/\") ||\n        isPositionValueNode(child, [\"left\", \"center\", \"right\", \"top\", \"bottom\"]))\n    ) {\n      const positionParts: string[] = [];\n      const sizeParts: string[] = [];\n      let _hasSlash = false;\n\n      // Check if we start with \"/\"\n      if (child.type === \"Operator\" && (child as csstree.Operator).value === \"/\") {\n        _hasSlash = true;\n        i++; // skip \"/\"\n\n        // Collect size parts\n        while (i < children.length) {\n          const currentChild = children[i];\n          if (currentChild.type === \"WhiteSpace\") {\n            i++;\n            continue;\n          }\n          if (isSizeValueNode(currentChild, [\"auto\", \"cover\", \"contain\"])) {\n            sizeParts.push(csstree.generate(currentChild));\n            i++;\n          } else {\n            break;\n          }\n        }\n      } else {\n        // Collect position parts until we hit \"/\" or a non-position node\n        while (i < children.length) {\n          const currentChild = children[i];\n          if (currentChild.type === \"WhiteSpace\") {\n            i++;\n            continue;\n          }\n\n          if (\n            currentChild.type === \"Operator\" &&\n            (currentChild as csstree.Operator).value === \"/\"\n          ) {\n            _hasSlash = true;\n            i++; // skip \"/\"\n\n            // Collect size parts\n            while (i < children.length) {\n              const sizeChild = children[i];\n              if (sizeChild.type === \"WhiteSpace\") {\n                i++;\n                continue;\n              }\n              if (isSizeValueNode(sizeChild, [\"auto\", \"cover\", \"contain\"])) {\n                sizeParts.push(csstree.generate(sizeChild));\n                i++;\n              } else {\n                break;\n              }\n            }\n            break;\n          } else if (\n            isPositionValueNode(currentChild, [\"left\", \"center\", \"right\", \"top\", \"bottom\"])\n          ) {\n            positionParts.push(csstree.generate(currentChild));\n            i++;\n          } else {\n            break;\n          }\n        }\n      }\n\n      if (positionParts.length > 0) {\n        result.position = positionParts.join(\" \");\n      }\n      if (sizeParts.length > 0) {\n        result.size = sizeParts.join(\" \");\n      }\n\n      hasPositionSize = true;\n      continue;\n    }\n\n    // Handle repeat values\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if ([\"repeat\", \"repeat-x\", \"repeat-y\", \"space\", \"round\", \"no-repeat\"].includes(name)) {\n        if (!result.repeat) {\n          let repeat = name;\n          i++;\n\n          // Check for second repeat value\n          if (i < children.length && children[i].type === \"Identifier\") {\n            const nextName = (children[i] as csstree.Identifier).name;\n            if (\n              [\"repeat\", \"repeat-x\", \"repeat-y\", \"space\", \"round\", \"no-repeat\"].includes(nextName)\n            ) {\n              repeat += ` ${nextName}`;\n              i++;\n            }\n          }\n\n          result.repeat = repeat;\n        } else {\n          i++;\n        }\n        continue;\n      }\n    }\n\n    // Handle attachment\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if ([\"fixed\", \"local\", \"scroll\"].includes(name)) {\n        if (!result.attachment) {\n          result.attachment = name;\n        }\n        i++;\n        continue;\n      }\n    }\n\n    // Handle box values (origin/clip)\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if ([\"border-box\", \"padding-box\", \"content-box\"].includes(name)) {\n        if (!result.origin) {\n          result.origin = name;\n        } else if (!result.clip) {\n          result.clip = name;\n        }\n        i++;\n        continue;\n      }\n    }\n\n    // Handle colors\n    if (child.type === \"Identifier\" || child.type === \"Function\" || child.type === \"Hash\") {\n      const value = csstree.generate(child);\n      if (isColor(value)) {\n        result.color = value;\n        i++;\n        continue;\n      }\n    }\n\n    // Skip unrecognized nodes\n    i++;\n  }\n}\n\n/**\n * Parses a single background layer using css-tree AST parsing\n *\n * This function now uses css-tree for robust CSS parsing instead of\n * the previous custom tokenizer approach.\n */\nfunction parseSingleLayer(layerValue: string): BackgroundLayer & { color?: string } {\n  return parseSingleLayerWithCssTree(layerValue);\n}\n\n/**\n * Distributes property values across layers according to CSS rules\n */\nexport function distributeProperties(\n  layers: BackgroundLayer[],\n  properties: Record<string, string[]>\n): BackgroundLayer[] {\n  const result = layers.map((layer) => ({ ...layer }));\n\n  // Apply property distribution for each property type\n  Object.entries(properties).forEach(([property, values]) => {\n    const distributedValues = distributeValues(values, layers.length);\n\n    distributedValues.forEach((value, index) => {\n      if (result[index]) {\n        (result[index] as BackgroundLayer)[property as keyof BackgroundLayer] = value;\n      }\n    });\n  });\n\n  return result;\n}\n\n/**\n * Distributes values across layers using CSS repetition rules\n */\nexport function distributeValues(values: string[], layerCount: number): string[] {\n  if (values.length === 0) return [];\n\n  const result: string[] = [];\n\n  for (let i = 0; i < layerCount; i++) {\n    // CSS rule: repeat values cyclically if fewer than layers\n    result.push(values[i % values.length]);\n  }\n\n  return result;\n}\n\n/**\n * Reconstructs final CSS properties from layer objects\n */\nexport function reconstructLayers(\n  layers: BackgroundLayer[],\n  color?: string\n): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  // Collect all layer values for each property\n  const properties = {\n    \"background-image\": layers.map((l) => l.image || BACKGROUND_DEFAULTS.image),\n    \"background-position\": layers.map((l) => l.position || BACKGROUND_DEFAULTS.position),\n    \"background-size\": layers.map((l) => l.size || BACKGROUND_DEFAULTS.size),\n    \"background-repeat\": layers.map((l) => l.repeat || BACKGROUND_DEFAULTS.repeat),\n    \"background-attachment\": layers.map((l) => l.attachment || BACKGROUND_DEFAULTS.attachment),\n    \"background-origin\": layers.map((l) => l.origin || BACKGROUND_DEFAULTS.origin),\n    \"background-clip\": layers.map((l) => l.clip || BACKGROUND_DEFAULTS.clip),\n  };\n\n  // Join layer values with commas\n  Object.entries(properties).forEach(([property, values]) => {\n    result[property] = values.join(\", \");\n  });\n\n  // Add color (defaults to transparent if not specified)\n  result[\"background-color\"] = color || \"transparent\";\n\n  return result;\n}\n","// b_path:: src/handlers/background/expand.ts\n\n// NOTE: This handler contains complex multi-layer parsing logic that is a candidate\n// for future refactoring. The position/size parsing could be simplified with better\n// abstractions for coordinate and dimension handling.\n\nimport { cssUrlRegex } from \"@/internal/color-utils\";\nimport isColor from \"@/internal/is-color\";\nimport isLength from \"@/internal/is-length\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { parseBackgroundLayers, reconstructLayers } from \"./background-layers\";\n\nconst ATTACHMENT = /^(fixed|local|scroll)$/;\nconst BOX = /^(border-box|padding-box|content-box)$/;\nconst IMAGE = new RegExp(`^(none|${cssUrlRegex().source})$`, \"i\");\nconst REPEAT_SINGLE = /^(repeat-x|repeat-y)$/i;\nconst REPEAT_DOUBLE = /^(repeat|space|round|no-repeat)$/i;\nconst POSITION_HORIZONTAL = /^(left|center|right)$/;\nconst POSITION_VERTICAL = /^(top|center|bottom)$/;\nconst SIZE_SINGLE = /^(cover|contain)$/;\nconst KEYWORD = /^(inherit|initial)$/i;\n\ninterface BackgroundResult {\n  attachment?: string;\n  clip?: string;\n  image?: string;\n  repeat?: string;\n  color?: string;\n  position?: string;\n  size?: string;\n}\n\nconst normalizeUrl = (value: string): string =>\n  value.replace(cssUrlRegex(), (match: string) =>\n    match.replace(/^url\\(\\s+/, \"url(\").replace(/\\s+\\)$/, \")\")\n  );\n\nfunction parseBackgroundValue(value: string): Record<string, string> | undefined {\n  // Use advanced parsing for all cases - it handles both simple and complex syntax better\n  const layeredResult = parseBackgroundLayers(value);\n  if (layeredResult) {\n    return reconstructLayers(layeredResult.layers, layeredResult.color);\n  }\n\n  // Fallback to simple parsing if advanced parsing fails\n  return simpleBackgroundParser(value);\n}\n\nfunction simpleBackgroundParser(value: string): Record<string, string> | undefined {\n  // Use existing single-layer parsing logic as fallback\n  const result: BackgroundResult = {};\n  const values = normalizeUrl(normalizeColor(value))\n    .replace(/\\(.*\\/.*\\)|(\\/)+/g, (match: string, group1: string) => (!group1 ? match : \" / \"))\n    .split(/\\s+/);\n\n  const first = values[0];\n\n  if (values.length === 1 && KEYWORD.test(first)) {\n    return {\n      \"background-attachment\": first,\n      \"background-clip\": first,\n      \"background-image\": first,\n      \"background-repeat\": first,\n      \"background-color\": first,\n      \"background-position\": first,\n      \"background-size\": first,\n    };\n  }\n\n  for (let i = 0; i < values.length; i++) {\n    let v = values[i];\n\n    if (ATTACHMENT.test(v)) {\n      if (result.attachment) return;\n      result.attachment = v;\n    } else if (BOX.test(v)) {\n      if (result.clip) return;\n      result.clip = v;\n    } else if (IMAGE.test(v)) {\n      if (result.image) return;\n      result.image = v;\n    } else if (REPEAT_SINGLE.test(v)) {\n      if (result.repeat) return;\n      result.repeat = v;\n    } else if (REPEAT_DOUBLE.test(v)) {\n      if (result.repeat) return;\n\n      const n = values[i + 1];\n\n      if (n && REPEAT_DOUBLE.test(n)) {\n        v += ` ${n}`;\n        i++;\n      }\n\n      result.repeat = v;\n    } else if (isColor(v)) {\n      if (result.color) return;\n      result.color = v;\n    } else if (POSITION_HORIZONTAL.test(v) || POSITION_VERTICAL.test(v) || isLength(v)) {\n      if (result.position) return;\n\n      const n = values[i + 1];\n      const isHorizontal = POSITION_HORIZONTAL.test(v) || isLength(v);\n      const isVertical = n && (POSITION_VERTICAL.test(n) || isLength(n));\n\n      if (isHorizontal && isVertical) {\n        result.position = `${v} ${n}`;\n        i++;\n      } else {\n        result.position = v;\n      }\n\n      const nextV = values[i + 1];\n\n      if (nextV === \"/\") {\n        i += 2;\n        const sizeV = values[i];\n\n        if (SIZE_SINGLE.test(sizeV)) {\n          result.size = sizeV;\n        } else if (sizeV === \"auto\" || isLength(sizeV)) {\n          let sizeValue = sizeV;\n          const sizeN = values[i + 1];\n\n          if (sizeN === \"auto\" || isLength(sizeN)) {\n            sizeValue += ` ${sizeN}`;\n            i++;\n          }\n\n          result.size = sizeValue;\n        } else {\n          return;\n        }\n      }\n    } else {\n      return;\n    }\n  }\n\n  const finalResult: Record<string, string> = {};\n  for (const key in result) {\n    if (result[key as keyof BackgroundResult]) {\n      finalResult[`background-${key}`] = result[key as keyof BackgroundResult] as string;\n    }\n  }\n  return finalResult;\n}\n\n/**\n * Property handler for the 'background' CSS shorthand property\n *\n * Expands background into background-image, background-position, background-size,\n * background-repeat, background-attachment, background-origin, background-clip,\n * and background-color.\n *\n * @example\n * ```typescript\n * backgroundHandler.expand('red');\n * backgroundHandler.expand('url(bg.png) center / cover no-repeat');\n * ```\n */\nexport const backgroundHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"background\",\n    longhands: [\n      \"background-image\",\n      \"background-position\",\n      \"background-size\",\n      \"background-repeat\",\n      \"background-attachment\",\n      \"background-clip\",\n      \"background-color\",\n    ],\n    category: \"visual\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    return parseBackgroundValue(value);\n  },\n\n  validate: (value: string): boolean => {\n    return backgroundHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function background(value: string): Record<string, string> | undefined {\n  return backgroundHandler.expand(value);\n}\n","// b_path:: src/handlers/border/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Default values for border properties per CSS specification.\n */\nconst BORDER_DEFAULTS = {\n  width: \"medium\",\n  style: \"none\",\n  color: \"currentcolor\",\n} as const;\n\n/**\n * Collapse handler for the border shorthand property.\n *\n * Reconstructs `border` from its 12 longhand properties (4 sides × 3 properties).\n *\n * Rules:\n * - Only collapses if all 4 sides have the same values for each property\n * - Default values can be omitted\n * - Values can appear in any order: width, style, color\n * - If not all sides match, keeps longhands unchanged\n */\nexport const borderCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"border\",\n    longhands: [\n      \"border-top-width\",\n      \"border-right-width\",\n      \"border-bottom-width\",\n      \"border-left-width\",\n      \"border-top-style\",\n      \"border-right-style\",\n      \"border-bottom-style\",\n      \"border-left-style\",\n      \"border-top-color\",\n      \"border-right-color\",\n      \"border-bottom-color\",\n      \"border-left-color\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    // Extract all border properties\n    const topWidth = properties[\"border-top-width\"];\n    const rightWidth = properties[\"border-right-width\"];\n    const bottomWidth = properties[\"border-bottom-width\"];\n    const leftWidth = properties[\"border-left-width\"];\n\n    const topStyle = properties[\"border-top-style\"];\n    const rightStyle = properties[\"border-right-style\"];\n    const bottomStyle = properties[\"border-bottom-style\"];\n    const leftStyle = properties[\"border-left-style\"];\n\n    const topColor = properties[\"border-top-color\"];\n    const rightColor = properties[\"border-right-color\"];\n    const bottomColor = properties[\"border-bottom-color\"];\n    const leftColor = properties[\"border-left-color\"];\n\n    // Need at least one property\n    if (\n      !topWidth &&\n      !rightWidth &&\n      !bottomWidth &&\n      !leftWidth &&\n      !topStyle &&\n      !rightStyle &&\n      !bottomStyle &&\n      !leftStyle &&\n      !topColor &&\n      !rightColor &&\n      !bottomColor &&\n      !leftColor\n    ) {\n      return undefined;\n    }\n\n    // Check if all sides match for each property\n    const widthsMatch =\n      topWidth === rightWidth && topWidth === bottomWidth && topWidth === leftWidth;\n    const stylesMatch =\n      topStyle === rightStyle && topStyle === bottomStyle && topStyle === leftStyle;\n    const colorsMatch =\n      topColor === rightColor && topColor === bottomColor && topColor === leftColor;\n\n    // Only collapse if all properties match across all sides\n    if (!widthsMatch || !stylesMatch || !colorsMatch) {\n      return undefined;\n    }\n\n    // Build shorthand value\n    const parts: string[] = [];\n\n    // Add width if not default\n    if (topWidth && topWidth !== BORDER_DEFAULTS.width) {\n      parts.push(topWidth);\n    }\n\n    // Add style if not default\n    if (topStyle && topStyle !== BORDER_DEFAULTS.style) {\n      parts.push(topStyle);\n    }\n\n    // Add color if not default\n    if (topColor && topColor !== BORDER_DEFAULTS.color) {\n      parts.push(topColor);\n    }\n\n    // If all are defaults, return undefined\n    if (parts.length === 0) {\n      return undefined;\n    }\n\n    return parts.join(\" \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Need at least one border property\n    return !!(\n      properties[\"border-top-width\"] ||\n      properties[\"border-right-width\"] ||\n      properties[\"border-bottom-width\"] ||\n      properties[\"border-left-width\"] ||\n      properties[\"border-top-style\"] ||\n      properties[\"border-right-style\"] ||\n      properties[\"border-bottom-style\"] ||\n      properties[\"border-left-style\"] ||\n      properties[\"border-top-color\"] ||\n      properties[\"border-right-color\"] ||\n      properties[\"border-bottom-color\"] ||\n      properties[\"border-left-color\"]\n    );\n  },\n});\n","// b_path:: src/internal/directional.ts\n\n/**\n * Cache for directional property expansion results.\n * Improves performance for repeated calls with same values.\n */\nconst directionalCache = new Map<string, Record<string, string>>();\nconst MAX_CACHE_SIZE = 1000;\n\n/**\n * Expands directional values (top, right, bottom, left) from CSS shorthand notation.\n * Supports 1-4 value syntax and caches results for performance.\n *\n * @param value - CSS value string with 1-4 space-separated values\n * @returns Object with top, right, bottom, left properties, or undefined if invalid\n *\n * @example\n * directional('10px') // { top: '10px', right: '10px', bottom: '10px', left: '10px' }\n * directional('10px 20px') // { top: '10px', right: '20px', bottom: '10px', left: '20px' }\n * directional('10px 20px 30px') // { top: '10px', right: '20px', bottom: '30px', left: '20px' }\n * directional('10px 20px 30px 40px') // { top: '10px', right: '20px', bottom: '30px', left: '40px' }\n */\nexport default function directional(value: string): Record<string, string> | undefined {\n  // Check cache first\n  const cached = directionalCache.get(value);\n  if (cached) return cached;\n\n  const values = value.split(/\\s+/);\n\n  if (values.length === 1) values.splice(0, 1, ...Array.from({ length: 4 }, () => values[0]));\n  else if (values.length === 2) values.push(...values);\n  else if (values.length === 3) values.push(values[1]);\n  else if (values.length > 4) return;\n\n  const result = [\"top\", \"right\", \"bottom\", \"left\"].reduce(\n    (acc: Record<string, string>, direction: string, i: number) => {\n      acc[direction] = values[i];\n      return acc;\n    },\n    {}\n  );\n\n  // Cache result with size limit\n  if (directionalCache.size >= MAX_CACHE_SIZE) {\n    // Remove oldest entry (first key)\n    const firstKey = directionalCache.keys().next().value;\n    if (firstKey !== undefined) {\n      directionalCache.delete(firstKey);\n    }\n  }\n  directionalCache.set(value, result);\n\n  return result;\n}\n","// b_path:: src/handlers/border/expand.ts\n\n// NOTE: This handler contains complex hierarchical logic with sub-handlers that is a\n// candidate for future refactoring. The border property expands to multiple directions\n// (top/right/bottom/left) and properties (width/style/color), plus a box-sizing edge case.\n\nimport directional from \"@/internal/directional\";\nimport isColor from \"@/internal/is-color\";\nimport isLength from \"@/internal/is-length\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\nconst WIDTH = /^(thin|medium|thick)$/;\nconst STYLE = /^(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/i;\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\n\ninterface BorderProperties {\n  width?: string;\n  style?: string;\n  color?: string;\n}\n\ninterface BorderResult extends BorderProperties {\n  boxSizing?: string;\n}\n\ntype BorderFunction = {\n  (value: string): Record<string, string> | undefined;\n  width: (value: string) => Record<string, string> | undefined;\n  style: (value: string) => Record<string, string> | undefined;\n  color: (value: string) => Record<string, string> | undefined;\n  top: (value: string) => Record<string, string> | undefined;\n  right: (value: string) => Record<string, string> | undefined;\n  bottom: (value: string) => Record<string, string> | undefined;\n  left: (value: string) => Record<string, string> | undefined;\n};\n\nconst suffix =\n  (suffix: string) =>\n  (value: string): Record<string, string> | undefined => {\n    const longhand = directional(value);\n\n    if (!longhand) return;\n\n    const result: Record<string, string> = {};\n    for (const key in longhand) {\n      result[`border-${key}-${suffix}`] = longhand[key];\n    }\n    return sortProperties(result);\n  };\n\nconst direction =\n  (direction: string) =>\n  (value: string): Record<string, string> | undefined => {\n    const longhand = all(value);\n\n    if (!longhand) return;\n\n    const filtered: Record<string, string> = {};\n    for (const key in longhand) {\n      if (key === \"boxSizing\" && longhand[key]) {\n        filtered[key] = longhand[key];\n      } else if (longhand[key as keyof BorderProperties]) {\n        filtered[`border-${direction}-${key}`] = longhand[key as keyof BorderProperties] as string;\n      }\n    }\n    return sortProperties(filtered);\n  };\n\nconst all = (value: string): BorderResult | undefined => {\n  const values = normalizeColor(value).split(/\\s+/);\n  const first = values[0];\n\n  // Handle special case: border values with box-sizing\n  if (values.length === 4) {\n    const [width, style, color, boxSizing] = values;\n\n    // Check if first 3 values are valid border values and 4th is valid box-sizing\n    if (\n      (WIDTH.test(width) || isLength(width)) &&\n      STYLE.test(style) &&\n      isColor(color) &&\n      (boxSizing === \"border-box\" || boxSizing === \"content-box\")\n    ) {\n      return {\n        width,\n        style,\n        color,\n        boxSizing,\n      };\n    }\n  }\n\n  if (values.length > 3) return;\n  if (values.length === 1 && KEYWORD.test(first)) {\n    return {\n      width: first,\n      style: first,\n      color: first,\n    };\n  }\n\n  const result: BorderProperties = {};\n  for (let i = 0; i < values.length; i++) {\n    const v = values[i];\n\n    if (WIDTH.test(v) || isLength(v)) {\n      if (result.width) return;\n      result.width = v;\n    } else if (STYLE.test(v)) {\n      if (result.style) return;\n      result.style = v;\n    } else if (isColor(v)) {\n      if (result.color) return;\n      result.color = v;\n    } else {\n      return;\n    }\n  }\n\n  return result;\n};\n\nfunction parseBorderValue(value: string): Record<string, string> | undefined {\n  const longhand = all(value);\n\n  if (!longhand) return;\n\n  const result: Record<string, string> = {};\n\n  // Handle box-sizing separately\n  if (longhand.boxSizing) {\n    result[\"box-sizing\"] = longhand.boxSizing;\n  }\n\n  // Use defaults for missing properties\n  // Per CSS spec, the default values for border shorthand are:\n  //   width: 'medium', style: 'none', color: 'currentcolor'\n  // See: https://drafts.csswg.org/css-backgrounds-3/#border-shorthand\n  const width = longhand.width || \"medium\";\n  const style = longhand.style || \"none\";\n  const color = longhand.color || \"currentcolor\";\n\n  // Expand all three border properties\n  const widthProps = suffix(\"width\")(width);\n  const styleProps = suffix(\"style\")(style);\n  const colorProps = suffix(\"color\")(color);\n\n  if (widthProps) Object.assign(result, widthProps);\n  if (styleProps) Object.assign(result, styleProps);\n  if (colorProps) Object.assign(result, colorProps);\n\n  return sortProperties(result);\n}\n\nexport const borderHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"border\",\n    longhands: [\n      \"border-top-width\",\n      \"border-right-width\",\n      \"border-bottom-width\",\n      \"border-left-width\",\n      \"border-top-style\",\n      \"border-right-style\",\n      \"border-bottom-style\",\n      \"border-left-style\",\n      \"border-top-color\",\n      \"border-right-color\",\n      \"border-bottom-color\",\n      \"border-left-color\",\n    ],\n    defaults: {\n      \"border-top-width\": \"medium\",\n      \"border-right-width\": \"medium\",\n      \"border-bottom-width\": \"medium\",\n      \"border-left-width\": \"medium\",\n      \"border-top-style\": \"none\",\n      \"border-right-style\": \"none\",\n      \"border-bottom-style\": \"none\",\n      \"border-left-style\": \"none\",\n      \"border-top-color\": \"currentcolor\",\n      \"border-right-color\": \"currentcolor\",\n      \"border-bottom-color\": \"currentcolor\",\n      \"border-left-color\": \"currentcolor\",\n    },\n    category: \"box-model\",\n  },\n\n  expand: (value: string) => parseBorderValue(value),\n\n  validate: (value: string) => borderHandler.expand(value) !== undefined,\n});\n\nconst border: BorderFunction = (value: string): Record<string, string> | undefined => {\n  return borderHandler.expand(value);\n};\n\nborder.width = suffix(\"width\");\nborder.style = suffix(\"style\");\nborder.color = suffix(\"color\");\nborder.top = direction(\"top\");\nborder.right = direction(\"right\");\nborder.bottom = direction(\"bottom\");\nborder.left = direction(\"left\");\n\nexport default border;\n","// b_path:: src/handlers/border-radius/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the border-radius shorthand property.\n *\n * Reconstructs `border-radius` from individual corner radius properties.\n *\n * Rules:\n * - All four corner properties must be present\n * - Simplify to 1-4 values if possible\n * - Handle horizontal/vertical radii with slash syntax if needed\n */\nexport const borderRadiusCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"border-radius\",\n    longhands: [\n      \"border-top-left-radius\",\n      \"border-top-right-radius\",\n      \"border-bottom-right-radius\",\n      \"border-bottom-left-radius\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const tl = properties[\"border-top-left-radius\"];\n    const tr = properties[\"border-top-right-radius\"];\n    const br = properties[\"border-bottom-right-radius\"];\n    const bl = properties[\"border-bottom-left-radius\"];\n\n    // All four must be present\n    if (!tl || !tr || !br || !bl) return undefined;\n\n    // Parse each corner value (could be \"10px\" or \"10px 20px\")\n    const parseCorner = (value: string): [string, string] => {\n      const parts = value.trim().split(/\\s+/);\n      return parts.length === 2 ? [parts[0], parts[1]] : [parts[0], parts[0]];\n    };\n\n    const [tlH, tlV] = parseCorner(tl);\n    const [trH, trV] = parseCorner(tr);\n    const [brH, brV] = parseCorner(br);\n    const [blH, blV] = parseCorner(bl);\n\n    const horizontal = [tlH, trH, brH, blH];\n    const vertical = [tlV, trV, brV, blV];\n\n    // Check if horizontal and vertical are the same\n    const needsSlash = !horizontal.every((h, i) => h === vertical[i]);\n\n    // Simplify horizontal values\n    const simplifyFourValues = (values: string[]): string => {\n      if (values[0] === values[1] && values[1] === values[2] && values[2] === values[3]) {\n        return values[0]; // All same\n      }\n      if (values[0] === values[2] && values[1] === values[3]) {\n        return `${values[0]} ${values[1]}`; // Opposite pairs same\n      }\n      if (values[1] === values[3]) {\n        return `${values[0]} ${values[1]} ${values[2]}`; // Left/right same\n      }\n      return values.join(\" \"); // All different\n    };\n\n    if (needsSlash) {\n      const hSimplified = simplifyFourValues(horizontal);\n      const vSimplified = simplifyFourValues(vertical);\n      return `${hSimplified} / ${vSimplified}`;\n    }\n\n    return simplifyFourValues(horizontal);\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(\n      properties[\"border-top-left-radius\"] &&\n      properties[\"border-top-right-radius\"] &&\n      properties[\"border-bottom-right-radius\"] &&\n      properties[\"border-bottom-left-radius\"]\n    );\n  },\n});\n","// b_path:: src/handlers/border-radius/expand.ts\n\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Expand 1-4 values following CSS box model (top-left, top-right, bottom-right, bottom-left)\n */\nconst expandFourValues = (values: string[]): string[] => {\n  if (values.length === 1) return [values[0], values[0], values[0], values[0]];\n  if (values.length === 2) return [values[0], values[1], values[0], values[1]];\n  if (values.length === 3) return [values[0], values[1], values[2], values[1]];\n  if (values.length === 4) return values;\n  return []; // Invalid\n};\n\n/**\n * Property handler for the 'border-radius' CSS shorthand property\n *\n * Expands border-radius into individual corner radius properties.\n * Supports both uniform radii and horizontal/vertical radii with slash syntax.\n *\n * @example\n * ```typescript\n * borderRadiusHandler.expand('10px'); // All corners: 10px\n * borderRadiusHandler.expand('10px 20px'); // TL/BR: 10px, TR/BL: 20px\n * borderRadiusHandler.expand('10px / 20px'); // Horizontal: 10px, Vertical: 20px\n * ```\n */\nexport const borderRadiusHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"border-radius\",\n    longhands: [\n      \"border-top-left-radius\",\n      \"border-top-right-radius\",\n      \"border-bottom-right-radius\",\n      \"border-bottom-left-radius\",\n    ],\n    category: \"visual\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Check if there's a slash separator for horizontal/vertical radii\n    const slashIndex = value.indexOf(\"/\");\n\n    if (slashIndex !== -1) {\n      // Split horizontal and vertical radii\n      const horizontalPart = value.slice(0, slashIndex).trim();\n      const verticalPart = value.slice(slashIndex + 1).trim();\n\n      const horizontalValues = horizontalPart.split(/\\s+/).filter((v) => v);\n      const verticalValues = verticalPart.split(/\\s+/).filter((v) => v);\n\n      // Expand both sets to 4 values\n      const horizontal = expandFourValues(horizontalValues);\n      const vertical = expandFourValues(verticalValues);\n\n      if (horizontal.length === 0 || vertical.length === 0) return;\n\n      // Combine into corner-specific values\n      const corners = [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"];\n      const result: Record<string, string> = {};\n\n      for (let i = 0; i < 4; i++) {\n        result[`border-${corners[i]}-radius`] = `${horizontal[i]} ${vertical[i]}`;\n      }\n\n      return result;\n    }\n\n    // No slash - simple case with uniform horizontal and vertical radii\n    const values = value.split(/\\s+/).filter((v) => v);\n    const expanded = expandFourValues(values);\n\n    if (expanded.length === 0) return;\n\n    const corners = [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"];\n    const result: Record<string, string> = {};\n\n    for (let i = 0; i < 4; i++) {\n      result[`border-${corners[i]}-radius`] = expanded[i];\n    }\n\n    return result;\n  },\n\n  validate: (value: string): boolean => {\n    return borderRadiusHandler.expand(value) !== undefined;\n  },\n});\n\nexport default (value: string): Record<string, string> | undefined => {\n  return borderRadiusHandler.expand(value);\n};\n","// b_path:: src/handlers/column-rule/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the column-rule shorthand property.\n *\n * Reconstructs `column-rule` from `column-rule-width`, `column-rule-style`, and `column-rule-color`.\n *\n * Rules:\n * - All three must be present\n * - Can omit defaults when appropriate\n * - Order: width style color\n */\nexport const columnRuleCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"column-rule\",\n    longhands: [\"column-rule-width\", \"column-rule-style\", \"column-rule-color\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const width = properties[\"column-rule-width\"];\n    const style = properties[\"column-rule-style\"];\n    const color = properties[\"column-rule-color\"];\n\n    // All three must be present\n    if (!width || !style || !color) return undefined;\n\n    const parts: string[] = [];\n\n    // Add non-default values\n    if (width !== \"medium\") parts.push(width);\n    if (style !== \"none\") parts.push(style);\n    if (color.toLowerCase() !== \"currentcolor\") parts.push(color);\n\n    // If all were defaults, we need at least one - use style\n    if (parts.length === 0) return style;\n\n    return parts.join(\" \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(\n      properties[\"column-rule-width\"] &&\n      properties[\"column-rule-style\"] &&\n      properties[\"column-rule-color\"]\n    );\n  },\n});\n","// b_path:: src/handlers/column-rule/expand.ts\n\nimport isColor from \"@/internal/is-color\";\nimport isLength from \"@/internal/is-length\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\nconst WIDTH = /^(thin|medium|thick)$/;\nconst STYLE = /^(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/i;\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\n\n/**\n * Property handler for the 'column-rule' CSS shorthand property\n *\n * Expands column-rule into column-rule-width, column-rule-style, and column-rule-color.\n *\n * @example\n * ```typescript\n * columnRuleHandler.expand('medium'); // { 'column-rule-width': 'medium', 'column-rule-style': 'none', 'column-rule-color': 'currentcolor' }\n * columnRuleHandler.expand('3px solid red'); // { 'column-rule-width': '3px', 'column-rule-style': 'solid', 'column-rule-color': 'red' }\n * columnRuleHandler.expand('dotted blue'); // { 'column-rule-width': 'medium', 'column-rule-style': 'dotted', 'column-rule-color': 'blue' }\n * ```\n */\nexport const columnRuleHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"column-rule\",\n    longhands: [\"column-rule-width\", \"column-rule-style\", \"column-rule-color\"],\n    defaults: {\n      \"column-rule-width\": \"medium\",\n      \"column-rule-style\": \"none\",\n      \"column-rule-color\": \"currentcolor\",\n    },\n    category: \"visual\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    const values = normalizeColor(value).split(/\\s+/);\n\n    if (values.length > 3) return;\n    if (values.length === 1 && KEYWORD.test(values[0])) {\n      return sortProperties({\n        \"column-rule-width\": values[0],\n        \"column-rule-style\": values[0],\n        \"column-rule-color\": values[0],\n      });\n    }\n\n    const parsed: { width?: string; style?: string; color?: string } = {};\n    for (let i = 0; i < values.length; i++) {\n      const v = values[i];\n\n      if (isLength(v) || WIDTH.test(v)) {\n        if (parsed.width) return;\n        parsed.width = v;\n      } else if (STYLE.test(v)) {\n        if (parsed.style) return;\n        parsed.style = v;\n      } else if (isColor(v)) {\n        if (parsed.color) return;\n        parsed.color = v;\n      } else {\n        return;\n      }\n    }\n\n    // Use defaults for missing properties\n    // Per CSS spec, the default values for column-rule shorthand are:\n    //   width: 'medium', style: 'none', color: 'currentcolor'\n    // See: https://drafts.csswg.org/css-multicol-1/#propdef-column-rule\n    return sortProperties({\n      \"column-rule-width\": parsed.width || \"medium\",\n      \"column-rule-style\": parsed.style || \"none\",\n      \"column-rule-color\": parsed.color || \"currentcolor\",\n    });\n  },\n\n  validate: (value: string): boolean => {\n    return columnRuleHandler.expand(value) !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default function columnRule(value: string): Record<string, string> | undefined {\n  return columnRuleHandler.expand(value);\n}\n","// b_path:: src/handlers/columns/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the columns shorthand property.\n *\n * Reconstructs `columns` from `column-width` and `column-count`.\n *\n * Rules:\n * - If both are auto: return 'auto'\n * - If one is auto: return the non-auto value\n * - If both are set: return 'width count'\n * - At least one must be present\n */\nexport const columnsCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"columns\",\n    longhands: [\"column-width\", \"column-count\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const width = properties[\"column-width\"];\n    const count = properties[\"column-count\"];\n\n    // At least one must be present\n    if (!width && !count) return undefined;\n\n    // Both present\n    if (width && count) {\n      // Both auto\n      if (width === \"auto\" && count === \"auto\") return \"auto\";\n      // One is auto\n      if (width === \"auto\") return count;\n      if (count === \"auto\") return width;\n      // Both specific values\n      return `${width} ${count}`;\n    }\n\n    // Only one present\n    return width || count;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"column-width\"] || properties[\"column-count\"]);\n  },\n});\n","// b_path:: src/handlers/columns/expand.ts\n\nimport isLength from \"@/internal/is-length\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\n/**\n * Property handler for the 'columns' CSS shorthand property\n *\n * Expands columns into column-width and column-count.\n *\n * @example\n * ```typescript\n * columnsHandler.expand('auto'); // { 'column-width': 'auto', 'column-count': 'auto' }\n * columnsHandler.expand('12em'); // { 'column-width': '12em', 'column-count': 'auto' }\n * columnsHandler.expand('auto 12'); // { 'column-width': 'auto', 'column-count': '12' }\n * columnsHandler.expand('12em 5'); // { 'column-width': '12em', 'column-count': '5' }\n * ```\n */\nexport const columnsHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"columns\",\n    longhands: [\"column-width\", \"column-count\"],\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return sortProperties({\n        \"column-width\": value,\n        \"column-count\": value,\n      });\n    }\n\n    // Split values on whitespace\n    const values = value.trim().split(/\\s+/);\n\n    // Validate value count - max 2 values\n    if (values.length > 2) {\n      return undefined;\n    }\n\n    // Regex patterns for type detection\n    const INTEGER = /^[0-9]+$/;\n    const KEYWORD = /^(auto)$/i;\n\n    const result: Record<string, string> = {};\n\n    // Separate specific values from auto values\n    const specificValues: Array<{ value: string; type: \"width\" | \"count\" }> = [];\n    const autoValues: string[] = [];\n\n    for (const val of values) {\n      if (KEYWORD.test(val)) {\n        autoValues.push(val);\n      } else if (isLength(val)) {\n        specificValues.push({ value: val, type: \"width\" });\n      } else if (INTEGER.test(val)) {\n        specificValues.push({ value: val, type: \"count\" });\n      } else {\n        return undefined; // Invalid value\n      }\n    }\n\n    // Check for conflicts in specific values\n    if (\n      specificValues.filter((v) => v.type === \"width\").length > 1 ||\n      specificValues.filter((v) => v.type === \"count\").length > 1\n    ) {\n      return undefined; // Multiple values for same property\n    }\n\n    // Assign specific values first\n    for (const { value, type } of specificValues) {\n      result[`column-${type}`] = value;\n    }\n\n    // Assign auto values to remaining properties\n    for (const autoValue of autoValues) {\n      if (!result[\"column-width\"]) {\n        result[\"column-width\"] = autoValue;\n      } else if (!result[\"column-count\"]) {\n        result[\"column-count\"] = autoValue;\n      } else {\n        return undefined; // No available property for auto\n      }\n    }\n\n    return sortProperties(result);\n  },\n\n  validate: (value: string): boolean => {\n    return columnsHandler.expand(value) !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default (value: string): Record<string, string> | undefined => {\n  return columnsHandler.expand(value);\n};\n","// b_path:: src/handlers/contain-intrinsic-size/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the contain-intrinsic-size shorthand property.\n *\n * Reconstructs `contain-intrinsic-size` from `contain-intrinsic-width` and `contain-intrinsic-height`.\n *\n * Rules:\n * - If both values are the same: use single value\n * - If values differ: use two values (width height)\n * - Both must be present\n */\nexport const containIntrinsicSizeCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"contain-intrinsic-size\",\n    longhands: [\"contain-intrinsic-width\", \"contain-intrinsic-height\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const width = properties[\"contain-intrinsic-width\"];\n    const height = properties[\"contain-intrinsic-height\"];\n\n    // Both must be present\n    if (!width || !height) return undefined;\n\n    // Same value - use single value syntax\n    if (width === height) return width;\n\n    // Different values - use two value syntax\n    return `${width} ${height}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"contain-intrinsic-width\"] && properties[\"contain-intrinsic-height\"]);\n  },\n});\n","// b_path:: src/handlers/contain-intrinsic-size/expand.ts\n\nimport isLength from \"@/internal/is-length\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'contain-intrinsic-size' CSS shorthand property\n *\n * Expands contain-intrinsic-size into contain-intrinsic-width and contain-intrinsic-height.\n *\n * @example\n * ```typescript\n * containIntrinsicSizeHandler.expand('auto 100px'); // { 'contain-intrinsic-width': 'auto 100px', 'contain-intrinsic-height': 'auto 100px' }\n * containIntrinsicSizeHandler.expand('100px auto 200px'); // { 'contain-intrinsic-width': '100px', 'contain-intrinsic-height': 'auto 200px' }\n * containIntrinsicSizeHandler.expand('none'); // { 'contain-intrinsic-width': 'none', 'contain-intrinsic-height': 'none' }\n * ```\n */\nexport const containIntrinsicSizeHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"contain-intrinsic-size\",\n    longhands: [\"contain-intrinsic-width\", \"contain-intrinsic-height\"],\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"contain-intrinsic-width\": value,\n        \"contain-intrinsic-height\": value,\n      };\n    }\n\n    // Split values on whitespace\n    const tokens = value.trim().split(/\\s+/);\n\n    // Validate token count - max 4 tokens (for two auto pairs)\n    if (tokens.length > 4 || tokens.length === 0) {\n      return undefined;\n    }\n\n    const result: Record<string, string> = {};\n\n    // Parse tokens into width and height values\n    let i = 0;\n    const parseValue = (): string | undefined => {\n      if (i >= tokens.length) return undefined;\n\n      const token = tokens[i++];\n      if (token.toLowerCase() === \"auto\") {\n        if (i >= tokens.length) return undefined; // auto must be followed by something\n        const nextToken = tokens[i++];\n        if (nextToken.toLowerCase() === \"none\") {\n          return \"auto none\";\n        } else if (isLength(nextToken)) {\n          return `auto ${nextToken}`;\n        } else {\n          return undefined; // invalid after auto\n        }\n      } else if (token.toLowerCase() === \"none\") {\n        return \"none\";\n      } else if (isLength(token)) {\n        return token;\n      } else {\n        return undefined; // invalid token\n      }\n    };\n\n    // Parse width value\n    const widthValue = parseValue();\n    if (widthValue === undefined) return undefined;\n\n    // Parse height value (if present)\n    const heightValue = parseValue();\n\n    // If only one value provided, apply to both\n    if (heightValue === undefined) {\n      result[\"contain-intrinsic-width\"] = widthValue;\n      result[\"contain-intrinsic-height\"] = widthValue;\n    } else {\n      // Two values provided\n      result[\"contain-intrinsic-width\"] = widthValue;\n      result[\"contain-intrinsic-height\"] = heightValue;\n    }\n\n    // Ensure no extra tokens\n    if (i !== tokens.length) return undefined;\n\n    return result;\n  },\n\n  validate: (value: string): boolean => {\n    return containIntrinsicSizeHandler.expand(value) !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default (value: string): Record<string, string> | undefined => {\n  return containIntrinsicSizeHandler.expand(value);\n};\n","// b_path:: src/handlers/flex/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the flex shorthand property.\n *\n * Reconstructs `flex` from `flex-grow`, `flex-shrink`, and `flex-basis`.\n *\n * Rules:\n * - Special keywords: `none`, `auto`, `initial`\n * - Single number: grow (when shrink=1, basis=0%)\n * - Two numbers: grow shrink (when basis=0%)\n * - Number + basis: grow basis (when shrink=1)\n * - Three values: grow shrink basis\n */\nexport const flexCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"flex\",\n    longhands: [\"flex-grow\", \"flex-shrink\", \"flex-basis\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const grow = properties[\"flex-grow\"];\n    const shrink = properties[\"flex-shrink\"];\n    const basis = properties[\"flex-basis\"];\n\n    // All three must be present\n    if (!grow || !shrink || !basis) return undefined;\n\n    // Handle special keyword combinations\n    // none: 0 0 auto\n    if (grow === \"0\" && shrink === \"0\" && basis === \"auto\") {\n      return \"none\";\n    }\n\n    // auto: 1 1 auto\n    if (grow === \"1\" && shrink === \"1\" && basis === \"auto\") {\n      return \"auto\";\n    }\n\n    // initial: 0 1 auto\n    if (grow === \"0\" && shrink === \"1\" && basis === \"auto\") {\n      return \"initial\";\n    }\n\n    // Global keywords - all must match\n    if (grow === shrink && shrink === basis) {\n      if (/^(inherit|unset|revert)$/i.test(grow)) {\n        return grow;\n      }\n    }\n\n    // Single number form: grow (when shrink=1, basis=0%)\n    if (shrink === \"1\" && basis === \"0%\") {\n      return grow;\n    }\n\n    // Two number form: grow shrink (when basis=0%)\n    if (basis === \"0%\") {\n      return `${grow} ${shrink}`;\n    }\n\n    // Number + basis form: grow basis (when shrink=1)\n    if (shrink === \"1\") {\n      return `${grow} ${basis}`;\n    }\n\n    // Three value form: grow shrink basis\n    return `${grow} ${shrink} ${basis}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"flex-grow\"] && properties[\"flex-shrink\"] && properties[\"flex-basis\"]);\n  },\n});\n","// b_path:: src/handlers/flex/expand.ts\n\nimport isLength from \"@/internal/is-length\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'flex' CSS shorthand property\n *\n * Expands flex into flex-grow, flex-shrink, and flex-basis.\n *\n * @example\n * ```typescript\n * flexHandler.expand('1'); // { 'flex-grow': '1', 'flex-shrink': '1', 'flex-basis': '0%' }\n * flexHandler.expand('auto'); // { 'flex-grow': '1', 'flex-shrink': '1', 'flex-basis': 'auto' }\n * flexHandler.expand('1 1 200px'); // { 'flex-grow': '1', 'flex-shrink': '1', 'flex-basis': '200px' }\n * ```\n */\nexport const flexHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"flex\",\n    longhands: [\"flex-grow\", \"flex-shrink\", \"flex-basis\"],\n    defaults: {\n      \"flex-grow\": \"0\",\n      \"flex-shrink\": \"1\",\n      \"flex-basis\": \"auto\",\n    },\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|unset|revert)$/i.test(value)) {\n      return {\n        \"flex-grow\": value,\n        \"flex-shrink\": value,\n        \"flex-basis\": value,\n      };\n    }\n\n    // Special case for initial\n    if (value === \"initial\") {\n      return {\n        \"flex-grow\": \"0\",\n        \"flex-shrink\": \"1\",\n        \"flex-basis\": \"auto\",\n      };\n    }\n\n    // Handle special keyword values\n    if (value === \"none\") {\n      return {\n        \"flex-grow\": \"0\",\n        \"flex-shrink\": \"0\",\n        \"flex-basis\": \"auto\",\n      };\n    }\n\n    if (value === \"auto\") {\n      return {\n        \"flex-grow\": \"1\",\n        \"flex-shrink\": \"1\",\n        \"flex-basis\": \"auto\",\n      };\n    }\n\n    // Parse normal values\n    const parts = value.trim().split(/\\s+/);\n    if (parts.length > 3 || parts.length === 0) return undefined;\n\n    // Define value type detection patterns\n    const numberPattern = /^[+-]?([0-9]*\\.)?[0-9]+$/;\n    const flexBasisKeywordPattern = /^(auto|content|max-content|min-content|fit-content)$/i;\n    const fitContentFn = /^fit-content\\(\\s*[^)]+\\s*\\)$/i;\n\n    // Classify each value by type\n    const classified: Array<{ value: string; type: \"number\" | \"basis\" }> = [];\n    for (const part of parts) {\n      if (numberPattern.test(part)) {\n        classified.push({ value: part, type: \"number\" });\n      } else if (flexBasisKeywordPattern.test(part) || isLength(part) || fitContentFn.test(part)) {\n        classified.push({ value: part, type: \"basis\" });\n      } else {\n        return undefined;\n      }\n    }\n\n    // Handle unitless zero as basis in three-value form\n    if (\n      classified.length === 3 &&\n      classified[2].type === \"number\" &&\n      isLength(classified[2].value)\n    ) {\n      classified[2] = { type: \"basis\", value: classified[2].value };\n    }\n\n    // Apply expansion rules based on value count\n    if (classified.length === 1) {\n      const [val] = classified;\n      if (val.type === \"number\") {\n        return {\n          \"flex-grow\": val.value,\n          \"flex-shrink\": \"1\",\n          \"flex-basis\": \"0%\",\n        };\n      } else {\n        return {\n          \"flex-grow\": \"1\",\n          \"flex-shrink\": \"1\",\n          \"flex-basis\": val.value,\n        };\n      }\n    } else if (classified.length === 2) {\n      const [first, second] = classified;\n      if (first.type === \"number\" && second.type === \"number\") {\n        return {\n          \"flex-grow\": first.value,\n          \"flex-shrink\": second.value,\n          \"flex-basis\": \"0%\",\n        };\n      } else if (first.type === \"number\" && second.type === \"basis\") {\n        return {\n          \"flex-grow\": first.value,\n          \"flex-shrink\": \"1\",\n          \"flex-basis\": second.value,\n        };\n      } else if (first.type === \"basis\" && second.type === \"number\") {\n        return {\n          \"flex-grow\": second.value,\n          \"flex-shrink\": \"1\",\n          \"flex-basis\": first.value,\n        };\n      } else {\n        return undefined;\n      }\n    } else if (classified.length === 3) {\n      const [first, second, third] = classified;\n      if (first.type === \"number\" && second.type === \"number\" && third.type === \"basis\") {\n        return {\n          \"flex-grow\": first.value,\n          \"flex-shrink\": second.value,\n          \"flex-basis\": third.value,\n        };\n      } else {\n        return undefined;\n      }\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    return flexHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function (value: string): Record<string, string> | undefined {\n  return flexHandler.expand(value);\n}\n","// b_path:: src/handlers/flex-flow/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the flex-flow shorthand property.\n *\n * Reconstructs `flex-flow` from `flex-direction` and `flex-wrap`.\n *\n * Rules:\n * - Single value: just direction if wrap is default (nowrap), or just wrap if direction is default (row)\n * - Two values: direction wrap\n * - If both are missing: cannot collapse\n */\nexport const flexFlowCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"flex-flow\",\n    longhands: [\"flex-direction\", \"flex-wrap\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const direction = properties[\"flex-direction\"];\n    const wrap = properties[\"flex-wrap\"];\n\n    // At least one must be present\n    if (!direction && !wrap) return undefined;\n\n    // Both present\n    if (direction && wrap) {\n      return `${direction} ${wrap}`;\n    }\n\n    // Only one present\n    return direction || wrap;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"flex-direction\"] || properties[\"flex-wrap\"]);\n  },\n});\n","// b_path:: src/handlers/flex-flow/expand.ts\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'flex-flow' CSS shorthand property\n *\n * Expands flex-flow into flex-direction and flex-wrap.\n *\n * @example\n * ```typescript\n * flexFlowHandler.expand('row wrap'); // { 'flex-direction': 'row', 'flex-wrap': 'wrap' }\n * flexFlowHandler.expand('column'); // { 'flex-direction': 'column' }\n * ```\n */\nexport const flexFlowHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"flex-flow\",\n    longhands: [\"flex-direction\", \"flex-wrap\"],\n    defaults: {\n      \"flex-direction\": \"row\",\n      \"flex-wrap\": \"nowrap\",\n    },\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords first\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"flex-direction\": value,\n        \"flex-wrap\": value,\n      };\n    }\n\n    // Parse normal values\n    const parts = value.trim().split(/\\s+/);\n    if (parts.length > 2) return undefined;\n\n    // Define keyword patterns\n    const directionPattern = /^(row|row-reverse|column|column-reverse)$/i;\n    const wrapPattern = /^(nowrap|wrap|wrap-reverse)$/i;\n\n    // Value classification logic\n    let direction: string | undefined;\n    let wrap: string | undefined;\n\n    for (const part of parts) {\n      if (directionPattern.test(part)) {\n        if (direction !== undefined) return undefined; // duplicate\n        direction = part;\n      } else if (wrapPattern.test(part)) {\n        if (wrap !== undefined) return undefined; // duplicate\n        wrap = part;\n      } else {\n        return undefined; // invalid\n      }\n    }\n\n    // Return result\n    const result: Record<string, string> = {};\n    if (direction) result[\"flex-direction\"] = direction;\n    if (wrap) result[\"flex-wrap\"] = wrap;\n    return Object.keys(result).length > 0 ? result : undefined;\n  },\n\n  validate: (value: string): boolean => {\n    const result = flexFlowHandler.expand(value);\n    return result !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default function (value: string): Record<string, string> | undefined {\n  return flexFlowHandler.expand(value);\n}\n","// b_path:: src/handlers/font/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the font shorthand property.\n *\n * Reconstructs `font` from font-style, font-variant, font-weight, font-stretch,\n * font-size, line-height, and font-family.\n *\n * Rules:\n * - font-size and font-family are required\n * - Order: [style] [variant] [weight] [stretch] size[/line-height] family\n * - Optional values default to 'normal' when omitted\n * - System fonts (caption, icon, menu, etc.) are handled as single keywords\n */\nexport const fontCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"font\",\n    longhands: [\n      \"font-style\",\n      \"font-variant\",\n      \"font-weight\",\n      \"font-stretch\",\n      \"font-size\",\n      \"line-height\",\n      \"font-family\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const size = properties[\"font-size\"];\n    const family = properties[\"font-family\"];\n\n    // font-size and font-family are required\n    if (!size || !family) return undefined;\n\n    // Check for system fonts or CSS-wide keywords\n    if (\n      /^(caption|icon|menu|message-box|small-caption|status-bar|inherit|initial|unset|revert)$/.test(\n        size\n      )\n    ) {\n      return size;\n    }\n\n    const style = properties[\"font-style\"];\n    const variant = properties[\"font-variant\"];\n    const weight = properties[\"font-weight\"];\n    const stretch = properties[\"font-stretch\"];\n    const lineHeight = properties[\"line-height\"];\n\n    const parts: string[] = [];\n\n    // Add optional values only if they differ from normal\n    if (style && style !== \"normal\") parts.push(style);\n    if (variant && variant !== \"normal\") parts.push(variant);\n    if (weight && weight !== \"normal\") parts.push(weight);\n    if (stretch && stretch !== \"normal\") parts.push(stretch);\n\n    // Add required font-size with optional line-height\n    if (lineHeight && lineHeight !== \"normal\") {\n      parts.push(`${size}/${lineHeight}`);\n    } else {\n      parts.push(size);\n    }\n\n    // Add required font-family (remove quotes if present for cleaner output)\n    // Keep quotes for families with spaces or special characters\n    const cleanFamily = family.replace(/^[\"']|[\"']$/g, \"\");\n    if (/[\\s,]/.test(cleanFamily) && !family.startsWith('\"') && !family.startsWith(\"'\")) {\n      parts.push(`\"${cleanFamily}\"`);\n    } else {\n      parts.push(family);\n    }\n\n    return parts.join(\" \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Only font-size and font-family are required\n    return !!(properties[\"font-size\"] && properties[\"font-family\"]);\n  },\n});\n","// b_path:: src/handlers/font/expand.ts\n\n// NOTE: This handler contains complex state machine parsing logic from css-font-parser\n// that is a candidate for future refactoring. The order-dependent parsing and font-family\n// handling with quotes and commas adds significant complexity.\n\n/**\n * Copied from https://github.com/bramstein/css-font-parser\n */\n\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\n/**\n * @enum {number}\n */\nconst states = {\n  VARIATION: 1,\n  LINE_HEIGHT: 2,\n  FONT_FAMILY: 3,\n};\n\ninterface FontResult {\n  \"font-family\": string[];\n  \"font-size\"?: string;\n  \"line-height\"?: string;\n  \"font-style\"?: string;\n  \"font-weight\"?: string;\n  \"font-variant\"?: string;\n  \"font-stretch\"?: string;\n}\n\nfunction parse(input: string): FontResult | null {\n  let state = states.VARIATION;\n  let buffer = \"\";\n  const result: FontResult = {\n    \"font-family\": [],\n  };\n\n  for (let i = 0; i < input.length; i += 1) {\n    const c = input.charAt(i);\n    if (state === states.FONT_FAMILY && (c === '\"' || c === \"'\")) {\n      let index = i + 1;\n\n      // consume the entire string\n      do {\n        index = input.indexOf(c, index) + 1;\n        if (!index) {\n          // If a string is not closed by a ' or \" return null.\n          // TODO: Check to see if this is correct.\n          return null;\n        }\n      } while (input.charAt(index - 2) === \"\\\\\");\n\n      result[\"font-family\"].push(input.slice(i + 1, index - 1).replace(/\\\\('|\")/g, \"$1\"));\n\n      i = index - 1;\n      buffer = \"\";\n    } else if (state === states.FONT_FAMILY && c === \",\") {\n      if (!/^\\s*$/.test(buffer)) {\n        result[\"font-family\"].push(buffer.replace(/^\\s+|\\s+$/, \"\").replace(/\\s+/g, \" \"));\n        buffer = \"\";\n      }\n    } else if (state === states.VARIATION && (c === \" \" || c === \"/\")) {\n      if (\n        /^((xx|x)-large|(xx|s)-small|small|large|medium)$/.test(buffer) ||\n        /^(larg|small)er$/.test(buffer) ||\n        /^(\\+|-)?([0-9]*\\.)?[0-9]+(em|ex|ch|rem|vh|vw|vmin|vmax|px|mm|cm|in|pt|pc|%)$/.test(buffer)\n      ) {\n        state = c === \"/\" ? states.LINE_HEIGHT : states.FONT_FAMILY;\n        result[\"font-size\"] = buffer;\n      } else if (/^(italic|oblique)$/.test(buffer)) {\n        result[\"font-style\"] = buffer;\n      } else if (/^small-caps$/.test(buffer)) {\n        result[\"font-variant\"] = buffer;\n      } else if (/^(bold(er)?|lighter|normal|[1-9]00)$/.test(buffer)) {\n        result[\"font-weight\"] = buffer;\n      } else if (/^((ultra|extra|semi)-)?(condensed|expanded)$/.test(buffer)) {\n        result[\"font-stretch\"] = buffer;\n      }\n      buffer = \"\";\n    } else if (state === states.LINE_HEIGHT && c === \" \") {\n      if (\n        /^(\\+|-)?([0-9]*\\.)?[0-9]+(em|ex|ch|rem|vh|vw|vmin|vmax|px|mm|cm|in|pt|pc|%)?$/.test(buffer)\n      ) {\n        result[\"line-height\"] = buffer;\n      }\n      state = states.FONT_FAMILY;\n      buffer = \"\";\n    } else {\n      buffer += c;\n    }\n  }\n\n  if (state === states.FONT_FAMILY && !/^\\s*$/.test(buffer)) {\n    result[\"font-family\"].push(buffer.replace(/^\\s+|\\s+$/, \"\").replace(/\\s+/g, \" \"));\n  }\n\n  if (result[\"font-size\"] && result[\"font-family\"].length) {\n    return result;\n  } else {\n    return null;\n  }\n}\n\nfunction parseFontValue(input: string): Record<string, string> | undefined {\n  if (/^(inherit|initial)$/.test(input)) {\n    return sortProperties({\n      \"font-size\": input,\n      \"line-height\": input,\n      \"font-style\": input,\n      \"font-weight\": input,\n      \"font-variant\": input,\n      \"font-stretch\": input,\n      \"font-family\": input,\n    });\n  }\n\n  input = input.replace(/\\s*\\/\\s*/, \"/\");\n  const result = parse(input);\n\n  if (result) {\n    const finalResult: Record<string, string> = {};\n\n    // Set defaults for properties that should always be present\n    // Per CSS spec, font shorthand resets these to initial values if not specified\n    const defaults = {\n      \"font-style\": \"normal\",\n      \"font-variant\": \"normal\",\n      \"font-weight\": \"normal\",\n      \"font-stretch\": \"normal\",\n    };\n\n    // Apply defaults first\n    Object.assign(finalResult, defaults);\n\n    // Then override with parsed values\n    for (const key in result) {\n      if (key === \"font-family\") {\n        finalResult[key] = result[key]\n          .map((family: string) =>\n            /^(serif|sans-serif|monospace|cursive|fantasy)$/.test(family) ? family : `\"${family}\"`\n          )\n          .join(\", \");\n      } else if (result[key as keyof FontResult]) {\n        finalResult[key] = result[key as keyof FontResult] as string;\n      }\n    }\n    return sortProperties(finalResult);\n  }\n\n  return undefined;\n}\n\n/**\n * Property handler for the 'font' CSS shorthand property\n *\n * Expands font into font-style, font-variant, font-weight, font-stretch,\n * font-size, line-height, and font-family.\n *\n * @example\n * ```typescript\n * fontHandler.expand('italic bold 16px/1.5 Arial, sans-serif');\n * fontHandler.expand('12px \"Helvetica Neue\", Helvetica');\n * ```\n */\nexport const fontHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"font\",\n    longhands: [\n      \"font-style\",\n      \"font-variant\",\n      \"font-weight\",\n      \"font-stretch\",\n      \"font-size\",\n      \"line-height\",\n      \"font-family\",\n    ],\n    category: \"typography\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    return parseFontValue(value);\n  },\n\n  validate: (value: string): boolean => {\n    return fontHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function font(value: string): Record<string, string> | undefined {\n  return fontHandler.expand(value);\n}\n","// b_path:: src/handlers/grid/expand.ts\n\n// NOTE: This handler contains extremely complex grid template syntax parsing logic\n// (~446 lines) that is a candidate for future refactoring. The implementation handles\n// named grid lines, track sizes, repeat() notation, area names, and multiple syntaxes\n// (template form, explicit-rows, explicit-columns). The parsing logic is preserved as-is.\n\nimport * as csstree from \"@eslint/css-tree\";\nimport { matchesType } from \"@/internal/is-value-node\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n// CSS default values for grid properties\n// NOTE: row-gap and column-gap are NOT part of grid shorthand\nexport const GRID_DEFAULTS = {\n  \"grid-template-rows\": \"none\",\n  \"grid-template-columns\": \"none\",\n  \"grid-template-areas\": \"none\",\n  \"grid-auto-rows\": \"auto\",\n  \"grid-auto-columns\": \"auto\",\n  \"grid-auto-flow\": \"row\",\n} as const;\n\n/**\n * Parses value and returns segments and slash count\n */\nfunction parseValueAndGetSegments(\n  value: string\n): { leftSegment: csstree.CssNode[]; rightSegment: csstree.CssNode[]; slashCount: number } | null {\n  try {\n    const ast = csstree.parse(value.trim(), { context: \"value\" }) as csstree.Value;\n\n    // Find top-level / operator positions\n    const slashIndices: number[] = [];\n\n    csstree.walk(ast, {\n      visit: \"Value\",\n      enter: (node: csstree.CssNode) => {\n        if (node.type === \"Value\" && node.children) {\n          let index = 0;\n          node.children.forEach((child) => {\n            if (child.type === \"Operator\" && (child as csstree.Operator).value === \"/\") {\n              slashIndices.push(index);\n            }\n            index++;\n          });\n        }\n      },\n    });\n\n    const slashCount = slashIndices.length;\n    if (slashCount > 1) {\n      return null; // Multiple slashes not allowed\n    }\n\n    const childrenArray = listToArray(ast.children);\n    if (slashCount === 0) {\n      return { leftSegment: childrenArray, rightSegment: [], slashCount: 0 };\n    }\n\n    const slashIndex = slashIndices[0];\n    const leftSegment = childrenArray.slice(0, slashIndex);\n    const rightSegment = childrenArray.slice(slashIndex + 1);\n\n    return { leftSegment, rightSegment, slashCount };\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Detects which grid shorthand form is being used\n */\nfunction detectGridForm(\n  leftSegment: csstree.CssNode[],\n  rightSegment: csstree.CssNode[]\n): \"template\" | \"explicit-rows\" | \"explicit-columns\" | null {\n  if (rightSegment.length === 0) {\n    // No slash, check if it's valid track list or ASCII art\n    return \"template\";\n  }\n\n  // Check for auto-flow in each segment\n  let hasAutoFlowLeft = false;\n  let hasAutoFlowRight = false;\n\n  for (const node of leftSegment) {\n    if (node.type === \"Identifier\" && (node as csstree.Identifier).name === \"auto-flow\") {\n      hasAutoFlowLeft = true;\n      break;\n    }\n  }\n\n  for (const node of rightSegment) {\n    if (node.type === \"Identifier\" && (node as csstree.Identifier).name === \"auto-flow\") {\n      hasAutoFlowRight = true;\n      break;\n    }\n  }\n\n  if (hasAutoFlowRight) {\n    return \"explicit-rows\";\n  } else if (hasAutoFlowLeft) {\n    return \"explicit-columns\";\n  } else {\n    return \"template\";\n  }\n}\n\n/**\n * Helper to convert List to array\n */\nfunction listToArray<T>(list: csstree.List<T>): T[] {\n  const arr: T[] = [];\n  for (const item of list) {\n    arr.push(item);\n  }\n  return arr;\n}\n\n/**\n * Separates areas (strings) and tracks (other nodes) from a segment\n */\nfunction separateAreasAndTracks(segmentNodes: csstree.CssNode[]): {\n  areas: string | undefined;\n  tracks: string | undefined;\n} {\n  const strings: string[] = [];\n  const tracks: csstree.CssNode[] = [];\n\n  for (const node of segmentNodes) {\n    if (node.type === \"String\") {\n      strings.push((node as csstree.StringNode).value);\n    } else if (node.type !== \"WhiteSpace\") {\n      tracks.push(node);\n    }\n  }\n\n  let areas: string | undefined;\n  if (strings.length > 0) {\n    // Validate that all rows have the same number of columns\n    const rows = strings.map((s) => s.trim().split(/\\s+/));\n    const columnCount = rows[0]?.length || 0;\n    if (columnCount === 0 || !rows.every((row) => row.length === columnCount)) {\n      return { areas: undefined, tracks: undefined }; // Invalid\n    }\n    areas = strings.map((s) => `\"${s.trim()}\"`).join(\" \");\n  }\n\n  let tracksStr: string | undefined;\n  if (tracks.length > 0) {\n    tracksStr = parseTrackList(tracks);\n  }\n\n  return { areas, tracks: tracksStr };\n}\n\n/**\n * Parses track list (rows or columns) into CSS string\n */\nfunction parseTrackList(segmentNodes: csstree.CssNode[]): string | undefined {\n  const validNodes: csstree.CssNode[] = [];\n\n  for (const node of segmentNodes) {\n    if (\n      node.type === \"Identifier\" &&\n      [\"auto\", \"min-content\", \"max-content\"].includes((node as csstree.Identifier).name)\n    ) {\n      validNodes.push(node);\n    } else if (matchesType(node, [\"Dimension\", \"Percentage\", \"Number\"])) {\n      validNodes.push(node);\n    } else if (\n      node.type === \"Function\" &&\n      [\"repeat\", \"minmax\", \"fit-content\"].includes((node as csstree.FunctionNode).name)\n    ) {\n      validNodes.push(node);\n    } else if (node.type === \"Parentheses\") {\n      // Named grid lines like [line1]\n      validNodes.push(node);\n    }\n  }\n\n  if (validNodes.length === 0) {\n    return undefined;\n  }\n\n  // Generate CSS from the valid nodes\n  const generatedParts: string[] = [];\n  for (const node of validNodes) {\n    generatedParts.push(csstree.generate(node));\n  }\n\n  return generatedParts.join(\" \");\n}\n\n/**\n * Parses template form: <grid-template>\n */\nfunction parseTemplateForm(\n  leftSegment: csstree.CssNode[],\n  rightSegment: csstree.CssNode[]\n): Record<string, string> | undefined {\n  let templateAreas: string | undefined;\n  let templateRows: string | undefined;\n  let templateColumns: string | undefined;\n\n  if (rightSegment.length === 0) {\n    // No slash - could be just rows, but not areas\n    const { areas, tracks } = separateAreasAndTracks(leftSegment);\n    if (areas) {\n      return undefined; // Strings without slash not supported\n    }\n    templateRows = tracks;\n    if (!templateRows) {\n      return undefined; // Invalid\n    }\n  } else {\n    const { areas: leftAreas, tracks: leftTracks } = separateAreasAndTracks(leftSegment);\n    const { tracks: rightTracks } = separateAreasAndTracks(rightSegment);\n\n    // Template form logic:\n    // - If left has areas, then left areas + left tracks (as rows) + right columns\n    // - If left has tracks but no areas, then left rows + right columns\n    // - If no slash and left has areas, then just areas\n    // - If no slash and left has tracks, then just rows\n\n    if (leftAreas) {\n      templateAreas = leftAreas;\n      templateRows = leftTracks; // Interleaved track sizes become rows\n      templateColumns = rightTracks;\n      if (!templateColumns) {\n        return undefined;\n      }\n    } else if (leftTracks) {\n      templateRows = leftTracks;\n      templateColumns = rightTracks;\n      if (!templateColumns) {\n        return undefined;\n      }\n    } else {\n      return undefined; // Invalid\n    }\n  }\n\n  return {\n    \"grid-template-rows\": templateRows || GRID_DEFAULTS[\"grid-template-rows\"],\n    \"grid-template-columns\": templateColumns || GRID_DEFAULTS[\"grid-template-columns\"],\n    \"grid-template-areas\": templateAreas || GRID_DEFAULTS[\"grid-template-areas\"],\n    \"grid-auto-rows\": GRID_DEFAULTS[\"grid-auto-rows\"],\n    \"grid-auto-columns\": GRID_DEFAULTS[\"grid-auto-columns\"],\n    \"grid-auto-flow\": GRID_DEFAULTS[\"grid-auto-flow\"],\n  };\n}\n\n/**\n * Parses explicit rows form: <rows> / auto-flow [dense] [<auto-columns>]\n */\nfunction parseExplicitRowsForm(\n  leftSegment: csstree.CssNode[],\n  rightSegment: csstree.CssNode[]\n): Record<string, string> | undefined {\n  // Check if right segment starts with auto-flow\n  let firstNonWhiteSpace: csstree.CssNode | undefined;\n  for (const node of rightSegment) {\n    if (node.type !== \"WhiteSpace\") {\n      firstNonWhiteSpace = node;\n      break;\n    }\n  }\n  if (\n    !firstNonWhiteSpace ||\n    firstNonWhiteSpace.type !== \"Identifier\" ||\n    (firstNonWhiteSpace as csstree.Identifier).name !== \"auto-flow\"\n  ) {\n    return undefined;\n  }\n\n  // Left side: template rows\n  const templateRows = parseTrackList(leftSegment);\n  if (!templateRows) {\n    return undefined;\n  }\n\n  // Right side: auto-flow [dense] [auto-columns]\n  let autoFlow = \"column\";\n  let autoColumns: string | undefined;\n\n  // Find auto-flow and dense\n  let hasDense = false;\n  let autoColumnsStart = -1;\n\n  for (let i = 0; i < rightSegment.length; i++) {\n    const node = rightSegment[i];\n    if (node.type === \"Identifier\" && (node as csstree.Identifier).name === \"auto-flow\") {\n      // Next might be dense\n      if (\n        i + 1 < rightSegment.length &&\n        rightSegment[i + 1].type === \"Identifier\" &&\n        (rightSegment[i + 1] as csstree.Identifier).name === \"dense\"\n      ) {\n        hasDense = true;\n        autoColumnsStart = i + 2;\n      } else {\n        autoColumnsStart = i + 1;\n      }\n      break;\n    }\n  }\n\n  if (hasDense) {\n    autoFlow = \"column dense\";\n  }\n\n  // Parse auto-columns if present\n  if (autoColumnsStart >= 0 && autoColumnsStart < rightSegment.length) {\n    const autoColumnsSegment = rightSegment.slice(autoColumnsStart);\n    autoColumns = parseTrackList(autoColumnsSegment);\n  }\n\n  return {\n    \"grid-template-rows\": templateRows,\n    \"grid-template-columns\": GRID_DEFAULTS[\"grid-template-columns\"],\n    \"grid-template-areas\": GRID_DEFAULTS[\"grid-template-areas\"],\n    \"grid-auto-rows\": GRID_DEFAULTS[\"grid-auto-rows\"],\n    \"grid-auto-columns\": autoColumns || GRID_DEFAULTS[\"grid-auto-columns\"],\n    \"grid-auto-flow\": autoFlow,\n  };\n}\n\n/**\n * Parses explicit columns form: auto-flow [dense] [<auto-rows>] / <columns>\n */\nfunction parseExplicitColumnsForm(\n  leftSegment: csstree.CssNode[],\n  rightSegment: csstree.CssNode[]\n): Record<string, string> | undefined {\n  // Check if left segment starts with auto-flow\n  let firstNonWhiteSpace: csstree.CssNode | undefined;\n  for (const node of leftSegment) {\n    if (node.type !== \"WhiteSpace\") {\n      firstNonWhiteSpace = node;\n      break;\n    }\n  }\n  if (\n    !firstNonWhiteSpace ||\n    firstNonWhiteSpace.type !== \"Identifier\" ||\n    (firstNonWhiteSpace as csstree.Identifier).name !== \"auto-flow\"\n  ) {\n    return undefined;\n  }\n\n  // Right side: template columns\n  const templateColumns = parseTrackList(rightSegment);\n  if (!templateColumns) {\n    return undefined;\n  }\n\n  // Left side: auto-flow [dense] [auto-rows]\n  let autoFlow = \"row\";\n  let autoRows: string | undefined;\n\n  // Find auto-flow and dense\n  let hasDense = false;\n  let autoRowsStart = -1;\n\n  for (let i = 0; i < leftSegment.length; i++) {\n    const node = leftSegment[i];\n    if (node.type === \"Identifier\" && (node as csstree.Identifier).name === \"auto-flow\") {\n      // Next might be dense\n      if (\n        i + 1 < leftSegment.length &&\n        leftSegment[i + 1].type === \"Identifier\" &&\n        (leftSegment[i + 1] as csstree.Identifier).name === \"dense\"\n      ) {\n        hasDense = true;\n        autoRowsStart = i + 2;\n      } else {\n        autoRowsStart = i + 1;\n      }\n      break;\n    }\n  }\n\n  if (hasDense) {\n    autoFlow = \"row dense\";\n  }\n\n  // Parse auto-rows if present\n  if (autoRowsStart >= 0 && autoRowsStart < leftSegment.length) {\n    const autoRowsSegment = leftSegment.slice(autoRowsStart);\n    autoRows = parseTrackList(autoRowsSegment);\n  }\n\n  return {\n    \"grid-template-rows\": GRID_DEFAULTS[\"grid-template-rows\"],\n    \"grid-template-columns\": templateColumns,\n    \"grid-template-areas\": GRID_DEFAULTS[\"grid-template-areas\"],\n    \"grid-auto-rows\": autoRows || GRID_DEFAULTS[\"grid-auto-rows\"],\n    \"grid-auto-columns\": GRID_DEFAULTS[\"grid-auto-columns\"],\n    \"grid-auto-flow\": autoFlow,\n  };\n}\n\nfunction parseGridValue(value: string): Record<string, string> | undefined {\n  // Handle global CSS keywords\n  if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n    return {\n      \"grid-template-rows\": value,\n      \"grid-template-columns\": value,\n      \"grid-template-areas\": value,\n      \"grid-auto-rows\": value,\n      \"grid-auto-columns\": value,\n      \"grid-auto-flow\": value,\n    };\n  }\n\n  // Handle none keyword\n  if (value.trim().toLowerCase() === \"none\") {\n    return { ...GRID_DEFAULTS };\n  }\n\n  // Parse value and get segments\n  const segments = parseValueAndGetSegments(value);\n  if (!segments) {\n    return undefined; // Invalid (e.g., multiple slashes)\n  }\n\n  // Detect form and parse accordingly\n  const form = detectGridForm(segments.leftSegment, segments.rightSegment);\n  switch (form) {\n    case \"template\":\n      return parseTemplateForm(segments.leftSegment, segments.rightSegment);\n    case \"explicit-rows\":\n      return parseExplicitRowsForm(segments.leftSegment, segments.rightSegment);\n    case \"explicit-columns\":\n      return parseExplicitColumnsForm(segments.leftSegment, segments.rightSegment);\n    default:\n      return undefined;\n  }\n}\n\nexport const gridHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"grid\",\n    longhands: [\n      \"grid-template-rows\",\n      \"grid-template-columns\",\n      \"grid-template-areas\",\n      \"grid-auto-rows\",\n      \"grid-auto-columns\",\n      \"grid-auto-flow\",\n      // NOTE: row-gap and column-gap are NOT part of grid shorthand\n      // They have their own 'gap' shorthand\n    ],\n    defaults: GRID_DEFAULTS,\n    category: \"layout\",\n  },\n\n  expand: (value: string) => parseGridValue(value),\n\n  validate: (value: string) => gridHandler.expand(value) !== undefined,\n});\n\nexport default (value: string): Record<string, string> | undefined => {\n  return gridHandler.expand(value);\n};\n","// b_path:: src/handlers/grid/collapse-utils.ts\n\nimport { GRID_DEFAULTS } from \"./expand\";\n\n/**\n * Check if a value equals the default for a property\n */\nexport function isDefault(property: keyof typeof GRID_DEFAULTS, value: string): boolean {\n  return value === GRID_DEFAULTS[property];\n}\n\n/**\n * Check if all grid properties are at their defaults\n */\nexport function allDefaults(properties: Record<string, string>): boolean {\n  return (\n    isDefault(\"grid-template-rows\", properties[\"grid-template-rows\"]) &&\n    isDefault(\"grid-template-columns\", properties[\"grid-template-columns\"]) &&\n    isDefault(\"grid-template-areas\", properties[\"grid-template-areas\"]) &&\n    isDefault(\"grid-auto-rows\", properties[\"grid-auto-rows\"]) &&\n    isDefault(\"grid-auto-columns\", properties[\"grid-auto-columns\"]) &&\n    isDefault(\"grid-auto-flow\", properties[\"grid-auto-flow\"])\n  );\n}\n\n/**\n * Check if properties match template form:\n * grid: <template-rows> / <template-columns>\n * OR grid: [line-names]? <string> <track-size>? ]+ [ / <explicit-track-list> ]?\n */\nexport function canCollapseToTemplate(properties: Record<string, string>): boolean {\n  const rows = properties[\"grid-template-rows\"];\n  const cols = properties[\"grid-template-columns\"];\n  const areas = properties[\"grid-template-areas\"];\n\n  // Auto properties must be at defaults\n  // NOTE: row-gap and column-gap are NOT part of grid shorthand\n  // so we don't check them here - they can have any value\n  const autoDefaultsCheck =\n    isDefault(\"grid-auto-rows\", properties[\"grid-auto-rows\"]) &&\n    isDefault(\"grid-auto-columns\", properties[\"grid-auto-columns\"]) &&\n    isDefault(\"grid-auto-flow\", properties[\"grid-auto-flow\"]);\n\n  if (!autoDefaultsCheck) return false;\n\n  // Case 1: Simple template - rows and columns (no areas)\n  if (rows && cols && rows !== \"none\" && cols !== \"none\" && areas === \"none\") {\n    return true;\n  }\n\n  // Case 2: Template with areas\n  if (areas && areas !== \"none\" && rows && cols) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Check if properties match auto-flow rows form:\n * grid: auto-flow [dense]? <auto-rows>? / <template-columns>\n */\nexport function canCollapseToAutoFlowRows(properties: Record<string, string>): boolean {\n  const flow = properties[\"grid-auto-flow\"];\n  const cols = properties[\"grid-template-columns\"];\n  const rows = properties[\"grid-template-rows\"];\n\n  // Must have column flow\n  if (!flow || flow === \"row\" || flow === \"row dense\") {\n    return false;\n  }\n\n  // Must be column or column dense\n  if (flow !== \"column\" && flow !== \"column dense\") {\n    return false;\n  }\n\n  // Template rows must be none\n  if (rows !== \"none\") {\n    return false;\n  }\n\n  // Must have template columns\n  if (!cols || cols === \"none\") {\n    return false;\n  }\n\n  // Areas must be defaults (not part of auto-flow forms)\n  // Gaps can have any value - they're not part of grid shorthand\n  return isDefault(\"grid-template-areas\", properties[\"grid-template-areas\"]);\n}\n\n/**\n * Check if properties match auto-flow columns form:\n * grid: <template-rows> / auto-flow [dense]? <auto-columns>?\n */\nexport function canCollapseToAutoFlowColumns(properties: Record<string, string>): boolean {\n  const flow = properties[\"grid-auto-flow\"];\n  const rows = properties[\"grid-template-rows\"];\n  const cols = properties[\"grid-template-columns\"];\n\n  // Must have row flow\n  if (!flow || flow === \"column\" || flow === \"column dense\") {\n    return false;\n  }\n\n  // Must be row or row dense\n  if (flow !== \"row\" && flow !== \"row dense\") {\n    return false;\n  }\n\n  // Template columns must be none\n  if (cols !== \"none\") {\n    return false;\n  }\n\n  // Must have template rows\n  if (!rows || rows === \"none\") {\n    return false;\n  }\n\n  // Areas must be defaults (not part of auto-flow forms)\n  // Gaps can have any value - they're not part of grid shorthand\n  return isDefault(\"grid-template-areas\", properties[\"grid-template-areas\"]);\n}\n","// b_path:: src/handlers/grid/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\nimport {\n  allDefaults,\n  canCollapseToAutoFlowColumns,\n  canCollapseToAutoFlowRows,\n  canCollapseToTemplate,\n  isDefault,\n} from \"./collapse-utils\";\n\n/**\n * Collapse handler for the grid shorthand property.\n *\n * Reconstructs `grid` from 8 longhand properties.\n *\n * Supported forms:\n * 1. `none` - All properties at defaults\n * 2. `<template-rows> / <template-columns>` - Simple template\n * 3. `auto-flow [dense]? <auto-rows>? / <template-columns>` - Auto-flow rows\n * 4. `<template-rows> / auto-flow [dense]? <auto-columns>?` - Auto-flow columns\n *\n * Not supported (too complex, keep longhands):\n * - grid-template-areas with string values\n * - row-gap or column-gap with non-default values\n * - Complex template syntax with line names\n */\nexport const gridCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"grid\",\n    longhands: [\n      \"grid-template-rows\",\n      \"grid-template-columns\",\n      \"grid-template-areas\",\n      \"grid-auto-rows\",\n      \"grid-auto-columns\",\n      \"grid-auto-flow\",\n      // NOTE: row-gap and column-gap are NOT part of grid shorthand\n      // They are reset by grid shorthand but not included in its syntax\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    // Only the 6 grid longhands are required (not gaps)\n    const required = [\n      \"grid-template-rows\",\n      \"grid-template-columns\",\n      \"grid-template-areas\",\n      \"grid-auto-rows\",\n      \"grid-auto-columns\",\n      \"grid-auto-flow\",\n    ];\n\n    for (const prop of required) {\n      if (!properties[prop]) return undefined;\n    }\n\n    // Form 1: All defaults → \"none\"\n    if (allDefaults(properties)) {\n      return \"none\";\n    }\n\n    // Form 2: Template (with or without areas)\n    if (canCollapseToTemplate(properties)) {\n      const rows = properties[\"grid-template-rows\"];\n      const cols = properties[\"grid-template-columns\"];\n      const areas = properties[\"grid-template-areas\"];\n\n      // Case 2a: Template areas with rows/cols\n      if (areas && areas !== \"none\") {\n        // Split areas into rows\n        const areaRows = areas.match(/\"[^\"]+\"/g) || [];\n        const rowSizes = rows.split(/\\s+/);\n\n        // Build: \"area\" size \"area\" size / cols\n        const parts: string[] = [];\n        for (let i = 0; i < areaRows.length; i++) {\n          parts.push(areaRows[i]);\n          if (i < rowSizes.length) {\n            parts.push(rowSizes[i]);\n          }\n        }\n        parts.push(\"/\", cols);\n        return parts.join(\" \");\n      }\n\n      // Case 2b: Simple template without areas\n      return `${rows} / ${cols}`;\n    }\n\n    // Form 3: Auto-flow columns → \"rows / auto-flow [dense]? [auto-columns]?\"\n    if (canCollapseToAutoFlowColumns(properties)) {\n      const rows = properties[\"grid-template-rows\"];\n      const flow = properties[\"grid-auto-flow\"];\n      const autoCols = properties[\"grid-auto-columns\"];\n\n      const parts = [rows, \"/\"];\n\n      // Add auto-flow and optional dense\n      if (flow === \"row dense\") {\n        parts.push(\"auto-flow\", \"dense\");\n      } else {\n        parts.push(\"auto-flow\");\n      }\n\n      // Add auto-columns if not default\n      if (!isDefault(\"grid-auto-columns\", autoCols)) {\n        parts.push(autoCols);\n      }\n\n      return parts.join(\" \");\n    }\n\n    // Form 4: Auto-flow rows → \"auto-flow [dense]? [auto-rows]? / columns\"\n    if (canCollapseToAutoFlowRows(properties)) {\n      const cols = properties[\"grid-template-columns\"];\n      const flow = properties[\"grid-auto-flow\"];\n      const autoRows = properties[\"grid-auto-rows\"];\n\n      const parts = [];\n\n      // Add auto-flow and optional dense\n      if (flow === \"column dense\") {\n        parts.push(\"auto-flow\", \"dense\");\n      } else {\n        parts.push(\"auto-flow\");\n      }\n\n      // Add auto-rows if not default\n      if (!isDefault(\"grid-auto-rows\", autoRows)) {\n        parts.push(autoRows);\n      }\n\n      parts.push(\"/\", cols);\n\n      return parts.join(\" \");\n    }\n\n    // Too complex to collapse - return undefined\n    return undefined;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Only the 6 grid longhands are required (not gaps)\n    const required = [\n      \"grid-template-rows\",\n      \"grid-template-columns\",\n      \"grid-template-areas\",\n      \"grid-auto-rows\",\n      \"grid-auto-columns\",\n      \"grid-auto-flow\",\n    ];\n\n    return required.every((prop) => prop in properties);\n  },\n});\n","// b_path:: src/handlers/grid-area/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the grid-area shorthand property.\n *\n * Reconstructs `grid-area` from grid-row-start, grid-column-start, grid-row-end, and grid-column-end.\n *\n * Rules:\n * - All four must be present\n * - If all are the same custom-ident, use single value\n * - Simplify to 1-3 values when possible\n * - Otherwise use row-start / column-start / row-end / column-end\n */\nexport const gridAreaCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"grid-area\",\n    longhands: [\"grid-row-start\", \"grid-column-start\", \"grid-row-end\", \"grid-column-end\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const rowStart = properties[\"grid-row-start\"];\n    const columnStart = properties[\"grid-column-start\"];\n    const rowEnd = properties[\"grid-row-end\"];\n    const columnEnd = properties[\"grid-column-end\"];\n\n    // All four must be present\n    if (!rowStart || !columnStart || !rowEnd || !columnEnd) return undefined;\n\n    // Check if all are the same (named grid area)\n    if (\n      rowStart === columnStart &&\n      columnStart === rowEnd &&\n      rowEnd === columnEnd &&\n      /^[a-zA-Z_-][a-zA-Z0-9_-]*$/.test(rowStart) &&\n      !/^(auto|span|\\d)/i.test(rowStart)\n    ) {\n      return rowStart;\n    }\n\n    // Check if we can omit trailing values\n    const parts: string[] = [rowStart];\n\n    // Add column-start if not auto or if row-end/column-end are specified\n    if (columnStart !== \"auto\" || rowEnd !== \"auto\" || columnEnd !== \"auto\") {\n      parts.push(columnStart);\n    }\n\n    // Add row-end if not auto or if column-end is specified\n    if (rowEnd !== \"auto\" || columnEnd !== \"auto\") {\n      if (parts.length === 1) parts.push(\"auto\"); // Need column-start\n      parts.push(rowEnd);\n    }\n\n    // Add column-end if not auto\n    if (columnEnd !== \"auto\") {\n      if (parts.length === 1) parts.push(\"auto\"); // Need column-start\n      if (parts.length === 2) parts.push(\"auto\"); // Need row-end\n      parts.push(columnEnd);\n    }\n\n    return parts.join(\" / \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(\n      properties[\"grid-row-start\"] &&\n      properties[\"grid-column-start\"] &&\n      properties[\"grid-row-end\"] &&\n      properties[\"grid-column-end\"]\n    );\n  },\n});\n","// b_path:: src/internal/grid-line.ts\n\nexport function isCustomIdent(s: string): boolean {\n  return /^[a-zA-Z_-][a-zA-Z0-9_-]*$/.test(s);\n}\n\nfunction isInteger(s: string): boolean {\n  return /^[+-]?[0-9]+$/.test(s) && Number(s) !== 0;\n}\n\nexport function parseGridLine(value: string): boolean {\n  const tokens = value.trim().split(/\\s+/);\n  if (tokens.length === 0) return false;\n\n  if (tokens[0] === \"span\") {\n    if (tokens.length < 2 || tokens.length > 3) return false;\n    const rest = tokens.slice(1);\n    let seenInt = false;\n    let seenIdent = false;\n    for (const token of rest) {\n      if (isInteger(token)) {\n        if (seenInt) return false;\n        seenInt = true;\n      } else if (isCustomIdent(token)) {\n        if (seenIdent) return false;\n        seenIdent = true;\n      } else {\n        return false;\n      }\n    }\n    return seenInt || seenIdent;\n  } else {\n    if (tokens.length > 2) return false;\n    let seenInt = false;\n    let seenIdent = false;\n    for (const token of tokens) {\n      if (isInteger(token)) {\n        if (seenInt) return false;\n        seenInt = true;\n      } else if (isCustomIdent(token)) {\n        if (seenIdent) return false;\n        seenIdent = true;\n      } else {\n        return false;\n      }\n    }\n    return seenInt || seenIdent;\n  }\n}\n\nexport function getDefaultEnd(start: string): string {\n  return isCustomIdent(start) ? start : \"auto\";\n}\n","// b_path:: src/handlers/grid-area/expand.ts\n\nimport { getDefaultEnd, parseGridLine } from \"@/internal/grid-line\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'grid-area' CSS shorthand property\n *\n * Expands grid-area into grid-row-start, grid-column-start, grid-row-end, and grid-column-end.\n *\n * @example\n * ```typescript\n * gridAreaHandler.expand('header'); // Named grid area\n * gridAreaHandler.expand('1 / 2'); // { 'grid-row-start': '1', 'grid-column-start': '2', ... }\n * gridAreaHandler.expand('1 / 2 / 3 / 4'); // All four values specified\n * ```\n */\nexport const gridAreaHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"grid-area\",\n    longhands: [\"grid-row-start\", \"grid-column-start\", \"grid-row-end\", \"grid-column-end\"],\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"grid-row-start\": value,\n        \"grid-column-start\": value,\n        \"grid-row-end\": value,\n        \"grid-column-end\": value,\n      };\n    }\n\n    // Split values on slash\n    const parts = value.trim().split(/\\s*\\/\\s*/);\n\n    // Validate part count - max 4 parts\n    if (parts.length > 4) {\n      return undefined;\n    }\n\n    // Validate all parts\n    for (const part of parts) {\n      if (!parseGridLine(part.trim())) {\n        return undefined;\n      }\n    }\n\n    let rowStart: string, columnStart: string, rowEnd: string, columnEnd: string;\n\n    if (parts.length === 1) {\n      // 1 value: row-start (or all if custom-ident)\n      const val = parts[0].trim();\n      if (/^[a-zA-Z_-][a-zA-Z0-9_-]*$/.test(val) && !/^(auto|span|\\d)/i.test(val)) {\n        // Custom-ident: all four get the same value\n        rowStart = columnStart = rowEnd = columnEnd = val;\n      } else {\n        // Otherwise: row-start gets value, others auto\n        rowStart = val;\n        columnStart = \"auto\";\n        rowEnd = \"auto\";\n        columnEnd = \"auto\";\n      }\n    } else if (parts.length === 2) {\n      // 2 values: row-start / column-start\n      rowStart = parts[0].trim();\n      columnStart = parts[1].trim();\n      rowEnd = getDefaultEnd(rowStart);\n      columnEnd = getDefaultEnd(columnStart);\n    } else if (parts.length === 3) {\n      // 3 values: row-start / column-start / row-end\n      rowStart = parts[0].trim();\n      columnStart = parts[1].trim();\n      rowEnd = parts[2].trim();\n      columnEnd = getDefaultEnd(columnStart);\n    } else {\n      // 4 values: row-start / column-start / row-end / column-end\n      rowStart = parts[0].trim();\n      columnStart = parts[1].trim();\n      rowEnd = parts[2].trim();\n      columnEnd = parts[3].trim();\n    }\n\n    return {\n      \"grid-row-start\": rowStart,\n      \"grid-column-start\": columnStart,\n      \"grid-row-end\": rowEnd,\n      \"grid-column-end\": columnEnd,\n    };\n  },\n\n  validate: (value: string): boolean => {\n    return gridAreaHandler.expand(value) !== undefined;\n  },\n});\n\nexport default (value: string): Record<string, string> | undefined => {\n  return gridAreaHandler.expand(value);\n};\n","// b_path:: src/handlers/grid-column/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the grid-column shorthand property.\n *\n * Reconstructs `grid-column` from `grid-column-start` and `grid-column-end`.\n *\n * Rules:\n * - Both must be present\n * - If end is auto or default, can use just start\n * - Otherwise use start / end\n */\nexport const gridColumnCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"grid-column\",\n    longhands: [\"grid-column-start\", \"grid-column-end\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const start = properties[\"grid-column-start\"];\n    const end = properties[\"grid-column-end\"];\n\n    // Both must be present\n    if (!start || !end) return undefined;\n\n    // If end is auto, can omit it\n    if (end === \"auto\") return start;\n\n    // Check if end is the default based on start\n    // If start is a span, default end is auto\n    // If start is a named line, default end would be auto\n    // For now, simplify: if end is auto or same as start, omit it\n    if (end === start) return start;\n\n    // Both values needed\n    return `${start} / ${end}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"grid-column-start\"] && properties[\"grid-column-end\"]);\n  },\n});\n","// b_path:: src/handlers/grid-column/expand.ts\n\nimport { getDefaultEnd, parseGridLine } from \"@/internal/grid-line\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'grid-column' CSS shorthand property\n *\n * Expands grid-column into grid-column-start and grid-column-end.\n *\n * @example\n * ```typescript\n * gridColumnHandler.expand('2'); // { 'grid-column-start': '2', 'grid-column-end': 'auto' }\n * gridColumnHandler.expand('2 / 4'); // { 'grid-column-start': '2', 'grid-column-end': '4' }\n * gridColumnHandler.expand('span 3'); // { 'grid-column-start': 'span 3', 'grid-column-end': 'auto' }\n * ```\n */\nexport const gridColumnHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"grid-column\",\n    longhands: [\"grid-column-start\", \"grid-column-end\"],\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"grid-column-start\": value,\n        \"grid-column-end\": value,\n      };\n    }\n\n    // Split values on slash\n    const parts = value.trim().split(/\\s*\\/\\s*/);\n\n    // Validate part count - max 2 parts\n    if (parts.length > 2) {\n      return undefined;\n    }\n\n    // Handle single value\n    if (parts.length === 1) {\n      const startValue = parts[0].trim();\n      if (!parseGridLine(startValue)) {\n        return undefined;\n      }\n      const endValue = getDefaultEnd(startValue);\n      return {\n        \"grid-column-start\": startValue,\n        \"grid-column-end\": endValue,\n      };\n    }\n\n    // Handle two values\n    if (parts.length === 2) {\n      const startValue = parts[0].trim();\n      const endValue = parts[1].trim();\n      if (!parseGridLine(startValue) || !parseGridLine(endValue)) {\n        return undefined;\n      }\n      return {\n        \"grid-column-start\": startValue,\n        \"grid-column-end\": endValue,\n      };\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    return gridColumnHandler.expand(value) !== undefined;\n  },\n});\n\nexport default (value: string): Record<string, string> | undefined => {\n  return gridColumnHandler.expand(value);\n};\n","// b_path:: src/handlers/grid-row/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the grid-row shorthand property.\n *\n * Reconstructs `grid-row` from `grid-row-start` and `grid-row-end`.\n *\n * Rules:\n * - Both must be present\n * - If end is auto or default, can use just start\n * - Otherwise use start / end\n */\nexport const gridRowCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"grid-row\",\n    longhands: [\"grid-row-start\", \"grid-row-end\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const start = properties[\"grid-row-start\"];\n    const end = properties[\"grid-row-end\"];\n\n    // Both must be present\n    if (!start || !end) return undefined;\n\n    // If end is auto, can omit it\n    if (end === \"auto\") return start;\n\n    // Check if end is the same as start\n    if (end === start) return start;\n\n    // Both values needed\n    return `${start} / ${end}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"grid-row-start\"] && properties[\"grid-row-end\"]);\n  },\n});\n","// b_path:: src/handlers/grid-row/expand.ts\n\nimport { getDefaultEnd, parseGridLine } from \"@/internal/grid-line\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'grid-row' CSS shorthand property\n *\n * Expands grid-row into grid-row-start and grid-row-end.\n *\n * @example\n * ```typescript\n * gridRowHandler.expand('2'); // { 'grid-row-start': '2', 'grid-row-end': 'auto' }\n * gridRowHandler.expand('2 / 4'); // { 'grid-row-start': '2', 'grid-row-end': '4' }\n * gridRowHandler.expand('span 3'); // { 'grid-row-start': 'span 3', 'grid-row-end': 'auto' }\n * ```\n */\nexport const gridRowHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"grid-row\",\n    longhands: [\"grid-row-start\", \"grid-row-end\"],\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"grid-row-start\": value,\n        \"grid-row-end\": value,\n      };\n    }\n\n    // Split values on slash\n    const parts = value.trim().split(/\\s*\\/\\s*/);\n\n    // Validate part count - max 2 parts\n    if (parts.length > 2) {\n      return undefined;\n    }\n\n    // Handle single value\n    if (parts.length === 1) {\n      const startValue = parts[0].trim();\n      if (!parseGridLine(startValue)) {\n        return undefined;\n      }\n      const endValue = getDefaultEnd(startValue);\n      return {\n        \"grid-row-start\": startValue,\n        \"grid-row-end\": endValue,\n      };\n    }\n\n    // Handle two values\n    if (parts.length === 2) {\n      const startValue = parts[0].trim();\n      const endValue = parts[1].trim();\n      if (!parseGridLine(startValue) || !parseGridLine(endValue)) {\n        return undefined;\n      }\n      return {\n        \"grid-row-start\": startValue,\n        \"grid-row-end\": endValue,\n      };\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    return gridRowHandler.expand(value) !== undefined;\n  },\n});\n\nexport default (value: string): Record<string, string> | undefined => {\n  return gridRowHandler.expand(value);\n};\n","// b_path:: src/handlers/list-style/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the list-style shorthand property.\n *\n * Reconstructs `list-style` from `list-style-type`, `list-style-position`, and `list-style-image`.\n *\n * Rules:\n * - All three must be present\n * - If all are defaults, can use just type or omit values matching defaults\n * - Order: type position image (standard order)\n * - Special case: if type=none and image=none, can just output 'none'\n */\nexport const listStyleCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"list-style\",\n    longhands: [\"list-style-type\", \"list-style-position\", \"list-style-image\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const type = properties[\"list-style-type\"];\n    const position = properties[\"list-style-position\"];\n    const image = properties[\"list-style-image\"];\n\n    // All three must be present\n    if (!type || !position || !image) return undefined;\n\n    // Special case: both type and image are 'none' with default position\n    if (type === \"none\" && image === \"none\" && position === \"outside\") {\n      return \"none\";\n    }\n\n    // Build the collapsed value, omitting defaults when possible\n    const parts: string[] = [];\n    const isDefaultType = type === \"disc\";\n    const isDefaultPosition = position === \"outside\";\n    const isDefaultImage = image === \"none\";\n\n    // Include non-default values, or if all are defaults, include type\n    if (!isDefaultType) parts.push(type);\n    if (!isDefaultPosition) parts.push(position);\n    if (!isDefaultImage) parts.push(image);\n\n    // If all were defaults, we need at least one value - use type\n    if (parts.length === 0) parts.push(type);\n\n    return parts.join(\" \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(\n      properties[\"list-style-type\"] &&\n      properties[\"list-style-position\"] &&\n      properties[\"list-style-image\"]\n    );\n  },\n});\n","// b_path:: src/handlers/list-style/expand.ts\n\nimport { cssUrlRegex } from \"@/internal/color-utils\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\nconst POSITION = /^(inside|outside)$/i;\nconst IMAGE = new RegExp(`^(${cssUrlRegex().source})$`, \"i\");\nconst COMMON_TYPE =\n  /^(disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman|lower-greek|lower-alpha|lower-latin|upper-alpha|upper-latin|armenian|georgian|none)$/i;\nconst IDENT = /^[-_a-zA-Z][-_a-zA-Z0-9]*$/;\nconst STRING_VALUE = /^[\"'].*[\"']$/;\n\n/**\n * Property handler for the 'list-style' CSS shorthand property\n *\n * Expands list-style into list-style-type, list-style-position, and list-style-image.\n *\n * @example\n * ```typescript\n * listStyleHandler.expand('none'); // { 'list-style-type': 'none', 'list-style-position': 'outside', 'list-style-image': 'none' }\n * listStyleHandler.expand('disc inside'); // { 'list-style-type': 'disc', 'list-style-position': 'inside', 'list-style-image': 'none' }\n * listStyleHandler.expand('url(bullet.png)'); // { 'list-style-type': 'disc', 'list-style-position': 'outside', 'list-style-image': 'url(bullet.png)' }\n * ```\n */\nexport const listStyleHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"list-style\",\n    longhands: [\"list-style-type\", \"list-style-position\", \"list-style-image\"],\n    defaults: {\n      \"list-style-type\": \"disc\",\n      \"list-style-position\": \"outside\",\n      \"list-style-image\": \"none\",\n    },\n    category: \"typography\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    const normalizedValue = normalizeColor(value);\n\n    // Special case: \"none\" alone sets both type and image to none, position to default\n    if (normalizedValue === \"none\") {\n      return sortProperties({\n        \"list-style-type\": \"none\",\n        \"list-style-position\": \"outside\",\n        \"list-style-image\": \"none\",\n      });\n    }\n\n    const values = normalizedValue.split(/\\s+/);\n\n    if (values.length === 1 && KEYWORD.test(values[0])) {\n      return sortProperties({\n        \"list-style-type\": values[0],\n        \"list-style-position\": values[0],\n        \"list-style-image\": values[0],\n      });\n    }\n\n    // Start with defaults - list-style shorthand resets all properties\n    const result: Record<string, string> = {\n      \"list-style-type\": \"disc\",\n      \"list-style-position\": \"outside\",\n      \"list-style-image\": \"none\",\n    };\n\n    // Track what was explicitly set to detect duplicates\n    const explicitlySet = {\n      type: false,\n      position: false,\n      image: false,\n    };\n\n    for (let i = 0; i < values.length; i++) {\n      const v = values[i];\n\n      if (POSITION.test(v)) {\n        if (explicitlySet.position) return;\n        result[\"list-style-position\"] = v;\n        explicitlySet.position = true;\n      } else if (IMAGE.test(v)) {\n        if (explicitlySet.image) return;\n        result[\"list-style-image\"] = v;\n        explicitlySet.image = true;\n      } else if (COMMON_TYPE.test(v)) {\n        if (explicitlySet.type) return;\n        result[\"list-style-type\"] = v;\n        explicitlySet.type = true;\n      } else {\n        // Custom counter-style identifier or string value\n        if (IDENT.test(v) || STRING_VALUE.test(v)) {\n          if (explicitlySet.type) return;\n          result[\"list-style-type\"] = v;\n          explicitlySet.type = true;\n        } else {\n          return;\n        }\n      }\n    }\n\n    return sortProperties(result);\n  },\n\n  validate: (value: string): boolean => {\n    return listStyleHandler.expand(value) !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default function listStyle(value: string): Record<string, string> | undefined {\n  return listStyleHandler.expand(value);\n}\n","// b_path:: src/handlers/mask/mask-layers.ts\n\nimport * as csstree from \"@eslint/css-tree\";\nimport type { MaskLayer, MaskResult } from \"@/core/schema\";\nimport { isPositionValueNode, isSizeValueNode } from \"@/internal/is-value-node\";\nimport { hasTopLevelCommas, parseLayersGeneric } from \"@/internal/layer-parser-utils\";\n\n// CSS default values for mask properties\nexport const MASK_DEFAULTS = {\n  image: \"none\",\n  mode: \"match-source\",\n  position: \"0% 0%\",\n  size: \"auto\",\n  repeat: \"repeat\",\n  origin: \"border-box\",\n  clip: \"border-box\",\n  composite: \"add\",\n} as const;\n\n/**\n * Detects if a mask value needs advanced parsing (multi-layer masks)\n */\nexport function needsAdvancedParser(value: string): boolean {\n  return hasTopLevelCommas(value);\n}\n\n/**\n * Parses a complex mask value using css-tree AST parsing\n */\nexport function parseMaskLayers(value: string): MaskResult | undefined {\n  const layers = parseLayersGeneric(value, parseSingleLayer);\n  return layers ? { layers } : undefined;\n}\n\n/**\n * Parses a single mask layer using css-tree AST parsing\n */\nfunction parseSingleLayer(layerValue: string): MaskLayer | undefined {\n  return parseSingleLayerWithCssTree(layerValue);\n}\n\n/**\n * Parses a single mask layer using css-tree AST parsing\n */\nfunction parseSingleLayerWithCssTree(layerValue: string): MaskLayer | undefined {\n  const result: MaskLayer = {};\n\n  const ast = csstree.parse(layerValue.trim(), { context: \"value\" });\n\n  // Collect all child nodes from the Value node\n  const children: csstree.CssNode[] = [];\n  csstree.walk(ast, {\n    visit: \"Value\",\n    enter: (node: csstree.CssNode) => {\n      if (node.type === \"Value\" && node.children) {\n        node.children.forEach((child) => {\n          children.push(child);\n        });\n      }\n    },\n  });\n\n  // Process children in order, handling position/size parsing\n  const isValid = processCssChildren(children, result);\n\n  // Return undefined if there were unrecognized tokens (stricter error handling)\n  return isValid ? result : undefined;\n}\n\n/**\n * Processes CSS AST children sequentially to extract mask properties\n *\n * This function handles the complex parsing of CSS mask layer syntax,\n * including position/size combinations separated by \"/\", various keyword types,\n * and proper ordering according to CSS specifications.\n */\nfunction processCssChildren(children: csstree.CssNode[], result: MaskLayer): boolean {\n  let i = 0;\n  let hasPositionSize = false;\n  let hasUnrecognizedToken = false;\n\n  while (i < children.length) {\n    const child = children[i];\n\n    // Skip whitespace and operators (except \"/\")\n    if (child.type === \"WhiteSpace\") {\n      i++;\n      continue;\n    }\n\n    if (child.type === \"Operator\" && (child as csstree.Operator).value !== \"/\") {\n      i++;\n      continue;\n    }\n\n    // Handle mask-image (url(), none, or image functions like gradients)\n    if (child.type === \"Url\" && !result.image) {\n      result.image = `url(${(child as csstree.Url).value})`;\n      i++;\n      continue;\n    }\n\n    if (child.type === \"Function\") {\n      const funcNode = child as csstree.FunctionNode;\n      if (\n        [\n          \"linear-gradient\",\n          \"radial-gradient\",\n          \"conic-gradient\",\n          \"repeating-linear-gradient\",\n          \"repeating-radial-gradient\",\n          \"repeating-conic-gradient\",\n          \"image\",\n          \"image-set\",\n          \"cross-fade\",\n          \"paint\",\n          \"element\",\n        ].includes(funcNode.name)\n      ) {\n        if (!result.image) {\n          result.image = csstree.generate(child);\n        }\n        i++;\n        continue;\n      }\n    }\n\n    if (\n      child.type === \"Identifier\" &&\n      (child as csstree.Identifier).name === \"none\" &&\n      !result.image\n    ) {\n      result.image = \"none\";\n      i++;\n      continue;\n    }\n\n    // Handle position and size (complex parsing needed)\n    if (\n      !hasPositionSize &&\n      ((child.type === \"Operator\" && (child as csstree.Operator).value === \"/\") ||\n        isPositionValueNode(child, [\"left\", \"center\", \"right\", \"top\", \"bottom\"]))\n    ) {\n      const positionParts: string[] = [];\n      const sizeParts: string[] = [];\n      let _hasSlash = false;\n\n      // Check if we start with \"/\"\n      if (child.type === \"Operator\" && (child as csstree.Operator).value === \"/\") {\n        _hasSlash = true;\n        i++; // skip \"/\"\n\n        // Collect size parts\n        while (i < children.length) {\n          const currentChild = children[i];\n          if (currentChild.type === \"WhiteSpace\") {\n            i++;\n            continue;\n          }\n          if (isSizeValueNode(currentChild, [\"auto\", \"cover\", \"contain\"])) {\n            sizeParts.push(csstree.generate(currentChild));\n            i++;\n          } else {\n            break;\n          }\n        }\n      } else {\n        // Collect position parts until we hit \"/\" or a non-position node\n        while (i < children.length) {\n          const currentChild = children[i];\n          if (currentChild.type === \"WhiteSpace\") {\n            i++;\n            continue;\n          }\n\n          if (\n            currentChild.type === \"Operator\" &&\n            (currentChild as csstree.Operator).value === \"/\"\n          ) {\n            _hasSlash = true;\n            i++; // skip \"/\"\n\n            // Collect size parts\n            while (i < children.length) {\n              const sizeChild = children[i];\n              if (sizeChild.type === \"WhiteSpace\") {\n                i++;\n                continue;\n              }\n              if (isSizeValueNode(sizeChild, [\"auto\", \"cover\", \"contain\"])) {\n                sizeParts.push(csstree.generate(sizeChild));\n                i++;\n              } else {\n                break;\n              }\n            }\n            break;\n          } else if (\n            isPositionValueNode(currentChild, [\"left\", \"center\", \"right\", \"top\", \"bottom\"])\n          ) {\n            positionParts.push(csstree.generate(currentChild));\n            i++;\n          } else {\n            break;\n          }\n        }\n      }\n\n      if (positionParts.length > 0) {\n        result.position = positionParts.join(\" \");\n      }\n      if (sizeParts.length > 0) {\n        result.size = sizeParts.join(\" \");\n      }\n\n      hasPositionSize = true;\n      continue;\n    }\n\n    // Handle repeat values\n    // Note: repeat-x and repeat-y are supported for compatibility with background-repeat,\n    // even though the mask-repeat spec technically only allows [repeat|no-repeat|round|space]{1,2}\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if ([\"repeat\", \"repeat-x\", \"repeat-y\", \"space\", \"round\", \"no-repeat\"].includes(name)) {\n        if (!result.repeat) {\n          let repeat = name;\n          i++;\n\n          // Check for second repeat value\n          if (i < children.length && children[i].type === \"Identifier\") {\n            const nextName = (children[i] as csstree.Identifier).name;\n            if (\n              [\"repeat\", \"repeat-x\", \"repeat-y\", \"space\", \"round\", \"no-repeat\"].includes(nextName)\n            ) {\n              repeat += ` ${nextName}`;\n              i++;\n            }\n          }\n\n          result.repeat = repeat;\n        } else {\n          i++;\n        }\n        continue;\n      }\n    }\n\n    // Handle mode keywords\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if ([\"alpha\", \"luminance\", \"match-source\"].includes(name)) {\n        if (!result.mode) {\n          result.mode = name;\n        }\n        i++;\n        continue;\n      }\n    }\n\n    // Handle composite keywords\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if ([\"add\", \"subtract\", \"intersect\", \"exclude\"].includes(name)) {\n        if (!result.composite) {\n          result.composite = name;\n        }\n        i++;\n        continue;\n      }\n    }\n\n    // Handle geometry-box values (origin/clip)\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if (\n        [\"border-box\", \"padding-box\", \"content-box\", \"fill-box\", \"stroke-box\", \"view-box\"].includes(\n          name\n        )\n      ) {\n        if (!result.origin) {\n          result.origin = name;\n        } else if (!result.clip) {\n          result.clip = name;\n        }\n        i++;\n        continue;\n      }\n    }\n\n    // Handle \"no-clip\" keyword for mask-clip\n    if (child.type === \"Identifier\") {\n      const name = (child as csstree.Identifier).name;\n      if (name === \"no-clip\") {\n        if (!result.clip) {\n          result.clip = \"no-clip\";\n        }\n        i++;\n        continue;\n      }\n    }\n\n    // Skip unrecognized nodes - mark as having unrecognized token for stricter error handling\n    hasUnrecognizedToken = true;\n    i++;\n  }\n\n  // Special handling for origin/clip: if a layer specifies only one box value,\n  // it applies to both origin and clip (CSS Masking spec behavior)\n  if (result.origin !== undefined && result.clip === undefined) {\n    result.clip = MASK_DEFAULTS.clip; // Default to border-box, not origin value\n  }\n\n  return !hasUnrecognizedToken;\n}\n\n/**\n * Reconstructs final CSS properties from layer objects\n */\nexport function reconstructLayers(layers: MaskLayer[]): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  // Collect all layer values for each property\n  const properties = {\n    \"mask-image\": layers.map((l) => l.image || MASK_DEFAULTS.image),\n    \"mask-mode\": layers.map((l) => l.mode || MASK_DEFAULTS.mode),\n    \"mask-position\": layers.map((l) => l.position || MASK_DEFAULTS.position),\n    \"mask-size\": layers.map((l) => l.size || MASK_DEFAULTS.size),\n    \"mask-repeat\": layers.map((l) => l.repeat || MASK_DEFAULTS.repeat),\n    \"mask-origin\": layers.map((l) => l.origin || MASK_DEFAULTS.origin),\n    \"mask-clip\": layers.map((l) => l.clip || MASK_DEFAULTS.clip),\n    \"mask-composite\": layers.map((l) => l.composite || MASK_DEFAULTS.composite),\n  };\n\n  // Join layer values with commas\n  Object.entries(properties).forEach(([property, values]) => {\n    result[property] = values.join(\", \");\n  });\n\n  return result;\n}\n","// b_path:: src/handlers/mask/collapse-constants.ts\n\nimport { MASK_DEFAULTS as MASK_EXPAND_DEFAULTS } from \"./mask-layers\";\n\n/**\n * Default values for mask properties per CSS specification.\n * These values can be omitted when collapsing.\n */\nexport const MASK_DEFAULTS = {\n  image: MASK_EXPAND_DEFAULTS.image,\n  mode: MASK_EXPAND_DEFAULTS.mode,\n  position: MASK_EXPAND_DEFAULTS.position,\n  size: MASK_EXPAND_DEFAULTS.size,\n  repeat: MASK_EXPAND_DEFAULTS.repeat,\n  origin: MASK_EXPAND_DEFAULTS.origin,\n  clip: MASK_EXPAND_DEFAULTS.clip,\n  composite: MASK_EXPAND_DEFAULTS.composite,\n} as const;\n\n/**\n * Checks if a value is the default for a given property\n */\nexport function isDefault(property: keyof typeof MASK_DEFAULTS, value: string): boolean {\n  return MASK_DEFAULTS[property] === value;\n}\n\n/**\n * Checks if all properties in a layer are at their defaults\n */\nexport function isDefaultLayer(layer: {\n  image?: string;\n  mode?: string;\n  position?: string;\n  size?: string;\n  repeat?: string;\n  origin?: string;\n  clip?: string;\n  composite?: string;\n}): boolean {\n  return (\n    (!layer.image || isDefault(\"image\", layer.image)) &&\n    (!layer.mode || isDefault(\"mode\", layer.mode)) &&\n    (!layer.position || isDefault(\"position\", layer.position)) &&\n    (!layer.size || isDefault(\"size\", layer.size)) &&\n    (!layer.repeat || isDefault(\"repeat\", layer.repeat)) &&\n    (!layer.origin || isDefault(\"origin\", layer.origin)) &&\n    (!layer.clip || isDefault(\"clip\", layer.clip)) &&\n    (!layer.composite || isDefault(\"composite\", layer.composite))\n  );\n}\n","// b_path:: src/handlers/mask/collapse-layer.ts\n\nimport type { MaskLayer } from \"@/core/schema\";\nimport { isDefault, MASK_DEFAULTS } from \"./collapse-constants\";\n\n/**\n * Collapses a single mask layer into shorthand notation.\n *\n * Rules:\n * - Default values can be omitted\n * - Size must follow position with / separator\n * - Order matters for some properties\n * - Empty layers return undefined\n */\nexport function collapseSingleLayer(layer: MaskLayer): string | undefined {\n  const parts: string[] = [];\n\n  // Add image if not default\n  if (layer.image && !isDefault(\"image\", layer.image)) {\n    parts.push(layer.image);\n  }\n\n  // Add position (and size if present)\n  const hasNonDefaultPosition = layer.position && !isDefault(\"position\", layer.position);\n  const hasNonDefaultSize = layer.size && !isDefault(\"size\", layer.size);\n\n  if (hasNonDefaultPosition || hasNonDefaultSize) {\n    // Position/size must be together if either is non-default\n    const position = layer.position || MASK_DEFAULTS.position;\n    const positionPart = hasNonDefaultSize ? `${position} / ${layer.size}` : position;\n    parts.push(positionPart);\n  }\n\n  // Add repeat if not default\n  if (layer.repeat && !isDefault(\"repeat\", layer.repeat)) {\n    parts.push(layer.repeat);\n  }\n\n  // Add origin/clip (special handling - they can be the same value)\n  const hasNonDefaultOrigin = layer.origin && !isDefault(\"origin\", layer.origin);\n  const hasNonDefaultClip = layer.clip && !isDefault(\"clip\", layer.clip);\n\n  if (hasNonDefaultOrigin && hasNonDefaultClip) {\n    // Both specified - check if same\n    if (layer.origin === layer.clip) {\n      parts.push(layer.origin!);\n    } else {\n      parts.push(layer.origin!);\n      parts.push(layer.clip!);\n    }\n  } else if (hasNonDefaultOrigin) {\n    parts.push(layer.origin!);\n  } else if (hasNonDefaultClip) {\n    // Clip alone needs both values\n    parts.push(MASK_DEFAULTS.origin);\n    parts.push(layer.clip!);\n  }\n\n  // Add mode if not default\n  if (layer.mode && !isDefault(\"mode\", layer.mode)) {\n    parts.push(layer.mode);\n  }\n\n  // Add composite if not default\n  if (layer.composite && !isDefault(\"composite\", layer.composite)) {\n    parts.push(layer.composite);\n  }\n\n  // If nothing was added, return undefined (all defaults)\n  if (parts.length === 0) {\n    return undefined;\n  }\n\n  return parts.join(\" \");\n}\n","// b_path:: src/handlers/mask/collapse-parser.ts\n\nimport type { MaskLayer } from \"@/core/schema\";\n\n/**\n * Parses mask longhand properties into layer structure.\n * Properties with multiple comma-separated values are split into layers.\n */\nexport function parseMaskProperties(properties: Record<string, string>): {\n  layers: MaskLayer[];\n} {\n  // Get all layer properties\n  const image = properties[\"mask-image\"];\n  const mode = properties[\"mask-mode\"];\n  const position = properties[\"mask-position\"];\n  const size = properties[\"mask-size\"];\n  const repeat = properties[\"mask-repeat\"];\n  const origin = properties[\"mask-origin\"];\n  const clip = properties[\"mask-clip\"];\n  const composite = properties[\"mask-composite\"];\n\n  // If no properties, return empty\n  if (!image && !mode && !position && !size && !repeat && !origin && !clip && !composite) {\n    return { layers: [] };\n  }\n\n  // Split each property by commas to get layers\n  const imageLayers = splitLayers(image);\n  const modeLayers = splitLayers(mode);\n  const positionLayers = splitLayers(position);\n  const sizeLayers = splitLayers(size);\n  const repeatLayers = splitLayers(repeat);\n  const originLayers = splitLayers(origin);\n  const clipLayers = splitLayers(clip);\n  const compositeLayers = splitLayers(composite);\n\n  // Number of layers is the maximum of all properties\n  const layerCount = Math.max(\n    imageLayers.length,\n    modeLayers.length,\n    positionLayers.length,\n    sizeLayers.length,\n    repeatLayers.length,\n    originLayers.length,\n    clipLayers.length,\n    compositeLayers.length\n  );\n\n  // Build layer objects\n  const layers: MaskLayer[] = [];\n  for (let i = 0; i < layerCount; i++) {\n    const layer: MaskLayer = {};\n\n    if (imageLayers[i]) layer.image = imageLayers[i];\n    if (modeLayers[i]) layer.mode = modeLayers[i];\n    if (positionLayers[i]) layer.position = positionLayers[i];\n    if (sizeLayers[i]) layer.size = sizeLayers[i];\n    if (repeatLayers[i]) layer.repeat = repeatLayers[i];\n    if (originLayers[i]) layer.origin = originLayers[i];\n    if (clipLayers[i]) layer.clip = clipLayers[i];\n    if (compositeLayers[i]) layer.composite = compositeLayers[i];\n\n    layers.push(layer);\n  }\n\n  return { layers };\n}\n\n/**\n * Splits a property value by commas, handling nested functions.\n * Returns empty array if value is undefined.\n */\nfunction splitLayers(value: string | undefined): string[] {\n  if (!value) return [];\n\n  const layers: string[] = [];\n  let current = \"\";\n  let depth = 0;\n\n  for (let i = 0; i < value.length; i++) {\n    const char = value[i];\n\n    if (char === \"(\") {\n      depth++;\n      current += char;\n    } else if (char === \")\") {\n      depth--;\n      current += char;\n    } else if (char === \",\" && depth === 0) {\n      layers.push(current.trim());\n      current = \"\";\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    layers.push(current.trim());\n  }\n\n  return layers;\n}\n","// b_path:: src/handlers/mask/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\nimport { collapseSingleLayer } from \"./collapse-layer\";\nimport { parseMaskProperties } from \"./collapse-parser\";\n\n/**\n * Collapse handler for the mask shorthand property.\n *\n * Reconstructs `mask` from its 8 longhand properties.\n *\n * Rules:\n * - Supports multi-layer masks (comma-separated)\n * - Default values are omitted where possible\n * - Special handling for position/size (size needs / separator)\n * - origin and clip can share a value if identical\n */\nexport const maskCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"mask\",\n    longhands: [\n      \"mask-image\",\n      \"mask-mode\",\n      \"mask-position\",\n      \"mask-size\",\n      \"mask-repeat\",\n      \"mask-origin\",\n      \"mask-clip\",\n      \"mask-composite\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    // Parse longhands into layer structure\n    const { layers } = parseMaskProperties(properties);\n\n    // Need at least one layer\n    if (layers.length === 0) {\n      return undefined;\n    }\n\n    // Collapse each layer\n    const layerStrings: string[] = [];\n\n    for (const layer of layers) {\n      const collapsed = collapseSingleLayer(layer);\n      if (collapsed) {\n        layerStrings.push(collapsed);\n      }\n    }\n\n    // If no layers collapsed, return undefined\n    if (layerStrings.length === 0) {\n      return undefined;\n    }\n\n    // Join layers with comma separator\n    return layerStrings.join(\", \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Need at least one mask property\n    return !!(\n      properties[\"mask-image\"] ||\n      properties[\"mask-mode\"] ||\n      properties[\"mask-position\"] ||\n      properties[\"mask-size\"] ||\n      properties[\"mask-repeat\"] ||\n      properties[\"mask-origin\"] ||\n      properties[\"mask-clip\"] ||\n      properties[\"mask-composite\"]\n    );\n  },\n});\n","// b_path:: src/handlers/mask/expand.ts\n\n// NOTE: This handler contains complex multi-layer parsing logic that is a candidate\n// for future refactoring. Masking syntax parsing could be simplified with better abstractions.\n\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { needsAdvancedParser, parseMaskLayers, reconstructLayers } from \"./mask-layers\";\n\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\n\nfunction parseMaskValue(value: string): Record<string, string> | undefined {\n  // Trim the input value\n  const trimmedValue = value.trim();\n\n  // Handle global keywords first\n  if (KEYWORD.test(trimmedValue)) {\n    return {\n      \"mask-image\": trimmedValue,\n      \"mask-mode\": trimmedValue,\n      \"mask-position\": trimmedValue,\n      \"mask-size\": trimmedValue,\n      \"mask-repeat\": trimmedValue,\n      \"mask-origin\": trimmedValue,\n      \"mask-clip\": trimmedValue,\n      \"mask-composite\": trimmedValue,\n    };\n  }\n\n  // Check for multi-layer syntax\n  if (needsAdvancedParser(trimmedValue)) {\n    const result = parseMaskLayers(trimmedValue);\n    if (result) {\n      return reconstructLayers(result.layers);\n    }\n    return undefined;\n  }\n\n  // For single-layer cases, use the advanced parser as well\n  // since mask syntax is complex and the parser handles it well\n  const result = parseMaskLayers(trimmedValue);\n  if (result) {\n    return reconstructLayers(result.layers);\n  }\n\n  return undefined;\n}\n\n/**\n * Property handler for the 'mask' CSS shorthand property\n *\n * Expands mask into mask-image, mask-mode, mask-position, mask-size,\n * mask-repeat, mask-origin, mask-clip, and mask-composite.\n *\n * @example\n * ```typescript\n * maskHandler.expand('url(mask.svg)');\n * maskHandler.expand('linear-gradient(black, transparent) center / contain');\n * ```\n */\nexport const maskHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"mask\",\n    longhands: [\n      \"mask-image\",\n      \"mask-mode\",\n      \"mask-position\",\n      \"mask-size\",\n      \"mask-repeat\",\n      \"mask-origin\",\n      \"mask-clip\",\n      \"mask-composite\",\n    ],\n    category: \"visual\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    return parseMaskValue(value);\n  },\n\n  validate: (value: string): boolean => {\n    return maskHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function mask(value: string): Record<string, string> | undefined {\n  return maskHandler.expand(value);\n}\n","// b_path:: src/handlers/offset/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Default values for offset properties per CSS specification.\n */\nconst OFFSET_DEFAULTS = {\n  position: \"normal\",\n  path: \"none\",\n  distance: \"0\",\n  rotate: \"auto\",\n  anchor: \"auto\",\n} as const;\n\n/**\n * Collapse handler for the offset shorthand property.\n *\n * Reconstructs `offset` from its 5 longhand properties.\n *\n * Rules:\n * - Default values can be omitted\n * - Syntax: [position]? [path]? [distance]? [rotate]? [/ anchor]?\n * - position must come first if present\n * - path must come before distance and rotate\n * - anchor is separated by / and comes at the end\n */\nexport const offsetCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"offset\",\n    longhands: [\n      \"offset-position\",\n      \"offset-path\",\n      \"offset-distance\",\n      \"offset-rotate\",\n      \"offset-anchor\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const position = properties[\"offset-position\"];\n    const path = properties[\"offset-path\"];\n    const distance = properties[\"offset-distance\"];\n    const rotate = properties[\"offset-rotate\"];\n    const anchor = properties[\"offset-anchor\"];\n\n    // Need at least one property\n    if (!position && !path && !distance && !rotate && !anchor) {\n      return undefined;\n    }\n\n    const mainParts: string[] = [];\n\n    // Add position if not default\n    if (position && position !== OFFSET_DEFAULTS.position) {\n      mainParts.push(position);\n    }\n\n    // Add path if not default\n    if (path && path !== OFFSET_DEFAULTS.path) {\n      mainParts.push(path);\n    }\n\n    // Add distance if not default\n    if (distance && distance !== OFFSET_DEFAULTS.distance) {\n      mainParts.push(distance);\n    }\n\n    // Add rotate if not default\n    if (rotate && rotate !== OFFSET_DEFAULTS.rotate) {\n      mainParts.push(rotate);\n    }\n\n    // Build final value with anchor if present\n    let result = mainParts.join(\" \");\n\n    // Add anchor if not default\n    if (anchor && anchor !== OFFSET_DEFAULTS.anchor) {\n      if (result) {\n        result += ` / ${anchor}`;\n      } else {\n        // Anchor only is unusual but valid\n        result = `/ ${anchor}`;\n      }\n    }\n\n    // If nothing was added, return undefined\n    if (!result) {\n      return undefined;\n    }\n\n    return result;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Need at least one offset property\n    return !!(\n      properties[\"offset-position\"] ||\n      properties[\"offset-path\"] ||\n      properties[\"offset-distance\"] ||\n      properties[\"offset-rotate\"] ||\n      properties[\"offset-anchor\"]\n    );\n  },\n});\n","// b_path:: src/internal/is-angle.ts\nconst ANGLE = /^(\\+|-)?([0-9]*\\.?[0-9]+)(deg|rad|turn|grad)$/i;\nconst ZERO = /^(\\+|-)?(0*\\.)?0+$/;\n\nexport default function isAngle(value: string): boolean {\n  return ANGLE.test(value) || ZERO.test(value);\n}\n","// b_path:: src/handlers/offset/expand.ts\n\n// NOTE: This handler contains complex path syntax and coordinate system parsing logic\n// (~273 lines) that is a candidate for future refactoring. The implementation handles\n// offset-position, offset-path (with path() and basic shapes), offset-distance,\n// offset-rotate, and offset-anchor with various coordinate systems. The parsing logic\n// is preserved as-is.\n\nimport isAngle from \"@/internal/is-angle\";\nimport isLength from \"@/internal/is-length\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\nfunction splitTopLevelSlash(input: string): [string, string?] | null {\n  let depth = 0;\n  let inQuotes = false;\n  let quoteChar = \"\";\n  let slashIndex = -1;\n\n  for (let i = 0; i < input.length; i++) {\n    const char = input[i];\n\n    if (!inQuotes && (char === '\"' || char === \"'\")) {\n      inQuotes = true;\n      quoteChar = char;\n    } else if (inQuotes && char === quoteChar) {\n      inQuotes = false;\n      quoteChar = \"\";\n    } else if (!inQuotes) {\n      if (char === \"(\") {\n        depth++;\n      } else if (char === \")\") {\n        depth--;\n      } else if (char === \"/\" && depth === 0) {\n        if (slashIndex !== -1) {\n          // More than one top-level slash\n          return null;\n        }\n        slashIndex = i;\n      }\n    }\n  }\n\n  if (slashIndex === -1) {\n    return [input.trim()];\n  }\n\n  const main = input.slice(0, slashIndex).trim();\n  const anchor = input.slice(slashIndex + 1).trim();\n  return [main, anchor];\n}\n\nfunction tokenizeRespectingFunctions(input: string): string[] {\n  const tokens: string[] = [];\n  let current = \"\";\n  let depth = 0;\n  let inQuotes = false;\n  let quoteChar = \"\";\n\n  for (let i = 0; i < input.length; i++) {\n    const char = input[i];\n\n    if (!inQuotes && (char === '\"' || char === \"'\")) {\n      inQuotes = true;\n      quoteChar = char;\n      current += char;\n    } else if (inQuotes && char === quoteChar) {\n      inQuotes = false;\n      quoteChar = \"\";\n      current += char;\n    } else if (!inQuotes) {\n      if (char === \"(\") {\n        depth++;\n        current += char;\n      } else if (char === \")\") {\n        depth--;\n        current += char;\n      } else if (char === \" \" && depth === 0) {\n        if (current.trim()) {\n          tokens.push(current.trim());\n          current = \"\";\n        }\n      } else {\n        current += char;\n      }\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    tokens.push(current.trim());\n  }\n\n  return tokens;\n}\n\nfunction isPositionKeyword(token: string): boolean {\n  return /^(auto|normal|left|right|top|bottom|center)$/i.test(token);\n}\n\nfunction parsePosition(tokens: string[]): { position: string; consumed: number } | null {\n  if (tokens.length === 0) return null;\n\n  // Two tokens: x y (check first to avoid ambiguity)\n  if (tokens.length >= 2) {\n    const first = tokens[0];\n    const second = tokens[1];\n    if (\n      (isPositionKeyword(first) || isLength(first)) &&\n      (isPositionKeyword(second) || isLength(second))\n    ) {\n      return { position: `${first} ${second}`, consumed: 2 };\n    }\n  }\n\n  // auto or normal\n  if (tokens[0] === \"auto\" || tokens[0] === \"normal\") {\n    return { position: tokens[0], consumed: 1 };\n  }\n\n  // Single keyword\n  if (isPositionKeyword(tokens[0])) {\n    return { position: tokens[0], consumed: 1 };\n  }\n\n  // Single length/% (horizontal center)\n  if (isLength(tokens[0])) {\n    return { position: tokens[0], consumed: 1 };\n  }\n\n  return null;\n}\n\nfunction parsePath(tokens: string[]): { path: string; consumed: number } | null {\n  if (tokens.length === 0) return null;\n\n  const token = tokens[0];\n\n  if (token === \"none\") {\n    return { path: \"none\", consumed: 1 };\n  }\n\n  if (token.startsWith(\"path(\") || token.startsWith(\"ray(\") || token.startsWith(\"url(\")) {\n    return { path: token, consumed: 1 };\n  }\n\n  return null;\n}\n\nfunction parseDistance(tokens: string[]): { distance: string; consumed: number } | null {\n  if (tokens.length === 0) return null;\n\n  if (isLength(tokens[0])) {\n    return { distance: tokens[0], consumed: 1 };\n  }\n\n  return null;\n}\n\nfunction parseRotate(tokens: string[]): { rotate: string; consumed: number } | null {\n  if (tokens.length === 0) return null;\n\n  // Check for compound forms first: auto <angle> or reverse <angle> or <angle> auto/reverse\n  if (tokens.length >= 2) {\n    const first = tokens[0];\n    const second = tokens[1];\n\n    if ((first === \"auto\" || first === \"reverse\") && isAngle(second)) {\n      return { rotate: `${first} ${second}`, consumed: 2 };\n    }\n    if (isAngle(first) && (second === \"auto\" || second === \"reverse\")) {\n      return { rotate: `${second} ${first}`, consumed: 2 };\n    }\n  }\n\n  // Single tokens\n  const token = tokens[0];\n\n  if (token === \"auto\" || token === \"reverse\") {\n    return { rotate: token, consumed: 1 };\n  }\n\n  if (isAngle(token)) {\n    return { rotate: token, consumed: 1 };\n  }\n\n  return null;\n}\n\nfunction parseAnchor(anchor: string): string | null {\n  if (!anchor) return null;\n\n  const tokens = tokenizeRespectingFunctions(anchor);\n\n  if (tokens.length === 1) {\n    if (tokens[0] === \"auto\" || isPositionKeyword(tokens[0])) {\n      return tokens[0];\n    }\n  }\n\n  if (tokens.length === 2) {\n    if (\n      (isPositionKeyword(tokens[0]) || isLength(tokens[0])) &&\n      (isPositionKeyword(tokens[1]) || isLength(tokens[1]))\n    ) {\n      return `${tokens[0]} ${tokens[1]}`;\n    }\n  }\n\n  return null;\n}\n\nfunction parseOffsetValue(value: string): Record<string, string> | undefined {\n  // Handle global keywords\n  if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n    return {\n      \"offset-position\": value,\n      \"offset-path\": value,\n      \"offset-distance\": value,\n      \"offset-rotate\": value,\n      \"offset-anchor\": value,\n    };\n  }\n\n  // Split on top-level slash\n  const slashSplit = splitTopLevelSlash(value);\n  if (!slashSplit) return undefined; // Invalid: multiple slashes\n\n  const [main, anchor] = slashSplit;\n\n  // Tokenize main part\n  const tokens = tokenizeRespectingFunctions(main);\n  if (tokens.length === 0) return undefined;\n\n  const result: Record<string, string> = {};\n\n  let index = 0;\n\n  // Try to parse position first\n  const positionResult = parsePosition(tokens.slice(index));\n  if (positionResult) {\n    result[\"offset-position\"] = positionResult.position;\n    index += positionResult.consumed;\n  }\n\n  // Try to parse path\n  const pathResult = parsePath(tokens.slice(index));\n  if (pathResult) {\n    result[\"offset-path\"] = pathResult.path;\n    index += pathResult.consumed;\n  } else {\n    // Path is required unless we have position only\n    if (index === 0) return undefined;\n  }\n\n  // Try to parse distance\n  const distanceResult = parseDistance(tokens.slice(index));\n  if (distanceResult) {\n    result[\"offset-distance\"] = distanceResult.distance;\n    index += distanceResult.consumed;\n  }\n\n  // Try to parse rotate\n  const rotateResult = parseRotate(tokens.slice(index));\n  if (rotateResult) {\n    result[\"offset-rotate\"] = rotateResult.rotate;\n    index += rotateResult.consumed;\n  }\n\n  // Check if all tokens consumed\n  if (index !== tokens.length) return undefined;\n\n  // Parse anchor if present\n  if (anchor) {\n    const parsedAnchor = parseAnchor(anchor);\n    if (parsedAnchor === null) return undefined;\n    result[\"offset-anchor\"] = parsedAnchor;\n  }\n\n  return result;\n}\n\nexport const offsetHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"offset\",\n    longhands: [\n      \"offset-position\",\n      \"offset-path\",\n      \"offset-distance\",\n      \"offset-rotate\",\n      \"offset-anchor\",\n    ],\n    defaults: {\n      \"offset-position\": \"normal\",\n      \"offset-path\": \"none\",\n      \"offset-distance\": \"0\",\n      \"offset-rotate\": \"auto\",\n      \"offset-anchor\": \"auto\",\n    },\n    category: \"visual\",\n  },\n\n  expand: (value: string) => parseOffsetValue(value),\n\n  validate: (value: string) => offsetHandler.expand(value) !== undefined,\n});\n\nexport default (value: string): Record<string, string> | undefined => {\n  return offsetHandler.expand(value);\n};\n","// b_path:: src/handlers/outline/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the outline shorthand property.\n *\n * Reconstructs `outline` from `outline-width`, `outline-style`, and `outline-color`.\n *\n * Rules:\n * - All three must be present\n * - Can omit defaults when appropriate\n * - Order: width style color\n */\nexport const outlineCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"outline\",\n    longhands: [\"outline-width\", \"outline-style\", \"outline-color\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const width = properties[\"outline-width\"];\n    const style = properties[\"outline-style\"];\n    const color = properties[\"outline-color\"];\n\n    // All three must be present\n    if (!width || !style || !color) return undefined;\n\n    const parts: string[] = [];\n\n    // Add non-default values\n    if (width !== \"medium\") parts.push(width);\n    if (style !== \"none\") parts.push(style);\n    if (color.toLowerCase() !== \"currentcolor\") parts.push(color);\n\n    // If all were defaults, we need at least one - use style\n    if (parts.length === 0) return style;\n\n    return parts.join(\" \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(\n      properties[\"outline-width\"] &&\n      properties[\"outline-style\"] &&\n      properties[\"outline-color\"]\n    );\n  },\n});\n","// b_path:: src/handlers/outline/expand.ts\n\nimport isColor from \"@/internal/is-color\";\nimport isLength from \"@/internal/is-length\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\nconst WIDTH = /^(thin|medium|thick)$/;\nconst STYLE = /^(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/i;\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\n\n/**\n * Property handler for the 'outline' CSS shorthand property\n *\n * Expands outline into outline-width, outline-style, and outline-color.\n *\n * @example\n * ```typescript\n * outlineHandler.expand('2px solid red'); // { 'outline-width': '2px', 'outline-style': 'solid', 'outline-color': 'red' }\n * outlineHandler.expand('dashed'); // { 'outline-width': 'medium', 'outline-style': 'dashed', 'outline-color': 'currentcolor' }\n * ```\n */\nexport const outlineHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"outline\",\n    longhands: [\"outline-width\", \"outline-style\", \"outline-color\"],\n    defaults: {\n      \"outline-width\": \"medium\",\n      \"outline-style\": \"none\",\n      \"outline-color\": \"currentcolor\",\n    },\n    category: \"visual\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    const values = normalizeColor(value).split(/\\s+/);\n\n    if (values.length > 3) return;\n    if (values.length === 1 && KEYWORD.test(values[0])) {\n      return sortProperties({\n        \"outline-width\": values[0],\n        \"outline-style\": values[0],\n        \"outline-color\": values[0],\n      });\n    }\n\n    const parsed: { width?: string; style?: string; color?: string } = {};\n    for (let i = 0; i < values.length; i++) {\n      const v = values[i];\n\n      if (isLength(v) || WIDTH.test(v)) {\n        if (parsed.width) return;\n        parsed.width = v;\n      } else if (STYLE.test(v)) {\n        if (parsed.style) return;\n        parsed.style = v;\n      } else if (isColor(v)) {\n        if (parsed.color) return;\n        parsed.color = v;\n      } else {\n        return;\n      }\n    }\n\n    // Use defaults for missing properties\n    // Per CSS spec, the default values for outline shorthand are:\n    //   width: 'medium', style: 'none', color: 'currentcolor'\n    // See: https://drafts.csswg.org/css-ui-4/#propdef-outline\n    return sortProperties({\n      \"outline-width\": parsed.width || \"medium\",\n      \"outline-style\": parsed.style || \"none\",\n      \"outline-color\": parsed.color || \"currentcolor\",\n    });\n  },\n\n  validate: (value: string): boolean => {\n    return outlineHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function outline(value: string): Record<string, string> | undefined {\n  return outlineHandler.expand(value);\n}\n","// b_path:: src/handlers/overflow/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the overflow shorthand property.\n *\n * Reconstructs `overflow` from `overflow-x` and `overflow-y`.\n *\n * Rules:\n * - If both values are the same: use single value\n * - If values differ: use two values (x y)\n * - If either is missing: cannot collapse\n */\nexport const overflowCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"overflow\",\n    longhands: [\"overflow-x\", \"overflow-y\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const x = properties[\"overflow-x\"];\n    const y = properties[\"overflow-y\"];\n\n    // Both must be present\n    if (!x || !y) return undefined;\n\n    // Same value - use single value syntax\n    if (x === y) return x;\n\n    // Different values - use two value syntax\n    return `${x} ${y}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"overflow-x\"] && properties[\"overflow-y\"]);\n  },\n});\n","// b_path:: src/handlers/overflow/expand.ts\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'overflow' CSS shorthand property\n *\n * Expands overflow into overflow-x and overflow-y.\n *\n * @example\n * ```typescript\n * overflowHandler.expand('hidden'); // { 'overflow-x': 'hidden', 'overflow-y': 'hidden' }\n * overflowHandler.expand('auto scroll'); // { 'overflow-x': 'auto', 'overflow-y': 'scroll' }\n * ```\n */\nexport const overflowHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"overflow\",\n    longhands: [\"overflow-x\", \"overflow-y\"],\n    category: \"visual\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"overflow-x\": value,\n        \"overflow-y\": value,\n      };\n    }\n\n    // Split values on whitespace\n    const values = value.trim().split(/\\s+/);\n\n    // Validate value count - max 2 values\n    if (values.length > 2) {\n      return undefined;\n    }\n\n    // Valid overflow values\n    const validValues = /^(visible|hidden|clip|scroll|auto)$/i;\n\n    // Handle single value - both x and y get the same value\n    if (values.length === 1) {\n      if (!validValues.test(values[0])) {\n        return undefined;\n      }\n      return {\n        \"overflow-x\": values[0],\n        \"overflow-y\": values[0],\n      };\n    }\n\n    // Handle two values - first=x, second=y\n    if (values.length === 2) {\n      if (!validValues.test(values[0]) || !validValues.test(values[1])) {\n        return undefined;\n      }\n      return {\n        \"overflow-x\": values[0],\n        \"overflow-y\": values[1],\n      };\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    const result = overflowHandler.expand(value);\n    return result !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default (value: string): Record<string, string> | undefined => {\n  return overflowHandler.expand(value);\n};\n","// b_path:: src/handlers/place-content/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the place-content shorthand property.\n *\n * Reconstructs `place-content` from `align-content` and `justify-content`.\n *\n * Rules:\n * - If both values are the same: use single value\n * - If values differ: use two values (align justify)\n * - If either is missing: cannot collapse\n */\nexport const placeContentCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"place-content\",\n    longhands: [\"align-content\", \"justify-content\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const align = properties[\"align-content\"];\n    const justify = properties[\"justify-content\"];\n\n    // Both must be present\n    if (!align || !justify) return undefined;\n\n    // Same value - use single value syntax\n    if (align === justify) return align;\n\n    // Different values - use two value syntax\n    return `${align} ${justify}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"align-content\"] && properties[\"justify-content\"]);\n  },\n});\n","// b_path:: src/internal/place-utils.ts\nexport function consolidatePlaceTokens(\n  value: string,\n  nextTokenPattern: RegExp\n): string[] | undefined {\n  const tokens = value.trim().split(/\\s+/);\n  const out: string[] = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const t = tokens[i];\n    if (/^(first|last)$/i.test(t) && i + 1 < tokens.length && /^baseline$/i.test(tokens[i + 1])) {\n      out.push(`${tokens[i]} ${tokens[i + 1]}`);\n      i++;\n      continue;\n    }\n    if (\n      /^(safe|unsafe)$/i.test(t) &&\n      i + 1 < tokens.length &&\n      nextTokenPattern.test(tokens[i + 1])\n    ) {\n      out.push(`${tokens[i]} ${tokens[i + 1]}`);\n      i++;\n      continue;\n    }\n    out.push(t);\n  }\n  return out.length <= 2 ? out : undefined;\n}\n","// b_path:: src/handlers/place-content/expand.ts\n\nimport { consolidatePlaceTokens } from \"@/internal/place-utils\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'place-content' CSS shorthand property\n *\n * Expands place-content into align-content and justify-content.\n *\n * @example\n * ```typescript\n * placeContentHandler.expand('center'); // { 'align-content': 'center', 'justify-content': 'center' }\n * placeContentHandler.expand('start space-between'); // { 'align-content': 'start', 'justify-content': 'space-between' }\n * ```\n */\nexport const placeContentHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"place-content\",\n    longhands: [\"align-content\", \"justify-content\"],\n    defaults: {\n      \"align-content\": \"normal\",\n      \"justify-content\": \"normal\",\n    },\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"align-content\": value,\n        \"justify-content\": value,\n      };\n    }\n\n    // Process tokens with lookahead for compound keywords\n    const processedValues = consolidatePlaceTokens(\n      value,\n      /^(center|start|end|flex-start|flex-end)$/i\n    );\n    if (!processedValues) {\n      return undefined;\n    }\n\n    // Validate processed values\n    const validValuePattern =\n      /^(normal|space-between|space-around|space-evenly|stretch|center|start|end|flex-start|flex-end|baseline|first baseline|last baseline|safe center|safe start|safe end|safe flex-start|safe flex-end|unsafe center|unsafe start|unsafe end|unsafe flex-start|unsafe flex-end)$/i;\n\n    for (const val of processedValues) {\n      if (!validValuePattern.test(val)) {\n        return undefined;\n      }\n    }\n\n    // Handle single value - both properties get the same value\n    if (processedValues.length === 1) {\n      return {\n        \"align-content\": processedValues[0],\n        \"justify-content\": processedValues[0],\n      };\n    }\n\n    // Handle two values - first=align-content, second=justify-content\n    if (processedValues.length === 2) {\n      return {\n        \"align-content\": processedValues[0],\n        \"justify-content\": processedValues[1],\n      };\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    const result = placeContentHandler.expand(value);\n    return result !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default (value: string): Record<string, string> | undefined => {\n  return placeContentHandler.expand(value);\n};\n","// b_path:: src/handlers/place-items/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the place-items shorthand property.\n *\n * Reconstructs `place-items` from `align-items` and `justify-items`.\n *\n * Rules:\n * - If both values are the same: use single value\n * - If values differ: use two values (align justify)\n * - If either is missing: cannot collapse\n */\nexport const placeItemsCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"place-items\",\n    longhands: [\"align-items\", \"justify-items\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const align = properties[\"align-items\"];\n    const justify = properties[\"justify-items\"];\n\n    // Both must be present\n    if (!align || !justify) return undefined;\n\n    // Same value - use single value syntax\n    if (align === justify) return align;\n\n    // Different values - use two value syntax\n    return `${align} ${justify}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"align-items\"] && properties[\"justify-items\"]);\n  },\n});\n","// b_path:: src/handlers/place-items/expand.ts\n\nimport { consolidatePlaceTokens } from \"@/internal/place-utils\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'place-items' CSS shorthand property\n *\n * Expands place-items into align-items and justify-items.\n *\n * @example\n * ```typescript\n * placeItemsHandler.expand('center'); // { 'align-items': 'center', 'justify-items': 'center' }\n * placeItemsHandler.expand('start end'); // { 'align-items': 'start', 'justify-items': 'end' }\n * ```\n */\nexport const placeItemsHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"place-items\",\n    longhands: [\"align-items\", \"justify-items\"],\n    defaults: {\n      \"align-items\": \"normal\",\n      \"justify-items\": \"legacy\",\n    },\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"align-items\": value,\n        \"justify-items\": value,\n      };\n    }\n\n    // Process tokens with lookahead for compound keywords\n    const processedValues = consolidatePlaceTokens(\n      value,\n      /^(center|start|end|self-start|self-end|flex-start|flex-end)$/i\n    );\n    if (!processedValues) {\n      return undefined;\n    }\n\n    // Helper functions for validation\n    const isValidAlignItemsValue = (val: string): boolean => {\n      return /^(normal|stretch|center|start|end|self-start|self-end|flex-start|flex-end|baseline|first baseline|last baseline|safe center|safe start|safe end|safe self-start|safe self-end|safe flex-start|safe flex-end|unsafe center|unsafe start|unsafe end|unsafe self-start|unsafe self-end|unsafe flex-start|unsafe flex-end)$/i.test(\n        val\n      );\n    };\n\n    const isValidJustifyItemsValue = (val: string): boolean => {\n      return /^(normal|stretch|center|start|end|self-start|self-end|flex-start|flex-end|baseline|first baseline|last baseline|left|right|safe center|safe start|safe end|safe self-start|safe self-end|safe flex-start|safe flex-end|unsafe center|unsafe start|unsafe end|unsafe self-start|unsafe self-end|unsafe flex-start|unsafe flex-end)$/i.test(\n        val\n      );\n    };\n\n    // Validate processed values\n    for (const val of processedValues) {\n      if (!isValidAlignItemsValue(val) && !isValidJustifyItemsValue(val)) {\n        return undefined;\n      }\n    }\n\n    // Handle single value - both properties get the same value, but left/right are invalid for single value\n    if (processedValues.length === 1) {\n      const val = processedValues[0];\n      if (val === \"left\" || val === \"right\") {\n        return undefined;\n      }\n      if (!isValidAlignItemsValue(val)) {\n        return undefined;\n      }\n      return {\n        \"align-items\": val,\n        \"justify-items\": val,\n      };\n    }\n\n    // Handle two values - first=align-items, second=justify-items\n    if (processedValues.length === 2) {\n      const [alignVal, justifyVal] = processedValues;\n      if (!isValidAlignItemsValue(alignVal) || alignVal === \"left\" || alignVal === \"right\") {\n        return undefined;\n      }\n      if (!isValidJustifyItemsValue(justifyVal)) {\n        return undefined;\n      }\n      return {\n        \"align-items\": alignVal,\n        \"justify-items\": justifyVal,\n      };\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    const result = placeItemsHandler.expand(value);\n    return result !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default (value: string): Record<string, string> | undefined => {\n  return placeItemsHandler.expand(value);\n};\n","// b_path:: src/handlers/place-self/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the place-self shorthand property.\n *\n * Reconstructs `place-self` from `align-self` and `justify-self`.\n *\n * Rules:\n * - If both values are the same: use single value\n * - If values differ: use two values (align justify)\n * - If either is missing: cannot collapse\n */\nexport const placeSelfCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"place-self\",\n    longhands: [\"align-self\", \"justify-self\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const align = properties[\"align-self\"];\n    const justify = properties[\"justify-self\"];\n\n    // Both must be present\n    if (!align || !justify) return undefined;\n\n    // Same value - use single value syntax\n    if (align === justify) return align;\n\n    // Different values - use two value syntax\n    return `${align} ${justify}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"align-self\"] && properties[\"justify-self\"]);\n  },\n});\n","// b_path:: src/handlers/place-self/expand.ts\n\nimport { consolidatePlaceTokens } from \"@/internal/place-utils\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\n\n/**\n * Property handler for the 'place-self' CSS shorthand property\n *\n * Expands place-self into align-self and justify-self.\n *\n * @example\n * ```typescript\n * placeSelfHandler.expand('center'); // { 'align-self': 'center', 'justify-self': 'center' }\n * placeSelfHandler.expand('start end'); // { 'align-self': 'start', 'justify-self': 'end' }\n * ```\n */\nexport const placeSelfHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"place-self\",\n    longhands: [\"align-self\", \"justify-self\"],\n    defaults: {\n      \"align-self\": \"auto\",\n      \"justify-self\": \"auto\",\n    },\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    // Handle global CSS keywords\n    if (/^(inherit|initial|unset|revert)$/i.test(value)) {\n      return {\n        \"align-self\": value,\n        \"justify-self\": value,\n      };\n    }\n\n    // Process tokens with lookahead for compound keywords\n    const processedValues = consolidatePlaceTokens(\n      value,\n      /^(center|start|end|self-start|self-end|flex-start|flex-end)$/i\n    );\n    if (!processedValues) {\n      return undefined;\n    }\n\n    // Helper functions for validation\n    const isValidAlignSelfValue = (val: string): boolean => {\n      return /^(auto|normal|stretch|center|start|end|self-start|self-end|flex-start|flex-end|baseline|first baseline|last baseline|anchor-center|safe center|safe start|safe end|safe self-start|safe self-end|safe flex-start|safe flex-end|unsafe center|unsafe start|unsafe end|unsafe self-start|unsafe self-end|unsafe flex-start|unsafe flex-end)$/i.test(\n        val\n      );\n    };\n\n    const isValidJustifySelfValue = (val: string): boolean => {\n      return /^(auto|normal|stretch|center|start|end|self-start|self-end|flex-start|flex-end|baseline|first baseline|last baseline|left|right|safe center|safe start|safe end|safe self-start|safe self-end|safe flex-start|safe flex-end|unsafe center|unsafe start|unsafe end|unsafe self-start|unsafe self-end|unsafe flex-start|unsafe flex-end)$/i.test(\n        val\n      );\n    };\n\n    // Validate processed values\n    for (const val of processedValues) {\n      if (!isValidAlignSelfValue(val) && !isValidJustifySelfValue(val)) {\n        return undefined;\n      }\n    }\n\n    // Handle single value - both properties get the same value, but left/right are invalid for single value\n    if (processedValues.length === 1) {\n      const val = processedValues[0];\n      if (val === \"left\" || val === \"right\") {\n        return undefined;\n      }\n      if (!isValidAlignSelfValue(val)) {\n        return undefined;\n      }\n      return {\n        \"align-self\": val,\n        \"justify-self\": val,\n      };\n    }\n\n    // Handle two values - first=align-self, second=justify-self\n    if (processedValues.length === 2) {\n      const [alignVal, justifyVal] = processedValues;\n      if (!isValidAlignSelfValue(alignVal) || alignVal === \"left\" || alignVal === \"right\") {\n        return undefined;\n      }\n      if (!isValidJustifySelfValue(justifyVal)) {\n        return undefined;\n      }\n      return {\n        \"align-self\": alignVal,\n        \"justify-self\": justifyVal,\n      };\n    }\n\n    return undefined;\n  },\n\n  validate: (value: string): boolean => {\n    const result = placeSelfHandler.expand(value);\n    return result !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default (value: string): Record<string, string> | undefined => {\n  return placeSelfHandler.expand(value);\n};\n","// b_path:: src/handlers/text-decoration/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the text-decoration shorthand property.\n *\n * Reconstructs `text-decoration` from text-decoration-line, style, color, and thickness.\n *\n * Rules:\n * - All four must be present\n * - Can omit defaults when appropriate\n * - Order: line style color thickness\n */\nexport const textDecorationCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"text-decoration\",\n    longhands: [\n      \"text-decoration-line\",\n      \"text-decoration-style\",\n      \"text-decoration-color\",\n      \"text-decoration-thickness\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const line = properties[\"text-decoration-line\"];\n    const style = properties[\"text-decoration-style\"];\n    const color = properties[\"text-decoration-color\"];\n    const thickness = properties[\"text-decoration-thickness\"];\n\n    // All four must be present\n    if (!line || !style || !color || !thickness) return undefined;\n\n    const parts: string[] = [line];\n\n    // Add non-default values\n    if (style !== \"solid\") parts.push(style);\n    if (color.toLowerCase() !== \"currentcolor\") parts.push(color);\n    if (thickness !== \"auto\") parts.push(thickness);\n\n    return parts.join(\" \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(\n      properties[\"text-decoration-line\"] &&\n      properties[\"text-decoration-style\"] &&\n      properties[\"text-decoration-color\"] &&\n      properties[\"text-decoration-thickness\"]\n    );\n  },\n});\n","// b_path:: src/handlers/text-decoration/expand.ts\n\nimport isColor from \"@/internal/is-color\";\nimport isLength from \"@/internal/is-length\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\nconst LINE = /^(none|underline|overline|line-through|blink|spelling-error|grammar-error)$/i;\nconst STYLE = /^(solid|double|dotted|dashed|wavy)$/i;\nconst THICKNESS = /^(auto|from-font)$/i;\n\n/**\n * Property handler for the 'text-decoration' CSS shorthand property\n *\n * Expands text-decoration into text-decoration-line, text-decoration-style,\n * text-decoration-color, and text-decoration-thickness.\n *\n * @example\n * ```typescript\n * textDecorationHandler.expand('underline'); // { 'text-decoration-line': 'underline', 'text-decoration-style': 'solid', 'text-decoration-color': 'currentColor', 'text-decoration-thickness': 'auto' }\n * textDecorationHandler.expand('underline dotted red'); // { 'text-decoration-line': 'underline', 'text-decoration-style': 'dotted', 'text-decoration-color': 'red', 'text-decoration-thickness': 'auto' }\n * textDecorationHandler.expand('overline line-through wavy'); // { 'text-decoration-line': 'overline line-through', 'text-decoration-style': 'wavy', 'text-decoration-color': 'currentColor', 'text-decoration-thickness': 'auto' }\n * ```\n */\nexport const textDecorationHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"text-decoration\",\n    longhands: [\n      \"text-decoration-line\",\n      \"text-decoration-style\",\n      \"text-decoration-color\",\n      \"text-decoration-thickness\",\n    ],\n    defaults: {\n      \"text-decoration-line\": \"none\",\n      \"text-decoration-style\": \"solid\",\n      \"text-decoration-color\": \"currentColor\",\n      \"text-decoration-thickness\": \"auto\",\n    },\n    category: \"typography\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    const values = normalizeColor(value).split(/\\s+/);\n\n    if (values.length === 1 && KEYWORD.test(values[0])) {\n      return sortProperties({\n        \"text-decoration-line\": values[0],\n        \"text-decoration-style\": values[0],\n        \"text-decoration-color\": values[0],\n        \"text-decoration-thickness\": values[0],\n      });\n    }\n\n    // Initialize with defaults - text-decoration shorthand resets all properties\n    const result: Record<string, string> = {\n      \"text-decoration-line\": \"none\",\n      \"text-decoration-style\": \"solid\",\n      \"text-decoration-color\": \"currentColor\",\n      \"text-decoration-thickness\": \"auto\",\n    };\n\n    const lines: string[] = [];\n    let hasStyle = false;\n    let hasColor = false;\n    let hasThickness = false;\n\n    for (let i = 0; i < values.length; i++) {\n      const v = values[i];\n\n      if (LINE.test(v)) {\n        lines.push(v);\n      } else if (STYLE.test(v)) {\n        if (hasStyle) return; // Duplicate style\n        result[\"text-decoration-style\"] = v;\n        hasStyle = true;\n      } else if (isColor(v)) {\n        if (hasColor) return; // Duplicate color\n        result[\"text-decoration-color\"] = v;\n        hasColor = true;\n      } else if (THICKNESS.test(v) || isLength(v)) {\n        if (hasThickness) return; // Duplicate thickness\n        result[\"text-decoration-thickness\"] = v;\n        hasThickness = true;\n      } else {\n        return;\n      }\n    }\n\n    if (lines.length > 1 && lines.includes(\"none\")) return;\n\n    if (lines.length > 0) {\n      if (lines.length !== new Set(lines).size) return; // Duplicate lines\n      result[\"text-decoration-line\"] = lines.join(\" \");\n    }\n\n    return sortProperties(result);\n  },\n\n  validate: (value: string): boolean => {\n    return textDecorationHandler.expand(value) !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default function textDecoration(value: string): Record<string, string> | undefined {\n  return textDecorationHandler.expand(value);\n}\n","// b_path:: src/handlers/text-emphasis/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the text-emphasis shorthand property.\n *\n * Reconstructs `text-emphasis` from `text-emphasis-style` and `text-emphasis-color`.\n *\n * Rules:\n * - Both must be present\n * - Can omit default color (currentcolor)\n * - Order: style color\n */\nexport const textEmphasisCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"text-emphasis\",\n    longhands: [\"text-emphasis-style\", \"text-emphasis-color\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const style = properties[\"text-emphasis-style\"];\n    const color = properties[\"text-emphasis-color\"];\n\n    // Both must be present\n    if (!style || !color) return undefined;\n\n    // If color is default (currentcolor), can omit it\n    if (color.toLowerCase() === \"currentcolor\") {\n      return style;\n    }\n\n    // Both values\n    return `${style} ${color}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"text-emphasis-style\"] && properties[\"text-emphasis-color\"]);\n  },\n});\n","// b_path:: src/handlers/text-emphasis/expand.ts\n\nimport isColor from \"@/internal/is-color\";\nimport normalizeColor from \"@/internal/normalize-color\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\nconst FILL = /^(filled|open)$/i;\nconst SHAPE = /^(dot|circle|double-circle|triangle|sesame)$/i;\nconst STRING_VALUE = /^[\"'].*[\"']$/;\n\n/**\n * Property handler for the 'text-emphasis' CSS shorthand property\n *\n * Expands text-emphasis into text-emphasis-style and text-emphasis-color.\n *\n * @example\n * ```typescript\n * textEmphasisHandler.expand('filled dot'); // { 'text-emphasis-style': 'filled dot', 'text-emphasis-color': 'currentcolor' }\n * textEmphasisHandler.expand('circle red'); // { 'text-emphasis-style': 'circle', 'text-emphasis-color': 'red' }\n * textEmphasisHandler.expand('\"x\"'); // { 'text-emphasis-style': '\"x\"', 'text-emphasis-color': 'currentcolor' }\n * ```\n */\nexport const textEmphasisHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"text-emphasis\",\n    longhands: [\"text-emphasis-style\", \"text-emphasis-color\"],\n    defaults: {\n      \"text-emphasis-style\": \"none\",\n      \"text-emphasis-color\": \"currentcolor\",\n    },\n    category: \"typography\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    const values = normalizeColor(value).split(/\\s+/);\n\n    if (values.length === 1 && KEYWORD.test(values[0])) {\n      return sortProperties({\n        \"text-emphasis-style\": values[0],\n        \"text-emphasis-color\": values[0],\n      });\n    }\n\n    const parsed: { style?: string; color?: string } = {};\n    for (let i = 0; i < values.length; i++) {\n      const v = values[i];\n\n      if (v === \"none\") {\n        if (parsed.style) return;\n        parsed.style = v;\n      } else if (STRING_VALUE.test(v)) {\n        if (parsed.style) return;\n        parsed.style = v;\n      } else if (FILL.test(v)) {\n        if (parsed.style) return;\n        if (i + 1 < values.length && SHAPE.test(values[i + 1])) {\n          parsed.style = `${v} ${values[i + 1]}`;\n          i++;\n        } else {\n          parsed.style = v;\n        }\n      } else if (SHAPE.test(v)) {\n        if (parsed.style) return;\n        if (i + 1 < values.length && FILL.test(values[i + 1])) {\n          parsed.style = `${values[i + 1]} ${v}`;\n          i++;\n        } else {\n          parsed.style = v;\n        }\n      } else if (isColor(v)) {\n        if (parsed.color) return;\n        parsed.color = v;\n      } else {\n        return;\n      }\n    }\n\n    // Use defaults for missing properties\n    // Per CSS spec, the default values for text-emphasis shorthand are:\n    //   style: 'none', color: 'currentcolor'\n    // See: https://www.w3.org/TR/css-text-decor-3/#propdef-text-emphasis\n    return sortProperties({\n      \"text-emphasis-style\": parsed.style || \"none\",\n      \"text-emphasis-color\": parsed.color || \"currentcolor\",\n    });\n  },\n\n  validate: (value: string): boolean => {\n    return textEmphasisHandler.expand(value) !== undefined;\n  },\n});\n\n// Export default for backward compatibility with existing code\nexport default function textEmphasis(value: string): Record<string, string> | undefined {\n  return textEmphasisHandler.expand(value);\n}\n","// b_path:: src/handlers/transition/collapse-constants.ts\n\n/**\n * Default values for transition properties per CSS specification.\n */\nexport const TRANSITION_DEFAULTS = {\n  property: \"all\",\n  duration: \"0s\",\n  timingFunction: \"ease\",\n  delay: \"0s\",\n} as const;\n\n/**\n * Checks if a value is the default for a given property\n */\nexport function isDefault(property: keyof typeof TRANSITION_DEFAULTS, value: string): boolean {\n  return TRANSITION_DEFAULTS[property] === value;\n}\n\n/**\n * Checks if all properties in a layer are at their defaults\n */\nexport function isDefaultLayer(layer: {\n  property?: string;\n  duration?: string;\n  timingFunction?: string;\n  delay?: string;\n}): boolean {\n  return (\n    (!layer.property || isDefault(\"property\", layer.property)) &&\n    (!layer.duration || isDefault(\"duration\", layer.duration)) &&\n    (!layer.timingFunction || isDefault(\"timingFunction\", layer.timingFunction)) &&\n    (!layer.delay || isDefault(\"delay\", layer.delay))\n  );\n}\n","// b_path:: src/handlers/transition/collapse-layer.ts\n\nimport type { TransitionLayer } from \"@/core/schema\";\nimport { isDefault } from \"./collapse-constants\";\n\n/**\n * Collapses a single transition layer into shorthand notation.\n *\n * Rules:\n * - Order: property duration timing-function delay\n * - Duration is required (or defaults to 0s)\n * - Default values can be omitted if all other values after are also defaults\n * - Property must be first if present\n */\nexport function collapseSingleLayer(layer: TransitionLayer): string | undefined {\n  const parts: string[] = [];\n\n  // Property (optional, but goes first if present)\n  const hasNonDefaultProperty = layer.property && !isDefault(\"property\", layer.property);\n  const hasNonDefaultDuration = layer.duration && !isDefault(\"duration\", layer.duration);\n  const hasNonDefaultTimingFunction =\n    layer.timingFunction && !isDefault(\"timingFunction\", layer.timingFunction);\n  const hasNonDefaultDelay = layer.delay && !isDefault(\"delay\", layer.delay);\n\n  // Need at least one non-default value\n  if (\n    !hasNonDefaultProperty &&\n    !hasNonDefaultDuration &&\n    !hasNonDefaultTimingFunction &&\n    !hasNonDefaultDelay\n  ) {\n    return undefined;\n  }\n\n  // Add property if not default\n  if (hasNonDefaultProperty) {\n    parts.push(layer.property!);\n  }\n\n  // Add duration if not default\n  if (hasNonDefaultDuration) {\n    parts.push(layer.duration!);\n  }\n\n  // Add timing function if not default\n  if (hasNonDefaultTimingFunction) {\n    parts.push(layer.timingFunction!);\n  }\n\n  // Add delay if not default\n  if (hasNonDefaultDelay) {\n    parts.push(layer.delay!);\n  }\n\n  return parts.join(\" \");\n}\n","// b_path:: src/handlers/transition/collapse-parser.ts\n\nimport type { TransitionLayer } from \"@/core/schema\";\n\n/**\n * Parses transition longhand properties into layer structure.\n * Properties with multiple comma-separated values are split into layers.\n */\nexport function parseTransitionProperties(properties: Record<string, string>): {\n  layers: TransitionLayer[];\n} {\n  const property = properties[\"transition-property\"];\n  const duration = properties[\"transition-duration\"];\n  const timingFunction = properties[\"transition-timing-function\"];\n  const delay = properties[\"transition-delay\"];\n\n  // If no properties, return empty\n  if (!property && !duration && !timingFunction && !delay) {\n    return { layers: [] };\n  }\n\n  // Split each property by commas to get layers\n  const propertyLayers = splitLayers(property);\n  const durationLayers = splitLayers(duration);\n  const timingFunctionLayers = splitLayers(timingFunction);\n  const delayLayers = splitLayers(delay);\n\n  // Number of layers is the maximum of all properties\n  const layerCount = Math.max(\n    propertyLayers.length,\n    durationLayers.length,\n    timingFunctionLayers.length,\n    delayLayers.length\n  );\n\n  // Build layer objects\n  const layers: TransitionLayer[] = [];\n  for (let i = 0; i < layerCount; i++) {\n    const layer: TransitionLayer = {};\n\n    if (propertyLayers[i]) layer.property = propertyLayers[i];\n    if (durationLayers[i]) layer.duration = durationLayers[i];\n    if (timingFunctionLayers[i]) layer.timingFunction = timingFunctionLayers[i];\n    if (delayLayers[i]) layer.delay = delayLayers[i];\n\n    layers.push(layer);\n  }\n\n  return { layers };\n}\n\n/**\n * Splits a property value by commas, handling nested functions.\n * Returns empty array if value is undefined.\n */\nfunction splitLayers(value: string | undefined): string[] {\n  if (!value) return [];\n\n  const layers: string[] = [];\n  let current = \"\";\n  let depth = 0;\n\n  for (let i = 0; i < value.length; i++) {\n    const char = value[i];\n\n    if (char === \"(\") {\n      depth++;\n      current += char;\n    } else if (char === \")\") {\n      depth--;\n      current += char;\n    } else if (char === \",\" && depth === 0) {\n      layers.push(current.trim());\n      current = \"\";\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    layers.push(current.trim());\n  }\n\n  return layers;\n}\n","// b_path:: src/handlers/transition/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\nimport { collapseSingleLayer } from \"./collapse-layer\";\nimport { parseTransitionProperties } from \"./collapse-parser\";\n\n/**\n * Collapse handler for the transition shorthand property.\n *\n * Reconstructs `transition` from its 4 longhand properties.\n *\n * Rules:\n * - Supports multi-layer transitions (comma-separated)\n * - Order: property duration timing-function delay\n * - Default values are omitted where possible\n * - Duration is most commonly specified\n */\nexport const transitionCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"transition\",\n    longhands: [\n      \"transition-property\",\n      \"transition-duration\",\n      \"transition-timing-function\",\n      \"transition-delay\",\n    ],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    // Parse longhands into layer structure\n    const { layers } = parseTransitionProperties(properties);\n\n    // Need at least one layer\n    if (layers.length === 0) {\n      return undefined;\n    }\n\n    // Collapse each layer\n    const layerStrings: string[] = [];\n\n    for (const layer of layers) {\n      const collapsed = collapseSingleLayer(layer);\n      if (collapsed) {\n        layerStrings.push(collapsed);\n      }\n    }\n\n    // If no layers collapsed, return undefined\n    if (layerStrings.length === 0) {\n      return undefined;\n    }\n\n    // Join layers with comma separator\n    return layerStrings.join(\", \");\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    // Need at least one transition property\n    return !!(\n      properties[\"transition-property\"] ||\n      properties[\"transition-duration\"] ||\n      properties[\"transition-timing-function\"] ||\n      properties[\"transition-delay\"]\n    );\n  },\n});\n","// b_path:: src/handlers/transition/transition-layers.ts\n\nimport * as csstree from \"@eslint/css-tree\";\nimport type { TransitionLayer, TransitionResult } from \"@/core/schema\";\nimport isTime from \"@/internal/is-time\";\nimport isTimingFunction from \"@/internal/is-timing-function\";\nimport { matchesType } from \"@/internal/is-value-node\";\nimport { hasTopLevelCommas, parseLayersGeneric } from \"@/internal/layer-parser-utils\";\n\n// CSS default values for transition properties\nexport const TRANSITION_DEFAULTS = {\n  property: \"all\",\n  duration: \"0s\",\n  timingFunction: \"ease\",\n  delay: \"0s\",\n} as const;\n\n/**\n * Detects if a transition value needs advanced parsing (multi-layer transitions or complex functions)\n */\nexport function needsAdvancedParser(value: string): boolean {\n  return hasTopLevelCommas(value, true);\n}\n\n/**\n * Parses a complex transition value using css-tree AST parsing\n */\nexport function parseTransitionLayers(value: string): TransitionResult | undefined {\n  const layers = parseLayersGeneric(value, parseSingleLayer);\n  return layers ? { layers } : undefined;\n}\n\n/**\n * Parses a single transition layer using css-tree AST parsing\n */\nfunction parseSingleLayer(layerValue: string): TransitionLayer | undefined {\n  const result: TransitionLayer = {};\n\n  const ast = csstree.parse(layerValue.trim(), { context: \"value\" });\n\n  // Collect all child nodes from the Value node\n  const children: csstree.CssNode[] = [];\n  csstree.walk(ast, {\n    visit: \"Value\",\n    enter: (node: csstree.CssNode) => {\n      if (node.type === \"Value\" && node.children) {\n        node.children.forEach((child) => {\n          children.push(child);\n        });\n      }\n    },\n  });\n\n  // Process children in order, handling transition property parsing\n  if (!processCssChildren(children, result)) {\n    return undefined; // Parsing failed due to invalid syntax\n  }\n\n  return result;\n}\n\n/**\n * Processes CSS AST children sequentially to extract transition properties\n *\n * This function handles the parsing of CSS transition layer syntax,\n * including property names, time values, and timing functions.\n * CSS ordering rules: first time = duration, second time = delay\n *\n * Returns false if parsing should fail (e.g., too many time values)\n */\nfunction processCssChildren(children: csstree.CssNode[], result: TransitionLayer): boolean {\n  let timeCount = 0; // Track first vs second time value\n\n  for (const child of children) {\n    // Skip whitespace and operators\n    if (child.type === \"WhiteSpace\" || child.type === \"Operator\") {\n      continue;\n    }\n\n    // Handle timing functions FIRST (keywords and functions)\n    // Must check before time values to avoid cubic-bezier() being treated as time\n    if (!result.timingFunction) {\n      if (child.type === \"Identifier\") {\n        const timingValue = csstree.generate(child);\n        if (isTimingFunction(timingValue)) {\n          result.timingFunction = timingValue;\n          continue;\n        }\n      }\n\n      if (child.type === \"Function\") {\n        const funcValue = csstree.generate(child);\n        if (isTimingFunction(funcValue)) {\n          // Fix spacing in function calls (css-tree removes spaces after commas)\n          result.timingFunction = funcValue.replace(/,([^\\s])/g, \", $1\");\n          continue;\n        }\n      }\n    }\n\n    // Handle time values (duration and delay)\n    // Accept: Dimensions with time units (1s, 500ms), or any Function (calc, var, etc.)\n    if (matchesType(child, [\"Dimension\", \"Function\"])) {\n      const timeValue = csstree.generate(child);\n\n      // For Dimensions, validate they have time units\n      // For Functions (var, calc), accept unconditionally (carry over as-is)\n      if (child.type === \"Function\" || isTime(timeValue)) {\n        if (timeCount >= 2) {\n          // More than 2 time values is invalid\n          return false;\n        }\n        if (timeCount === 0) {\n          result.duration = timeValue;\n        } else {\n          result.delay = timeValue;\n        }\n        timeCount++;\n        continue;\n      }\n    }\n\n    // Handle transition-property (none, all, or CSS property names)\n    if (child.type === \"Identifier\" && !result.property) {\n      const name = (child as csstree.Identifier).name;\n      if (name === \"none\" || name === \"all\") {\n        result.property = name;\n        continue;\n      }\n      // Check if it looks like a CSS property name (not a timing function)\n      // Allow vendor-prefixed properties starting with hyphen\n      if (/^-?[a-zA-Z][a-zA-Z0-9-]*$/.test(name) && !isTimingFunction(name)) {\n        result.property = name;\n      }\n    }\n  }\n\n  return true;\n}\n\n/**\n * Reconstructs final CSS properties from layer objects\n */\nexport function reconstructLayers(layers: TransitionLayer[]): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  // Collect all layer values for each property\n  const properties = {\n    \"transition-property\": layers.map((l) => l.property || TRANSITION_DEFAULTS.property),\n    \"transition-duration\": layers.map((l) => l.duration || TRANSITION_DEFAULTS.duration),\n    \"transition-timing-function\": layers.map(\n      (l) => l.timingFunction || TRANSITION_DEFAULTS.timingFunction\n    ),\n    \"transition-delay\": layers.map((l) => l.delay || TRANSITION_DEFAULTS.delay),\n  };\n\n  // Join layer values with commas\n  Object.entries(properties).forEach(([property, values]) => {\n    result[property] = values.join(\", \");\n  });\n\n  return result;\n}\n","// b_path:: src/handlers/transition/expand.ts\n\n// NOTE: This handler contains complex multi-layer parsing logic that is a candidate\n// for future refactoring. Property name handling and timing parsing could be simplified.\n\nimport isTime from \"@/internal/is-time\";\nimport isTimingFunction from \"@/internal/is-timing-function\";\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { needsAdvancedParser, parseTransitionLayers, reconstructLayers } from \"./transition-layers\";\n\nconst KEYWORD = /^(inherit|initial|unset|revert)$/i;\nconst PROPERTY_KEYWORD = /^(none|all)$/i;\n\nfunction parseTransitionValue(value: string): Record<string, string> | undefined {\n  // Handle global keywords first\n  if (KEYWORD.test(value.trim())) {\n    return {\n      \"transition-property\": value.trim(),\n      \"transition-duration\": value.trim(),\n      \"transition-timing-function\": value.trim(),\n      \"transition-delay\": value.trim(),\n    };\n  }\n\n  // Check for multi-layer syntax\n  if (needsAdvancedParser(value)) {\n    const layeredResult = parseTransitionLayers(value);\n    if (layeredResult) {\n      return reconstructLayers(layeredResult.layers);\n    }\n    return undefined; // Advanced parsing failed\n  }\n\n  // Simple single-layer fallback parser\n  const result: Record<string, string> = {};\n  const tokens = value.trim().split(/\\s+/);\n  let timeCount = 0; // Track first vs second time value\n\n  for (const token of tokens) {\n    // Handle time values first (duration and delay) - CSS allows flexible ordering\n    if (isTime(token) || token.startsWith(\"var(\")) {\n      if (timeCount === 0) {\n        result[\"transition-duration\"] = token;\n      } else if (timeCount === 1) {\n        result[\"transition-delay\"] = token;\n      } else {\n        // More than 2 time values is invalid\n        return undefined;\n      }\n      timeCount++;\n      continue;\n    }\n\n    // Handle timing functions\n    if (!result[\"transition-timing-function\"] && isTimingFunction(token)) {\n      result[\"transition-timing-function\"] = token;\n      continue;\n    }\n\n    // Handle transition-property (none, all, or CSS property names)\n    // Only if we haven't set it yet, and it's not a timing function\n    if (!result[\"transition-property\"]) {\n      if (PROPERTY_KEYWORD.test(token)) {\n        result[\"transition-property\"] = token;\n        continue;\n      }\n      // Check if it looks like a CSS property name (not a timing function)\n      // Allow vendor-prefixed properties starting with hyphen\n      if (/^-?[a-zA-Z][a-zA-Z0-9-]*$/.test(token) && !isTimingFunction(token)) {\n        result[\"transition-property\"] = token;\n        continue;\n      }\n    }\n\n    // If token doesn't match any category, it's invalid\n    return undefined;\n  }\n\n  // Accept single-token property values - they will expand to defaults\n\n  // Build final result with defaults\n  return {\n    \"transition-property\": result[\"transition-property\"] || \"all\",\n    \"transition-duration\": result[\"transition-duration\"] || \"0s\",\n    \"transition-timing-function\": result[\"transition-timing-function\"] || \"ease\",\n    \"transition-delay\": result[\"transition-delay\"] || \"0s\",\n  };\n}\n\n/**\n * Property handler for the 'transition' CSS shorthand property\n *\n * Expands transition into transition-property, transition-duration,\n * transition-timing-function, and transition-delay.\n *\n * @example\n * ```typescript\n * transitionHandler.expand('opacity 300ms ease-in');\n * transitionHandler.expand('all 1s');\n * ```\n */\nexport const transitionHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"transition\",\n    longhands: [\n      \"transition-property\",\n      \"transition-duration\",\n      \"transition-timing-function\",\n      \"transition-delay\",\n    ],\n    defaults: {\n      \"transition-property\": \"all\",\n      \"transition-duration\": \"0s\",\n      \"transition-timing-function\": \"ease\",\n      \"transition-delay\": \"0s\",\n    },\n    category: \"animation\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    return parseTransitionValue(value);\n  },\n\n  validate: (value: string): boolean => {\n    return transitionHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function transition(value: string): Record<string, string> | undefined {\n  return transitionHandler.expand(value);\n}\n","// b_path:: src/internal/shorthand-registry.ts\n\nimport animation from \"../handlers/animation\";\nimport background from \"../handlers/background\";\nimport border from \"../handlers/border\";\nimport borderRadius from \"../handlers/border-radius\";\nimport columnRule from \"../handlers/column-rule\";\nimport columns from \"../handlers/columns\";\nimport containIntrinsicSize from \"../handlers/contain-intrinsic-size\";\nimport flex from \"../handlers/flex\";\nimport flexFlow from \"../handlers/flex-flow\";\nimport font from \"../handlers/font\";\nimport grid from \"../handlers/grid\";\nimport gridArea from \"../handlers/grid-area\";\nimport gridColumn from \"../handlers/grid-column\";\nimport gridRow from \"../handlers/grid-row\";\nimport listStyle from \"../handlers/list-style\";\nimport mask from \"../handlers/mask\";\nimport offset from \"../handlers/offset\";\nimport outline from \"../handlers/outline\";\nimport overflow from \"../handlers/overflow\";\nimport placeContent from \"../handlers/place-content\";\nimport placeItems from \"../handlers/place-items\";\nimport placeSelf from \"../handlers/place-self\";\nimport textDecoration from \"../handlers/text-decoration\";\nimport textEmphasis from \"../handlers/text-emphasis\";\nimport transition from \"../handlers/transition\";\nimport directional from \"./directional\";\n\n/**\n * Internal shorthand property handler registry.\n * @internal\n */\n\nconst prefix =\n  (prefix: string) =>\n  (value: string): Record<string, string> | undefined => {\n    const longhand = directional(value);\n\n    if (!longhand) return;\n\n    const result: Record<string, string> = {};\n    for (const key in longhand) {\n      result[`${prefix}-${key}`] = longhand[key];\n    }\n    return result;\n  };\n\n/**\n * Central registry mapping shorthand property names to their expansion handlers.\n * @internal\n */\nexport const shorthand: Record<string, (value: string) => Record<string, string> | undefined> = {\n  animation: animation,\n  background: background,\n  border: border,\n  \"border-bottom\": border.bottom,\n  \"border-color\": border.color,\n  \"border-left\": border.left,\n  \"border-radius\": borderRadius,\n  \"border-right\": border.right,\n  \"border-style\": border.style,\n  \"border-top\": border.top,\n  \"border-width\": border.width,\n  columns: columns,\n  \"column-rule\": columnRule,\n  \"contain-intrinsic-size\": containIntrinsicSize,\n  flex: flex,\n  \"flex-flow\": flexFlow,\n  font: font,\n  grid: grid,\n  \"grid-area\": gridArea,\n  \"grid-column\": gridColumn,\n  \"grid-row\": gridRow,\n  inset: directional,\n  \"list-style\": listStyle,\n  mask: mask,\n  margin: prefix(\"margin\"),\n  offset: offset,\n  outline: outline,\n  overflow: overflow,\n  padding: prefix(\"padding\"),\n  \"place-content\": placeContent,\n  \"place-items\": placeItems,\n  \"place-self\": placeSelf,\n  \"text-decoration\": textDecoration,\n  \"text-emphasis\": textEmphasis,\n  transition: transition,\n};\n","// b_path:: src/core/validate.ts\n/**\n * Validates CSS stylesheet syntax and property values, providing detailed error formatting.\n *\n * This function parses CSS using the css-tree library and validates each CSS property\n * against the CSS specification. When validation errors are found, it generates\n * formatted error messages with visual context including line numbers, code snippets,\n * and precise error location indicators.\n *\n * @param css - The CSS string to validate\n *\n * @returns StylesheetValidation object containing:\n *   - ok: boolean indicating if validation passed (no errors)\n *   - errors: Array of syntax parsing errors (malformed CSS)\n *   - warnings: Array of property validation errors (invalid property values)\n *\n * @remarks\n * - Context window shows ±2 lines around each error for better debugging\n * - Long lines are intelligently truncated with ellipses (…) for readability\n * - Pointer indicators (^^^) precisely mark the error location and length\n * - Duplicate declarations are automatically deduplicated to avoid redundant warnings\n *\n * @throws Does not throw - parsing errors are captured in the returned errors array\n *\n * @since 1.0.0\n */\n\nimport * as csstree from \"@eslint/css-tree\";\nimport type { BStyleWarning, StylesheetValidation } from \"./schema\";\n\n// Constants\nconst DEFAULT_MAX_LINE_WIDTH = 80;\nconst LINE_NUMBER_PADDING = 4;\nconst DEFAULT_CONTEXT_WINDOW_SIZE = 2; // Lines before and after error\n\nexport interface BStyleMatchError extends csstree.SyntaxMatchError {\n  property: string;\n  formattedError?: string;\n}\n\nexport type { BStyleWarning, StylesheetValidation };\n\nexport interface Declaration {\n  property: string;\n  value: csstree.Value | csstree.Raw;\n  node: csstree.CssNode;\n}\n\nexport interface ErrorFormatOptions {\n  maxLineWidth: number;\n  contextWindowSize?: number;\n}\n\ninterface TruncationBounds {\n  startPos: number;\n  endPos: number;\n  needsStartEllipsis: boolean;\n  needsEndEllipsis: boolean;\n  availableWidth: number;\n}\n\ninterface FormattedLine {\n  content: string;\n  adjustedColumn: number;\n}\n\n/**\n * Checks if a CSS value node contains var() function.\n * CSS variables cannot be validated by @eslint/css-tree as they are runtime values.\n */\nfunction containsVar(node: csstree.CssNode): boolean {\n  if (!node) return false;\n  if (node.type === \"Function\" && node.name === \"var\") return true;\n  if (\"children\" in node && node.children) {\n    for (const child of node.children) {\n      if (containsVar(child)) return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Validates a CSS stylesheet for syntax and property value errors.\n *\n * @param css - The CSS string to validate\n * @returns StylesheetValidation object containing validation results\n */\nexport function validate(css: string): StylesheetValidation {\n  const errors: csstree.SyntaxParseError[] = [];\n  const warnings: BStyleMatchError[] = [];\n  const declarations: Declaration[] = [];\n  const syntax = csstree.lexer;\n  const uniqueDecls = new Map<string, number>();\n\n  // Parse CSS\n  const ast = csstree.parse(css, {\n    context: \"declarationList\",\n    positions: true,\n    parseAtrulePrelude: true,\n    parseRulePrelude: true,\n    parseCustomProperty: true,\n    onParseError(err: csstree.SyntaxParseError) {\n      // biome-ignore lint/correctness/noUnusedVariables: remove stack from err\n      const { stack, ...rest } = err;\n      errors.push(rest);\n    },\n  });\n\n  // Extract declarations\n  csstree.walk(ast, (node) => {\n    if (node.type !== \"Declaration\") {\n      return;\n    }\n    const id = csstree.generate(node);\n    if (uniqueDecls.has(id)) {\n      uniqueDecls.set(id, uniqueDecls.get(id)! + 1);\n      return;\n    }\n    uniqueDecls.set(id, 1);\n    declarations.push({ property: node.property, value: node.value, node });\n  });\n\n  // Validate declarations\n  // Suppress noisy csstree-match iteration warnings during matching.\n  // Control via env var: BStyle_CSSTREE_LOG_LEVEL=ERROR (default) suppresses these messages.\n  const suppressNoise = (msg: unknown): boolean => {\n    try {\n      const s = String(msg);\n      return /\\[csstree-match\\]\\s*BREAK after/i.test(s);\n    } catch {\n      return false;\n    }\n  };\n  const LOG_LEVEL = (process.env.BStyle_CSSTREE_LOG_LEVEL || \"ERROR\").toUpperCase();\n  const QUIET = LOG_LEVEL === \"ERROR\" || LOG_LEVEL === \"SILENT\";\n  const origWarn = console.warn;\n  const origError = console.error;\n  try {\n    if (QUIET) {\n      console.warn = (...args: Parameters<typeof console.warn>) => {\n        if (args.length && suppressNoise(args[0])) return;\n        return origWarn(...args);\n      };\n      console.error = (...args: Parameters<typeof console.error>) => {\n        if (args.length && suppressNoise(args[0])) return;\n        return origError(...args);\n      };\n    }\n\n    for (const decl of declarations) {\n      // Skip validation for declarations containing CSS variables (var())\n      // as they cannot be validated at parse time\n      if (containsVar(decl.value)) {\n        continue;\n      }\n\n      const match = syntax.matchProperty(decl.property, decl.value);\n      const error = match.error as csstree.SyntaxMatchError;\n\n      if (!error) continue;\n\n      // biome-ignore lint/correctness/noUnusedVariables: remove stack from error\n      const { stack, name, ...rest } = error;\n      warnings.push({\n        property: decl.property,\n        name,\n        ...rest,\n      });\n    }\n  } finally {\n    // Always restore console methods\n    console.warn = origWarn;\n    console.error = origError;\n  }\n\n  // Format and display warnings\n  const formattedWarnings: BStyleWarning[] = [];\n\n  if (warnings.length > 0) {\n    const cssLines = css.split(\"\\n\");\n    for (const warning of warnings) {\n      const formattedError = formatErrorDisplay(cssLines, warning);\n      formattedWarnings.push({\n        property: warning.property,\n        name: warning.name,\n        syntax: warning.syntax,\n        formattedWarning: `Errors found in: ${warning.property}\\n${formattedError.join(\"\\n\")}`,\n      });\n    }\n  }\n\n  // Return result with runtime type safety\n  const result: StylesheetValidation = {\n    ok: errors.length === 0,\n    errors,\n    warnings: formattedWarnings,\n  };\n\n  return result;\n}\n\nexport function validateDeclaration(value: string, prop: string): StylesheetValidation {\n  const css = `.class {${prop}: ${value};}`;\n  const result = validate(css);\n  return result;\n}\n\n// Helper functions\n/**\n * Calculates the line window to display around an error line.\n * Shows contextWindowSize lines before and after the error for better context.\n *\n * @param errorLine - The line number where the error occurred\n * @param totalLines - Total number of lines in the CSS\n * @param contextWindowSize - Number of lines to show before and after error (default: 2)\n * @returns Object with start and end line numbers for the context window\n */\nfunction calculateLineWindow(\n  errorLine: number,\n  totalLines: number,\n  contextWindowSize: number = DEFAULT_CONTEXT_WINDOW_SIZE\n): { start: number; end: number } {\n  const start = Math.max(1, errorLine - contextWindowSize);\n  const end = Math.min(totalLines, errorLine + contextWindowSize);\n  return { start, end };\n}\n\nfunction formatLineNumber(lineNum: number, maxLineNum: number): string {\n  const maxDigits = Math.max(maxLineNum.toString().length, 1);\n  const paddedNum = lineNum.toString().padStart(maxDigits, \" \");\n  const prefix = \" \".repeat(LINE_NUMBER_PADDING - maxDigits);\n  return `${prefix}${paddedNum} |`;\n}\n\nfunction trimLine(line: string): { trimmed: string; spacesRemoved: number } {\n  const trimmed = line.trimStart();\n  const spacesRemoved = line.length - trimmed.length;\n  return { trimmed, spacesRemoved };\n}\n\nfunction calculateTruncationBounds(\n  lineLength: number,\n  errorColumn: number,\n  maxWidth: number\n): TruncationBounds {\n  if (lineLength <= maxWidth) {\n    return {\n      startPos: 0,\n      endPos: lineLength,\n      needsStartEllipsis: false,\n      needsEndEllipsis: false,\n      availableWidth: maxWidth,\n    };\n  }\n\n  // Reserve space for potential ellipses\n  let availableWidth = maxWidth - 2;\n  const halfWidth = Math.floor(availableWidth / 2);\n  let startPos = Math.max(0, errorColumn - halfWidth - 1);\n\n  // Determine if we need start ellipsis\n  const needsStartEllipsis = startPos > 0;\n\n  if (!needsStartEllipsis) {\n    // No start truncation - reclaim space for end-only ellipsis\n    availableWidth = maxWidth - 1;\n  } else {\n    // Skip one additional character for better spacing after ellipsis\n    startPos = startPos + 1;\n  }\n\n  let endPos = startPos + availableWidth;\n  let needsEndEllipsis = endPos < lineLength;\n\n  // Adjust if we hit the end of the line\n  if (endPos >= lineLength) {\n    endPos = lineLength;\n    needsEndEllipsis = false;\n\n    if (needsStartEllipsis) {\n      startPos = Math.max(0, endPos - availableWidth);\n    }\n  }\n\n  return {\n    startPos,\n    endPos,\n    needsStartEllipsis,\n    needsEndEllipsis,\n    availableWidth,\n  };\n}\n\nfunction applyTruncation(\n  line: string,\n  bounds: TruncationBounds,\n  originalErrorColumn: number\n): FormattedLine {\n  let content = line.slice(bounds.startPos, bounds.endPos);\n  let adjustedColumn = originalErrorColumn - bounds.startPos;\n\n  if (bounds.needsStartEllipsis) {\n    content = `…${content}`;\n    adjustedColumn = adjustedColumn + 1;\n  }\n\n  if (bounds.needsEndEllipsis) {\n    content = `${content}…`;\n  }\n\n  return { content, adjustedColumn };\n}\n\nfunction formatContextLine(line: string, maxWidth: number): string {\n  const { trimmed } = trimLine(line);\n\n  if (trimmed.length <= maxWidth) {\n    return trimmed;\n  }\n\n  return `${trimmed.slice(0, maxWidth - 1)}…`;\n}\n\nfunction formatErrorLine(line: string, errorColumn: number, maxWidth: number): FormattedLine {\n  // Input validation\n  if (errorColumn < 1) {\n    throw new Error(\"Error column must be >= 1\");\n  }\n\n  const { trimmed, spacesRemoved } = trimLine(line);\n  const adjustedErrorColumn = Math.max(1, errorColumn - spacesRemoved);\n\n  // Handle case where line fits without truncation after trimming\n  if (trimmed.length <= maxWidth) {\n    return {\n      content: trimmed,\n      adjustedColumn: adjustedErrorColumn,\n    };\n  }\n\n  // Calculate truncation bounds using the original error column position\n  const bounds = calculateTruncationBounds(line.length, errorColumn, maxWidth);\n\n  // Special handling for start-of-line case (after trimming consideration)\n  if (bounds.startPos === 0 || bounds.startPos <= spacesRemoved) {\n    // Use trimmed line for start-of-line truncation\n    const trimmedBounds = calculateTruncationBounds(trimmed.length, adjustedErrorColumn, maxWidth);\n    return applyTruncation(trimmed, trimmedBounds, adjustedErrorColumn);\n  }\n\n  // Standard middle-of-line truncation\n  return applyTruncation(line, bounds, errorColumn);\n}\n\nfunction createPointerLine(prefixLength: number, column: number, length: number): string {\n  const safeLength = Math.max(1, length ?? 1);\n  const safeColumn = Math.max(1, column);\n\n  const pointerPrefix = \" \".repeat(prefixLength);\n  const dashes = \"-\".repeat(safeColumn - 1);\n  const carets = \"^\".repeat(safeLength);\n\n  return pointerPrefix + dashes + carets;\n}\n\n/**\n * Formats and displays CSS validation errors with visual context.\n * Shows the error line with surrounding context, line numbers, and pointer indicators.\n *\n * @param cssLines - Array of CSS source lines\n * @param warning - The validation error/warning to format\n * @param options - Formatting options (maxLineWidth, contextWindowSize)\n * @returns Array of formatted strings representing the error display\n *\n * @example\n * // Error at line 5, column 10:\n * //   3 | .class {\n * //   4 |   margin: 10px;\n * //   5 |   color: notacolor;\n * //       ---------^^^^^^^^^^^\n * //   6 | }\n */\nfunction formatErrorDisplay(\n  cssLines: string[],\n  warning: BStyleMatchError,\n  options: ErrorFormatOptions = {\n    maxLineWidth: DEFAULT_MAX_LINE_WIDTH,\n    contextWindowSize: DEFAULT_CONTEXT_WINDOW_SIZE,\n  }\n): string[] {\n  // Input validation\n  if (!cssLines.length || warning.line < 1 || warning.line > cssLines.length) {\n    return [`Invalid error location: line ${warning.line}`];\n  }\n  const errorLine = warning.line;\n  const errorColumn = warning.column;\n  const mismatchLength = warning.mismatchLength ?? 1;\n  const contextWindowSize = options.contextWindowSize ?? DEFAULT_CONTEXT_WINDOW_SIZE;\n\n  const { start, end } = calculateLineWindow(errorLine, cssLines.length, contextWindowSize);\n  const maxLineNum = end;\n  const linePrefix = formatLineNumber(1, maxLineNum);\n  const prefixLength = linePrefix.length;\n  const availableWidth = options.maxLineWidth - prefixLength;\n\n  const result: string[] = [];\n\n  for (let lineNum = start; lineNum <= end; lineNum++) {\n    const lineIndex = lineNum - 1;\n    const currentLine = cssLines[lineIndex] ?? \"\";\n    const currentPrefix = formatLineNumber(lineNum, maxLineNum);\n\n    if (lineNum === errorLine) {\n      // Format error line\n      const { content, adjustedColumn } = formatErrorLine(currentLine, errorColumn, availableWidth);\n\n      result.push(currentPrefix + content);\n\n      // Add pointer line\n      const pointerLine = createPointerLine(prefixLength, adjustedColumn, mismatchLength);\n      result.push(pointerLine);\n    } else {\n      // Format context line\n      const formattedLine = formatContextLine(currentLine, availableWidth);\n      result.push(currentPrefix + formattedLine);\n    }\n  }\n\n  return result;\n}\n","// b_path:: src/core/expand.ts\n\nimport { expandDirectionalProperties } from \"../internal/expand-directional\";\nimport { parseCssDeclaration, parseInputString, stripComments } from \"../internal/parsers\";\nimport { kebabToCamelCase, objectToCss, sortProperties } from \"../internal/property-sorter\";\nimport { shorthand } from \"../internal/shorthand-registry\";\nimport type { BStyleWarning, ExpandOptions, ExpandResult } from \"./schema\";\nimport { DEFAULT_EXPAND_OPTIONS, FORMAT_CSS, FORMAT_JS } from \"./schema\";\nimport { validate } from \"./validate\";\n\n/**\n * Expands CSS shorthand properties into their longhand equivalents.\n *\n * @param input - CSS declaration(s) to expand (e.g., \"margin: 10px 20px;\")\n * @param options - Configuration options for expansion behavior\n * @returns Object containing expansion result, success status, and any issues\n *\n * @example\n * // Basic expansion\n * expand('margin: 10px 20px;')\n * // → { ok: true, result: 'margin-top: 10px;\\nmargin-right: 20px;...', issues: [] }\n *\n * @example\n * // JavaScript object format\n * expand('padding: 1rem;', { format: 'js' })\n * // → { ok: true, result: { paddingTop: '1rem', ... }, issues: [] }\n *\n * @example\n * // Multiple declarations with conflict resolution\n * expand('margin: 10px; margin-top: 20px;', { format: 'js' })\n * // → { ok: true, result: { marginTop: '20px', marginRight: '10px', ... }, issues: [] }\n */\nexport function expand(input: string, options: Partial<ExpandOptions> = {}): ExpandResult {\n  const cleanedInput = stripComments(input);\n\n  // Apply defaults using DEFAULT_EXPAND_OPTIONS\n  const {\n    format = DEFAULT_EXPAND_OPTIONS.format,\n    indent = DEFAULT_EXPAND_OPTIONS.indent,\n    separator = DEFAULT_EXPAND_OPTIONS.separator,\n    propertyGrouping = DEFAULT_EXPAND_OPTIONS.propertyGrouping,\n    expandPartialLonghand = DEFAULT_EXPAND_OPTIONS.expandPartialLonghand,\n  } = options;\n\n  const validation = validate(cleanedInput);\n\n  const inputs = parseInputString(cleanedInput);\n  const results: (Record<string, string> | string)[] = [];\n  const issues: BStyleWarning[] = [];\n  const resultMetadata: Array<{ isShorthand: boolean; properties: Set<string> }> = [];\n\n  for (const item of inputs) {\n    const parsed = parseCssDeclaration(item);\n    if (!parsed) {\n      continue;\n    }\n\n    const { property, value } = parsed;\n    const normalized = value.trim();\n    const important = normalized.endsWith(\"!important\") && /\\s/.test(normalized.slice(-11, -10));\n\n    if (important) {\n      issues.push({\n        property,\n        name: \"important-detected\",\n        formattedWarning: `!important flag detected in '${property}' and has been ignored. Shorthand expansion does not support !important.`,\n      });\n\n      const result: Record<string, string> = {};\n      result[property] = normalized;\n      results.push(result);\n      resultMetadata.push({ isShorthand: false, properties: new Set([property]) });\n      continue;\n    }\n\n    const parse = shorthand[property];\n    const longhand = parse?.(normalized);\n\n    if (!longhand) {\n      const result: Record<string, string> = {};\n      result[property] = normalized;\n      results.push(result);\n      resultMetadata.push({ isShorthand: false, properties: new Set([property]) });\n\n      if (property in shorthand) {\n        issues.push({\n          property,\n          name: \"expansion-failed\",\n          formattedWarning: `Could not expand shorthand property '${property}' with value '${normalized}'. Returning original shorthand.`,\n        });\n      }\n      continue;\n    }\n\n    const result: Record<string, string> = longhand;\n    results.push(result);\n    resultMetadata.push({ isShorthand: true, properties: new Set(Object.keys(result)) });\n  }\n\n  /**\n   * Resolves conflicts between shorthand and longhand properties according to CSS cascade rules.\n   */\n  function removeConflictingProperties(\n    results: (Record<string, string> | string)[],\n    metadata: Array<{ isShorthand: boolean; properties: Set<string> }>\n  ): (Record<string, string> | string)[] {\n    const cleanedResults: (Record<string, string> | string)[] = [];\n    const propertyToResultIndex = new Map<string, number>();\n\n    for (let i = 0; i < results.length; i++) {\n      const result = results[i];\n      const meta = metadata[i];\n\n      let resultObj: Record<string, string>;\n      if (typeof result === \"string\") {\n        resultObj = {};\n        const cssLines = result.split(\";\").filter((line) => line.trim());\n        for (const line of cssLines) {\n          const colonIndex = line.indexOf(\":\");\n          if (colonIndex !== -1) {\n            const prop = line.slice(0, colonIndex).trim();\n            const value = line.slice(colonIndex + 1).trim();\n            resultObj[prop] = value;\n          }\n        }\n      } else {\n        resultObj = { ...result };\n      }\n\n      if (!meta.isShorthand) {\n        for (const prop of meta.properties) {\n          const earlierIndex = propertyToResultIndex.get(prop);\n          if (earlierIndex !== undefined) {\n            const earlierResult = cleanedResults[earlierIndex];\n            const earlierMeta = metadata[earlierIndex];\n\n            if (earlierMeta.isShorthand && earlierMeta.properties.has(prop)) {\n              if (typeof earlierResult === \"string\") {\n                const earlierObj: Record<string, string> = {};\n                const cssLines = earlierResult.split(\";\").filter((line) => line.trim());\n                for (const line of cssLines) {\n                  const colonIndex = line.indexOf(\":\");\n                  if (colonIndex !== -1) {\n                    const earlierProp = line.slice(0, colonIndex).trim();\n                    const value = line.slice(colonIndex + 1).trim();\n                    if (earlierProp !== prop) {\n                      earlierObj[earlierProp] = value;\n                    }\n                  }\n                }\n                cleanedResults[earlierIndex] = objectToCss(\n                  earlierObj,\n                  indent,\n                  separator,\n                  propertyGrouping\n                );\n              } else {\n                delete earlierResult[prop];\n              }\n              earlierMeta.properties.delete(prop);\n            }\n          }\n        }\n      } else {\n        if (format === FORMAT_CSS) {\n          for (const prop of meta.properties) {\n            const earlierIndex = propertyToResultIndex.get(prop);\n            if (earlierIndex !== undefined) {\n              const earlierResult = cleanedResults[earlierIndex];\n              const earlierMeta = metadata[earlierIndex];\n\n              if (!earlierMeta.isShorthand && earlierMeta.properties.has(prop)) {\n                if (typeof earlierResult === \"string\") {\n                  const earlierObj: Record<string, string> = {};\n                  const cssLines = earlierResult.split(\";\").filter((line) => line.trim());\n                  for (const line of cssLines) {\n                    const colonIndex = line.indexOf(\":\");\n                    if (colonIndex !== -1) {\n                      const earlierProp = line.slice(0, colonIndex).trim();\n                      const value = line.slice(colonIndex + 1).trim();\n                      if (earlierProp !== prop) {\n                        earlierObj[earlierProp] = value;\n                      }\n                    }\n                  }\n                  cleanedResults[earlierIndex] = objectToCss(\n                    earlierObj,\n                    indent,\n                    separator,\n                    propertyGrouping\n                  );\n                } else {\n                  delete earlierResult[prop];\n                }\n                earlierMeta.properties.delete(prop);\n              }\n            }\n          }\n        }\n      }\n\n      cleanedResults.push(result);\n\n      for (const prop of meta.properties) {\n        propertyToResultIndex.set(prop, cleanedResults.length - 1);\n      }\n    }\n\n    return cleanedResults;\n  }\n\n  const applyPartialExpansion = (obj: Record<string, string>): Record<string, string> => {\n    return expandPartialLonghand ? expandDirectionalProperties(obj) : obj;\n  };\n\n  let finalResult: Record<string, string> | string | undefined;\n\n  const cleanedResults = removeConflictingProperties(results, resultMetadata);\n\n  if (cleanedResults.length === 0) {\n    finalResult = undefined;\n  } else if (cleanedResults.length === 1) {\n    const result = cleanedResults[0];\n    if (format === FORMAT_CSS && typeof result === \"object\") {\n      const resultToProcess = applyPartialExpansion(result);\n      finalResult = objectToCss(resultToProcess, indent, separator, propertyGrouping);\n    } else if (format === FORMAT_JS && typeof result === \"object\") {\n      const resultToProcess = applyPartialExpansion(result);\n      const sorted = sortProperties(resultToProcess, propertyGrouping);\n      const camelCased: Record<string, string> = {};\n      for (const [key, value] of Object.entries(sorted)) {\n        camelCased[kebabToCamelCase(key)] = value;\n      }\n      finalResult = camelCased;\n    } else {\n      finalResult = result;\n    }\n  } else {\n    if (format === FORMAT_CSS) {\n      const mergedObject: Record<string, string> = {};\n\n      for (const result of cleanedResults) {\n        if (typeof result === \"object\" && result) {\n          Object.assign(mergedObject, result);\n        }\n      }\n\n      if (Object.keys(mergedObject).length > 0) {\n        const resultToProcess = applyPartialExpansion(mergedObject);\n        finalResult = objectToCss(resultToProcess, indent, separator, propertyGrouping);\n      } else {\n        const cssResults = cleanedResults.map((result) =>\n          typeof result === \"object\"\n            ? objectToCss(result, indent, separator, propertyGrouping)\n            : result\n        );\n        finalResult = cssResults.join(separator);\n      }\n    } else {\n      const mergedResult: Record<string, string> = {};\n      for (const result of cleanedResults) {\n        if (typeof result === \"object\" && result) {\n          Object.assign(mergedResult, result);\n        }\n      }\n\n      const resultToProcess = applyPartialExpansion(mergedResult);\n      const sorted = sortProperties(resultToProcess, propertyGrouping);\n      const camelCased: Record<string, string> = {};\n      for (const [key, value] of Object.entries(sorted)) {\n        camelCased[kebabToCamelCase(key)] = value;\n      }\n\n      finalResult = camelCased;\n    }\n  }\n\n  const ok = validation.errors.length === 0;\n  const allIssues = [...validation.errors, ...validation.warnings, ...issues];\n\n  return {\n    ok,\n    result: finalResult,\n    issues: allIssues,\n  };\n}\n","// b_path:: src/handlers/gap/collapse.ts\n\nimport { type CollapseHandler, createCollapseHandler } from \"@/internal/collapse-handler\";\n\n/**\n * Collapse handler for the gap shorthand property.\n *\n * Reconstructs `gap` from `row-gap` and `column-gap`.\n *\n * Rules:\n * - If both values are the same: use single value\n * - If values differ: use two values (row column)\n * - If either is missing: cannot collapse\n */\nexport const gapCollapser: CollapseHandler = createCollapseHandler({\n  meta: {\n    shorthand: \"gap\",\n    longhands: [\"row-gap\", \"column-gap\"],\n  },\n\n  collapse(properties: Record<string, string>): string | undefined {\n    const row = properties[\"row-gap\"];\n    const column = properties[\"column-gap\"];\n\n    // Both must be present\n    if (!row || !column) return undefined;\n\n    // Same value - use single value syntax\n    if (row === column) return row;\n\n    // Different values - use two value syntax\n    return `${row} ${column}`;\n  },\n\n  canCollapse(properties: Record<string, string>): boolean {\n    return !!(properties[\"row-gap\"] && properties[\"column-gap\"]);\n  },\n});\n","// b_path:: src/handlers/gap/expand.ts\n\nimport { createPropertyHandler, type PropertyHandler } from \"@/internal/property-handler\";\nimport { sortProperties } from \"@/internal/property-sorter\";\n\n/**\n * Parses gap shorthand value\n * Syntax: gap = <'row-gap'> <'column-gap'>?\n *\n * If one value: both row-gap and column-gap use that value\n * If two values: first is row-gap, second is column-gap\n */\nfunction parseGapValue(value: string): Record<string, string> | undefined {\n  const trimmed = value.trim();\n\n  // Handle CSS-wide keywords\n  if (/^(inherit|initial|unset|revert)$/i.test(trimmed)) {\n    return sortProperties({\n      \"row-gap\": trimmed,\n      \"column-gap\": trimmed,\n    });\n  }\n\n  // Split by whitespace\n  const parts = trimmed.split(/\\s+/);\n\n  if (parts.length === 0 || parts.length > 2) {\n    return undefined;\n  }\n\n  if (parts.length === 1) {\n    // Single value - applies to both\n    return sortProperties({\n      \"row-gap\": parts[0],\n      \"column-gap\": parts[0],\n    });\n  }\n\n  // Two values - row then column\n  return sortProperties({\n    \"row-gap\": parts[0],\n    \"column-gap\": parts[1],\n  });\n}\n\n/**\n * Property handler for the 'gap' CSS shorthand property\n *\n * Expands gap into row-gap and column-gap.\n *\n * @example\n * ```typescript\n * gapHandler.expand('10px');          // row-gap: 10px; column-gap: 10px\n * gapHandler.expand('10px 20px');     // row-gap: 10px; column-gap: 20px\n * gapHandler.expand('normal');        // row-gap: normal; column-gap: normal\n * ```\n */\nexport const gapHandler: PropertyHandler = createPropertyHandler({\n  meta: {\n    shorthand: \"gap\",\n    longhands: [\"row-gap\", \"column-gap\"],\n    category: \"layout\",\n  },\n\n  expand: (value: string): Record<string, string> | undefined => {\n    return parseGapValue(value);\n  },\n\n  validate: (value: string): boolean => {\n    return gapHandler.expand(value) !== undefined;\n  },\n});\n\nexport default function gap(value: string): Record<string, string> | undefined {\n  return gapHandler.expand(value);\n}\n","// b_path:: src/internal/handler-registry.ts\n\n/**\n * Centralized registry for all PropertyHandler instances.\n * Enables dynamic property lookup, introspection, and foundation for collapse API.\n * @module handler-registry\n */\n\n// Import all 25 PropertyHandler instances\nimport { animationHandler } from \"../handlers/animation\";\nimport { backgroundHandler } from \"../handlers/background\";\nimport { borderHandler } from \"../handlers/border\";\nimport { borderRadiusHandler } from \"../handlers/border-radius\";\nimport { columnRuleHandler } from \"../handlers/column-rule\";\nimport { columnsHandler } from \"../handlers/columns\";\nimport { containIntrinsicSizeHandler } from \"../handlers/contain-intrinsic-size\";\nimport { flexHandler } from \"../handlers/flex\";\nimport { flexFlowHandler } from \"../handlers/flex-flow\";\nimport { fontHandler } from \"../handlers/font\";\nimport { gapHandler } from \"../handlers/gap\";\nimport { gridHandler } from \"../handlers/grid\";\nimport { gridAreaHandler } from \"../handlers/grid-area\";\nimport { gridColumnHandler } from \"../handlers/grid-column\";\nimport { gridRowHandler } from \"../handlers/grid-row\";\nimport { listStyleHandler } from \"../handlers/list-style\";\nimport { maskHandler } from \"../handlers/mask\";\nimport { offsetHandler } from \"../handlers/offset\";\nimport { outlineHandler } from \"../handlers/outline\";\nimport { overflowHandler } from \"../handlers/overflow\";\nimport { placeContentHandler } from \"../handlers/place-content\";\nimport { placeItemsHandler } from \"../handlers/place-items\";\nimport { placeSelfHandler } from \"../handlers/place-self\";\nimport { textDecorationHandler } from \"../handlers/text-decoration\";\nimport { textEmphasisHandler } from \"../handlers/text-emphasis\";\nimport { transitionHandler } from \"../handlers/transition\";\nimport type { PropertyCategory, PropertyHandler, PropertyHandlerOptions } from \"./property-handler\";\n\n/**\n * Handler registry interface providing centralized access to all PropertyHandlers.\n */\nexport interface HandlerRegistry {\n  /** Read-only map of all registered handlers */\n  readonly handlers: ReadonlyMap<string, PropertyHandler>;\n\n  /** Get a handler by shorthand property name */\n  get(shorthand: string): PropertyHandler | undefined;\n\n  /** Check if a shorthand property is registered */\n  has(shorthand: string): boolean;\n\n  /** Get all handlers in a specific category */\n  getByCategory(category: PropertyCategory): PropertyHandler[];\n\n  /** Get all registered shorthand property names */\n  getAllShorthands(): string[];\n\n  /** Get longhand properties for a shorthand */\n  getLonghands(shorthand: string): string[] | undefined;\n\n  /** Get all shorthands that include a specific longhand */\n  getShorthandsForLonghand(longhand: string): string[];\n}\n\n/**\n * Internal handler map with all 25 PropertyHandlers.\n * @internal\n */\nconst handlerMap = new Map<string, PropertyHandler>([\n  [\"animation\", animationHandler],\n  [\"background\", backgroundHandler],\n  [\"border\", borderHandler],\n  [\"border-radius\", borderRadiusHandler],\n  [\"column-rule\", columnRuleHandler],\n  [\"columns\", columnsHandler],\n  [\"contain-intrinsic-size\", containIntrinsicSizeHandler],\n  [\"flex\", flexHandler],\n  [\"flex-flow\", flexFlowHandler],\n  [\"font\", fontHandler],\n  [\"gap\", gapHandler],\n  [\"grid\", gridHandler],\n  [\"grid-area\", gridAreaHandler],\n  [\"grid-column\", gridColumnHandler],\n  [\"grid-row\", gridRowHandler],\n  [\"list-style\", listStyleHandler],\n  [\"mask\", maskHandler],\n  [\"offset\", offsetHandler],\n  [\"outline\", outlineHandler],\n  [\"overflow\", overflowHandler],\n  [\"place-content\", placeContentHandler],\n  [\"place-items\", placeItemsHandler],\n  [\"place-self\", placeSelfHandler],\n  [\"text-decoration\", textDecorationHandler],\n  [\"text-emphasis\", textEmphasisHandler],\n  [\"transition\", transitionHandler],\n]);\n\n/**\n * Reverse index: longhand → shorthands[]\n * Built once at module load time for O(1) lookups.\n * @internal\n */\nconst longhandToShorthandsMap = new Map<string, string[]>();\n\n// Build reverse index\nfor (const [shorthand, handler] of handlerMap.entries()) {\n  for (const longhand of handler.meta.longhands) {\n    const existing = longhandToShorthandsMap.get(longhand) ?? [];\n    existing.push(shorthand);\n    longhandToShorthandsMap.set(longhand, existing);\n  }\n}\n\n/**\n * Global handler registry instance.\n *\n * Provides centralized access to all PropertyHandler instances, enabling:\n * - Dynamic property expansion\n * - Handler introspection\n * - Reverse longhand → shorthand lookups\n * - Category-based filtering\n *\n * @example\n * ```typescript\n * import { registry } from 'b_short';\n *\n * // Get a handler\n * const handler = registry.get('overflow');\n *\n * // Check availability\n * if (registry.has('flex-flow')) {\n *   const longhands = registry.getLonghands('flex-flow');\n * }\n *\n * // Get by category\n * const layoutHandlers = registry.getByCategory('layout');\n * ```\n */\nexport const registry: HandlerRegistry = {\n  handlers: handlerMap,\n\n  get(shorthand: string): PropertyHandler | undefined {\n    return handlerMap.get(shorthand);\n  },\n\n  has(shorthand: string): boolean {\n    return handlerMap.has(shorthand);\n  },\n\n  getByCategory(category: PropertyCategory): PropertyHandler[] {\n    return Array.from(handlerMap.values()).filter((h) => h.meta.category === category);\n  },\n\n  getAllShorthands(): string[] {\n    return Array.from(handlerMap.keys());\n  },\n\n  getLonghands(shorthand: string): string[] | undefined {\n    return handlerMap.get(shorthand)?.meta.longhands;\n  },\n\n  getShorthandsForLonghand(longhand: string): string[] {\n    return longhandToShorthandsMap.get(longhand) ?? [];\n  },\n};\n\n/**\n * Dynamically expand a CSS shorthand property value.\n *\n * @param property - The shorthand property name (e.g., 'overflow', 'flex-flow')\n * @param value - The CSS value to expand\n * @param options - Optional handler options\n * @returns Expanded longhand properties, or undefined if expansion fails\n *\n * @example\n * ```typescript\n * import { expandProperty } from 'b_short';\n *\n * const result = expandProperty('overflow', 'hidden auto');\n * // { 'overflow-x': 'hidden', 'overflow-y': 'auto' }\n *\n * const invalid = expandProperty('overflow', 'not-valid');\n * // undefined\n * ```\n */\nexport function expandProperty(\n  property: string,\n  value: string,\n  options?: PropertyHandlerOptions\n): Record<string, string> | undefined {\n  const handler = registry.get(property);\n  return handler?.expand(value, options);\n}\n\n/**\n * Validate a CSS shorthand property value without expanding it.\n *\n * @param property - The shorthand property name\n * @param value - The CSS value to validate\n * @returns true if valid, false otherwise\n *\n * @example\n * ```typescript\n * import { validateProperty } from 'b_short';\n *\n * validateProperty('overflow', 'hidden'); // true\n * validateProperty('overflow', 'invalid'); // false\n * validateProperty('unknown-property', 'value'); // false\n * ```\n */\nexport function validateProperty(property: string, value: string): boolean {\n  const handler = registry.get(property);\n  return handler?.validate?.(value) ?? false;\n}\n\n/**\n * Check if a CSS property is a registered shorthand.\n *\n * @param property - The property name to check\n * @returns true if the property is a registered shorthand\n *\n * @example\n * ```typescript\n * import { isShorthandProperty } from 'b_short';\n *\n * isShorthandProperty('overflow'); // true\n * isShorthandProperty('overflow-x'); // false (longhand)\n * isShorthandProperty('unknown'); // false\n * ```\n */\nexport function isShorthandProperty(property: string): boolean {\n  return registry.has(property);\n}\n","// b_path:: src/internal/collapse-registry.ts\n\n/**\n * Centralized registry for all CollapseHandler instances.\n * Maps shorthand property names to their collapse handlers.\n * @module collapse-registry\n */\n\nimport { animationCollapser } from \"../handlers/animation/collapse\";\nimport { backgroundCollapser } from \"../handlers/background/collapse\";\nimport { borderCollapser } from \"../handlers/border/collapse\";\nimport { borderRadiusCollapser } from \"../handlers/border-radius/collapse\";\nimport { columnRuleCollapser } from \"../handlers/column-rule/collapse\";\nimport { columnsCollapser } from \"../handlers/columns/collapse\";\nimport { containIntrinsicSizeCollapser } from \"../handlers/contain-intrinsic-size/collapse\";\nimport { flexCollapser } from \"../handlers/flex/collapse\";\nimport { flexFlowCollapser } from \"../handlers/flex-flow/collapse\";\nimport { fontCollapser } from \"../handlers/font/collapse\";\nimport { gapCollapser } from \"../handlers/gap/collapse\";\nimport { gridCollapser } from \"../handlers/grid/collapse\";\nimport { gridAreaCollapser } from \"../handlers/grid-area/collapse\";\nimport { gridColumnCollapser } from \"../handlers/grid-column/collapse\";\nimport { gridRowCollapser } from \"../handlers/grid-row/collapse\";\nimport { listStyleCollapser } from \"../handlers/list-style/collapse\";\nimport { maskCollapser } from \"../handlers/mask/collapse\";\nimport { offsetCollapser } from \"../handlers/offset/collapse\";\nimport { outlineCollapser } from \"../handlers/outline/collapse\";\nimport { overflowCollapser } from \"../handlers/overflow/collapse\";\nimport { placeContentCollapser } from \"../handlers/place-content/collapse\";\nimport { placeItemsCollapser } from \"../handlers/place-items/collapse\";\nimport { placeSelfCollapser } from \"../handlers/place-self/collapse\";\nimport { textDecorationCollapser } from \"../handlers/text-decoration/collapse\";\nimport { textEmphasisCollapser } from \"../handlers/text-emphasis/collapse\";\nimport { transitionCollapser } from \"../handlers/transition/collapse\";\nimport type { CollapseHandler } from \"./collapse-handler\";\n\n/**\n * Collapse handler registry interface.\n */\nexport interface CollapseRegistry {\n  /** Read-only map of all registered collapse handlers */\n  readonly handlers: ReadonlyMap<string, CollapseHandler>;\n\n  /** Get a collapse handler by shorthand property name */\n  get(shorthand: string): CollapseHandler | undefined;\n\n  /** Check if a shorthand has a collapse handler */\n  has(shorthand: string): boolean;\n\n  /** Get all registered shorthand property names */\n  getAllShorthands(): string[];\n}\n\n/**\n * Internal map of collapse handlers.\n * Will be populated as handlers are implemented.\n * @internal\n */\nconst collapseHandlerMap = new Map<string, CollapseHandler>([\n  [\"animation\", animationCollapser],\n  [\"background\", backgroundCollapser],\n  [\"border\", borderCollapser],\n  [\"border-radius\", borderRadiusCollapser],\n  [\"column-rule\", columnRuleCollapser],\n  [\"columns\", columnsCollapser],\n  [\"contain-intrinsic-size\", containIntrinsicSizeCollapser],\n  [\"flex\", flexCollapser],\n  [\"flex-flow\", flexFlowCollapser],\n  [\"font\", fontCollapser],\n  [\"gap\", gapCollapser],\n  [\"grid\", gridCollapser],\n  [\"grid-area\", gridAreaCollapser],\n  [\"grid-column\", gridColumnCollapser],\n  [\"grid-row\", gridRowCollapser],\n  [\"list-style\", listStyleCollapser],\n  [\"mask\", maskCollapser],\n  [\"offset\", offsetCollapser],\n  [\"outline\", outlineCollapser],\n  [\"overflow\", overflowCollapser],\n  [\"place-content\", placeContentCollapser],\n  [\"place-items\", placeItemsCollapser],\n  [\"place-self\", placeSelfCollapser],\n  [\"text-decoration\", textDecorationCollapser],\n  [\"text-emphasis\", textEmphasisCollapser],\n  [\"transition\", transitionCollapser],\n]);\n\n/**\n * Global collapse handler registry.\n *\n * Provides centralized access to all CollapseHandler instances.\n *\n * @example\n * ```typescript\n * import { collapseRegistry } from 'b_short';\n *\n * // Check if collapse is supported\n * if (collapseRegistry.has('overflow')) {\n *   const handler = collapseRegistry.get('overflow');\n *   const value = handler?.collapse({ 'overflow-x': 'hidden', 'overflow-y': 'auto' });\n * }\n * ```\n */\nexport const collapseRegistry: CollapseRegistry = {\n  handlers: collapseHandlerMap,\n\n  get(shorthand: string): CollapseHandler | undefined {\n    return collapseHandlerMap.get(shorthand);\n  },\n\n  has(shorthand: string): boolean {\n    return collapseHandlerMap.has(shorthand);\n  },\n\n  getAllShorthands(): string[] {\n    return Array.from(collapseHandlerMap.keys());\n  },\n};\n\n/**\n * Register a collapse handler.\n * Used internally to add handlers to the registry.\n *\n * @param shorthand - The shorthand property name\n * @param handler - The collapse handler instance\n * @internal\n */\nexport function registerCollapseHandler(shorthand: string, handler: CollapseHandler): void {\n  collapseHandlerMap.set(shorthand, handler);\n}\n","// b_path:: src/core/collapse.ts\n\n/**\n * Main collapse API for reconstructing shorthand properties from longhands.\n * @module collapse\n */\nimport { collapseRegistry } from \"../internal/collapse-registry\";\nimport { parseCssDeclaration, parseInputString, stripComments } from \"../internal/parsers\";\nimport type { BStyleWarning, CollapseOptions, CollapseResult } from \"./schema\";\nimport { DEFAULT_COLLAPSE_OPTIONS } from \"./schema\";\n\n/**\n * Parse CSS string input into a properties object\n * @internal\n */\nfunction parseCssToObject(css: string): Record<string, string> {\n  const cleaned = stripComments(css);\n  const declarations = parseInputString(cleaned);\n  const properties: Record<string, string> = {};\n\n  for (const decl of declarations) {\n    const parsed = parseCssDeclaration(decl);\n    if (parsed) {\n      properties[parsed.property] = parsed.value;\n    }\n  }\n\n  return properties;\n}\n\n/**\n * Format properties object back to CSS string\n * @internal\n */\nfunction formatCssString(properties: Record<string, string>, indent = 0): string {\n  const indentStr = \"  \".repeat(indent);\n  return Object.entries(properties)\n    .map(([prop, value]) => `${indentStr}${prop}: ${value};`)\n    .join(\"\\n\");\n}\n\n/**\n * Collapse longhand properties into shorthand values where possible.\n *\n * This function analyzes a set of CSS properties and attempts to collapse\n * related longhands into their shorthand equivalents, resulting in more\n * compact CSS output.\n *\n * Algorithm:\n * 1. Identify groups of longhands that belong to the same shorthand\n * 2. For each group, check if all required longhands are present\n * 3. If yes, attempt to collapse using the registered collapse handler\n * 4. If successful, replace longhands with shorthand in output\n * 5. If not, keep the longhand properties and report issues\n *\n * @param input - CSS properties as object or CSS string\n * @param options - Configuration options for collapse behavior\n * @returns Result object with collapsed properties/CSS, success status, and any issues\n *\n * @example\n * ```typescript\n * import { collapse } from 'b_short';\n *\n * // Object input - complete longhands\n * collapse({ 'overflow-x': 'hidden', 'overflow-y': 'hidden' });\n * // → { ok: true, result: { overflow: 'hidden' }, issues: [] }\n *\n * // Object input - incomplete longhands (with warning)\n * collapse({ 'overflow-x': 'hidden' });\n * // → {\n * //     ok: true,\n * //     result: { 'overflow-x': 'hidden' },\n * //     issues: [{ property: 'overflow', name: 'incomplete-longhands', ... }]\n * //   }\n *\n * // CSS string input with indentation\n * collapse(`\n *   overflow-x: hidden;\n *   overflow-y: auto;\n * `, { indent: 2 });\n * // → {\n * //     ok: true,\n * //     result: \"    overflow: hidden auto;\",\n * //     issues: []\n * //   }\n * ```\n */\nexport function collapse(\n  input: Record<string, string> | string,\n  options: Partial<CollapseOptions> = {}\n): CollapseResult {\n  const { indent = DEFAULT_COLLAPSE_OPTIONS.indent } = options;\n\n  // Handle string input\n  if (typeof input === \"string\") {\n    const properties = parseCssToObject(input);\n    const { properties: collapsed, issues } = collapseProperties(properties);\n    return {\n      ok: true,\n      result: formatCssString(collapsed, indent),\n      issues,\n    };\n  }\n\n  // Handle object input\n  const { properties: collapsed, issues } = collapseProperties(input);\n  return {\n    ok: true,\n    result: collapsed,\n    issues,\n  };\n}\n\n/**\n * Internal function to collapse properties object with issue tracking\n * @internal\n */\nfunction collapseProperties(properties: Record<string, string>): {\n  properties: Record<string, string>;\n  issues: BStyleWarning[];\n} {\n  const result: Record<string, string> = {};\n  const processedLonghands = new Set<string>();\n  const issues: BStyleWarning[] = [];\n\n  // Get all available shorthands that have collapse handlers\n  const availableShorthands = collapseRegistry.getAllShorthands();\n\n  // Define shorthand priority - more specific shorthands should be processed first\n  // This ensures grid-area takes precedence over grid-column/grid-row\n  const shorthandPriority: Record<string, number> = {\n    \"grid-area\": 100, // Highest priority (4 longhands)\n    \"grid-column\": 50, // Medium priority (2 longhands)\n    \"grid-row\": 50, // Medium priority (2 longhands)\n  };\n\n  // Sort shorthands by priority (higher first), then by number of longhands (more first)\n  const sortedShorthands = availableShorthands.sort((a, b) => {\n    const priorityA = shorthandPriority[a] || 0;\n    const priorityB = shorthandPriority[b] || 0;\n    if (priorityA !== priorityB) return priorityB - priorityA;\n\n    // If priority is equal, prefer shorthands with more longhands\n    const handlerA = collapseRegistry.get(a);\n    const handlerB = collapseRegistry.get(b);\n    const lengthA = handlerA?.meta.longhands.length || 0;\n    const lengthB = handlerB?.meta.longhands.length || 0;\n    return lengthB - lengthA;\n  });\n\n  // Try to collapse each shorthand\n  for (const shorthand of sortedShorthands) {\n    const collapseHandler = collapseRegistry.get(shorthand);\n    if (!collapseHandler) continue;\n\n    // Skip if any of the required longhands have already been processed\n    const hasProcessedLonghand = collapseHandler.meta.longhands.some((longhand) =>\n      processedLonghands.has(longhand)\n    );\n    if (hasProcessedLonghand) continue;\n\n    // Check if we can collapse this shorthand\n    const canCollapse = collapseHandler.canCollapse(properties);\n\n    // If we can't collapse, check if there are some (but not all) longhands present\n    if (!canCollapse) {\n      const presentLonghands = collapseHandler.meta.longhands.filter(\n        (longhand) => longhand in properties\n      );\n\n      // If some longhands are present but not all, report as issue\n      if (\n        presentLonghands.length > 0 &&\n        presentLonghands.length < collapseHandler.meta.longhands.length\n      ) {\n        const missingLonghands = collapseHandler.meta.longhands.filter(\n          (longhand) => !(longhand in properties)\n        );\n\n        issues.push({\n          property: shorthand,\n          name: \"incomplete-longhands\",\n          formattedWarning: `Cannot collapse to '${shorthand}': missing ${missingLonghands.join(\", \")}. Present: ${presentLonghands.join(\", \")}.`,\n        });\n      }\n\n      continue;\n    }\n\n    // Attempt to collapse\n    const collapsedValue = collapseHandler.collapse(properties);\n    if (collapsedValue === undefined) continue;\n\n    // Success! Use the shorthand\n    result[shorthand] = collapsedValue;\n\n    // Mark these longhands as processed\n    for (const longhand of collapseHandler.meta.longhands) {\n      processedLonghands.add(longhand);\n    }\n  }\n\n  // Add remaining properties that weren't collapsed\n  for (const [prop, value] of Object.entries(properties)) {\n    if (!processedLonghands.has(prop)) {\n      result[prop] = value;\n    }\n  }\n\n  return { properties: result, issues };\n}\n\n/**\n * Check if a set of properties can be collapsed into any shorthand.\n *\n * @param properties - Object mapping CSS property names to values\n * @returns Array of shorthand names that could be used\n *\n * @example\n * ```typescript\n * import { getCollapsibleShorthands } from 'b_short';\n *\n * getCollapsibleShorthands({ 'overflow-x': 'hidden', 'overflow-y': 'auto' });\n * // ['overflow']\n *\n * getCollapsibleShorthands({ 'overflow-x': 'hidden' });\n * // [] (missing overflow-y)\n * ```\n */\nexport function getCollapsibleShorthands(properties: Record<string, string>): string[] {\n  const collapsible: string[] = [];\n\n  for (const shorthand of collapseRegistry.getAllShorthands()) {\n    const handler = collapseRegistry.get(shorthand);\n    if (handler?.canCollapse(properties)) {\n      collapsible.push(shorthand);\n    }\n  }\n\n  return collapsible;\n}\n"]}