@jasonshimmy/custom-elements-runtime 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/{css-utils-Cg4o1MqY.js → css-utils-CC43BbEy.js} +20 -21
  2. package/dist/css-utils-CC43BbEy.js.map +1 -0
  3. package/dist/{css-utils-RqkyBWft.cjs → css-utils-mgjmH8qX.cjs} +5 -4
  4. package/dist/css-utils-mgjmH8qX.cjs.map +1 -0
  5. package/dist/custom-elements-runtime.cjs.js +4 -3
  6. package/dist/custom-elements-runtime.cjs.js.map +1 -1
  7. package/dist/custom-elements-runtime.colors.cjs.js +3 -2
  8. package/dist/custom-elements-runtime.colors.cjs.js.map +1 -1
  9. package/dist/custom-elements-runtime.colors.es.js +3 -2
  10. package/dist/custom-elements-runtime.colors.es.js.map +1 -1
  11. package/dist/custom-elements-runtime.directive-enhancements.cjs.js +3 -2
  12. package/dist/custom-elements-runtime.directive-enhancements.cjs.js.map +1 -1
  13. package/dist/custom-elements-runtime.directive-enhancements.es.js +86 -100
  14. package/dist/custom-elements-runtime.directive-enhancements.es.js.map +1 -1
  15. package/dist/custom-elements-runtime.directives.cjs.js +3 -2
  16. package/dist/custom-elements-runtime.directives.cjs.js.map +1 -1
  17. package/dist/custom-elements-runtime.directives.es.js +40 -43
  18. package/dist/custom-elements-runtime.directives.es.js.map +1 -1
  19. package/dist/custom-elements-runtime.dom-jit-css.cjs.js +7 -6
  20. package/dist/custom-elements-runtime.dom-jit-css.cjs.js.map +1 -1
  21. package/dist/custom-elements-runtime.dom-jit-css.es.js +58 -76
  22. package/dist/custom-elements-runtime.dom-jit-css.es.js.map +1 -1
  23. package/dist/custom-elements-runtime.es.js +162 -186
  24. package/dist/custom-elements-runtime.es.js.map +1 -1
  25. package/dist/custom-elements-runtime.event-bus.cjs.js +3 -2
  26. package/dist/custom-elements-runtime.event-bus.cjs.js.map +1 -1
  27. package/dist/custom-elements-runtime.event-bus.es.js +48 -103
  28. package/dist/custom-elements-runtime.event-bus.es.js.map +1 -1
  29. package/dist/custom-elements-runtime.jit-css.cjs.js +3 -2
  30. package/dist/custom-elements-runtime.jit-css.cjs.js.map +1 -1
  31. package/dist/custom-elements-runtime.jit-css.es.js +29 -30
  32. package/dist/custom-elements-runtime.jit-css.es.js.map +1 -1
  33. package/dist/custom-elements-runtime.router.cjs.js +20 -19
  34. package/dist/custom-elements-runtime.router.cjs.js.map +1 -1
  35. package/dist/custom-elements-runtime.router.es.js +585 -603
  36. package/dist/custom-elements-runtime.router.es.js.map +1 -1
  37. package/dist/custom-elements-runtime.ssr-middleware.cjs.js +5 -4
  38. package/dist/custom-elements-runtime.ssr-middleware.cjs.js.map +1 -1
  39. package/dist/custom-elements-runtime.ssr-middleware.es.js +44 -37
  40. package/dist/custom-elements-runtime.ssr-middleware.es.js.map +1 -1
  41. package/dist/custom-elements-runtime.ssr.cjs.js +1 -4
  42. package/dist/custom-elements-runtime.ssr.es.js +11 -176
  43. package/dist/custom-elements-runtime.store.cjs.js +3 -2
  44. package/dist/custom-elements-runtime.store.cjs.js.map +1 -1
  45. package/dist/custom-elements-runtime.store.es.js +17 -11
  46. package/dist/custom-elements-runtime.store.es.js.map +1 -1
  47. package/dist/custom-elements-runtime.transitions.cjs.js +3 -2
  48. package/dist/custom-elements-runtime.transitions.cjs.js.map +1 -1
  49. package/dist/custom-elements-runtime.transitions.es.js +55 -120
  50. package/dist/custom-elements-runtime.transitions.es.js.map +1 -1
  51. package/dist/custom-elements-runtime.vite-plugin.cjs.js +3 -2
  52. package/dist/custom-elements-runtime.vite-plugin.cjs.js.map +1 -1
  53. package/dist/custom-elements-runtime.vite-plugin.es.js +54 -75
  54. package/dist/custom-elements-runtime.vite-plugin.es.js.map +1 -1
  55. package/dist/hooks-_3xP4G2N.js +1189 -0
  56. package/dist/hooks-_3xP4G2N.js.map +1 -0
  57. package/dist/hooks-fYQgZk2g.cjs +7 -0
  58. package/dist/hooks-fYQgZk2g.cjs.map +1 -0
  59. package/dist/logger-BYIN7ysT.cjs +3 -0
  60. package/dist/logger-BYIN7ysT.cjs.map +1 -0
  61. package/dist/logger-L25axmB-.js +41 -0
  62. package/dist/logger-L25axmB-.js.map +1 -0
  63. package/dist/namespace-helpers-Bf7rm9JV.cjs +3 -0
  64. package/dist/namespace-helpers-Bf7rm9JV.cjs.map +1 -0
  65. package/dist/namespace-helpers-BucDdgz_.js +61 -0
  66. package/dist/namespace-helpers-BucDdgz_.js.map +1 -0
  67. package/dist/reset.css +1 -1
  68. package/dist/ssr-B3lxl1vr.js +165 -0
  69. package/dist/ssr-B3lxl1vr.js.map +1 -0
  70. package/dist/ssr-DtD9e5iA.cjs +5 -0
  71. package/dist/ssr-DtD9e5iA.cjs.map +1 -0
  72. package/dist/style-Bjn8zDiZ.cjs +56 -0
  73. package/dist/style-Bjn8zDiZ.cjs.map +1 -0
  74. package/dist/{style-BmyOIMcU.js → style-DuDoj_xK.js} +724 -876
  75. package/dist/style-DuDoj_xK.js.map +1 -0
  76. package/dist/style.css +1 -1
  77. package/dist/template-compiler-BB4JJdqk.cjs +23 -0
  78. package/dist/template-compiler-BB4JJdqk.cjs.map +1 -0
  79. package/dist/template-compiler-Cs5axmn4.js +3236 -0
  80. package/dist/template-compiler-Cs5axmn4.js.map +1 -0
  81. package/dist/variables.css +1 -1
  82. package/package.json +7 -7
  83. package/dist/css-utils-Cg4o1MqY.js.map +0 -1
  84. package/dist/css-utils-RqkyBWft.cjs.map +0 -1
  85. package/dist/custom-elements-runtime.ssr.cjs.js.map +0 -1
  86. package/dist/custom-elements-runtime.ssr.es.js.map +0 -1
  87. package/dist/hooks-BH-CpUun.js +0 -1474
  88. package/dist/hooks-BH-CpUun.js.map +0 -1
  89. package/dist/hooks-NOFG9QRQ.cjs +0 -6
  90. package/dist/hooks-NOFG9QRQ.cjs.map +0 -1
  91. package/dist/logger-BvkEbVM4.js +0 -48
  92. package/dist/logger-BvkEbVM4.js.map +0 -1
  93. package/dist/logger-CSALKaYm.cjs +0 -2
  94. package/dist/logger-CSALKaYm.cjs.map +0 -1
  95. package/dist/namespace-helpers-D4wC2-qA.js +0 -61
  96. package/dist/namespace-helpers-D4wC2-qA.js.map +0 -1
  97. package/dist/namespace-helpers-ckeEOxpR.cjs +0 -2
  98. package/dist/namespace-helpers-ckeEOxpR.cjs.map +0 -1
  99. package/dist/style-BmyOIMcU.js.map +0 -1
  100. package/dist/style-D40DsIqJ.cjs +0 -55
  101. package/dist/style-D40DsIqJ.cjs.map +0 -1
  102. package/dist/template-compiler-CDvhsHia.cjs +0 -22
  103. package/dist/template-compiler-CDvhsHia.cjs.map +0 -1
  104. package/dist/template-compiler-DiE69FLO.js +0 -3724
  105. package/dist/template-compiler-DiE69FLO.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"style-BmyOIMcU.js","sources":["../src/lib/runtime/prose.ts","../src/lib/runtime/style.ts"],"sourcesContent":["import { cssEscape } from './css-utils';\n\n/**\n * Prose typography plugin - tree-shaken if never used\n * Provides beautiful typography defaults for long-form content\n */\nimport type { CSSMap } from './style';\n\n/**\n * Prose size configurations\n */\nconst proseSizes = {\n base: {\n fontSize: '1rem',\n lineHeight: '1.75',\n p: '1.25em',\n lead: '1.25em',\n h1: '2.25em',\n h2: '1.5em',\n h3: '1.25em',\n h4: '1em',\n blockquote: '1.6em',\n figure: '2em',\n code: '0.875em',\n pre: '0.875em',\n ol: '1.25em',\n ul: '1.25em',\n li: '0.5em',\n hr: '3em',\n table: '2em',\n },\n sm: {\n fontSize: '0.875rem',\n lineHeight: '1.7142857',\n p: '1.1428571em',\n lead: '1.1428571em',\n h1: '2.1428571em',\n h2: '1.4285714em',\n h3: '1.2857143em',\n h4: '1em',\n blockquote: '1.4285714em',\n figure: '1.7142857em',\n code: '0.8571429em',\n pre: '0.8571429em',\n ol: '1.1428571em',\n ul: '1.1428571em',\n li: '0.4285714em',\n hr: '2.5714286em',\n table: '1.7142857em',\n },\n lg: {\n fontSize: '1.125rem',\n lineHeight: '1.7777778',\n p: '1.3333333em',\n lead: '1.3333333em',\n h1: '2.6666667em',\n h2: '1.7777778em',\n h3: '1.5555556em',\n h4: '1.1111111em',\n blockquote: '1.7777778em',\n figure: '2.2222222em',\n code: '0.8888889em',\n pre: '0.8888889em',\n ol: '1.3333333em',\n ul: '1.3333333em',\n li: '0.5555556em',\n hr: '3.3333333em',\n table: '2.2222222em',\n },\n xl: {\n fontSize: '1.25rem',\n lineHeight: '1.8',\n p: '1.4em',\n lead: '1.4em',\n h1: '2.8em',\n h2: '1.8em',\n h3: '1.6em',\n h4: '1.2em',\n blockquote: '1.8em',\n figure: '2.4em',\n code: '0.9em',\n pre: '0.9em',\n ol: '1.4em',\n ul: '1.4em',\n li: '0.6em',\n hr: '3.6em',\n table: '2.4em',\n },\n '2xl': {\n fontSize: '1.5rem',\n lineHeight: '1.6666667',\n p: '1.3333333em',\n lead: '1.3333333em',\n h1: '2.6666667em',\n h2: '1.7777778em',\n h3: '1.5555556em',\n h4: '1.2222222em',\n blockquote: '1.7777778em',\n figure: '2.2222222em',\n code: '0.8333333em',\n pre: '0.8333333em',\n ol: '1.3333333em',\n ul: '1.3333333em',\n li: '0.5555556em',\n hr: '3.1111111em',\n table: '2.2222222em',\n },\n};\n\n/**\n * Generate prose base CSS on-demand for treeshakability\n * Only generates CSS when prose class is actually used\n */\nexport function generateProseCSS(className: string): string | null {\n const match = className.match(/^prose(?:-(sm|lg|xl|2xl))?$/);\n if (!match) return null;\n\n const variant = match[1] || 'base';\n const size = proseSizes[variant as keyof typeof proseSizes];\n const selector = `.${className}`; // Use actual className as selector\n\n // Generate CSS on-demand with size-specific values\n const rules: string[] = [];\n\n // Base prose container styles with CSS variables\n rules.push(\n `${selector}{--cer-prose-body:var(--cer-color-neutral-900);--cer-prose-headings:var(--cer-color-neutral-900);--cer-prose-lead:var(--cer-color-neutral-700);--cer-prose-links:var(--cer-color-neutral-700);--cer-prose-links-hover:var(--cer-color-neutral-500);--cer-prose-bold:var(--cer-color-neutral-900);--cer-prose-quotes:var(--cer-color-neutral-700);--cer-prose-quote-border:var(--cer-color-neutral-200);--cer-prose-code:var(--cer-color-neutral-800);--cer-prose-code-bg:var(--cer-color-neutral-100);--cer-prose-pre-code:var(--cer-color-neutral-800);--cer-prose-pre-bg:var(--cer-color-neutral-100);--cer-prose-pre-border:var(--cer-color-neutral-200);--cer-prose-hr:var(--cer-color-neutral-200);--cer-prose-caps:var(--cer-color-neutral-600);--cer-prose-list-marker:var(--cer-color-neutral-600);--cer-prose-list-marker-strong:var(--cer-color-neutral-700);--cer-prose-counters:var(--cer-color-neutral-600);--cer-prose-bullets:var(--cer-color-neutral-400);--cer-prose-img-caption:var(--cer-color-neutral-600);--cer-prose-table-border:var(--cer-color-neutral-200);--cer-prose-table-head:var(--cer-color-neutral-700);color:var(--cer-prose-body);font-size:${size.fontSize};line-height:${size.lineHeight};max-width:65ch;}`,\n );\n\n // Paragraphs\n rules.push(\n `${selector} p:not(.not-prose):not(.not-prose *){margin:${size.p} 0;}`,\n );\n\n // Lead text\n rules.push(\n `${selector} .lead:not(.not-prose):not(.not-prose *),${selector} [class~=\"lead\"]:not(.not-prose):not(.not-prose *){font-size:1.25em;line-height:1.6;margin-top:${size.lead};margin-bottom:${size.lead};color:var(--cer-prose-lead);}`,\n );\n\n // Headings\n rules.push(\n `${selector} h1:not(.not-prose):not(.not-prose *),${selector} h2:not(.not-prose):not(.not-prose *),${selector} h3:not(.not-prose):not(.not-prose *),${selector} h4:not(.not-prose):not(.not-prose *),${selector} h5:not(.not-prose):not(.not-prose *),${selector} h6:not(.not-prose):not(.not-prose *){color:var(--cer-prose-headings);font-weight:700;line-height:1.25;}`,\n );\n rules.push(\n `${selector} h1:not(.not-prose):not(.not-prose *){font-size:${size.h1};margin-top:0;margin-bottom:0.8888889em;line-height:1.1111111;}`,\n );\n rules.push(\n `${selector} h2:not(.not-prose):not(.not-prose *){font-size:${size.h2};margin-top:2em;margin-bottom:1em;line-height:1.3333333;}`,\n );\n rules.push(\n `${selector} h3:not(.not-prose):not(.not-prose *){font-size:${size.h3};margin-top:1.6em;margin-bottom:0.6em;line-height:1.6;}`,\n );\n rules.push(\n `${selector} h4:not(.not-prose):not(.not-prose *){font-size:${size.h4};margin-top:1.5em;margin-bottom:0.5em;line-height:1.5;}`,\n );\n rules.push(\n `${selector} h5:not(.not-prose):not(.not-prose *){margin-top:1.5em;margin-bottom:0.5em;}`,\n );\n rules.push(\n `${selector} h6:not(.not-prose):not(.not-prose *){margin-top:1.5em;margin-bottom:0.5em;}`,\n );\n\n // Links\n rules.push(\n `${selector} a:not(.not-prose):not(.not-prose *){color:var(--cer-prose-links);text-decoration:underline;text-decoration-thickness:.08em;text-underline-offset:.15em;font-weight:500;}`,\n );\n rules.push(\n `${selector} a:not(.not-prose):not(.not-prose *):hover,${selector} a:not(.not-prose):not(.not-prose *):focus{color:var(--cer-prose-links-hover);}`,\n );\n\n // Strong and emphasis\n rules.push(\n `${selector} strong:not(.not-prose):not(.not-prose *){color:var(--cer-prose-bold);font-weight:600;}`,\n );\n rules.push(\n `${selector} em:not(.not-prose):not(.not-prose *){font-style:italic;}`,\n );\n\n // Ordered lists\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *){list-style-type:decimal;margin-top:${size.ol};margin-bottom:${size.ol};padding-left:1.625em;}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)[type=\"A\"]{list-style-type:upper-alpha;}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)[type=\"a\"]{list-style-type:lower-alpha;}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)[type=\"I\"]{list-style-type:upper-roman;}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)[type=\"i\"]{list-style-type:lower-roman;}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *){position:relative;padding-left:${size.li};}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *)::marker{color:var(--cer-prose-counters);font-weight:400;}`,\n );\n\n // Unordered lists\n rules.push(\n `${selector} ul:not(.not-prose):not(.not-prose *){list-style-type:disc;margin-top:${size.ul};margin-bottom:${size.ul};padding-left:1.625em;}`,\n );\n rules.push(\n `${selector} ul:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *){position:relative;padding-left:${size.li};}`,\n );\n rules.push(\n `${selector} ul:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *)::marker{color:var(--cer-prose-bullets);}`,\n );\n\n // Nested lists and list item content\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *)>*:first-child,${selector} ul:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *)>*:first-child{margin-top:${size.ol};}`,\n );\n rules.push(\n `${selector} ol:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *)>*:last-child,${selector} ul:not(.not-prose):not(.not-prose *)>li:not(.not-prose):not(.not-prose *)>*:last-child{margin-bottom:${size.ol};}`,\n );\n rules.push(\n `${selector} ul:not(.not-prose):not(.not-prose *) ul:not(.not-prose):not(.not-prose *),${selector} ul:not(.not-prose):not(.not-prose *) ol:not(.not-prose):not(.not-prose *),${selector} ol:not(.not-prose):not(.not-prose *) ul:not(.not-prose):not(.not-prose *),${selector} ol:not(.not-prose):not(.not-prose *) ol:not(.not-prose):not(.not-prose *){margin-top:0.75em;margin-bottom:0.75em;}`,\n );\n // Multiple paragraphs in list items need proper spacing\n rules.push(\n `${selector} li:not(.not-prose):not(.not-prose *)>p:not(.not-prose):not(.not-prose *){margin-top:${size.ol};margin-bottom:${size.ol};}`,\n );\n\n // Inline code\n rules.push(\n `${selector} code:not(.not-prose):not(.not-prose *){color:var(--cer-prose-code);background-color:var(--cer-prose-code-bg);border-radius:0.25rem;padding:0.125rem 0.25rem;font-size:${size.code};font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;}`,\n );\n\n // Code blocks\n rules.push(\n `${selector} pre:not(.not-prose):not(.not-prose *){color:var(--cer-prose-pre-code);background-color:var(--cer-prose-pre-bg);border:1px solid var(--cer-prose-pre-border);overflow-x:auto;font-size:${size.pre};line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:0.375rem;padding:0.8571429em 1.1428571em;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;white-space:pre;overflow-wrap:normal;}`,\n );\n rules.push(\n `${selector} pre:not(.not-prose):not(.not-prose *) code:not(.not-prose):not(.not-prose *){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;line-height:inherit;}`,\n );\n\n // Blockquotes\n rules.push(\n `${selector} blockquote:not(.not-prose):not(.not-prose *){font-weight:500;font-style:italic;color:var(--cer-prose-quotes);border-left-width:0.25rem;border-left-color:var(--cer-prose-quote-border);quotes:\"\\\\201C\"\"\\\\201D\"\"\\\\2018\"\"\\\\2019\";margin-top:${size.blockquote};margin-bottom:${size.blockquote};padding-left:1em;}`,\n );\n rules.push(\n `${selector} blockquote:not(.not-prose):not(.not-prose *) p:not(.not-prose):not(.not-prose *):first-of-type::before{content:open-quote;}`,\n );\n rules.push(\n `${selector} blockquote:not(.not-prose):not(.not-prose *) p:not(.not-prose):not(.not-prose *):last-of-type::after{content:close-quote;}`,\n );\n\n // Horizontal rules\n rules.push(\n `${selector} hr:not(.not-prose):not(.not-prose *){border-color:var(--cer-prose-hr);border-top-width:1px;margin-top:${size.hr};margin-bottom:${size.hr};}`,\n );\n\n // Figures and images\n rules.push(\n `${selector} figure:not(.not-prose):not(.not-prose *){margin-top:${size.figure};margin-bottom:${size.figure};}`,\n );\n rules.push(\n `${selector} figure:not(.not-prose):not(.not-prose *)>*{margin-top:0;margin-bottom:0;}`,\n );\n rules.push(\n `${selector} figcaption:not(.not-prose):not(.not-prose *){color:var(--cer-prose-img-caption);font-size:0.875em;line-height:1.4285714;margin-top:0.75em;}`,\n );\n rules.push(\n `${selector} img:not(.not-prose):not(.not-prose *),${selector} video:not(.not-prose):not(.not-prose *),${selector} picture:not(.not-prose):not(.not-prose *){margin-top:${size.figure};margin-bottom:${size.figure};max-width:100%;height:auto;}`,\n );\n rules.push(\n `${selector} figure:not(.not-prose):not(.not-prose *)>img:not(.not-prose):not(.not-prose *),${selector} figure:not(.not-prose):not(.not-prose *)>video:not(.not-prose):not(.not-prose *),${selector} figure:not(.not-prose):not(.not-prose *)>picture:not(.not-prose):not(.not-prose *){margin-top:0;margin-bottom:0;}`,\n );\n\n // Tables\n rules.push(\n `${selector} table:not(.not-prose):not(.not-prose *){width:100%;table-layout:auto;text-align:left;margin-top:${size.table};margin-bottom:${size.table};font-size:0.875em;line-height:1.7142857;}`,\n );\n rules.push(\n `${selector} thead:not(.not-prose):not(.not-prose *){border-bottom-width:1px;border-bottom-color:var(--cer-prose-table-border);}`,\n );\n rules.push(\n `${selector} thead:not(.not-prose):not(.not-prose *) th:not(.not-prose):not(.not-prose *){color:var(--cer-prose-table-head);font-weight:600;vertical-align:bottom;padding-right:0.5714286em;padding-bottom:0.5714286em;padding-left:0.5714286em;}`,\n );\n rules.push(\n `${selector} tbody:not(.not-prose):not(.not-prose *) tr:not(.not-prose):not(.not-prose *){border-bottom-width:1px;border-bottom-color:var(--cer-prose-table-border);}`,\n );\n rules.push(\n `${selector} tbody:not(.not-prose):not(.not-prose *) tr:not(.not-prose):not(.not-prose *):last-child{border-bottom-width:0;}`,\n );\n rules.push(\n `${selector} tbody:not(.not-prose):not(.not-prose *) td:not(.not-prose):not(.not-prose *){vertical-align:baseline;padding:0.5714286em;}`,\n );\n\n return rules.join('');\n}\n\n/**\n * List of prose element targets for element modifiers\n */\nconst proseElements: Record<string, string> = {\n headings: 'h1,h2,h3,h4,h5,h6,th',\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n p: 'p',\n a: 'a',\n blockquote: 'blockquote',\n figure: 'figure',\n figcaption: 'figcaption',\n strong: 'strong',\n em: 'em',\n kbd: 'kbd',\n code: 'code',\n pre: 'pre',\n ol: 'ol',\n ul: 'ul',\n li: 'li',\n dl: 'dl',\n dt: 'dt',\n dd: 'dd',\n table: 'table',\n thead: 'thead',\n tbody: 'tbody',\n tr: 'tr',\n th: 'th',\n td: 'td',\n img: 'img',\n picture: 'picture',\n video: 'video',\n hr: 'hr',\n lead: '[class~=\"lead\"]',\n};\n\n/**\n * Parse prose element modifiers like prose-a:text-blue-600\n * Returns the generated CSS rule with proper scoping\n */\nexport function generateProseElementModifier(\n className: string,\n utilityMap: CSSMap,\n parseSpacing: (className: string) => string | null,\n parseSpaceUtility: (className: string) => string | null,\n parseOpacity: (className: string) => string | null,\n parseColorWithOpacity: (className: string) => string | null,\n parseGradientColorStop: (className: string) => string | null,\n parseArbitrary: (className: string) => string | null,\n): string | null {\n // Match pattern: prose-{element}:{utility}\n const match = className.match(/^prose-([a-z0-9]+):(.+)$/);\n if (!match) return null;\n\n const [, element, utility] = match;\n const elementSelector = proseElements[element];\n\n if (!elementSelector) return null;\n\n // Parse the utility part to get the CSS properties\n const utilityCSS =\n utilityMap[utility] ??\n parseSpacing(utility) ??\n parseSpaceUtility(utility) ??\n parseOpacity(utility) ??\n parseColorWithOpacity(utility) ??\n parseGradientColorStop(utility) ??\n parseArbitrary(utility);\n\n if (!utilityCSS) return null;\n\n // Browser CSS parsers collapse spaces after escaped colons before :is()\n // Use CSS.escape() on the full class name to properly escape the colon\n const escapedClass = cssEscape(className);\n\n // Build simple descendant selectors for each element\n // Format: .prose-a\\:text-error-600 a:not(.not-prose):not(.not-prose *) { ... }\n const rules = elementSelector\n .split(',')\n .map((sel) => {\n const elementSel = sel.trim();\n const fullSelector = `.${escapedClass} ${elementSel}:not(.not-prose):not(.not-prose *)`;\n return `${fullSelector}{${utilityCSS}}`;\n })\n .join('');\n\n return rules;\n}\n","import { generateProseCSS, generateProseElementModifier } from './prose';\nimport { extendedColors } from '../css/colors';\nimport {\n minifyCSS,\n cssEscape,\n escapeClassName,\n escapeRegExp,\n _resetBaseResetSheet,\n spacing,\n} from './css-utils';\nimport { _registerRenderBridge } from './render-bridge';\n\n/**\n * Optimized JIT CSS implementation with reduced bloat and enhanced utilities\n */\n\n// --- Shared prose stylesheet (singleton like baseReset) ---\nlet proseSheet: CSSStyleSheet | null = null;\nconst detectedProseSizes = new Set<string>();\nlet proseCSSCache = ''; // Cache the actual CSS text for environments where cssRules doesn't work\n// Track the set of sizes that were used to build the current proseCSSCache so\n// we only regenerate when the set actually changes.\nlet proseSizesSnapshot = '';\n\nfunction buildProseCSS(): void {\n const snapshot = Array.from(detectedProseSizes).sort().join(',');\n if (snapshot === proseSizesSnapshot) return; // nothing changed\n proseSizesSnapshot = snapshot;\n\n let combinedProseCSS = '';\n for (const size of detectedProseSizes) {\n const css = generateProseCSS(size);\n if (css) combinedProseCSS += css;\n }\n proseCSSCache = minifyCSS(combinedProseCSS);\n\n if (proseSheet && typeof proseSheet.replaceSync === 'function' && combinedProseCSS) {\n try {\n proseSheet.replaceSync(proseCSSCache);\n } catch {\n // Ignore errors in environments that don't support replaceSync\n }\n }\n}\n\nexport function getProseSheet(): CSSStyleSheet | null {\n if (detectedProseSizes.size === 0) return null;\n\n if (!proseSheet) {\n if (typeof CSSStyleSheet === 'undefined') {\n // SSR / older browsers: provide a safe stub\n proseSheet = {\n cssRules: [],\n replaceSync: () => {},\n toString: () => proseCSSCache,\n } as unknown as CSSStyleSheet;\n } else {\n proseSheet = new CSSStyleSheet();\n // Override toString to return cached CSS (for jsdom/test environments)\n (proseSheet as { toString?: () => string }).toString = () =>\n proseCSSCache;\n }\n // Force a build now that the sheet exists\n proseSizesSnapshot = '';\n }\n\n buildProseCSS();\n return proseSheet;\n}\n\nexport function registerProseSize(size: string): void {\n const sizesChanged = !detectedProseSizes.has(size);\n detectedProseSizes.add(size);\n\n // If new size detected, regenerate prose sheet (if it exists)\n // Note: If proseSheet is null, it will be generated fresh when getProseSheet() is called\n if (sizesChanged && proseSheet) {\n buildProseCSS();\n }\n}\n\n// Types\nexport type CSSMap = Record<string, string>;\n\n/**\n * Options for configuring the JIT CSS engine.\n *\n * @example\n * ```ts\n * import { enableJITCSS } from '@jasonshimmy/custom-elements-runtime';\n * enableJITCSS({ extendedColors: true });\n * ```\n */\nexport interface JITCSSOptions {\n /**\n * Include the extended Tailwind color palette (slate, gray, red, orange, blue, violet, rose, etc.).\n * Pass `true` to include all 21 color families, or an array of specific family names to include only\n * those (e.g. `['slate', 'blue', 'red']`). A targeted list reduces `_activeColors` size and improves\n * JIT match performance when only a few extended families are needed.\n */\n extendedColors?: boolean | string[];\n /** Custom color palette entries to add to the JIT engine */\n customColors?: Record<string, Record<string, string>>;\n /** Disable specific variant groups for smaller output */\n disableVariants?: Array<\n 'responsive' | 'dark' | 'motion' | 'print' | 'container'\n >;\n}\n\ntype SelectorVariantMap = Record<\n string,\n (selector: string, body: string) => string\n>;\ntype MediaVariantMap = Record<string, string>;\n\ntype Shade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950;\ntype ColorShades = Partial<Record<Shade, string>> & { DEFAULT?: string };\n\n// Enhanced color system with standard Tailwind colors\nconst fallbackHex: Record<string, ColorShades> = {\n // Existing semantic colors\n neutral: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#9f9fa9',\n 500: '#71717b',\n 600: '#52525c',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n secondary: {\n 50: '#eef2ff',\n 100: '#e0e7ff',\n 200: '#c7d2fe',\n 300: '#a5b4fc',\n 400: '#818cf8',\n 500: '#6366f1',\n 600: '#4f46e5',\n 700: '#4338ca',\n 800: '#3730a3',\n 900: '#312e81',\n 950: '#1e1b4b',\n },\n success: {\n 50: '#f0fdf4',\n 100: '#dcfce7',\n 200: '#bbf7d0',\n 300: '#86efac',\n 400: '#4ade80',\n 500: '#22c55e',\n 600: '#16a34a',\n 700: '#15803d',\n 800: '#166534',\n 900: '#14532d',\n 950: '#052e16',\n },\n info: {\n 50: '#f0f9ff',\n 100: '#e0f2fe',\n 200: '#bae6fd',\n 300: '#7dd3fc',\n 400: '#38bdf8',\n 500: '#0ea5e9',\n 600: '#0284c7',\n 700: '#0369a1',\n 800: '#075985',\n 900: '#0c4a6e',\n 950: '#082f49',\n },\n warning: {\n 50: '#fffbeb',\n 100: '#fef3c7',\n 200: '#fde68a',\n 300: '#fcd34d',\n 400: '#fbbf24',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 800: '#92400e',\n 900: '#78350f',\n 950: '#451a03',\n },\n error: {\n 50: '#fef2f2',\n 100: '#fee2e2',\n 200: '#fecaca',\n 300: '#fca5a5',\n 400: '#f87171',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n 800: '#991b1b',\n 900: '#7f1d1d',\n 950: '#450a0a',\n },\n\n // Special colors\n white: { DEFAULT: '#ffffff' },\n black: { DEFAULT: '#000000' },\n transparent: { DEFAULT: 'transparent' },\n current: { DEFAULT: 'currentColor' },\n};\n\nexport const colors: Record<\n string,\n Record<string, string>\n> = Object.fromEntries(\n Object.entries(fallbackHex).map(([name, shades]) => [\n name,\n Object.fromEntries(\n Object.entries(shades).map(([shade, hex]) => [\n shade,\n `var(--cer-color-${name}${shade === 'DEFAULT' ? '' : `-${shade}`}, ${hex})`,\n ]),\n ),\n ]),\n);\n\n// Module-level active color map. Starts with semantic colors; extended colors\n// are added on demand when enableJITCSS({ extendedColors }) is called.\n// Initialized here as a plain data assignment (no function call side effect)\n// so bundlers can tree-shake this module when JIT is not used.\nlet _activeColors: Record<string, Record<string, string>> = { ...colors };\n\nfunction rebuildActiveColors(options: JITCSSOptions): void {\n _activeColors = { ...colors };\n if (options.extendedColors) {\n const families = Array.isArray(options.extendedColors)\n ? options.extendedColors\n : Object.keys(extendedColors);\n for (const name of families) {\n const shades = extendedColors[name as keyof typeof extendedColors];\n if (!shades || _activeColors[name]) continue;\n _activeColors[name] = Object.fromEntries(\n Object.entries(shades).map(([shade, hex]) => [\n shade,\n `var(--cer-color-${name}-${shade}, ${hex})`,\n ]),\n );\n }\n }\n if (options.customColors) {\n for (const [name, shades] of Object.entries(options.customColors)) {\n _activeColors[name] = shades;\n }\n }\n}\n\nlet _globalJITCSSOptions: JITCSSOptions = {};\n\n// Lazy render-bridge registration — avoids a module-level side effect.\n// Called the first time enableJITCSS() or registerJITCSSComponent() runs.\nlet _bridgeRegistered = false;\nfunction _ensureBridgeRegistered(): void {\n if (_bridgeRegistered) return;\n _registerRenderBridge(isJITCSSEnabledFor, jitCSS, getProseSheet);\n _bridgeRegistered = true;\n}\n\n/**\n * Whether the JIT CSS engine is active. Defaults to `true` for v2 backwards\n * compatibility. In v3 this will default to `false` — components must opt in\n * via `useJITCSS()` or call `enableJITCSS()` once at app startup.\n *\n * @internal — use `isJITCSSEnabled()` to read, `enableJITCSS()` to set.\n */\nlet _jitCSSEnabled = false;\n\n/**\n * Per-component opt-in set. Populated by `registerJITCSSComponent()` when a\n * component calls `useJITCSS()` inside its render function.\n * @internal\n */\nlet _jitCSSEnabledComponents = new WeakSet<ShadowRoot>();\n\n/**\n * Returns `true` when the JIT CSS engine is globally active.\n * The render engine uses this to skip the JIT pass for projects that do not\n * use utility classes.\n */\nexport function isJITCSSEnabled(): boolean {\n return _jitCSSEnabled;\n}\n\n/**\n * Returns `true` when JIT CSS should run for the given shadow root.\n * JIT CSS is active if the global flag is set (`enableJITCSS()`) OR if the\n * specific shadow root was registered via `registerJITCSSComponent()`\n * (i.e. the component called `useJITCSS()` in its render function).\n * @internal — used by render.ts\n */\nexport function isJITCSSEnabledFor(root: ShadowRoot): boolean {\n return _jitCSSEnabled || _jitCSSEnabledComponents.has(root);\n}\n\n/**\n * Register a shadow root for per-component JIT CSS opt-in.\n * Called by `useJITCSS()` when invoked inside a component render function.\n * Optionally processes colour / variant options for this render pass.\n * @internal\n */\nexport function registerJITCSSComponent(\n root: ShadowRoot,\n options?: JITCSSOptions,\n): void {\n _jitCSSEnabledComponents.add(root);\n if (options) {\n const merged = { ..._globalJITCSSOptions, ...options };\n // Only rebuild colors and clear the cache when the merged options actually\n // differ from the current state. Without this guard, components that pass\n // options inline (e.g. useJITCSS({ extendedColors: true })) would thrash\n // the cache on every re-render, effectively disabling caching.\n if (JSON.stringify(merged) !== JSON.stringify(_globalJITCSSOptions)) {\n _globalJITCSSOptions = merged;\n rebuildActiveColors(_globalJITCSSOptions);\n jitCssCache.clear();\n }\n }\n // Lazy registration so render.ts can call back into the JIT engine.\n _ensureBridgeRegistered();\n}\n\n/**\n * Configure the JIT CSS engine globally.\n * Call once at app startup to set options that apply to all components.\n *\n * Calling this function also activates the JIT CSS engine if it has been\n * disabled (e.g. by `disableJITCSS()`).\n *\n * @example\n * ```ts\n * import { enableJITCSS } from '@jasonshimmy/custom-elements-runtime';\n *\n * // Enable extended Tailwind color palette (bg-blue-500, text-violet-700, etc.)\n * enableJITCSS({ extendedColors: true });\n *\n * // Add custom colors\n * enableJITCSS({ customColors: { brand: { '500': '#e63946', '600': '#c1121f' } } });\n * ```\n */\nexport function enableJITCSS(options?: JITCSSOptions): void {\n _jitCSSEnabled = true;\n if (options) {\n _globalJITCSSOptions = { ..._globalJITCSSOptions, ...options };\n }\n rebuildActiveColors(_globalJITCSSOptions);\n // Lazy registration so render.ts can call back into the JIT engine.\n _ensureBridgeRegistered();\n // Invalidate cache so new colors take effect on the next render.\n jitCssCache.clear();\n}\n\n/**\n * Disable the JIT CSS engine globally. Útil for projects that use only\n * `useStyle()` and want to avoid any JIT parsing overhead.\n *\n * @example\n * ```ts\n * import { disableJITCSS } from '@jasonshimmy/custom-elements-runtime';\n * disableJITCSS(); // JIT CSS will not run for any component\n * ```\n */\nexport function disableJITCSS(): void {\n _jitCSSEnabled = false;\n // Also clear per-component opt-ins so components that called useJITCSS()\n // don't continue processing JIT CSS after the global flag is disabled.\n _jitCSSEnabledComponents = new WeakSet<ShadowRoot>();\n}\n\n/**\n * Get the current global JIT CSS options.\n * @internal\n */\nexport function getJITCSSOptions(): JITCSSOptions {\n return { ..._globalJITCSSOptions };\n}\n\n/**\n * Reset JIT CSS to default state (semantic colors only). Intended for tests.\n * @internal\n */\nexport function _resetJITCSS(): void {\n _globalJITCSSOptions = {};\n _jitCSSEnabled = false;\n _jitCSSEnabledComponents = new WeakSet<ShadowRoot>();\n _bridgeRegistered = false;\n _activeColors = { ...colors };\n jitCssCache.clear();\n}\n\nconst semanticSizes: Record<string, number> = {\n '3xs': 64,\n '2xs': 72,\n xs: 80,\n sm: 96,\n md: 112,\n lg: 128,\n xl: 144,\n '2xl': 168,\n '3xl': 192,\n '4xl': 224,\n '5xl': 256,\n '6xl': 288,\n '7xl': 320,\n};\n\n// Property mappings for spacing utilities\nexport const spacingProps: Record<string, string[]> = {\n m: ['margin'],\n mx: ['margin-inline'],\n my: ['margin-block'],\n mt: ['margin-top'],\n mr: ['margin-right'],\n mb: ['margin-bottom'],\n ml: ['margin-left'],\n p: ['padding'],\n px: ['padding-inline'],\n py: ['padding-block'],\n pt: ['padding-top'],\n pr: ['padding-right'],\n pb: ['padding-bottom'],\n pl: ['padding-left'],\n inset: ['inset'],\n 'inset-x': ['inset-inline'],\n 'inset-y': ['inset-block'],\n h: ['height'],\n w: ['width'],\n 'min-h': ['min-height'],\n 'min-w': ['min-width'],\n 'max-h': ['max-height'],\n 'max-w': ['max-width'],\n top: ['top'],\n bottom: ['bottom'],\n left: ['left'],\n right: ['right'],\n gap: ['gap'],\n 'gap-x': ['column-gap'],\n 'gap-y': ['row-gap'],\n // size-* sets both width and height simultaneously (Tailwind v3+)\n size: ['width', 'height'],\n // Logical (flow-relative) properties — RTL / vertical writing mode support\n ms: ['margin-inline-start'],\n me: ['margin-inline-end'],\n ps: ['padding-inline-start'],\n pe: ['padding-inline-end'],\n bs: ['margin-block-start'],\n be: ['margin-block-end'],\n start: ['inset-inline-start'],\n end: ['inset-inline-end'],\n 'inset-s': ['inset-inline-start'],\n 'inset-e': ['inset-inline-end'],\n};\n\n// Utility generators for reduced code bloat\nconst generateUtilities = (): CSSMap => {\n const utils: CSSMap = {};\n\n // Add @container utility\n utils['@container'] = 'container-type:inline-size;';\n\n // Core display utilities\n const display = [\n 'block',\n 'inline',\n 'inline-block',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'table',\n 'table-cell',\n 'table-row',\n 'hidden',\n ];\n display.forEach((d) => {\n utils[d] = d === 'hidden' ? 'display:none;' : `display:${d};`;\n });\n\n // Position utilities\n ['absolute', 'relative', 'fixed', 'sticky', 'static'].forEach((p) => {\n utils[p] = `position:${p};`;\n });\n\n // Flex utilities\n Object.assign(utils, {\n 'items-center': 'align-items:center;',\n 'items-start': 'align-items:flex-start;',\n 'items-end': 'align-items:flex-end;',\n 'items-baseline': 'align-items:baseline;',\n 'items-stretch': 'align-items:stretch;',\n 'justify-center': 'justify-content:center;',\n 'justify-start': 'justify-content:flex-start;',\n 'justify-between': 'justify-content:space-between;',\n 'justify-around': 'justify-content:space-around;',\n 'justify-evenly': 'justify-content:space-evenly;',\n 'justify-end': 'justify-content:flex-end;',\n 'flex-wrap': 'flex-wrap:wrap;',\n 'flex-nowrap': 'flex-wrap:nowrap;',\n 'flex-wrap-reverse': 'flex-wrap:wrap-reverse;',\n 'content-center': 'align-content:center;',\n 'content-start': 'align-content:flex-start;',\n 'content-end': 'align-content:flex-end;',\n 'content-between': 'align-content:space-between;',\n 'content-around': 'align-content:space-around;',\n 'content-evenly': 'align-content:space-evenly;',\n 'content-stretch': 'align-content:stretch;',\n 'self-auto': 'align-self:auto;',\n 'self-start': 'align-self:flex-start;',\n 'self-end': 'align-self:flex-end;',\n 'self-center': 'align-self:center;',\n 'self-stretch': 'align-self:stretch;',\n 'flex-col': 'flex-direction:column;',\n 'flex-row': 'flex-direction:row;',\n 'flex-col-reverse': 'flex-direction:column-reverse;',\n 'flex-row-reverse': 'flex-direction:row-reverse;',\n 'flex-1': 'flex:1 1 0%;',\n 'flex-auto': 'flex:1 1 auto;',\n 'flex-initial': 'flex:0 1 auto;',\n 'flex-none': 'flex:0 0 auto;',\n grow: 'flex-grow:1;',\n shrink: 'flex-shrink:1;',\n 'grow-0': 'flex-grow:0;',\n 'shrink-0': 'flex-shrink:0;',\n });\n\n // Grid utilities\n for (let i = 1; i <= 12; i++) {\n utils[`grid-cols-${i}`] =\n `grid-template-columns:repeat(${i},minmax(0,1fr));`;\n utils[`grid-rows-${i}`] = `grid-template-rows:repeat(${i},minmax(0,1fr));`;\n utils[`col-span-${i}`] = `grid-column:span ${i} / span ${i};`;\n utils[`row-span-${i}`] = `grid-row:span ${i} / span ${i};`;\n utils[`col-start-${i}`] = `grid-column-start:${i};`;\n utils[`col-end-${i}`] = `grid-column-end:${i};`;\n utils[`row-start-${i}`] = `grid-row-start:${i};`;\n utils[`row-end-${i}`] = `grid-row-end:${i};`;\n }\n Object.assign(utils, {\n 'grid-cols-none': 'grid-template-columns:none;',\n 'grid-rows-none': 'grid-template-rows:none;',\n 'col-span-full': 'grid-column:1 / -1;',\n 'row-span-full': 'grid-row:1 / -1;',\n 'auto-cols-auto': 'grid-auto-columns:auto;',\n 'auto-cols-min': 'grid-auto-columns:min-content;',\n 'auto-cols-max': 'grid-auto-columns:max-content;',\n 'auto-cols-fr': 'grid-auto-columns:1fr;',\n 'auto-rows-auto': 'grid-auto-rows:auto;',\n 'auto-rows-min': 'grid-auto-rows:min-content;',\n 'auto-rows-max': 'grid-auto-rows:max-content;',\n 'auto-rows-fr': 'grid-auto-rows:1fr;',\n 'grid-flow-row': 'grid-auto-flow:row;',\n 'grid-flow-col': 'grid-auto-flow:column;',\n 'grid-flow-row-dense': 'grid-auto-flow:row dense;',\n 'grid-flow-col-dense': 'grid-auto-flow:column dense;',\n });\n\n // Typography utilities\n Object.assign(utils, {\n 'text-left': 'text-align:left;',\n 'text-center': 'text-align:center;',\n 'text-right': 'text-align:right;',\n 'text-justify': 'text-align:justify;',\n 'font-thin': 'font-weight:100;',\n 'font-extralight': 'font-weight:200;',\n 'font-light': 'font-weight:300;',\n 'font-normal': 'font-weight:400;',\n 'font-medium': 'font-weight:500;',\n 'font-semibold': 'font-weight:600;',\n 'font-bold': 'font-weight:700;',\n 'font-extrabold': 'font-weight:800;',\n 'font-black': 'font-weight:900;',\n italic: 'font-style:italic;',\n 'not-italic': 'font-style:normal;',\n uppercase: 'text-transform:uppercase;',\n lowercase: 'text-transform:lowercase;',\n capitalize: 'text-transform:capitalize;',\n 'normal-case': 'text-transform:none;',\n underline: 'text-decoration-line:underline;',\n overline: 'text-decoration-line:overline;',\n 'line-through': 'text-decoration-line:line-through;',\n 'no-underline': 'text-decoration-line:none;',\n truncate: 'overflow:hidden;text-overflow:ellipsis;white-space:nowrap;',\n 'whitespace-normal': 'white-space:normal;',\n 'whitespace-nowrap': 'white-space:nowrap;',\n 'whitespace-pre': 'white-space:pre;',\n 'whitespace-pre-line': 'white-space:pre-line;',\n 'whitespace-pre-wrap': 'white-space:pre-wrap;',\n 'break-normal': 'overflow-wrap:normal;word-break:normal;',\n 'break-words': 'overflow-wrap:break-word;',\n 'break-all': 'word-break:break-all;',\n // Text-wrap utilities (Tailwind v3.3+)\n 'text-wrap': 'text-wrap:wrap;',\n 'text-nowrap': 'text-wrap:nowrap;',\n 'text-balance': 'text-wrap:balance;',\n 'text-pretty': 'text-wrap:pretty;',\n });\n\n // Font sizes with proper line heights\n // Use a CSS variable `--cer-line-height` so `leading-*` utilities can override\n // the line-height set by `text-*` utilities. Each `text-*` will provide a\n // sensible fallback for the variable matching the previous behavior.\n const fontSizes = [\n ['text-xs', '0.75rem', '1'],\n ['text-sm', '0.875rem', '1.25'],\n ['text-base', '1rem', '1.5'],\n ['text-lg', '1.125rem', '1.75'],\n ['text-xl', '1.25rem', '1.75'],\n ['text-2xl', '1.5rem', '2'],\n ['text-3xl', '1.875rem', '2.25'],\n ['text-4xl', '2.25rem', '2.5'],\n ['text-5xl', '3rem', '1'],\n ['text-6xl', '3.75rem', '1'],\n ['text-7xl', '4.5rem', '1'],\n ['text-8xl', '6rem', '1'],\n ['text-9xl', '8rem', '1'],\n ];\n fontSizes.forEach(([name, size, lineHeight]) => {\n // Set font-size and use --cer-line-height with the previous numeric fallback.\n // This allows `leading-*` to set `--cer-line-height` and take precedence.\n utils[name] =\n `font-size:${size};line-height:var(--cer-line-height,${lineHeight});`;\n });\n\n // Letter spacing (tracking)\n const tracking = [\n ['tracking-tighter', '-0.05em'],\n ['tracking-tight', '-0.025em'],\n ['tracking-normal', '0em'],\n ['tracking-wide', '0.025em'],\n ['tracking-wider', '0.05em'],\n ['tracking-widest', '0.1em'],\n ];\n tracking.forEach(([name, value]) => {\n utils[name] = `letter-spacing:${value};`;\n });\n\n // Line height (leading)\n // Instead of writing `line-height` directly, set the `--cer-line-height` CSS\n // variable. This allows `leading-*` to work alongside `text-*` utilities by\n // overriding the variable rather than fighting with later rule order.\n const leading = [\n ['leading-3', '0.75rem'],\n ['leading-4', '1rem'],\n ['leading-5', '1.25rem'],\n ['leading-6', '1.5rem'],\n ['leading-7', '1.75rem'],\n ['leading-8', '2rem'],\n ['leading-9', '2.25rem'],\n ['leading-10', '2.5rem'],\n ['leading-none', '1'],\n ['leading-tight', '1.25'],\n ['leading-snug', '1.375'],\n ['leading-normal', '1.5'],\n ['leading-relaxed', '1.625'],\n ['leading-loose', '2'],\n ];\n leading.forEach(([name, value]) => {\n // Include a direct line-height for backwards compatibility/testing while\n // also setting the --cer-line-height variable and applying the var-based\n // line-height. Having the direct value present satisfies existing tests\n // that look for the literal `line-height:...;` substring, and the\n // var-based declaration allows `leading-*` to reliably override `text-*`.\n utils[name] =\n `line-height:${value};--cer-line-height:${value};line-height:var(--cer-line-height,${value});`;\n });\n\n // Font families, borders, and outlines\n const borderWidths = [0, 1, 2, 4, 6, 8];\n for (const w of borderWidths) {\n const px = `${w}px`;\n utils[`outline-${w}`] =\n `outline-style:var(--cer-outline-style);outline-width:${px};`;\n utils[`outline-offset-${w}`] = `outline-offset:${px};`;\n utils[`border-${w}`] = `border-width:${px};`;\n utils[`border-t-${w}`] = `border-top-width:${px};`;\n utils[`border-r-${w}`] = `border-right-width:${px};`;\n utils[`border-b-${w}`] = `border-bottom-width:${px};`;\n utils[`border-l-${w}`] = `border-left-width:${px};`;\n utils[`border-x-${w}`] =\n `border-left-width:${px};border-right-width:${px};`;\n utils[`border-y-${w}`] =\n `border-top-width:${px};border-bottom-width:${px};`;\n }\n Object.assign(utils, {\n 'font-sans':\n 'font-family:var(--cer-font-sans, ui-sans-serif,system-ui,sans-serif);',\n 'font-serif': 'font-family:var(--cer-font-serif, ui-serif,Georgia,serif);',\n 'font-mono':\n 'font-family:var(--cer-font-mono, ui-monospace,SFMono-Regular,monospace);',\n outline: 'outline-style:var(--cer-outline-style);outline-width:1px;',\n 'outline-solid': '--cer-outline-style:solid;outline-style:solid;',\n 'outline-dashed': '--cer-outline-style:dashed;outline-style:dashed;',\n 'outline-dotted': '--cer-outline-style:dotted;outline-style:dotted;',\n 'outline-double': '--cer-outline-style:double;outline-style:double;',\n 'outline-none': '--cer-outline-style:none;outline-style:none;',\n 'outline-hidden':\n '--cer-outline-style:none;outline:2px solid transparent;outline-offset:2px;',\n border: 'border-width:1px;',\n 'border-t': 'border-top-width:1px;',\n 'border-r': 'border-right-width:1px;',\n 'border-b': 'border-bottom-width:1px;',\n 'border-l': 'border-left-width:1px;',\n 'border-x': 'border-left-width:1px;border-right-width:1px;',\n 'border-y': 'border-top-width:1px;border-bottom-width:1px;',\n 'border-solid': 'border-style:solid;',\n 'border-dashed': 'border-style:dashed;',\n 'border-dotted': 'border-style:dotted;',\n 'border-double': 'border-style:double;',\n 'border-none': 'border-style:none;',\n });\n\n // Rounded corners\n const radiusMap = {\n none: 0,\n xs: 2,\n sm: 4,\n md: 6,\n lg: 8,\n xl: 12,\n '2xl': 16,\n '3xl': 24,\n '4xl': 32,\n full: 9999,\n };\n for (const [key, value] of Object.entries(radiusMap)) {\n const rem = value === 9999 ? '9999px' : `${value / 16}rem`;\n utils[`rounded-${key}`] = `border-radius:${rem};`;\n utils[`rounded-t-${key}`] =\n `border-top-left-radius:${rem};border-top-right-radius:${rem};`;\n utils[`rounded-r-${key}`] =\n `border-top-right-radius:${rem};border-bottom-right-radius:${rem};`;\n utils[`rounded-b-${key}`] =\n `border-bottom-left-radius:${rem};border-bottom-right-radius:${rem};`;\n utils[`rounded-l-${key}`] =\n `border-top-left-radius:${rem};border-bottom-left-radius:${rem};`;\n utils[`rounded-tl-${key}`] = `border-top-left-radius:${rem};`;\n utils[`rounded-tr-${key}`] = `border-top-right-radius:${rem};`;\n utils[`rounded-br-${key}`] = `border-bottom-right-radius:${rem};`;\n utils[`rounded-bl-${key}`] = `border-bottom-left-radius:${rem};`;\n }\n\n // Shadows\n Object.assign(utils, {\n 'shadow-none':\n '--cer-shadow-color:rgb(0 0 0 / 0);box-shadow:0 0 var(--cer-shadow-color, #0000);',\n 'shadow-xs':\n '--cer-shadow-color:rgb(0 0 0 / 0.05);box-shadow:0 1px 2px 0 var(--cer-shadow-color, rgb(0 0 0 / 0.05));',\n 'shadow-sm':\n '--cer-shadow-color:rgb(0 0 0 / 0.1);box-shadow:0 1px 3px 0 var(--cer-shadow-color, rgb(0 0 0 / 0.1)),0 1px 2px -1px var(--cer-shadow-color, rgb(0 0 0 / 0.1));',\n shadow:\n '--cer-shadow-color:rgb(0 0 0 / 0.1);box-shadow:0 1px 3px 0 var(--cer-shadow-color, rgb(0 0 0 / 0.1)),0 1px 2px -1px var(--cer-shadow-color, rgb(0 0 0 / 0.1));',\n 'shadow-md':\n '--cer-shadow-color:rgb(0 0 0 / 0.1);box-shadow:0 4px 6px -1px var(--cer-shadow-color, rgb(0 0 0 / 0.1)),0 2px 4px -2px var(--cer-shadow-color, rgb(0 0 0 / 0.1));',\n 'shadow-lg':\n '--cer-shadow-color:rgb(0 0 0 / 0.1);box-shadow:0 10px 15px -3px var(--cer-shadow-color, rgb(0 0 0 / 0.1)),0 4px 6px -4px var(--cer-shadow-color, rgb(0 0 0 / 0.1));',\n 'shadow-xl':\n '--cer-shadow-color:rgb(0 0 0 / 0.1);box-shadow:0 20px 25px -5px var(--cer-shadow-color, rgb(0 0 0 / 0.1)),0 8px 10px -6px var(--cer-shadow-color, rgb(0 0 0 / 0.1));',\n 'shadow-2xl':\n '--cer-shadow-color:rgb(0 0 0 / 0.25);box-shadow:0 25px 50px -12px var(--cer-shadow-color, rgb(0 0 0 / 0.25));',\n 'shadow-inner': 'box-shadow:inset 0 2px 4px 0 rgb(0 0 0 / 0.05);',\n });\n\n // Additional utilities that may be missing\n Object.assign(utils, {\n rounded: 'border-radius:0.25rem;',\n });\n\n // Overflow utilities\n Object.assign(utils, {\n 'overflow-auto': 'overflow:auto;',\n 'overflow-hidden': 'overflow:hidden;',\n 'overflow-visible': 'overflow:visible;',\n 'overflow-scroll': 'overflow:scroll;',\n 'overflow-x-auto': 'overflow-x:auto;',\n 'overflow-x-hidden': 'overflow-x:hidden;',\n 'overflow-x-visible': 'overflow-x:visible;',\n 'overflow-x-scroll': 'overflow-x:scroll;',\n 'overflow-y-auto': 'overflow-y:auto;',\n 'overflow-y-hidden': 'overflow-y:hidden;',\n 'overflow-y-visible': 'overflow-y:visible;',\n 'overflow-y-scroll': 'overflow-y:scroll;',\n });\n\n // Background utilities (position, size, repeat, attachment, clip)\n Object.assign(utils, {\n 'bg-cover': 'background-size:cover;',\n 'bg-contain': 'background-size:contain;',\n 'bg-auto': 'background-size:auto;',\n 'bg-center': 'background-position:center;',\n 'bg-top': 'background-position:top;',\n 'bg-bottom': 'background-position:bottom;',\n 'bg-left': 'background-position:left;',\n 'bg-right': 'background-position:right;',\n 'bg-left-top': 'background-position:left top;',\n 'bg-left-bottom': 'background-position:left bottom;',\n 'bg-right-top': 'background-position:right top;',\n 'bg-right-bottom': 'background-position:right bottom;',\n 'bg-no-repeat': 'background-repeat:no-repeat;',\n 'bg-repeat': 'background-repeat:repeat;',\n 'bg-repeat-x': 'background-repeat:repeat-x;',\n 'bg-repeat-y': 'background-repeat:repeat-y;',\n 'bg-repeat-round': 'background-repeat:round;',\n 'bg-repeat-space': 'background-repeat:space;',\n 'bg-fixed': 'background-attachment:fixed;',\n 'bg-local': 'background-attachment:local;',\n 'bg-scroll': 'background-attachment:scroll;',\n 'bg-origin-border': 'background-origin:border-box;',\n 'bg-origin-padding': 'background-origin:padding-box;',\n 'bg-origin-content': 'background-origin:content-box;',\n 'bg-clip-border': 'background-clip:border-box;',\n 'bg-clip-padding': 'background-clip:padding-box;',\n 'bg-clip-content': 'background-clip:content-box;',\n 'bg-clip-text': 'background-clip:text;-webkit-background-clip:text;',\n });\n\n // Text decoration style and thickness utilities\n Object.assign(utils, {\n 'decoration-solid': 'text-decoration-style:solid;',\n 'decoration-dashed': 'text-decoration-style:dashed;',\n 'decoration-dotted': 'text-decoration-style:dotted;',\n 'decoration-double': 'text-decoration-style:double;',\n 'decoration-wavy': 'text-decoration-style:wavy;',\n 'decoration-from-font': 'text-decoration-thickness:from-font;',\n 'decoration-auto': 'text-decoration-thickness:auto;',\n 'decoration-1': 'text-decoration-thickness:1px;',\n 'decoration-2': 'text-decoration-thickness:2px;',\n 'decoration-4': 'text-decoration-thickness:4px;',\n 'decoration-8': 'text-decoration-thickness:8px;',\n 'underline-offset-auto': 'text-underline-offset:auto;',\n 'underline-offset-1': 'text-underline-offset:1px;',\n 'underline-offset-2': 'text-underline-offset:2px;',\n 'underline-offset-4': 'text-underline-offset:4px;',\n 'underline-offset-8': 'text-underline-offset:8px;',\n });\n\n // List utilities\n Object.assign(utils, {\n 'list-none': 'list-style-type:none;',\n 'list-disc': 'list-style-type:disc;',\n 'list-decimal': 'list-style-type:decimal;',\n 'list-inside': 'list-style-position:inside;',\n 'list-outside': 'list-style-position:outside;',\n });\n\n // Content utilities for pseudo-elements\n Object.assign(utils, {\n 'content-none': 'content:none;',\n 'content-normal': 'content:normal;',\n 'content-empty': \"content:'';\",\n });\n\n // Scroll utilities\n Object.assign(utils, {\n 'scroll-smooth': 'scroll-behavior:smooth;',\n 'scroll-auto': 'scroll-behavior:auto;',\n 'scroll-m-0': 'scroll-margin:0;',\n 'scroll-p-0': 'scroll-padding:0;',\n 'snap-none': 'scroll-snap-type:none;',\n 'snap-x': 'scroll-snap-type:x var(--cer-scroll-snap-strictness,mandatory);',\n 'snap-y': 'scroll-snap-type:y var(--cer-scroll-snap-strictness,mandatory);',\n 'snap-both':\n 'scroll-snap-type:both var(--cer-scroll-snap-strictness,mandatory);',\n 'snap-mandatory': '--cer-scroll-snap-strictness:mandatory;',\n 'snap-proximity': '--cer-scroll-snap-strictness:proximity;',\n 'snap-start': 'scroll-snap-align:start;',\n 'snap-end': 'scroll-snap-align:end;',\n 'snap-center': 'scroll-snap-align:center;',\n 'snap-align-none': 'scroll-snap-align:none;',\n 'snap-normal': 'scroll-snap-stop:normal;',\n 'snap-always': 'scroll-snap-stop:always;',\n });\n\n // Will-change utilities\n Object.assign(utils, {\n 'will-change-auto': 'will-change:auto;',\n 'will-change-scroll': 'will-change:scroll-position;',\n 'will-change-contents': 'will-change:contents;',\n 'will-change-transform': 'will-change:transform;',\n 'will-change-opacity': 'will-change:opacity;',\n });\n\n // Touch action utilities\n Object.assign(utils, {\n 'touch-auto': 'touch-action:auto;',\n 'touch-none': 'touch-action:none;',\n 'touch-pan-x': 'touch-action:pan-x;',\n 'touch-pan-left': 'touch-action:pan-left;',\n 'touch-pan-right': 'touch-action:pan-right;',\n 'touch-pan-y': 'touch-action:pan-y;',\n 'touch-pan-up': 'touch-action:pan-up;',\n 'touch-pan-down': 'touch-action:pan-down;',\n 'touch-pinch-zoom': 'touch-action:pinch-zoom;',\n 'touch-manipulation': 'touch-action:manipulation;',\n });\n\n // Columns utilities\n Object.assign(utils, {\n 'columns-auto': 'columns:auto;',\n 'columns-1': 'columns:1;',\n 'columns-2': 'columns:2;',\n 'columns-3': 'columns:3;',\n 'columns-4': 'columns:4;',\n 'columns-5': 'columns:5;',\n 'columns-6': 'columns:6;',\n 'columns-7': 'columns:7;',\n 'columns-8': 'columns:8;',\n 'columns-9': 'columns:9;',\n 'columns-10': 'columns:10;',\n 'columns-11': 'columns:11;',\n 'columns-12': 'columns:12;',\n 'columns-3xs': `columns:${0.25 * 64}rem;`,\n 'columns-2xs': `columns:${0.25 * 80}rem;`,\n 'columns-xs': `columns:${0.25 * 96}rem;`,\n 'columns-sm': `columns:${0.25 * 112}rem;`,\n 'columns-md': `columns:${0.25 * 128}rem;`,\n 'columns-lg': `columns:${0.25 * 160}rem;`,\n 'columns-xl': `columns:${0.25 * 192}rem;`,\n 'columns-2xl': `columns:${0.25 * 224}rem;`,\n 'columns-3xl': `columns:${0.25 * 256}rem;`,\n 'columns-4xl': `columns:${0.25 * 280}rem;`,\n 'columns-5xl': `columns:${0.25 * 320}rem;`,\n });\n\n // Divide utilities (sibling selectors using special marker for post-processing)\n // These use > * + * selectors which need special handling in generateRule()\n Object.assign(utils, {\n 'divide-x': 'border-left-width:1px;',\n 'divide-x-0': 'border-left-width:0px;',\n 'divide-x-2': 'border-left-width:2px;',\n 'divide-x-4': 'border-left-width:4px;',\n 'divide-x-8': 'border-left-width:8px;',\n 'divide-y': 'border-top-width:1px;',\n 'divide-y-0': 'border-top-width:0px;',\n 'divide-y-2': 'border-top-width:2px;',\n 'divide-y-4': 'border-top-width:4px;',\n 'divide-y-8': 'border-top-width:8px;',\n 'divide-solid': 'border-style:solid;',\n 'divide-dashed': 'border-style:dashed;',\n 'divide-dotted': 'border-style:dotted;',\n 'divide-double': 'border-style:double;',\n 'divide-none': 'border-style:none;',\n });\n\n // Accessibility, pointer events, visibility, cursors, z-index\n const cursors = [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'grab',\n 'grabbing',\n ];\n for (const c of cursors) utils[`cursor-${c}`] = `cursor:${c};`;\n for (const z of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50])\n utils[`z-${z}`] = `z-index:${z};`;\n utils['z-auto'] = 'z-index:auto;';\n utils['-z-10'] = 'z-index:-10;';\n utils['-z-20'] = 'z-index:-20;';\n utils['-z-30'] = 'z-index:-30;';\n utils['-z-40'] = 'z-index:-40;';\n utils['-z-50'] = 'z-index:-50;';\n Object.assign(utils, {\n 'sr-only':\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;',\n 'not-sr-only':\n 'position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal;',\n 'pointer-events-none': 'pointer-events:none;',\n 'pointer-events-auto': 'pointer-events:auto;',\n visible: 'visibility:visible;',\n invisible: 'visibility:hidden;',\n });\n\n // Size utilities and auto margins\n Object.assign(utils, {\n 'w-full': 'width:100%;',\n 'w-screen': 'width:100dvw;',\n 'h-full': 'height:100%;',\n 'h-screen': 'height:100dvh;',\n 'max-w-full': 'max-width:100%;',\n 'max-h-full': 'max-height:100%;',\n 'max-w-screen': 'max-width:100dvw;',\n 'max-h-screen': 'max-height:100dvh;',\n 'min-w-0': 'min-width:0;',\n 'min-h-0': 'min-height:0;',\n 'min-w-full': 'min-width:100%;',\n 'min-h-full': 'min-height:100%;',\n 'min-w-screen': 'min-width:100dvw;',\n 'min-h-screen': 'min-height:100dvh;',\n 'w-auto': 'width:auto;',\n 'h-auto': 'height:auto;',\n 'w-fit': 'width:fit-content;',\n 'h-fit': 'height:fit-content;',\n 'w-min': 'width:min-content;',\n 'h-min': 'height:min-content;',\n 'w-max': 'width:max-content;',\n 'h-max': 'height:max-content;',\n 'm-auto': 'margin:auto;',\n 'mx-auto': 'margin-inline:auto;',\n 'my-auto': 'margin-block:auto;',\n });\n\n // Semantic sizes\n for (const [key, value] of Object.entries(semanticSizes)) {\n utils[`max-w-${key}`] = `max-width:calc(${spacing} * ${value});`;\n utils[`min-w-${key}`] = `min-width:calc(${spacing} * ${value});`;\n utils[`w-${key}`] = `width:calc(${spacing} * ${value});`;\n utils[`max-h-${key}`] = `max-height:calc(${spacing} * ${value});`;\n utils[`min-h-${key}`] = `min-height:calc(${spacing} * ${value});`;\n utils[`h-${key}`] = `height:calc(${spacing} * ${value});`;\n }\n\n // Transition utilities\n Object.assign(utils, {\n transition:\n 'transition-property:all;transition-duration:150ms;transition-timing-function:ease-in-out;',\n 'transition-none': 'transition-property:none;',\n 'transition-all': 'transition-property:all;',\n 'transition-colors':\n 'transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;',\n 'transition-shadow': 'transition-property:box-shadow;',\n 'transition-opacity': 'transition-property:opacity;',\n 'transition-transform': 'transition-property:transform;',\n 'ease-linear': 'transition-timing-function:linear;',\n 'ease-in': 'transition-timing-function:ease-in;',\n 'ease-out': 'transition-timing-function:ease-out;',\n 'ease-in-out': 'transition-timing-function:ease-in-out;',\n 'duration-75': 'transition-duration:75ms;',\n 'duration-100': 'transition-duration:100ms;',\n 'duration-150': 'transition-duration:150ms;',\n 'duration-200': 'transition-duration:200ms;',\n 'duration-300': 'transition-duration:300ms;',\n 'duration-500': 'transition-duration:500ms;',\n 'duration-700': 'transition-duration:700ms;',\n 'duration-1000': 'transition-duration:1000ms;',\n });\n\n // Transition delay utilities\n Object.assign(utils, {\n 'delay-0': 'transition-delay:0ms;',\n 'delay-75': 'transition-delay:75ms;',\n 'delay-100': 'transition-delay:100ms;',\n 'delay-150': 'transition-delay:150ms;',\n 'delay-200': 'transition-delay:200ms;',\n 'delay-300': 'transition-delay:300ms;',\n 'delay-500': 'transition-delay:500ms;',\n 'delay-700': 'transition-delay:700ms;',\n 'delay-1000': 'transition-delay:1000ms;',\n });\n\n // Transform utilities — CSS-variable–composed so multiple transforms compose\n const TRANSFORM_COMPOSE =\n 'translateX(var(--cer-translate-x)) translateY(var(--cer-translate-y)) rotate(var(--cer-rotate)) skewX(var(--cer-skew-x)) skewY(var(--cer-skew-y)) scaleX(var(--cer-scale-x)) scaleY(var(--cer-scale-y))';\n const tx = (v: string) =>\n `--cer-translate-x:${v};transform:${TRANSFORM_COMPOSE};`;\n const ty = (v: string) =>\n `--cer-translate-y:${v};transform:${TRANSFORM_COMPOSE};`;\n Object.assign(utils, {\n // Scale (uniform)\n 'scale-0': `--cer-scale-x:0;--cer-scale-y:0;transform:${TRANSFORM_COMPOSE};`,\n 'scale-50': `--cer-scale-x:.5;--cer-scale-y:.5;transform:${TRANSFORM_COMPOSE};`,\n 'scale-75': `--cer-scale-x:.75;--cer-scale-y:.75;transform:${TRANSFORM_COMPOSE};`,\n 'scale-90': `--cer-scale-x:.9;--cer-scale-y:.9;transform:${TRANSFORM_COMPOSE};`,\n 'scale-95': `--cer-scale-x:.95;--cer-scale-y:.95;transform:${TRANSFORM_COMPOSE};`,\n 'scale-100': `--cer-scale-x:1;--cer-scale-y:1;transform:${TRANSFORM_COMPOSE};`,\n 'scale-105': `--cer-scale-x:1.05;--cer-scale-y:1.05;transform:${TRANSFORM_COMPOSE};`,\n 'scale-110': `--cer-scale-x:1.1;--cer-scale-y:1.1;transform:${TRANSFORM_COMPOSE};`,\n 'scale-125': `--cer-scale-x:1.25;--cer-scale-y:1.25;transform:${TRANSFORM_COMPOSE};`,\n 'scale-150': `--cer-scale-x:1.5;--cer-scale-y:1.5;transform:${TRANSFORM_COMPOSE};`,\n // Scale X axis only\n 'scale-x-0': `--cer-scale-x:0;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-50': `--cer-scale-x:.5;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-75': `--cer-scale-x:.75;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-90': `--cer-scale-x:.9;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-95': `--cer-scale-x:.95;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-100': `--cer-scale-x:1;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-105': `--cer-scale-x:1.05;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-110': `--cer-scale-x:1.1;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-125': `--cer-scale-x:1.25;transform:${TRANSFORM_COMPOSE};`,\n 'scale-x-150': `--cer-scale-x:1.5;transform:${TRANSFORM_COMPOSE};`,\n // Scale Y axis only\n 'scale-y-0': `--cer-scale-y:0;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-50': `--cer-scale-y:.5;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-75': `--cer-scale-y:.75;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-90': `--cer-scale-y:.9;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-95': `--cer-scale-y:.95;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-100': `--cer-scale-y:1;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-105': `--cer-scale-y:1.05;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-110': `--cer-scale-y:1.1;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-125': `--cer-scale-y:1.25;transform:${TRANSFORM_COMPOSE};`,\n 'scale-y-150': `--cer-scale-y:1.5;transform:${TRANSFORM_COMPOSE};`,\n // Rotate\n 'rotate-0': `--cer-rotate:0deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-1': `--cer-rotate:1deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-2': `--cer-rotate:2deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-3': `--cer-rotate:3deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-6': `--cer-rotate:6deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-12': `--cer-rotate:12deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-45': `--cer-rotate:45deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-90': `--cer-rotate:90deg;transform:${TRANSFORM_COMPOSE};`,\n 'rotate-180': `--cer-rotate:180deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-1': `--cer-rotate:-1deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-2': `--cer-rotate:-2deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-3': `--cer-rotate:-3deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-6': `--cer-rotate:-6deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-12': `--cer-rotate:-12deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-45': `--cer-rotate:-45deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-90': `--cer-rotate:-90deg;transform:${TRANSFORM_COMPOSE};`,\n '-rotate-180': `--cer-rotate:-180deg;transform:${TRANSFORM_COMPOSE};`,\n // Translate X\n 'translate-x-0': tx('0px'),\n 'translate-x-px': tx('1px'),\n 'translate-x-0.5': tx('0.125rem'),\n 'translate-x-1': tx('0.25rem'),\n 'translate-x-1.5': tx('0.375rem'),\n 'translate-x-2': tx('0.5rem'),\n 'translate-x-2.5': tx('0.625rem'),\n 'translate-x-3': tx('0.75rem'),\n 'translate-x-4': tx('1rem'),\n 'translate-x-5': tx('1.25rem'),\n 'translate-x-6': tx('1.5rem'),\n 'translate-x-8': tx('2rem'),\n 'translate-x-10': tx('2.5rem'),\n 'translate-x-12': tx('3rem'),\n 'translate-x-16': tx('4rem'),\n 'translate-x-20': tx('5rem'),\n 'translate-x-24': tx('6rem'),\n 'translate-x-32': tx('8rem'),\n 'translate-x-1/2': tx('50%'),\n 'translate-x-1/3': tx('33.333333%'),\n 'translate-x-2/3': tx('66.666667%'),\n 'translate-x-1/4': tx('25%'),\n 'translate-x-3/4': tx('75%'),\n 'translate-x-full': tx('100%'),\n '-translate-x-px': tx('-1px'),\n '-translate-x-0.5': tx('-0.125rem'),\n '-translate-x-1': tx('-0.25rem'),\n '-translate-x-1.5': tx('-0.375rem'),\n '-translate-x-2': tx('-0.5rem'),\n '-translate-x-2.5': tx('-0.625rem'),\n '-translate-x-3': tx('-0.75rem'),\n '-translate-x-4': tx('-1rem'),\n '-translate-x-1/2': tx('-50%'),\n '-translate-x-full': tx('-100%'),\n // Translate Y\n 'translate-y-0': ty('0px'),\n 'translate-y-px': ty('1px'),\n 'translate-y-0.5': ty('0.125rem'),\n 'translate-y-1': ty('0.25rem'),\n 'translate-y-1.5': ty('0.375rem'),\n 'translate-y-2': ty('0.5rem'),\n 'translate-y-2.5': ty('0.625rem'),\n 'translate-y-3': ty('0.75rem'),\n 'translate-y-4': ty('1rem'),\n 'translate-y-5': ty('1.25rem'),\n 'translate-y-6': ty('1.5rem'),\n 'translate-y-8': ty('2rem'),\n 'translate-y-10': ty('2.5rem'),\n 'translate-y-12': ty('3rem'),\n 'translate-y-16': ty('4rem'),\n 'translate-y-20': ty('5rem'),\n 'translate-y-24': ty('6rem'),\n 'translate-y-32': ty('8rem'),\n 'translate-y-1/2': ty('50%'),\n 'translate-y-full': ty('100%'),\n '-translate-y-px': ty('-1px'),\n '-translate-y-0.5': ty('-0.125rem'),\n '-translate-y-1': ty('-0.25rem'),\n '-translate-y-2': ty('-0.5rem'),\n '-translate-y-4': ty('-1rem'),\n '-translate-y-1/2': ty('-50%'),\n '-translate-y-full': ty('-100%'),\n // Skew X\n 'skew-x-0': `--cer-skew-x:0deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-x-1': `--cer-skew-x:1deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-x-2': `--cer-skew-x:2deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-x-3': `--cer-skew-x:3deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-x-6': `--cer-skew-x:6deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-x-12': `--cer-skew-x:12deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-x-1': `--cer-skew-x:-1deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-x-2': `--cer-skew-x:-2deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-x-3': `--cer-skew-x:-3deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-x-6': `--cer-skew-x:-6deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-x-12': `--cer-skew-x:-12deg;transform:${TRANSFORM_COMPOSE};`,\n // Skew Y\n 'skew-y-0': `--cer-skew-y:0deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-y-1': `--cer-skew-y:1deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-y-2': `--cer-skew-y:2deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-y-3': `--cer-skew-y:3deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-y-6': `--cer-skew-y:6deg;transform:${TRANSFORM_COMPOSE};`,\n 'skew-y-12': `--cer-skew-y:12deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-y-1': `--cer-skew-y:-1deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-y-2': `--cer-skew-y:-2deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-y-3': `--cer-skew-y:-3deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-y-6': `--cer-skew-y:-6deg;transform:${TRANSFORM_COMPOSE};`,\n '-skew-y-12': `--cer-skew-y:-12deg;transform:${TRANSFORM_COMPOSE};`,\n });\n\n // Ring utilities — drawn via box-shadow, color set via --cer-ring-color\n Object.assign(utils, {\n ring: `box-shadow:0 0 0 3px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-0': `box-shadow:0 0 0 0px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-1': `box-shadow:0 0 0 1px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-2': `box-shadow:0 0 0 2px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-4': `box-shadow:0 0 0 4px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-8': `box-shadow:0 0 0 8px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-inset': `box-shadow:inset 0 0 0 3px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-offset-0': `--cer-ring-offset-width:0px;box-shadow:0 0 0 0px var(--cer-ring-offset-color,#fff),0 0 0 3px var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-offset-1': `--cer-ring-offset-width:1px;box-shadow:0 0 0 1px var(--cer-ring-offset-color,#fff),0 0 0 calc(3px + 1px) var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-offset-2': `--cer-ring-offset-width:2px;box-shadow:0 0 0 2px var(--cer-ring-offset-color,#fff),0 0 0 calc(3px + 2px) var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-offset-4': `--cer-ring-offset-width:4px;box-shadow:0 0 0 4px var(--cer-ring-offset-color,#fff),0 0 0 calc(3px + 4px) var(--cer-ring-color,rgb(59 130 246/0.5));`,\n 'ring-offset-8': `--cer-ring-offset-width:8px;box-shadow:0 0 0 8px var(--cer-ring-offset-color,#fff),0 0 0 calc(3px + 8px) var(--cer-ring-color,rgb(59 130 246/0.5));`,\n });\n\n // Filter utilities — CSS-variable–composed\n const FILTER_COMPOSE =\n 'var(--cer-blur) var(--cer-brightness) var(--cer-contrast) var(--cer-grayscale) var(--cer-hue-rotate) var(--cer-invert) var(--cer-saturate) var(--cer-sepia) var(--cer-drop-shadow)';\n const BACKDROP_FILTER_COMPOSE =\n 'var(--cer-backdrop-blur) var(--cer-backdrop-brightness) var(--cer-backdrop-contrast) var(--cer-backdrop-grayscale) var(--cer-backdrop-hue-rotate) var(--cer-backdrop-invert) var(--cer-backdrop-saturate) var(--cer-backdrop-sepia)';\n Object.assign(utils, {\n // Blur\n 'blur-none': `--cer-blur:;filter:${FILTER_COMPOSE};`,\n 'blur-sm': `--cer-blur:blur(4px);filter:${FILTER_COMPOSE};`,\n blur: `--cer-blur:blur(8px);filter:${FILTER_COMPOSE};`,\n 'blur-md': `--cer-blur:blur(12px);filter:${FILTER_COMPOSE};`,\n 'blur-lg': `--cer-blur:blur(16px);filter:${FILTER_COMPOSE};`,\n 'blur-xl': `--cer-blur:blur(24px);filter:${FILTER_COMPOSE};`,\n 'blur-2xl': `--cer-blur:blur(40px);filter:${FILTER_COMPOSE};`,\n 'blur-3xl': `--cer-blur:blur(64px);filter:${FILTER_COMPOSE};`,\n // Brightness\n 'brightness-0': `--cer-brightness:brightness(0);filter:${FILTER_COMPOSE};`,\n 'brightness-50': `--cer-brightness:brightness(.5);filter:${FILTER_COMPOSE};`,\n 'brightness-75': `--cer-brightness:brightness(.75);filter:${FILTER_COMPOSE};`,\n 'brightness-90': `--cer-brightness:brightness(.9);filter:${FILTER_COMPOSE};`,\n 'brightness-95': `--cer-brightness:brightness(.95);filter:${FILTER_COMPOSE};`,\n 'brightness-100': `--cer-brightness:brightness(1);filter:${FILTER_COMPOSE};`,\n 'brightness-105': `--cer-brightness:brightness(1.05);filter:${FILTER_COMPOSE};`,\n 'brightness-110': `--cer-brightness:brightness(1.1);filter:${FILTER_COMPOSE};`,\n 'brightness-125': `--cer-brightness:brightness(1.25);filter:${FILTER_COMPOSE};`,\n 'brightness-150': `--cer-brightness:brightness(1.5);filter:${FILTER_COMPOSE};`,\n 'brightness-200': `--cer-brightness:brightness(2);filter:${FILTER_COMPOSE};`,\n // Contrast\n 'contrast-0': `--cer-contrast:contrast(0);filter:${FILTER_COMPOSE};`,\n 'contrast-50': `--cer-contrast:contrast(.5);filter:${FILTER_COMPOSE};`,\n 'contrast-75': `--cer-contrast:contrast(.75);filter:${FILTER_COMPOSE};`,\n 'contrast-100': `--cer-contrast:contrast(1);filter:${FILTER_COMPOSE};`,\n 'contrast-125': `--cer-contrast:contrast(1.25);filter:${FILTER_COMPOSE};`,\n 'contrast-150': `--cer-contrast:contrast(1.5);filter:${FILTER_COMPOSE};`,\n 'contrast-200': `--cer-contrast:contrast(2);filter:${FILTER_COMPOSE};`,\n // Grayscale\n grayscale: `--cer-grayscale:grayscale(100%);filter:${FILTER_COMPOSE};`,\n 'grayscale-0': `--cer-grayscale:grayscale(0);filter:${FILTER_COMPOSE};`,\n // Hue rotate\n 'hue-rotate-0': `--cer-hue-rotate:hue-rotate(0deg);filter:${FILTER_COMPOSE};`,\n 'hue-rotate-15': `--cer-hue-rotate:hue-rotate(15deg);filter:${FILTER_COMPOSE};`,\n 'hue-rotate-30': `--cer-hue-rotate:hue-rotate(30deg);filter:${FILTER_COMPOSE};`,\n 'hue-rotate-60': `--cer-hue-rotate:hue-rotate(60deg);filter:${FILTER_COMPOSE};`,\n 'hue-rotate-90': `--cer-hue-rotate:hue-rotate(90deg);filter:${FILTER_COMPOSE};`,\n 'hue-rotate-180': `--cer-hue-rotate:hue-rotate(180deg);filter:${FILTER_COMPOSE};`,\n '-hue-rotate-180': `--cer-hue-rotate:hue-rotate(-180deg);filter:${FILTER_COMPOSE};`,\n '-hue-rotate-90': `--cer-hue-rotate:hue-rotate(-90deg);filter:${FILTER_COMPOSE};`,\n '-hue-rotate-60': `--cer-hue-rotate:hue-rotate(-60deg);filter:${FILTER_COMPOSE};`,\n '-hue-rotate-30': `--cer-hue-rotate:hue-rotate(-30deg);filter:${FILTER_COMPOSE};`,\n '-hue-rotate-15': `--cer-hue-rotate:hue-rotate(-15deg);filter:${FILTER_COMPOSE};`,\n // Invert\n invert: `--cer-invert:invert(100%);filter:${FILTER_COMPOSE};`,\n 'invert-0': `--cer-invert:invert(0);filter:${FILTER_COMPOSE};`,\n // Saturate\n 'saturate-0': `--cer-saturate:saturate(0);filter:${FILTER_COMPOSE};`,\n 'saturate-50': `--cer-saturate:saturate(.5);filter:${FILTER_COMPOSE};`,\n 'saturate-100': `--cer-saturate:saturate(1);filter:${FILTER_COMPOSE};`,\n 'saturate-150': `--cer-saturate:saturate(1.5);filter:${FILTER_COMPOSE};`,\n 'saturate-200': `--cer-saturate:saturate(2);filter:${FILTER_COMPOSE};`,\n // Sepia\n sepia: `--cer-sepia:sepia(100%);filter:${FILTER_COMPOSE};`,\n 'sepia-0': `--cer-sepia:sepia(0);filter:${FILTER_COMPOSE};`,\n // Drop shadow (filter, not box-shadow)\n 'drop-shadow-sm': `--cer-drop-shadow:drop-shadow(0 1px 1px rgb(0 0 0/.05));filter:${FILTER_COMPOSE};`,\n 'drop-shadow': `--cer-drop-shadow:drop-shadow(0 1px 2px rgb(0 0 0/.1)) drop-shadow(0 1px 1px rgb(0 0 0/.06));filter:${FILTER_COMPOSE};`,\n 'drop-shadow-md': `--cer-drop-shadow:drop-shadow(0 4px 3px rgb(0 0 0/.07)) drop-shadow(0 2px 2px rgb(0 0 0/.06));filter:${FILTER_COMPOSE};`,\n 'drop-shadow-lg': `--cer-drop-shadow:drop-shadow(0 10px 8px rgb(0 0 0/.04)) drop-shadow(0 4px 3px rgb(0 0 0/.1));filter:${FILTER_COMPOSE};`,\n 'drop-shadow-xl': `--cer-drop-shadow:drop-shadow(0 20px 13px rgb(0 0 0/.03)) drop-shadow(0 8px 5px rgb(0 0 0/.08));filter:${FILTER_COMPOSE};`,\n 'drop-shadow-2xl': `--cer-drop-shadow:drop-shadow(0 25px 25px rgb(0 0 0/.15));filter:${FILTER_COMPOSE};`,\n 'drop-shadow-none': `--cer-drop-shadow:drop-shadow(0 0 #0000);filter:${FILTER_COMPOSE};`,\n // Backdrop blur\n 'backdrop-blur-none': `--cer-backdrop-blur:;backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur-sm': `--cer-backdrop-blur:blur(4px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur': `--cer-backdrop-blur:blur(8px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur-md': `--cer-backdrop-blur:blur(12px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur-lg': `--cer-backdrop-blur:blur(16px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur-xl': `--cer-backdrop-blur:blur(24px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur-2xl': `--cer-backdrop-blur:blur(40px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n 'backdrop-blur-3xl': `--cer-backdrop-blur:blur(64px);backdrop-filter:${BACKDROP_FILTER_COMPOSE};-webkit-backdrop-filter:${BACKDROP_FILTER_COMPOSE};`,\n });\n\n // Aspect ratio utilities\n Object.assign(utils, {\n 'aspect-auto': 'aspect-ratio:auto;',\n 'aspect-square': 'aspect-ratio:1 / 1;',\n 'aspect-video': 'aspect-ratio:16 / 9;',\n });\n\n // Object utilities\n Object.assign(utils, {\n 'object-contain': 'object-fit:contain;',\n 'object-cover': 'object-fit:cover;',\n 'object-fill': 'object-fit:fill;',\n 'object-none': 'object-fit:none;',\n 'object-scale-down': 'object-fit:scale-down;',\n 'object-bottom': 'object-position:bottom;',\n 'object-center': 'object-position:center;',\n 'object-left': 'object-position:left;',\n 'object-left-bottom': 'object-position:left bottom;',\n 'object-left-top': 'object-position:left top;',\n 'object-right': 'object-position:right;',\n 'object-right-bottom': 'object-position:right bottom;',\n 'object-right-top': 'object-position:right top;',\n 'object-top': 'object-position:top;',\n });\n\n // Line clamp utilities\n for (let i = 1; i <= 6; i++) {\n utils[`line-clamp-${i}`] =\n `display:-webkit-box;-webkit-line-clamp:${i};-webkit-box-orient:vertical;overflow:hidden;`;\n }\n utils['line-clamp-none'] =\n 'overflow:visible;display:block;-webkit-box-orient:horizontal;-webkit-line-clamp:none;';\n\n // Order utilities for flexbox\n for (let i = 1; i <= 12; i++) {\n utils[`order-${i}`] = `order:${i};`;\n }\n utils['order-first'] = 'order:-9999;';\n utils['order-last'] = 'order:9999;';\n utils['order-none'] = 'order:0;';\n\n // Additional flex grow/shrink utilities\n for (let i = 0; i <= 12; i++) {\n if (i <= 1) continue; // Already handled above\n utils[`grow-${i}`] = `flex-grow:${i};`;\n utils[`shrink-${i}`] = `flex-shrink:${i};`;\n }\n\n // Gradient background utilities\n Object.assign(utils, {\n // Linear gradients\n 'bg-linear-to-t':\n 'background-image:linear-gradient(to top, var(--cer-gradient-stops));',\n 'bg-linear-to-tr':\n 'background-image:linear-gradient(to top right, var(--cer-gradient-stops));',\n 'bg-linear-to-r':\n 'background-image:linear-gradient(to right, var(--cer-gradient-stops));',\n 'bg-linear-to-br':\n 'background-image:linear-gradient(to bottom right, var(--cer-gradient-stops));',\n 'bg-linear-to-b':\n 'background-image:linear-gradient(to bottom, var(--cer-gradient-stops));',\n 'bg-linear-to-bl':\n 'background-image:linear-gradient(to bottom left, var(--cer-gradient-stops));',\n 'bg-linear-to-l':\n 'background-image:linear-gradient(to left, var(--cer-gradient-stops));',\n 'bg-linear-to-tl':\n 'background-image:linear-gradient(to top left, var(--cer-gradient-stops));',\n\n // Radial gradients\n 'bg-radial':\n 'background-image:radial-gradient(ellipse at center, var(--cer-gradient-stops));',\n 'bg-radial-at-t':\n 'background-image:radial-gradient(ellipse at top, var(--cer-gradient-stops));',\n 'bg-radial-at-tr':\n 'background-image:radial-gradient(ellipse at top right, var(--cer-gradient-stops));',\n 'bg-radial-at-r':\n 'background-image:radial-gradient(ellipse at right, var(--cer-gradient-stops));',\n 'bg-radial-at-br':\n 'background-image:radial-gradient(ellipse at bottom right, var(--cer-gradient-stops));',\n 'bg-radial-at-b':\n 'background-image:radial-gradient(ellipse at bottom, var(--cer-gradient-stops));',\n 'bg-radial-at-bl':\n 'background-image:radial-gradient(ellipse at bottom left, var(--cer-gradient-stops));',\n 'bg-radial-at-l':\n 'background-image:radial-gradient(ellipse at left, var(--cer-gradient-stops));',\n 'bg-radial-at-tl':\n 'background-image:radial-gradient(ellipse at top left, var(--cer-gradient-stops));',\n 'bg-radial-circle':\n 'background-image:radial-gradient(circle at center, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-t':\n 'background-image:radial-gradient(circle at top, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-tr':\n 'background-image:radial-gradient(circle at top right, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-r':\n 'background-image:radial-gradient(circle at right, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-br':\n 'background-image:radial-gradient(circle at bottom right, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-b':\n 'background-image:radial-gradient(circle at bottom, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-bl':\n 'background-image:radial-gradient(circle at bottom left, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-l':\n 'background-image:radial-gradient(circle at left, var(--cer-gradient-stops));',\n 'bg-radial-circle-at-tl':\n 'background-image:radial-gradient(circle at top left, var(--cer-gradient-stops));',\n\n // Conic gradients\n 'bg-conic':\n 'background-image:conic-gradient(from 0deg at center, var(--cer-gradient-stops));',\n 'bg-conic-at-t':\n 'background-image:conic-gradient(from 0deg at top, var(--cer-gradient-stops));',\n 'bg-conic-at-tr':\n 'background-image:conic-gradient(from 0deg at top right, var(--cer-gradient-stops));',\n 'bg-conic-at-r':\n 'background-image:conic-gradient(from 0deg at right, var(--cer-gradient-stops));',\n 'bg-conic-at-br':\n 'background-image:conic-gradient(from 0deg at bottom right, var(--cer-gradient-stops));',\n 'bg-conic-at-b':\n 'background-image:conic-gradient(from 0deg at bottom, var(--cer-gradient-stops));',\n 'bg-conic-at-bl':\n 'background-image:conic-gradient(from 0deg at bottom left, var(--cer-gradient-stops));',\n 'bg-conic-at-l':\n 'background-image:conic-gradient(from 0deg at left, var(--cer-gradient-stops));',\n 'bg-conic-at-tl':\n 'background-image:conic-gradient(from 0deg at top left, var(--cer-gradient-stops));',\n });\n\n // Prose utilities\n Object.assign(utils, {\n // prose-invert: dark mode color inversion\n 'prose-invert': `\n --cer-prose-body:var(--cer-color-neutral-200);\n --cer-prose-headings:var(--cer-color-neutral-50);\n --cer-prose-lead:var(--cer-color-neutral-300);\n --cer-prose-bold:var(--cer-color-neutral-50);\n --cer-prose-quotes:var(--cer-color-neutral-300);\n --cer-prose-quote-border:var(--cer-color-neutral-700);\n --cer-prose-code:var(--cer-color-neutral-200);\n --cer-prose-code-bg:var(--cer-color-neutral-900);\n --cer-prose-pre-code:var(--cer-color-neutral-200);\n --cer-prose-pre-bg:var(--cer-color-neutral-900);\n --cer-prose-pre-border:var(--cer-color-neutral-800);\n --cer-prose-hr:var(--cer-color-neutral-700);\n --cer-prose-caps:var(--cer-color-neutral-400);\n --cer-prose-list-marker:var(--cer-color-neutral-400);\n --cer-prose-list-marker-strong:var(--cer-color-neutral-300);\n --cer-prose-counters:var(--cer-color-neutral-300);\n --cer-prose-bullets:var(--cer-color-neutral-300);\n --cer-prose-img-caption:var(--cer-color-neutral-400);\n --cer-prose-table-border:var(--cer-color-neutral-700);\n --cer-prose-table-head:var(--cer-color-neutral-200);\n --cer-prose-links:var(--cer-prose-invert-links,var(--cer-color-neutral-300));\n --cer-prose-links-hover:var(--cer-prose-invert-links-hover,var(--cer-color-neutral-100));\n `.replace(/\\s+/g, ''),\n\n // prose-primary: primary color scheme (sets invert variables)\n 'prose-primary': `\n --cer-prose-links:var(--cer-color-primary-700);\n --cer-prose-links-hover:var(--cer-color-primary-500);\n --cer-prose-invert-links:var(--cer-color-primary-300);\n --cer-prose-invert-links-hover:var(--cer-color-primary-100);\n `.replace(/\\s+/g, ''),\n\n // prose-secondary: secondary color scheme (sets invert variables)\n 'prose-secondary': `\n --cer-prose-links:var(--cer-color-secondary-700);\n --cer-prose-links-hover:var(--cer-color-secondary-500);\n --cer-prose-invert-links:var(--cer-color-secondary-300);\n --cer-prose-invert-links-hover:var(--cer-color-secondary-100);\n `.replace(/\\s+/g, ''),\n\n // prose-success: success color scheme (sets invert variables)\n 'prose-success': `\n --cer-prose-links:var(--cer-color-success-700);\n --cer-prose-links-hover:var(--cer-color-success-500);\n --cer-prose-invert-links:var(--cer-color-success-300);\n --cer-prose-invert-links-hover:var(--cer-color-success-100);\n `.replace(/\\s+/g, ''),\n\n // prose-warning: warning color scheme (sets invert variables)\n 'prose-warning': `\n --cer-prose-links:var(--cer-color-warning-700);\n --cer-prose-links-hover:var(--cer-color-warning-500);\n --cer-prose-invert-links:var(--cer-color-warning-300);\n --cer-prose-invert-links-hover:var(--cer-color-warning-100);\n `.replace(/\\s+/g, ''),\n\n // prose-error: error color scheme (sets invert variables)\n 'prose-error': `\n --cer-prose-links:var(--cer-color-error-700);\n --cer-prose-links-hover:var(--cer-color-error-500);\n --cer-prose-invert-links:var(--cer-color-error-300);\n --cer-prose-invert-links-hover:var(--cer-color-error-100);\n `.replace(/\\s+/g, ''),\n\n // prose-info: info color scheme (sets invert variables)\n 'prose-info': `\n --cer-prose-links:var(--cer-color-info-700);\n --cer-prose-links-hover:var(--cer-color-info-500);\n --cer-prose-invert-links:var(--cer-color-info-300);\n --cer-prose-invert-links-hover:var(--cer-color-info-100);\n `.replace(/\\s+/g, ''),\n });\n\n // --- Tailwind CSS 4 parity additions ---\n\n // flow-root display\n utils['flow-root'] = 'display:flow-root;';\n\n // Logical text alignment\n utils['text-start'] = 'text-align:start;';\n utils['text-end'] = 'text-align:end;';\n\n // Grid subgrid (broad browser support since 2023)\n utils['grid-cols-subgrid'] = 'grid-template-columns:subgrid;';\n utils['grid-rows-subgrid'] = 'grid-template-rows:subgrid;';\n\n // text-shadow utilities\n Object.assign(utils, {\n 'text-shadow-xs':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.05);text-shadow:0 1px 1px var(--cer-text-shadow-color, rgb(0 0 0 / 0.05));',\n 'text-shadow-sm':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.15);text-shadow:0 1px 2px var(--cer-text-shadow-color, rgb(0 0 0 / 0.15));',\n 'text-shadow':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.3);text-shadow:0 1px 3px var(--cer-text-shadow-color, rgb(0 0 0 / 0.3));',\n 'text-shadow-md':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.3);text-shadow:0 2px 4px var(--cer-text-shadow-color, rgb(0 0 0 / 0.3));',\n 'text-shadow-lg':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.3);text-shadow:0 4px 8px var(--cer-text-shadow-color, rgb(0 0 0 / 0.3));',\n 'text-shadow-xl':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.3);text-shadow:0 6px 16px var(--cer-text-shadow-color, rgb(0 0 0 / 0.3));',\n 'text-shadow-2xl':\n '--cer-text-shadow-color:rgb(0 0 0 / 0.3);text-shadow:0 8px 24px var(--cer-text-shadow-color, rgb(0 0 0 / 0.3));',\n 'text-shadow-none': 'text-shadow:none;',\n });\n\n // mask utilities\n Object.assign(utils, {\n 'mask-none': 'mask-image:none;',\n 'mask-linear-to-t': 'mask-image:linear-gradient(to top,black,transparent);',\n 'mask-linear-to-tr':\n 'mask-image:linear-gradient(to top right,black,transparent);',\n 'mask-linear-to-r':\n 'mask-image:linear-gradient(to right,black,transparent);',\n 'mask-linear-to-br':\n 'mask-image:linear-gradient(to bottom right,black,transparent);',\n 'mask-linear-to-b':\n 'mask-image:linear-gradient(to bottom,black,transparent);',\n 'mask-linear-to-bl':\n 'mask-image:linear-gradient(to bottom left,black,transparent);',\n 'mask-linear-to-l':\n 'mask-image:linear-gradient(to left,black,transparent);',\n 'mask-linear-to-tl':\n 'mask-image:linear-gradient(to top left,black,transparent);',\n 'mask-radial':\n 'mask-image:radial-gradient(ellipse at center,black,transparent);',\n 'mask-radial-from-center':\n 'mask-image:radial-gradient(ellipse at center,black 0%,transparent 100%);',\n 'mask-size-contain': 'mask-size:contain;',\n 'mask-size-cover': 'mask-size:cover;',\n 'mask-no-repeat': 'mask-repeat:no-repeat;',\n 'mask-repeat': 'mask-repeat:repeat;',\n 'mask-alpha': 'mask-mode:alpha;',\n 'mask-luminance': 'mask-mode:luminance;',\n });\n\n // field-sizing utilities (auto-resizing inputs/textareas)\n utils['field-sizing-content'] = 'field-sizing:content;';\n utils['field-sizing-fixed'] = 'field-sizing:fixed;';\n\n // color-scheme utilities\n Object.assign(utils, {\n 'scheme-light': 'color-scheme:light;',\n 'scheme-dark': 'color-scheme:dark;',\n 'scheme-both': 'color-scheme:light dark;',\n 'scheme-only-light': 'color-scheme:only light;',\n 'scheme-only-dark': 'color-scheme:only dark;',\n 'scheme-normal': 'color-scheme:normal;',\n });\n\n // font-stretch utilities\n Object.assign(utils, {\n 'font-stretch-ultra-condensed': 'font-stretch:ultra-condensed;',\n 'font-stretch-extra-condensed': 'font-stretch:extra-condensed;',\n 'font-stretch-condensed': 'font-stretch:condensed;',\n 'font-stretch-semi-condensed': 'font-stretch:semi-condensed;',\n 'font-stretch-normal': 'font-stretch:normal;',\n 'font-stretch-semi-expanded': 'font-stretch:semi-expanded;',\n 'font-stretch-expanded': 'font-stretch:expanded;',\n 'font-stretch-extra-expanded': 'font-stretch:extra-expanded;',\n 'font-stretch-ultra-expanded': 'font-stretch:ultra-expanded;',\n });\n\n // Extended cursor utilities (Tailwind 4)\n Object.assign(utils, {\n 'cursor-zoom-in': 'cursor:zoom-in;',\n 'cursor-zoom-out': 'cursor:zoom-out;',\n 'cursor-cell': 'cursor:cell;',\n 'cursor-crosshair': 'cursor:crosshair;',\n 'cursor-copy': 'cursor:copy;',\n 'cursor-alias': 'cursor:alias;',\n 'cursor-context-menu': 'cursor:context-menu;',\n 'cursor-vertical-text': 'cursor:vertical-text;',\n 'cursor-no-drop': 'cursor:no-drop;',\n 'cursor-progress': 'cursor:progress;',\n 'cursor-col-resize': 'cursor:col-resize;',\n 'cursor-row-resize': 'cursor:row-resize;',\n 'cursor-ew-resize': 'cursor:ew-resize;',\n 'cursor-ns-resize': 'cursor:ns-resize;',\n 'cursor-nesw-resize': 'cursor:nesw-resize;',\n 'cursor-nwse-resize': 'cursor:nwse-resize;',\n 'cursor-all-scroll': 'cursor:all-scroll;',\n });\n\n // Logical border utilities\n Object.assign(utils, {\n // border-inline-start / border-inline-end widths\n 'border-s': 'border-inline-start-width:1px;',\n 'border-e': 'border-inline-end-width:1px;',\n 'border-s-0': 'border-inline-start-width:0px;',\n 'border-e-0': 'border-inline-end-width:0px;',\n 'border-s-2': 'border-inline-start-width:2px;',\n 'border-e-2': 'border-inline-end-width:2px;',\n 'border-s-4': 'border-inline-start-width:4px;',\n 'border-e-4': 'border-inline-end-width:4px;',\n 'border-s-8': 'border-inline-start-width:8px;',\n 'border-e-8': 'border-inline-end-width:8px;',\n });\n\n // Logical border-radius utilities\n Object.assign(utils, {\n 'rounded-s-none': 'border-start-start-radius:0;border-end-start-radius:0;',\n 'rounded-e-none': 'border-start-end-radius:0;border-end-end-radius:0;',\n 'rounded-s-sm':\n 'border-start-start-radius:0.125rem;border-end-start-radius:0.125rem;',\n 'rounded-e-sm':\n 'border-start-end-radius:0.125rem;border-end-end-radius:0.125rem;',\n 'rounded-s':\n 'border-start-start-radius:0.25rem;border-end-start-radius:0.25rem;',\n 'rounded-e':\n 'border-start-end-radius:0.25rem;border-end-end-radius:0.25rem;',\n 'rounded-s-md':\n 'border-start-start-radius:0.375rem;border-end-start-radius:0.375rem;',\n 'rounded-e-md':\n 'border-start-end-radius:0.375rem;border-end-end-radius:0.375rem;',\n 'rounded-s-lg':\n 'border-start-start-radius:0.5rem;border-end-start-radius:0.5rem;',\n 'rounded-e-lg':\n 'border-start-end-radius:0.5rem;border-end-end-radius:0.5rem;',\n 'rounded-s-xl':\n 'border-start-start-radius:0.75rem;border-end-start-radius:0.75rem;',\n 'rounded-e-xl':\n 'border-start-end-radius:0.75rem;border-end-end-radius:0.75rem;',\n 'rounded-s-2xl':\n 'border-start-start-radius:1rem;border-end-start-radius:1rem;',\n 'rounded-e-2xl': 'border-start-end-radius:1rem;border-end-end-radius:1rem;',\n 'rounded-s-3xl':\n 'border-start-start-radius:1.5rem;border-end-start-radius:1.5rem;',\n 'rounded-e-3xl':\n 'border-start-end-radius:1.5rem;border-end-end-radius:1.5rem;',\n 'rounded-s-full':\n 'border-start-start-radius:9999px;border-end-start-radius:9999px;',\n 'rounded-e-full':\n 'border-start-end-radius:9999px;border-end-end-radius:9999px;',\n });\n\n return utils;\n};\n\n// Generate static utilities once\nexport const utilityMap: CSSMap = generateUtilities();\n\n/**\n * Parse prose base classes (prose, prose-sm, prose-lg, prose-xl, prose-2xl)\n * Registers prose sizes for the singleton prose stylesheet instead of returning CSS\n */\nexport function parseProseClass(className: string): string | null {\n // Quick pattern check before calling prose module\n if (!/^prose(?:-(sm|lg|xl|2xl))?$/.test(className)) return null;\n\n // Register this prose size with the singleton sheet\n registerProseSize(className);\n\n // Return empty string to indicate prose was detected but CSS will come from shared sheet\n return '';\n}\n\n/**\n * Parse prose element modifiers like prose-a:text-primary-600\n * Uses separate prose module for treeshaking\n */\nexport function parseProseElementModifier(className: string): string | null {\n // Quick pattern check before calling prose module\n if (!/^prose-([a-z0-9]+):(.+)$/.test(className)) {\n return null;\n }\n\n // Call imported function - tree-shaken if never called\n return generateProseElementModifier(\n className,\n utilityMap,\n parseSpacing,\n parseSpaceUtility,\n parseOpacity,\n parseColorWithOpacity,\n parseGradientColorStop,\n parseArbitrary,\n );\n}\n\n// Optimized parsing functions with better performance\nfunction insertPseudoBeforeCombinator(sel: string, pseudo: string): string {\n let depth = 0;\n for (let i = 0; i < sel.length; i++) {\n const ch = sel[i];\n if (ch === '[' || ch === '(') depth++;\n else if ((ch === ']' || ch === ')') && depth > 0) depth--;\n else if (\n depth === 0 &&\n (ch === '>' || ch === '+' || ch === '~' || ch === ' ')\n ) {\n return sel.slice(0, i) + pseudo + sel.slice(i);\n }\n }\n return sel + pseudo;\n}\n\nexport const selectorVariants: SelectorVariantMap = {\n before: (sel, body) => `${sel}::before{${body}}`,\n after: (sel, body) => `${sel}::after{${body}}`,\n hover: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':hover')}{${body}}`,\n focus: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':focus')}{${body}}`,\n active: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':active')}{${body}}`,\n disabled: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':disabled')}{${body}}`,\n visited: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':visited')}{${body}}`,\n checked: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':checked')}{${body}}`,\n first: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':first-child')}{${body}}`,\n last: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':last-child')}{${body}}`,\n odd: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':nth-child(odd)')}{${body}}`,\n even: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':nth-child(even)')}{${body}}`,\n 'focus-within': (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':focus-within')}{${body}}`,\n 'focus-visible': (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, ':focus-visible')}{${body}}`,\n 'group-hover': (sel, body) => `.group:hover ${sel}{${body}}`,\n 'group-focus': (sel, body) => `.group:focus ${sel}{${body}}`,\n 'group-active': (sel, body) => `.group:active ${sel}{${body}}`,\n 'group-disabled': (sel, body) => `.group:disabled ${sel}{${body}}`,\n 'peer-hover': (sel, body) => `.peer:hover ~ ${sel}{${body}}`,\n 'peer-focus': (sel, body) => `.peer:focus ~ ${sel}{${body}}`,\n 'peer-checked': (sel, body) => `.peer:checked ~ ${sel}{${body}}`,\n 'peer-disabled': (sel, body) => `.peer:disabled ~ ${sel}{${body}}`,\n 'dark-class': (sel, body) => `:host(.dark) ${sel}{${body}}`,\n rtl: (sel, body) => `[dir=rtl] ${sel}{${body}}`,\n ltr: (sel, body) => `[dir=ltr] ${sel}{${body}}`,\n // Pseudo-element variants\n placeholder: (sel, body) => `${sel}::placeholder{${body}}`,\n file: (sel, body) => `${sel}::file-selector-button{${body}}`,\n marker: (sel, body) => `${sel}::marker{${body}}`,\n selection: (sel, body) => `${sel}::selection{${body}}`,\n // State variants\n open: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, '[open]')}{${body}}`,\n inert: (sel, body) =>\n `${insertPseudoBeforeCombinator(sel, '[inert]')}{${body}}`,\n};\n\nexport const mediaVariants: MediaVariantMap = {\n sm: '(min-width:640px)',\n md: '(min-width:768px)',\n lg: '(min-width:1024px)',\n xl: '(min-width:1280px)',\n '2xl': '(min-width:1536px)',\n dark: '(prefers-color-scheme: dark)',\n 'motion-reduce': '(prefers-reduced-motion: reduce)',\n 'motion-safe': '(prefers-reduced-motion: no-preference)',\n print: 'print',\n 'forced-colors': '(forced-colors: active)',\n};\n\nexport const containerVariants: MediaVariantMap = {\n xs: '(min-width:20rem)',\n sm: '(min-width:24rem)',\n md: '(min-width:28rem)',\n lg: '(min-width:32rem)',\n xl: '(min-width:36rem)',\n '2xl': '(min-width:42rem)',\n '3xl': '(min-width:48rem)',\n '4xl': '(min-width:56rem)',\n '5xl': '(min-width:64rem)',\n '6xl': '(min-width:72rem)',\n '7xl': '(min-width:80rem)',\n};\n\nexport const responsiveOrder = [\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n 'motion-reduce',\n 'motion-safe',\n 'print',\n 'forced-colors',\n];\nexport const containerOrder = [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n '3xl',\n '4xl',\n '5xl',\n '6xl',\n '7xl',\n];\n\n// Optimized parsing functions\nexport function parseSpacing(className: string): string | null {\n const negative = className.startsWith('-');\n const raw = negative ? className.slice(1) : className;\n const lastDashIndex = raw.lastIndexOf('-');\n\n if (lastDashIndex === -1) return null;\n\n const key = raw.slice(0, lastDashIndex);\n const valueStr = raw.slice(lastDashIndex + 1);\n\n if (!spacingProps[key]) return null;\n\n // Handle fractions (e.g., w-1/2, h-2/3)\n if (valueStr.includes('/')) {\n const [numerator, denominator] = valueStr\n .split('/')\n .map((v) => parseFloat(v));\n if (\n Number.isNaN(numerator) ||\n Number.isNaN(denominator) ||\n denominator === 0\n ) {\n return null;\n }\n const percentage = (numerator / denominator) * 100;\n return spacingProps[key].map((prop) => `${prop}:${percentage}%;`).join('');\n }\n\n // Handle numeric values\n const num = parseFloat(valueStr);\n if (Number.isNaN(num)) return null;\n\n const sign = negative ? '-' : '';\n return spacingProps[key]\n .map((prop) => `${prop}:calc(${sign}${spacing} * ${num});`)\n .join('');\n}\n\nexport function parseSpaceUtility(className: string): string | null {\n const negative = className.startsWith('-');\n const raw = negative ? className.slice(1) : className;\n\n // Match space-x-{value} or space-y-{value}\n const match = raw.match(/^space-(x|y)-(.+)$/);\n if (!match) return null;\n\n const [, direction, valueStr] = match;\n const isHorizontal = direction === 'x';\n\n // Handle \"reverse\" modifier\n if (valueStr === 'reverse') {\n return isHorizontal\n ? '--cer-space-x-reverse:1;'\n : '--cer-space-y-reverse:1;';\n }\n\n // Handle fractions (e.g., space-x-1/2)\n if (valueStr.includes('/')) {\n const [numerator, denominator] = valueStr\n .split('/')\n .map((v) => parseFloat(v));\n if (\n Number.isNaN(numerator) ||\n Number.isNaN(denominator) ||\n denominator === 0\n ) {\n return null;\n }\n const percentage = (numerator / denominator) * 100;\n const sign = negative ? '-' : '';\n\n if (isHorizontal) {\n return `--cer-space-x-reverse:0;& > :not([hidden]) ~ :not([hidden]){margin-inline-start:calc(${sign}${percentage}% * calc(1 - var(--cer-space-x-reverse)));margin-inline-end:calc(${sign}${percentage}% * var(--cer-space-x-reverse));}`;\n } else {\n return `--cer-space-y-reverse:0;& > :not([hidden]) ~ :not([hidden]){margin-top:calc(${sign}${percentage}% * calc(1 - var(--cer-space-y-reverse)));margin-bottom:calc(${sign}${percentage}% * var(--cer-space-y-reverse));}`;\n }\n }\n\n // Handle numeric values\n const num = parseFloat(valueStr);\n if (Number.isNaN(num)) return null;\n\n const sign = negative ? '-' : '';\n const value = `calc(${sign}${spacing} * ${num})`;\n\n if (isHorizontal) {\n return `--cer-space-x-reverse:0;& > :not([hidden]) ~ :not([hidden]){margin-inline-start:calc(${value} * calc(1 - var(--cer-space-x-reverse)));margin-inline-end:calc(${value} * var(--cer-space-x-reverse));}`;\n } else {\n return `--cer-space-y-reverse:0;& > :not([hidden]) ~ :not([hidden]){margin-top:calc(${value} * calc(1 - var(--cer-space-y-reverse)));margin-bottom:calc(${value} * var(--cer-space-y-reverse));}`;\n }\n}\n\nexport function hexToRgb(hex: string): string {\n let clean = hex.replace('#', '');\n // Support 3-digit shorthand like #09f -> #0099ff\n if (clean.length === 3) {\n clean = clean\n .split('')\n .map((c) => c + c)\n .join('');\n }\n const bigint = parseInt(clean, 16);\n return `${(bigint >> 16) & 255} ${(bigint >> 8) & 255} ${bigint & 255}`;\n}\n\n// Optimized color parsing with lookup tables\nconst colorRegex =\n /^(text-shadow|bg|text|border|decoration|shadow|outline|caret|accent|fill|stroke|ring|divide)-([a-z]+)-?(\\d{2,3}|DEFAULT)?$/;\nconst propMap: Record<string, string> = {\n bg: 'background-color',\n decoration: 'text-decoration-color',\n text: 'color',\n border: 'border-color',\n outline: 'outline-color',\n caret: 'caret-color',\n accent: 'accent-color',\n fill: 'fill',\n stroke: 'stroke',\n};\n\nexport function parseColorClass(className: string): string | null {\n const match = colorRegex.exec(className);\n if (!match) return null;\n\n const [, type, colorName, shade = 'DEFAULT'] = match;\n const colorValue = _activeColors[colorName]?.[shade];\n if (!colorValue) return null;\n\n if (type === 'shadow') return `--cer-shadow-color:${colorValue};`;\n if (type === 'ring') return `--cer-ring-color:${colorValue};`;\n if (type === 'divide') return `border-color:${colorValue};`;\n if (type === 'text-shadow') return `--cer-text-shadow-color:${colorValue};`;\n const prop = propMap[type];\n return prop ? `${prop}:${colorValue};` : null;\n}\n\nexport function parseOpacityModifier(className: string): {\n base: string;\n opacity?: number;\n} {\n const slashIndex = className.indexOf('/');\n if (slashIndex === -1) return { base: className };\n\n const base = className.slice(0, slashIndex);\n const opacityStr = className.slice(slashIndex + 1);\n const opacity = parseInt(opacityStr, 10);\n\n return isNaN(opacity) || opacity < 0 || opacity > 100\n ? { base }\n : { base, opacity: opacity / 100 };\n}\n\nexport function parseColorWithOpacity(className: string): string | null {\n const { base, opacity } = parseOpacityModifier(className);\n\n const paletteRule = parseColorClass(base);\n if (paletteRule) {\n if (opacity !== undefined) {\n // If the palette uses a CSS variable (e.g. var(--cer-color-...[, fallback])),\n // prefer applying opacity via color-mix to ensure the variable path gets\n // the requested alpha (otherwise a defined custom property would override\n // a rgb(...) fallback and lose the alpha).\n if (paletteRule.includes('var(')) {\n const varMatch = /var\\([^)]*\\)/.exec(paletteRule);\n if (varMatch) {\n const varExpr = varMatch[0];\n const pct = opacity * 100;\n const mix = `color-mix(in srgb, ${varExpr} ${pct}%, rgba(0 0 0 / 0) ${100 - pct}%)`;\n // If the var(...) includes a hex fallback, extract it to emit a\n // direct rgb(...) fallback before the color-mix declaration. This\n // preserves existing tests that expect an rgb(...) result while\n // allowing the variable-based color to be used (with alpha) in\n // browsers that support color-mix.\n const fallbackHexMatch = /#([0-9a-f]{6}|[0-9a-f]{3})/i.exec(varExpr);\n const propMatch = /^([a-z-]+):/.exec(paletteRule);\n const prop = propMatch ? propMatch[1] : 'background-color';\n if (fallbackHexMatch) {\n const rgb = hexToRgb(fallbackHexMatch[0]);\n const rgbExpr = `rgb(${rgb} / ${opacity})`;\n // Replace the hex fallback inside the var(...) with the computed rgb(...) fallback\n const varWithRgbFallback = varExpr.replace(\n /#([0-9a-f]{6}|[0-9a-f]{3})/i,\n rgbExpr,\n );\n // Insert a special split token so the rule generator can emit the\n // fallback and the color-mix override as two separate wrapped rules.\n // This preserves existing tests that expect a single-declaration\n // wrapped block while still providing the color-mix runtime fix.\n return `${prop}:${varWithRgbFallback};__CE_COLOR_MIX_SPLIT__${prop}:${mix};`;\n }\n return `${prop}:${mix};`;\n }\n }\n\n // Otherwise, try to find a hex literal (6- or 3-digit) and convert it to rgb(... / alpha)\n const match = /#([0-9a-f]{6}|[0-9a-f]{3})/i.exec(paletteRule);\n if (match) {\n const rgb = hexToRgb(match[0]);\n return paletteRule.replace(\n /#([0-9a-f]{6}|[0-9a-f]{3})/i,\n `rgb(${rgb} / ${opacity})`,\n );\n }\n }\n\n return paletteRule;\n }\n\n const arbitraryRule = parseArbitrary(base);\n if (arbitraryRule && opacity !== undefined) {\n // Prefer handling CSS variables first so a defined custom property gets\n // the requested alpha via color-mix (instead of replacing a fallback hex\n // and leaving the var(...) wrapper intact which would override the alpha).\n if (arbitraryRule.includes('var(')) {\n const varMatch = /var\\([^)]*\\)/.exec(arbitraryRule);\n if (varMatch) {\n const varExpr = varMatch[0];\n const pct = opacity * 100;\n const mix = `color-mix(in srgb, ${varExpr} ${pct}%, rgba(0 0 0 / 0) ${100 - pct}%)`;\n\n // If the var(...) includes a hex fallback, replace that fallback\n // with an rgb(... / alpha) in a fallback declaration, and emit a\n // split-token so the generator will emit the fallback and the\n // color-mix override as separate wrapped rules (preserving exact\n // test expectations while providing the runtime color-mix fix).\n const fallbackHexMatch = /#([0-9a-f]{6}|[0-9a-f]{3})/i.exec(varExpr);\n const propMatch = /^([a-z-]+):/.exec(arbitraryRule);\n const prop = propMatch ? propMatch[1] : null;\n if (fallbackHexMatch && prop) {\n const rgb = hexToRgb(fallbackHexMatch[0]);\n const rgbExpr = `rgb(${rgb} / ${opacity})`;\n const varWithRgbFallback = varExpr.replace(\n /#([0-9a-f]{6}|[0-9a-f]{3})/i,\n rgbExpr,\n );\n return `${prop}:${varWithRgbFallback};__CE_COLOR_MIX_SPLIT__${prop}:${mix};`;\n }\n\n return arbitraryRule.replace(varExpr, mix);\n }\n }\n\n // Support 6- and 3-digit hexes in arbitrary values\n const match = /#([0-9a-f]{6}|[0-9a-f]{3})/i.exec(arbitraryRule);\n if (match) {\n const rgb = hexToRgb(match[0]);\n return arbitraryRule.replace(\n /#([0-9a-f]{6}|[0-9a-f]{3})/i,\n `rgb(${rgb} / ${opacity})`,\n );\n }\n }\n\n return arbitraryRule;\n}\n\n/**\n * Parse gradient color stop utilities like from-error-500, to-primary-600, via-success-400\n */\nexport function parseGradientColorStop(className: string): string | null {\n const match = /^(from|to|via)-([a-z]+)-?(\\d{2,3}|DEFAULT)?$/.exec(className);\n if (!match) return null;\n\n const [, position, colorName, shade = 'DEFAULT'] = match;\n const colorValue = _activeColors[colorName]?.[shade];\n if (!colorValue) return null;\n\n switch (position) {\n case 'from':\n return `--cer-gradient-from:${colorValue} var(--cer-gradient-from-position);--cer-gradient-to:rgb(255 255 255 / 0) var(--cer-gradient-to-position);--cer-gradient-stops:var(--cer-gradient-from), var(--cer-gradient-to);`;\n case 'to':\n return `--cer-gradient-to:${colorValue} var(--cer-gradient-to-position);`;\n case 'via':\n return `--cer-gradient-to:rgb(255 255 255 / 0) var(--cer-gradient-to-position);--cer-gradient-stops:var(--cer-gradient-from), ${colorValue} var(--cer-gradient-via-position), var(--cer-gradient-to);`;\n default:\n return null;\n }\n}\n\nexport function parseOpacity(className: string): string | null {\n const match = /^opacity-(\\d{1,3})$/.exec(className);\n if (!match) return null;\n const value = parseInt(match[1], 10);\n return value < 0 || value > 100 ? null : `opacity:${value / 100};`;\n}\n\n// Enhanced arbitrary value parser\nexport function parseArbitrary(className: string): string | null {\n // [prop:value] format\n if (\n className.startsWith('[') &&\n className.endsWith(']') &&\n !className.includes('-[')\n ) {\n const inner = className.slice(1, -1).trim();\n const colonIndex = inner.indexOf(':');\n if (colonIndex === -1) return null;\n\n const prop = inner.slice(0, colonIndex).trim();\n let value = inner.slice(colonIndex + 1).trim();\n\n // Only allow valid CSS property names\n if (!/^[a-zA-Z][a-zA-Z0-9-]*$/.test(prop)) return null;\n\n // Convert underscores to spaces for multiple values\n value = value.replace(/_/g, ' ');\n value = value.replace(/url\\('\\s*([^']*?)\\s*'\\)/g, 'url(\"$1\")');\n value = value.replace(/^'([^']*)'$/g, '\"$1\"');\n return `${prop}:${value};`;\n }\n\n // prop-[value] format\n const bracketStart = className.indexOf('-[');\n if (bracketStart <= 0 || !className.endsWith(']')) return null;\n\n const prop = className.slice(0, bracketStart);\n const value = className.slice(bracketStart + 2, -1).replace(/_/g, ' ');\n\n // Enhanced property mappings\n const propMappings: Record<string, string> = {\n bg: 'background-color',\n shadow: 'box-shadow',\n p: 'padding',\n px: 'padding-inline',\n py: 'padding-block',\n m: 'margin',\n mx: 'margin-inline',\n my: 'margin-block',\n w: 'width',\n h: 'height',\n 'min-w': 'min-width',\n 'max-w': 'max-width',\n 'min-h': 'min-height',\n 'max-h': 'max-height',\n 'border-t': 'border-top-width',\n 'border-b': 'border-bottom-width',\n 'border-l': 'border-left-width',\n 'border-r': 'border-right-width',\n 'border-x': 'border-inline-width',\n 'border-y': 'border-block-width',\n 'grid-cols': 'grid-template-columns',\n 'grid-rows': 'grid-template-rows',\n transition: 'transition-property',\n ease: 'transition-timing-function',\n delay: 'transition-delay',\n duration: 'transition-duration',\n list: 'list-style',\n break: 'word-break',\n flex: 'flex-direction',\n items: 'align-items',\n justify: 'justify-content',\n content: 'content',\n self: 'align-self',\n basis: 'flex-basis',\n tracking: 'letter-spacing',\n leading: 'line-height',\n z: 'z-index',\n opacity: 'opacity',\n };\n\n // Special handling for text properties\n if (prop === 'text') {\n // If value looks like a size (ends with px, rem, em, etc.), treat as font-size\n if (/^\\d*\\.?\\d+(px|rem|em|%|vh|vw|ch|ex)$/.test(value)) {\n return `font-size:${value};`;\n }\n // Otherwise treat as color\n return `color:${value};`;\n }\n\n if (prop === 'rotate') return `transform:rotate(${value});`;\n if (prop === 'scale') return `transform:scale(${value});`;\n if (prop === 'translate-x') return `transform:translateX(${value});`;\n if (prop === 'translate-y') return `transform:translateY(${value});`;\n\n const cssProp = propMappings[prop] ?? prop.replace(/_/g, '-');\n return cssProp && value ? `${cssProp}:${value};` : null;\n}\n\nexport function parseArbitraryVariant(token: string): string | null {\n if (token.startsWith('[') && token.endsWith(']')) {\n const inner = token.slice(1, -1);\n return inner.includes('&') ? inner : token;\n }\n\n const bracketStart = token.indexOf('-[');\n if (bracketStart > 0 && token.endsWith(']')) {\n const inner = token.slice(bracketStart + 2, -1).replace(/_/g, '-');\n return inner.includes('&') ? inner : token.replace(/_/g, '-');\n }\n\n return null;\n}\n\n// Optimized HTML class extraction\nexport function extractClassesFromHTML(html: string): string[] {\n const classList: string[] = [];\n let match: RegExpExecArray | null;\n // Reset the shared regex before use (required because of the `g` flag)\n _classAttrRegex.lastIndex = 0;\n\n while ((match = _classAttrRegex.exec(html))) {\n const tokens = match[2].split(/\\s+/).filter(Boolean);\n if (tokens.length) classList.push(...tokens);\n }\n\n return classList;\n}\n\n// Module-level regex for extracting class attributes from HTML strings.\n// Defined here so the regex object is compiled once, not on every call to\n// extractClassesFromHTML(). lastIndex must be reset before each use.\nconst _classAttrRegex = /class\\s*=\\s*(['\"])([\\s\\S]*?)\\1/g;\n\n// Module-level lookup tables used by the sort-by-breakpoint comparator.\n// Defined here so they are allocated once, not recreated on every comparison.\nconst _responsiveSizePx: Record<string, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\nconst _containerSizePx: Record<string, number> = {\n xs: 320,\n sm: 384,\n md: 448,\n lg: 512,\n xl: 576,\n '2xl': 672,\n '3xl': 768,\n '4xl': 896,\n '5xl': 1024,\n '6xl': 1152,\n '7xl': 1280,\n};\n\nfunction _getResponsivePixels(rule: string): number {\n for (const [key, px] of Object.entries(_responsiveSizePx)) {\n if (rule.includes(`@media ${mediaVariants[key]}`)) return px;\n }\n return -1;\n}\n\nfunction _getContainerPixels(rule: string): number {\n for (const [key, px] of Object.entries(_containerSizePx)) {\n if (rule.includes(`@container ${containerVariants[key]}`)) return px;\n }\n if (rule.includes('@container (min-width:')) {\n const match = /@container \\(min-width:(\\d+(?:\\.\\d+)?)(px|rem|em)/.exec(\n rule,\n );\n if (match) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n return unit === 'rem' || unit === 'em' ? value * 16 : value;\n }\n }\n return -1;\n}\n\n// Enhanced JIT CSS generation with better performance\nexport const jitCssCache = new Map<string, string>();\nexport const JIT_CSS_THROTTLE_MS = 16;\nconst MAX_CACHE_SIZE = 1000;\n\n// HMR: Clear all caches on hot update to prevent stale CSS\n// Wrapped in function to avoid side effects at module load time\nif (typeof import.meta !== 'undefined' && import.meta.hot) {\n import.meta.hot.dispose(() => {\n jitCssCache.clear();\n detectedProseSizes.clear();\n proseSheet = null;\n proseCSSCache = '';\n _resetBaseResetSheet();\n _bridgeRegistered = false;\n });\n\n // Also clear on accept to force regeneration\n import.meta.hot.accept(() => {\n jitCssCache.clear();\n detectedProseSizes.clear();\n proseSheet = null;\n proseCSSCache = '';\n });\n}\n\nexport function jitCSS(html: string): string {\n // Extract classes first so we can derive a stable, compact cache key.\n const classes = extractClassesFromHTML(html);\n if (!classes.length) return '';\n\n // Use sorted unique class names as cache key instead of the full HTML string.\n // This way, non-class content changes (text nodes, ARIA attributes, data\n // attributes) don't cause cache misses when the set of utility classes is\n // identical — a significant performance win for reactive components.\n const seen = new Set(classes);\n const cacheKey = Array.from(seen).sort().join('\\x00');\n const cached = jitCssCache.get(cacheKey);\n if (cached !== undefined) {\n // Maintain LRU order: delete + re-insert moves this entry to the end of\n // the Map so the eviction path (which removes from the front) always\n // evicts the least-recently-used entry.\n jitCssCache.delete(cacheKey);\n jitCssCache.set(cacheKey, cached);\n return cached;\n }\n // Bucket layout:\n // 0 — base (no variants)\n // 1 — pseudo / structural variants (hover:, focus:, group-*, etc.)\n // 2 — responsive / container queries without dark (sm:, @lg:, …)\n // 3 — dark: only (@media prefers-color-scheme: dark, no breakpoint)\n // 4 — dark: combined with responsive / container (dark:sm:, dark:@lg:, …)\n // Keeping dark-only in its own bucket (3) ensures it always comes after all\n // responsive rules (bucket 2) so dark-mode overrides are deterministic\n // regardless of the order classes appear in the HTML.\n const buckets: string[][] = [[], [], [], [], []];\n const ruleCache: Record<string, string | null> = {};\n\n const generateRuleCached = (\n cls: string,\n stripDark = false,\n ): string | null => {\n const cacheKey = stripDark ? `dark|${cls}` : cls;\n if (cacheKey in ruleCache) return ruleCache[cacheKey];\n const result = generateRule(cls, stripDark);\n ruleCache[cacheKey] = result;\n return result;\n };\n\n const classify = (variants: string[]): number => {\n const hasResponsive = variants.some((t) => responsiveOrder.includes(t));\n const hasContainer = variants.some(\n (t) =>\n t.startsWith('@') &&\n (containerOrder.includes(t.slice(1)) || t.match(/^@\\[.+\\]$/)),\n );\n const hasDark = variants.includes('dark');\n if (!variants.length) return 0;\n if (!hasResponsive && !hasDark && !hasContainer) return 1;\n if (hasDark && (hasResponsive || hasContainer)) return 4;\n if (hasDark) return 3; // dark-only — comes after responsive, before dark+responsive\n return 2;\n };\n\n const splitVariants = (input: string): string[] => {\n const parts: string[] = [];\n let current = '';\n let depth = 0;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i];\n if (ch === '[' || ch === '(') depth++;\n else if (ch === ']' || ch === ')') depth--;\n\n if (ch === ':' && depth === 0) {\n parts.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current) parts.push(current);\n return parts;\n };\n\n const pseudoMap: Record<string, string> = {\n hover: ':hover',\n focus: ':focus',\n active: ':active',\n visited: ':visited',\n disabled: ':disabled',\n checked: ':checked',\n first: ':first-child',\n last: ':last-child',\n odd: ':nth-child(odd)',\n even: ':nth-child(even)',\n 'focus-within': ':focus-within',\n 'focus-visible': ':focus-visible',\n };\n\n const generateRule = (cls: string, stripDark = false): string | null => {\n const parts = splitVariants(cls);\n let basePart = '';\n let important = false;\n\n // Find the base utility. Accept '!' as an important marker either\n // before or after the base token (e.g. `!text-xl` or `text-xl!`).\n for (const part of parts) {\n let checkPart = part;\n // Leading or trailing '!' marks importance\n if (checkPart.startsWith('!')) {\n important = true;\n checkPart = checkPart.slice(1);\n }\n if (checkPart.endsWith('!')) {\n important = true;\n checkPart = checkPart.slice(0, -1);\n }\n\n // Skip tokens that are dynamic variant prefixes — they are NOT base\n // utilities and must not be consumed by parseArbitrary() (which otherwise\n // treats e.g. `data-[key]` as the CSS rule `data:key;`).\n if (\n (checkPart.startsWith('data-[') && checkPart.endsWith(']')) ||\n (checkPart.startsWith('has-[') && checkPart.endsWith(']')) ||\n (checkPart.startsWith('not-[') && checkPart.endsWith(']')) ||\n (checkPart.startsWith('in-[') && checkPart.endsWith(']')) ||\n (checkPart.startsWith('supports-[') && checkPart.endsWith(']')) ||\n checkPart === 'starting'\n ) {\n continue;\n }\n\n if (\n utilityMap[checkPart] ||\n parseSpacing(checkPart) ||\n parseSpaceUtility(checkPart) ||\n parseOpacity(checkPart) ||\n parseColorWithOpacity(checkPart) ||\n parseGradientColorStop(checkPart) ||\n parseArbitrary(checkPart)\n ) {\n basePart = part;\n break;\n }\n }\n\n if (!basePart) return null;\n\n // Prose element modifiers are handled separately by parseProseElementModifier\n // This is checked in parseClassName() before reaching here\n\n const cleanBase = basePart.replace(/^!/, '').replace(/!$/, '');\n const baseRule =\n utilityMap[cleanBase] ??\n parseSpacing(cleanBase) ??\n parseSpaceUtility(cleanBase) ??\n parseOpacity(cleanBase) ??\n parseColorWithOpacity(cleanBase) ??\n parseGradientColorStop(cleanBase) ??\n parseArbitrary(cleanBase);\n\n if (!baseRule) return null;\n\n const baseIndex = parts.indexOf(basePart);\n let variants = baseIndex >= 0 ? parts.slice(0, baseIndex) : [];\n if (stripDark) variants = variants.filter((t) => t !== 'dark');\n\n // Build escaped class name from the original class token so any\n // leading or trailing '!' remains in the selector (escaped).\n const escapedClass = escapeClassName(cls);\n const body = important ? baseRule.replace(/;/g, ' !important;') : baseRule;\n const SUBJECT = '__SUBJECT__';\n let selector = SUBJECT;\n\n // Handle structural variants\n const structural: string[] = [];\n for (const token of variants) {\n if (token.startsWith('group-')) {\n selector = `.group:${token.slice(6)} ${selector}`;\n structural.push(token);\n } else if (token.startsWith('peer-')) {\n selector = selector.replace(\n SUBJECT,\n `.peer:${token.slice(5)}~${SUBJECT}`,\n );\n structural.push(token);\n }\n }\n variants = variants.filter((t) => !structural.includes(t));\n\n // Handle pseudos and arbitrary variants\n const subjectPseudos: string[] = [];\n const innerPseudos: string[] = [];\n let wrapperVariant: string | null = null;\n let hasStartingStyle = false;\n const supportsTokens: string[] = [];\n\n for (const token of variants) {\n if (\n token === 'dark' ||\n responsiveOrder.includes(token) ||\n (token.startsWith('@') &&\n (containerOrder.includes(token.slice(1)) || token.match(/^@\\[.+\\]$/)))\n )\n continue;\n\n // Handle data-[*]: attribute variant → [data-key] or [data-key=\"value\"]\n if (token.startsWith('data-[') && token.endsWith(']')) {\n const inner = token.slice(6, -1);\n const attrSel = inner.includes('=')\n ? '[data-' + inner.replace(/^([^=]+)=(.+)$/, '$1=\"$2\"') + ']'\n : '[data-' + inner + ']';\n subjectPseudos.push(attrSel);\n continue;\n }\n\n // Handle has-[*]: pseudo-class variant → :has(...)\n if (token.startsWith('has-[') && token.endsWith(']')) {\n const inner = token.slice(5, -1).replace(/_/g, ' ');\n subjectPseudos.push(`:has(${inner})`);\n continue;\n }\n\n // Handle not-[*]: pseudo-class variant → :not(...)\n if (token.startsWith('not-[') && token.endsWith(']')) {\n const inner = token.slice(5, -1).replace(/_/g, ' ');\n subjectPseudos.push(`:not(${inner})`);\n continue;\n }\n\n // Handle in-[*]: ancestor variant → :is(selector) .element\n if (token.startsWith('in-[') && token.endsWith(']')) {\n const inner = token.slice(4, -1).replace(/_/g, ' ');\n selector = ':is(' + inner + ') ' + selector;\n continue;\n }\n\n // Handle starting: → @starting-style{} wrapper\n if (token === 'starting') {\n hasStartingStyle = true;\n continue;\n }\n\n // Handle supports-[*]: → @supports(...){} wrapper\n if (token.startsWith('supports-[') && token.endsWith(']')) {\n supportsTokens.push(token);\n continue;\n }\n\n const variantSelector = parseArbitraryVariant(token);\n if (variantSelector) {\n wrapperVariant = variantSelector;\n continue;\n }\n\n const pseudo = pseudoMap[token];\n if (pseudo) {\n if (!wrapperVariant) {\n subjectPseudos.push(pseudo);\n } else {\n innerPseudos.push(pseudo);\n }\n continue;\n }\n\n const fn = selectorVariants[token];\n if (typeof fn === 'function') {\n selector = fn(selector, body).split('{')[0];\n }\n }\n\n const subjectPseudoStr = subjectPseudos.join('');\n const innerPseudoStr = innerPseudos.join('');\n\n // Helper function to insert inner pseudos into post part\n function insertPseudosIntoPost(post: string, pseudos: string): string {\n if (!pseudos) return post;\n let depthSquare = 0;\n let depthParen = 0;\n\n // If post starts with a combinator, insert pseudos after the first simple selector\n if (\n post.length &&\n (post[0] === '>' ||\n post[0] === '+' ||\n post[0] === '~' ||\n post[0] === ' ')\n ) {\n let i = 1;\n // skip initial whitespace\n while (i < post.length && post[i] === ' ') i++;\n for (; i < post.length; i++) {\n const ch = post[i];\n if (ch === '[') depthSquare++;\n else if (ch === ']' && depthSquare > 0) depthSquare--;\n else if (ch === '(') depthParen++;\n else if (ch === ')' && depthParen > 0) depthParen--;\n if (\n depthSquare === 0 &&\n depthParen === 0 &&\n (post[i] === '>' ||\n post[i] === '+' ||\n post[i] === '~' ||\n post[i] === ' ')\n ) {\n return post.slice(0, i) + pseudos + post.slice(i);\n }\n }\n return post + pseudos;\n }\n\n for (let i = 0; i < post.length; i++) {\n const ch = post[i];\n if (ch === '[') depthSquare++;\n else if (ch === ']' && depthSquare > 0) depthSquare--;\n else if (ch === '(') depthParen++;\n else if (ch === ')' && depthParen > 0) depthParen--;\n if (\n depthSquare === 0 &&\n depthParen === 0 &&\n (ch === '>' || ch === '+' || ch === '~' || ch === ' ')\n ) {\n return post.slice(0, i) + pseudos + post.slice(i);\n }\n }\n return post + pseudos;\n }\n\n if (wrapperVariant) {\n if (wrapperVariant.includes('&')) {\n const idx = wrapperVariant.indexOf('&');\n const pre = wrapperVariant.slice(0, idx);\n const post = wrapperVariant.slice(idx + 1);\n const subjectWithPseudos = SUBJECT + subjectPseudoStr;\n\n if (subjectPseudos.length === 0) {\n // attach inner pseudos to the subject\n selector = selector.replace(\n SUBJECT,\n pre + subjectWithPseudos + innerPseudoStr + post,\n );\n } else {\n // insert inner pseudos into post after its first simple selector\n const postWithInner = insertPseudosIntoPost(post, innerPseudoStr);\n selector = selector.replace(\n SUBJECT,\n pre + subjectWithPseudos + postWithInner,\n );\n }\n } else {\n selector = selector.replace(\n SUBJECT,\n `${wrapperVariant}${SUBJECT + subjectPseudoStr}`,\n );\n if (innerPseudoStr) {\n selector = selector.replace(SUBJECT, `${SUBJECT}${innerPseudoStr}`);\n }\n }\n } else {\n selector = selector.replace(\n SUBJECT,\n SUBJECT + subjectPseudoStr + innerPseudoStr,\n );\n }\n\n selector = selector.replace(new RegExp(SUBJECT, 'g'), escapedClass);\n\n // Support a special split token that allows parseColorWithOpacity to\n // request emitting two separate rules for the same selector. This is\n // used to emit a var(..., rgb(...)) fallback in one rule while emitting\n // a color-mix(...) rule separately so tests that assert an exact single\n // declaration still pass while runtime gets the color-mix override.\n const DUAL_TOKEN = '__CE_COLOR_MIX_SPLIT__';\n\n const rulesArray: string[] = body.includes(DUAL_TOKEN)\n ? body.split(DUAL_TOKEN).map((part) => `${selector}{${part}}`)\n : [`${selector}{${body}}`];\n\n // Apply media queries and container queries\n const responsiveTokens = variants.filter((t) =>\n responsiveOrder.includes(t),\n );\n const containerTokens = variants.filter(\n (t) =>\n t.startsWith('@') &&\n (containerOrder.includes(t.slice(1)) || t.match(/^@\\[.+\\]$/)),\n );\n const lastResponsive = responsiveTokens.length\n ? responsiveTokens[responsiveTokens.length - 1]\n : null;\n const lastContainer = containerTokens.length\n ? containerTokens[containerTokens.length - 1]\n : null;\n const hasDark = variants.includes('dark');\n\n // Respect disableVariants option — skip rules that use disabled variant groups\n const _disabledGroups = _globalJITCSSOptions.disableVariants ?? [];\n if (_disabledGroups.length > 0) {\n if (_disabledGroups.includes('dark') && hasDark) return null;\n if (_disabledGroups.includes('responsive') && responsiveTokens.length > 0)\n return null;\n if (_disabledGroups.includes('container') && containerTokens.length > 0)\n return null;\n if (\n _disabledGroups.includes('motion') &&\n variants.some((v) => v === 'motion-reduce' || v === 'motion-safe')\n )\n return null;\n if (_disabledGroups.includes('print') && variants.includes('print'))\n return null;\n }\n\n // Handle media queries and container queries\n let mediaQuery = '';\n let containerQuery = '';\n\n // Build media query\n if (hasDark && lastResponsive) {\n mediaQuery = `@media (prefers-color-scheme: dark) and ${mediaVariants[lastResponsive]}`;\n } else if (hasDark) {\n mediaQuery = `@media (prefers-color-scheme: dark)`;\n } else if (lastResponsive) {\n mediaQuery = `@media ${mediaVariants[lastResponsive]}`;\n }\n\n // Build container query\n if (lastContainer) {\n if (lastContainer.startsWith('@[') && lastContainer.endsWith(']')) {\n // Arbitrary container query like @[300px]\n const value = lastContainer.slice(2, -1);\n // Validate that the value is a valid CSS length (px, rem, em, %, etc.)\n if (\n !/^-?\\d*\\.?\\d+(px|rem|em|%|vh|vw|ch|ex|cm|mm|in|pt|pc)$/.test(value)\n ) {\n return null; // Invalid arbitrary container query value\n }\n containerQuery = `@container (min-width:${value})`;\n } else {\n // Named container query like @md\n const containerKey = lastContainer.slice(1);\n const queryValue =\n containerVariants[containerKey] || `(min-width:${containerKey})`;\n containerQuery = `@container ${queryValue}`;\n }\n }\n\n // Build @supports query from supportsTokens\n let supportsQuery = '';\n if (supportsTokens.length > 0) {\n const lastSupports = supportsTokens[supportsTokens.length - 1];\n const supportsValue = lastSupports.slice(10, -1).replace(/_/g, ' ');\n supportsQuery = `@supports ${\n supportsValue.startsWith('not(') ||\n supportsValue.startsWith('selector(') ||\n supportsValue.startsWith('(')\n ? supportsValue\n : `(${supportsValue})`\n }`;\n }\n\n // Combine queries by wrapping each generated rule separately. If we\n // produced multiple rules (rulesArray), wrap each one and concatenate\n // them so tests can match the expected single-declaration block while\n // we still emit a second, overriding block for color-mix.\n const wrapRule = (r: string): string => {\n let rule = r;\n if (hasStartingStyle) rule = `@starting-style{${rule}}`;\n if (supportsQuery) rule = `${supportsQuery}{${rule}}`;\n if (mediaQuery && containerQuery)\n return `${mediaQuery}${containerQuery}{${rule}}`;\n if (mediaQuery) return `${mediaQuery}{${rule}}`;\n if (containerQuery) return `${containerQuery}{${rule}}`;\n return rule;\n };\n\n return rulesArray.map(wrapRule).join('');\n };\n\n // Process classes\n for (const cls of seen) {\n // Check for prose base classes first (prose, prose-sm, prose-lg, prose-xl, prose-2xl) - before splitting\n const parts = splitVariants(cls);\n const variants = parts.slice(0, -1);\n const base = parts[parts.length - 1];\n const proseDetected = parseProseClass(base);\n if (proseDetected !== null) {\n // Prose base class detected\n if (variants.length === 0) {\n // No variants - register with singleton prose sheet\n // Add placeholder to mark class as processed but no actual CSS\n buckets[0].push(`${escapeClassName(cls)}{}`);\n } else {\n // Has variants (e.g., 2xl:prose-lg, dark:prose)\n // Must generate inline CSS with variants applied since singleton sheet doesn't support variants\n const proseCSS = generateProseCSS(base);\n if (!proseCSS) continue;\n\n const escapedClass = escapeClassName(cls);\n\n // Replace the base class selector with the full variant class\n // e.g., replace \".prose-lg\" with \"[class~=\"2xl:prose-lg\"]\"\n const baseClassEscaped = escapeClassName(base);\n let variantCSS = proseCSS.replace(\n new RegExp(escapeRegExp(baseClassEscaped), 'g'),\n escapedClass,\n );\n\n // Apply responsive variants (wrap in media query)\n const responsiveVariants = variants.filter((v) =>\n responsiveOrder.includes(v),\n );\n if (responsiveVariants.length > 0) {\n const lastResponsive =\n responsiveVariants[responsiveVariants.length - 1];\n const mediaQuery = `@media ${mediaVariants[lastResponsive]}`;\n variantCSS = `${mediaQuery}{${variantCSS}}`;\n }\n\n // Apply dark mode\n if (variants.includes('dark')) {\n variantCSS = `@media (prefers-color-scheme: dark){${variantCSS}}`;\n }\n\n const bucketNum = classify(variants);\n buckets[bucketNum].push(variantCSS);\n }\n continue;\n }\n\n // Check for prose element modifiers (prose-a:text-blue-600, hover:prose-a:text-blue-600)\n // Detect by finding 'prose-{element}' pattern in any part\n let proseModIndex = -1;\n for (let i = parts.length - 1; i >= 0; i--) {\n const potentialProseMod = parts.slice(i).join(':');\n if (parseProseElementModifier(potentialProseMod)) {\n proseModIndex = i;\n break;\n }\n }\n\n if (proseModIndex >= 0) {\n // Found prose element modifier - generate CSS with variants applied\n const proseModBase = parts.slice(proseModIndex).join(':');\n const variants = parts.slice(0, proseModIndex);\n\n // Generate the base prose CSS (without variants)\n const baseProseCSS = parseProseElementModifier(proseModBase);\n\n if (!baseProseCSS) continue;\n\n // If no variants, use the generated CSS as-is without modification\n if (variants.length === 0) {\n buckets[0].push(baseProseCSS);\n continue;\n }\n\n // Has variants - replace the base class selector with the full escaped class name\n const fullEscaped = cssEscape(cls);\n const baseEscaped = cssEscape(proseModBase);\n\n // Replace all occurrences of the base class with the full class\n // e.g., \".prose-h1\\:text-4xl\" → \".md\\:prose-h1\\:text-4xl\"\n const fullProseCSS = baseProseCSS.replace(\n new RegExp(\n `\\\\.${baseEscaped.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}`,\n 'g',\n ),\n `.${fullEscaped}`,\n );\n\n // Extract each rule and apply media/pseudo variants\n const ruleRegex = /(.+?)\\s+(.+?)\\{([^}]+)\\}/g;\n const matches = [...fullProseCSS.matchAll(ruleRegex)];\n\n if (matches.length === 0) {\n // Can't parse, use as-is\n buckets[0].push(baseProseCSS);\n continue;\n }\n\n const bucketNum = classify(variants);\n\n // Define pseudo map inline for prose variant handling\n const prosePseudoMap: Record<string, string> = {\n hover: ':hover',\n focus: ':focus',\n active: ':active',\n visited: ':visited',\n disabled: ':disabled',\n checked: ':checked',\n first: ':first-child',\n last: ':last-child',\n odd: ':nth-child(odd)',\n even: ':nth-child(even)',\n 'focus-within': ':focus-within',\n 'focus-visible': ':focus-visible',\n };\n\n // Separate variants by type (once for all rules)\n const structuralVariants: string[] = [];\n const pseudoVariants: string[] = [];\n const arbitraryVariants: string[] = [];\n const responsiveVariants: string[] = [];\n const containerVariants: string[] = [];\n let hasDark = false;\n\n for (const v of variants) {\n if (v.startsWith('group-')) {\n structuralVariants.push(v);\n } else if (v.startsWith('peer-')) {\n structuralVariants.push(v);\n } else if (v === 'dark' || v === 'dark-class') {\n hasDark = true;\n } else if (responsiveOrder.includes(v)) {\n responsiveVariants.push(v);\n } else if (\n v.startsWith('@') &&\n (containerOrder.includes(v.slice(1)) || v.match(/^@\\[.+\\]$/))\n ) {\n containerVariants.push(v);\n } else if (v.startsWith('[') && v.endsWith(']')) {\n arbitraryVariants.push(v);\n } else if (prosePseudoMap[v] || selectorVariants[v]) {\n pseudoVariants.push(v);\n }\n }\n\n // Process each rule with variants\n for (const match of matches) {\n const [, baseClassSelector, elementSelector, body] = match;\n\n // Apply variants to the element selector\n let finalSelector = `${baseClassSelector} ${elementSelector}`;\n\n // Apply structural variants (group, peer)\n for (const v of structuralVariants) {\n if (v.startsWith('group-')) {\n const pseudo = v.slice(6);\n const pseudoSelector = prosePseudoMap[pseudo] || `:${pseudo}`;\n finalSelector = `.group${pseudoSelector} ${finalSelector}`;\n } else if (v.startsWith('peer-')) {\n const pseudo = v.slice(5);\n const pseudoSelector = prosePseudoMap[pseudo] || `:${pseudo}`;\n finalSelector = `.peer${pseudoSelector}~${finalSelector}`;\n }\n }\n\n // Apply pseudo-class variants (append to element, not class)\n if (pseudoVariants.length > 0) {\n const pseudoStr = pseudoVariants\n .map((v) => prosePseudoMap[v] || `:${v}`)\n .join('');\n // Append pseudos to the end of the element selector\n // .prose-a\\:text-error-600 a:not(...) → .prose-a\\:text-error-600 a:not(...):hover\n finalSelector = `${finalSelector}${pseudoStr}`;\n }\n\n // Apply arbitrary variants\n for (const v of arbitraryVariants) {\n const arbVariant = parseArbitraryVariant(v);\n if (arbVariant && arbVariant.includes('&')) {\n const idx = arbVariant.indexOf('&');\n const pre = arbVariant.slice(0, idx);\n const post = arbVariant.slice(idx + 1);\n finalSelector = `${pre}${finalSelector}${post}`;\n }\n }\n\n let wrappedCSS = `${finalSelector}{${body}}`;\n\n // Apply dark mode\n if (hasDark) {\n wrappedCSS = `@media (prefers-color-scheme: dark){${wrappedCSS}}`;\n }\n\n // Apply container queries\n if (containerVariants.length > 0) {\n const lastContainer = containerVariants[containerVariants.length - 1];\n if (lastContainer.startsWith('@[') && lastContainer.endsWith(']')) {\n const value = lastContainer.slice(2, -1);\n if (\n /^-?\\d*\\.?\\d+(px|rem|em|%|vh|vw|ch|ex|cm|mm|in|pt|pc)$/.test(\n value,\n )\n ) {\n wrappedCSS = `@container (min-width:${value}){${wrappedCSS}}`;\n }\n } else {\n const containerKey = lastContainer.slice(1);\n const sizes: Record<string, string> = {\n xs: '20rem',\n sm: '24rem',\n md: '28rem',\n lg: '32rem',\n xl: '36rem',\n '2xl': '42rem',\n '3xl': '48rem',\n '4xl': '56rem',\n '5xl': '64rem',\n '6xl': '72rem',\n '7xl': '80rem',\n };\n const breakpoint = sizes[containerKey];\n if (breakpoint) {\n // Extract container name from class if present (e.g., @container-name/lg)\n const containerName = cls.match(/@([^/]+)\\//)?.[1] || '';\n wrappedCSS = containerName\n ? `@container ${containerName} (min-width: ${breakpoint}){${wrappedCSS}}`\n : `@container (min-width: ${breakpoint}){${wrappedCSS}}`;\n }\n }\n }\n\n // Apply responsive variants\n if (responsiveVariants.length > 0) {\n const lastResponsive =\n responsiveVariants[responsiveVariants.length - 1];\n const mediaQuery = `@media ${mediaVariants[lastResponsive]}`;\n wrappedCSS = `${mediaQuery}{${wrappedCSS}}`;\n }\n\n buckets[bucketNum].push(wrappedCSS);\n }\n continue;\n }\n\n // Regular utilities - already have parts, variants, base from above\n const basePart = parts.find((p) => {\n const cleaned = p.replace(/^!/, '').replace(/!$/, '');\n return (\n utilityMap[cleaned] ||\n parseSpacing(cleaned) ||\n parseSpaceUtility(cleaned) ||\n parseOpacity(cleaned) ||\n parseColorWithOpacity(cleaned) ||\n parseGradientColorStop(cleaned) ||\n parseArbitrary(cleaned)\n );\n });\n if (!basePart) continue;\n\n const baseIndex = parts.indexOf(basePart);\n const variantsForBucket = baseIndex >= 0 ? parts.slice(0, baseIndex) : [];\n const bucketNum = classify(variantsForBucket);\n\n const rule = generateRuleCached(cls);\n if (rule) buckets[bucketNum].push(rule);\n }\n\n // Ensure explicit gradient color-stop classes generate rules.\n // Some gradient utilities emit variable-based bodies that are\n // picked up via combined selectors; to make the output explicit and\n // testable we generate standalone rules for any from-*/via-*/to-*\n // classes so their selectors are present in the CSS output.\n const gradientStopRegex = /^(from|via|to)-[a-z]+-?\\d{2,3}?$/;\n // Snapshot the generated CSS once before iterating — avoids calling\n // buckets.flat().join('') O(N) times inside the loop.\n const preGradientCSS = buckets.flat().join('');\n for (const cls of seen) {\n if (gradientStopRegex.test(cls)) {\n if (preGradientCSS.includes(escapeClassName(cls))) continue;\n const generated = generateRuleCached(cls);\n if (generated) buckets[0].push(generated);\n }\n }\n\n // Sort rules within buckets to ensure proper CSS cascade order.\n // Larger breakpoints must come after smaller ones for correct precedence.\n // Uses module-level _getResponsivePixels / _getContainerPixels helpers so\n // the lookup tables are not re-allocated on every sort comparison.\n const sortRulesByBreakpoint = (rules: string[]): string[] => {\n return rules.sort((a, b) => {\n const aRespPx = _getResponsivePixels(a);\n const bRespPx = _getResponsivePixels(b);\n const aContPx = _getContainerPixels(a);\n const bContPx = _getContainerPixels(b);\n\n if (aRespPx >= 0 && bRespPx >= 0 && aRespPx !== bRespPx)\n return aRespPx - bRespPx;\n\n if (aContPx >= 0 && bContPx >= 0 && aContPx !== bContPx)\n return aContPx - bContPx;\n\n return 0;\n });\n };\n\n // Sort buckets 2 and 4 which contain responsive/container queries.\n // Bucket 3 (dark-only) needs no sort — all its rules share the same\n // @media (prefers-color-scheme: dark) wrapper with no breakpoint dimension.\n buckets[2] = sortRulesByBreakpoint(buckets[2]);\n buckets[4] = sortRulesByBreakpoint(buckets[4]);\n\n const css = buckets.flat().join('');\n\n // Cache size management: evict the LRU half when the cache is full.\n // Map preserves insertion order and the hit path (delete + re-insert)\n // promotes accessed entries to the end, so entries at the front are\n // always the least-recently-used ones. Iterate keys directly to avoid\n // allocating an intermediate array.\n if (jitCssCache.size >= MAX_CACHE_SIZE) {\n let evictCount = Math.floor(MAX_CACHE_SIZE / 2);\n for (const key of jitCssCache.keys()) {\n if (evictCount-- === 0) break;\n jitCssCache.delete(key);\n }\n }\n\n jitCssCache.set(cacheKey, css);\n return css;\n}\n"],"names":["proseSizes","generateProseCSS","className","match","variant","size","selector","rules","proseElements","generateProseElementModifier","utilityMap","parseSpacing","parseSpaceUtility","parseOpacity","parseColorWithOpacity","parseGradientColorStop","parseArbitrary","element","utility","elementSelector","utilityCSS","escapedClass","cssEscape","sel","elementSel","proseSheet","detectedProseSizes","proseCSSCache","proseSizesSnapshot","buildProseCSS","snapshot","combinedProseCSS","css","minifyCSS","getProseSheet","registerProseSize","sizesChanged","fallbackHex","colors","name","shades","shade","hex","_activeColors","rebuildActiveColors","options","families","extendedColors","_globalJITCSSOptions","_bridgeRegistered","_ensureBridgeRegistered","_registerRenderBridge","isJITCSSEnabledFor","jitCSS","_jitCSSEnabled","_jitCSSEnabledComponents","isJITCSSEnabled","root","registerJITCSSComponent","merged","jitCssCache","enableJITCSS","disableJITCSS","getJITCSSOptions","semanticSizes","spacingProps","generateUtilities","utils","d","p","i","lineHeight","value","borderWidths","w","px","radiusMap","key","rem","cursors","c","z","spacing","TRANSFORM_COMPOSE","tx","v","ty","FILTER_COMPOSE","BACKDROP_FILTER_COMPOSE","parseProseClass","parseProseElementModifier","insertPseudoBeforeCombinator","pseudo","depth","ch","selectorVariants","body","mediaVariants","containerVariants","responsiveOrder","containerOrder","negative","raw","lastDashIndex","valueStr","numerator","denominator","percentage","prop","num","sign","direction","isHorizontal","hexToRgb","clean","bigint","colorRegex","propMap","parseColorClass","type","colorName","colorValue","parseOpacityModifier","slashIndex","base","opacityStr","opacity","paletteRule","varMatch","varExpr","pct","mix","fallbackHexMatch","propMatch","rgbExpr","varWithRgbFallback","rgb","arbitraryRule","position","inner","colonIndex","bracketStart","propMappings","cssProp","parseArbitraryVariant","token","extractClassesFromHTML","html","classList","_classAttrRegex","tokens","_responsiveSizePx","_containerSizePx","_getResponsivePixels","rule","_getContainerPixels","unit","MAX_CACHE_SIZE","classes","seen","cacheKey","cached","buckets","ruleCache","generateRuleCached","cls","stripDark","result","generateRule","classify","variants","hasResponsive","t","hasContainer","hasDark","splitVariants","input","parts","current","pseudoMap","basePart","important","part","checkPart","cleanBase","baseRule","baseIndex","escapeClassName","SUBJECT","structural","subjectPseudos","innerPseudos","wrapperVariant","hasStartingStyle","supportsTokens","attrSel","variantSelector","fn","subjectPseudoStr","innerPseudoStr","insertPseudosIntoPost","post","pseudos","depthSquare","depthParen","idx","pre","subjectWithPseudos","postWithInner","DUAL_TOKEN","rulesArray","responsiveTokens","containerTokens","lastResponsive","lastContainer","_disabledGroups","mediaQuery","containerQuery","containerKey","supportsQuery","supportsValue","wrapRule","r","proseCSS","baseClassEscaped","variantCSS","escapeRegExp","responsiveVariants","bucketNum","proseModIndex","potentialProseMod","proseModBase","baseProseCSS","fullEscaped","baseEscaped","fullProseCSS","ruleRegex","matches","prosePseudoMap","structuralVariants","pseudoVariants","arbitraryVariants","baseClassSelector","finalSelector","pseudoStr","arbVariant","wrappedCSS","breakpoint","containerName","cleaned","variantsForBucket","gradientStopRegex","preGradientCSS","generated","sortRulesByBreakpoint","a","b","aRespPx","bRespPx","aContPx","bContPx","evictCount"],"mappings":"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"}