{"version":3,"sources":["../src/internal/parsers.ts","../src/core/schema.ts","../src/internal/property-sorter.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/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/internal/position-parser.ts","../src/handlers/background-position/expand.ts","../src/handlers/background-position/index.ts","../src/internal/directional.ts","../src/handlers/border/expand.ts","../src/handlers/border-radius/expand.ts","../src/handlers/column-rule/expand.ts","../src/handlers/columns/expand.ts","../src/handlers/contain-intrinsic-size/expand.ts","../src/handlers/flex/expand.ts","../src/handlers/flex-flow/expand.ts","../src/handlers/font/expand.ts","../src/handlers/grid/expand.ts","../src/internal/grid-line.ts","../src/handlers/grid-area/expand.ts","../src/handlers/grid-column/expand.ts","../src/handlers/grid-row/expand.ts","../src/handlers/list-style/expand.ts","../src/handlers/mask/mask-layers.ts","../src/handlers/mask/expand.ts","../src/internal/is-angle.ts","../src/handlers/offset/expand.ts","../src/handlers/outline/expand.ts","../src/handlers/overflow/expand.ts","../src/internal/place-utils.ts","../src/handlers/place-content/expand.ts","../src/handlers/place-items/expand.ts","../src/handlers/place-self/expand.ts","../src/handlers/text-decoration/expand.ts","../src/handlers/text-emphasis/expand.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/internal/border-side-parser.ts","../src/handlers/border-block/expand.ts","../src/handlers/border-block/index.ts","../src/handlers/border-block-end/expand.ts","../src/handlers/border-block-end/index.ts","../src/handlers/border-block-start/expand.ts","../src/handlers/border-block-start/index.ts","../src/handlers/border-bottom/expand.ts","../src/handlers/border-bottom/index.ts","../src/internal/trbl-expander.ts","../src/handlers/border-color/expand.ts","../src/handlers/border-color/index.ts","../src/handlers/border-image/expand.ts","../src/handlers/border-image/index.ts","../src/handlers/border-inline/expand.ts","../src/handlers/border-inline/index.ts","../src/handlers/border-inline-end/expand.ts","../src/handlers/border-inline-end/index.ts","../src/handlers/border-inline-start/expand.ts","../src/handlers/border-inline-start/index.ts","../src/handlers/border-left/expand.ts","../src/handlers/border-left/index.ts","../src/handlers/border-right/expand.ts","../src/handlers/border-right/index.ts","../src/handlers/border-style/expand.ts","../src/handlers/border-style/index.ts","../src/handlers/border-top/expand.ts","../src/handlers/border-top/index.ts","../src/handlers/border-width/expand.ts","../src/handlers/border-width/index.ts","../src/handlers/container/expand.ts","../src/handlers/container/index.ts","../src/handlers/gap/expand.ts","../src/handlers/grid-template/expand.ts","../src/handlers/grid-template/index.ts","../src/handlers/inset/expand.ts","../src/handlers/inset/index.ts","../src/handlers/inset-block/expand.ts","../src/handlers/inset-block/index.ts","../src/handlers/inset-inline/expand.ts","../src/handlers/inset-inline/index.ts","../src/handlers/margin/expand.ts","../src/handlers/margin/index.ts","../src/handlers/mask-position/expand.ts","../src/handlers/mask-position/index.ts","../src/handlers/object-position/expand.ts","../src/handlers/object-position/index.ts","../src/handlers/padding/expand.ts","../src/handlers/padding/index.ts","../src/handlers/scroll-margin/expand.ts","../src/handlers/scroll-margin/index.ts","../src/handlers/scroll-padding/expand.ts","../src/handlers/scroll-padding/index.ts","../src/internal/handler-registry.ts"],"names":["stripComments","css","result","i","j","parseInputString","input","declarations","current","char","nextChar","quoteEnd","parenCount","parenEnd","bracketEnd","decl","parseCssDeclaration","declaration","trimmed","colonIndex","property","value","FORMAT_VALUES","PROPERTY_GROUPING_VALUES","FORMAT_CSS","FORMAT_JS","GROUPING_BY_PROPERTY","GROUPING_BY_SIDE","ExpandOptions","Format","PropertyGrouping","Separator","Indent","DEFAULT_EXPAND_OPTIONS","PROPERTY_ORDER_MAP","sortProperties","obj","grouping","sortPropertiesBySide","sortPropertiesByProperty","getPropertyMetadata","prop","parts","sides","side","p","sideIndex","base","sortedEntries","a","b","orderA","orderB","metaA","metaB","kebabToCamelCase","_","letter","objectToCss","indent","separator","propertyGrouping","indentStr","sorted","key","TIME","isTime","TIMING_KEYWORDS","TIMING_FUNCTIONS","hasBalancedParentheses","openCount","isTimingFunction","DEFAULT_PROPERTY_HANDLER_OPTIONS","createPropertyHandler","config","options","validatedOptions","COLOR_FUNCTIONS","IMAGE_FUNCTIONS","matchesType","node","types","typeArray","nodeType","funcName","isNumericValueNode","isPositionValueNode","keywords","isSizeValueNode","hasTopLevelCommas","detectFunctions","parenDepth","bracketDepth","hasFunctions","splitLayers","layers","currentLayer","parseLayersGeneric","parseSingleLayer","layerStrings","layerStr","parsedLayer","ANIMATION_DEFAULTS","needsAdvancedParser","parseAnimationLayers","layerValue","ast","children","child","processCssChildren","timeCount","matched","name","funcValue","timingValue","timeValue","numValue","identValue","reconstructLayers","properties","l","values","KEYWORD","ITERATION_COUNT","DIRECTION","FILL_MODE","PLAY_STATE","parseAnimationValue","layeredResult","tokens","token","animationHandler","animation","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","match","BACKGROUND_DEFAULTS","parseBackgroundLayers","parsedLayers","globalColor","distributeLayerProperties","layer","layerProps","parseSingleLayerWithCssTree","S","hasPositionSize","funcNode","positionParts","sizeParts","currentChild","sizeChild","repeat","nextName","color","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","POSITION_KEYWORDS","HORIZONTAL_KEYWORDS","VERTICAL_KEYWORDS","parsePosition","smartSplit","part","second","third","fourth","depth","expandBackgroundPosition","x","y","xValues","yValues","backgroundPositionHandler","directionalCache","directional","direction","WIDTH","STYLE","suffix","longhand","all","filtered","width","style","boxSizing","parseBorderValue","widthProps","styleProps","colorProps","borderHandler","border","expand_default","expandFourValues","borderRadiusHandler","slashIndex","horizontalPart","verticalPart","horizontalValues","verticalValues","horizontal","vertical","corners","expanded","columnRuleHandler","parsed","columnRule","columnsHandler","INTEGER","specificValues","autoValues","val","type","autoValue","containIntrinsicSizeHandler","parseValue","nextToken","widthValue","heightValue","flexHandler","numberPattern","flexBasisKeywordPattern","fitContentFn","classified","flexFlowHandler","directionPattern","wrapPattern","wrap","states","parse","state","buffer","c","index","parseFontValue","family","fontHandler","font","GRID_DEFAULTS","parseValueAndGetSegments","ne","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","isCustomIdent","isInteger","parseGridLine","rest","seenInt","seenIdent","getDefaultEnd","start","gridAreaHandler","rowStart","columnStart","rowEnd","columnEnd","gridColumnHandler","startValue","endValue","gridRowHandler","POSITION","COMMON_TYPE","IDENT","STRING_VALUE","listStyleHandler","normalizedValue","explicitlySet","listStyle","MASK_DEFAULTS","parseMaskLayers","hasUnrecognizedToken","parseMaskValue","trimmedValue","maskHandler","mask","ANGLE","isAngle","splitTopLevelSlash","inQuotes","quoteChar","main","anchor","tokenizeRespectingFunctions","isPositionKeyword","parsePath","parseDistance","parseRotate","parseAnchor","parseOffsetValue","slashSplit","positionResult","pathResult","distanceResult","rotateResult","parsedAnchor","offsetHandler","outlineHandler","outline","overflowHandler","validValues","consolidatePlaceTokens","nextTokenPattern","out","t","placeContentHandler","processedValues","validValuePattern","placeItemsHandler","isValidAlignItemsValue","isValidJustifyItemsValue","alignVal","justifyVal","placeSelfHandler","isValidAlignSelfValue","isValidJustifySelfValue","LINE","THICKNESS","textDecorationHandler","lines","hasStyle","hasColor","hasThickness","textDecoration","FILL","SHAPE","textEmphasisHandler","textEmphasis","TRANSITION_DEFAULTS","parseTransitionLayers","PROPERTY_KEYWORD","parseTransitionValue","transitionHandler","transition","prefix","shorthand","DEFAULT_MAX_LINE_WIDTH","LINE_NUMBER_PADDING","DEFAULT_CONTEXT_WINDOW_SIZE","containsVar","validate","errors","warnings","syntax","z","uniqueDecls","err","stack","id","suppressNoise","msg","LOG_LEVEL","QUIET","origWarn","origError","args","error","formattedWarnings","cssLines","warning","formattedError","formatErrorDisplay","calculateLineWindow","errorLine","totalLines","contextWindowSize","end","formatLineNumber","lineNum","maxLineNum","maxDigits","paddedNum","trimLine","line","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","validation","inputs","finalProperties","issues","normalized","nestedParse","nestedLonghand","camelCased","ok","allIssues","BORDER_STYLES","BORDER_WIDTHS","parseBorderSide","createBorderSideExpander","expandBorderBlock","borderBlockHandler","expandBorderBlockEnd","borderBlockEndHandler","expandBorderBlockStart","borderBlockStartHandler","expandBorderBottom","borderBottomHandler","expandTRBL","top","bottom","right","left","createTRBLExpander","expandBorderColor","borderColorHandler","REPEAT_KEYWORDS","expandBorderImage","source","slice","outset","slashParts","mainPart","sliceTokens","repeatTokens","borderImageHandler","expandBorderInline","borderInlineHandler","expandBorderInlineEnd","borderInlineEndHandler","expandBorderInlineStart","borderInlineStartHandler","expandBorderLeft","borderLeftHandler","expandBorderRight","borderRightHandler","expandBorderStyle","borderStyleHandler","expandBorderTop","borderTopHandler","expandBorderWidth","borderWidthHandler","expandContainer","containerHandler","parseGapValue","gapHandler","expandGridTemplate","columns","areaMatches","remaining","area","gridTemplateHandler","expandInset","insetHandler","expandInsetBlock","insetBlockHandler","expandInsetInline","insetInlineHandler","expandMargin","marginHandler","expandMaskPosition","maskPositionHandler","expandObjectPosition","objectPositionHandler","expandPadding","paddingHandler","expandScrollMargin","scrollMarginHandler","expandScrollPadding","scrollPaddingHandler","handlerMap","longhandToShorthandsMap","handler","existing","registry","category","h","expandProperty","validateProperty","isShorthandProperty"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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/**\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/**\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};\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// v2.0.0: Collapse types removed - Expansion only\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-49)\n  \"background-image\": 40,\n  \"background-position\": 41,\n  \"background-position-x\": 42,\n  \"background-position-y\": 43,\n  \"background-size\": 44,\n  \"background-repeat\": 45,\n  \"background-attachment\": 46,\n  \"background-origin\": 47,\n  \"background-clip\": 48,\n  \"background-color\": 49,\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-239)\n  \"mask-image\": 230,\n  \"mask-mode\": 231,\n  \"mask-position\": 232,\n  \"mask-position-x\": 233,\n  \"mask-position-y\": 234,\n  \"mask-size\": 235,\n  \"mask-repeat\": 236,\n  \"mask-origin\": 237,\n  \"mask-clip\": 238,\n  \"mask-composite\": 239,\n\n  // Object properties (indices 245-246)\n  \"object-position-x\": 245,\n  \"object-position-y\": 246,\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/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  \"border\",\n  \"grid\",\n  \"position\",\n  \"positioning\",\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/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/internal/position-parser.ts\n\n/**\n * Position parser utility for CSS position shorthands\n *\n * Handles: background-position, mask-position, object-position\n * Grammar: [ left | center | right | top | bottom | <length-percentage> ]\n * or [ [ left | center | right ] [ top | center | bottom ] ]\n * or [ [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ] ]\n */\n\nexport interface PositionResult {\n  x: string;\n  y: string;\n}\n\nconst POSITION_KEYWORDS = new Set([\"left\", \"center\", \"right\", \"top\", \"bottom\"]);\nconst HORIZONTAL_KEYWORDS = new Set([\"left\", \"center\", \"right\"]);\nconst VERTICAL_KEYWORDS = new Set([\"top\", \"center\", \"bottom\"]);\n\n/**\n * Parse a CSS position value into x and y components\n */\nexport function parsePosition(value: string): PositionResult {\n  const trimmed = value.trim();\n\n  // Empty string defaults to 0% 0%\n  if (!trimmed) {\n    return { x: \"0%\", y: \"0%\" };\n  }\n\n  // Handle global keywords\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\"\n  ) {\n    return { x: trimmed, y: trimmed };\n  }\n\n  // Split by whitespace (but preserve calc(), var(), etc.)\n  const parts = smartSplit(trimmed);\n\n  if (parts.length === 0) {\n    return { x: \"0%\", y: \"0%\" };\n  }\n\n  // 1-value syntax\n  if (parts.length === 1) {\n    const part = parts[0];\n\n    // If it's a vertical keyword, treat as y-only\n    if (VERTICAL_KEYWORDS.has(part)) {\n      return { x: \"center\", y: part };\n    }\n\n    // If it's a horizontal keyword or length, treat as x-only\n    if (HORIZONTAL_KEYWORDS.has(part) || !POSITION_KEYWORDS.has(part)) {\n      return { x: part, y: \"center\" };\n    }\n\n    // Unknown keyword\n    return { x: part, y: \"center\" };\n  }\n\n  // 2-value syntax\n  if (parts.length === 2) {\n    const [first, second] = parts;\n\n    // Both are keywords\n    if (POSITION_KEYWORDS.has(first) && POSITION_KEYWORDS.has(second)) {\n      // Check if they're swapped (top/bottom first)\n      if (VERTICAL_KEYWORDS.has(first) && HORIZONTAL_KEYWORDS.has(second)) {\n        return { x: second, y: first };\n      }\n      return { x: first, y: second };\n    }\n\n    // Standard case: x y\n    return { x: first, y: second };\n  }\n\n  // 3-value syntax: side offset center (edge-offset syntax)\n  if (parts.length === 3) {\n    const [first, second, third] = parts;\n\n    // Pattern: left 10px center → x: left 10px, y: center\n    if (HORIZONTAL_KEYWORDS.has(first) && !POSITION_KEYWORDS.has(second)) {\n      return { x: `${first} ${second}`, y: third };\n    }\n\n    // Pattern: center top 10px → x: center, y: top 10px\n    if (VERTICAL_KEYWORDS.has(second) && !POSITION_KEYWORDS.has(third)) {\n      return { x: first, y: `${second} ${third}` };\n    }\n\n    // Pattern: center bottom 10px → x: center, y: bottom 10px\n    if (!POSITION_KEYWORDS.has(first) && VERTICAL_KEYWORDS.has(second)) {\n      return { x: first, y: `${second} ${third}` };\n    }\n\n    // Fallback: first is keyword, second is offset\n    if (HORIZONTAL_KEYWORDS.has(first)) {\n      return { x: `${first} ${second}`, y: third };\n    }\n\n    return { x: first, y: `${second} ${third}` };\n  }\n\n  // 4-value syntax: side offset side offset\n  if (parts.length === 4) {\n    const [first, second, third, fourth] = parts;\n\n    // Determine which pair is horizontal vs vertical based on first keyword\n    if (HORIZONTAL_KEYWORDS.has(first)) {\n      // first+second is horizontal, third+fourth is vertical\n      return { x: `${first} ${second}`, y: `${third} ${fourth}` };\n    }\n    // first+second is vertical, third+fourth is horizontal\n    return { x: `${third} ${fourth}`, y: `${first} ${second}` };\n  }\n\n  // Fallback for complex cases\n  return { x: parts[0], y: parts[1] || \"center\" };\n}\n\n/**\n * Smart split that preserves function calls like calc(), var()\n */\nfunction smartSplit(value: string): string[] {\n  const result: 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      if (current.trim()) {\n        result.push(current.trim());\n        current = \"\";\n      }\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    result.push(current.trim());\n  }\n\n  return result;\n}\n","// b_path:: src/handlers/background-position/expand.ts\n\nimport { splitLayers } from \"../../internal/layer-parser-utils\";\nimport { parsePosition } from \"../../internal/position-parser\";\n\n/**\n * Expand background-position shorthand to longhand properties\n *\n * background-position → background-position-x, background-position-y\n *\n * Handles both single and multi-layer values:\n * - \"center\" → { x: \"center\", y: \"center\" }\n * - \"center, left top\" → { x: \"center, left\", y: \"center, top\" }\n */\nexport function expandBackgroundPosition(value: string): Record<string, string> {\n  // Check if we have multiple layers (comma-separated)\n  const layers = splitLayers(value);\n\n  if (layers.length === 1) {\n    // Single layer - simple case\n    const { x, y } = parsePosition(value);\n    return {\n      \"background-position-x\": x,\n      \"background-position-y\": y,\n    };\n  }\n\n  // Multi-layer - expand each layer and rejoin\n  const xValues: string[] = [];\n  const yValues: string[] = [];\n\n  for (const layer of layers) {\n    const { x, y } = parsePosition(layer);\n    xValues.push(x);\n    yValues.push(y);\n  }\n\n  return {\n    \"background-position-x\": xValues.join(\", \"),\n    \"background-position-y\": yValues.join(\", \"),\n  };\n}\n","// b_path:: src/handlers/background-position/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBackgroundPosition } from \"./expand\";\n\nexport const backgroundPositionHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"background-position\",\n    longhands: [\"background-position-x\", \"background-position-y\"],\n    category: \"position\",\n  },\n  expand: (value) => expandBackgroundPosition(value),\n};\n\nexport { expandBackgroundPosition };\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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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 { backgroundPositionHandler } from \"../handlers/background-position\";\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  \"background-position\": (value: string) => backgroundPositionHandler.expand(value),\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 { 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 } 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  } = options;\n\n  const validation = validate(cleanedInput);\n\n  const inputs = parseInputString(cleanedInput);\n  const finalProperties: Record<string, string> = {};\n  const issues: BStyleWarning[] = [];\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      finalProperties[property] = normalized;\n      continue;\n    }\n\n    const parse = shorthand[property];\n    const longhand = parse?.(normalized);\n\n    if (longhand) {\n      // Recursively expand any longhands that are themselves shorthands\n      // e.g., background → background-position → background-position-x/y\n      // Note: Skip recursive expansion for multi-layer values (e.g., \"0% 0%, 0% 0%\")\n      // as they need layer-aware splitting first\n      for (const [prop, val] of Object.entries(longhand)) {\n        const nestedParse = shorthand[prop];\n\n        if (nestedParse) {\n          const nestedLonghand = nestedParse(val);\n          if (nestedLonghand) {\n            Object.assign(finalProperties, nestedLonghand);\n            continue;\n          }\n        }\n        finalProperties[prop] = val;\n      }\n    } else {\n      finalProperties[property] = normalized;\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    }\n  }\n\n  let finalResult: Record<string, string> | string | undefined;\n\n  if (Object.keys(finalProperties).length === 0) {\n    finalResult = undefined;\n  } else if (format === FORMAT_CSS) {\n    finalResult = objectToCss(finalProperties, indent, separator, propertyGrouping);\n  } else {\n    const sorted = sortProperties(finalProperties, 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  }\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/internal/border-side-parser.ts\n\n/**\n * Parse border-side shorthand (border-top, border-right, etc.)\n *\n * Grammar: <line-width> || <line-style> || <color>\n * All components are optional\n */\n\nconst BORDER_STYLES = new Set([\n  \"none\",\n  \"hidden\",\n  \"dotted\",\n  \"dashed\",\n  \"solid\",\n  \"double\",\n  \"groove\",\n  \"ridge\",\n  \"inset\",\n  \"outset\",\n]);\n\nconst BORDER_WIDTHS = new Set([\"thin\", \"medium\", \"thick\"]);\n\nexport interface BorderSideResult {\n  width: string;\n  style: string;\n  color: string;\n}\n\nexport function parseBorderSide(value: string): BorderSideResult {\n  const trimmed = value.trim();\n\n  // Global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\"\n  ) {\n    return { width: trimmed, style: trimmed, color: trimmed };\n  }\n\n  let width = \"medium\";\n  let style = \"none\";\n  let color = \"currentcolor\";\n\n  // Split by whitespace preserving functions\n  const parts = smartSplit(trimmed);\n\n  for (const part of parts) {\n    if (BORDER_STYLES.has(part.toLowerCase())) {\n      style = part;\n    } else if (BORDER_WIDTHS.has(part.toLowerCase()) || isLength(part)) {\n      width = part;\n    } else {\n      // Assume color\n      color = part;\n    }\n  }\n\n  return { width, style, color };\n}\n\nfunction smartSplit(value: string): string[] {\n  const result: 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      if (current.trim()) {\n        result.push(current.trim());\n        current = \"\";\n      }\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    result.push(current.trim());\n  }\n\n  return result;\n}\n\nfunction isLength(value: string): boolean {\n  if (value === \"0\") return true;\n  if (value.startsWith(\"calc(\")) return true;\n  if (value.startsWith(\"var(\")) return true;\n  // Check for length units\n  return /^-?\\d*\\.?\\d+(px|em|rem|%|vh|vw|ch|ex|cm|mm|in|pt|pc)$/.test(value);\n}\n\nexport function createBorderSideExpander(side: \"top\" | \"right\" | \"bottom\" | \"left\") {\n  return (value: string): Record<string, string> => {\n    const { width, style, color } = parseBorderSide(value);\n    return {\n      [`border-${side}-width`]: width,\n      [`border-${side}-style`]: style,\n      [`border-${side}-color`]: color,\n    };\n  };\n}\n","// b_path:: src/handlers/border-block/expand.ts\n\nimport { parseBorderSide } from \"../../internal/border-side-parser\";\n\nexport function expandBorderBlock(value: string): Record<string, string> {\n  const { width, style, color } = parseBorderSide(value);\n\n  return {\n    \"border-block-start-width\": width,\n    \"border-block-start-style\": style,\n    \"border-block-start-color\": color,\n    \"border-block-end-width\": width,\n    \"border-block-end-style\": style,\n    \"border-block-end-color\": color,\n  };\n}\n","// b_path:: src/handlers/border-block/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderBlock } from \"./expand\";\n\nexport const borderBlockHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-block\",\n    longhands: [\n      \"border-block-start-width\",\n      \"border-block-start-style\",\n      \"border-block-start-color\",\n      \"border-block-end-width\",\n      \"border-block-end-style\",\n      \"border-block-end-color\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderBlock(value),\n};\n\nexport { expandBorderBlock };\n","// b_path:: src/handlers/border-block-end/expand.ts\n\nimport { parseBorderSide } from \"../../internal/border-side-parser\";\n\nexport function expandBorderBlockEnd(value: string): Record<string, string> {\n  const { width, style, color } = parseBorderSide(value);\n\n  return {\n    \"border-block-end-width\": width,\n    \"border-block-end-style\": style,\n    \"border-block-end-color\": color,\n  };\n}\n","// b_path:: src/handlers/border-block-end/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderBlockEnd } from \"./expand\";\n\nexport const borderBlockEndHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-block-end\",\n    longhands: [\"border-block-end-width\", \"border-block-end-style\", \"border-block-end-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderBlockEnd(value),\n};\n\nexport { expandBorderBlockEnd };\n","// b_path:: src/handlers/border-block-start/expand.ts\n\nimport { parseBorderSide } from \"../../internal/border-side-parser\";\n\nexport function expandBorderBlockStart(value: string): Record<string, string> {\n  const { width, style, color } = parseBorderSide(value);\n\n  return {\n    \"border-block-start-width\": width,\n    \"border-block-start-style\": style,\n    \"border-block-start-color\": color,\n  };\n}\n","// b_path:: src/handlers/border-block-start/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderBlockStart } from \"./expand\";\n\nexport const borderBlockStartHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-block-start\",\n    longhands: [\"border-block-start-width\", \"border-block-start-style\", \"border-block-start-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderBlockStart(value),\n};\n\nexport { expandBorderBlockStart };\n","// b_path:: src/handlers/border-bottom/expand.ts\n\nimport { createBorderSideExpander } from \"../../internal/border-side-parser\";\n\nexport const expandBorderBottom = createBorderSideExpander(\"bottom\");\n","// b_path:: src/handlers/border-bottom/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderBottom } from \"./expand\";\n\nexport const borderBottomHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-bottom\",\n    longhands: [\"border-bottom-width\", \"border-bottom-style\", \"border-bottom-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderBottom(value),\n};\n\nexport { expandBorderBottom };\n","// b_path:: src/internal/trbl-expander.ts\n\n/**\n * TRBL (Top-Right-Bottom-Left) expander utility for box model shorthands\n *\n * Handles: margin, padding, inset, scroll-margin, scroll-padding, border-width, border-style, border-color\n *\n * CSS grammar:\n * - 1 value: all sides\n * - 2 values: vertical horizontal\n * - 3 values: top horizontal bottom\n * - 4 values: top right bottom left\n */\n\nexport interface TRBLResult {\n  top: string;\n  right: string;\n  bottom: string;\n  left: string;\n}\n\n/**\n * Smart split that preserves function calls like calc(), var()\n */\nfunction smartSplit(value: string): string[] {\n  const result: 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      if (current.trim()) {\n        result.push(current.trim());\n        current = \"\";\n      }\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    result.push(current.trim());\n  }\n\n  return result;\n}\n\n/**\n * Expand a TRBL shorthand value into individual side values\n *\n * @param value - The CSS value (e.g., \"10px 20px\", \"1em\")\n * @returns Object with top, right, bottom, left values\n *\n * @example\n * expandTRBL(\"10px\") // { top: \"10px\", right: \"10px\", bottom: \"10px\", left: \"10px\" }\n * expandTRBL(\"10px 20px\") // { top: \"10px\", right: \"20px\", bottom: \"10px\", left: \"20px\" }\n * expandTRBL(\"10px 20px 30px\") // { top: \"10px\", right: \"20px\", bottom: \"30px\", left: \"20px\" }\n * expandTRBL(\"10px 20px 30px 40px\") // { top: \"10px\", right: \"20px\", bottom: \"30px\", left: \"40px\" }\n */\nexport function expandTRBL(value: string): TRBLResult {\n  const trimmed = value.trim();\n\n  // Handle global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\"\n  ) {\n    return { top: trimmed, right: trimmed, bottom: trimmed, left: trimmed };\n  }\n\n  const parts = smartSplit(trimmed);\n\n  if (parts.length === 0) {\n    return { top: \"0\", right: \"0\", bottom: \"0\", left: \"0\" };\n  }\n\n  // 1 value: all sides\n  if (parts.length === 1) {\n    const val = parts[0];\n    return { top: val, right: val, bottom: val, left: val };\n  }\n\n  // 2 values: vertical horizontal\n  if (parts.length === 2) {\n    const [vertical, horizontal] = parts;\n    return { top: vertical, right: horizontal, bottom: vertical, left: horizontal };\n  }\n\n  // 3 values: top horizontal bottom\n  if (parts.length === 3) {\n    const [top, horizontal, bottom] = parts;\n    return { top, right: horizontal, bottom, left: horizontal };\n  }\n\n  // 4 values: top right bottom left\n  const [top, right, bottom, left] = parts;\n  return { top, right, bottom, left };\n}\n\n/**\n * Create a TRBL property expander for a given property prefix\n *\n * @param prefix - The property prefix (e.g., \"margin\", \"padding\", \"border-width\")\n * @returns Function that expands the shorthand to longhand properties\n *\n * @example\n * const expandMargin = createTRBLExpander(\"margin\");\n * expandMargin(\"10px 20px\") // { \"margin-top\": \"10px\", \"margin-right\": \"20px\", ... }\n */\nexport function createTRBLExpander(prefix: string) {\n  return (value: string): Record<string, string> => {\n    const { top, right, bottom, left } = expandTRBL(value);\n    return {\n      [`${prefix}-top`]: top,\n      [`${prefix}-right`]: right,\n      [`${prefix}-bottom`]: bottom,\n      [`${prefix}-left`]: left,\n    };\n  };\n}\n","// b_path:: src/handlers/border-color/expand.ts\n\nimport { expandTRBL } from \"../../internal/trbl-expander\";\n\nexport function expandBorderColor(value: string): Record<string, string> {\n  const { top, right, bottom, left } = expandTRBL(value);\n\n  return {\n    \"border-top-color\": top,\n    \"border-right-color\": right,\n    \"border-bottom-color\": bottom,\n    \"border-left-color\": left,\n  };\n}\n","// b_path:: src/handlers/border-color/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderColor } from \"./expand\";\n\nexport const borderColorHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-color\",\n    longhands: [\n      \"border-top-color\",\n      \"border-right-color\",\n      \"border-bottom-color\",\n      \"border-left-color\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderColor(value),\n};\n\nexport { expandBorderColor };\n","// b_path:: src/handlers/border-image/expand.ts\n\n/**\n * Border-image shorthand\n * Grammar: <'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>\n *\n * Components:\n * - source: url(), gradient, none\n * - slice: 1-4 numbers/percentages + optional 'fill'\n * - width: 1-4 length/number/auto (after first /)\n * - outset: 1-4 length/number (after second /)\n * - repeat: stretch|repeat|round|space (1-2 values)\n */\n\nconst REPEAT_KEYWORDS = new Set([\"stretch\", \"repeat\", \"round\", \"space\"]);\n\nexport function expandBorderImage(value: string): Record<string, string> {\n  const trimmed = value.trim();\n\n  // Global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\" ||\n    trimmed === \"none\"\n  ) {\n    const val = trimmed === \"none\" ? trimmed : trimmed;\n    return {\n      \"border-image-source\": val,\n      \"border-image-slice\": val,\n      \"border-image-width\": val,\n      \"border-image-outset\": val,\n      \"border-image-repeat\": val,\n    };\n  }\n\n  let source = \"none\";\n  let slice = \"100%\";\n  let width = \"1\";\n  let outset = \"0\";\n  let repeat = \"stretch\";\n\n  // Split by / for slice/width/outset\n  const slashParts = trimmed.split(\"/\").map((p) => p.trim());\n\n  // First part contains source, slice, and repeat\n  const mainPart = slashParts[0];\n  const tokens = smartSplit(mainPart);\n\n  const sliceTokens: string[] = [];\n  const repeatTokens: string[] = [];\n\n  for (const token of tokens) {\n    // Check if it's a source (url, gradient, image-set)\n    if (\n      token.startsWith(\"url(\") ||\n      token.startsWith(\"linear-gradient(\") ||\n      token.startsWith(\"radial-gradient(\") ||\n      token.startsWith(\"image-set(\")\n    ) {\n      source = token;\n    }\n    // Check if it's a repeat keyword\n    else if (REPEAT_KEYWORDS.has(token)) {\n      repeatTokens.push(token);\n    }\n    // Otherwise it's part of slice\n    else {\n      sliceTokens.push(token);\n    }\n  }\n\n  // Build slice value\n  if (sliceTokens.length > 0) {\n    slice = sliceTokens.join(\" \");\n  }\n\n  // Build repeat value\n  if (repeatTokens.length > 0) {\n    repeat = repeatTokens.join(\" \");\n  }\n\n  // Handle width (after first /)\n  if (slashParts.length > 1) {\n    width = slashParts[1];\n  }\n\n  // Handle outset (after second /)\n  if (slashParts.length > 2) {\n    outset = slashParts[2];\n  }\n\n  return {\n    \"border-image-source\": source,\n    \"border-image-slice\": slice,\n    \"border-image-width\": width,\n    \"border-image-outset\": outset,\n    \"border-image-repeat\": repeat,\n  };\n}\n\nfunction smartSplit(value: string): string[] {\n  const result: 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      if (current.trim()) {\n        result.push(current.trim());\n        current = \"\";\n      }\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    result.push(current.trim());\n  }\n\n  return result;\n}\n","// b_path:: src/handlers/border-image/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderImage } from \"./expand\";\n\nexport const borderImageHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-image\",\n    longhands: [\n      \"border-image-source\",\n      \"border-image-slice\",\n      \"border-image-width\",\n      \"border-image-outset\",\n      \"border-image-repeat\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderImage(value),\n};\n\nexport { expandBorderImage };\n","// b_path:: src/handlers/border-inline/expand.ts\n\nimport { parseBorderSide } from \"../../internal/border-side-parser\";\n\nexport function expandBorderInline(value: string): Record<string, string> {\n  const { width, style, color } = parseBorderSide(value);\n\n  return {\n    \"border-inline-start-width\": width,\n    \"border-inline-start-style\": style,\n    \"border-inline-start-color\": color,\n    \"border-inline-end-width\": width,\n    \"border-inline-end-style\": style,\n    \"border-inline-end-color\": color,\n  };\n}\n","// b_path:: src/handlers/border-inline/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderInline } from \"./expand\";\n\nexport const borderInlineHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-inline\",\n    longhands: [\n      \"border-inline-start-width\",\n      \"border-inline-start-style\",\n      \"border-inline-start-color\",\n      \"border-inline-end-width\",\n      \"border-inline-end-style\",\n      \"border-inline-end-color\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderInline(value),\n};\n\nexport { expandBorderInline };\n","// b_path:: src/handlers/border-inline-end/expand.ts\n\nimport { parseBorderSide } from \"../../internal/border-side-parser\";\n\nexport function expandBorderInlineEnd(value: string): Record<string, string> {\n  const { width, style, color } = parseBorderSide(value);\n\n  return {\n    \"border-inline-end-width\": width,\n    \"border-inline-end-style\": style,\n    \"border-inline-end-color\": color,\n  };\n}\n","// b_path:: src/handlers/border-inline-end/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderInlineEnd } from \"./expand\";\n\nexport const borderInlineEndHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-inline-end\",\n    longhands: [\"border-inline-end-width\", \"border-inline-end-style\", \"border-inline-end-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderInlineEnd(value),\n};\n\nexport { expandBorderInlineEnd };\n","// b_path:: src/handlers/border-inline-start/expand.ts\n\nimport { parseBorderSide } from \"../../internal/border-side-parser\";\n\nexport function expandBorderInlineStart(value: string): Record<string, string> {\n  const { width, style, color } = parseBorderSide(value);\n\n  return {\n    \"border-inline-start-width\": width,\n    \"border-inline-start-style\": style,\n    \"border-inline-start-color\": color,\n  };\n}\n","// b_path:: src/handlers/border-inline-start/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderInlineStart } from \"./expand\";\n\nexport const borderInlineStartHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-inline-start\",\n    longhands: [\n      \"border-inline-start-width\",\n      \"border-inline-start-style\",\n      \"border-inline-start-color\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderInlineStart(value),\n};\n\nexport { expandBorderInlineStart };\n","// b_path:: src/handlers/border-left/expand.ts\n\nimport { createBorderSideExpander } from \"../../internal/border-side-parser\";\n\nexport const expandBorderLeft = createBorderSideExpander(\"left\");\n","// b_path:: src/handlers/border-left/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderLeft } from \"./expand\";\n\nexport const borderLeftHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-left\",\n    longhands: [\"border-left-width\", \"border-left-style\", \"border-left-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderLeft(value),\n};\n\nexport { expandBorderLeft };\n","// b_path:: src/handlers/border-right/expand.ts\n\nimport { createBorderSideExpander } from \"../../internal/border-side-parser\";\n\nexport const expandBorderRight = createBorderSideExpander(\"right\");\n","// b_path:: src/handlers/border-right/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderRight } from \"./expand\";\n\nexport const borderRightHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-right\",\n    longhands: [\"border-right-width\", \"border-right-style\", \"border-right-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderRight(value),\n};\n\nexport { expandBorderRight };\n","// b_path:: src/handlers/border-style/expand.ts\n\nimport { expandTRBL } from \"../../internal/trbl-expander\";\n\nexport function expandBorderStyle(value: string): Record<string, string> {\n  const { top, right, bottom, left } = expandTRBL(value);\n\n  return {\n    \"border-top-style\": top,\n    \"border-right-style\": right,\n    \"border-bottom-style\": bottom,\n    \"border-left-style\": left,\n  };\n}\n","// b_path:: src/handlers/border-style/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderStyle } from \"./expand\";\n\nexport const borderStyleHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-style\",\n    longhands: [\n      \"border-top-style\",\n      \"border-right-style\",\n      \"border-bottom-style\",\n      \"border-left-style\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderStyle(value),\n};\n\nexport { expandBorderStyle };\n","// b_path:: src/handlers/border-top/expand.ts\n\nimport { createBorderSideExpander } from \"../../internal/border-side-parser\";\n\nexport const expandBorderTop = createBorderSideExpander(\"top\");\n","// b_path:: src/handlers/border-top/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderTop } from \"./expand\";\n\nexport const borderTopHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-top\",\n    longhands: [\"border-top-width\", \"border-top-style\", \"border-top-color\"],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderTop(value),\n};\n\nexport { expandBorderTop };\n","// b_path:: src/handlers/border-width/expand.ts\n\nimport { expandTRBL } from \"../../internal/trbl-expander\";\n\nexport function expandBorderWidth(value: string): Record<string, string> {\n  const { top, right, bottom, left } = expandTRBL(value);\n\n  return {\n    \"border-top-width\": top,\n    \"border-right-width\": right,\n    \"border-bottom-width\": bottom,\n    \"border-left-width\": left,\n  };\n}\n","// b_path:: src/handlers/border-width/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandBorderWidth } from \"./expand\";\n\nexport const borderWidthHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"border-width\",\n    longhands: [\n      \"border-top-width\",\n      \"border-right-width\",\n      \"border-bottom-width\",\n      \"border-left-width\",\n    ],\n    category: \"border\",\n  },\n  expand: (value) => expandBorderWidth(value),\n};\n\nexport { expandBorderWidth };\n","// b_path:: src/handlers/container/expand.ts\n\nexport function expandContainer(value: string): Record<string, string> {\n  const trimmed = value.trim();\n\n  // Global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\"\n  ) {\n    return {\n      \"container-name\": trimmed,\n      \"container-type\": trimmed,\n    };\n  }\n\n  // Split on /\n  const parts = trimmed.split(\"/\").map((p) => p.trim());\n\n  if (parts.length === 1) {\n    // Just name, or just type if it's a type keyword\n    const val = parts[0];\n    if (val === \"none\" || val === \"size\" || val === \"inline-size\" || val === \"normal\") {\n      return {\n        \"container-name\": \"none\",\n        \"container-type\": val,\n      };\n    }\n    return {\n      \"container-name\": val,\n      \"container-type\": \"normal\",\n    };\n  }\n\n  // name / type\n  return {\n    \"container-name\": parts[0],\n    \"container-type\": parts[1],\n  };\n}\n","// b_path:: src/handlers/container/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandContainer } from \"./expand\";\n\nexport const containerHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"container\",\n    longhands: [\"container-name\", \"container-type\"],\n    category: \"layout\",\n  },\n  expand: (value) => expandContainer(value),\n};\n\nexport { expandContainer };\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/handlers/grid-template/expand.ts\n\n/**\n * Grid-template is complex - supports multiple syntaxes:\n * 1. none\n * 2. grid-template-rows / grid-template-columns\n * 3. [ line-names ] \"grid-area-strings\" track-size [ line-names ]\n *\n * For v2.0.0, we'll handle the common cases correctly\n */\n\nexport function expandGridTemplate(value: string): Record<string, string> {\n  const trimmed = value.trim();\n\n  // Global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\" ||\n    trimmed === \"none\"\n  ) {\n    return {\n      \"grid-template-rows\": trimmed,\n      \"grid-template-columns\": trimmed,\n      \"grid-template-areas\": trimmed === \"none\" ? \"none\" : trimmed,\n    };\n  }\n\n  // Check for / separator (rows / columns syntax)\n  if (trimmed.includes(\" / \")) {\n    const [rows, columns] = trimmed.split(\" / \").map((p) => p.trim());\n    return {\n      \"grid-template-rows\": rows,\n      \"grid-template-columns\": columns,\n      \"grid-template-areas\": \"none\",\n    };\n  }\n\n  // Check for grid-area syntax (contains quotes)\n  if (trimmed.includes('\"') || trimmed.includes(\"'\")) {\n    // Complex grid-areas syntax\n    // Extract area strings and optional track sizes\n    const areaMatches = trimmed.match(/[\"'][^\"']+[\"']/g);\n    if (areaMatches) {\n      const areas = areaMatches.join(\" \");\n      // Remove area strings to get track sizes\n      let remaining = trimmed;\n      for (const area of areaMatches) {\n        remaining = remaining.replace(area, \"\");\n      }\n      const trackSize = remaining.trim() || \"auto\";\n\n      return {\n        \"grid-template-rows\": trackSize,\n        \"grid-template-columns\": \"none\",\n        \"grid-template-areas\": areas,\n      };\n    }\n  }\n\n  // Fallback: treat as rows\n  return {\n    \"grid-template-rows\": trimmed,\n    \"grid-template-columns\": \"none\",\n    \"grid-template-areas\": \"none\",\n  };\n}\n","// b_path:: src/handlers/grid-template/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandGridTemplate } from \"./expand\";\n\nexport const gridTemplateHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"grid-template\",\n    longhands: [\"grid-template-rows\", \"grid-template-columns\", \"grid-template-areas\"],\n    category: \"grid\",\n  },\n  expand: (value) => expandGridTemplate(value),\n};\n\nexport { expandGridTemplate };\n","// b_path:: src/handlers/inset/expand.ts\n\nimport { expandTRBL } from \"../../internal/trbl-expander\";\n\nexport function expandInset(value: string): Record<string, string> {\n  const { top, right, bottom, left } = expandTRBL(value);\n\n  return {\n    top,\n    right,\n    bottom,\n    left,\n  };\n}\n","// b_path:: src/handlers/inset/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandInset } from \"./expand\";\n\nexport const insetHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"inset\",\n    longhands: [\"top\", \"right\", \"bottom\", \"left\"],\n    category: \"positioning\",\n  },\n  expand: (value) => expandInset(value),\n};\n\nexport { expandInset };\n","// b_path:: src/handlers/inset-block/expand.ts\n\nexport function expandInsetBlock(value: string): Record<string, string> {\n  const trimmed = value.trim();\n\n  // Global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\"\n  ) {\n    return {\n      \"inset-block-start\": trimmed,\n      \"inset-block-end\": trimmed,\n    };\n  }\n\n  const parts = trimmed.split(/\\s+/).filter((p) => p);\n\n  if (parts.length === 1) {\n    return {\n      \"inset-block-start\": parts[0],\n      \"inset-block-end\": parts[0],\n    };\n  }\n\n  // 2 values: start end\n  return {\n    \"inset-block-start\": parts[0],\n    \"inset-block-end\": parts[1],\n  };\n}\n","// b_path:: src/handlers/inset-block/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandInsetBlock } from \"./expand\";\n\nexport const insetBlockHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"inset-block\",\n    longhands: [\"inset-block-start\", \"inset-block-end\"],\n    category: \"positioning\",\n  },\n  expand: (value) => expandInsetBlock(value),\n};\n\nexport { expandInsetBlock };\n","// b_path:: src/handlers/inset-inline/expand.ts\n\nexport function expandInsetInline(value: string): Record<string, string> {\n  const trimmed = value.trim();\n\n  // Global values\n  if (\n    trimmed === \"initial\" ||\n    trimmed === \"inherit\" ||\n    trimmed === \"unset\" ||\n    trimmed === \"revert\"\n  ) {\n    return {\n      \"inset-inline-start\": trimmed,\n      \"inset-inline-end\": trimmed,\n    };\n  }\n\n  const parts = trimmed.split(/\\s+/).filter((p) => p);\n\n  if (parts.length === 1) {\n    return {\n      \"inset-inline-start\": parts[0],\n      \"inset-inline-end\": parts[0],\n    };\n  }\n\n  // 2 values: start end\n  return {\n    \"inset-inline-start\": parts[0],\n    \"inset-inline-end\": parts[1],\n  };\n}\n","// b_path:: src/handlers/inset-inline/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandInsetInline } from \"./expand\";\n\nexport const insetInlineHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"inset-inline\",\n    longhands: [\"inset-inline-start\", \"inset-inline-end\"],\n    category: \"positioning\",\n  },\n  expand: (value) => expandInsetInline(value),\n};\n\nexport { expandInsetInline };\n","// b_path:: src/handlers/margin/expand.ts\n\nimport { createTRBLExpander } from \"../../internal/trbl-expander\";\n\nexport const expandMargin = createTRBLExpander(\"margin\");\n","// b_path:: src/handlers/margin/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandMargin } from \"./expand\";\n\nexport const marginHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"margin\",\n    longhands: [\"margin-top\", \"margin-right\", \"margin-bottom\", \"margin-left\"],\n    category: \"box-model\",\n  },\n  expand: (value) => expandMargin(value),\n};\n\nexport { expandMargin };\n","// b_path:: src/handlers/mask-position/expand.ts\n\nimport { parsePosition } from \"../../internal/position-parser\";\n\nexport function expandMaskPosition(value: string): Record<string, string> {\n  const { x, y } = parsePosition(value);\n\n  return {\n    \"mask-position-x\": x,\n    \"mask-position-y\": y,\n  };\n}\n","// b_path:: src/handlers/mask-position/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandMaskPosition } from \"./expand\";\n\nexport const maskPositionHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"mask-position\",\n    longhands: [\"mask-position-x\", \"mask-position-y\"],\n    category: \"position\",\n  },\n  expand: (value) => expandMaskPosition(value),\n};\n\nexport { expandMaskPosition };\n","// b_path:: src/handlers/object-position/expand.ts\n\nimport { parsePosition } from \"../../internal/position-parser\";\n\nexport function expandObjectPosition(value: string): Record<string, string> {\n  const { x, y } = parsePosition(value);\n\n  return {\n    \"object-position-x\": x,\n    \"object-position-y\": y,\n  };\n}\n","// b_path:: src/handlers/object-position/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandObjectPosition } from \"./expand\";\n\nexport const objectPositionHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"object-position\",\n    longhands: [\"object-position-x\", \"object-position-y\"],\n    category: \"position\",\n  },\n  expand: (value) => expandObjectPosition(value),\n};\n\nexport { expandObjectPosition };\n","// b_path:: src/handlers/padding/expand.ts\n\nimport { createTRBLExpander } from \"../../internal/trbl-expander\";\n\nexport const expandPadding = createTRBLExpander(\"padding\");\n","// b_path:: src/handlers/padding/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandPadding } from \"./expand\";\n\nexport const paddingHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"padding\",\n    longhands: [\"padding-top\", \"padding-right\", \"padding-bottom\", \"padding-left\"],\n    category: \"box-model\",\n  },\n  expand: (value) => expandPadding(value),\n};\n\nexport { expandPadding };\n","// b_path:: src/handlers/scroll-margin/expand.ts\n\nimport { createTRBLExpander } from \"../../internal/trbl-expander\";\n\nexport const expandScrollMargin = createTRBLExpander(\"scroll-margin\");\n","// b_path:: src/handlers/scroll-margin/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandScrollMargin } from \"./expand\";\n\nexport const scrollMarginHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"scroll-margin\",\n    longhands: [\n      \"scroll-margin-top\",\n      \"scroll-margin-right\",\n      \"scroll-margin-bottom\",\n      \"scroll-margin-left\",\n    ],\n    category: \"box-model\",\n  },\n  expand: (value) => expandScrollMargin(value),\n};\n\nexport { expandScrollMargin };\n","// b_path:: src/handlers/scroll-padding/expand.ts\n\nimport { createTRBLExpander } from \"../../internal/trbl-expander\";\n\nexport const expandScrollPadding = createTRBLExpander(\"scroll-padding\");\n","// b_path:: src/handlers/scroll-padding/index.ts\n\nimport type { PropertyHandler } from \"../../internal/property-handler\";\nimport { expandScrollPadding } from \"./expand\";\n\nexport const scrollPaddingHandler: PropertyHandler = {\n  meta: {\n    shorthand: \"scroll-padding\",\n    longhands: [\n      \"scroll-padding-top\",\n      \"scroll-padding-right\",\n      \"scroll-padding-bottom\",\n      \"scroll-padding-left\",\n    ],\n    category: \"box-model\",\n  },\n  expand: (value) => expandScrollPadding(value),\n};\n\nexport { expandScrollPadding };\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 handlers\nimport { animationHandler } from \"../handlers/animation\";\nimport { backgroundHandler } from \"../handlers/background\";\nimport { backgroundPositionHandler } from \"../handlers/background-position\";\nimport { borderHandler } from \"../handlers/border\";\nimport { borderBlockHandler } from \"../handlers/border-block\";\nimport { borderBlockEndHandler } from \"../handlers/border-block-end\";\nimport { borderBlockStartHandler } from \"../handlers/border-block-start\";\nimport { borderBottomHandler } from \"../handlers/border-bottom\";\nimport { borderColorHandler } from \"../handlers/border-color\";\nimport { borderImageHandler } from \"../handlers/border-image\";\nimport { borderInlineHandler } from \"../handlers/border-inline\";\nimport { borderInlineEndHandler } from \"../handlers/border-inline-end\";\nimport { borderInlineStartHandler } from \"../handlers/border-inline-start\";\nimport { borderLeftHandler } from \"../handlers/border-left\";\nimport { borderRadiusHandler } from \"../handlers/border-radius\";\nimport { borderRightHandler } from \"../handlers/border-right\";\nimport { borderStyleHandler } from \"../handlers/border-style\";\nimport { borderTopHandler } from \"../handlers/border-top\";\nimport { borderWidthHandler } from \"../handlers/border-width\";\nimport { columnRuleHandler } from \"../handlers/column-rule\";\nimport { columnsHandler } from \"../handlers/columns\";\nimport { containIntrinsicSizeHandler } from \"../handlers/contain-intrinsic-size\";\nimport { containerHandler } from \"../handlers/container\";\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 { gridTemplateHandler } from \"../handlers/grid-template\";\nimport { insetHandler } from \"../handlers/inset\";\nimport { insetBlockHandler } from \"../handlers/inset-block\";\nimport { insetInlineHandler } from \"../handlers/inset-inline\";\nimport { listStyleHandler } from \"../handlers/list-style\";\nimport { marginHandler } from \"../handlers/margin\";\nimport { maskHandler } from \"../handlers/mask\";\nimport { maskPositionHandler } from \"../handlers/mask-position\";\nimport { objectPositionHandler } from \"../handlers/object-position\";\nimport { offsetHandler } from \"../handlers/offset\";\nimport { outlineHandler } from \"../handlers/outline\";\nimport { overflowHandler } from \"../handlers/overflow\";\nimport { paddingHandler } from \"../handlers/padding\";\nimport { placeContentHandler } from \"../handlers/place-content\";\nimport { placeItemsHandler } from \"../handlers/place-items\";\nimport { placeSelfHandler } from \"../handlers/place-self\";\nimport { scrollMarginHandler } from \"../handlers/scroll-margin\";\nimport { scrollPaddingHandler } from \"../handlers/scroll-padding\";\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  [\"background-position\", backgroundPositionHandler],\n  [\"border\", borderHandler],\n  [\"border-block\", borderBlockHandler],\n  [\"border-block-end\", borderBlockEndHandler],\n  [\"border-block-start\", borderBlockStartHandler],\n  [\"border-bottom\", borderBottomHandler],\n  [\"border-color\", borderColorHandler],\n  [\"border-image\", borderImageHandler],\n  [\"border-inline\", borderInlineHandler],\n  [\"border-inline-end\", borderInlineEndHandler],\n  [\"border-inline-start\", borderInlineStartHandler],\n  [\"border-left\", borderLeftHandler],\n  [\"border-radius\", borderRadiusHandler],\n  [\"border-right\", borderRightHandler],\n  [\"border-style\", borderStyleHandler],\n  [\"border-top\", borderTopHandler],\n  [\"border-width\", borderWidthHandler],\n  [\"column-rule\", columnRuleHandler],\n  [\"columns\", columnsHandler],\n  [\"contain-intrinsic-size\", containIntrinsicSizeHandler],\n  [\"container\", containerHandler],\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  [\"grid-template\", gridTemplateHandler],\n  [\"inset\", insetHandler],\n  [\"inset-block\", insetBlockHandler],\n  [\"inset-inline\", insetInlineHandler],\n  [\"list-style\", listStyleHandler],\n  [\"margin\", marginHandler],\n  [\"mask\", maskHandler],\n  [\"mask-position\", maskPositionHandler],\n  [\"object-position\", objectPositionHandler],\n  [\"offset\", offsetHandler],\n  [\"outline\", outlineHandler],\n  [\"overflow\", overflowHandler],\n  [\"padding\", paddingHandler],\n  [\"place-content\", placeContentHandler],\n  [\"place-items\", placeItemsHandler],\n  [\"place-self\", placeSelfHandler],\n  [\"scroll-margin\", scrollMarginHandler],\n  [\"scroll-padding\", scrollPaddingHandler],\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"]}